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

View File

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

View File

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

View File

@ -6,6 +6,8 @@
;
MAX_ANGER = 100
START_POWER = 2
START_TREATS = 7
playerData:
;;;;;;;;;;;; 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 24 ; Angle in degrees from +X
.word 2 ; Power
.word MAX_ANGER ; Anger
.word 0 ; Angle in degrees from +X
.word 0 ; Power
.word 0 ; Anger
.byte 8,"SPROCKET " ; Name
.word 29 ; Base Sprite
.word 0,5,7,0,0,0,0,0 ; Prices
.word 0 ; Current weapon
.word 7 ; Treats
.word 0 ; Treats
.repeat 86
.byte 0 ; Padding to 256-byte boundary
.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 154 ; Angle in degrees from +X
.word 2 ; Power
.word MAX_ANGER ; Anger
.word 0 ; Angle in degrees from +X
.word 0 ; Power
.word 0 ; Anger
.byte 8,"TINKER " ; Name
.word 20 ; Base Sprite
.word 0,5,7,0,0,0,0,0 ; Prices
.word 0 ; Current weapon
.word 7 ; Treats
.word 0 ; Treats
.repeat 86
.byte 0 ; Padding to 256-byte boundary
@ -105,6 +107,7 @@ playerCreate:
sty SCRATCHL
pla
; Starting position
sta playerData+GO_POSX,y
lda #playerData
clc
@ -112,6 +115,39 @@ playerCreate:
sta PARAML0
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
rts

View File

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