From 1f26b38784cdc07a0a8ef0d191b2485ae783768a Mon Sep 17 00:00:00 2001 From: Jeremy Rand Date: Tue, 20 Oct 2020 23:13:46 -0400 Subject: [PATCH] Fix the order of colours for the different levels. Remove the debug code to add centipedes and change the colour palette. This is gone now because we now have the concept of starting a game and progressing through levels with different kinds of centipedes running at different speeds with different palette colours. --- BuGS/colour.s | 388 +++++++++++++++++++++++--------------------- BuGS/game.s | 40 ++--- BuGS/gameSegments.s | 104 +----------- BuGS/globals.s | 2 + BuGS/level.s | 21 +++ 5 files changed, 233 insertions(+), 322 deletions(-) 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)