From 157ec99cc72b9e4662bddf7e558cd97b6465943a Mon Sep 17 00:00:00 2001 From: blondie7575 Date: Sun, 24 Dec 2017 12:36:31 -0700 Subject: [PATCH] Partial fill mode now working --- gamemanager.s | 14 ++++-- graphics.s | 4 ++ gscats.2mg | Bin 819264 -> 819264 bytes gscats.s | 2 +- projectile.s | 4 +- terrain.s | 124 +++++++++++++++++++++++++++++++++++++++++--------- 6 files changed, 119 insertions(+), 29 deletions(-) diff --git a/gamemanager.s b/gamemanager.s index 0f4ee59..6f27807 100644 --- a/gamemanager.s +++ b/gamemanager.s @@ -28,8 +28,9 @@ beginGameplay: ; Generate, compile, and clip terrain jsr generateTerrain - jsr compileTerrain - jsr clipTerrain + jsr compileTerrainSpans +; jsr compileTerrain +; jsr clipTerrain ; Create players lda #56 @@ -45,6 +46,7 @@ beginGameplay: jsr protectPlayers jsr protectProjectiles + jsr prepareRowRendering gameplayLoop: @@ -55,7 +57,8 @@ gameplayLoop: ; lda terrainDirty ; beq gameplayLoopKbd BORDER_COLOR #$3 - jsr renderTerrainFillMode + jsr renderTerrainSpans +; jsr unrenderTerrainSpans stz terrainDirty BORDER_COLOR #$1 @@ -222,7 +225,8 @@ endGame: ; A = New map scroll position ; scrollMap: - jsr unclipTerrain +; jsr unclipTerrain + jsr unrenderTerrainSpans jsr unrenderPlayers jsr unrenderProjectiles @@ -233,7 +237,7 @@ scrollMap: adc #160-GAMEOBJECTWIDTH/4-1 sta rightScreenEdge - jsr clipTerrain +; jsr clipTerrain lda #$ffff sta mapScrollRequested diff --git a/graphics.s b/graphics.s index b5f449b..782c527 100644 --- a/graphics.s +++ b/graphics.s @@ -106,11 +106,13 @@ enableFillMode: ; Trashes A disableFillMode: + SAVE_AXY BITS8 lda $e19d00,x and #%11011111 sta $e19d00,x BITS16 + RESTORE_AXY rts @@ -195,12 +197,14 @@ drawNumber: ; Trashes A ; .macro BORDER_COLOR color + SAVE_AXY BITS8 lda BORDERCOLOR and #$f0 ora color sta BORDERCOLOR BITS16 + RESTORE_AXY .endmacro ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/gscats.2mg b/gscats.2mg index b0f9d8dfaa787aac14834d9098be324d5a0e4856..6ca26d81bb980defeeae5439d2fb5d9ac0cf5eab 100644 GIT binary patch delta 5540 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 y$D!<%pu7Z delta 3381 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 diff --git a/gscats.s b/gscats.s index f133f25..4d35319 100644 --- a/gscats.s +++ b/gscats.s @@ -34,10 +34,10 @@ quitGame: .include "graphics.s" .include "font.s" +.include "player.s" .include "terrain.s" .include "collision.s" .include "gameobject.s" -.include "player.s" .include "utility.s" .include "tables.s" .include "gamemanager.s" diff --git a/projectile.s b/projectile.s index c6be810..1dba871 100644 --- a/projectile.s +++ b/projectile.s @@ -491,7 +491,7 @@ processTerrainImpact: tay jsr craterTerrain - jsr compileTerrain - jsr clipTerrain +; jsr compileTerrain +; jsr clipTerrain rts diff --git a/terrain.s b/terrain.s index b4ecf1a..0f54956 100644 --- a/terrain.s +++ b/terrain.s @@ -12,7 +12,7 @@ VISIBLETERRAINWIDTH = TERRAINWIDTH/4 ; In words- width minus jump return padding VISIBLETERRAINWINDOW = 80 ; In words MAXSPANSPERROW = 15 - +.if 0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; renderTerrain ; @@ -60,7 +60,7 @@ renderRowComplete: renderTerrainDone: SLOWGRAPHICS rts - +.endif ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; renderTerrainSpans: @@ -68,17 +68,46 @@ renderTerrainDone: ; renderTerrainSpans: pha - lda #MAXTERRAINHEIGHT-1;-7;-36 + stz terrainSpanWriteCacheLen + lda #MAXTERRAINHEIGHT-1 + renderTerrainSpansLoop: sta PARAML1 jsr renderTerrainRowSpans dec bpl renderTerrainSpansLoop -;brk + pla rts + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; unrenderTerrainSpans: +; +; + +unrenderTerrainSpans: + SAVE_AXY + ldy #0 + +unrenderTerrainSpansLoop: + lda terrainSpanWriteCache,y + tax + lda #0 + + sta VRAMBANK,x + + iny + iny + cpy terrainSpanWriteCacheLen + bne unrenderTerrainSpansLoop + + stz terrainSpanWriteCacheLen + RESTORE_AXY + rts + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; renderTerrainRowSpans: ; @@ -105,7 +134,7 @@ renderTerrainRowSpans: sec sbc PARAML1 tax - jsr enableFillMode + ;jsr enableFillMode asl tax lda vramYOffset,x @@ -119,6 +148,7 @@ renderTerrainRowSpans: lda #0 clc + renderTerrainRowSpansFindLeftLoop: adc terrainSpanData+2,y cmp leftScreenEdge @@ -144,6 +174,16 @@ renderTerrainRowSpansLoop: lda SCRATCHL sta VRAMBANK,x + ; Cache the index we wrote to so we can erase later + phy + ldy terrainSpanWriteCacheLen + txa + sta terrainSpanWriteCache,y + iny + iny + sty terrainSpanWriteCacheLen + ply + ; Advance to end of span clc txa @@ -166,8 +206,7 @@ renderTerrainRowSpansDone: RESTORE_AXY rts - - +.if 0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; renderTerrainFillMode: ; @@ -175,7 +214,7 @@ renderTerrainRowSpansDone: ; renderTerrainFillMode: jsr renderTerrainSpans - brk + rts SAVE_AXY ldy #0 @@ -189,8 +228,8 @@ renderTerrainFillModeLoop: iny cpy #MAXTERRAINHEIGHT bmi renderTerrainFillModeLoop + renderTerrainFillModeDone: -brk RESTORE_AXY rts @@ -261,7 +300,7 @@ renderTerrainRowFillCurrent: .word 0 renderTerrainRowFillColumn: .word 0 - +.endif ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; craterTerrain @@ -329,7 +368,7 @@ craterTerrainDone: RESTORE_AX rts - +.if 0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; clipTerrain ; @@ -448,7 +487,7 @@ compileTerrainLoop: bra compileTerrainLoop compileTerrainDone: - jsr compileTerrainSpans + ;jsr compileTerrainSpans RESTORE_AY rts @@ -582,7 +621,7 @@ compileTerrainColumn3BG: compileTerrainOpcode: .word 0 - +.endif ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; compileTerrainSpans: @@ -590,7 +629,7 @@ compileTerrainOpcode: ; compileTerrainSpans: pha - lda #0; MAXTERRAINHEIGHT-7; 0 + lda #0 compileTerrainSpansLoop: sta PARAML1 @@ -652,7 +691,6 @@ compileTerrainSpansRowBlackLoop: bne compileTerrainSpansRowBlackLoop compileTerrainSpansBlackEnd: -BREAK tya ; Store this span's length sta (SCRATCHL) inc SCRATCHL @@ -690,11 +728,6 @@ compileTerrainSpansRowGreenLoop: bne compileTerrainSpansRowGreenLoop compileTerrainSpansGreenEnd: -; iny - -; lda #1 ; -; sta breakpoint ; - tya ; Store this span's length sta (SCRATCHL) inc SCRATCHL @@ -707,6 +740,47 @@ compileTerrainSpansGreenEnd: ldy #0 bra compileTerrainSpansRowBlackStart + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; prepareRowRendering: +; +; Set SCBs to match rendering mode of each terrain line +; +; Trashes SCRATCHL, SCRATCHL2 +; +prepareRowRendering: + SAVE_AXY + + ldx #199 + stz SCRATCHL2 + +prepareRowRenderingLoop: + lda #0 + PLAYERPTR_Y + sec + lda playerData+GO_POSY,y + sbc #GAMEOBJECTHEIGHT + + cmp SCRATCHL2 + bcc prepareRowRenderingCompileMode + beq prepareRowRenderingCompileMode + + jsr enableFillMode + bra prepareRowRenderingLoopNext + +prepareRowRenderingCompileMode: + jsr disableFillMode + +prepareRowRenderingLoopNext: + inc SCRATCHL2 + dex + cpx #200-MAXTERRAINHEIGHT + bne prepareRowRenderingLoop + + RESTORE_AXY + rts + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; generateTerrain ; @@ -720,7 +794,6 @@ generateTerrain: sta SCRATCHL generateTerrainLoop: - lda sineTable,x lsr @@ -761,6 +834,7 @@ terrainData: .endrepeat terrainDataEnd: +.if 0 compiledTerrain: .repeat COMPILEDTERRAINROW * MAXTERRAINHEIGHT .byte 0 @@ -771,6 +845,7 @@ clippedTerrainData: .repeat MAXTERRAINHEIGHT .byte 0,0,0,0 ; xx,jmp,addr .endrepeat +.endif terrainSpanData: .repeat MAXTERRAINHEIGHT @@ -780,3 +855,10 @@ terrainSpanData: .endrepeat .endrepeat +terrainSpanWriteCache: + .repeat 512 + .word 0 + .endrepeat +terrainSpanWriteCacheLen: + .word 0 +