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.

This commit is contained in:
Jeremy Rand 2020-10-20 23:13:46 -04:00
parent 6c3b8398a8
commit 1f26b38784
5 changed files with 233 additions and 322 deletions

View File

@ -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

View File

@ -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'

View File

@ -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

View File

@ -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'

View File

@ -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)