mirror of
https://github.com/blondie7575/GSCats.git
synced 2025-01-06 14:31:06 +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
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; 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
|
||||
;
|
||||
|
@ -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
|
||||
|
||||
|
38
gameobject.s
38
gameobject.s
@ -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
|
||||
;
|
||||
|
Loading…
Reference in New Issue
Block a user