From 3935a127bdce991cc39049ae09c764de9e19c215 Mon Sep 17 00:00:00 2001 From: alpine9000 Date: Tue, 31 May 2016 19:28:58 +1000 Subject: [PATCH] car sprite, hiscore improvements --- 028.bs/Makefile | 27 +++++++++++++++ 028.bs/assets/assets.png | Bin 11956 -> 14171 bytes 028.bs/assets/car.pal | 4 +++ 028.bs/game1.s | 4 +-- 028.bs/highscore.s | 63 +++++++++++++---------------------- 028.bs/menu.s | 30 +++++------------ 028.bs/player.s | 10 ++++++ 028.bs/splash.s | 31 ++++++++++++++++++ 028.bs/sprite_data.i | 69 +++++++++++++++++++++++++++++++++++++++ 9 files changed, 175 insertions(+), 63 deletions(-) create mode 100644 028.bs/assets/car.pal diff --git a/028.bs/Makefile b/028.bs/Makefile index 9bcf830..47fa3fb 100644 --- a/028.bs/Makefile +++ b/028.bs/Makefile @@ -47,6 +47,14 @@ IMAGES=foreground.png \ sprite_tank-5.png \ sprite_tank-6.png \ sprite_tank-7.png \ + sprite_car-0.png \ + sprite_car-1.png \ + sprite_car-2.png \ + sprite_car-3.png \ + sprite_car-4.png \ + sprite_car-5.png \ + sprite_car-6.png \ + sprite_car-7.png \ sprite_coin-0.png \ sprite_coin-1.png \ sprite_coin-2.png \ @@ -60,6 +68,11 @@ IMAGES=foreground.png \ sprite_fallingPig-2.png \ sprite_fallingPig-3.png \ sprite_fallingPig-4.png \ + sprite_fallingCar-0.png \ + sprite_fallingCar-1.png \ + sprite_fallingCar-2.png \ + sprite_fallingCar-3.png \ + sprite_fallingCar-4.png \ sprite_fallingRobot-0.png \ sprite_fallingRobot-1.png \ sprite_fallingRobot-2.png \ @@ -130,6 +143,9 @@ out/mpanel.bin: assets/mpanel.png out/sprite_pig-%.bin: out/sprite_pig-%.png $(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_pig-$* --palette-offset 16 --use-palette=assets/pig.pal +out/sprite_car-%.bin: out/sprite_car-%.png + $(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_car-$* --palette-offset 16 --use-palette=assets/car.pal + out/sprite_robot-%.bin: out/sprite_robot-%.png $(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_robot-$* --palette-offset 16 --use-palette=assets/robot.pal @@ -140,6 +156,9 @@ out/sprite_tank-%.bin: out/sprite_tank-%.png out/sprite_fallingPig-%.bin: out/sprite_fallingPig-%.png $(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_fallingPig-$* --palette-offset 16 --use-palette=assets/pig.pal +out/sprite_fallingCar-%.bin: out/sprite_fallingCar-%.png + $(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_fallingCar-$* --palette-offset 16 --use-palette=assets/car.pal + out/sprite_fallingRobot-%.bin: out/sprite_fallingRobot-%.png $(IMAGECON) --input $< $(IMAGECON_ARGS) --colors 4 --output-bitplanes --output-palette --full-color-palette-file --output-palette-asm --output-palette --output-png --output-copperlist --output out/sprite_fallingRobot-$* --palette-offset 16 --use-palette=assets/robot.pal @@ -166,6 +185,10 @@ out/sprite_arrow%.bin: out/sprite_arrow%.png out/sprite_pig%.png: assets/assets.png ../tools/croppa/out/croppa --input=assets/assets.png --output=out/sprite_pig --width=16 --height=16 --rows=1 --cols=8 --dx=16 --dy=16 --x=192 --y=112 +.SECONDARY: +out/sprite_car%.png: assets/assets.png + ../tools/croppa/out/croppa --input=assets/assets.png --output=out/sprite_car --width=16 --height=16 --rows=1 --cols=8 --dx=16 --dy=16 --x=192 --y=0 + out/mpanelOrig.png: assets/mpanel.png ../tools/croppa/out/croppa --input=assets/mpanel.png --output=out/mpanelOrig.png --width=320 --height=16 --rows=1 --cols=1 --dx=0 --dy=0 --x=0 --y=8 @@ -181,6 +204,10 @@ out/sprite_tank%.png: assets/assets.png out/sprite_fallingPig%.png: assets/assets.png ../tools/croppa/out/croppa --input=assets/assets.png --output=out/sprite_fallingPig --width=16 --height=16 --rows=1 --cols=5 --dx=16 --dy=16 --x=192 --y=128 +.SECONDARY: +out/sprite_fallingCar%.png: assets/assets.png + ../tools/croppa/out/croppa --input=assets/assets.png --output=out/sprite_fallingCar --width=16 --height=16 --rows=1 --cols=5 --dx=16 --dy=16 --x=192 --y=32 + .SECONDARY: out/sprite_fallingRobot%.png: assets/assets.png ../tools/croppa/out/croppa --input=assets/assets.png --output=out/sprite_fallingRobot --width=16 --height=16 --rows=1 --cols=5 --dx=16 --dy=16 --x=192 --y=192 diff --git a/028.bs/assets/assets.png b/028.bs/assets/assets.png index 69d7df3e63c6d0a918e4b98e140af9c0d20ce5a5..25f9e94b9d626a3cf6c28028d48c6a2b3d8d914d 100644 GIT binary patch delta 13198 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 Q34s5pD{CoLDp&^o59fa^+5i9m diff --git a/028.bs/assets/car.pal b/028.bs/assets/car.pal new file mode 100644 index 0000000..722ac21 --- /dev/null +++ b/028.bs/assets/car.pal @@ -0,0 +1,4 @@ +000 000 000 255 +252 011 042 255 +041 034 055 255 +152 148 165 255 diff --git a/028.bs/game1.s b/028.bs/game1.s index f4b78b3..4c445d0 100644 --- a/028.bs/game1.s +++ b/028.bs/game1.s @@ -899,12 +899,12 @@ BlitCountdown: Level 96,"PRESS FIRE TO ACTIVATE THE CLOCK",200,2*2,12,10,"EYES WILL UNHIDE THE BOARD",A,21,0,1,pig Level 97,"PRESS FIRE TO ACTIVATE THE EYE",100,2*2,12,10,"LEVEL 7",A,21,0,1,pig - Level 1,"WELCOME TO BLOCKY SKIESL!",75,2*2,12,10,"PHEW!, LEVEL 1 COMPLETE!",A,99,0,1,pig + Level 1,"WELCOME TO BLOCKY SKIES!",75,2*2,12,10,"PHEW!, LEVEL 1 COMPLETE!",A,99,0,1,pig Level 2,"HAVING FUN YET?",70,2*2,12,10,"LEVEL 2",B,98,2,0,robot Level 3,"GIDDY UP!",50,4*2,8,6,"GETTING FASTER!, LEVEL 3 COMPLETE!",C,98,2,0,pig Level 4,"LETS GO?",25,4*2,8,6,"LEVEL 4 COMPLETE",C,98,2,0,robot Level 5,"KABOOM?!",75,4*2,8,6,"PHEW!!! LEVEL 5 COMPLETE!",D,99,1,0,tank - Level 6,"WHAT? WHAT?!",50,4*2,8,6,"NICE! LEVEL 6 COMPLETE!",A,98,1,0,tank + Level 6,"WHAT? WHAT?!",50,4*2,8,6,"NICE! LEVEL 6 COMPLETE!",A,98,1,0,car Palette A diff --git a/028.bs/highscore.s b/028.bs/highscore.s index 143a920..c90a48e 100644 --- a/028.bs/highscore.s +++ b/028.bs/highscore.s @@ -8,37 +8,23 @@ SPLASH_SCREEN_WIDTH_BYTES equ 40 PLAY_COPPER_WORD equ $aad1 -MENU_TITLE_TOP_COLOR equ $be0 ;$e71 -MENU_TITLE_BOTTOM_COLOR equ $9d4 ;$fe7 -MENU_SELECTED_TOP_COLOR equ $f30 -MENU_SELECTED_BOTTOM_COLOR equ $d10 +MENU_TITLE_TOP_COLOR equ $7ef +MENU_TITLE_BOTTOM_COLOR equ $5cd +MENU_SELECTED_TOP_COLOR equ $4d2 +MENU_SELECTED_BOTTOM_COLOR equ $3e1 MENU_TEXT_COLOR equ $7ef -MENU_TEXT_BOTTOM_COLOR equ $5cd +MENU_TEXT_BOTTOM_COLOR equ $5cd +MENU_FIRE_TOP_COLOR equ $be0 ;$e71 +MENU_FIRE_BOTTOM_COLOR equ $9d4 ;$fe7 MENU_BOTTOM_OFFSET equ (firstBottomColor-firstTopColor) MENU_OFFSET equ (secondTopColor-firstTopColor) ShowHighScore: lea CUSTOM,a6 - jsr ReloadSplashScreen bsr HighlightScore - lea splash,a0 - add.l #(150*40*5)+((320-96)/16),a0 - - WaitBlitter - move.w #(BC0F_SRCA|BC0F_DEST|$f0),BLTCON0(A6) - move.w #0,BLTCON1(a6) - move.l #$ffffffff,BLTAFWM(a6) ;no masking of first/last word - move.w #(320-96)/8,BLTAMOD(a6) ;A modulo - move.w #0,BLTDMOD(a6) ;D modulo - move.l a0,BLTAPTH(a6) ;source graphic top left corner - move.l backgroundOffscreen,BLTDPTH(a6) ;destination top left corner - move.w #((64*5)<<6)|(96/16),BLTSIZE(a6) - -ReShowMenu: - move.w #1,splashInvalid jsr WaitVerticalBlank ;; set up default palette include "out/menu-palette.s" @@ -77,34 +63,17 @@ ReShowMenu: move.w #(INTF_SETCLR|INTF_VERTB|INTF_INTEN),INTENA(a6) bsr RenderHighScore - jsr WaitForJoystick jmp ShowMenu RenderHighScore: - move.l backgroundOffscreen,a0 - lea splash,a2 - add.l #(150*40*5)+((320-96)/16),a2 - - WaitBlitter - move.w #(BC0F_SRCA|BC0F_DEST|$f0),BLTCON0(A6) - move.w #0,BLTCON1(a6) - move.l #$ffffffff,BLTAFWM(a6) ;no masking of first/last word - move.w #0,BLTAMOD(a6) ;A modulo - move.w #(320-96)/8,BLTDMOD(a6) ;D modulo - move.l a0,BLTAPTH(a6) ;source graphic top left corner - move.l a2,BLTDPTH(a6) ;destination top left corner - move.w #((64*5)<<6)|(96/16),BLTSIZE(a6) - lea highScore,a1 lea splash,a0 move.w #(320/2)-(6*8)+4,d0 move.w #150-16,d1 jsr DrawMaskedText85 - lea highScores,a2 - .loop: move.w #9,d2 move.l (a2)+,d0 @@ -116,6 +85,11 @@ RenderHighScore: jsr DrawMaskedText85 cmp.l #endHighScores,a2 bne .loop + lea splash,a0 + lea pressFire,a1 + move.l #(320/2)-(6*8),d0 + add.w #16,d1 + jsr DrawMaskedText85 rts AddHighScore: @@ -127,7 +101,6 @@ AddHighScore: cmp.l #highScores,a0 blt .next bra .loop1 - .next: move.l #endHighScores-4,a0 .loop: @@ -170,6 +143,10 @@ highScore: dc.b " HI SCORES " dc.b 0 +pressFire: + dc.b " PRESS FIRE " + dc.b 0 + align 4 highScores: dc.l 10000 @@ -237,6 +214,12 @@ secondTopColor: dc.w MENU_TEXT_COLOR dc.w $ffdf,$fffe dc.w $06df,$fffe - dc.w COLOR31,MENU_TEXT_BOTTOM_COLOR + dc.w COLOR31,MENU_FIRE_BOTTOM_COLOR + dc.w $9df,$fffe + dc.w COLOR31 + dc.w MENU_FIRE_TOP_COLOR + dc.w $16df,$fffe + dc.w COLOR31,MENU_FIRE_BOTTOM_COLOR + dc.l $fffffffe diff --git a/028.bs/menu.s b/028.bs/menu.s index 0806fd3..c0aee68 100644 --- a/028.bs/menu.s +++ b/028.bs/menu.s @@ -18,22 +18,9 @@ MENU_BOTTOM_OFFSET equ (playBottomColor-playTopColor) ShowMenu: lea CUSTOM,a6 - - jsr ReloadSplashScreen - - lea splash,a0 - add.l #(150*40*5)+((320-96)/16),a0 - - WaitBlitter - move.w #(BC0F_SRCA|BC0F_DEST|$f0),BLTCON0(A6) - move.w #0,BLTCON1(a6) - move.l #$ffffffff,BLTAFWM(a6) ;no masking of first/last word - move.w #(320-96)/8,BLTAMOD(a6) ;A modulo - move.w #0,BLTDMOD(a6) ;D modulo - move.l a0,BLTAPTH(a6) ;source graphic top left corner - move.l backgroundOffscreen,BLTDPTH(a6) ;destination top left corner - move.w #((64*5)<<6)|(96/16),BLTSIZE(a6) - + jsr ReloadSplashScreen + jsr RestoreSplashMenuSection + ReShowMenu: jsr WaitVerticalBlank ;; set up default palette @@ -79,12 +66,13 @@ ReShowMenu: jsr WaitVerticalBlank jsr _ProcessJoystick - - RenderMenu: + ;; small restore + move.l backgroundOffscreen,a0 + add.l #((64)*(96/16)*5),a0 lea splash,a2 - add.l #(150*40*5)+((320-96)/16),a2 + add.l #((134+32)*40*5)+((320-96)/16),a2 WaitBlitter move.w #(BC0F_SRCA|BC0F_DEST|$f0),BLTCON0(A6) @@ -94,8 +82,8 @@ RenderMenu: move.w #(320-96)/8,BLTDMOD(a6) ;D modulo move.l a0,BLTAPTH(a6) ;source graphic top left corner move.l a2,BLTDPTH(a6) ;destination top left corner - move.w #((64*5)<<6)|(96/16),BLTSIZE(a6) - + move.w #((32*5)<<6)|(96/16),BLTSIZE(a6) + lea menu,a1 lea splash,a0 move.w #(320/2)-(6*8)+4,d0 diff --git a/028.bs/player.s b/028.bs/player.s index cbfaed4..8cec4ae 100644 --- a/028.bs/player.s +++ b/028.bs/player.s @@ -26,6 +26,7 @@ xdef playerLevelMissPixels xdef pigPlayerSpriteConfig + xdef carPlayerSpriteConfig xdef robotPlayerSpriteConfig xdef tankPlayerSpriteConfig xdef playerSpriteConfig @@ -299,6 +300,10 @@ InstallPigColorPalette: include "out/sprite_pig-0-palette.s" rts +InstallCarColorPalette: + include "out/sprite_car-0-palette.s" + rts + InstallRobotColorPalette: include "out/sprite_robot-0-palette.s" rts @@ -620,6 +625,11 @@ pigPlayerSpriteConfig: dc.l spritePig dc.l spriteFalling1 +carPlayerSpriteConfig: + dc.l InstallCarColorPalette + dc.l spriteCar + dc.l spriteFallingCar1 + robotPlayerSpriteConfig: dc.l InstallRobotColorPalette dc.l spriteRobot diff --git a/028.bs/splash.s b/028.bs/splash.s index 23d3ccd..b26211e 100644 --- a/028.bs/splash.s +++ b/028.bs/splash.s @@ -2,12 +2,29 @@ xdef ShowSplash xdef ReloadSplashScreen + xdef RestoreSplashMenuSection xdef splash xdef splashInvalid SPLASH_COLOR_DEPTH equ 5 SPLASH_SCREEN_WIDTH_BYTES equ 40 +RestoreSplashMenuSection: + move.l backgroundOffscreen,a0 + lea splash,a2 + add.l #(134*40*5)+((320-96)/16),a2 + + WaitBlitter + move.w #(BC0F_SRCA|BC0F_DEST|$f0),BLTCON0(A6) + move.w #0,BLTCON1(a6) + move.l #$ffffffff,BLTAFWM(a6) ;no masking of first/last word + move.w #0,BLTAMOD(a6) ;A modulo + move.w #(320-96)/8,BLTDMOD(a6) ;D modulo + move.l a0,BLTAPTH(a6) ;source graphic top left corner + move.l a2,BLTDPTH(a6) ;destination top left corner + move.w #((112*5)<<6)|(96/16),BLTSIZE(a6) + rts + ReloadSplashScreen: cmp.w #0,splashInvalid beq .skip @@ -16,6 +33,20 @@ ReloadSplashScreen: move.l #splash,a0 move.l #diskSplash,a1 jsr LoadDiskData + + lea splash,a0 + add.l #(134*40*5)+((320-96)/16),a0 + + WaitBlitter + move.w #(BC0F_SRCA|BC0F_DEST|$f0),BLTCON0(A6) + move.w #0,BLTCON1(a6) + move.l #$ffffffff,BLTAFWM(a6) ;no masking of first/last word + move.w #(320-96)/8,BLTAMOD(a6) ;A modulo + move.w #0,BLTDMOD(a6) ;D modulo + move.l a0,BLTAPTH(a6) ;source graphic top left corner + move.l backgroundOffscreen,BLTDPTH(a6) ;destination top left corner + move.w #((112*5)<<6)|(96/16),BLTSIZE(a6) + .skip: rts diff --git a/028.bs/sprite_data.i b/028.bs/sprite_data.i index 0b352f3..0129d91 100644 --- a/028.bs/sprite_data.i +++ b/028.bs/sprite_data.i @@ -124,6 +124,48 @@ spriteTankRightJump: dc.w 0,0 incbin "out/sprite_tank-2.bin" ; 7, right jump dc.l 0 + +spriteCar: +spriteCarUp: + dc.w 0,0 + dc.w 0,0 + incbin "out/sprite_car-1.bin" ; 0, up + dc.l 0 +spriteCarUpJump: + dc.w 0,0 + dc.w 0,0 + incbin "out/sprite_car-0.bin" ; 1, up jump + dc.l 0 +spriteCarDown: + dc.w 0,0 + dc.w 0,0 + incbin "out/sprite_car-5.bin" ; 2, down + dc.l 0 +spriteCarDownJump: + dc.w 0,0 + dc.w 0,0 + incbin "out/sprite_car-4.bin" ; 3, down jump + dc.l 0 +spriteCarLeft: + dc.w 0,0 + dc.w 0,0 + incbin "out/sprite_car-7.bin" ; 4, left + dc.l 0 +spriteCarLeftJump: + dc.w 0,0 + dc.w 0,0 + incbin "out/sprite_car-6.bin" ; 5, left jump + dc.l 0 +spriteCarRight: + dc.w 0,0 + dc.w 0,0 + incbin "out/sprite_car-3.bin" ; 6, right + dc.l 0 +spriteCarRightJump: + dc.w 0,0 + dc.w 0,0 + incbin "out/sprite_car-2.bin" ; 7, right jump + dc.l 0 spriteFalling0: dc.w 0,0 @@ -203,4 +245,31 @@ spriteFallingTank4: dc.w 0,0 dc.w 0,0 incbin "out/sprite_fallingTank-4.bin" + dc.l 0 + + +spriteFallingCar0: + dc.w 0,0 + dc.w 0,0 + incbin "out/sprite_fallingCar-0.bin" + dc.l 0 +spriteFallingCar1: + dc.w 0,0 + dc.w 0,0 + incbin "out/sprite_fallingCar-1.bin" + dc.l 0 +spriteFallingCar2: + dc.w 0,0 + dc.w 0,0 + incbin "out/sprite_fallingCar-2.bin" + dc.l 0 +spriteFallingCar3: + dc.w 0,0 + dc.w 0,0 + incbin "out/sprite_fallingCar-3.bin" + dc.l 0 +spriteFallingCar4: + dc.w 0,0 + dc.w 0,0 + incbin "out/sprite_fallingCar-4.bin" dc.l 0 \ No newline at end of file