mirror of
https://github.com/blondie7575/GSCats.git
synced 2024-11-26 02:49:16 +00:00
Support for local and global wind
This commit is contained in:
parent
c6d1fd00b2
commit
32c622afbe
@ -63,6 +63,8 @@ JD_VY = 138
|
|||||||
JD_TYPE = 140
|
JD_TYPE = 140
|
||||||
JD_NEW = 142
|
JD_NEW = 142
|
||||||
JD_STATIC = 144
|
JD_STATIC = 144
|
||||||
|
JD_OWNER = 146
|
||||||
|
JD_FACING = 148
|
||||||
|
|
||||||
MAXPROJECTILES = 3
|
MAXPROJECTILES = 3
|
||||||
|
|
||||||
|
42
fan.s
42
fan.s
@ -5,6 +5,10 @@
|
|||||||
; Created by Quinn Dunki on 8/15/18
|
; Created by Quinn Dunki on 8/15/18
|
||||||
;
|
;
|
||||||
|
|
||||||
|
FANRANGE = 100 ; In pixels
|
||||||
|
FANMAGNITUDE = $10 ; 12.4 fixed point speed delta, in pixels
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; deployFan
|
; deployFan
|
||||||
;
|
;
|
||||||
@ -36,7 +40,7 @@ updateFan:
|
|||||||
SAVE_AXY
|
SAVE_AXY
|
||||||
|
|
||||||
lda projectileData+JD_STATIC,y
|
lda projectileData+JD_STATIC,y
|
||||||
bne updateFanDone ; We're already static, so no work to do
|
bne updateFanWind ; We're set up, so apply our wind
|
||||||
|
|
||||||
; 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
|
||||||
lda projectileData+GO_POSX,y
|
lda projectileData+GO_POSX,y
|
||||||
@ -70,6 +74,42 @@ updateFanDone:
|
|||||||
RESTORE_AXY
|
RESTORE_AXY
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
updateFanWind:
|
||||||
|
lda projectileData+JD_OWNER,y
|
||||||
|
cmp currentPlayer ; We're not affected by our own fan
|
||||||
|
beq updateFanDone
|
||||||
|
|
||||||
|
tyx
|
||||||
|
ldy projectileActive
|
||||||
|
bmi updateFanDone ; No active projectile
|
||||||
|
|
||||||
|
; Calculate distance to fan
|
||||||
|
lda projectileData+GO_POSX,y
|
||||||
|
sta SCRATCHL
|
||||||
|
lda projectileData+GO_POSX,x
|
||||||
|
sec
|
||||||
|
sbc SCRATCHL
|
||||||
|
ABSA
|
||||||
|
cmp #FANRANGE ; Check if we're within range
|
||||||
|
bcs updateFanDone
|
||||||
|
|
||||||
|
; Apply wind
|
||||||
|
lda projectileData+JD_FACING,y
|
||||||
|
bne updateFanWindNeg
|
||||||
|
|
||||||
|
sec
|
||||||
|
lda projectileData+JD_PRECISEX,y
|
||||||
|
sbc #FANMAGNITUDE
|
||||||
|
sta projectileData+JD_PRECISEX,y
|
||||||
|
bra updateFanDone
|
||||||
|
|
||||||
|
updateFanWindNeg:
|
||||||
|
clc
|
||||||
|
lda projectileData+JD_PRECISEX,y
|
||||||
|
adc #FANMAGNITUDE
|
||||||
|
sta projectileData+JD_PRECISEX,y
|
||||||
|
bra updateFanDone
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; renderFan
|
; renderFan
|
||||||
|
@ -384,7 +384,8 @@ projectileActive:
|
|||||||
.word -1 ; Y offset of active shot
|
.word -1 ; Y offset of active shot
|
||||||
paused:
|
paused:
|
||||||
.word 0
|
.word 0
|
||||||
|
globalWind:
|
||||||
|
.word 0 ; 12.4 velocity
|
||||||
|
|
||||||
; Position of map viewing window. Can be visualized in two ways:
|
; Position of map viewing window. Can be visualized in two ways:
|
||||||
; a) Word-distance from right edge of terrain data (which is in memory right-to-left) to left edge of visible screen
|
; a) Word-distance from right edge of terrain data (which is in memory right-to-left) to left edge of visible screen
|
||||||
|
BIN
gscats.2mg
BIN
gscats.2mg
Binary file not shown.
9
macros.s
9
macros.s
@ -233,6 +233,15 @@ jsri_smc:
|
|||||||
jsr 0
|
jsr 0
|
||||||
.endmacro
|
.endmacro
|
||||||
|
|
||||||
|
.macro ABSA ; Absolute value of accumulator. Assumes status flags set correctly for accumulator!
|
||||||
|
.local done
|
||||||
|
bpl done
|
||||||
|
eor #$ffff
|
||||||
|
inc
|
||||||
|
done:
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;
|
;;;;;;;;;;
|
||||||
; Stack Macros
|
; Stack Macros
|
||||||
|
|
||||||
|
34
projectile.s
34
projectile.s
@ -22,8 +22,10 @@ projectileData:
|
|||||||
.word 0 ; Type
|
.word 0 ; Type
|
||||||
.word 1 ; New?
|
.word 1 ; New?
|
||||||
.word 0 ; Static?
|
.word 0 ; Static?
|
||||||
|
.word 0 ; Owner (player index)
|
||||||
|
.word 0 ; Facing (0,1) = (+X,-X)
|
||||||
|
|
||||||
.repeat 110
|
.repeat 106
|
||||||
.byte 0 ; Padding to 256-byte boundary
|
.byte 0 ; Padding to 256-byte boundary
|
||||||
.endrepeat
|
.endrepeat
|
||||||
|
|
||||||
@ -43,8 +45,10 @@ projectileData:
|
|||||||
.word 0 ; Type
|
.word 0 ; Type
|
||||||
.word 1 ; New?
|
.word 1 ; New?
|
||||||
.word 0 ; Static?
|
.word 0 ; Static?
|
||||||
|
.word 0 ; Owner (player index)
|
||||||
|
.word 0 ; Facing (0,1) = (+X,-X)
|
||||||
|
|
||||||
.repeat 110
|
.repeat 106
|
||||||
.byte 0 ; Padding to 256-byte boundary
|
.byte 0 ; Padding to 256-byte boundary
|
||||||
.endrepeat
|
.endrepeat
|
||||||
|
|
||||||
@ -64,8 +68,10 @@ projectileData:
|
|||||||
.word 0 ; Type
|
.word 0 ; Type
|
||||||
.word 1 ; New?
|
.word 1 ; New?
|
||||||
.word 0 ; Static?
|
.word 0 ; Static?
|
||||||
|
.word 0 ; Owner (player index)
|
||||||
|
.word 0 ; Facing (0,1) = (+X,-X)
|
||||||
|
|
||||||
.repeat 110
|
.repeat 106
|
||||||
.byte 0 ; Padding to 256-byte boundary
|
.byte 0 ; Padding to 256-byte boundary
|
||||||
.endrepeat
|
.endrepeat
|
||||||
|
|
||||||
@ -209,7 +215,19 @@ fireProjectile:
|
|||||||
lda #0
|
lda #0
|
||||||
sta projectileData+JD_STATIC,y
|
sta projectileData+JD_STATIC,y
|
||||||
sty projectileActive
|
sty projectileActive
|
||||||
|
lda currentPlayer
|
||||||
|
sta projectileData+JD_OWNER,y
|
||||||
|
|
||||||
|
; Set facing. For now assume player orientations are constant
|
||||||
|
beq fireProjectilePosX
|
||||||
|
lda #1
|
||||||
|
sta projectileData+JD_FACING,y
|
||||||
|
bra fireProjectileSetup
|
||||||
|
fireProjectilePosX:
|
||||||
|
lda #0
|
||||||
|
sta projectileData+JD_FACING,y
|
||||||
|
|
||||||
|
fireProjectileSetup:
|
||||||
lda projectileParams ; Fixed point version of X pos
|
lda projectileParams ; Fixed point version of X pos
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
@ -328,13 +346,9 @@ updateProjectilePhysics:
|
|||||||
SAVE_AXY
|
SAVE_AXY
|
||||||
|
|
||||||
lda projectileData+GO_POSX,y
|
lda projectileData+GO_POSX,y
|
||||||
bmi updateProjectilePhysicsSkip ; Not allocated
|
bmi updateProjectilePhysicsDone ; Not allocated
|
||||||
lda projectileData+JD_STATIC,y
|
lda projectileData+JD_STATIC,y
|
||||||
bne updateProjectilePhysicsSkip ; Static
|
bne updateProjectilePhysicsSpecial ; Static
|
||||||
bra updateProjectilePhysicsActive
|
|
||||||
|
|
||||||
updateProjectilePhysicsSkip:
|
|
||||||
jmp updateProjectilePhysicsDone
|
|
||||||
|
|
||||||
updateProjectilePhysicsActive:
|
updateProjectilePhysicsActive:
|
||||||
; Integrate gravity over velocity
|
; Integrate gravity over velocity
|
||||||
@ -356,6 +370,7 @@ updateProjectilePhysicsActive:
|
|||||||
ror
|
ror
|
||||||
clc
|
clc
|
||||||
adc projectileData+JD_PRECISEX,y
|
adc projectileData+JD_PRECISEX,y
|
||||||
|
adc globalWind ; Add wind
|
||||||
sta projectileData+JD_PRECISEX,y
|
sta projectileData+JD_PRECISEX,y
|
||||||
|
|
||||||
; Convert to integer for rendering
|
; Convert to integer for rendering
|
||||||
@ -393,6 +408,7 @@ updateProjectilePhysicsContinue:
|
|||||||
cmp #GAMEOBJECTHEIGHT
|
cmp #GAMEOBJECTHEIGHT
|
||||||
bmi updateProjectilePhysicsDelete
|
bmi updateProjectilePhysicsDelete
|
||||||
|
|
||||||
|
updateProjectilePhysicsSpecial:
|
||||||
; Check for special update code
|
; Check for special update code
|
||||||
phy
|
phy
|
||||||
lda projectileData+JD_TYPE,y
|
lda projectileData+JD_TYPE,y
|
||||||
|
Loading…
Reference in New Issue
Block a user