Terrain data resolution doubled

This commit is contained in:
blondie7575 2017-09-13 10:56:34 -06:00
parent 9a4d9e7fb7
commit b0588cd14f
8 changed files with 69 additions and 31 deletions

View File

@ -6,9 +6,9 @@ import math
def main(argv): def main(argv):
minRadius = 3 minRadius = 3
maxRadius = 10 maxRadius = 20
print ("circleTable:\t\t;-Y for each X, in words") print ("circleTable:\t\t;-Y for each X, in bytes")
for radius in range(0,maxRadius+1): for radius in range(0,maxRadius+1):
if radius < minRadius: if radius < minRadius:
@ -29,7 +29,7 @@ def main(argv):
y = (int)(math.sqrt(radius*radius - x*x)) y = (int)(math.sqrt(radius*radius - x*x))
if p==radius-1: # A fudge to make circles close better if p==radius-1: # A fudge to make circles close better
y = radius y = radius
y*=-4 # Because X=words and we need -Y y*=-2 # Because X=bytes and we need -Y
print (y, end=",") print (y, end=",")
skipMinus1 = 0 skipMinus1 = 0
@ -39,7 +39,7 @@ def main(argv):
if p==0: # A fudge to make circles close better if p==0: # A fudge to make circles close better
y = radius y = radius
y*=-4 # Because X=words and we need -Y y*=-2 # Because X=bytes and we need -Y
if p==radius-1: if p==radius-1:
print(y) print(y)
else: else:

View File

@ -31,17 +31,15 @@ intersectRectTerrain:
lda rectParams lda rectParams
clc clc
adc rectParams+4 ; Reverse rect horizontally adc rectParams+4 ; Reverse rect horizontally
lsr ; Convert X to bytes
and #$fffe ; Force even and #$fffe ; Force even
sta rectParams sta rectParams
lda #TERRAINWIDTH/2 ; Reverse X coordinate system lda #TERRAINWIDTH ; Reverse X coordinate system
sec sec
sbc rectParams sbc rectParams
sta rectParams sta rectParams
tay ; We'll need this later as an index into height data words tay ; We'll need this later as an index into height data words
lsr rectParams+4 ; Convert width to bytes
sec sec
sbc rectParams+4 ; Convert width to extent sbc rectParams+4 ; Convert width to extent
sta rectParams+4 sta rectParams+4

View File

@ -45,7 +45,7 @@ beginGameplay:
ldy #0 ldy #0
jsr playerCreate jsr playerCreate
lda #190 lda #191
ldy #1 ldy #1
jsr playerCreate jsr playerCreate

View File

@ -37,8 +37,7 @@ placeGameObjectOnTerrain:
sec sec
sbc SCRATCHL sbc SCRATCHL
lsr ; Convert to bytes and force even and #$fffe ; Force even
and #$fffe
tay tay
lda terrainData,y lda terrainData,y

Binary file not shown.

View File

@ -12,7 +12,7 @@ playerData:
.word 0 ; Y pos in pixels (from bottom terrain edge) .word 0 ; Y pos in pixels (from bottom terrain edge)
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; Saved background .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; Saved background
.word 45 ; Angle in degrees from +X .word 90 ; Angle in degrees from +X
.word 1 ; Power .word 1 ; Power
.word 100 ; Anger .word 100 ; Anger
.byte 8,"SPROCKET " ; Name .byte 8,"SPROCKET " ; Name

View File

