From bc0049edaf8abebc4dff287de07495741bb65720 Mon Sep 17 00:00:00 2001 From: Colin McMillen Date: Sun, 7 Jun 2015 13:23:07 -0400 Subject: [PATCH] Add "Game Over" screen & restart game afterwards. --- pewpew.asm | 180 +++++++++++++++++++++++++++++++++++++++++--------- sprites32.pcx | Bin 2857 -> 3135 bytes 2 files changed, 150 insertions(+), 30 deletions(-) diff --git a/pewpew.asm b/pewpew.asm index dcb64af..6e87196 100644 --- a/pewpew.asm +++ b/pewpew.asm @@ -223,9 +223,22 @@ LoadPaletteAndTileData: InitWorld: - ; Start the background color as a dark blue. - lda #4 - sta backgroundBlue + ; Start the background color as black. + stz backgroundRed + stz backgroundGreen + stz backgroundBlue + + ; Clear the memory that's used to keep track of normal game state. + SetA16Bit + lda #0 + ldx #$20 +- + sta 0, X + inx + inx + cpx #$1000 + bne - + SetA8Bit ; Initial enemy ship-spawn cooldown. lda #30 @@ -292,7 +305,15 @@ MainLoop: sta NMITIMEN jsr JoypadRead + + lda playerHealth + cmp #0 + beq + jsr UpdateWorld + bra ++ ++ + jsr GameOver +++ jsr UpdateSprites jsr FillSecondarySpriteTable jsr SetBackgroundColor @@ -300,6 +321,17 @@ MainLoop: +GameOver: + ; Wait until the player hits Start. + lda joy1 + 1 + bit #$10 ; Start + beq + + jsr InitWorld ++ + rts + + + JoypadRead: ; Load joypad registers into RAM for easy inspection & manipulation. - @@ -314,6 +346,7 @@ JoypadRead: +; TODO: move functions around to be in a more sensible order. JoypadHandler: JoypadUp: lda joy1 + 1 @@ -348,48 +381,30 @@ JoypadLeft: JoypadRight: lda joy1 + 1 bit #$01 ; Right - beq JoypadStart ; Button not pressed. + beq JoypadY ; Button not pressed. lda playerX cmp #(256 - 32) - beq JoypadStart ; Value saturated. + beq JoypadY ; Value saturated. inc playerX inc playerX -JoypadStart: - lda joy1 + 1 - bit #$10 ; Start - beq JoypadSelect ; Button not pressed. - lda backgroundRed - cmp #31 - beq JoypadSelect ; Value saturated. - inc backgroundRed - -JoypadSelect: - lda joy1 + 1 - bit #$20 ; Select - beq JoypadY ; Button not pressed. - lda backgroundRed - cmp #0 - beq JoypadY ; Value saturated. - dec backgroundRed - JoypadY: lda joy1 + 1 bit #$40 ; Y beq JoypadX ; Button not pressed. - lda backgroundGreen + lda backgroundRed cmp #0 beq JoypadX ; Value saturated. - dec backgroundGreen + dec backgroundRed JoypadX: lda joy1 bit #$40 ; X beq JoypadL ; Button not pressed. - lda backgroundGreen + lda backgroundRed cmp #31 beq JoypadL ; Value saturated. - inc backgroundGreen + inc backgroundRed JoypadL: lda joy1 @@ -440,8 +455,6 @@ MaybeShoot: rts + ; Enable shot; set its position based on player position. - ; TODO: it might be easier/faster to keep N arrays: one for each - ; field of shot (shotSpriteArray, shotXArray, shotYArray, ...) lda #8 ; Sprite number. sta 0, X @@ -954,6 +967,8 @@ UpdateSprites: ; TODO: refactor into smaller pieces. ldx #0 ; Index into sprite table 1. ldy #0 ; Index into sprite table 2. + jsr MaybeGameOver + ; Copy player coords into sprite table. lda playerX sta spriteTableStart, X @@ -1031,7 +1046,6 @@ UpdateSprites: ; TODO: refactor into smaller pieces. ldy $00 ; Restore Y to its rightful self. ; Now add sprites to show player health. - ; TODO: why aren't they in front? stz $01 lda #4 sta $02 @@ -1087,6 +1101,112 @@ UpdateSprites: ; TODO: refactor into smaller pieces. +MaybeGameOver: + lda playerHealth + cmp #0 + beq + + rts ++ + ; Sprites to show "Game Over" text. + lda #80 ; G + sta spriteTableStart + 2, X + lda #112 + sta spriteTableStart, X + lda #104 + sta spriteTableStart + 1, X + lda #%00110000 + sta spriteTableStart + 3, X + lda #%01000000 ; Enable small sprite. + sta spriteTableScratchStart, Y + AdvanceSpritePointers + + lda #81 ; A + sta spriteTableStart + 2, X + lda #120 + sta spriteTableStart, X + lda #104 + sta spriteTableStart + 1, X + lda #%00110000 + sta spriteTableStart + 3, X + lda #%01000000 ; Enable small sprite. + sta spriteTableScratchStart, Y + AdvanceSpritePointers + + lda #82 ; M + sta spriteTableStart + 2, X + lda #128 + sta spriteTableStart, X + lda #104 + sta spriteTableStart + 1, X + lda #%00110000 + sta spriteTableStart + 3, X + lda #%01000000 ; Enable small sprite. + sta spriteTableScratchStart, Y + AdvanceSpritePointers + + lda #83 ; E + sta spriteTableStart + 2, X + lda #136 + sta spriteTableStart, X + lda #104 + sta spriteTableStart + 1, X + lda #%00110000 + sta spriteTableStart + 3, X + lda #%01000000 ; Enable small sprite. + sta spriteTableScratchStart, Y + AdvanceSpritePointers + + lda #84 ; O + sta spriteTableStart + 2, X + lda #112 + sta spriteTableStart, X + lda #114 + sta spriteTableStart + 1, X + lda #%00110000 + sta spriteTableStart + 3, X + lda #%01000000 ; Enable small sprite. + sta spriteTableScratchStart, Y + AdvanceSpritePointers + + lda #85 ; V + sta spriteTableStart + 2, X + lda #120 + sta spriteTableStart, X + lda #114 + sta spriteTableStart + 1, X + lda #%00110000 + sta spriteTableStart + 3, X + lda #%01000000 ; Enable small sprite. + sta spriteTableScratchStart, Y + AdvanceSpritePointers + + lda #83 ; E + sta spriteTableStart + 2, X + lda #128 + sta spriteTableStart, X + lda #114 + sta spriteTableStart + 1, X + lda #%00110000 + sta spriteTableStart + 3, X + lda #%01000000 ; Enable small sprite. + sta spriteTableScratchStart, Y + AdvanceSpritePointers + + lda #86 ; R + sta spriteTableStart + 2, X + lda #136 + sta spriteTableStart, X + lda #114 + sta spriteTableStart + 1, X + lda #%00110000 + sta spriteTableStart + 3, X + lda #%01000000 ; Enable small sprite. + sta spriteTableScratchStart, Y + AdvanceSpritePointers + rts + + + ; Expects: ; A: number to display (a byte where each nybble is from 0-9). ; X/Y: pointing at appropriate locations into the sprite tables. diff --git a/sprites32.pcx b/sprites32.pcx index c64a7a1766eb5da80de7f59612dc068bc5902bbb..b6a61da9469d2ba983d68886ee533cbac7c956a4 100644 GIT binary patch delta 361 zcmZ1}wqIgHIeYyfhNE0Z7!GqCW;g`K49B@ZLWf}7V_Yv8xb8E+g%5K96$5!71lRGO z;Uoi)cMKtd%!4X}P-sf)feINwCIRh)I{}-9Lr`m>a!9HnE;`2bpWzh95g=1AD45G2 zUW2Ly`M?WBJ=j}^kwOFHT9n{`nhy!2qYS{HgNOhXPOfK{ojie^jq&;9kL>1?AF!)z J*5F`d1^}cHe#-y= delta 35 qcmdllu~KY9Is4=T97-(58My9GX5`dn<@(R?p8?3S-K@YV&kO+BISQiy