Compare commits

...

3 Commits

Author SHA1 Message Date
blondie7575 8a8235181c Fixed crosshair rendering wrong size on player switch 2023-12-24 13:51:38 -07:00
blondie7575 f0a53d6964 Restarting game now resets data properly 2023-12-24 13:42:19 -07:00
blondie7575 c2dde9a4b7 Fixed crosshair rendering glitches on turn switch 2023-12-24 12:16:27 -07:00
5 changed files with 110 additions and 28 deletions

View File

@ -14,6 +14,9 @@ crosshairGameObject:
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
crosshairBackgroundStale:
.word 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; updateCrosshair ; updateCrosshair
@ -115,6 +118,8 @@ protectCrosshair:
sta PARAML0 sta PARAML0
jsr protectGameObject jsr protectGameObject
stz crosshairBackgroundStale
protectCrosshairDone: protectCrosshairDone:
pla pla
rts rts
@ -128,6 +133,9 @@ protectCrosshairDone:
unrenderCrosshair: unrenderCrosshair:
pha pha
lda crosshairBackgroundStale
bne unrenderCrosshairDone
lda #crosshairGameObject lda #crosshairGameObject
sta PARAML0 sta PARAML0
jsr unrenderGameObject jsr unrenderGameObject

View File

@ -7,6 +7,18 @@
NUMPLAYERS = 2 NUMPLAYERS = 2
initGameplay:
; Create players
lda #56
ldy #0
jsr playerCreate
lda #568
ldy #1
jsr playerCreate
jsr deleteAllProjectiles
rts
beginGameplay: beginGameplay:
; Initialize random numbers ; Initialize random numbers
@ -19,18 +31,14 @@ beginGameplay:
jsr colorFill jsr colorFill
; Generate, compile, and clip terrain ; Generate, compile, and clip terrain
stz mapScrollPos
stz leftScreenEdge stz leftScreenEdge
lda #160-GAMEOBJECTWIDTH/4-2
sta rightScreenEdge
jsr generateTerrain jsr generateTerrain
; Create players jsr initGameplay
lda #56
ldy #0
jsr playerCreate
lda #568
ldy #1
jsr playerCreate
jsr syncPlayerHeader jsr syncPlayerHeader
ldy #0 ldy #0
jsr renderPlayerHeader jsr renderPlayerHeader
@ -44,6 +52,8 @@ beginGameplay:
jsr renderInventory jsr renderInventory
jsr protectPlayers jsr protectPlayers
jsr renderPlayers jsr renderPlayers
ldy #0
jsr updateCrosshair
; Fade in from menu ; Fade in from menu
lda #basePalette lda #basePalette
@ -95,8 +105,9 @@ gameplayLoopScroll:
bmi gameplayLoopAngleCheck bmi gameplayLoopAngleCheck
jsr scrollMap jsr scrollMap
ldy currentPlayer
jsr updateCrosshair jsr updateCrosshair
gameplayLoopAngleCheck: gameplayLoopAngleCheck:
lda projectileActive ; Skip interactivity during shots lda projectileActive ; Skip interactivity during shots
bpl gameplayLoopRenderJmp bpl gameplayLoopRenderJmp
@ -107,7 +118,7 @@ gameplayLoopRenderJmp:
gameplayLoopAngle: gameplayLoopAngle:
; Update aim angle if needed ; Update aim angle if needed
lda angleDeltaRequested lda angleDeltaRequested
beq gameplayLoopAim beq gameplayLoopPower
jsr changeAngle jsr changeAngle
gameplayLoopAim: gameplayLoopAim:
@ -122,6 +133,9 @@ gameplayLoopPower:
lda powerDeltaRequested lda powerDeltaRequested
beq gameplayLoopFire beq gameplayLoopFire
jsr changePower jsr changePower
jsr unrenderCrosshair
ldy currentPlayer
jsr renderCrosshair
gameplayLoopFire: gameplayLoopFire:
lda fireRequested lda fireRequested
@ -155,8 +169,12 @@ gameplayLoopRender:
beq gameplayLoopRenderPlayersAnyway beq gameplayLoopRenderPlayersAnyway
jsr unrenderPlayers jsr unrenderPlayers
jsr protectPlayers jsr protectPlayers
jsr unrenderCrosshair
lda dirtExplosionActive ; Crosshair is dirty if map scrolled and dirt is finished
bne gameplayLoopRenderPlayersAnyway
jsr protectCrosshair jsr protectCrosshair
ldy currentPlayer
jsr renderCrosshair
gameplayLoopRenderPlayersAnyway: gameplayLoopRenderPlayersAnyway:
jsr renderPlayers jsr renderPlayers
@ -297,8 +315,6 @@ endTurnHeader:
jsr renderPlayerHeader jsr renderPlayerHeader
jsr renderInventory jsr renderInventory
stz turnRequested stz turnRequested
jsr protectCrosshair
rts rts
endTurnFocusPlayer0: endTurnFocusPlayer0:
@ -338,6 +354,8 @@ scrollMap:
lda projectileActive ; Crosshair is visible if projectile isn't lda projectileActive ; Crosshair is visible if projectile isn't
beq scrollMapApplyScrolling beq scrollMapApplyScrolling
jsr unrenderCrosshair jsr unrenderCrosshair
lda #1
sta crosshairBackgroundStale
scrollMapApplyScrolling: scrollMapApplyScrolling:
pla pla
@ -358,7 +376,6 @@ scrollMapApplyScrolling:
sta playersDirty sta playersDirty
sta projectilesDirty sta projectilesDirty
sta terrainDirty sta terrainDirty
sta crosshairDirty
rts rts
@ -459,6 +476,7 @@ moveCleanup:
jsr protectPlayers jsr protectPlayers
jsr renderPlayers jsr renderPlayers
jsr protectCrosshair jsr protectCrosshair
ldy currentPlayer
jsr renderCrosshair jsr renderCrosshair
RESTORE_AY RESTORE_AY
@ -484,10 +502,8 @@ turnRequested:
playerMoveRequested: playerMoveRequested:
.word $0000 .word $0000
terrainDirty: terrainDirty:
.word 1
playersDirty:
.word 0 .word 0
crosshairDirty: playersDirty:
.word 0 .word 0
projectilesDirty: projectilesDirty:
.word 1 .word 1

