Change the code for centipede speed to skip slow speed segments entirely once the score is more than 40000.

Add segments at the start of the next level in reverse order so the single head segments are added first.  This ensures they do collision detection properly in the updateSegment code.
Fix a bug where a set of 16 tiles were always marked as occupied by a centipede segment because we didn't clear it properly on each updateSegment call.  This fixed a problem with segments changing direction for no apparent reason.
Test for collisions on the two tiles the segment is spanning and change direction if either is occupied.  This should eliminate single segments travelling on top of each other.
Add scorpions randomly during a game once we get to level 4.  They are added with a 1 in 512 chance every 60 seconds so you should see a scorpion about once every 10 seconds or so.
When the score is above 20000, add scorpions at fast speed 3/4 of the time, slow speed the other 1/4 of the time.  Lower scores, the scorpion is always slow.
This commit is contained in:
Jeremy Rand 2020-10-23 00:20:18 -04:00
parent 9a34532d77
commit 1d4f783a3e
6 changed files with 140 additions and 339 deletions

View File

@ -234,7 +234,7 @@ checkKey_loop2 anop
beq checkKey_shootFlea
cmp #'s'
beq checkKey_addScorpion
beq checkKey_shootScorpion
cmp #'S'
beq checkKey_shootScorpion
@ -265,9 +265,6 @@ checkKey_addFlea anop
checkKey_shootFlea anop
jmp shootFlea
checkKey_addScorpion anop
jmp addScorpion
checkKey_shootScorpion anop
jmp shootScorpion

View File

@ -79,7 +79,15 @@ jumpInst jmp >leftScorpion1
updateScorpion entry
lda scorpionState
bne updateScorpion_cont
rtl
lda gameLevel
cmp #3
blt updateScorpion_doNotAdd
jsl rand0_to_65534
and #$3ff
bne updateScorpion_doNotAdd
jmp addScorpion
updateScorpion_doNotAdd anop
rtl
updateScorpion_cont anop
cmp #SCORPION_STATE_EXPLODING
@ -173,8 +181,6 @@ updateScorpion_done anop
updateScorpion_offScreen anop
stz scorpionState
; Uncomment the following line to continuously add scorpions
; jsl addScorpion
rtl
updateScorpion_exploding anop
@ -239,12 +245,32 @@ addScorpion entry
rtl
addScorpion_doit anop
lda gameScore+2
bne addScorpion_randomSpeed
lda gameScore
cmp #20000
bge addScorpion_randomSpeed
addScorpion_slow anop
lda #SPRITE_SPEED_SLOW
bra addScorpion_setSpeed
addScorpion_randomSpeed anop
jsl rand0_to_65534
; We test the higher bits because we have already decided to add this scorpion because the bottom
; bits are all zero. Because we shift bits in our "random" code, the bottom bits are guaranteed
; to still be zero. So, look at a pair of upper bits to test for 1/4 of the time slow, 3/4 of the
; time fast. Similarly for the L/R decision later on.
and #$0c00
beq addScorpion_slow
lda #SPRITE_SPEED_FAST
addScorpion_setSpeed anop
jsl setScorpionSpeed
jsl rand0_to_14
asl a
tay
jsl rand0_to_65534
and #1
and #$1000
beq addScorpion_right
lda #SCORPION_STATE_LEFT

View File

