From 883d882d0e64bef2d2f65b7bad3e125b1d4313a7 Mon Sep 17 00:00:00 2001 From: Jeremy Rand Date: Mon, 27 Jul 2020 22:27:18 -0400 Subject: [PATCH] Provide an API to set the default speed of a flea or a scorpion. This will allow the speed to be changed for different levels in the game. Need to add this API for spiders also. --- BuGS/game.s | 22 +++++++++++++++++++-- BuGS/gameFlea.s | 47 ++++++++++++++++++++++++++++++--------------- BuGS/gameScorpion.s | 31 ++++++++++++++++-------------- BuGS/globals.s | 3 +++ 4 files changed, 72 insertions(+), 31 deletions(-) diff --git a/BuGS/game.s b/BuGS/game.s index 294c3c2..4409e77 100644 --- a/BuGS/game.s +++ b/BuGS/game.s @@ -686,6 +686,11 @@ checkKey_loop2 anop cmp #'P' beq checkKey_shootSpider + cmp #'+' + beq checkKey_fast + cmp #'-' + beq checkKey_slow + lda colourPalette inc a cmp #NUM_COLOUR_PALETTES @@ -695,6 +700,9 @@ checkKey_skip anop sta colourPalette jmp setColour +checkKey_done anop + rtl + checkKey_addFlea anop jmp addFlea @@ -713,10 +721,20 @@ checkKey_addSpider anop checkKey_shootSpider anop jmp shootSpider +checkKey_fast anop + lda #SPRITE_SPEED_FAST + jsl setFleaSpeed + lda #SPRITE_SPEED_FAST + jmp setScorpionSpeed + +checkKey_slow anop + lda #SPRITE_SPEED_SLOW + jsl setFleaSpeed + lda #SPRITE_SPEED_SLOW + jmp setScorpionSpeed + checkKey_quit anop stz shouldQuit - -checkKey_done anop rtl diff --git a/BuGS/gameFlea.s b/BuGS/gameFlea.s index 92ffec2..6213b12 100644 --- a/BuGS/gameFlea.s +++ b/BuGS/gameFlea.s @@ -17,7 +17,8 @@ FLEA_STATE_NONE equ 0 FLEA_STATE_FALLING equ 1 FLEA_STATE_EXPLODING equ 2 -FLEA_SCREEN_SPEED equ 2*SCREEN_BYTES_PER_ROW +FLEA_SCREEN_SPEED_SLOW equ 2*SCREEN_BYTES_PER_ROW +FLEA_SCREEN_SPEED_FAST equ 4*SCREEN_BYTES_PER_ROW FLEA_SLOW_UPDATES_PER_TILE equ TILE_PIXEL_HEIGHT/2-1 FLEA_FAST_UPDATES_PER_TILE equ TILE_PIXEL_HEIGHT/4-1 @@ -198,16 +199,15 @@ addFlea entry lda fleaState bne addFlea_done + lda fleaSpriteSpeed + jsl setFleaSpeed + lda #FLEA_STATE_FALLING sta fleaState - lda #FLEA_SLOW_UPDATES_PER_TILE - sta fleaUpdatePerTile + lda fleaUpdatePerTile sta fleaHeightInTile - lda #FLEA_SCREEN_SPEED - sta fleaSpeed - stz fleaSpriteCounter lda #FLEA_SPRITE_LAST_OFFSET sta fleaSprite @@ -233,13 +233,34 @@ addFlea entry addFlea_done anop rtl + +setFleaSpeed entry + sta fleaSpriteSpeed + cmp #SPRITE_SPEED_FAST + beq setFleaSpeed_fast + + lda #FLEA_SCREEN_SPEED_SLOW + sta fleaSpeed + lda #FLEA_SLOW_UPDATES_PER_TILE + sta fleaUpdatePerTile + rtl + +setFleaSpeed_fast anop + lda #FLEA_SCREEN_SPEED_FAST + sta fleaSpeed + lda #FLEA_FAST_UPDATES_PER_TILE + sta fleaUpdatePerTile + rtl + + shootFlea entry +; TODO - Increment the score lda fleaState cmp #FLEA_STATE_FALLING bne shootFlea_done lda fleaSpeed - cmp #FLEA_SCREEN_SPEED + cmp #FLEA_SCREEN_SPEED_SLOW beq shootFlea_faster lda #FLEA_STATE_EXPLODING @@ -251,11 +272,7 @@ shootFlea entry rtl shootFlea_faster anop - asl a - sta fleaSpeed - - lda #FLEA_FAST_UPDATES_PER_TILE - sta fleaUpdatePerTile + jsl setFleaSpeed_fast lda fleaHeightInTile lsr a @@ -266,7 +283,6 @@ shootFlea_faster anop sec sbc #SCREEN_BYTES_PER_ROW sta fleaScreenOffset -; TODO - Increment the score shootFlea_done anop rtl @@ -288,7 +304,8 @@ fleaJumpTable dc i4'flea4' dc i4'flea2' dc i4'flea1' -fleaSpeed dc i2'0' -fleaUpdatePerTile dc i2'0' +fleaSpriteSpeed dc i2'SPRITE_SPEED_SLOW' +fleaSpeed dc i2'FLEA_SCREEN_SPEED_SLOW' +fleaUpdatePerTile dc i2'FLEA_SLOW_UPDATES_PER_TILE' end diff --git a/BuGS/gameScorpion.s b/BuGS/gameScorpion.s index 07506b0..43ecbb6 100644 --- a/BuGS/gameScorpion.s +++ b/BuGS/gameScorpion.s @@ -256,14 +256,10 @@ updateScorpion_explosionDone anop rtl -addScorpion entry - lda scorpionState - beq addScorpion_doit - rtl - -addScorpion_doit anop -; TODO - Add code to select between fast or slow scorpions based on the level -; bra addScorpion_fast +setScorpionSpeed entry +; TODO - Call this code with each level to set the scorpion speed + cmp #SPRITE_SPEED_FAST + beq setScorpionSpeed_fast lda #SCORPION_SLOW_SPRITE_LAST_OFFSET sta scorpionSpriteLastOffset @@ -281,9 +277,9 @@ addScorpion_doit anop sta updateScorpion_nextByteTest long i,m - bra addScorpion_cont + rtl -addScorpion_fast anop +setScorpionSpeed_fast anop lda #SCORPION_FAST_SPRITE_LAST_OFFSET sta scorpionSpriteLastOffset @@ -299,9 +295,16 @@ addScorpion_fast anop lda #$09 sta updateScorpion_nextByteTest long i,m + + rtl -addScorpion_cont anop +addScorpion entry + lda scorpionState + beq addScorpion_doit + rtl + +addScorpion_doit anop jsl rand0_to_14 asl a tay @@ -391,9 +394,9 @@ scorpionTileOffsets dc i2'0' scorpionShiftInTile dc i2'0' scorpionSprite dc i2'0' -scorpionSpriteLastOffset dc i2'0' -scorpionSpriteUpdateDec dc i2'0' -scorpionUpdatesPerTile dc i2'0' +scorpionSpriteLastOffset dc i2'SCORPION_SLOW_SPRITE_LAST_OFFSET' +scorpionSpriteUpdateDec dc i2'SCORPION_SLOW_SPRITE_UPDATE_DEC' +scorpionUpdatesPerTile dc i2'SCORPION_SLOW_UPDATES_PER_TILE' SCORPION_SLOW_SPRITE_LAST_OFFSET gequ 15*4 diff --git a/BuGS/globals.s b/BuGS/globals.s index f338885..51ec4c1 100644 --- a/BuGS/globals.s +++ b/BuGS/globals.s @@ -120,6 +120,9 @@ TILE_RIGHT_OFFSET gequ 12 NUM_COLOUR_PALETTES gequ 14 +SPRITE_SPEED_SLOW gequ 0 +SPRITE_SPEED_FAST gequ 1 + KEYBOARD gequ $e0c000 KEYBOARD_STROBE gequ $e0c010 READ_VBL gequ $e0c019