Implement the code to add spiders to the game. From my testing, it looks like 2 seconds after a spider leaves the game (either shot or off the screen), another one is added. Also, once the score is about 5000, the spiders added will be fast. The only spider behaviour I know of which is so far not implemented is as the player reaches higher levels, the spider constrains itself closer and closer to the bottom of the screen.

This commit is contained in:
Jeremy Rand 2020-10-22 00:00:16 -04:00
parent 1f26b38784
commit 9a34532d77
6 changed files with 51 additions and 15 deletions

View File

@ -83,7 +83,7 @@
9D62AF402499CD3A00348F45 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
9D8AF0B72535542400C10E3C /* level.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = level.s; sourceTree = "<group>"; };
9D8AF0B82535543000C10E3C /* score.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = score.s; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.asm.orcam; };
9D8FFC602491CA28005C9327 /* game.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = game.s; sourceTree = "<group>"; };
9D8FFC602491CA28005C9327 /* game.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = game.s; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.asm.orcam; };
9D8FFC612491CAF0005C9327 /* game.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = game.h; sourceTree = "<group>"; };
9DB1505024C3801100558B87 /* gameFlea.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = gameFlea.s; sourceTree = "<group>"; };
9DB1505124C6875C00558B87 /* gameScorpion.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = gameScorpion.s; sourceTree = "<group>"; };

View File

@ -7,7 +7,7 @@
<key>Binary.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>3</integer>
<integer>1</integer>
</dict>
<key>BuGS.xcscheme_^#shared#^_</key>
<dict>
@ -17,7 +17,7 @@
<key>DiskImage.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>1</integer>
<integer>3</integer>
</dict>
<key>doNotBuild.xcscheme_^#shared#^_</key>
<dict>

View File

@ -207,6 +207,7 @@ nextWord anop
startGame entry
stz gameRunning
stz numSegments
jsl spiderInitGame
jsl levelInit
jmp levelStart
@ -238,7 +239,7 @@ checkKey_loop2 anop
beq checkKey_shootScorpion
cmp #'p'
beq checkKey_addSpider
beq checkKey_shootSpider
cmp #'P'
beq checkKey_shootSpider
@ -249,6 +250,7 @@ checkKey_loop2 anop
cmp #'g'
beq checkKey_game
cmp #'c'
beq checkKey_shootCentipede
cmp #'C'
@ -269,9 +271,6 @@ checkKey_addScorpion anop
checkKey_shootScorpion anop
jmp shootScorpion
checkKey_addSpider anop
jmp addSpider
checkKey_shootSpider anop
jmp shootSpider
@ -286,16 +285,12 @@ checkKey_fast anop
lda #SPRITE_SPEED_FAST
jsl setFleaSpeed
lda #SPRITE_SPEED_FAST
jsl setSpiderSpeed
lda #SPRITE_SPEED_FAST
jmp setScorpionSpeed
checkKey_slow anop
lda #SPRITE_SPEED_SLOW
jsl setFleaSpeed
lda #SPRITE_SPEED_SLOW
jsl setSpiderSpeed
lda #SPRITE_SPEED_SLOW
jmp setScorpionSpeed
checkKey_game anop

View File

@ -60,6 +60,16 @@ SPIDER_LEFT_SCREEN_SHIFT_FAST equ 0
SPIDER_RIGHT_SCREEN_SHIFT_SLOW equ 0
SPIDER_RIGHT_SCREEN_SHIFT_FAST equ 1
; Two seconds or 120 frames after a spider disappears, a spider is added.
SPIDER_ADD_TIME equ 120
spiderInitGame entry
stz spiderAddTime
stz spiderState
lda #SPRITE_SPEED_SLOW
jmp setSpiderSpeed
drawSpider entry
lda spiderState
@ -266,7 +276,23 @@ updateSpider_leftDiagDown_cont anop
jmp updateSpider_tilesLeft
updateSpider_done anop
rtl
rtl
updateSpider_maybeAdd anop
lda gameRunning
bne updateSpider_done
lda spiderAddTime
bne updateSpider_waitForAdd
lda #SPIDER_ADD_TIME
sta spiderAddTime
rtl
updateSpider_waitForAdd anop
dec a
sta spiderAddTime
bne updateSpider_done
jmp addSpider
updateSpider_leftDiagUp anop
lda spiderScreenOffset
@ -521,9 +547,21 @@ updateSpider_offScreen anop
addSpider entry
lda spiderState
beq addSpider_doit
beq addSpider_checkSpeed
rtl
addSpider_checkSpeed anop
lda gameScore+2
bne addSpider_fast
lda gameScore
cmp #5000
blt addSpider_doit
addSpider_fast anop
lda #SPRITE_SPEED_FAST
cmp spiderSpeed
beq addSpider_doit
jsl setSpiderSpeed
addSpider_doit anop
lda spiderStartingShift
sta spiderShiftInTile
@ -616,6 +654,7 @@ addSpider_right anop
setSpiderSpeed entry
sta spiderSpeed
cmp #SPRITE_SPEED_FAST
beq setSpiderSpeed_fast
@ -715,11 +754,13 @@ shootSpider_done anop
spiderState dc i2'SPIDER_STATE_NONE'
spiderSpeed dc i2'SPRITE_SPEED_SLOW'
spiderSprite dc i2'0'
spiderSpriteRefresh dc i2'0'
spiderScreenOffset dc i2'0'
spiderScreenShift dc i2'0'
spiderShiftInTile dc i2'0'
spiderAddTime dc i2'0'
spiderCurrentRow dc i2'0'
spiderTargetRow dc i2'0'
@ -764,7 +805,7 @@ spiderShiftJumpTable dc i4'spider7s'
dc i4'spider1s'
spiderUpdateJumpTable dc i2'updateSpider_done'
spiderUpdateJumpTable dc i2'updateSpider_maybeAdd'
dc i2'updateSpider_exploding'
dc i2'updateSpider_score'
dc i2'updateSpider_leftDiagDown'

View File

@ -138,6 +138,7 @@ VERTICAL_COUNTER gequ $e0c02e
gameRunning dc i2'1'
numSegments dc i2'0'
gameScore dc i4'0'
backupStack dc i2'0'

View File

@ -366,6 +366,5 @@ scoreAddOneThousand_skipZeroHundreds anop
highScore dc i4'0'
gameScore dc i4'0'
end