mirror of
https://github.com/jeremysrand/BuGS.git
synced 2024-05-28 16:41:35 +00:00
Add the ability to shoot centipede segments.
This commit is contained in:
parent
74a21db9e0
commit
eb418fb1c4
|
@ -7,7 +7,7 @@
|
||||||
<key>Binary.xcscheme_^#shared#^_</key>
|
<key>Binary.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>1</integer>
|
<integer>2</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>BuGS.xcscheme_^#shared#^_</key>
|
<key>BuGS.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
|
@ -17,12 +17,12 @@
|
||||||
<key>DiskImage.xcscheme_^#shared#^_</key>
|
<key>DiskImage.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>2</integer>
|
<integer>3</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>doNotBuild.xcscheme_^#shared#^_</key>
|
<key>doNotBuild.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>3</integer>
|
<integer>1</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
|
|
|
@ -243,6 +243,8 @@ checkKey_loop2 anop
|
||||||
|
|
||||||
cmp #'c'
|
cmp #'c'
|
||||||
beq checkKey_centipede
|
beq checkKey_centipede
|
||||||
|
cmp #'C'
|
||||||
|
beq checkKey_shootCentipede
|
||||||
|
|
||||||
lda colourPalette
|
lda colourPalette
|
||||||
inc a
|
inc a
|
||||||
|
@ -273,6 +275,9 @@ checkKey_addSpider anop
|
||||||
|
|
||||||
checkKey_shootSpider anop
|
checkKey_shootSpider anop
|
||||||
jmp shootSpider
|
jmp shootSpider
|
||||||
|
|
||||||
|
checkKey_shootCentipede anop
|
||||||
|
jmp shootRandomSegment
|
||||||
|
|
||||||
checkKey_quit anop
|
checkKey_quit anop
|
||||||
stz shouldQuit
|
stz shouldQuit
|
||||||
|
|
|
@ -18,9 +18,10 @@ SEGMENT_MAX_NUM equ 12
|
||||||
SEGMENT_MAX_OFFSET equ SEGMENT_MAX_NUM*2-2
|
SEGMENT_MAX_OFFSET equ SEGMENT_MAX_NUM*2-2
|
||||||
|
|
||||||
SEGMENT_STATE_NONE equ 0
|
SEGMENT_STATE_NONE equ 0
|
||||||
SEGMENT_STATE_HEAD equ 1
|
SEGMENT_STATE_EXPLODING equ 1
|
||||||
SEGMENT_STATE_POISONED_HEAD equ 2
|
SEGMENT_STATE_HEAD equ 2
|
||||||
SEGMENT_STATE_BODY equ 3
|
SEGMENT_STATE_POISONED_HEAD equ 3
|
||||||
|
SEGMENT_STATE_BODY equ 4
|
||||||
|
|
||||||
SEGMENT_DIR_LEFT equ 0
|
SEGMENT_DIR_LEFT equ 0
|
||||||
SEGMENT_DIR_RIGHT equ 1
|
SEGMENT_DIR_RIGHT equ 1
|
||||||
|
@ -59,11 +60,17 @@ drawSegments_nextSegment anop
|
||||||
|
|
||||||
drawSegments_cont anop
|
drawSegments_cont anop
|
||||||
phx
|
phx
|
||||||
|
cmp #SEGMENT_STATE_EXPLODING
|
||||||
|
beq drawSegments_exploding
|
||||||
cmp #SEGMENT_STATE_BODY
|
cmp #SEGMENT_STATE_BODY
|
||||||
bne drawSegments_head
|
bne drawSegments_head
|
||||||
jsl segmentBodyJump
|
jsl segmentBodyJump
|
||||||
bra drawSegments_handleTiles
|
bra drawSegments_handleTiles
|
||||||
|
|
||||||
|
drawSegments_exploding anop
|
||||||
|
jsl segmentExplodingJump
|
||||||
|
bra drawSegments_handleTiles
|
||||||
|
|
||||||
drawSegments_head anop
|
drawSegments_head anop
|
||||||
jsl segmentHeadJump
|
jsl segmentHeadJump
|
||||||
|
|
||||||
|
@ -91,7 +98,20 @@ drawSegments_skipSegment anop
|
||||||
|
|
||||||
drawSegments_done anop
|
drawSegments_done anop
|
||||||
rtl
|
rtl
|
||||||
|
|
||||||
|
segmentExplodingJump entry
|
||||||
|
lda segmentPosOffset,x
|
||||||
|
tax
|
||||||
|
ldy segmentFacing,x
|
||||||
|
lda explosionJumpTable,y
|
||||||
|
sta segmentExplodingJump_jumpInst+1
|
||||||
|
lda explosionJumpTable+2,y
|
||||||
|
sta segmentExplodingJump_jumpInst+3
|
||||||
|
ldy segmentScreenOffsets,x
|
||||||
|
|
||||||
|
segmentExplodingJump_jumpInst anop
|
||||||
|
jmp >leftHead1
|
||||||
|
nop
|
||||||
|
|
||||||
segmentHeadJump entry
|
segmentHeadJump entry
|
||||||
lda segmentPixelOffset
|
lda segmentPixelOffset
|
||||||
|
@ -236,7 +256,7 @@ updateSegments_nextSegment anop
|
||||||
jmp updateSegments_skipSegment
|
jmp updateSegments_skipSegment
|
||||||
updateSegments_cont anop
|
updateSegments_cont anop
|
||||||
cmp #SEGMENT_STATE_BODY
|
cmp #SEGMENT_STATE_BODY
|
||||||
bne updateSegments_head
|
bne updateSegments_headOrExploding
|
||||||
|
|
||||||
lda segmentPosOffset,x
|
lda segmentPosOffset,x
|
||||||
beq updateSegments_bodyWrapPos
|
beq updateSegments_bodyWrapPos
|
||||||
|
@ -258,8 +278,7 @@ updateSegments_bodyMarkTile anop
|
||||||
plx
|
plx
|
||||||
jmp updateSegments_skipSegment
|
jmp updateSegments_skipSegment
|
||||||
|
|
||||||
updateSegments_head anop
|
updateSegments_headOrExploding anop
|
||||||
; jsl waitForKey
|
|
||||||
lda segmentPosOffset,x
|
lda segmentPosOffset,x
|
||||||
beq updateSegments_headWrapPos
|
beq updateSegments_headWrapPos
|
||||||
dec a
|
dec a
|
||||||
|
@ -292,6 +311,14 @@ updateSegments_headWrapPos anop
|
||||||
lda segmentCurrentTile
|
lda segmentCurrentTile
|
||||||
sta segmentCurrentTile+SEGMENT_MAX_POSITION_OFFSET
|
sta segmentCurrentTile+SEGMENT_MAX_POSITION_OFFSET
|
||||||
|
|
||||||
|
; We could be in exploding state and if so, we want to skip the rest of the
|
||||||
|
; code for update head segments.
|
||||||
|
lda segmentStates,x
|
||||||
|
cmp #SEGMENT_STATE_EXPLODING
|
||||||
|
bne updateSegments_notExplodingWrap
|
||||||
|
jsr updateSegmentExplodingWrap
|
||||||
|
bra updateSegments_skipSegment
|
||||||
|
updateSegments_notExplodingWrap anop
|
||||||
; Important - Do facing last because we use that to index into the jump
|
; Important - Do facing last because we use that to index into the jump
|
||||||
; table for update.
|
; table for update.
|
||||||
lda segmentFacing
|
lda segmentFacing
|
||||||
|
@ -316,7 +343,15 @@ updateSegments_headNoWrap anop
|
||||||
sta segmentTileOffsetsLR,y
|
sta segmentTileOffsetsLR,y
|
||||||
lda segmentCurrentTile+2,y
|
lda segmentCurrentTile+2,y
|
||||||
sta segmentCurrentTile,y
|
sta segmentCurrentTile,y
|
||||||
|
|
||||||
|
; We could be in exploding state and if so, we want to skip the rest of the
|
||||||
|
; code for update head segments.
|
||||||
|
lda segmentStates,x
|
||||||
|
cmp #SEGMENT_STATE_EXPLODING
|
||||||
|
bne updateSegments_notExplodingNoWrap
|
||||||
|
jsr updateSegmentExplodingNoWrap
|
||||||
|
bra updateSegments_skipSegment
|
||||||
|
updateSegments_notExplodingNoWrap anop
|
||||||
; Important - Do facing last because we use that to index into the jump
|
; Important - Do facing last because we use that to index into the jump
|
||||||
; table for update.
|
; table for update.
|
||||||
lda segmentFacing+2,y
|
lda segmentFacing+2,y
|
||||||
|
@ -352,8 +387,27 @@ updateSegments_skipSegment anop
|
||||||
jmp updateSegments_nextSegment
|
jmp updateSegments_nextSegment
|
||||||
updateSegments_done anop
|
updateSegments_done anop
|
||||||
rtl
|
rtl
|
||||||
|
|
||||||
|
|
||||||
|
updateSegmentExplodingNoWrap entry
|
||||||
|
lda segmentFacing+2,y
|
||||||
|
bra updateSegmentExploding_common
|
||||||
|
|
||||||
|
updateSegmentExplodingWrap entry
|
||||||
|
lda segmentFacing
|
||||||
|
updateSegmentExploding_common anop
|
||||||
|
beq updateSegmentExploding_done
|
||||||
|
sec
|
||||||
|
sbc #$4
|
||||||
|
sta segmentFacing,y
|
||||||
|
rts
|
||||||
|
|
||||||
|
updateSegmentExploding_done anop
|
||||||
|
lda #SEGMENT_STATE_NONE
|
||||||
|
sta segmentStates,x
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
updateSegmentLeftFast entry
|
updateSegmentLeftFast entry
|
||||||
tyx
|
tyx
|
||||||
dec segmentScreenOffsets,x
|
dec segmentScreenOffsets,x
|
||||||
|
@ -1451,9 +1505,61 @@ addFastHeadSegment entry
|
||||||
rtl
|
rtl
|
||||||
|
|
||||||
|
|
||||||
|
; Call this with the segment num * 2 in the X register
|
||||||
shootSegment entry
|
shootSegment entry
|
||||||
; Write this code...
|
dec numSegments
|
||||||
|
lda #SEGMENT_STATE_EXPLODING
|
||||||
|
sta segmentStates,x
|
||||||
|
ldy segmentPosOffset,x
|
||||||
|
|
||||||
|
; We take over the segmentFacing value when exploding to be an explosion sprite offset
|
||||||
|
lda #EXPLOSION_LAST_OFFSET
|
||||||
|
sta segmentFacing,y
|
||||||
|
|
||||||
|
lda segmentCurrentTile,y
|
||||||
|
cmp #(NUM_GAME_TILES-GAME_NUM_TILES_WIDE)*SIZEOF_TILE_INFO
|
||||||
|
bge shootSegment_skipMushroom
|
||||||
|
tay
|
||||||
|
lda tileType,y
|
||||||
|
beq shootSegment_normalMushroom
|
||||||
|
cmp #TILE_POISON_MUSHROOM1
|
||||||
|
bge shootSegment_poisonMushroom
|
||||||
|
shootSegment_normalMushroom anop
|
||||||
|
lda #TILE_MUSHROOM4
|
||||||
|
bra shootSegment_dirtyTile
|
||||||
|
shootSegment_poisonMushroom anop
|
||||||
|
lda #TILE_POISON_MUSHROOM4
|
||||||
|
shootSegment_dirtyTile anop
|
||||||
|
sta tileType,y
|
||||||
|
lda #TILE_STATE_DIRTY
|
||||||
|
sta tileDirty,y
|
||||||
|
shootSegment_skipMushroom anop
|
||||||
|
; If this is the last segment, then do not look for a following body segment
|
||||||
|
cpx #22
|
||||||
|
bge shootSegment_done
|
||||||
|
; If the segment after this is a body segment, then it is now a head segment
|
||||||
|
lda segmentStates+2,x
|
||||||
|
cmp #SEGMENT_STATE_BODY
|
||||||
|
bne shootSegment_done
|
||||||
|
lda #SEGMENT_STATE_HEAD
|
||||||
|
sta segmentStates+2,x
|
||||||
|
shootSegment_done anop
|
||||||
rtl
|
rtl
|
||||||
|
|
||||||
|
|
||||||
|
shootRandomSegment entry
|
||||||
|
lda numSegments
|
||||||
|
bne shootRandomSegment_hasSegments
|
||||||
|
rtl
|
||||||
|
shootRandomSegment_hasSegments anop
|
||||||
|
lda #12
|
||||||
|
jsl randN
|
||||||
|
asl a
|
||||||
|
tax
|
||||||
|
lda segmentStates,x
|
||||||
|
cmp #SEGMENT_STATE_HEAD
|
||||||
|
blt shootRandomSegment_hasSegments
|
||||||
|
jmp shootSegment
|
||||||
|
|
||||||
|
|
||||||
numSegments dc i2'0'
|
numSegments dc i2'0'
|
||||||
|
|
Loading…
Reference in New Issue
Block a user