Added power indicator to crosshair

Fixed years-old bug in terrain unclipper which caused it to spray garbage in bank 3. My god, what a bug.
This commit is contained in:
blondie7575 2023-06-25 18:43:07 -07:00
parent 3b7ab68342
commit 4a9958e5ac
18 changed files with 64 additions and 20 deletions

BIN
Art/015Crosshair1.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 B

BIN
Art/015Crosshair1.xcf Normal file

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 127 B

After

Width:  |  Height:  |  Size: 127 B

BIN
Art/017Crosshair3.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 B

BIN
Art/017Crosshair3.xcf Normal file

Binary file not shown.

BIN
Art/018Crosshair4.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 B

BIN
Art/018Crosshair4.xcf Normal file

Binary file not shown.

BIN
Art/019Crosshair5.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 B

BIN
Art/019Crosshair5.xcf Normal file

Binary file not shown.

Binary file not shown.

View File

@ -18,11 +18,11 @@ crosshairGameObject:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; updateCrosshair ; updateCrosshair
; ;
; Y = Player index to render for ; Y = Player index to update for
; Trashes SCRATCHL, PARAML0, PARAML1 ; Trashes SCRATCHL, PARAML0, PARAML1
; ;
updateCrosshair: updateCrosshair:
SAVE_AX SAVE_AXY
PLAYERPTR_Y PLAYERPTR_Y
@ -68,19 +68,28 @@ updateCrosshairCalcY:
updateCrosshairDone: updateCrosshairDone:
RESTORE_AX RESTORE_AXY
rts rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; renderCrosshair ; renderCrosshair
; ;
; Y = Player index to render for
; Trashes Y,PARAML0,SCRATCHL
; ;
renderCrosshair: renderCrosshair:
pha pha
PLAYERPTR_Y
lda #crosshairGameObject lda #crosshairGameObject
sta PARAML0 sta PARAML0
lda #15
lda playerData+PD_POWER,y ; Choose reticle size for power level
sta SCRATCHL
lda #14
clc
adc SCRATCHL
jsr renderGameObject jsr renderGameObject
renderCrosshairDone: renderCrosshairDone:
@ -91,6 +100,7 @@ renderCrosshairDone:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; unrenderCrosshair ; unrenderCrosshair
; ;
; Trashes PARAML0
; ;
unrenderCrosshair: unrenderCrosshair:
pha pha

View File

@ -103,24 +103,31 @@ gameplayLoopBeginUpdate:
lda projectileActive ; Skip interactivity during shots, but still allow map scrolling lda projectileActive ; Skip interactivity during shots, but still allow map scrolling
bpl gameplayLoopShotTracking bpl gameplayLoopShotTracking
lda dirtExplosionActive lda dirtExplosionActive
bne gameplayLoopRender ; Skip interactivity during dirt explosions bne gameplayLoopRenderJump ; Skip interactivity during dirt explosions
bra gameplayLoopScroll bra gameplayLoopScroll
gameplayLoopRenderJump:
jmp gameplayLoopRender
gameplayLoopShotTracking: gameplayLoopShotTracking:
jsr trackActiveShot jsr trackActiveShot
; BORDER_COLOR #$1 ; BORDER_COLOR #$1
gameplayLoopScroll: gameplayLoopScroll:
; Scroll map if needed ; Scroll map if needed
lda mapScrollRequested lda mapScrollRequested
bmi gameplayLoopAngleCheck bmi gameplayLoopAngleCheck
jsr scrollMap jsr scrollMap
gameplayLoopAngleCheck: gameplayLoopAngleCheck:
lda projectileActive ; Skip interactivity during shots lda projectileActive ; Skip interactivity during shots
bpl gameplayLoopRender bpl gameplayLoopRenderJmp
bra gameplayLoopAngle
gameplayLoopRenderJmp:
jmp gameplayLoopRender
gameplayLoopAngle: gameplayLoopAngle:
; Update aim angle if needed ; Update aim angle if needed
@ -328,6 +335,13 @@ scrollMap:
jsr unrenderPlayers jsr unrenderPlayers
jsr unrenderProjectiles jsr unrenderProjectiles
pha
lda projectileActive ; Crosshair is visible if projectile isn't
beq scrollMapApplyScrolling
jsr unrenderCrosshair
scrollMapApplyScrolling:
pla
; jsr updateProjectilePhysics ; Good idea? ; jsr updateProjectilePhysics ; Good idea?
sta mapScrollPos sta mapScrollPos
@ -345,6 +359,7 @@ scrollMap:
jsr protectProjectiles jsr protectProjectiles
jsr renderPlayers jsr renderPlayers
jsr renderProjectiles ; Prevents flicker, but ads jitter to shot tracking jsr renderProjectiles ; Prevents flicker, but ads jitter to shot tracking
lda #1 lda #1
sta terrainDirty sta terrainDirty
stz projectilesDirty stz projectilesDirty

View File

@ -35,7 +35,7 @@ kbdScanGameplay:
cmp #(' ' + $80) cmp #(' ' + $80)
beq kbdScanSpace beq kbdScanSpace
cmp #(9 + $80) cmp #(9 + $80)
bne kbdScanDone bne kbdScanDebugPiggyback
jmp kbdScanTab jmp kbdScanTab
kbdScanDone: kbdScanDone:
@ -47,7 +47,8 @@ kbdScanDebug:
lda KBD lda KBD
bpl kbdScanDone bpl kbdScanDone
sta KBDSTROBE sta KBDSTROBE
kbdScanDebugPiggyback:
cmp #(27 + $80) cmp #(27 + $80)
beq kbdScanESC beq kbdScanESC
cmp #(127 + $80) cmp #(127 + $80)