@ -212,7 +212,7 @@ updateSegments entry
stz segmentTileMask+62
stz segmentTileMask+64
stz segmentTileMask+66
stz segmentTileMask+78
stz segmentTileMask+68
stz segmentTileMask+70
stz segmentTileMask+72
stz segmentTileMask+74
@ -526,6 +526,15 @@ updateSegmentLeftFast_checkDir anop
bge updateSegmentLeftFast_changeDir
lda tileType,x
bne updateSegmentLeftFast_checkPoison
phy
txy
ldx tileBitOffset,y
lda tileBitMask,y
ply
and segmentTileMask,x
bne updateSegmentLeftFast_changeDir
ldx segmentTileOffsetsUL,y
lda tileLeft,x
cmp #LHS_FIRST_TILE_OFFSET
bge updateSegmentLeftFast_changeDir
@ -540,6 +549,7 @@ updateSegmentLeftFast_checkDir anop
and segmentTileMask,x
bne updateSegmentLeftFast_changeDir
rts
updateSegmentLeftFast_checkPoison anop
cmp #TILE_POISON_MUSHROOM1
blt updateSegmentLeftFast_changeDir
@ -673,13 +683,10 @@ updateSegmentLeftSlow_checkDir anop
tax
lda tileType,x
bne updateSegmentLeftSlow_checkPoison
phy
txy
ldx tileBitOffset,y
lda tileBitMask,y
ply
and segmentTileMask,x
bne updateSegmentLeftSlow_changeDir
; Don't bother looking for collisions on slow moving head segments. The only
; slow moving head segments are calculated first in update and never collide with
; other segemnts. Fast head segments collide with other fast segments or other
; slow segments.
rts
updateSegmentLeftSlow_checkPoison anop
cmp #TILE_POISON_MUSHROOM1
@ -1106,6 +1113,15 @@ updateSegmentRightFast_checkDir anop
bge updateSegmentRightFast_changeDir
lda tileType,x
bne updateSegmentRightFast_checkPoison
phy
txy
ldx tileBitOffset,y
lda tileBitMask,y
ply
and segmentTileMask,x
bne updateSegmentRightFast_changeDir
ldx segmentTileOffsetsUR,y
lda tileRight,x
cmp #RHS_FIRST_TILE_OFFSET
bge updateSegmentRightFast_changeDir
@ -1253,13 +1269,10 @@ updateSegmentRightSlow_checkDir anop
tax
lda tileType,x
bne updateSegmentRightSlow_checkPoison
phy
txy
ldx tileBitOffset,y
lda tileBitMask,y
ply
and segmentTileMask,x
bne updateSegmentRightSlow_changeDir
; Don't bother looking for collisions on slow moving head segments. The only
; slow moving head segments are calculated first in update and never collide with
; other segemnts. Fast head segments collide with other fast segments or other
; slow segments.
rts
updateSegmentRightSlow_checkPoison anop
cmp #TILE_POISON_MUSHROOM1

View File

@ -505,6 +505,7 @@ updateSpider_tilesDownCont anop
updateSpider_downChangeDir anop
lda spiderTargetRow
sec
; TODO - The actual top row of the spider changes as the score goes up. Need to handle that.
sbc #SPIDER_TOP_ROW
jsl randN
inc a
@ -540,8 +541,6 @@ updateSpider_downChangeDirDiagRight anop
updateSpider_offScreen anop
stz spiderState
; Uncomment the following line to continuously add
; jsl addSpider
rtl

View File

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

View File