@ -152,7 +152,7 @@ vramYOffset:
.word $6400,$64a0,$6540,$65e0,$6680,$6720,$67c0,$6860,$6900,$69a0,$6a40,$6ae0,$6b80,$6c20,$6cc0,$6d60,$6e00,$6ea0,$6f40,$6fe0 .word $6400,$64a0,$6540,$65e0,$6680,$6720,$67c0,$6860,$6900,$69a0,$6a40,$6ae0,$6b80,$6c20,$6cc0,$6d60,$6e00,$6ea0,$6f40,$6fe0
.word $7080,$7120,$71c0,$7260,$7300,$73a0,$7440,$74e0,$7580,$7620,$76c0,$7760,$7800,$78a0,$7940,$79e0,$7a80,$7b20,$7bc0,$7c60 .word $7080,$7120,$71c0,$7260,$7300,$73a0,$7440,$74e0,$7580,$7620,$76c0,$7760,$7800,$78a0,$7940,$79e0,$7a80,$7b20,$7bc0,$7c60
circleTable: ;-Y for each X, in words circleTable: ;-Y for each X, in bytes
.addr 0 .addr 0
.addr 0 .addr 0
.addr 0 .addr 0
@ -164,20 +164,50 @@ circleTable: ;-Y for each X, in words
.addr circleTable8 .addr circleTable8
.addr circleTable9 .addr circleTable9
.addr circleTable10 .addr circleTable10
.addr circleTable11
.addr circleTable12
.addr circleTable13
.addr circleTable14
.addr circleTable15
.addr circleTable16
.addr circleTable17
.addr circleTable18
.addr circleTable19
.addr circleTable20
circleTable3: circleTable3:
.word 0,-8,-12,-12,-8,0 .word 0,-4,-6,-6,-4,0
circleTable4: circleTable4:
.word 0,-8,-12,-16,-16,-12,-8,0 .word 0,-4,-6,-8,-8,-6,-4,0
circleTable5: circleTable5:
.word 0,-12,-16,-16,-20,-20,-16,-16,-12,0 .word 0,-6,-8,-8,-10,-10,-8,-8,-6,0
circleTable6: circleTable6:
.word 0,-12,-16,-20,-20,-24,-24,-20,-20,-16,-12,0 .word 0,-6,-8,-10,-10,-12,-12,-10,-10,-8,-6,0
circleTable7: circleTable7:
.word 0,-12,-16,-20,-24,-24,-28,-28,-24,-24,-20,-16,-12,0 .word 0,-6,-8,-10,-12,-12,-14,-14,-12,-12,-10,-8,-6,0
circleTable8: circleTable8:
.word 0,-12,-20,-24,-24,-28,-28,-32,-32,-28,-28,-24,-24,-20,-12,0 .word 0,-6,-10,-12,-12,-14,-14,-16,-16,-14,-14,-12,-12,-10,-6,0
circleTable9: circleTable9:
.word 0,-16,-20,-24,-28,-32,-32,-32,-36,-36,-32,-32,-32,-28,-24,-20,-16,0 .word 0,-8,-10,-12,-14,-16,-16,-16,-18,-18,-16,-16,-16,-14,-12,-10,-8,0
circleTable10: circleTable10:
.word 0,-16,-24,-28,-32,-32,-36,-36,-36,-40,-40,-36,-36,-36,-32,-32,-28,-24,-16,0 .word 0,-8,-12,-14,-16,-16,-18,-18,-18,-20,-20,-18,-18,-18,-16,-16,-14,-12,-8,0
circleTable11:
.word 0,-8,-12,-14,-16,-18,-18,-20,-20,-20,-22,-22,-20,-20,-20,-18,-18,-16,-14,-12,-8,0
circleTable12:
.word 0,-8,-12,-14,-16,-18,-20,-20,-22,-22,-22,-24,-24,-22,-22,-22,-20,-20,-18,-16,-14,-12,-8,0
circleTable13:
.word 0,-10,-12,-16,-18,-20,-20,-22,-24,-24,-24,-24,-26,-26,-24,-24,-24,-24,-22,-20,-20,-18,-16,-12,-10,0
circleTable14:
.word 0,-10,-14,-16,-18,-20,-22,-24,-24,-26,-26,-26,-26,-28,-28,-26,-26,-26,-26,-24,-24,-22,-20,-18,-16,-14,-10,0
circleTable15:
.word 0,-10,-14,-18,-20,-22,-24,-24,-26,-26,-28,-28,-28,-28,-30,-30,-28,-28,-28,-28,-26,-26,-24,-24,-22,-20,-18,-14,-10,0
circleTable16:
.word 0,-10,-14,-18,-20,-22,-24,-26,-26,-28,-28,-30,-30,-30,-30,-32,-32,-30,-30,-30,-30,-28,-28,-26,-26,-24,-22,-20,-18,-14,-10,0
circleTable17:
.word 0,-10,-16,-18,-20,-24,-24,-26,-28,-30,-30,-30,-32,-32,-32,-32,-34,-34,-32,-32,-32,-32,-30,-30,-30,-28,-26,-24,-24,-20,-18,-16,-10,0
circleTable18:
.word 0,-10,-16,-18,-22,-24,-26,-28,-28,-30,-32,-32,-32,-34,-34,-34,-34,-36,-36,-34,-34,-34,-34,-32,-32,-32,-30,-28,-28,-26,-24,-22,-18,-16,-10,0
circleTable19:
.word 0,-12,-16,-20,-22,-24,-26,-28,-30,-32,-32,-34,-34,-36,-36,-36,-36,-36,-38,-38,-36,-36,-36,-36,-36,-34,-34,-32,-32,-30,-28,-26,-24,-22,-20,-16,-12,0
circleTable20:
.word 0,-12,-16,-20,-24,-26,-28,-30,-32,-32,-34,-34,-36,-36,-38,-38,-38,-38,-38,-40,-40,-38,-38,-38,-38,-38,-36,-36,-34,-34,-32,-32,-30,-28,-26,-24,-20,-16,-12,0

