Refactoring of gameobject rendering macros

Prep work for projectile orientation
This commit is contained in:
blondie7575 2017-10-26 20:15:52 -07:00
parent 57d2dd4575
commit a932295552
12 changed files with 166 additions and 108 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 B

After

Width:  |  Height:  |  Size: 124 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 B

After

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 B

After

Width:  |  Height:  |  Size: 124 B

Binary file not shown.

View File

@ -54,19 +54,19 @@ placeGameObjectOnTerrain:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; VRAM_PTR
; vramPtr
;
; ptr = Pointer to gameobject data
; PARAML0 = Pointer to gameobject data
; X => Offset to upper left corner of VRAM, or -1 if offscreen
;
; Trashes all registers
; Trashes SCRATCHL
;
.macro VRAM_PTR ptr
.scope
ldy #0
vramPtr:
SAVE_AY
; X
lda ptr+GO_POSX,y
ldy #GO_POSX
lda (PARAML0),y
lsr
cmp leftScreenEdge
@ -81,7 +81,8 @@ placeGameObjectOnTerrain:
; Y
sec
lda #200
sbc ptr+GO_POSY,y
ldy #GO_POSY
sbc (PARAML0),y
bmi vramPtrSkip ; Gameobject is off top edge of screen
cmp #200 - GAMEOBJECTHEIGHT
@ -100,42 +101,41 @@ vramPtrSkip:
ldx #-1
vramPtrDone:
.endscope
.endmacro
RESTORE_AY
rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; RENDER_GAMEOBJECT
; renderGameObject
;
; PARAML0 = Pointer to gameobject data
; A = Sprite index
;
; ptr = Pointer to gameobject data
; Trashes SCRATCHL
;
.macro RENDER_GAMEOBJECT ptr,spriteIndex
.scope
SAVE_AXY
renderGameObject:
SAVE_XY
; Find gameobject location in video memory
VRAM_PTR ptr
jsr vramPtr
cpx #0
bmi renderGameobjectDone
; Call compiled sprite code
txy
lda #spriteIndex
clc
jsr DrawSpriteBank
renderGameobjectDone:
RESTORE_AXY
.endscope
.endmacro
RESTORE_XY
rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; protectGameObject
;
; Saves background behind this game object
; A = Pointer to gameobject data
; A = Pointer to gameobject background data
; X = VRAM position of upper left of game object
;
; Trashes SCRATCHL
@ -421,18 +421,16 @@ protectGameObject:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; UNRENDER_GAMEOBJECT
; unrenderGameObject
;
; ptr = Pointer to gameobject data
; PARAML0 = Pointer to gameobject data
; Trashes SCRATCHL
;
.macro UNRENDER_GAMEOBJECT ptr
.scope
unrenderGameObject:
SAVE_AXY
ldy #0
; Find gameobject location in video memory
VRAM_PTR ptr
jsr vramPtr
cpx #0
bmi unrenderGameobjectSkip
bra unrenderGameobjectBackground
@ -441,278 +439,278 @@ unrenderGameobjectSkip:
jmp unrenderGameobjectDone
unrenderGameobjectBackground:
ldy #GO_BACKGROUND
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160+6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*2+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*2+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*2+6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*3,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*3+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*3+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*3+6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*4+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*4+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*4+6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*5,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*5+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*5+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*5+6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*6+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*6+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*6+6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*7,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*7+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*7+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*7+6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*8,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*8+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*8+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*8+6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*9,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*9+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*9+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*9+6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*10,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*10+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*10+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*10+6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*11,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*11+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*11+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*11+6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*12,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*12+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*12+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*12+6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*13,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*13+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*13+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*13+6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*14,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*14+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*14+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*14+6,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*15,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*15+2,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*15+4,x
iny
iny
lda ptr+GO_BACKGROUND,y
lda (PARAML0),y
sta SHADOWVRAMBANK+160*15+6,x
unrenderGameobjectDone:
RESTORE_AXY
.endscope
.endmacro
rts

Binary file not shown.

View File

