From 9baa1678967bc5a92bafb77e2366ea0c216e8bde Mon Sep 17 00:00:00 2001 From: blondie7575 Date: Sun, 29 Dec 2019 10:26:38 -0700 Subject: [PATCH] Only recompile affected terrain rows for cratering --- gscats.2mg | Bin 819264 -> 819264 bytes projectile.s | 30 ++++++++++++++++++++++++++---- terrain.s | 41 ++++++++++++++++++++++++++++++++++++++++- utility.s | 3 ++- 4 files changed, 68 insertions(+), 6 deletions(-) diff --git a/gscats.2mg b/gscats.2mg index 3a0f3494c8107d66dc347de6da274cb9ef8cd77d..1967dc92be2bd49d0302c82a994732fb737c5dd6 100644 GIT binary patch delta 3068 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 SSWZ|jSZ-LJo|W^x!v6q%P|WK9 diff --git a/projectile.s b/projectile.s index 447b747..2bba117 100644 --- a/projectile.s +++ b/projectile.s @@ -877,7 +877,7 @@ processPlayerImpactDeath: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; processTerrainImpact ; -; Trashes A,Y +; Trashes A,Y, SCRATCHL ; processTerrainImpact: ldy projectileActive @@ -888,17 +888,19 @@ processTerrainImpact: lda projectileData+GO_POSX,y clc - adc #GAMEOBJECTWIDTH/2 ; /2 is a fudge that makes crater location look better in this direction + adc #GAMEOBJECTWIDTH/2+1 ; A fudge that makes crater location look better in this direction, and tunneling work better bra processTerrainStoreContinue processTerrainImpactNegative: lda projectileData+GO_POSX,y + clc + adc #GAMEOBJECTWIDTH/4-1 ; A fudge that makes crater location look better in this direction, and tunneling work better processTerrainStoreContinue: sta PARAML0 lda projectileData+GO_POSY,y sec - sbc #GAMEOBJECTHEIGHT + sbc #GAMEOBJECTHEIGHT ; This fudge makes tunneling work better sta PARAML1 lda projectileData+JD_TYPE,y @@ -907,9 +909,29 @@ processTerrainStoreContinue: lda projectileTypes+PT_RADIUS,y tay + phy ; We'll need the radius in a moment jsr craterTerrain - jsr compileTerrain + + jsr unclipTerrain + + ; Recompile the rows affected by the crater + clc + lda PARAML1 ; Impact point is top row to recompile + adc #GAMEOBJECTHEIGHT ; Expand recompile area upwards because of tunneling fudge + tax + + clc + pla + adc #GAMEOBJECTHEIGHT ; Expand "vertical" radius area because of tunneling fudge + sta SCRATCHL ; Need radius in a memory location for this math + txa + sec + sbc SCRATCHL + tay + lda SCRATCHL + jsr compileTerrainChunk + jsr clipTerrain rts diff --git a/terrain.s b/terrain.s index d6a53f7..5287aa0 100644 --- a/terrain.s +++ b/terrain.s @@ -271,11 +271,50 @@ compileTerrainLoop: bra compileTerrainLoop compileTerrainDone: - ;jsl compileTerrainSpans ; Part of the now disabled fill-mode renderer RESTORE_AY rts +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; compileTerrainChunk +; +; Y = First row to compile (bottom-relative) +; X = Last row to compile (bottom-relative) +; A = |X-Y| +; +; Trashes A,Y, SCRATCHL +; +compileTerrainChunk: +;HARDBRK + stx SCRATCHL + sty PARAML0 + + ; Compute the start of memory affected + lda #COMPILEDTERRAINROW + sta PARAML1 + jsr mult16 + clc + adc #compiledTerrain + sta PARAML0 + +compileTerrainChunkLoop: + sty PARAML1 +;HARDBRK + jsr compileTerrainRow + iny + cpy SCRATCHL + beq compileTerrainChunkDone + + clc + lda #COMPILEDTERRAINROW + adc PARAML0 + sta PARAML0 + bra compileTerrainChunkLoop + +compileTerrainChunkDone: + rts + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; compileTerrainRow ; diff --git a/utility.s b/utility.s index aa76f73..f0ed556 100644 --- a/utility.s +++ b/utility.s @@ -106,7 +106,8 @@ intToStringResult: .byte 0,0,0,0,0,0 ; PARAML1 = Operand 2 (16 bits) ; A => Op1 * Op2 (16 bits) ; Algorithm from https://apple2.gs/downloads/Programmanual.pdf -; Trashes X +; +; Trashes X,PARAML0,PARAML1 ; mult16: lda #0 ; Initialize result