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.

This commit is contained in:
Jeremy Rand 2020-07-27 22:27:18 -04:00
parent 36be001229
commit 883d882d0e
4 changed files with 72 additions and 31 deletions

View File

@ -686,6 +686,11 @@ checkKey_loop2 anop
cmp #'P' cmp #'P'
beq checkKey_shootSpider beq checkKey_shootSpider
cmp #'+'
beq checkKey_fast
cmp #'-'
beq checkKey_slow
lda colourPalette lda colourPalette
inc a inc a
cmp #NUM_COLOUR_PALETTES cmp #NUM_COLOUR_PALETTES
@ -695,6 +700,9 @@ checkKey_skip anop
sta colourPalette sta colourPalette
jmp setColour jmp setColour
checkKey_done anop
rtl
checkKey_addFlea anop checkKey_addFlea anop
jmp addFlea jmp addFlea
@ -713,10 +721,20 @@ checkKey_addSpider anop
checkKey_shootSpider anop checkKey_shootSpider anop
jmp shootSpider 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 checkKey_quit anop
stz shouldQuit stz shouldQuit
checkKey_done anop
rtl rtl

View File

@ -17,7 +17,8 @@ FLEA_STATE_NONE equ 0
FLEA_STATE_FALLING equ 1 FLEA_STATE_FALLING equ 1
FLEA_STATE_EXPLODING equ 2 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_SLOW_UPDATES_PER_TILE equ TILE_PIXEL_HEIGHT/2-1
FLEA_FAST_UPDATES_PER_TILE equ TILE_PIXEL_HEIGHT/4-1 FLEA_FAST_UPDATES_PER_TILE equ TILE_PIXEL_HEIGHT/4-1
@ -198,16 +199,15 @@ addFlea entry
lda fleaState lda fleaState
bne addFlea_done bne addFlea_done
lda fleaSpriteSpeed
jsl setFleaSpeed
lda #FLEA_STATE_FALLING lda #FLEA_STATE_FALLING
sta fleaState sta fleaState
lda #FLEA_SLOW_UPDATES_PER_TILE lda fleaUpdatePerTile
sta fleaUpdatePerTile
sta fleaHeightInTile sta fleaHeightInTile
lda #FLEA_SCREEN_SPEED
sta fleaSpeed
stz fleaSpriteCounter stz fleaSpriteCounter
lda #FLEA_SPRITE_LAST_OFFSET lda #FLEA_SPRITE_LAST_OFFSET
sta fleaSprite sta fleaSprite
@ -233,13 +233,34 @@ addFlea entry
addFlea_done anop addFlea_done anop
rtl 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 shootFlea entry
; TODO - Increment the score
lda fleaState lda fleaState
cmp #FLEA_STATE_FALLING cmp #FLEA_STATE_FALLING
bne shootFlea_done bne shootFlea_done
lda fleaSpeed lda fleaSpeed
cmp #FLEA_SCREEN_SPEED cmp #FLEA_SCREEN_SPEED_SLOW
beq shootFlea_faster beq shootFlea_faster
lda #FLEA_STATE_EXPLODING lda #FLEA_STATE_EXPLODING
@ -251,11 +272,7 @@ shootFlea entry
rtl rtl
shootFlea_faster anop shootFlea_faster anop
asl a jsl setFleaSpeed_fast
sta fleaSpeed
lda #FLEA_FAST_UPDATES_PER_TILE
sta fleaUpdatePerTile
lda fleaHeightInTile lda fleaHeightInTile
lsr a lsr a
@ -266,7 +283,6 @@ shootFlea_faster anop
sec sec
sbc #SCREEN_BYTES_PER_ROW sbc #SCREEN_BYTES_PER_ROW
sta fleaScreenOffset sta fleaScreenOffset
; TODO - Increment the score
shootFlea_done anop shootFlea_done anop
rtl rtl
@ -288,7 +304,8 @@ fleaJumpTable dc i4'flea4'
dc i4'flea2' dc i4'flea2'
dc i4'flea1' dc i4'flea1'
fleaSpeed dc i2'0' fleaSpriteSpeed dc i2'SPRITE_SPEED_SLOW'
fleaUpdatePerTile dc i2'0' fleaSpeed dc i2'FLEA_SCREEN_SPEED_SLOW'
fleaUpdatePerTile dc i2'FLEA_SLOW_UPDATES_PER_TILE'
end end

View File

@ -256,14 +256,10 @@ updateScorpion_explosionDone anop
rtl rtl
addScorpion entry setScorpionSpeed entry
lda scorpionState ; TODO - Call this code with each level to set the scorpion speed
beq addScorpion_doit cmp #SPRITE_SPEED_FAST
rtl beq setScorpionSpeed_fast
addScorpion_doit anop
; TODO - Add code to select between fast or slow scorpions based on the level
; bra addScorpion_fast
lda #SCORPION_SLOW_SPRITE_LAST_OFFSET lda #SCORPION_SLOW_SPRITE_LAST_OFFSET
sta scorpionSpriteLastOffset sta scorpionSpriteLastOffset
@ -281,9 +277,9 @@ addScorpion_doit anop
sta updateScorpion_nextByteTest sta updateScorpion_nextByteTest
long i,m long i,m
bra addScorpion_cont rtl
addScorpion_fast anop setScorpionSpeed_fast anop
lda #SCORPION_FAST_SPRITE_LAST_OFFSET lda #SCORPION_FAST_SPRITE_LAST_OFFSET
sta scorpionSpriteLastOffset sta scorpionSpriteLastOffset
@ -299,9 +295,16 @@ addScorpion_fast anop
lda #$09 lda #$09
sta updateScorpion_nextByteTest sta updateScorpion_nextByteTest
long i,m long i,m
rtl
addScorpion_cont anop
addScorpion entry
lda scorpionState
beq addScorpion_doit
rtl
addScorpion_doit anop
jsl rand0_to_14 jsl rand0_to_14
asl a asl a
tay tay
@ -391,9 +394,9 @@ scorpionTileOffsets dc i2'0'
scorpionShiftInTile dc i2'0' scorpionShiftInTile dc i2'0'
scorpionSprite dc i2'0' scorpionSprite dc i2'0'
scorpionSpriteLastOffset dc i2'0' scorpionSpriteLastOffset dc i2'SCORPION_SLOW_SPRITE_LAST_OFFSET'
scorpionSpriteUpdateDec dc i2'0' scorpionSpriteUpdateDec dc i2'SCORPION_SLOW_SPRITE_UPDATE_DEC'
scorpionUpdatesPerTile dc i2'0' scorpionUpdatesPerTile dc i2'SCORPION_SLOW_UPDATES_PER_TILE'
SCORPION_SLOW_SPRITE_LAST_OFFSET gequ 15*4 SCORPION_SLOW_SPRITE_LAST_OFFSET gequ 15*4

View File

@ -120,6 +120,9 @@ TILE_RIGHT_OFFSET gequ 12
NUM_COLOUR_PALETTES gequ 14 NUM_COLOUR_PALETTES gequ 14
SPRITE_SPEED_SLOW gequ 0
SPRITE_SPEED_FAST gequ 1
KEYBOARD gequ $e0c000 KEYBOARD gequ $e0c000
KEYBOARD_STROBE gequ $e0c010 KEYBOARD_STROBE gequ $e0c010
READ_VBL gequ $e0c019 READ_VBL gequ $e0c019