diff --git a/gscats.2mg b/gscats.2mg index ecb8390..fafc475 100644 Binary files a/gscats.2mg and b/gscats.2mg differ diff --git a/gscats.s b/gscats.s index bb04d9e..4a291e7 100644 --- a/gscats.s +++ b/gscats.s @@ -40,32 +40,15 @@ mainGameLoop: jsr syncVBL -; lda scrollV -; bmi negV - -; clc -; lda mapScrollPos -; adc scrollV -; cmp #COMPILEDTERRAINROW-80 -; beq reverseScroll -; sta mapScrollPos - bra render - -negV: - clc - lda mapScrollPos - adc scrollV - beq reverseScroll - sta mapScrollPos - -render: - tay jsr renderTerrain jsr kbdScan lda mapScrollRequested bpl scrollMap + lda angleDeltaRequested + bne changeAngle + lda #gameobjectData sta PARAML0 jsr renderGameobject @@ -82,7 +65,6 @@ scrollMap: sta mapScrollPos asl - asl sta leftScreenEdge jsr clipTerrain @@ -90,6 +72,17 @@ scrollMap: sta mapScrollRequested jmp mainGameLoop +changeAngle: + ldy #0 + tax + jsr playerDeltaAngle + + ldy #0 + jsr renderPlayerHeader + + stz angleDeltaRequested + jmp mainGameLoop + reverseScroll: lda scrollV eor #$ffff @@ -117,12 +110,14 @@ kbdScanLoop: cmp #(8 + $80) beq kbdScanLeftArrow - cmp #(21 + $80) beq kbdScanRightArrow - - cmp #(32 + $80) + cmp #(' ' + $80) beq kbdScanSpace + cmp #('a' + $80) + beq kbdScanA + cmp #('z' + $80) + beq kbdScanZ kbdScanDone: NATIVE @@ -153,6 +148,17 @@ kbdScanSpace: sta quitRequested rts +kbdScanA: + NATIVE + lda #1 + sta angleDeltaRequested + rts + +kbdScanZ: + NATIVE + lda #-1 + sta angleDeltaRequested + rts @@ -162,6 +168,8 @@ quitRequested: .word $0000 mapScrollRequested: .word $FFFF +angleDeltaRequested: + .word $0000 ; Position of map viewing window. Can be visualized in two ways: diff --git a/player.s b/player.s index 87c0fd9..e4bc392 100644 --- a/player.s +++ b/player.s @@ -14,6 +14,48 @@ playerData: .word 45 ; Angle in degrees from +X .word 50 ; Power +PD_ANGLE = 4 ; Byte offsets into player data structure +PD_POS = 6 + +.macro PLAYERPTR_Y + tya ; Pointer to player structure from index + asl + asl + asl + tay +.endmacro + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; playerDeltaAngle +; +; Y = Player index +; X = Delta +; +playerDeltaAngle: + SAVE_AXY + PLAYERPTR_Y + + txa + clc + adc playerData+PD_ANGLE,y + bmi playerDeltaAngleClampLow + cmp #180 + bpl playerDeltaAngleClampHigh + +playerDeltaAngleStore: + sta playerData+PD_ANGLE,y + RESTORE_AXY + rts + +playerDeltaAngleClampLow: + lda #0 + bra playerDeltaAngleStore + +playerDeltaAngleClampHigh: + lda #180 + bra playerDeltaAngleStore + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; renderPlayerHeader @@ -22,18 +64,13 @@ playerData: ; renderPlayerHeader: SAVE_AXY - - tya ; Index to player structure - asl - asl - asl - tay + PLAYERPTR_Y ldx #0 lda #angleStr jsr DrawString - lda playerData+4,y + lda playerData+PD_ANGLE,y ldx #24 jsr drawNumber @@ -41,4 +78,4 @@ renderPlayerHeader: rts angleStr: - pstring "ANGLE:" + pstring "ANGLE: " diff --git a/utility.s b/utility.s index 092db98..f654a59 100644 --- a/utility.s +++ b/utility.s @@ -69,6 +69,7 @@ intToStringFullDigitsLoop: lsr lsr lsr + clc adc #'0' sta intToStringResult,y iny