mirror of
https://github.com/blondie7575/GSCats.git
synced 2025-02-17 00:31:57 +00:00
Added support for multiple active projectiles
This commit is contained in:
parent
2e92ac118e
commit
35413e6ad0
@ -63,3 +63,5 @@ JD_VY = 138
|
|||||||
JD_TYPE = 140
|
JD_TYPE = 140
|
||||||
JD_NEW = 142
|
JD_NEW = 142
|
||||||
|
|
||||||
|
MAXPROJECTILES = 3
|
||||||
|
|
||||||
|
7
fan.s
7
fan.s
@ -30,12 +30,12 @@ deployFan:
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; updateFan
|
; updateFan
|
||||||
;
|
;
|
||||||
|
; Y = Offset to projectile structure
|
||||||
;
|
;
|
||||||
updateFan:
|
updateFan:
|
||||||
SAVE_AY
|
SAVE_AXY
|
||||||
|
|
||||||
; Wait for fan to collide with us as it falls from the sky
|
; Wait for fan to collide with us as it falls from the sky
|
||||||
ldy #0
|
|
||||||
lda projectileData+GO_POSX,y
|
lda projectileData+GO_POSX,y
|
||||||
sta rectParams
|
sta rectParams
|
||||||
lda projectileData+GO_POSY,y
|
lda projectileData+GO_POSY,y
|
||||||
@ -45,12 +45,13 @@ updateFan:
|
|||||||
lda #GAMEOBJECTHEIGHT
|
lda #GAMEOBJECTHEIGHT
|
||||||
sta rectParams+6
|
sta rectParams+6
|
||||||
|
|
||||||
|
ldx currentPlayer
|
||||||
jsr playerIntersectRect
|
jsr playerIntersectRect
|
||||||
cmp #0
|
cmp #0
|
||||||
beq updateFanDone
|
beq updateFanDone
|
||||||
|
|
||||||
updateFanDone:
|
updateFanDone:
|
||||||
RESTORE_AY
|
RESTORE_AXY
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
@ -130,12 +130,12 @@ gameplayLoopProjectiles:
|
|||||||
beq gameplayLoopProjectilesSkip
|
beq gameplayLoopProjectilesSkip
|
||||||
|
|
||||||
jsr unrenderProjectiles
|
jsr unrenderProjectiles
|
||||||
jsr updateProjectilePhysics
|
jsr updateProjectilesPhysics
|
||||||
jsr protectProjectiles
|
jsr protectProjectiles
|
||||||
jsr renderProjectiles
|
jsr renderProjectiles
|
||||||
|
|
||||||
gameplayLoopProjectilesSkip:
|
gameplayLoopProjectilesSkip:
|
||||||
jsr updateProjectileCollisions
|
jsr updateProjectilesCollisions
|
||||||
|
|
||||||
lda inventoryDirty
|
lda inventoryDirty
|
||||||
beq gameplayLoopVictoryCondition
|
beq gameplayLoopVictoryCondition
|
||||||
@ -268,7 +268,7 @@ scrollMap:
|
|||||||
jsr unrenderPlayers
|
jsr unrenderPlayers
|
||||||
jsr unrenderProjectiles
|
jsr unrenderProjectiles
|
||||||
|
|
||||||
jsr updateProjectilePhysics ; Good idea?
|
; jsr updateProjectilePhysics ; Good idea?
|
||||||
|
|
||||||
sta mapScrollPos
|
sta mapScrollPos
|
||||||
asl
|
asl
|
||||||
|
134
gameobject.s
134
gameobject.s
@ -135,286 +135,284 @@ renderGameobjectDone:
|
|||||||
; protectGameObject
|
; protectGameObject
|
||||||
;
|
;
|
||||||
; Saves background behind this game object
|
; Saves background behind this game object
|
||||||
; A = Pointer to gameobject background data
|
; PARAML0 = Pointer to gameobject background data
|
||||||
; X = VRAM position of upper left of game object
|
; X = VRAM position of upper left of game object
|
||||||
;
|
;
|
||||||
; Trashes SCRATCHL
|
; Trashes PARAML0
|
||||||
;
|
;
|
||||||
protectGameObject:
|
protectGameObject:
|
||||||
phy
|
phy
|
||||||
ldy #0
|
ldy #0
|
||||||
|
|
||||||
sta SCRATCHL
|
|
||||||
|
|
||||||
lda SHADOWVRAMBANK,x
|
lda SHADOWVRAMBANK,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+2,x
|
lda SHADOWVRAMBANK+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+4,x
|
lda SHADOWVRAMBANK+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+6,x
|
lda SHADOWVRAMBANK+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda SHADOWVRAMBANK+160,x
|
lda SHADOWVRAMBANK+160,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160+2,x
|
lda SHADOWVRAMBANK+160+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160+4,x
|
lda SHADOWVRAMBANK+160+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160+6,x
|
lda SHADOWVRAMBANK+160+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda SHADOWVRAMBANK+160*2,x
|
lda SHADOWVRAMBANK+160*2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*2+2,x
|
lda SHADOWVRAMBANK+160*2+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*2+4,x
|
lda SHADOWVRAMBANK+160*2+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*2+6,x
|
lda SHADOWVRAMBANK+160*2+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda SHADOWVRAMBANK+160*3,x
|
lda SHADOWVRAMBANK+160*3,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*3+2,x
|
lda SHADOWVRAMBANK+160*3+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*3+4,x
|
lda SHADOWVRAMBANK+160*3+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*3+6,x
|
lda SHADOWVRAMBANK+160*3+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda SHADOWVRAMBANK+160*4,x
|
lda SHADOWVRAMBANK+160*4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*4+2,x
|
lda SHADOWVRAMBANK+160*4+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*4+4,x
|
lda SHADOWVRAMBANK+160*4+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*4+6,x
|
lda SHADOWVRAMBANK+160*4+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda SHADOWVRAMBANK+160*5,x
|
lda SHADOWVRAMBANK+160*5,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*5+2,x
|
lda SHADOWVRAMBANK+160*5+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*5+4,x
|
lda SHADOWVRAMBANK+160*5+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*5+6,x
|
lda SHADOWVRAMBANK+160*5+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda SHADOWVRAMBANK+160*6,x
|
lda SHADOWVRAMBANK+160*6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*6+2,x
|
lda SHADOWVRAMBANK+160*6+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*6+4,x
|
lda SHADOWVRAMBANK+160*6+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*6+6,x
|
lda SHADOWVRAMBANK+160*6+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda SHADOWVRAMBANK+160*7,x
|
lda SHADOWVRAMBANK+160*7,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*7+2,x
|
lda SHADOWVRAMBANK+160*7+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*7+4,x
|
lda SHADOWVRAMBANK+160*7+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*7+6,x
|
lda SHADOWVRAMBANK+160*7+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda SHADOWVRAMBANK+160*8,x
|
lda SHADOWVRAMBANK+160*8,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*8+2,x
|
lda SHADOWVRAMBANK+160*8+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*8+4,x
|
lda SHADOWVRAMBANK+160*8+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*8+6,x
|
lda SHADOWVRAMBANK+160*8+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda SHADOWVRAMBANK+160*9,x
|
lda SHADOWVRAMBANK+160*9,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*9+2,x
|
lda SHADOWVRAMBANK+160*9+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*9+4,x
|
lda SHADOWVRAMBANK+160*9+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*9+6,x
|
lda SHADOWVRAMBANK+160*9+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda SHADOWVRAMBANK+160*10,x
|
lda SHADOWVRAMBANK+160*10,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*10+2,x
|
lda SHADOWVRAMBANK+160*10+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*10+4,x
|
lda SHADOWVRAMBANK+160*10+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*10+6,x
|
lda SHADOWVRAMBANK+160*10+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda SHADOWVRAMBANK+160*11,x
|
lda SHADOWVRAMBANK+160*11,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*11+2,x
|
lda SHADOWVRAMBANK+160*11+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*11+4,x
|
lda SHADOWVRAMBANK+160*11+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*11+6,x
|
lda SHADOWVRAMBANK+160*11+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda SHADOWVRAMBANK+160*12,x
|
lda SHADOWVRAMBANK+160*12,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*12+2,x
|
lda SHADOWVRAMBANK+160*12+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*12+4,x
|
lda SHADOWVRAMBANK+160*12+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*12+6,x
|
lda SHADOWVRAMBANK+160*12+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda SHADOWVRAMBANK+160*13,x
|
lda SHADOWVRAMBANK+160*13,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*13+2,x
|
lda SHADOWVRAMBANK+160*13+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*13+4,x
|
lda SHADOWVRAMBANK+160*13+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*13+6,x
|
lda SHADOWVRAMBANK+160*13+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda SHADOWVRAMBANK+160*14,x
|
lda SHADOWVRAMBANK+160*14,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*14+2,x
|
lda SHADOWVRAMBANK+160*14+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*14+4,x
|
lda SHADOWVRAMBANK+160*14+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*14+6,x
|
lda SHADOWVRAMBANK+160*14+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda SHADOWVRAMBANK+160*15,x
|
lda SHADOWVRAMBANK+160*15,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*15+2,x
|
lda SHADOWVRAMBANK+160*15+2,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*15+4,x
|
lda SHADOWVRAMBANK+160*15+4,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
lda SHADOWVRAMBANK+160*15+6,x
|
lda SHADOWVRAMBANK+160*15+6,x
|
||||||
sta (SCRATCHL),y
|
sta (PARAML0),y
|
||||||
|
|
||||||
ply
|
ply
|
||||||
rts
|
rts
|
||||||
|
BIN
gscats.2mg
BIN
gscats.2mg
Binary file not shown.
29
player.s
29
player.s
@ -70,6 +70,20 @@ PD_SIZE = 256
|
|||||||
.endmacro
|
.endmacro
|
||||||
|
|
||||||
|
|
||||||
|
.macro PLAYERPTR_X
|
||||||
|
txa ; Pointer to player structure from index
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
tax
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; playerCreate
|
; playerCreate
|
||||||
;
|
;
|
||||||
@ -204,17 +218,17 @@ playerFire_abort:
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; playerIntersectRect
|
; playerIntersectRect
|
||||||
;
|
;
|
||||||
; Y = Player index
|
; X = Player index
|
||||||
; rectParams = Rectangle to intersect with us
|
; rectParams = Rectangle to intersect with us
|
||||||
; A => non zero if rectangle is intersecting player
|
; A => non zero if rectangle is intersecting player
|
||||||
;
|
;
|
||||||
playerIntersectRect:
|
playerIntersectRect:
|
||||||
phy
|
phx
|
||||||
PLAYERPTR_Y
|
PLAYERPTR_X
|
||||||
|
|
||||||
lda playerData+GO_POSX,y
|
lda playerData+GO_POSX,x
|
||||||
sta rectParams2+0
|
sta rectParams2+0
|
||||||
lda playerData+GO_POSY,y
|
lda playerData+GO_POSY,x
|
||||||
sta rectParams2+2
|
sta rectParams2+2
|
||||||
lda #GAMEOBJECTWIDTH
|
lda #GAMEOBJECTWIDTH
|
||||||
sta rectParams2+4
|
sta rectParams2+4
|
||||||
@ -222,7 +236,7 @@ playerIntersectRect:
|
|||||||
sta rectParams2+6
|
sta rectParams2+6
|
||||||
|
|
||||||
jsr intersectRectRect
|
jsr intersectRectRect
|
||||||
ply
|
plx
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
@ -250,6 +264,7 @@ RESTORE_AXY
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; protectPlayers
|
; protectPlayers
|
||||||
;
|
;
|
||||||
|
; Trashes PARAML0
|
||||||
;
|
;
|
||||||
protectPlayers:
|
protectPlayers:
|
||||||
SAVE_AXY
|
SAVE_AXY
|
||||||
@ -261,6 +276,7 @@ protectPlayers:
|
|||||||
bmi protectPlayerNext
|
bmi protectPlayerNext
|
||||||
|
|
||||||
lda #playerData+GO_BACKGROUND
|
lda #playerData+GO_BACKGROUND
|
||||||
|
sta PARAML0
|
||||||
jsr protectGameObject
|
jsr protectGameObject
|
||||||
|
|
||||||
protectPlayerNext:
|
protectPlayerNext:
|
||||||
@ -271,6 +287,7 @@ protectPlayerNext:
|
|||||||
bmi protectPlayerDone
|
bmi protectPlayerDone
|
||||||
|
|
||||||
lda #playerData+GO_BACKGROUND+PD_SIZE
|
lda #playerData+GO_BACKGROUND+PD_SIZE
|
||||||
|
sta PARAML0
|
||||||
jsr protectGameObject
|
jsr protectGameObject
|
||||||
|
|
||||||
protectPlayerDone:
|
protectPlayerDone:
|
||||||
|
379
projectile.s
379
projectile.s
@ -26,7 +26,48 @@ projectileData:
|
|||||||
.byte 0 ; Padding to 256-byte boundary
|
.byte 0 ; Padding to 256-byte boundary
|
||||||
.endrepeat
|
.endrepeat
|
||||||
|
|
||||||
; Byte offsets for that ^ data structure can be found in equates.s
|
|
||||||
|
; Gameobject data (we're a subclass, effectively)
|
||||||
|
.word -1 ; Pos X in pixels (from left terrain edge)
|
||||||
|
.word 0 ; Pos Y 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
|
||||||
|
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
|
||||||
|
.word 0 ; Pos X (12.4 fixed point)
|
||||||
|
.word 0 ; Pos Y (12.4 fixed point)
|
||||||
|
.word 0 ; Velocity X (8.8 fixed point)
|
||||||
|
.word 0 ; Velocity Y (8.8 fixed point)
|
||||||
|
.word 0 ; Type
|
||||||
|
.word 1 ; New?
|
||||||
|
|
||||||
|
.repeat 112
|
||||||
|
.byte 0 ; Padding to 256-byte boundary
|
||||||
|
.endrepeat
|
||||||
|
|
||||||
|
|
||||||
|
; Gameobject data (we're a subclass, effectively)
|
||||||
|
.word -1 ; Pos X in pixels (from left terrain edge)
|
||||||
|
.word 0 ; Pos Y 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
|
||||||
|
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
|
||||||
|
.word 0 ; Pos X (12.4 fixed point)
|
||||||
|
.word 0 ; Pos Y (12.4 fixed point)
|
||||||
|
.word 0 ; Velocity X (8.8 fixed point)
|
||||||
|
.word 0 ; Velocity Y (8.8 fixed point)
|
||||||
|
.word 0 ; Type
|
||||||
|
.word 1 ; New?
|
||||||
|
|
||||||
|
.repeat 112
|
||||||
|
.byte 0 ; Padding to 256-byte boundary
|
||||||
|
.endrepeat
|
||||||
|
|
||||||
|
|
||||||
|
; Byte offsets for that-^ data structure can be found in equates.s
|
||||||
|
|
||||||
|
|
||||||
GRAVITY = $ffff ; 8.8 fixed point
|
GRAVITY = $ffff ; 8.8 fixed point
|
||||||
@ -104,7 +145,14 @@ PT_RENDER = 14
|
|||||||
tay
|
tay
|
||||||
.endmacro
|
.endmacro
|
||||||
|
|
||||||
|
.macro PROJECTILETYPEPTR_X
|
||||||
|
txa ; Pointer to projectile type structure from index
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
tax
|
||||||
|
.endmacro
|
||||||
|
|
||||||
projectileParams:
|
projectileParams:
|
||||||
.word 0 ; Starting pos X
|
.word 0 ; Starting pos X
|
||||||
@ -114,6 +162,30 @@ projectileParams:
|
|||||||
.word 0 ; Type
|
.word 0 ; Type
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; allocProjectile
|
||||||
|
;
|
||||||
|
; Returns offset of projectile structure in Y, or -1 if none available
|
||||||
|
;
|
||||||
|
allocProjectile:
|
||||||
|
SAVE_AX
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
allocProjectileLoop:
|
||||||
|
txy
|
||||||
|
PROJECTILEPTR_Y
|
||||||
|
lda projectileData+GO_POSX,y
|
||||||
|
bmi allocProjectileDone
|
||||||
|
inx
|
||||||
|
cpx MAXPROJECTILES
|
||||||
|
bne allocProjectileLoop
|
||||||
|
ldy #-1
|
||||||
|
|
||||||
|
allocProjectileDone:
|
||||||
|
RESTORE_AX
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; fireProjectile
|
; fireProjectile
|
||||||
;
|
;
|
||||||
@ -121,10 +193,12 @@ projectileParams:
|
|||||||
fireProjectile:
|
fireProjectile:
|
||||||
SAVE_AXY
|
SAVE_AXY
|
||||||
|
|
||||||
; Set up projectile structure
|
; Allocate a projectile
|
||||||
ldy #0 ; Only one active at a time for now
|
jsr allocProjectile
|
||||||
PROJECTILEPTR_Y
|
cpy #-1
|
||||||
|
beq fireProjectileDone
|
||||||
|
|
||||||
|
; Set up projectile structure
|
||||||
lda projectileParams ; X pos
|
lda projectileParams ; X pos
|
||||||
sta projectileData+GO_POSX,y
|
sta projectileData+GO_POSX,y
|
||||||
lda projectileParams+2 ; Y pos
|
lda projectileParams+2 ; Y pos
|
||||||
@ -169,6 +243,7 @@ fireProjectileFinish:
|
|||||||
sta projectileData+JD_NEW,y
|
sta projectileData+JD_NEW,y
|
||||||
stz projectileActive
|
stz projectileActive
|
||||||
|
|
||||||
|
fireProjectileDone:
|
||||||
RESTORE_AXY
|
RESTORE_AXY
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -217,27 +292,49 @@ prepareProjectilePhysics:
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; updateProjectilesPhysics
|
||||||
|
;
|
||||||
|
;
|
||||||
|
updateProjectilesPhysics:
|
||||||
|
SAVE_AXY
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
updateProjectilesPhysicsLoop:
|
||||||
|
txy
|
||||||
|
PROJECTILEPTR_Y
|
||||||
|
jsr updateProjectilePhysics
|
||||||
|
|
||||||
|
updateProjectilesPhysicsSkip:
|
||||||
|
inx
|
||||||
|
cpx #MAXPROJECTILES
|
||||||
|
bne updateProjectilesPhysicsLoop
|
||||||
|
|
||||||
|
RESTORE_AXY
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; updateProjectilePhysics
|
; updateProjectilePhysics
|
||||||
;
|
;
|
||||||
; Trashes SCRATCHL
|
; Y = Offset to projectile structure
|
||||||
;
|
;
|
||||||
updateProjectilePhysics:
|
updateProjectilePhysics:
|
||||||
SAVE_AY
|
SAVE_AXY
|
||||||
|
|
||||||
lda projectileData+GO_POSX
|
lda projectileData+GO_POSX,y
|
||||||
bpl updateProjectilePhysicsActive
|
bpl updateProjectilePhysicsActive
|
||||||
jmp updateProjectilePhysicsDone
|
jmp updateProjectilePhysicsDone
|
||||||
|
|
||||||
updateProjectilePhysicsActive:
|
updateProjectilePhysicsActive:
|
||||||
; Integrate gravity over velocity
|
; Integrate gravity over velocity
|
||||||
lda projectileData+JD_VY
|
lda projectileData+JD_VY,y
|
||||||
clc
|
clc
|
||||||
adc #GRAVITY
|
adc #GRAVITY
|
||||||
sta projectileData+JD_VY
|
sta projectileData+JD_VY,y
|
||||||
|
|
||||||
; Integrate X velocity over position
|
; Integrate X velocity over position
|
||||||
lda projectileData+JD_VX
|
lda projectileData+JD_VX,y
|
||||||
; Convert 8.8 to 12.4
|
; Convert 8.8 to 12.4
|
||||||
cmp #$8000
|
cmp #$8000
|
||||||
ror
|
ror
|
||||||
@ -248,22 +345,22 @@ updateProjectilePhysicsActive:
|
|||||||
cmp #$8000
|
cmp #$8000
|
||||||
ror
|
ror
|
||||||
clc
|
clc
|
||||||
adc projectileData+JD_PRECISEX
|
adc projectileData+JD_PRECISEX,y
|
||||||
sta projectileData+JD_PRECISEX
|
sta projectileData+JD_PRECISEX,y
|
||||||
|
|
||||||
; Convert to integer for rendering
|
; Convert to integer for rendering
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
sta projectileData+GO_POSX
|
sta projectileData+GO_POSX,y
|
||||||
bmi updateProjectilePhysicsDelete
|
bmi updateProjectilePhysicsDelete
|
||||||
cmp #TERRAINWIDTH-GAMEOBJECTWIDTH-1
|
cmp #TERRAINWIDTH-GAMEOBJECTWIDTH-1
|
||||||
bpl updateProjectilePhysicsDelete
|
bpl updateProjectilePhysicsDelete
|
||||||
|
|
||||||
updateProjectilePhysicsContinue:
|
updateProjectilePhysicsContinue:
|
||||||
; Integrate Y velocity over position
|
; Integrate Y velocity over position
|
||||||
lda projectileData+JD_VY
|
lda projectileData+JD_VY,y
|
||||||
; Convert 8.8 to 12.4
|
; Convert 8.8 to 12.4
|
||||||
cmp #$8000
|
cmp #$8000
|
||||||
ror
|
ror
|
||||||
@ -274,58 +371,85 @@ updateProjectilePhysicsContinue:
|
|||||||
cmp #$8000
|
cmp #$8000
|
||||||
ror
|
ror
|
||||||
clc
|
clc
|
||||||
adc projectileData+JD_PRECISEY
|
adc projectileData+JD_PRECISEY,y
|
||||||
sta projectileData+JD_PRECISEY
|
sta projectileData+JD_PRECISEY,y
|
||||||
|
|
||||||
; Convert to integer for rendering
|
; Convert to integer for rendering
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
sta projectileData+GO_POSY
|
sta projectileData+GO_POSY,y
|
||||||
cmp #GAMEOBJECTHEIGHT
|
cmp #GAMEOBJECTHEIGHT
|
||||||
bmi updateProjectilePhysicsDelete
|
bmi updateProjectilePhysicsDelete
|
||||||
|
|
||||||
; Check for special update code
|
; Check for special update code
|
||||||
ldy #0
|
phy
|
||||||
lda projectileData+JD_TYPE,y
|
lda projectileData+JD_TYPE,y
|
||||||
tay
|
tay
|
||||||
PROJECTILETYPEPTR_Y
|
PROJECTILETYPEPTR_Y
|
||||||
lda projectileTypes+PT_UPDATE,y
|
lda projectileTypes+PT_UPDATE,y
|
||||||
beq updateProjectilePhysicsDone
|
beq updateProjectilePhysicsNormalUpdate
|
||||||
|
ply
|
||||||
JSRA
|
JSRA
|
||||||
|
|
||||||
updateProjectilePhysicsDone:
|
updateProjectilePhysicsDone:
|
||||||
RESTORE_AY
|
RESTORE_AXY
|
||||||
rts
|
rts
|
||||||
|
|
||||||
updateProjectilePhysicsDelete:
|
updateProjectilePhysicsDelete:
|
||||||
jsr endProjectile
|
jsr endProjectile
|
||||||
bra updateProjectilePhysicsDone
|
bra updateProjectilePhysicsDone
|
||||||
|
|
||||||
|
updateProjectilePhysicsNormalUpdate:
|
||||||
|
ply
|
||||||
|
bra updateProjectilePhysicsDone
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; updateProjectilesCollisions
|
||||||
|
;
|
||||||
|
;
|
||||||
|
updateProjectilesCollisions:
|
||||||
|
SAVE_AXY
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
updateProjectilesCollisionsLoop:
|
||||||
|
txy
|
||||||
|
PROJECTILEPTR_Y
|
||||||
|
jsr updateProjectileCollisions
|
||||||
|
|
||||||
|
updateProjectilesCollisionsSkip:
|
||||||
|
inx
|
||||||
|
cpx #MAXPROJECTILES
|
||||||
|
bne updateProjectilesCollisionsLoop
|
||||||
|
|
||||||
|
RESTORE_AXY
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; updateProjectileCollisions
|
; updateProjectileCollisions
|
||||||
;
|
;
|
||||||
; Trashes SCRATCHL
|
; Y = Offset to projectile structure
|
||||||
;
|
;
|
||||||
updateProjectileCollisions:
|
updateProjectileCollisions:
|
||||||
SAVE_AY
|
SAVE_AXY
|
||||||
|
|
||||||
; Check for player collisions
|
; Check for player collisions
|
||||||
ldy #0
|
lda projectileData+GO_POSX,y
|
||||||
lda projectileData+GO_POSX
|
|
||||||
bmi updateProjectileCollisionsDone ; Projectile not active
|
bmi updateProjectileCollisionsDone ; Projectile not active
|
||||||
sta rectParams
|
sta rectParams
|
||||||
lda projectileData+GO_POSY
|
lda projectileData+GO_POSY,y
|
||||||
sta rectParams+2
|
sta rectParams+2
|
||||||
lda #GAMEOBJECTWIDTH
|
lda #GAMEOBJECTWIDTH
|
||||||
sta rectParams+4
|
sta rectParams+4
|
||||||
lda #GAMEOBJECTHEIGHT
|
lda #GAMEOBJECTHEIGHT
|
||||||
sta rectParams+6
|
sta rectParams+6
|
||||||
|
ldx #0
|
||||||
|
|
||||||
updateProjectileCollisionsPlayerLoop:
|
updateProjectileCollisionsPlayerLoop:
|
||||||
cpy currentPlayer
|
cpx currentPlayer
|
||||||
beq updateProjectileCollisionsPlayerNext
|
beq updateProjectileCollisionsPlayerNext
|
||||||
|
|
||||||
jsr playerIntersectRect
|
jsr playerIntersectRect
|
||||||
@ -333,16 +457,16 @@ updateProjectileCollisionsPlayerLoop:
|
|||||||
bne updateProjectileCollisionsPlayerHit
|
bne updateProjectileCollisionsPlayerHit
|
||||||
|
|
||||||
updateProjectileCollisionsPlayerNext:
|
updateProjectileCollisionsPlayerNext:
|
||||||
iny
|
inx
|
||||||
cpy #NUMPLAYERS
|
cpx #NUMPLAYERS
|
||||||
bne updateProjectileCollisionsPlayerLoop
|
bne updateProjectileCollisionsPlayerLoop
|
||||||
|
|
||||||
; Check for terrain collisions
|
; Check for terrain collisions
|
||||||
lda projectileData+GO_POSX
|
lda projectileData+GO_POSX,y
|
||||||
inc
|
inc
|
||||||
inc
|
inc
|
||||||
sta rectParams
|
sta rectParams
|
||||||
lda projectileData+GO_POSY
|
lda projectileData+GO_POSY,y
|
||||||
clc
|
clc
|
||||||
inc
|
inc
|
||||||
inc
|
inc
|
||||||
@ -357,7 +481,7 @@ updateProjectileCollisionsPlayerNext:
|
|||||||
bne updateProjectileCollisionsTerrainHit
|
bne updateProjectileCollisionsTerrainHit
|
||||||
|
|
||||||
updateProjectileCollisionsDone:
|
updateProjectileCollisionsDone:
|
||||||
RESTORE_AY
|
RESTORE_AXY
|
||||||
rts
|
rts
|
||||||
|
|
||||||
updateProjectileCollisionsPlayerHit:
|
updateProjectileCollisionsPlayerHit:
|
||||||
@ -409,90 +533,145 @@ deleteProjectile:
|
|||||||
protectProjectiles:
|
protectProjectiles:
|
||||||
SAVE_AXY
|
SAVE_AXY
|
||||||
|
|
||||||
lda projectileData
|
ldx #0
|
||||||
bmi protectProjectilesDone
|
|
||||||
|
|
||||||
lda #projectileData
|
protectProjectilesLoop:
|
||||||
|
txy
|
||||||
|
PROJECTILEPTR_Y
|
||||||
|
lda projectileData+GO_POSX,y
|
||||||
|
bpl protectProjectilesGotOne
|
||||||
|
|
||||||
|
protectProjectilesContinue:
|
||||||
|
inx
|
||||||
|
cpx #MAXPROJECTILES
|
||||||
|
beq protectProjectilesDone
|
||||||
|
bra protectProjectilesLoop
|
||||||
|
|
||||||
|
protectProjectilesGotOne:
|
||||||
|
lda #projectileData+GO_POSX
|
||||||
sta PARAML0
|
sta PARAML0
|
||||||
|
clc
|
||||||
|
tya
|
||||||
|
adc PARAML0
|
||||||
|
sta PARAML0
|
||||||
|
phx
|
||||||
jsr vramPtr
|
jsr vramPtr
|
||||||
cpx #0
|
cpx #-1
|
||||||
bmi protectProjectilesDone
|
beq protectProjectilesOffscreen
|
||||||
|
|
||||||
lda #projectileData+GO_BACKGROUND
|
lda #projectileData+GO_BACKGROUND
|
||||||
|
sta PARAML0
|
||||||
|
clc
|
||||||
|
tya
|
||||||
|
adc PARAML0
|
||||||
|
sta PARAML0
|
||||||
jsr protectGameObject
|
jsr protectGameObject
|
||||||
|
plx
|
||||||
|
bra protectProjectilesContinue
|
||||||
|
|
||||||
protectProjectilesDone:
|
protectProjectilesDone:
|
||||||
RESTORE_AXY
|
RESTORE_AXY
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
protectProjectilesOffscreen:
|
||||||
|
plx
|
||||||
|
bra protectProjectilesContinue
|
||||||
|
|
||||||
UPANGLE = $00af
|
UPANGLE = $00af
|
||||||
DNANGLE = $ffaf
|
DNANGLE = $ffaf
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; renderProjectiles
|
; renderProjectiles
|
||||||
;
|
;
|
||||||
;
|
;
|
||||||
renderProjectiles:
|
renderProjectiles:
|
||||||
SAVE_AY
|
SAVE_AXY
|
||||||
|
ldx #0
|
||||||
|
|
||||||
lda projectileData
|
renderProjectilesLoop:
|
||||||
bpl renderProjectilesDoIt
|
txy
|
||||||
jmp renderProjectilesDone
|
PROJECTILEPTR_Y
|
||||||
|
jsr renderProjectile
|
||||||
|
|
||||||
renderProjectilesDoIt:
|
renderProjectilesSkip:
|
||||||
|
inx
|
||||||
|
cpx #MAXPROJECTILES
|
||||||
|
bne renderProjectilesLoop
|
||||||
|
|
||||||
lda projectileData+JD_TYPE
|
RESTORE_AXY
|
||||||
tay
|
rts
|
||||||
PROJECTILETYPEPTR_Y
|
|
||||||
|
|
||||||
lda #projectileData
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; renderProjectile
|
||||||
|
;
|
||||||
|
; Y = Offset to projectile structure
|
||||||
|
;
|
||||||
|
renderProjectile:
|
||||||
|
SAVE_AXY
|
||||||
|
|
||||||
|
PROJECTILEPTR_Y
|
||||||
|
lda projectileData+GO_POSX,y
|
||||||
|
bpl renderProjectileDoIt
|
||||||
|
jmp renderProjectileDone
|
||||||
|
|
||||||
|
renderProjectileDoIt:
|
||||||
|
lda projectileData+JD_TYPE,y
|
||||||
|
tax
|
||||||
|
PROJECTILETYPEPTR_X
|
||||||
|
|
||||||
|
lda #projectileData ; Calculate pointer for game object render
|
||||||
|
sta PARAML0
|
||||||
|
clc
|
||||||
|
tya
|
||||||
|
adc PARAML0
|
||||||
sta PARAML0
|
sta PARAML0
|
||||||
|
|
||||||
; Determine which sprite to use
|
; Determine which sprite to use
|
||||||
lda projectileData+JD_VX
|
lda projectileData+JD_VX,y
|
||||||
bmi renderProjectilesNegX
|
bmi renderProjectileNegX
|
||||||
|
|
||||||
lda projectileData+JD_VY
|
lda projectileData+JD_VY,y
|
||||||
|
|
||||||
bmi renderProjectilesNegYPosX
|
bmi renderProjectileNegYPosX
|
||||||
cmp #UPANGLE
|
cmp #UPANGLE
|
||||||
bmi renderProjectilesFlat
|
bmi renderProjectileFlat
|
||||||
|
|
||||||
renderProjectilesUpAngle:
|
renderProjectileUpAngle:
|
||||||
lda projectileTypes+PT_FRAME0,y ; Up angle
|
lda projectileTypes+PT_FRAME0,x ; Up angle
|
||||||
bra renderProjectilesGoSprite
|
bra renderProjectileGoSprite
|
||||||
|
|
||||||
renderProjectilesNegYPosX:
|
renderProjectileNegYPosX:
|
||||||
cmp #DNANGLE
|
cmp #DNANGLE
|
||||||
bpl renderProjectilesFlat
|
bpl renderProjectileFlat
|
||||||
|
|
||||||
renderProjectilesDownAngle:
|
renderProjectileDownAngle:
|
||||||
lda projectileTypes+PT_FRAME2,y ; Down angle
|
lda projectileTypes+PT_FRAME2,x ; Down angle
|
||||||
bra renderProjectilesGoSprite
|
bra renderProjectileGoSprite
|
||||||
|
|
||||||
renderProjectilesNegX:
|
renderProjectileNegX:
|
||||||
lda projectileData+JD_VY
|
lda projectileData+JD_VY,y
|
||||||
|
|
||||||
bmi renderProjectilesNegYNegX
|
bmi renderProjectileNegYNegX
|
||||||
|
|
||||||
cmp #UPANGLE
|
cmp #UPANGLE
|
||||||
bmi renderProjectilesFlat
|
bmi renderProjectileFlat
|
||||||
bra renderProjectilesDownAngle
|
bra renderProjectileDownAngle
|
||||||
|
|
||||||
renderProjectilesNegYNegX:
|
renderProjectileNegYNegX:
|
||||||
cmp #DNANGLE
|
cmp #DNANGLE
|
||||||
bpl renderProjectilesFlat
|
bpl renderProjectileFlat
|
||||||
bra renderProjectilesUpAngle
|
bra renderProjectileUpAngle
|
||||||
|
|
||||||
renderProjectilesFlat:
|
renderProjectileFlat:
|
||||||
lda projectileTypes+PT_FRAME1,y ; Flat
|
lda projectileTypes+PT_FRAME1,x ; Flat
|
||||||
|
|
||||||
renderProjectilesGoSprite:
|
renderProjectileGoSprite:
|
||||||
jsr renderGameObject
|
jsr renderGameObject
|
||||||
|
|
||||||
renderProjectilesDone:
|
renderProjectileDone:
|
||||||
RESTORE_AY
|
RESTORE_AXY
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
@ -501,23 +680,51 @@ renderProjectilesDone:
|
|||||||
;
|
;
|
||||||
;
|
;
|
||||||
unrenderProjectiles:
|
unrenderProjectiles:
|
||||||
|
SAVE_AXY
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
unrenderProjectilesLoop:
|
||||||
|
txy
|
||||||
|
PROJECTILEPTR_Y
|
||||||
|
jsr unrenderProjectile
|
||||||
|
|
||||||
|
unrenderProjectilesSkip:
|
||||||
|
inx
|
||||||
|
cpx #MAXPROJECTILES
|
||||||
|
bne unrenderProjectilesLoop
|
||||||
|
|
||||||
|
RESTORE_AXY
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; unrenderProjectile
|
||||||
|
;
|
||||||
|
; Y = Offset to projectile structure
|
||||||
|
;
|
||||||
|
unrenderProjectile:
|
||||||
pha
|
pha
|
||||||
lda projectileData
|
lda projectileData+GO_POSX,y
|
||||||
bpl unrenderProjectilesActive
|
bpl unrenderProjectileActive
|
||||||
jmp unrenderProjectilesDone
|
jmp unrenderProjectileDone
|
||||||
|
|
||||||
unrenderProjectilesActive:
|
unrenderProjectileActive:
|
||||||
lda projectileData+JD_NEW
|
lda projectileData+JD_NEW,y
|
||||||
beq unrenderProjectilesDoIt
|
beq unrenderProjectileDoIt
|
||||||
stz projectileData+JD_NEW
|
lda #0
|
||||||
jmp unrenderProjectilesDone
|
sta projectileData+JD_NEW,y
|
||||||
|
jmp unrenderProjectileDone
|
||||||
|
|
||||||
unrenderProjectilesDoIt:
|
unrenderProjectileDoIt:
|
||||||
lda #projectileData
|
lda #projectileData
|
||||||
sta PARAML0
|
sta PARAML0
|
||||||
|
clc
|
||||||
|
tya
|
||||||
|
adc PARAML0
|
||||||
|
sta PARAML0
|
||||||
jsr unrenderGameObject
|
jsr unrenderGameObject
|
||||||
|
|
||||||
unrenderProjectilesDone:
|
unrenderProjectileDone:
|
||||||
pla
|
pla
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -525,14 +732,12 @@ unrenderProjectilesDone:
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; processPlayerImpact
|
; processPlayerImpact
|
||||||
;
|
;
|
||||||
; Y = Index of player that was hit
|
; X = Index of player that was hit
|
||||||
|
; Y = Offset to projectile structure
|
||||||
;
|
;
|
||||||
processPlayerImpact:
|
processPlayerImpact:
|
||||||
PLAYERPTR_Y
|
PLAYERPTR_X
|
||||||
tyx
|
|
||||||
|
|
||||||
ldy #0 ; Assume projectile 0
|
|
||||||
PROJECTILEPTR_Y
|
|
||||||
lda projectileData+JD_TYPE,y
|
lda projectileData+JD_TYPE,y
|
||||||
tay
|
tay
|
||||||
PROJECTILETYPEPTR_Y
|
PROJECTILETYPEPTR_Y
|
||||||
|
Loading…
x
Reference in New Issue
Block a user