View File

@ -242,6 +242,20 @@ done:
.endmacro .endmacro
.macro MEMCHK ; Check to see when a memory value has been stepped on
.local chkdone
pha
lda $0311CC
cmp #$4242
bne chkdone
lda #1
sta $e1c029
pla
brk
chkdone:
pla
.endmacro
;;;;;;;;;; ;;;;;;;;;;
; Stack Macros ; Stack Macros

View File

@ -61,6 +61,9 @@ PD_CURRWEAPON = 166
PD_TREATS = 168 PD_TREATS = 168
PD_SIZE = 256 PD_SIZE = 256
MAX_POWER = 5
MAX_ANGLE = 180
.macro PLAYERPTR_Y .macro PLAYERPTR_Y
tya ; Pointer to player structure from index tya ; Pointer to player structure from index
asl asl
@ -125,7 +128,7 @@ playerDeltaAngle:
clc clc
adc playerData+PD_ANGLE,y adc playerData+PD_ANGLE,y
bmi playerDeltaAngleClampLow bmi playerDeltaAngleClampLow
cmp #180 cmp #MAX_ANGLE
bpl playerDeltaAngleClampHigh bpl playerDeltaAngleClampHigh
playerDeltaAngleStore: playerDeltaAngleStore:
@ -138,7 +141,7 @@ playerDeltaAngleClampLow:
bra playerDeltaAngleStore bra playerDeltaAngleStore
playerDeltaAngleClampHigh: playerDeltaAngleClampHigh:
lda #180 lda #MAX_ANGLE
bra playerDeltaAngleStore bra playerDeltaAngleStore
@ -156,7 +159,7 @@ playerDeltaPower:
clc clc
adc playerData+PD_POWER,y adc playerData+PD_POWER,y
beq playerDeltaPowerClampLow beq playerDeltaPowerClampLow
cmp #15 cmp #MAX_POWER
bpl playerDeltaPowerClampHigh bpl playerDeltaPowerClampHigh
playerDeltaPowerStore: playerDeltaPowerStore:
@ -169,7 +172,7 @@ playerDeltaPowerClampLow:
bra playerDeltaPowerStore bra playerDeltaPowerStore
playerDeltaPowerClampHigh: playerDeltaPowerClampHigh:
lda #15 lda #MAX_POWER
bra playerDeltaPowerStore bra playerDeltaPowerStore

View File

@ -2,18 +2,20 @@
DrawSpriteBank : DrawSpriteBank :
ASL ; A=Sprite Number ($0000-$000F) ASL ; A=Sprite Number ($0000-$0013)
TAX ; Y=Target Screen Address ($2000-$9D00) TAX ; Y=Target Screen Address ($2000-$9D00)
LDA SpriteBankNum,X ; Relative Sprite Number Table LDA SpriteBankNum,X ; Relative Sprite Number Table
JMP (SpriteBankBank,X) ; Bank Number Table JMP (SpriteBankBank,X) ; Bank Number Table
SpriteBankNum : SpriteBankNum :
.dbyt $0100,$0000,$0A00,$0500,$0600,$0900,$0E00,$0D00 .dbyt $0100,$0000,$0C00,$0500,$0600,$0B00,$1200,$1000
.dbyt $0800,$0700,$0C00,$0F00,$0200,$0300,$0400,$0B00 .dbyt $0A00,$0900,$0F00,$1300,$0200,$0300,$0400,$1100
.dbyt $0E00,$0D00,$0800,$0700
SpriteBankBank : SpriteBankBank :
.addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00 .addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00
.addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00 .addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00
.addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00
SpriteBankBank00 : SpriteBankBank00 :
JSL $AA0000 JSL $AA0000

View File

@ -206,6 +206,7 @@ clipTerrainLoop:
; On first move-left unclip every second row is unclipped incorrectly ; On first move-left unclip every second row is unclipped incorrectly
unclipTerrain: unclipTerrain:
SAVE_AXY SAVE_AXY
phd phd
lda #(CLIPPEDTERRAINSTACK & $f000) lda #(CLIPPEDTERRAINSTACK & $f000)
@ -220,9 +221,8 @@ unclipTerrain:
sec ; Find stopping point for stack-relative addressing sec ; Find stopping point for stack-relative addressing
lda clippedTerrainStackPtr lda clippedTerrainStackPtr
and #$0fff and #$0fff
sbc #7 ; 4 bytes past top of stack, +3 for starting offset sbc #3 ; -3 for starting offset
sta STACKPTR sta STACKPTR
lda #$0fff-3 ; Start at the bottom of the stack lda #$0fff-3 ; Start at the bottom of the stack
tax tax
@ -234,7 +234,6 @@ unclipTerrainLoop:
lda 0,x lda 0,x
sta compiledTerrain,y sta compiledTerrain,y
tya tya
sec sec
sbc #COMPILEDTERRAINROW+2 sbc #COMPILEDTERRAINROW+2
@ -244,7 +243,7 @@ unclipTerrainLoop:
dex dex
dex dex
dex dex
cpx STACKPTR ;#$e6f-7 ;$1000 ; When x hits the top of the stack, we're done cpx STACKPTR ; When x hits the top of the stack, we're done
bne unclipTerrainLoop bne unclipTerrainLoop
pld pld