diff --git a/BuGS/game.s b/BuGS/game.s index 8b96ffc..ae8b66f 100644 --- a/BuGS/game.s +++ b/BuGS/game.s @@ -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 diff --git a/BuGS/gameScorpion.s b/BuGS/gameScorpion.s index e18454e..60c5c35 100644 --- a/BuGS/gameScorpion.s +++ b/BuGS/gameScorpion.s @@ -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 diff --git a/BuGS/gameSegments.s b/BuGS/gameSegments.s index 6e1b5a8..d382459 100644 --- a/BuGS/gameSegments.s +++ b/BuGS/gameSegments.s @@ -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 diff --git a/BuGS/gameSpider.s b/BuGS/gameSpider.s index e8cf211..b09ccfc 100644 --- a/BuGS/gameSpider.s +++ b/BuGS/gameSpider.s @@ -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 diff --git a/BuGS/globals.s b/BuGS/globals.s index a32a3a7..14537c2 100644 --- a/BuGS/globals.s +++ b/BuGS/globals.s @@ -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' diff --git a/BuGS/level.s b/BuGS/level.s index 7c8c581..d39c9e4 100644 --- a/BuGS/level.s +++ b/BuGS/level.s @@ -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