@ -201,9 +201,18 @@ playerIntersectRect:
;
renderPlayers:
SAVE_AXY
RENDER_GAMEOBJECT playerData,0
RENDER_GAMEOBJECT playerData+PD_SIZE,0
RESTORE_AXY
lda #playerData
sta PARAML0
lda #0
jsr renderGameObject
lda #playerData+PD_SIZE
sta PARAML0
lda #0
jsr renderGameObject
RESTORE_AXY
rts
@ -214,14 +223,26 @@ renderPlayers:
protectPlayers:
SAVE_AXY
VRAM_PTR playerData
lda #playerData
sta PARAML0
jsr vramPtr
cpx #0
bmi protectPlayerNext
lda #playerData+GO_BACKGROUND
jsr protectGameObject
VRAM_PTR playerData+PD_SIZE
protectPlayerNext:
lda #playerData+PD_SIZE
sta PARAML0
jsr vramPtr
cpx #0
bmi protectPlayerDone
lda #playerData+GO_BACKGROUND+PD_SIZE
jsr protectGameObject
protectPlayerDone:
RESTORE_AXY
rts
@ -232,8 +253,13 @@ protectPlayers:
;
unrenderPlayers:
SAVE_AXY
UNRENDER_GAMEOBJECT playerData
UNRENDER_GAMEOBJECT playerData+PD_SIZE
lda #playerData
sta PARAML0
jsr unrenderGameObject
lda #playerData+PD_SIZE
sta PARAML0
jsr unrenderGameObject
RESTORE_AXY
rts

View File

@ -37,7 +37,7 @@ GRAVITY = $ffff ; 8.8 fixed point
projectileTypes: ; Byte offsets into projectile type data structure
.word 50 ; Damage
.word 40 ; Crater radius
.word 10 ; Crater radius
.word 0,0 ; Padding
PT_DAMAGE = 0
@ -257,12 +257,15 @@ updateProjectileCollisionsPlayerNext:
; Check for terrain collisions
lda projectileData+GO_POSX
inc
sta rectParams
lda projectileData+GO_POSY
clc
inc
sta rectParams+2
lda #GAMEOBJECTWIDTH
lda #GAMEOBJECTWIDTH-2
sta rectParams+4
lda #GAMEOBJECTHEIGHT
lda #GAMEOBJECTHEIGHT-2
sta rectParams+6
jsr intersectRectTerrain
@ -290,7 +293,9 @@ updateProjectileCollisionsTerrainHit:
; Trashes A and Y
;
endProjectile:
UNRENDER_GAMEOBJECT projectileData
lda #projectileData
sta PARAML0
jsr unrenderGameObject
ldy #0
jsr deleteProjectile
lda #1
@ -323,7 +328,12 @@ protectProjectiles:
lda projectileData
bmi protectProjectilesDone
VRAM_PTR projectileData
lda #projectileData
sta PARAML0
jsr vramPtr
cpx #0
bmi protectProjectilesDone
lda #projectileData+GO_BACKGROUND
jsr protectGameObject
@ -343,8 +353,30 @@ renderProjectiles:
jmp renderProjectilesDone
renderProjectilesDoIt:
RENDER_GAMEOBJECT projectileData,5
lda #projectileData
sta PARAML0
bra renderProjectilesFlat ; Bypass angle for now
; Determine which sprite to use
lda projectileData+JD_VY
bmi renderProjectilesNegAngle
cmp #$0400
bmi renderProjectilesFlat
lda #4 ; Up angle
bra renderProjectilesGoSprite
renderProjectilesNegAngle:
cmp #$ffc0
bpl renderProjectilesFlat
lda #6 ; Down angle
bra renderProjectilesGoSprite
renderProjectilesFlat:
lda #5 ; Flat
renderProjectilesGoSprite:
jsr renderGameObject
renderProjectilesDone:
pla
rts
@ -367,7 +399,9 @@ unrenderProjectilesActive:
jmp unrenderProjectilesDone
unrenderProjectilesDoIt:
UNRENDER_GAMEOBJECT projectileData
lda #projectileData
sta PARAML0
jsr unrenderGameObject
unrenderProjectilesDone:
pla

View File

@ -8,7 +8,7 @@ DrawSpriteBank :
JMP (SpriteBankBank,X) ; Bank Number Table
SpriteBankNum :
.dbyt $0000,$0200,$0300,$0100,$0500,$0600,$0400
.dbyt $0000,$0500,$0400,$0100,$0200,$0600,$0300
SpriteBankBank :
.addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00