Some code for adding a spider on the LHS.

This commit is contained in:
Jeremy Rand 2020-07-24 14:42:03 -04:00
parent 4f74d630b9
commit aa2e5408da
2 changed files with 48 additions and 5 deletions

View File

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

View File

@ -24,6 +24,20 @@ SPIDER_STATE_RIGHT_DOWN equ 7
SPIDER_STATE_RIGHT_UP equ 8
SPIDER_STATE_EXPLODING equ 9
; A spider only travels in the bottom N rows. This defines that number.
SPIDER_NUM_POSSIBLE_ROWS equ 10
SPIDER_TOP_ROW equ GAME_NUM_TILES_TALL-SPIDER_NUM_POSSIBLE_ROWS
SPIDER_TOP_ROW_OFFSET equ SPIDER_TOP_ROW*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO
SPIDER_LHS_TILE_OFFSET equ SPIDER_TOP_ROW_OFFSET
SPIDER_RHS_TILE_OFFSET equ SPIDER_TOP_ROW_OFFSET+(GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO
; The spider starts 2 pixel rows above the top row offset so it can slide in on the edge of
; the screen on a diagonal and hit the centre of the tiles with the middle of its body.
SPIDER_STARTING_SHIFT equ 2
SPIDER_LHS_STARTING_SCREEN_OFFSET equ SCREEN_BYTES_PER_ROW*SPIDER_STARTING_SHIFT+6
drawSpider entry
lda spiderState
bne drawSpider_cont
@ -154,7 +168,7 @@ drawSpider_nonGame5 anop
sty numDirtyNonGameTiles
drawSpider_skipTile5 anop
ldx spiderTileOffsets+2
ldx spiderTileOffsets+10
lda tiles+TILE_DIRTY_OFFSET,x
bne drawSpider_done
lda #TILE_STATE_DIRTY
@ -230,7 +244,36 @@ addSpider entry
lda #SPIDER_STATE_RIGHT_DOWN
sta spiderState
stz spiderScreenShift
lda #1
sta spiderScreenShift
ldx #SPIDER_LHS_TILE_OFFSET
stx spiderTileOffsets
lda tiles+TILE_ABOVE_OFFSET,x
sta spiderTileOffsets+2
lda tiles+TILE_LEFT_OFFSET,x
sta spiderTileOffsets+4
tax
lda tiles+TILE_SCREEN_OFFSET_OFFSET,x
sec
sbc #SPIDER_LHS_STARTING_SCREEN_OFFSET
sta spiderScreenOffset
lda tiles+TILE_ABOVE_OFFSET,x
sta spiderTileOffsets+6
lda tiles+TILE_LEFT_OFFSET,x
sta spiderTileOffsets+8
tax
lda tiles+TILE_ABOVE_OFFSET,x
sta spiderTileOffsets+10
lda #SPIDER_STARTING_SHIFT
sta spiderShiftInTile
; Write this code