mirror of
https://github.com/blondie7575/GSCats.git
synced 2025-01-07 20:33:04 +00:00
Basic player movement working
Also fixed a bunch of bugs in crosshair rendering
This commit is contained in:
parent
c77f1d4c84
commit
d0bfa23d60
23
crosshair.s
23
crosshair.s
@ -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
|
||||||
;
|
;
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
38
gameobject.s
38
gameobject.s
@ -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
|
||||||
;
|
;
|
||||||
|
Loading…
Reference in New Issue
Block a user