Groundwork for moving characters
This commit is contained in:
parent
fad2daa4d7
commit
4ddb742b5f
|
@ -125,10 +125,15 @@ gameplayLoopPower:
|
||||||
|
|
||||||
gameplayLoopFire:
|
gameplayLoopFire:
|
||||||
lda fireRequested
|
lda fireRequested
|
||||||
beq gameplayLoopRender
|
beq gameplayLoopMove
|
||||||
jsr unrenderCrosshair
|
jsr unrenderCrosshair
|
||||||
jsr fire
|
jsr fire
|
||||||
|
|
||||||
|
gameplayLoopMove:
|
||||||
|
lda playerMoveRequested
|
||||||
|
beq gameplayLoopRender
|
||||||
|
jsr move
|
||||||
|
|
||||||
; BORDER_COLOR #$2
|
; BORDER_COLOR #$2
|
||||||
|
|
||||||
gameplayLoopRender:
|
gameplayLoopRender:
|
||||||
|
@ -397,6 +402,24 @@ fire:
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; move
|
||||||
|
;
|
||||||
|
; Handles moving a player
|
||||||
|
;
|
||||||
|
move:
|
||||||
|
jsr unrenderCrosshair
|
||||||
|
jsr unrenderPlayers
|
||||||
|
lda #playerData
|
||||||
|
sta PARAML0
|
||||||
|
ldx playerMoveRequested
|
||||||
|
jsr moveGameObjectOnTerrain
|
||||||
|
stz playerMoveRequested
|
||||||
|
jsr renderPlayers
|
||||||
|
jsr renderCrosshair
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
basePalette:
|
basePalette:
|
||||||
.word $06af,$0072,$0072,$0861,$0c93,$0eb4,$0d66,$0f9a,$0777,$0d00,$0bbb,$ddd,$007b,$0a5b,$0000,$0fff
|
.word $06af,$0072,$0072,$0861,$0c93,$0eb4,$0d66,$0f9a,$0777,$0d00,$0bbb,$ddd,$007b,$0a5b,$0000,$0fff
|
||||||
|
|
||||||
|
@ -413,6 +436,8 @@ fireRequested:
|
||||||
.word $0000
|
.word $0000
|
||||||
turnRequested:
|
turnRequested:
|
||||||
.word $0000
|
.word $0000
|
||||||
|
playerMoveRequested:
|
||||||
|
.word $0000
|
||||||
terrainDirty:
|
terrainDirty:
|
||||||
.word 1
|
.word 1
|
||||||
projectilesDirty:
|
projectilesDirty:
|
||||||
|
|
120
gameobject.s
120
gameobject.s
|
@ -8,6 +8,7 @@
|
||||||
GAMEOBJECTWIDTH = 16
|
GAMEOBJECTWIDTH = 16
|
||||||
GAMEOBJECTHEIGHT = 16
|
GAMEOBJECTHEIGHT = 16
|
||||||
MAXGAMEOBJECTS = 6 ; Size of general purpose object pool
|
MAXGAMEOBJECTS = 6 ; Size of general purpose object pool
|
||||||
|
MAXCLIMB = 16 ; Highest pixel cliff we can climb
|
||||||
|
|
||||||
|
|
||||||
; Base class sample:
|
; Base class sample:
|
||||||
|
@ -25,16 +26,15 @@ GO_BACKGROUND = 4
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; placeGameObjectOnTerrain
|
; terrainHeightAtGameObjectPos
|
||||||
|
;
|
||||||
|
; A = GameObject position (left-edge relative)
|
||||||
|
; A -> Terrain height at that position
|
||||||
;
|
;
|
||||||
; PARAML0 = Pointer to gameobject data
|
|
||||||
; Trashes SCRATCHL
|
; Trashes SCRATCHL
|
||||||
;
|
;
|
||||||
placeGameObjectOnTerrain:
|
terrainHeightAtGameObjectPos:
|
||||||
SAVE_AY
|
phy
|
||||||
|
|
||||||
ldy #GO_POSX
|
|
||||||
lda (PARAML0),y
|
|
||||||
clc ; Map into reversed terrain X space
|
clc ; Map into reversed terrain X space
|
||||||
adc #GAMEOBJECTWIDTH
|
adc #GAMEOBJECTWIDTH
|
||||||
sta SCRATCHL
|
sta SCRATCHL
|
||||||
|
@ -45,7 +45,35 @@ placeGameObjectOnTerrain:
|
||||||
and #$fffe ; Force even
|
and #$fffe ; Force even
|
||||||
tay
|
tay
|
||||||
lda terrainData,y
|
lda terrainData,y
|
||||||
|
ply
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; placeGameObjectOnTerrain
|
||||||
|
;
|
||||||
|
; PARAML0 = Pointer to gameobject data
|
||||||
|
; Trashes SCRATCHL,SCRATCHL2
|
||||||
|
;
|
||||||
|
placeGameObjectOnTerrain:
|
||||||
|
SAVE_AY
|
||||||
|
|
||||||
|
; Check forwardmost position
|
||||||
|
ldy #GO_POSX
|
||||||
|
lda (PARAML0),y
|
||||||
|
jsr terrainHeightAtGameObjectPos
|
||||||
|
sta SCRATCHL2
|
||||||
|
|
||||||
|
; Check rearmost position
|
||||||
|
ldy #GO_POSX
|
||||||
|
lda (PARAML0),y
|
||||||
|
sec
|
||||||
|
sbc #GAMEOBJECTWIDTH
|
||||||
|
jsr terrainHeightAtGameObjectPos
|
||||||
|
cmp SCRATCHL2 ; Take higher value
|
||||||
|
bcc placeGameObjectOnTerrainRear
|
||||||
|
|
||||||
|
placeGameObjectOnTerrainDone:
|
||||||
clc
|
clc
|
||||||
adc #GAMEOBJECTHEIGHT
|
adc #GAMEOBJECTHEIGHT
|
||||||
ldy #GO_POSY
|
ldy #GO_POSY
|
||||||
|
@ -54,6 +82,84 @@ placeGameObjectOnTerrain:
|
||||||
RESTORE_AY
|
RESTORE_AY
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
placeGameObjectOnTerrainRear:
|
||||||
|
lda SCRATCHL2
|
||||||
|
bra placeGameObjectOnTerrainDone
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; moveGameObjectOnTerrain
|
||||||
|
;
|
||||||
|
; PARAML0 = Pointer to gameobject data
|
||||||
|
; X = Delta in pixels
|
||||||
|
;
|
||||||
|
; Trashes SCRATCHL,SCRATCHL2
|
||||||
|
;
|
||||||
|
moveGameObjectOnTerrain:
|
||||||
|
SAVE_AY
|
||||||
|
|
||||||
|
stx SCRATCHL2
|
||||||
|
|
||||||
|
ldy #GO_POSX
|
||||||
|
lda (PARAML0),y
|
||||||
|
clc
|
||||||
|
adc SCRATCHL2 ; Apply X delta
|
||||||
|
|
||||||
|
clc ; Map into reversed terrain X space
|
||||||
|
adc #GAMEOBJECTWIDTH
|
||||||
|
sta SCRATCHL
|
||||||
|
lda #TERRAINWIDTH
|
||||||
|
sec
|
||||||
|
sbc SCRATCHL
|
||||||
|
sta SCRATCHL ; Desired X position
|
||||||
|
|
||||||
|
ldy #GO_POSY
|
||||||
|
lda (PARAML0),y
|
||||||
|
sec
|
||||||
|
sbc #GAMEOBJECTHEIGHT
|
||||||
|
sta SCRATCHL2 ; Current Y position
|
||||||
|
|
||||||
|
lda SCRATCHL ; Check terrain height at new position
|
||||||
|
pha
|
||||||
|
jsr terrainHeightAtGameObjectPos
|
||||||
|
sec
|
||||||
|
sbc SCRATCHL2
|
||||||
|
bmi moveGameObjectOnTerrainStepDown
|
||||||
|
|
||||||
|
moveGameObjectOnTerrainCheckHeight:
|
||||||
|
cmp #MAXCLIMB
|
||||||
|
bcs moveGameObjectOnTerrainTooFar
|
||||||
|
bra moveGameObjectOnTerrainStore
|
||||||
|
|
||||||
|
moveGameObjectOnTerrainStepDown:
|
||||||
|
dec
|
||||||
|
eor #$ffff
|
||||||
|
bra moveGameObjectOnTerrainCheckHeight
|
||||||
|
|
||||||
|
moveGameObjectOnTerrainStore:
|
||||||
|
pla
|
||||||
|
sta SCRATCHL
|
||||||
|
|
||||||
|
; Reverse X position again
|
||||||
|
lda #TERRAINWIDTH
|
||||||
|
sec
|
||||||
|
sbc #GAMEOBJECTWIDTH
|
||||||
|
sbc SCRATCHL
|
||||||
|
|
||||||
|
ldy #GO_POSX
|
||||||
|
sta (PARAML0),y
|
||||||
|
jsr placeGameObjectOnTerrain
|
||||||
|
|
||||||
|
moveGameObjectOnTerrainTooDone:
|
||||||
|
RESTORE_AY
|
||||||
|
rts
|
||||||
|
|
||||||
|
moveGameObjectOnTerrainTooFar:
|
||||||
|
pla
|
||||||
|
bra moveGameObjectOnTerrainTooDone
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; vramPtr
|
; vramPtr
|
||||||
|
|
36
input.s
36
input.s
|
@ -28,7 +28,7 @@ kbdScanTitle:
|
||||||
beq kbdScanEnterTitle
|
beq kbdScanEnterTitle
|
||||||
cmp #(32 + $80)
|
cmp #(32 + $80)
|
||||||
beq kbdScanSpaceTitle
|
beq kbdScanSpaceTitle
|
||||||
bra kbdScanDebugPiggyback
|
jmp kbdScanDebugPiggyback
|
||||||
|
|
||||||
kbdScanTitleDone:
|
kbdScanTitleDone:
|
||||||
BITS16
|
BITS16
|
||||||
|
@ -64,6 +64,22 @@ kbdScanSpaceTitle:
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;
|
||||||
|
|
||||||
|
kbdScanApostrophe:
|
||||||
|
BITS16
|
||||||
|
lda #2
|
||||||
|
sta playerMoveRequested
|
||||||
|
rts
|
||||||
|
|
||||||
|
kbdScanSemiColon:
|
||||||
|
BITS16
|
||||||
|
lda #-2
|
||||||
|
sta playerMoveRequested
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; kbdScanGameplay/Debug
|
; kbdScanGameplay/Debug
|
||||||
; Processes keyboard input for gameplay
|
; Processes keyboard input for gameplay
|
||||||
|
@ -93,6 +109,10 @@ kbdScanGameplay:
|
||||||
beq kbdScanPeriod
|
beq kbdScanPeriod
|
||||||
cmp #(' ' + $80)
|
cmp #(' ' + $80)
|
||||||
beq kbdScanSpace
|
beq kbdScanSpace
|
||||||
|
cmp #(';' + $80)
|
||||||
|
beq kbdScanSemiColon
|
||||||
|
cmp #(39 + $80)
|
||||||
|
beq kbdScanApostrophe
|
||||||
cmp #(9 + $80)
|
cmp #(9 + $80)
|
||||||
bne kbdScanDebugPiggyback
|
bne kbdScanDebugPiggyback
|
||||||
jmp kbdScanTab
|
jmp kbdScanTab
|
||||||
|
@ -116,7 +136,6 @@ kbdScanDebugPiggyback:
|
||||||
beq kbdScanEquals
|
beq kbdScanEquals
|
||||||
bra kbdScanDone
|
bra kbdScanDone
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; Gameplay Key Handlers
|
; Gameplay Key Handlers
|
||||||
;
|
;
|
||||||
|
@ -145,13 +164,6 @@ kbdScanComma:
|
||||||
sta mapScrollRequested
|
sta mapScrollRequested
|
||||||
rts
|
rts
|
||||||
|
|
||||||
kbdScanESC:
|
|
||||||
BITS16
|
|
||||||
|
|
||||||
lda #1
|
|
||||||
sta quitRequested
|
|
||||||
rts
|
|
||||||
|
|
||||||
kbdScanLeftArrow:
|
kbdScanLeftArrow:
|
||||||
BITS16
|
BITS16
|
||||||
lda #2
|
lda #2
|
||||||
|
@ -176,6 +188,12 @@ kbdScanDownArrow:
|
||||||
sta powerDeltaRequested
|
sta powerDeltaRequested
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
kbdScanESC:
|
||||||
|
BITS16
|
||||||
|
lda #1
|
||||||
|
sta quitRequested
|
||||||
|
rts
|
||||||
|
|
||||||
kbdScanSpace:
|
kbdScanSpace:
|
||||||
BITS16
|
BITS16
|
||||||
lda #1
|
lda #1
|
||||||
|
|
Loading…
Reference in New Issue