mirror of
https://github.com/jeremysrand/colourgo.git
synced 2024-05-31 21:41:29 +00:00
Clean up the character update code. All the character to change colour. Hook up exit handling.
This commit is contained in:
parent
38c75e881c
commit
7871fd9a80
194
colourgo/game.s
194
colourgo/game.s
|
@ -35,7 +35,7 @@ COL_GREEN=2
|
||||||
COL_WHITE=3
|
COL_WHITE=3
|
||||||
|
|
||||||
CHAR_HEIGHT=10
|
CHAR_HEIGHT=10
|
||||||
NUM_CHAR_POS=3
|
NUM_CHAR_BITMAPS=3
|
||||||
CHAR_MAX_JUMPS=2
|
CHAR_MAX_JUMPS=2
|
||||||
|
|
||||||
CHAR_STATE_NONE=0
|
CHAR_STATE_NONE=0
|
||||||
|
@ -257,16 +257,8 @@ LINE191 = LINE190 + 1024
|
||||||
jsr updateCharacter
|
jsr updateCharacter
|
||||||
jsr updateGrid
|
jsr updateGrid
|
||||||
|
|
||||||
lda KEYBOARD
|
lda shouldQuit
|
||||||
bpl @L1
|
beq @L1
|
||||||
lda STROBE
|
|
||||||
|
|
||||||
inc gridColour
|
|
||||||
lda gridColour
|
|
||||||
and #COL_WHITE
|
|
||||||
sta gridColour
|
|
||||||
sta characterColour
|
|
||||||
jmp @L1
|
|
||||||
|
|
||||||
lda TXTSET
|
lda TXTSET
|
||||||
|
|
||||||
|
@ -276,30 +268,40 @@ LINE191 = LINE190 + 1024
|
||||||
|
|
||||||
|
|
||||||
.proc updateCharacter
|
.proc updateCharacter
|
||||||
lda characterY
|
|
||||||
sta characterOldY
|
; Save the old character position so it can be erased
|
||||||
lda characterYBottom
|
|
||||||
sta characterOldYBottom
|
jsr updateCharacterState
|
||||||
|
jsr updateCharacterPos
|
||||||
|
jsr updateCharacterBitmap
|
||||||
|
jsr updateCharacterColour
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
|
||||||
|
.proc updateCharacterState
|
||||||
|
|
||||||
lda BUTN1
|
lda BUTN1
|
||||||
bpl @L7
|
bpl @L1
|
||||||
lda #$01
|
lda #$01
|
||||||
jmp @L8
|
jmp @L2
|
||||||
@L7:
|
@L1:
|
||||||
lda #$00
|
lda #$00
|
||||||
@L8:
|
@L2:
|
||||||
cmp lastButtonState
|
cmp lastButtonState
|
||||||
beq @L3
|
beq @L4 ; No change in button state so exit
|
||||||
sta lastButtonState
|
sta lastButtonState
|
||||||
|
|
||||||
lda characterState
|
lda characterState
|
||||||
cmp #CHAR_STATE_JUMPING
|
cmp #CHAR_STATE_JUMPING
|
||||||
beq @L2
|
beq @L3 ; Character is jumping, go to L3
|
||||||
lda lastButtonState
|
lda lastButtonState
|
||||||
beq @L3
|
beq @L4 ; If button is not down, exit
|
||||||
ldx characterNumJumps
|
ldx characterNumJumps
|
||||||
cpx #CHAR_MAX_JUMPS
|
cpx #CHAR_MAX_JUMPS
|
||||||
beq @L3
|
beq @L4 ; If we have reached max jumps, exit
|
||||||
inx
|
inx
|
||||||
stx characterNumJumps
|
stx characterNumJumps
|
||||||
lda #CHAR_STATE_JUMPING
|
lda #CHAR_STATE_JUMPING
|
||||||
|
@ -308,38 +310,91 @@ LINE191 = LINE190 + 1024
|
||||||
sta characterYSpeed
|
sta characterYSpeed
|
||||||
lda #0
|
lda #0
|
||||||
sta characterYSpeedFrac
|
sta characterYSpeedFrac
|
||||||
jmp @L3
|
jmp @L4
|
||||||
|
|
||||||
@L2: ; Character is jumping
|
@L3: ; Character is jumping
|
||||||
lda lastButtonState
|
lda lastButtonState
|
||||||
bne @L3
|
bne @L4 ; If the button is still pressed, exit
|
||||||
lda #CHAR_STATE_FALLING
|
lda #CHAR_STATE_FALLING
|
||||||
sta characterState
|
sta characterState
|
||||||
lda #0
|
lda #0
|
||||||
sta characterYSpeed
|
sta characterYSpeed
|
||||||
sta characterYSpeedFrac
|
sta characterYSpeedFrac
|
||||||
|
|
||||||
@L3: ; Done changing character jumping state
|
@L4:
|
||||||
|
rts
|
||||||
|
|
||||||
|
; Local
|
||||||
|
lastButtonState: .BYTE $00
|
||||||
|
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
|
||||||
|
.proc updateCharacterPos
|
||||||
|
|
||||||
|
lda characterY
|
||||||
|
sta characterOldY
|
||||||
|
lda characterYBottom
|
||||||
|
sta characterOldYBottom
|
||||||
|
|
||||||
lda characterState
|
lda characterState
|
||||||
cmp #CHAR_STATE_NONE
|
cmp #CHAR_STATE_NONE
|
||||||
|
bne @L1 ; Nothing to do if not jumping or falling
|
||||||
|
rts
|
||||||
|
@L1:
|
||||||
|
cmp #CHAR_STATE_JUMPING
|
||||||
beq @L4
|
beq @L4
|
||||||
|
|
||||||
|
; For falling, we need to calculate the bottom first and check
|
||||||
|
; for collisions
|
||||||
lda characterYBottom
|
lda characterYBottom
|
||||||
clc
|
clc
|
||||||
adc characterYSpeed
|
adc characterYSpeed
|
||||||
cmp gridY
|
cmp gridY
|
||||||
bmi @L5
|
bmi @L2
|
||||||
lda gridY
|
lda gridY
|
||||||
sta characterYBottom
|
sta characterYBottom
|
||||||
lda #0
|
lda #0
|
||||||
sta characterYSpeed
|
sta characterYSpeed
|
||||||
sta characterYSpeedFrac
|
sta characterYSpeedFrac
|
||||||
|
sta characterNumJumps
|
||||||
lda #CHAR_STATE_NONE
|
lda #CHAR_STATE_NONE
|
||||||
sta characterState
|
sta characterState
|
||||||
|
jmp @L3
|
||||||
|
@L2: ; Did not hit the grid, update speed from gravity
|
||||||
|
sta characterYBottom
|
||||||
|
lda characterYSpeedFrac
|
||||||
|
clc
|
||||||
|
adc #GRAVITY
|
||||||
|
sta characterYSpeedFrac
|
||||||
|
bcc @L3
|
||||||
|
inc characterYSpeed
|
||||||
|
@L3: ; Need to calculate characterY now from characterYBottom
|
||||||
|
lda characterYBottom
|
||||||
|
sec
|
||||||
|
sbc #CHAR_HEIGHT
|
||||||
|
sta characterY
|
||||||
|
rts
|
||||||
|
|
||||||
|
@L4:
|
||||||
|
; For jumping, we need to calculate the top first and check
|
||||||
|
; for collisions
|
||||||
|
lda characterY
|
||||||
|
clc
|
||||||
|
adc characterYSpeed
|
||||||
|
cmp gridY ; TODO - fix this compare
|
||||||
|
bmi @L5
|
||||||
|
lda gridY
|
||||||
|
sta characterY
|
||||||
lda #0
|
lda #0
|
||||||
|
sta characterYSpeed
|
||||||
|
sta characterYSpeedFrac
|
||||||
sta characterNumJumps
|
sta characterNumJumps
|
||||||
|
lda #CHAR_STATE_FALLING
|
||||||
|
sta characterState
|
||||||
jmp @L6
|
jmp @L6
|
||||||
@L5: ; Did not hit the grid, update speed from gravity
|
@L5: ; Did not hit the grid, update speed from gravity
|
||||||
sta characterYBottom
|
sta characterY
|
||||||
lda characterYSpeedFrac
|
lda characterYSpeedFrac
|
||||||
clc
|
clc
|
||||||
adc #GRAVITY
|
adc #GRAVITY
|
||||||
|
@ -349,26 +404,59 @@ LINE191 = LINE190 + 1024
|
||||||
bmi @L6
|
bmi @L6
|
||||||
lda #CHAR_STATE_FALLING
|
lda #CHAR_STATE_FALLING
|
||||||
sta characterState
|
sta characterState
|
||||||
@L6: ; Need to calculate characterY now from characterYBottom
|
@L6: ; Need to calculate characterYBottom now from characterY
|
||||||
lda characterYBottom
|
lda characterY
|
||||||
sec
|
clc
|
||||||
sbc #10
|
adc #CHAR_HEIGHT
|
||||||
sta characterY
|
sta characterYBottom
|
||||||
|
rts
|
||||||
|
|
||||||
@L4: ; Done changing character position
|
.endproc
|
||||||
ldx characterPos
|
|
||||||
|
|
||||||
|
.proc updateCharacterBitmap
|
||||||
|
|
||||||
|
ldx characterBitmap
|
||||||
inx
|
inx
|
||||||
cpx #NUM_CHAR_POS
|
cpx #NUM_CHAR_BITMAPS
|
||||||
bne @L1
|
bne @L1
|
||||||
ldx #0
|
ldx #0
|
||||||
@L1:
|
@L1:
|
||||||
stx characterPos
|
stx characterBitmap
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
; Local
|
.endproc
|
||||||
lastButtonState: .BYTE $00
|
|
||||||
|
|
||||||
|
|
||||||
|
.proc updateCharacterColour
|
||||||
|
lda KEYBOARD
|
||||||
|
bpl @L1
|
||||||
|
cmp #$9b ; Compare to Escape
|
||||||
|
beq @L2
|
||||||
|
cmp #$d1 ; Compare to 'Q'
|
||||||
|
beq @L2
|
||||||
|
cmp #$f1 ; Compare to 'q'
|
||||||
|
beq @L2
|
||||||
|
|
||||||
|
lda STROBE
|
||||||
|
lda characterColour
|
||||||
|
cmp #COL_VIOLET
|
||||||
|
beq @L3
|
||||||
|
lda #COL_VIOLET
|
||||||
|
jmp @L4
|
||||||
|
@L3:
|
||||||
|
lda #COL_GREEN
|
||||||
|
@L4:
|
||||||
|
sta characterColour
|
||||||
|
jmp @L1
|
||||||
|
|
||||||
|
@L2:
|
||||||
|
lda STROBE
|
||||||
|
lda #$01
|
||||||
|
sta shouldQuit
|
||||||
|
|
||||||
|
@L1: ; No key pressed
|
||||||
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
|
||||||
|
@ -379,10 +467,10 @@ lastButtonState: .BYTE $00
|
||||||
lda colourOddLookup,x
|
lda colourOddLookup,x
|
||||||
sta oddVal
|
sta oddVal
|
||||||
|
|
||||||
ldx characterPos
|
ldx characterBitmap
|
||||||
lda characterPosLo,x
|
lda characterBitmapLo,x
|
||||||
sta ZPADDR1
|
sta ZPADDR1
|
||||||
lda characterPosHi,x
|
lda characterBitmapHi,x
|
||||||
sta ZPADDR1+1
|
sta ZPADDR1+1
|
||||||
|
|
||||||
ldx characterOldY
|
ldx characterOldY
|
||||||
|
@ -665,7 +753,7 @@ evenGrid:
|
||||||
oddGrid:
|
oddGrid:
|
||||||
.BYTE $60, $18, $06, $01, $00, $00, $00
|
.BYTE $60, $18, $06, $01, $00, $00, $00
|
||||||
|
|
||||||
character1Bitmap:
|
characterBitmap1:
|
||||||
.BYTE $70, $01
|
.BYTE $70, $01
|
||||||
.BYTE $70, $01
|
.BYTE $70, $01
|
||||||
.BYTE $30, $00
|
.BYTE $30, $00
|
||||||
|
@ -677,7 +765,7 @@ character1Bitmap:
|
||||||
.BYTE $40, $01
|
.BYTE $40, $01
|
||||||
.BYTE $40, $01
|
.BYTE $40, $01
|
||||||
|
|
||||||
character2Bitmap:
|
characterBitmap2:
|
||||||
.BYTE $70, $01
|
.BYTE $70, $01
|
||||||
.BYTE $70, $01
|
.BYTE $70, $01
|
||||||
.BYTE $30, $00
|
.BYTE $30, $00
|
||||||
|
@ -689,7 +777,7 @@ character2Bitmap:
|
||||||
.BYTE $43, $07
|
.BYTE $43, $07
|
||||||
.BYTE $03, $00
|
.BYTE $03, $00
|
||||||
|
|
||||||
character3Bitmap:
|
characterBitmap3:
|
||||||
.BYTE $70, $01
|
.BYTE $70, $01
|
||||||
.BYTE $70, $01
|
.BYTE $70, $01
|
||||||
.BYTE $30, $00
|
.BYTE $30, $00
|
||||||
|
@ -701,14 +789,14 @@ character3Bitmap:
|
||||||
.BYTE $3f, $00
|
.BYTE $3f, $00
|
||||||
.BYTE $0c, $00
|
.BYTE $0c, $00
|
||||||
|
|
||||||
characterPosLo:
|
characterBitmapLo:
|
||||||
.LOBYTES character1Bitmap, character2Bitmap, character3Bitmap
|
.LOBYTES characterBitmap1, characterBitmap2, characterBitmap3
|
||||||
|
|
||||||
characterPosHi:
|
characterBitmapHi:
|
||||||
.HIBYTES character1Bitmap, character2Bitmap, character3Bitmap
|
.HIBYTES characterBitmap1, characterBitmap2, characterBitmap3
|
||||||
|
|
||||||
characterColour: .BYTE COL_VIOLET
|
characterColour: .BYTE COL_VIOLET
|
||||||
characterPos: .BYTE $00
|
characterBitmap: .BYTE $00
|
||||||
characterY: .BYTE GRID_YPOS-CHAR_HEIGHT
|
characterY: .BYTE GRID_YPOS-CHAR_HEIGHT
|
||||||
characterYBottom: .BYTE GRID_YPOS
|
characterYBottom: .BYTE GRID_YPOS
|
||||||
characterOldY: .BYTE GRID_YPOS-CHAR_HEIGHT
|
characterOldY: .BYTE GRID_YPOS-CHAR_HEIGHT
|
||||||
|
@ -722,3 +810,5 @@ gridColour: .BYTE COL_VIOLET
|
||||||
gridY: .BYTE GRID_YPOS
|
gridY: .BYTE GRID_YPOS
|
||||||
gridXPos: .BYTE $00
|
gridXPos: .BYTE $00
|
||||||
|
|
||||||
|
shouldQuit: .BYTE $00
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user