diff --git a/BuGS/colour.s b/BuGS/colour.s index 2dc7a45..11c544a 100644 --- a/BuGS/colour.s +++ b/BuGS/colour.s @@ -48,243 +48,253 @@ colour1 anop dc i2'$00f0' ; $d - 1101 - Green dc i2'$00f0' ; $e - 1110 - Green dc i2'$00f0' ; $f - 1111 - Green - + colour2 anop - dc i2'$0000' ; Black - dc i2'$00fc' ; Light Tourquiose - dc i2'$0f0f' ; Violet - dc i2'$0ff0' ; Yellow - dc i2'$0f0f' ; Violet - dc i2'$0f0f' ; Violet - dc i2'$0f0f' ; Violet - dc i2'$0f0f' ; Violet - dc i2'$0ff0' ; Yellow - dc i2'$0ff0' ; Yellow - dc i2'$0ff0' ; Yellow - dc i2'$0ff0' ; Yellow - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - - + dc i2'$0000' ; Black + dc i2'$0f0c' ; Light Violet + dc i2'$00fc' ; Light Tourquiose + dc i2'$0fc0' ; Orange + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$0fc0' ; Orange + dc i2'$0fc0' ; Orange + dc i2'$0fc0' ; Orange + dc i2'$0fc0' ; Orange + dc i2'$0f0c' ; Light Violet + dc i2'$0f0c' ; Light Violet + dc i2'$0f0c' ; Light Violet + dc i2'$0f0c' ; Light Violet + + colour3 anop - dc i2'$0000' ; Black - dc i2'$0f0f' ; Violet - dc i2'$00fc' ; Light Tourquiose - dc i2'$0f00' ; Red - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$0f00' ; Red - dc i2'$0f00' ; Red - dc i2'$0f00' ; Red - dc i2'$0f00' ; Red - dc i2'$0f0f' ; Violet - dc i2'$0f0f' ; Violet - dc i2'$0f0f' ; Violet - dc i2'$0f0f' ; Violet - - + dc i2'$0000' ; Black + dc i2'$0f00' ; Red + dc i2'$0ff0' ; Yellow + dc i2'$00fc' ; Light Tourquiose + dc i2'$0ff0' ; Yellow + dc i2'$0ff0' ; Yellow + dc i2'$0ff0' ; Yellow + dc i2'$0ff0' ; Yellow + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$0f00' ; Red + dc i2'$0f00' ; Red + dc i2'$0f00' ; Red + dc i2'$0f00' ; Red + + colour4 anop - dc i2'$0000' ; Black - dc i2'$0f0c' ; Light Violet - dc i2'$00fc' ; Light Tourquiose - dc i2'$0fc0' ; Orange - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$0fc0' ; Orange - dc i2'$0fc0' ; Orange - dc i2'$0fc0' ; Orange - dc i2'$0fc0' ; Orange - dc i2'$0f0c' ; Light Violet - dc i2'$0f0c' ; Light Violet - dc i2'$0f0c' ; Light Violet - dc i2'$0f0c' ; Light Violet - - + dc i2'$0000' ; Black + dc i2'$0fc0' ; Orange + dc i2'$000f' ; Blue + dc i2'$00fc' ; Light Tourquiose + dc i2'$000f' ; Blue + dc i2'$000f' ; Blue + dc i2'$000f' ; Blue + dc i2'$000f' ; Blue + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$0fc0' ; Orange + dc i2'$0fc0' ; Orange + dc i2'$0fc0' ; Orange + dc i2'$0fc0' ; Orange + + colour5 anop dc i2'$0000' ; Black - dc i2'$00ff' ; Tourquiose - dc i2'$0fc0' ; Orange - dc i2'$000f' ; Blue - dc i2'$0fc0' ; Orange - dc i2'$0fc0' ; Orange - dc i2'$0fc0' ; Orange - dc i2'$0fc0' ; Orange - dc i2'$000f' ; Blue - dc i2'$000f' ; Blue - dc i2'$000f' ; Blue - dc i2'$000f' ; Blue - dc i2'$00ff' ; Tourquiose - dc i2'$00ff' ; Tourquiose - dc i2'$00ff' ; Tourquiose - dc i2'$00ff' ; Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$0f0f' ; Violet + dc i2'$0ff0' ; Yellow + dc i2'$0f0f' ; Violet + dc i2'$0f0f' ; Violet + dc i2'$0f0f' ; Violet + dc i2'$0f0f' ; Violet + dc i2'$0ff0' ; Yellow + dc i2'$0ff0' ; Yellow + dc i2'$0ff0' ; Yellow + dc i2'$0ff0' ; Yellow + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + colour6 anop dc i2'$0000' ; Black + dc i2'$00ff' ; Tourquiose dc i2'$0fc0' ; Orange dc i2'$000f' ; Blue - dc i2'$00fc' ; Light Tourquiose - dc i2'$000f' ; Blue - dc i2'$000f' ; Blue - dc i2'$000f' ; Blue - dc i2'$000f' ; Blue - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose dc i2'$0fc0' ; Orange dc i2'$0fc0' ; Orange dc i2'$0fc0' ; Orange dc i2'$0fc0' ; Orange + dc i2'$000f' ; Blue + dc i2'$000f' ; Blue + dc i2'$000f' ; Blue + dc i2'$000f' ; Blue + dc i2'$00ff' ; Tourquiose + dc i2'$00ff' ; Tourquiose + dc i2'$00ff' ; Tourquiose + dc i2'$00ff' ; Tourquiose + colour7 anop - dc i2'$0000' ; Black - dc i2'$0f00' ; Red - dc i2'$000f' ; Blue - dc i2'$0ff0' ; Yellow - dc i2'$000f' ; Blue - dc i2'$000f' ; Blue - dc i2'$000f' ; Blue - dc i2'$000f' ; Blue - dc i2'$0ff0' ; Yellow - dc i2'$0ff0' ; Yellow - dc i2'$0ff0' ; Yellow - dc i2'$0ff0' ; Yellow - dc i2'$0f00' ; Red - dc i2'$0f00' ; Red - dc i2'$0f00' ; Red - dc i2'$0f00' ; Red + dc i2'$0000' ; Black + dc i2'$0ff0' ; Yellow + dc i2'$0f0f' ; Violet + dc i2'$00f0' ; Green + dc i2'$0f0f' ; Violet + dc i2'$0f0f' ; Violet + dc i2'$0f0f' ; Violet + dc i2'$0f0f' ; Violet + dc i2'$00f0' ; Green + dc i2'$00f0' ; Green + dc i2'$00f0' ; Green + dc i2'$00f0' ; Green + dc i2'$0ff0' ; Yellow + dc i2'$0ff0' ; Yellow + dc i2'$0ff0' ; Yellow + dc i2'$0ff0' ; Yellow + colour8 anop - dc i2'$0000' ; Black - dc i2'$0f00' ; Red - dc i2'$0ff0' ; Yellow - dc i2'$00fc' ; Light Tourquiose - dc i2'$0ff0' ; Yellow - dc i2'$0ff0' ; Yellow - dc i2'$0ff0' ; Yellow - dc i2'$0ff0' ; Yellow - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$0f00' ; Red - dc i2'$0f00' ; Red - dc i2'$0f00' ; Red - dc i2'$0f00' ; Red + dc i2'$0000' ; Black + dc i2'$00ff' ; Tourquiose + dc i2'$0f00' ; Red + dc i2'$0ff0' ; Yellow + dc i2'$0f00' ; Red + dc i2'$0f00' ; Red + dc i2'$0f00' ; Red + dc i2'$0f00' ; Red + dc i2'$0ff0' ; Yellow + dc i2'$0ff0' ; Yellow + dc i2'$0ff0' ; Yellow + dc i2'$0ff0' ; Yellow + dc i2'$00ff' ; Tourquiose + dc i2'$00ff' ; Tourquiose + dc i2'$00ff' ; Tourquiose + dc i2'$00ff' ; Tourquiose + colour9 anop - dc i2'$0000' ; Black - dc i2'$0ff0' ; Yellow - dc i2'$0f0f' ; Violet - dc i2'$00f0' ; Green - dc i2'$0f0f' ; Violet - dc i2'$0f0f' ; Violet - dc i2'$0f0f' ; Violet - dc i2'$0f0f' ; Violet - dc i2'$00f0' ; Green - dc i2'$00f0' ; Green - dc i2'$00f0' ; Green - dc i2'$00f0' ; Green - dc i2'$0ff0' ; Yellow - dc i2'$0ff0' ; Yellow - dc i2'$0ff0' ; Yellow - dc i2'$0ff0' ; Yellow - + dc i2'$0000' ; Black + dc i2'$0f0f' ; Violet + dc i2'$00fc' ; Light Tourquiose + dc i2'$0f00' ; Red + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$0f00' ; Red + dc i2'$0f00' ; Red + dc i2'$0f00' ; Red + dc i2'$0f00' ; Red + dc i2'$0f0f' ; Violet + dc i2'$0f0f' ; Violet + dc i2'$0f0f' ; Violet + dc i2'$0f0f' ; Violet + + colour10 anop dc i2'$0000' ; Black + dc i2'$0fc0' ; Orange + dc i2'$000f' ; Blue dc i2'$00fc' ; Light Tourquiose - dc i2'$0f00' ; Red - dc i2'$0ffc' ; Off-white - dc i2'$0f00' ; Red - dc i2'$0f00' ; Red - dc i2'$0f00' ; Red - dc i2'$0f00' ; Red - dc i2'$0ffc' ; Off-white - dc i2'$0ffc' ; Off-white - dc i2'$0ffc' ; Off-white - dc i2'$0ffc' ; Off-white + dc i2'$000f' ; Blue + dc i2'$000f' ; Blue + dc i2'$000f' ; Blue + dc i2'$000f' ; Blue dc i2'$00fc' ; Light Tourquiose dc i2'$00fc' ; Light Tourquiose dc i2'$00fc' ; Light Tourquiose dc i2'$00fc' ; Light Tourquiose - + dc i2'$0fc0' ; Orange + dc i2'$0fc0' ; Orange + dc i2'$0fc0' ; Orange + dc i2'$0fc0' ; Orange + + colour11 anop - dc i2'$0000' ; Black - dc i2'$0ffc' ; Off-white - dc i2'$0f0f' ; Violet - dc i2'$00f0' ; Green - dc i2'$0f0f' ; Violet - dc i2'$0f0f' ; Violet - dc i2'$0f0f' ; Violet - dc i2'$0f0f' ; Violet - dc i2'$00f0' ; Green - dc i2'$00f0' ; Green - dc i2'$00f0' ; Green - dc i2'$00f0' ; Green - dc i2'$0ffc' ; Off-white - dc i2'$0ffc' ; Off-white - dc i2'$0ffc' ; Off-white - dc i2'$0ffc' ; Off-white - + dc i2'$0000' ; Black + dc i2'$00fc' ; Light Tourquiose + dc i2'$0f00' ; Red + dc i2'$0ffc' ; Off-white + dc i2'$0f00' ; Red + dc i2'$0f00' ; Red + dc i2'$0f00' ; Red + dc i2'$0f00' ; Red + dc i2'$0ffc' ; Off-white + dc i2'$0ffc' ; Off-white + dc i2'$0ffc' ; Off-white + dc i2'$0ffc' ; Off-white + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + dc i2'$00fc' ; Light Tourquiose + + colour12 anop - dc i2'$0000' ; Black - dc i2'$0fc0' ; Orange - dc i2'$000f' ; Blue - dc i2'$00fc' ; Light Tourquiose - dc i2'$000f' ; Blue - dc i2'$000f' ; Blue - dc i2'$000f' ; Blue - dc i2'$000f' ; Blue - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$00fc' ; Light Tourquiose - dc i2'$0fc0' ; Orange - dc i2'$0fc0' ; Orange - dc i2'$0fc0' ; Orange - dc i2'$0fc0' ; Orange - anop + dc i2'$0000' ; Black + dc i2'$00f0' ; Green + dc i2'$0f0f' ; Violet + dc i2'$0f00' ; Red + dc i2'$0f0f' ; Violet + dc i2'$0f0f' ; Violet + dc i2'$0f0f' ; Violet + dc i2'$0f0f' ; Violet + dc i2'$0f00' ; Red + dc i2'$0f00' ; Red + dc i2'$0f00' ; Red + dc i2'$0f00' ; Red + dc i2'$00f0' ; Green + dc i2'$00f0' ; Green + dc i2'$00f0' ; Green + dc i2'$00f0' ; Green + + colour13 anop dc i2'$0000' ; Black - dc i2'$00ff' ; Tourquiose dc i2'$0f00' ; Red + dc i2'$000f' ; Blue + dc i2'$0ff0' ; Yellow + dc i2'$000f' ; Blue + dc i2'$000f' ; Blue + dc i2'$000f' ; Blue + dc i2'$000f' ; Blue + dc i2'$0ff0' ; Yellow + dc i2'$0ff0' ; Yellow + dc i2'$0ff0' ; Yellow dc i2'$0ff0' ; Yellow dc i2'$0f00' ; Red dc i2'$0f00' ; Red dc i2'$0f00' ; Red dc i2'$0f00' ; Red - dc i2'$0ff0' ; Yellow - dc i2'$0ff0' ; Yellow - dc i2'$0ff0' ; Yellow - dc i2'$0ff0' ; Yellow - dc i2'$00ff' ; Tourquiose - dc i2'$00ff' ; Tourquiose - dc i2'$00ff' ; Tourquiose - dc i2'$00ff' ; Tourquiose - + + colour14 anop dc i2'$0000' ; Black + dc i2'$0ffc' ; Off-white + dc i2'$0f0f' ; Violet dc i2'$00f0' ; Green dc i2'$0f0f' ; Violet - dc i2'$0f00' ; Red dc i2'$0f0f' ; Violet dc i2'$0f0f' ; Violet dc i2'$0f0f' ; Violet - dc i2'$0f0f' ; Violet - dc i2'$0f00' ; Red - dc i2'$0f00' ; Red - dc i2'$0f00' ; Red - dc i2'$0f00' ; Red dc i2'$00f0' ; Green dc i2'$00f0' ; Green dc i2'$00f0' ; Green dc i2'$00f0' ; Green + dc i2'$0ffc' ; Off-white + dc i2'$0ffc' ; Off-white + dc i2'$0ffc' ; Off-white + dc i2'$0ffc' ; Off-white + end diff --git a/BuGS/game.s b/BuGS/game.s index 29cd2f9..1a568c2 100644 --- a/BuGS/game.s +++ b/BuGS/game.s @@ -26,7 +26,7 @@ game start jsl setupScreen - lda colourPalette + lda #0 jsl setColour gameLoop anop @@ -108,6 +108,7 @@ gameLoop anop jsl updateSpider jsl updateFlea jsl updateSegments + jsl updateLevel jsl checkKeyboard jsl waitForVbl @@ -203,6 +204,11 @@ nextWord anop rtl +startGame entry + stz gameRunning + stz numSegments + jsl levelInit + jmp levelStart checkKeyboard entry @@ -243,21 +249,11 @@ checkKey_loop2 anop cmp #'g' beq checkKey_game - - cmp #'c' - beq checkKey_centipede + cmp #'c' + beq checkKey_shootCentipede cmp #'C' beq checkKey_shootCentipede - lda colourPalette - inc a - cmp #NUM_COLOUR_PALETTES - blt checkKey_skip - lda #$0000 -checkKey_skip anop - sta colourPalette - jmp setColour - checkKey_done anop rtl @@ -303,22 +299,7 @@ checkKey_slow anop jmp setScorpionSpeed checkKey_game anop - jsl levelInit - jmp levelStart - -checkKey_centipede anop - jsl addFastHeadSegment - jsl addSlowHeadSegment - jsl addBodySegment - jsl addBodySegment - jsl addBodySegment - jsl addBodySegment - jsl addBodySegment - jsl addBodySegment - jsl addBodySegment - jsl addBodySegment - jsl addBodySegment - jmp addBodySegment + jmp startGame waitForKey entry @@ -347,7 +328,6 @@ vblLoop anop rtl -colourPalette dc i2'0' shouldQuit dc i2'1' borderColour dc i2'0' diff --git a/BuGS/gameSegments.s b/BuGS/gameSegments.s index 839d705..6e1b5a8 100644 --- a/BuGS/gameSegments.s +++ b/BuGS/gameSegments.s @@ -39,8 +39,7 @@ SEGMENT_FACING_RIGHT equ 128 SEGMENT_MAX_POSITION_OFFSET equ TILE_PIXEL_WIDTH*SEGMENT_MAX_NUM*2-2 - - + drawSegments entry ldx #SEGMENT_MAX_OFFSET drawSegments_nextSegment anop @@ -1527,106 +1526,6 @@ addBodySegment_slow anop sta segmentCurrentTile,y rtl - - -addSlowHeadSegment entry - lda numSegments - asl a - tax - - lda #SEGMENT_STATE_HEAD - sta segmentStates,x - - lda #SEGMENT_SPEED_SLOW - sta segmentSpeed,x - - txa - asl a - asl a - asl a - sta segmentPosOffset,x - tay - - lda #SEGMENT_DIR_RIGHT - sta segmentHorizontalDir,y - - lda #SEGMENT_DIR_DOWN - sta segmentVerticalDir,y - - lda #SEGMENT_FACING_DOWN_LEFT - sta segmentFacing,y - - ldx #32 - lda tileScreenOffset,x - sec - sbc #SCREEN_BYTES_PER_ROW*7+2 - sta segmentScreenOffsets,y - - txa - sta segmentTileOffsetsUL,y - sta segmentTileOffsetsLL,y - sta segmentCurrentTile,y - lda tileRight,x - sta segmentTileOffsetsUR,y - sta segmentTileOffsetsLR,y - - inc numSegments - lda #5 - sta segmentPixelOffset - lda #1 - sta segmentsAddEnabled - - rtl - - -addFastHeadSegment entry - lda numSegments - asl a - tax - - lda #SEGMENT_STATE_HEAD - sta segmentStates,x - - lda #SEGMENT_SPEED_FAST - sta segmentSpeed,x - - txa - asl a - asl a - asl a - sta segmentPosOffset,x - tay - - lda #SEGMENT_DIR_RIGHT - sta segmentHorizontalDir,y - - lda #SEGMENT_DIR_DOWN - sta segmentVerticalDir,y - - lda #SEGMENT_FACING_DOWN_LEFT - sta segmentFacing,y - - ldx #16 - lda tileScreenOffset,x - sec - sbc #SCREEN_BYTES_PER_ROW*8+2 - sta segmentScreenOffsets,y - - txa - sta segmentTileOffsetsUL,y - sta segmentTileOffsetsLL,y - sta segmentCurrentTile,y - lda tileRight,x - sta segmentTileOffsetsUR,y - sta segmentTileOffsetsLR,y - - inc numSegments - lda #5 - sta segmentPixelOffset - lda #1 - sta segmentsAddEnabled - - rtl ; This method is called with X register pointing to a structure which has the following info in it: @@ -1816,7 +1715,6 @@ shootRandomSegment_hasSegments anop jmp shootSegment -numSegments dc i2'0' segmentsAddEnabled dc i2'1' ; The method used to track a segments position and other details on the screen are a bit diff --git a/BuGS/globals.s b/BuGS/globals.s index 33d3cc8..d8d319c 100644 --- a/BuGS/globals.s +++ b/BuGS/globals.s @@ -136,6 +136,8 @@ BORDER_COLOUR_REGISTER gequ $e0c034 STATE_REGISTER gequ $e1c068 VERTICAL_COUNTER gequ $e0c02e +gameRunning dc i2'1' +numSegments dc i2'0' backupStack dc i2'0' diff --git a/BuGS/level.s b/BuGS/level.s index 863ecac..7c8c581 100644 --- a/BuGS/level.s +++ b/BuGS/level.s @@ -13,6 +13,8 @@ level start using globalData +NEXT_LEVEL_FRAME_COUNT equ 60 + levelInit entry stz centipedeLevelNum @@ -44,6 +46,24 @@ levelStart_done anop rtl +updateLevel entry + lda gameRunning + bne updateLevel_done + lda nextLevelFrameCount + beq updateLevel_checkSegments + dec a + sta nextLevelFrameCount + bne updateLevel_done + jsl levelNext + jmp levelStart +updateLevel_checkSegments anop + lda numSegments + bne updateLevel_done + lda #NEXT_LEVEL_FRAME_COUNT + sta nextLevelFrameCount +updateLevel_done anop + rtl + levelNext entry lda colourLevelNum inc a @@ -69,6 +89,7 @@ levelNext_noWrap anop centipedeLevelNum dc i2'0' colourLevelNum dc i2'0' centipedeNum dc i2'0' +nextLevelFrameCount dc i2'0' ; The level structure looks like this: ; number of independent centipedes (2 bytes)