View File

@ -63,19 +63,17 @@ craterTerrain:
sbc PARAML0 sbc PARAML0
sty SCRATCHL ; Center width sty SCRATCHL ; Center width
sbc SCRATCHL sbc SCRATCHL
lsr and #$fffe ; Force even
and #$fffe
clc clc
adc #terrainData adc #terrainData
sta PARAML0 sta PARAML0
phy lda circleTable,y ; Look up circle data
tya ; Look up circle data
lsr
tay
lda circleTable,y
sta SCRATCHL sta SCRATCHL
ply
tya ; Iterate over diameter
asl
tay
craterTerrainLoop: craterTerrainLoop:
dey dey
@ -229,6 +227,11 @@ compileTerrainDone:
; PARAML0 = Start of compiled row data ; PARAML0 = Start of compiled row data
; PARAML1 = Row index ; PARAML1 = Row index
; ;
; Note: DA = PHX = BGBG
; 48 = PHA = FGFG
; 5A = PHY =
; 0B = PHD =
compileTerrainRow: compileTerrainRow:
SAVE_AXY SAVE_AXY
ldy #0 ldy #0
@ -243,10 +246,13 @@ compileTerrainColumnLoop:
bcc compileTerrainColumnBGRight bcc compileTerrainColumnBGRight
beq compileTerrainColumnBGRight beq compileTerrainColumnBGRight
lda #$00da lda #$00da
compileTerrainColumnLeft: compileTerrainColumnLeft:
sta compileTerrainOpcode sta compileTerrainOpcode
inx inx
inx inx
inx ; Double-up for now
inx
lda terrainData,x lda terrainData,x
cmp PARAML1 cmp PARAML1
bcc compileTerrainColumnBGLeft bcc compileTerrainColumnBGLeft
@ -258,6 +264,8 @@ compileTerrainColumnStore:
sta (PARAML0),y sta (PARAML0),y
inx inx
inx inx
inx ; Double-up for now
inx
iny iny
iny iny
cpy #VISIBLETERRAINWIDTH cpy #VISIBLETERRAINWIDTH
@ -305,6 +313,9 @@ generateTerrainLoop:
sta (SCRATCHL),y sta (SCRATCHL),y
iny iny
iny iny
sta (SCRATCHL),y ; Double-up for now
iny
iny
inx inx
inx inx
@ -317,7 +328,7 @@ generateTerrainLoop:
and #$03ff and #$03ff
tax tax
cpy #TERRAINWIDTH/2 cpy #TERRAINWIDTH
bne generateTerrainLoop bne generateTerrainLoop
lda #1 lda #1
@ -326,10 +337,10 @@ generateTerrainLoop:
; Terrain data, stored as height values 4 pixels wide (words) ; Terrain data, stored as height values 2 pixels wide (bytes)
terrainData: terrainData:
.repeat TERRAINWIDTH/4 ; VISIBLETERRAINWIDTH .repeat TERRAINWIDTH/2
.word 0 .word 0
.endrepeat .endrepeat