diff --git a/Art/015Crosshair1.gif b/Art/015Crosshair1.gif new file mode 100644 index 0000000..2dd879d Binary files /dev/null and b/Art/015Crosshair1.gif differ diff --git a/Art/015Crosshair1.xcf b/Art/015Crosshair1.xcf new file mode 100644 index 0000000..65e85dc Binary files /dev/null and b/Art/015Crosshair1.xcf differ diff --git a/Art/015Crosshair.gif b/Art/016Crosshair2.gif similarity index 100% rename from Art/015Crosshair.gif rename to Art/016Crosshair2.gif diff --git a/Art/015Crosshair.xcf b/Art/016Crosshair2.xcf similarity index 100% rename from Art/015Crosshair.xcf rename to Art/016Crosshair2.xcf diff --git a/Art/017Crosshair3.gif b/Art/017Crosshair3.gif new file mode 100644 index 0000000..5f901eb Binary files /dev/null and b/Art/017Crosshair3.gif differ diff --git a/Art/017Crosshair3.xcf b/Art/017Crosshair3.xcf new file mode 100644 index 0000000..ae8d552 Binary files /dev/null and b/Art/017Crosshair3.xcf differ diff --git a/Art/018Crosshair4.gif b/Art/018Crosshair4.gif new file mode 100644 index 0000000..f1c84fe Binary files /dev/null and b/Art/018Crosshair4.gif differ diff --git a/Art/018Crosshair4.xcf b/Art/018Crosshair4.xcf new file mode 100644 index 0000000..53d65e1 Binary files /dev/null and b/Art/018Crosshair4.xcf differ diff --git a/Art/019Crosshair5.gif b/Art/019Crosshair5.gif new file mode 100644 index 0000000..c112166 Binary files /dev/null and b/Art/019Crosshair5.gif differ diff --git a/Art/019Crosshair5.xcf b/Art/019Crosshair5.xcf new file mode 100644 index 0000000..b7bb759 Binary files /dev/null and b/Art/019Crosshair5.xcf differ diff --git a/SpriteBank#060000 b/SpriteBank#060000 index ac3df34..42dc42f 100644 Binary files a/SpriteBank#060000 and b/SpriteBank#060000 differ diff --git a/crosshair.s b/crosshair.s index 6aaa9af..51ce6d9 100644 --- a/crosshair.s +++ b/crosshair.s @@ -18,11 +18,11 @@ crosshairGameObject: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; updateCrosshair ; -; Y = Player index to render for +; Y = Player index to update for ; Trashes SCRATCHL, PARAML0, PARAML1 ; updateCrosshair: - SAVE_AX + SAVE_AXY PLAYERPTR_Y @@ -68,19 +68,28 @@ updateCrosshairCalcY: updateCrosshairDone: - RESTORE_AX + RESTORE_AXY rts ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; renderCrosshair ; +; Y = Player index to render for +; Trashes Y,PARAML0,SCRATCHL ; renderCrosshair: pha + PLAYERPTR_Y + lda #crosshairGameObject sta PARAML0 - lda #15 + + lda playerData+PD_POWER,y ; Choose reticle size for power level + sta SCRATCHL + lda #14 + clc + adc SCRATCHL jsr renderGameObject renderCrosshairDone: @@ -91,6 +100,7 @@ renderCrosshairDone: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; unrenderCrosshair ; +; Trashes PARAML0 ; unrenderCrosshair: pha diff --git a/gamemanager.s b/gamemanager.s index 158c4b6..4067774 100644 --- a/gamemanager.s +++ b/gamemanager.s @@ -103,24 +103,31 @@ gameplayLoopBeginUpdate: lda projectileActive ; Skip interactivity during shots, but still allow map scrolling bpl gameplayLoopShotTracking lda dirtExplosionActive - bne gameplayLoopRender ; Skip interactivity during dirt explosions + bne gameplayLoopRenderJump ; Skip interactivity during dirt explosions bra gameplayLoopScroll +gameplayLoopRenderJump: + jmp gameplayLoopRender + gameplayLoopShotTracking: jsr trackActiveShot ; BORDER_COLOR #$1 gameplayLoopScroll: - ; Scroll map if needed lda mapScrollRequested bmi gameplayLoopAngleCheck + jsr scrollMap + gameplayLoopAngleCheck: lda projectileActive ; Skip interactivity during shots - bpl gameplayLoopRender + bpl gameplayLoopRenderJmp + bra gameplayLoopAngle +gameplayLoopRenderJmp: + jmp gameplayLoopRender gameplayLoopAngle: ; Update aim angle if needed @@ -328,6 +335,13 @@ scrollMap: jsr unrenderPlayers jsr unrenderProjectiles + pha + lda projectileActive ; Crosshair is visible if projectile isn't + beq scrollMapApplyScrolling + jsr unrenderCrosshair + +scrollMapApplyScrolling: + pla ; jsr updateProjectilePhysics ; Good idea? sta mapScrollPos @@ -345,6 +359,7 @@ scrollMap: jsr protectProjectiles jsr renderPlayers jsr renderProjectiles ; Prevents flicker, but ads jitter to shot tracking + lda #1 sta terrainDirty stz projectilesDirty diff --git a/input.s b/input.s index 8c76e9c..c2673e1 100644 --- a/input.s +++ b/input.s @@ -35,7 +35,7 @@ kbdScanGameplay: cmp #(' ' + $80) beq kbdScanSpace cmp #(9 + $80) - bne kbdScanDone + bne kbdScanDebugPiggyback jmp kbdScanTab kbdScanDone: @@ -47,7 +47,8 @@ kbdScanDebug: lda KBD bpl kbdScanDone sta KBDSTROBE - + +kbdScanDebugPiggyback: cmp #(27 + $80) beq kbdScanESC cmp #(127 + $80) diff --git a/macros.s b/macros.s index fe65ea9..c24975f 100644 --- a/macros.s +++ b/macros.s @@ -242,6 +242,20 @@ done: .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 diff --git a/player.s b/player.s index b09700f..58c068e 100644 --- a/player.s +++ b/player.s @@ -61,6 +61,9 @@ PD_CURRWEAPON = 166 PD_TREATS = 168 PD_SIZE = 256 +MAX_POWER = 5 +MAX_ANGLE = 180 + .macro PLAYERPTR_Y tya ; Pointer to player structure from index asl @@ -125,7 +128,7 @@ playerDeltaAngle: clc adc playerData+PD_ANGLE,y bmi playerDeltaAngleClampLow - cmp #180 + cmp #MAX_ANGLE bpl playerDeltaAngleClampHigh playerDeltaAngleStore: @@ -138,7 +141,7 @@ playerDeltaAngleClampLow: bra playerDeltaAngleStore playerDeltaAngleClampHigh: - lda #180 + lda #MAX_ANGLE bra playerDeltaAngleStore @@ -156,7 +159,7 @@ playerDeltaPower: clc adc playerData+PD_POWER,y beq playerDeltaPowerClampLow - cmp #15 + cmp #MAX_POWER bpl playerDeltaPowerClampHigh playerDeltaPowerStore: @@ -169,7 +172,7 @@ playerDeltaPowerClampLow: bra playerDeltaPowerStore playerDeltaPowerClampHigh: - lda #15 + lda #MAX_POWER bra playerDeltaPowerStore diff --git a/spritebank.s b/spritebank.s index dc1b62c..5a20dd2 100644 --- a/spritebank.s +++ b/spritebank.s @@ -2,18 +2,20 @@ DrawSpriteBank : - ASL ; A=Sprite Number ($0000-$000F) + ASL ; A=Sprite Number ($0000-$0013) TAX ; Y=Target Screen Address ($2000-$9D00) LDA SpriteBankNum,X ; Relative Sprite Number Table JMP (SpriteBankBank,X) ; Bank Number Table SpriteBankNum : - .dbyt $0100,$0000,$0A00,$0500,$0600,$0900,$0E00,$0D00 - .dbyt $0800,$0700,$0C00,$0F00,$0200,$0300,$0400,$0B00 + .dbyt $0100,$0000,$0C00,$0500,$0600,$0B00,$1200,$1000 + .dbyt $0A00,$0900,$0F00,$1300,$0200,$0300,$0400,$1100 + .dbyt $0E00,$0D00,$0800,$0700 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 : JSL $AA0000 diff --git a/terrain.s b/terrain.s index 9e7363e..ed71bb8 100644 --- a/terrain.s +++ b/terrain.s @@ -206,6 +206,7 @@ clipTerrainLoop: ; On first move-left unclip every second row is unclipped incorrectly unclipTerrain: SAVE_AXY + phd lda #(CLIPPEDTERRAINSTACK & $f000) @@ -220,9 +221,8 @@ unclipTerrain: sec ; Find stopping point for stack-relative addressing lda clippedTerrainStackPtr and #$0fff - sbc #7 ; 4 bytes past top of stack, +3 for starting offset + sbc #3 ; -3 for starting offset sta STACKPTR - lda #$0fff-3 ; Start at the bottom of the stack tax @@ -234,7 +234,6 @@ unclipTerrainLoop: lda 0,x sta compiledTerrain,y - tya sec sbc #COMPILEDTERRAINROW+2 @@ -244,7 +243,7 @@ unclipTerrainLoop: 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 pld