Add code to poison a centipede.

This commit is contained in:
Jeremy Rand 2020-09-13 16:08:32 -04:00
parent 03466f8847
commit a9d3b12725

View File

@ -324,6 +324,10 @@ updateSegmentLeftFast_nextOffset2 anop
jmp updateSegmentLeftFast_done jmp updateSegmentLeftFast_done
updateSegmentLeftFast_checkDir anop updateSegmentLeftFast_checkDir anop
ldx segmentBeingUpdated
lda segmentStates,x
cmp #SEGMENT_STATE_POISONED_HEAD
beq updateSegmentLeftFast_changeDir
lda segmentTileOffsetsUL,y lda segmentTileOffsetsUL,y
tax tax
lda tileLeft,x lda tileLeft,x
@ -331,9 +335,15 @@ updateSegmentLeftFast_checkDir anop
bge updateSegmentLeftFast_changeDir bge updateSegmentLeftFast_changeDir
tax tax
lda tileType,x lda tileType,x
beq updateSegmentLeftFast_done bne updateSegmentLeftFast_checkPoison
; TODO - Test the tile type to see if it is a poisoned mushroom. jmp updateSegmentLeftFast_done
updateSegmentLeftFast_checkPoison anop
cmp #TILE_POISON_MUSHROOM1
blt updateSegmentLeftFast_changeDir
ldx segmentBeingUpdated
lda #SEGMENT_STATE_POISONED_HEAD
sta segmentStates,x
updateSegmentLeftFast_changeDir anop updateSegmentLeftFast_changeDir anop
lda #SEGMENT_FACING_DOWN_LEFT lda #SEGMENT_FACING_DOWN_LEFT
sta segmentFacing,y sta segmentFacing,y
@ -370,6 +380,10 @@ updateSegmentLeftFast_dirDown anop
lda segmentTileOffsetsUR,y lda segmentTileOffsetsUR,y
cmp #(NUM_GAME_TILES-GAME_NUM_TILES_WIDE)*SIZEOF_TILE_INFO cmp #(NUM_GAME_TILES-GAME_NUM_TILES_WIDE)*SIZEOF_TILE_INFO
blt updateSegmentLeftFast_doDown blt updateSegmentLeftFast_doDown
; If the head segment was poisoned, it is no longer poisoned once the head is going up again.
ldx segmentBeingUpdated
lda #SEGMENT_STATE_HEAD
sta segmentStates,x
lda #SEGMENT_DIR_UP lda #SEGMENT_DIR_UP
sta segmentVerticalDir,y sta segmentVerticalDir,y
bra updateSegmentLeftFast_doUp bra updateSegmentLeftFast_doUp
@ -427,6 +441,10 @@ updateSegmentLeftSlow_nextOffset2 anop
jmp updateSegmentLeftSlow_done jmp updateSegmentLeftSlow_done
updateSegmentLeftSlow_checkDir anop updateSegmentLeftSlow_checkDir anop
ldx segmentBeingUpdated
lda segmentStates,x
cmp #SEGMENT_STATE_POISONED_HEAD
beq updateSegmentLeftSlow_changeDir
lda segmentTileOffsetsUL,y lda segmentTileOffsetsUL,y
tax tax
lda tileLeft,x lda tileLeft,x
@ -434,8 +452,14 @@ updateSegmentLeftSlow_checkDir anop
bge updateSegmentLeftSlow_changeDir bge updateSegmentLeftSlow_changeDir
tax tax
lda tileType,x lda tileType,x
beq updateSegmentLeftSlow_done bne updateSegmentLeftSlow_checkPoison
; TODO - Test the tile type to see if it is a poisoned mushroom. jmp updateSegmentLeftSlow_done
updateSegmentLeftSlow_checkPoison anop
cmp #TILE_POISON_MUSHROOM1
blt updateSegmentLeftSlow_changeDir
ldx segmentBeingUpdated
lda #SEGMENT_STATE_POISONED_HEAD
sta segmentStates,x
updateSegmentLeftSlow_changeDir anop updateSegmentLeftSlow_changeDir anop
lda #SEGMENT_FACING_DOWN_LEFT lda #SEGMENT_FACING_DOWN_LEFT
@ -473,6 +497,10 @@ updateSegmentLeftSlow_dirDown anop
lda segmentTileOffsetsUR,y lda segmentTileOffsetsUR,y
cmp #(NUM_GAME_TILES-GAME_NUM_TILES_WIDE)*SIZEOF_TILE_INFO cmp #(NUM_GAME_TILES-GAME_NUM_TILES_WIDE)*SIZEOF_TILE_INFO
blt updateSegmentLeftSlow_doDown blt updateSegmentLeftSlow_doDown
; If the head segment was poisoned, it is no longer poisoned once the head is going up again.
ldx segmentBeingUpdated
lda #SEGMENT_STATE_HEAD
sta segmentStates,x
lda #SEGMENT_DIR_UP lda #SEGMENT_DIR_UP
sta segmentVerticalDir,y sta segmentVerticalDir,y
bra updateSegmentLeftSlow_doUp bra updateSegmentLeftSlow_doUp
@ -807,6 +835,10 @@ updateSegmentRightFast_nextOffset2 anop
jmp updateSegmentRightFast_done jmp updateSegmentRightFast_done
updateSegmentRightFast_checkDir anop updateSegmentRightFast_checkDir anop
ldx segmentBeingUpdated
lda segmentStates,x
cmp #SEGMENT_STATE_POISONED_HEAD
beq updateSegmentRightFast_changeDir
lda segmentTileOffsetsUR,y lda segmentTileOffsetsUR,y
tax tax
lda tileRight,x lda tileRight,x
@ -814,8 +846,14 @@ updateSegmentRightFast_checkDir anop
bge updateSegmentRightFast_changeDir bge updateSegmentRightFast_changeDir
tax tax
lda tileType,x lda tileType,x
beq updateSegmentRightFast_done bne updateSegmentRightFast_checkPoison
; TODO - Test the tile type to see if it is a poisoned mushroom. jmp updateSegmentRightFast_done
updateSegmentRightFast_checkPoison anop
cmp #TILE_POISON_MUSHROOM1
blt updateSegmentRightFast_changeDir
ldx segmentBeingUpdated
lda #SEGMENT_STATE_POISONED_HEAD
sta segmentStates,x
updateSegmentRightFast_changeDir anop updateSegmentRightFast_changeDir anop
lda #SEGMENT_FACING_DOWN_RIGHT lda #SEGMENT_FACING_DOWN_RIGHT
@ -853,6 +891,10 @@ updateSegmentRightFast_dirDown anop
lda segmentTileOffsetsUR,y lda segmentTileOffsetsUR,y
cmp #(NUM_GAME_TILES-GAME_NUM_TILES_WIDE)*SIZEOF_TILE_INFO cmp #(NUM_GAME_TILES-GAME_NUM_TILES_WIDE)*SIZEOF_TILE_INFO
blt updateSegmentRightFast_doDown blt updateSegmentRightFast_doDown
; If the head segment was poisoned, it is no longer poisoned once the head is going up again.
ldx segmentBeingUpdated
lda #SEGMENT_STATE_HEAD
sta segmentStates,x
lda #SEGMENT_DIR_UP lda #SEGMENT_DIR_UP
sta segmentVerticalDir,y sta segmentVerticalDir,y
bra updateSegmentRightFast_doUp bra updateSegmentRightFast_doUp
@ -910,6 +952,10 @@ updateSegmentRightSlow_nextOffset2 anop
jmp updateSegmentRightSlow_done jmp updateSegmentRightSlow_done
updateSegmentRightSlow_checkDir anop updateSegmentRightSlow_checkDir anop
ldx segmentBeingUpdated
lda segmentStates,x
cmp #SEGMENT_STATE_POISONED_HEAD
beq updateSegmentRightSlow_changeDir
lda segmentTileOffsetsUR,y lda segmentTileOffsetsUR,y
tax tax
lda tileRight,x lda tileRight,x
@ -917,8 +963,14 @@ updateSegmentRightSlow_checkDir anop
bge updateSegmentRightSlow_changeDir bge updateSegmentRightSlow_changeDir
tax tax
lda tileType,x lda tileType,x
beq updateSegmentRightSlow_done bne updateSegmentRightSlow_checkPoison
; TODO - Test the tile type to see if it is a poisoned mushroom. jmp updateSegmentRightSlow_done
updateSegmentRightSlow_checkPoison anop
cmp #TILE_POISON_MUSHROOM1
blt updateSegmentRightSlow_changeDir
ldx segmentBeingUpdated
lda #SEGMENT_STATE_POISONED_HEAD
sta segmentStates,x
updateSegmentRightSlow_changeDir anop updateSegmentRightSlow_changeDir anop
lda #SEGMENT_FACING_DOWN_RIGHT lda #SEGMENT_FACING_DOWN_RIGHT
@ -956,11 +1008,14 @@ updateSegmentRightSlow_dirDown anop
lda segmentTileOffsetsUR,y lda segmentTileOffsetsUR,y
cmp #(NUM_GAME_TILES-GAME_NUM_TILES_WIDE)*SIZEOF_TILE_INFO cmp #(NUM_GAME_TILES-GAME_NUM_TILES_WIDE)*SIZEOF_TILE_INFO
blt updateSegmentRightSlow_doDown blt updateSegmentRightSlow_doDown
; If the head segment was poisoned, it is no longer poisoned once the head is going up again.
ldx segmentBeingUpdated
lda #SEGMENT_STATE_HEAD
sta segmentStates,x
lda #SEGMENT_DIR_UP lda #SEGMENT_DIR_UP
sta segmentVerticalDir,y sta segmentVerticalDir,y
bra updateSegmentRightSlow_doUp bra updateSegmentRightSlow_doUp
updateSegmentRightSlow_doDown anop updateSegmentRightSlow_doDown anop
lda segmentScreenOffsets,y lda segmentScreenOffsets,y
clc clc
@ -987,18 +1042,82 @@ addBodySegment entry
sbc numSegments sbc numSegments
asl a asl a
tax tax
inc numSegments
lda #SEGMENT_STATE_BODY lda #SEGMENT_STATE_BODY
sta segmentStates,x sta segmentStates,x
lda #SEGMENT_SPEED_SLOW lda segmentSpeed+2,x
sta segmentSpeed,x sta segmentSpeed,x
lda numSegments beq addBodySegment_fast
asl a jmp addBodySegment_slow
asl a
asl a addBodySegment_fast anop
asl a lda segmentPosOffset+2,x
clc
adc #8
sta segmentPosOffset,x
tay
lda segmentHorizontalDir-8,y
sta segmentHorizontalDir-6,y
sta segmentHorizontalDir-4,y
sta segmentHorizontalDir-2,y
sta segmentHorizontalDir,y
lda segmentVerticalDir-8,y
sta segmentVerticalDir-6,y
sta segmentVerticalDir-4,y
sta segmentVerticalDir-2,y
sta segmentVerticalDir,y
lda segmentFacing-8,y
sta segmentFacing-6,y
sta segmentFacing-4,y
sta segmentFacing-2,y
sta segmentFacing,y
lda tileScreenOffset
sec
sbc #SCREEN_BYTES_PER_ROW*8
sta segmentScreenOffsets-6,y
sta segmentScreenOffsets-4,y
sta segmentScreenOffsets-2,y
sta segmentScreenOffsets,y
lda segmentTileOffsetsUL-8,y
sta segmentTileOffsetsUL-6,y
sta segmentTileOffsetsUL-4,y
sta segmentTileOffsetsUL-2,y
sta segmentTileOffsetsUL,y
lda segmentTileOffsetsUR-8,y
sta segmentTileOffsetsUR-6,y
sta segmentTileOffsetsUR-4,y
sta segmentTileOffsetsUR-2,y
sta segmentTileOffsetsUR,y
sta segmentTileOffsetsUR,y
lda segmentTileOffsetsLL-8,y
sta segmentTileOffsetsLL-6,y
sta segmentTileOffsetsLL-4,y
sta segmentTileOffsetsLL-2,y
sta segmentTileOffsetsLL,y
lda segmentTileOffsetsLR-8,y
sta segmentTileOffsetsLR-6,y
sta segmentTileOffsetsLR-4,y
sta segmentTileOffsetsLR-2,y
sta segmentTileOffsetsLR,y
sta segmentTileOffsetsLR,y
rtl
addBodySegment_slow anop
lda segmentPosOffset+2,x
clc
adc #16
sta segmentPosOffset,x sta segmentPosOffset,x
tay tay
@ -1085,8 +1204,6 @@ addBodySegment entry
sta segmentTileOffsetsLR-2,y sta segmentTileOffsetsLR-2,y
sta segmentTileOffsetsLR,y sta segmentTileOffsetsLR,y
sta segmentTileOffsetsLR,y sta segmentTileOffsetsLR,y
inc numSegments
rtl rtl