@ -17,8 +17,11 @@ NEXT_LEVEL_FRAME_COUNT equ 60
levelInit entry
stz gameLevel
stz centipedeLevelNum
stz colourLevelNum
lda #SEGMENT_SPEED_FAST
sta levelOne+2
rtl
@ -31,6 +34,24 @@ levelStart entry
tax
lda |$0,x
sta centipedeNum
; We add centipedes in reverse order which means we need to load X up with the address
; of the last centipede. To do so, we:
; - subtract one from the number of centipedes
; - multiply by eight
; - add the starting location of the level information
; - add 2 to skip past the number of centipedes so we should now be
; at the start of the last centipede
; We do this because it is important that the single head segments are the ones which
; need to "avoid" the other segments and that happens when they are added first.
; See the update code in gameSegments.s to see why.
dec a
asl a
asl a
asl a
ldx centipedeLevelNum
clc
adc levelTable,x
tax
inx
inx
levelStart_loop anop
@ -38,8 +59,8 @@ levelStart_loop anop
dec centipedeNum
beq levelStart_done
txa
clc
adc #8
sec
sbc #8
tax
bra levelStart_loop
levelStart_done anop
@ -72,17 +93,56 @@ levelNext entry
lda #0
levelNext_skip anop
sta colourLevelNum
inc gameLevel
lda gameScore+2
bne levelNext_fastOnly
lda gameScore
cmp #40000
bge levelNext_fastOnly
ldy centipedeLevelNum
ldx levelTable,y
lda |$2,x
cmp #SEGMENT_SPEED_FAST
beq levelNext_slowIncrement
lda #SEGMENT_SPEED_FAST
sta |$2,x
rtl
levelNext_slowIncrement anop
lda centipedeLevelNum
cmp #LEVEL_TABLE_LAST_OFFSET
bge levelNext_wrap
bge levelNext_slowWrap
inc a
inc a
bra levelNext_noWrap
levelNext_wrap anop
lda #LEVEL_TABLE_REPEAT_OFFSET
levelNext_noWrap anop
bra levelNext_slowNoWrap
levelNext_slowWrap anop
lda #0
levelNext_slowNoWrap anop
sta centipedeLevelNum
tay
ldx levelTable,y
lda #SEGMENT_SPEED_SLOW
sta |$2,x
rtl
levelNext_fastOnly anop
lda centipedeLevelNum
cmp #LEVEL_TABLE_LAST_OFFSET
bge levelNext_fastWrap
inc a
inc a
bra levelNext_fastNoWrap
levelNext_fastWrap anop
lda #0
levelNext_fastNoWrap anop
sta centipedeLevelNum
tay
ldx levelTable,y
lda #SEGMENT_SPEED_FAST
sta |$2,x
rtl
@ -115,17 +175,7 @@ levelTwo dc i2'2'
dc i2'14' ; Tile offset
dc i2'0' ; Number of body segments
levelThree dc i2'2'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
dc i2'10' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'38' ; Tile offset
dc i2'0' ; Number of body segments
levelFour dc i2'3'
levelThree dc i2'3'
dc i2'SEGMENT_SPEED_SLOW'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
@ -139,21 +189,7 @@ levelFour dc i2'3'
dc i2'38' ; Tile offset
dc i2'0' ; Number of body segments
levelFive dc i2'3'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
dc i2'9' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'14' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'38' ; Tile offset
dc i2'0' ; Number of body segments
levelSix dc i2'4'
levelFour dc i2'4'
dc i2'SEGMENT_SPEED_SLOW'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
@ -171,25 +207,7 @@ levelSix dc i2'4'
dc i2'38' ; Tile offset
dc i2'0' ; Number of body segments
levelSeven dc i2'4'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
dc i2'8' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'6' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'14' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'38' ; Tile offset
dc i2'0' ; Number of body segments
levelEight dc i2'5'
levelFive dc i2'5'
dc i2'SEGMENT_SPEED_SLOW'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
@ -211,29 +229,7 @@ levelEight dc i2'5'
dc i2'46' ; Tile offset
dc i2'0' ; Number of body segments
levelNine dc i2'5'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
dc i2'7' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'6' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'14' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'38' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'46' ; Tile offset
dc i2'0' ; Number of body segments
levelTen dc i2'6'
levelSix dc i2'6'
dc i2'SEGMENT_SPEED_SLOW'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
@ -259,33 +255,7 @@ levelTen dc i2'6'
dc i2'46' ; Tile offset
dc i2'0' ; Number of body segments
levelEleven dc i2'6'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
dc i2'6' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'6' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'14' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'18' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'38' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'46' ; Tile offset
dc i2'0' ; Number of body segments
levelTwelve dc i2'7'
levelSeven dc i2'7'
dc i2'SEGMENT_SPEED_SLOW'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
@ -315,37 +285,7 @@ levelTwelve dc i2'7'
dc i2'46' ; Tile offset
dc i2'0' ; Number of body segments
levelThirteen dc i2'7'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
dc i2'5' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'6' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'14' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'18' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'30' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'38' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'46' ; Tile offset
dc i2'0' ; Number of body segments
levelFourteen dc i2'8'
levelEight dc i2'8'
dc i2'SEGMENT_SPEED_SLOW'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
@ -379,41 +319,7 @@ levelFourteen dc i2'8'
dc i2'46' ; Tile offset
dc i2'0' ; Number of body segments
levelFifteen dc i2'8'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
dc i2'4' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'2' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'6' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'14' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'18' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'30' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'38' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'46' ; Tile offset
dc i2'0' ; Number of body segments
levelSixteen dc i2'9'
levelNine dc i2'9'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
@ -451,7 +357,7 @@ levelSixteen dc i2'9'
dc i2'46' ; Tile offset
dc i2'0' ; Number of body segments
levelSeventeen dc i2'10'
levelTen dc i2'10'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
@ -493,7 +399,7 @@ levelSeventeen dc i2'10'
dc i2'46' ; Tile offset
dc i2'0' ; Number of body segments
levelEighteen dc i2'11'
levelEleven dc i2'11'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
@ -539,7 +445,7 @@ levelEighteen dc i2'11'
dc i2'46' ; Tile offset
dc i2'0' ; Number of body segments
levelNineteen dc i2'12'
levelTwelve dc i2'12'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
@ -589,138 +495,11 @@ levelNineteen dc i2'12'
dc i2'46' ; Tile offset
dc i2'0' ; Number of body segments
levelTwenty dc i2'1'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
dc i2'11' ; Number of body segments
levelTwentyOne dc i2'2'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
dc i2'10' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'38' ; Tile offset
dc i2'0' ; Number of body segments
levelTwentyTwo dc i2'3'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
dc i2'9' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'14' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'38' ; Tile offset
dc i2'0' ; Number of body segments
levelTwentyThree dc i2'4'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
dc i2'8' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'6' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'14' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'38' ; Tile offset
dc i2'0' ; Number of body segments
levelTwentyFour dc i2'5'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
dc i2'7' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'6' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'14' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'38' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'46' ; Tile offset
dc i2'0' ; Number of body segments
levelTwentyFive dc i2'6'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
dc i2'6' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'6' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'14' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'18' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'38' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'46' ; Tile offset
dc i2'0' ; Number of body segments
levelTwentySix dc i2'7'
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'26' ; Tile offset
dc i2'5' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'6' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'14' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_LEFT'
dc i2'18' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'30' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'38' ; Tile offset
dc i2'0' ; Number of body segments
dc i2'SEGMENT_SPEED_FAST'
dc i2'SEGMENT_DIR_RIGHT'
dc i2'46' ; Tile offset
dc i2'0' ; Number of body segments
; Once we reach level 26 of the centipede levels, we go back to level 15. This is because
; we only have fast speed centipedes, with one more head at the start and one less body
; segment until they are all head segments and then back to a single 12 segment centipede at
; fast speed. By looping back from 26th level to the 15th level, we do this.
LEVEL_TABLE_LAST_OFFSET gequ 25*2
LEVEL_TABLE_REPEAT_OFFSET gequ 14*2
LEVEL_TABLE_LAST_OFFSET gequ 11*2
levelTable dc i2'levelOne'
dc i2'levelTwo'
dc i2'levelThree'
@ -733,19 +512,5 @@ levelTable dc i2'levelOne'
dc i2'levelTen'
dc i2'levelEleven'
dc i2'levelTwelve'
dc i2'levelThirteen'
dc i2'levelFourteen'
dc i2'levelFifteen'
dc i2'levelSixteen'
dc i2'levelSeventeen'
dc i2'levelEighteen'
dc i2'levelNineteen'
dc i2'levelTwenty'
dc i2'levelTwentyOne'
dc i2'levelTwentyTwo'
dc i2'levelTwentyThree'
dc i2'levelTwentyFour'
dc i2'levelTwentyFive'
dc i2'levelTwentySix'
end