View File

@ -180,8 +180,8 @@
pha pha
lda breakpoint lda breakpoint
beq nobrk beq nobrk
lda #1 ; lda #1
sta $e1c029 ; sta $e1c029
pla pla
brk brk
nobrk: nobrk:

View File

@ -6,6 +6,8 @@
; ;
MAX_ANGER = 100 MAX_ANGER = 100
START_POWER = 2
START_TREATS = 7
playerData: playerData:
;;;;;;;;;;;; PLAYER 1 ;;;;;;;;;;;;;; ;;;;;;;;;;;; PLAYER 1 ;;;;;;;;;;;;;;
@ -17,14 +19,14 @@ playerData:
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.word 24 ; Angle in degrees from +X .word 0 ; Angle in degrees from +X
.word 2 ; Power .word 0 ; Power
.word MAX_ANGER ; Anger .word 0 ; Anger
.byte 8,"SPROCKET " ; Name .byte 8,"SPROCKET " ; Name
.word 29 ; Base Sprite .word 29 ; Base Sprite
.word 0,5,7,0,0,0,0,0 ; Prices .word 0,5,7,0,0,0,0,0 ; Prices
.word 0 ; Current weapon .word 0 ; Current weapon
.word 7 ; Treats .word 0 ; Treats
.repeat 86 .repeat 86
.byte 0 ; Padding to 256-byte boundary .byte 0 ; Padding to 256-byte boundary
.endrepeat .endrepeat
@ -38,14 +40,14 @@ playerData:
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.word 154 ; Angle in degrees from +X .word 0 ; Angle in degrees from +X
.word 2 ; Power .word 0 ; Power
.word MAX_ANGER ; Anger .word 0 ; Anger
.byte 8,"TINKER " ; Name .byte 8,"TINKER " ; Name
.word 20 ; Base Sprite .word 20 ; Base Sprite
.word 0,5,7,0,0,0,0,0 ; Prices .word 0,5,7,0,0,0,0,0 ; Prices
.word 0 ; Current weapon .word 0 ; Current weapon
.word 7 ; Treats .word 0 ; Treats
.repeat 86 .repeat 86
.byte 0 ; Padding to 256-byte boundary .byte 0 ; Padding to 256-byte boundary
@ -105,6 +107,7 @@ playerCreate:
sty SCRATCHL sty SCRATCHL
pla pla
; Starting position
sta playerData+GO_POSX,y sta playerData+GO_POSX,y
lda #playerData lda #playerData
clc clc
@ -112,6 +115,39 @@ playerCreate:
sta PARAML0 sta PARAML0
jsr placeGameObjectOnTerrainDefault jsr placeGameObjectOnTerrainDefault
; Starting aim
lda playerData+GO_POSX,y
cmp #TERRAINWIDTH/2
bcc playerCreateLeft
lda #154
bra playerCreateInit
playerCreateLeft:
lda #24
playerCreateInit:
sta playerData+PD_ANGLE,y
; Initialize standard values
lda #START_POWER
sta playerData+PD_POWER,y
lda #START_TREATS
sta playerData+PD_TREATS,y
lda #MAX_ANGER
sta playerData+PD_ANGER,y
lda #0
sta playerData+PD_CURRWEAPON,y
lda #1
sta playersDirty
sta terrainDirty
sta projectilesDirty
sta inventoryDirty
lda #-1
sta gameOver
sta projectileActive
stz currentPlayer
jsr createProgressBar jsr createProgressBar
rts rts

View File

@ -630,6 +630,9 @@ endProjectile:
; Trashes A ; Trashes A
; ;
deleteProjectile: deleteProjectile:
lda projectileData+GO_POSX,y
bmi deleteProjectileDone ; Already deleted
lda #-1 lda #-1
sta projectileData+GO_POSX,y sta projectileData+GO_POSX,y
@ -646,6 +649,25 @@ deleteProjectileDone:
rts rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; deleteAllProjectiles
;
deleteAllProjectiles:
SAVE_AXY
ldx #0
deleteAllProjectilesLoop:
txy
PROJECTILEPTR_Y
jsr deleteProjectile
inx
cpx #4
bne deleteAllProjectilesLoop
RESTORE_AXY
rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; protectProjectiles ; protectProjectiles
; ;