Basic player movement working

Also fixed a bunch of bugs in crosshair rendering
This commit is contained in:
blondie7575 2023-08-26 17:04:17 -07:00
parent c77f1d4c84
commit d0bfa23d60
4 changed files with 106 additions and 9 deletions

View File

@ -97,6 +97,29 @@ renderCrosshairDone:
rts rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; protectCrosshair
;
; Trashes PARAML0
;
protectCrosshair:
pha
lda #crosshairGameObject
sta PARAML0
jsr vramPtr
cpx #$ffff
beq protectCrosshairDone
lda #crosshairGameObject+GO_BACKGROUND
sta PARAML0
jsr protectGameObject
protectCrosshairDone:
pla
rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; unrenderCrosshair ; unrenderCrosshair
; ;

View File

@ -96,7 +96,8 @@ gameplayLoopScroll:
bmi gameplayLoopAngleCheck bmi gameplayLoopAngleCheck
jsr scrollMap jsr scrollMap
jsr updateCrosshair
jsr protectCrosshair
gameplayLoopAngleCheck: gameplayLoopAngleCheck:
lda projectileActive ; Skip interactivity during shots lda projectileActive ; Skip interactivity during shots
@ -115,6 +116,7 @@ gameplayLoopAim:
jsr unrenderCrosshair jsr unrenderCrosshair
ldy currentPlayer ldy currentPlayer
jsr updateCrosshair jsr updateCrosshair
jsr protectCrosshair
jsr renderCrosshair jsr renderCrosshair
gameplayLoopPower: gameplayLoopPower:
@ -289,6 +291,8 @@ endTurnHeader:
jsr renderPlayerHeader jsr renderPlayerHeader
jsr renderInventory jsr renderInventory
stz turnRequested stz turnRequested
jsr protectCrosshair
rts rts
endTurnFocusPlayer0: endTurnFocusPlayer0:
@ -337,7 +341,7 @@ scrollMapApplyScrolling:
asl asl
sta leftScreenEdge sta leftScreenEdge
clc clc
adc #160-GAMEOBJECTWIDTH/4-1 adc #160-GAMEOBJECTWIDTH/4-2
sta rightScreenEdge sta rightScreenEdge
jsr clipTerrain jsr clipTerrain
@ -408,15 +412,53 @@ fire:
; Handles moving a player ; Handles moving a player
; ;
move: move:
SAVE_AY
; Unrender everything
jsr unrenderCrosshair jsr unrenderCrosshair
jsr unrenderPlayers jsr unrenderPlayers
lda #playerData
; Find active player game object data
ldy currentPlayer
PLAYERPTR_Y
tya
clc
adc #playerData
sta PARAML0 sta PARAML0
; Prepare parameters of move
ldx playerMoveRequested ldx playerMoveRequested
lda currentPlayer
beq moveParamsPlayer0
lda #-1
sta placeGameObjectRightOffset
lda #GAMEOBJECTWIDTH-7
sta placeGameObjectLeftOffset
movePerformMove:
jsr moveGameObjectOnTerrain jsr moveGameObjectOnTerrain
bra moveCleanup
moveParamsPlayer0:
lda #-6
sta placeGameObjectRightOffset
lda #GAMEOBJECTWIDTH-2
sta placeGameObjectLeftOffset
bra movePerformMove
moveCleanup:
; Handle side effects caused by move
stz playerMoveRequested stz playerMoveRequested
ldy currentPlayer
jsr updateCrosshair
; Re-render everything
jsr protectPlayers
jsr renderPlayers jsr renderPlayers
jsr protectCrosshair
jsr renderCrosshair jsr renderCrosshair
RESTORE_AY
rts rts
@ -465,6 +507,6 @@ mapScrollPos:
.word 0 .word 0
;leftScreenEdge = $6E ; Moved to zero page for speed and cross-bank convenience ;leftScreenEdge = $6E ; Moved to zero page for speed and cross-bank convenience
; .word 0 ; .word 0
rightScreenEdge: rightScreenEdge: ; Right edge minus one game object width, for easy render clipping
.word 160-GAMEOBJECTWIDTH/4-1 .word 160-GAMEOBJECTWIDTH/4-2

View File

@ -49,10 +49,29 @@ terrainHeightAtGameObjectPos:
rts rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; placeGameObjectOnTerrainDefault
;
; PARAML0 = Pointer to gameobject data
;
; Trashes SCRATCHL,SCRATCHL2
;
placeGameObjectOnTerrainDefault:
stz placeGameObjectRightOffset
pha
lda #GAMEOBJECTWIDTH
sta placeGameObjectLeftOffset
pla
jmp placeGameObjectOnTerrain
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; placeGameObjectOnTerrain ; placeGameObjectOnTerrain
; ;
; PARAML0 = Pointer to gameobject data ; PARAML0 = Pointer to gameobject data
; placeGameObjectLeftOffset = Left edge of height to check (default=GAMEOBJECTWIDTH)
; placeGameObjectRightOffset = Right edge of height to check (default=0)
;
; Trashes SCRATCHL,SCRATCHL2 ; Trashes SCRATCHL,SCRATCHL2
; ;
placeGameObjectOnTerrain: placeGameObjectOnTerrain:
@ -61,6 +80,9 @@ placeGameObjectOnTerrain:
; Check forwardmost position ; Check forwardmost position
ldy #GO_POSX ldy #GO_POSX
lda (PARAML0),y lda (PARAML0),y
clc
adc placeGameObjectRightOffset
jsr terrainHeightAtGameObjectPos jsr terrainHeightAtGameObjectPos
sta SCRATCHL2 sta SCRATCHL2
@ -68,7 +90,8 @@ placeGameObjectOnTerrain:
ldy #GO_POSX ldy #GO_POSX
lda (PARAML0),y lda (PARAML0),y
sec sec
sbc #GAMEOBJECTWIDTH sbc placeGameObjectLeftOffset
jsr terrainHeightAtGameObjectPos jsr terrainHeightAtGameObjectPos
cmp SCRATCHL2 ; Take higher value cmp SCRATCHL2 ; Take higher value
bcc placeGameObjectOnTerrainRear bcc placeGameObjectOnTerrainRear
@ -87,7 +110,10 @@ placeGameObjectOnTerrainRear:
bra placeGameObjectOnTerrainDone bra placeGameObjectOnTerrainDone
placeGameObjectLeftOffset:
.word GAMEOBJECTWIDTH
placeGameObjectRightOffset:
.word 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; moveGameObjectOnTerrain ; moveGameObjectOnTerrain
@ -161,11 +187,17 @@ moveGameObjectOnTerrainTooFar:
bra moveGameObjectOnTerrainTooDone bra moveGameObjectOnTerrainTooDone
moveGameObjectLeftOffset:
.word 0
moveGameObjectRightOffset:
.word GAMEOBJECTWIDTH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; vramPtr ; vramPtr
; ;
; PARAML0 = Pointer to X,Y (16 bits each, Y is bottom relative) ; PARAML0 = Pointer to X,Y (16 bits each, Y is bottom relative)
; X => Offset to upper left corner of VRAM, or ffff if offscreen ; X => Offset to upper left corner of VRAM, or $ffff if offscreen
; ;
; Trashes SCRATCHL ; Trashes SCRATCHL
; ;

View File

@ -110,7 +110,7 @@ playerCreate:
clc clc
adc SCRATCHL adc SCRATCHL
sta PARAML0 sta PARAML0
jsr placeGameObjectOnTerrain jsr placeGameObjectOnTerrainDefault
jsr createProgressBar jsr createProgressBar
rts rts