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

View File

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

View File

@ -49,10 +49,29 @@ terrainHeightAtGameObjectPos:
rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; placeGameObjectOnTerrainDefault
;
; PARAML0 = Pointer to gameobject data
;
; Trashes SCRATCHL,SCRATCHL2
;
placeGameObjectOnTerrainDefault:
stz placeGameObjectRightOffset
pha
lda #GAMEOBJECTWIDTH
sta placeGameObjectLeftOffset
pla
jmp placeGameObjectOnTerrain
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; placeGameObjectOnTerrain
;
; 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
;
placeGameObjectOnTerrain:
@ -61,6 +80,9 @@ placeGameObjectOnTerrain:
; Check forwardmost position
ldy #GO_POSX
lda (PARAML0),y
clc
adc placeGameObjectRightOffset
jsr terrainHeightAtGameObjectPos
sta SCRATCHL2
@ -68,7 +90,8 @@ placeGameObjectOnTerrain:
ldy #GO_POSX
lda (PARAML0),y
sec
sbc #GAMEOBJECTWIDTH
sbc placeGameObjectLeftOffset
jsr terrainHeightAtGameObjectPos
cmp SCRATCHL2 ; Take higher value
bcc placeGameObjectOnTerrainRear
@ -87,7 +110,10 @@ placeGameObjectOnTerrainRear:
bra placeGameObjectOnTerrainDone
placeGameObjectLeftOffset:
.word GAMEOBJECTWIDTH
placeGameObjectRightOffset:
.word 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; moveGameObjectOnTerrain
@ -161,11 +187,17 @@ moveGameObjectOnTerrainTooFar:
bra moveGameObjectOnTerrainTooDone
moveGameObjectLeftOffset:
.word 0
moveGameObjectRightOffset:
.word GAMEOBJECTWIDTH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; vramPtr
;
; 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
;

View File

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