GSCats/player.s

349 lines
5.7 KiB
ArmAsm
Raw Normal View History

2017-08-15 19:40:14 +00:00
;
; players
; Code and data structures related to the players
;
; Created by Quinn Dunki on 8/13/17
;
playerData:
; gameobject data
.word 0 ; X pos in pixels (from left 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
.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
2017-08-15 19:40:14 +00:00
2017-10-22 20:37:06 +00:00
.word 25 ; Angle in degrees from +X
.word 2 ; Power
.word 100 ; Anger
2017-09-03 00:31:12 +00:00
.byte 8,"SPROCKET " ; Name
2018-06-08 17:49:29 +00:00
.word 1 ; Base Sprite
2018-06-10 23:43:51 +00:00
.word 0,5,0,0,0,0,0,0 ; Inventory
2018-06-11 00:05:20 +00:00
.word 0 ; Current weapon
2018-06-11 00:05:20 +00:00
.repeat 88
.byte 0 ; Padding to 256-byte boundary
.endrepeat
2017-09-03 00:31:12 +00:00
; gameobject data
.word 0 ; X pos in pixels (from left 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
.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
2017-09-03 00:31:12 +00:00
2017-10-22 20:37:06 +00:00
.word 155 ; Angle in degrees from +X
.word 2 ; Power
2017-09-04 00:20:24 +00:00
.word 100 ; Anger
2017-09-03 00:31:12 +00:00
.byte 8,"TINKER " ; Name
2018-06-08 17:49:29 +00:00
.word 0 ; Base Sprite
2018-06-10 23:43:51 +00:00
.word 0,5,0,0,0,0,0,0 ; Inventory
2018-06-11 00:05:20 +00:00
.word 0 ; Current weapon
2017-08-15 19:40:14 +00:00
2018-06-11 00:05:20 +00:00
.repeat 88
.byte 0 ; Padding to 256-byte boundary
.endrepeat
PD_ANGLE = 132
PD_POWER = 134
PD_ANGER = 136
PD_NAME = 138
2018-06-08 17:49:29 +00:00
PD_BASESPRITE = 148
2018-06-10 02:29:00 +00:00
PD_INVENTORY = 150
2018-06-11 00:05:20 +00:00
PD_CURRWEAPON = 166
PD_SIZE = 256
.macro PLAYERPTR_Y
tya ; Pointer to player structure from index
asl
asl
asl
2017-09-03 00:31:12 +00:00
asl
asl
asl
asl
asl
tay
.endmacro
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; playerCreate
;
; A = Player X pos
2017-09-03 00:31:12 +00:00
; Y = Index
; Trashes SCRATCHL
;
playerCreate:
2017-09-03 00:31:12 +00:00
pha
PLAYERPTR_Y
sty SCRATCHL
pla
sta playerData+GO_POSX,y
lda #playerData
2017-09-03 00:31:12 +00:00
clc
adc SCRATCHL
sta PARAML0
jsr placeGameObjectOnTerrain
rts
2017-09-03 00:31:12 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 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
2017-08-15 19:40:14 +00:00
2017-09-05 19:55:27 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; playerDeltaPower
;
; Y = Player index
; X = Delta
;
playerDeltaPower:
SAVE_AXY
PLAYERPTR_Y
txa
clc
adc playerData+PD_POWER,y
beq playerDeltaPowerClampLow
cmp #15
bpl playerDeltaPowerClampHigh
playerDeltaPowerStore:
sta playerData+PD_POWER,y
RESTORE_AXY
rts
playerDeltaPowerClampLow:
lda #1
bra playerDeltaPowerStore
playerDeltaPowerClampHigh:
lda #15
bra playerDeltaPowerStore
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; playerFire
;
; Y = Player index
;
playerFire:
2018-06-11 23:22:34 +00:00
SAVE_AX
PLAYERPTR_Y
2018-06-11 23:22:34 +00:00
; Check for inventory
lda playerData+PD_CURRWEAPON,y
pha
asl
tax
beq playerFire_infiniteAmmo
lda playerData+PD_INVENTORY,x
beq playerFire_abort
dec ; Consume ammo
sta playerData+PD_INVENTORY,x
dec inventoryDirty
playerFire_infiniteAmmo:
; Prepare projectile parameters
pla
sta projectileParams+8
lda playerData+GO_POSX,y
sta projectileParams
lda playerData+GO_POSY,y
clc
adc #GAMEOBJECTHEIGHT
sta projectileParams+2
lda playerData+PD_ANGLE,y
sta projectileParams+4
lda playerData+PD_POWER,y
sta projectileParams+6
jsr fireProjectile
2018-06-11 23:22:34 +00:00
playerFire_done:
RESTORE_AX
2017-09-03 03:52:19 +00:00
rts
2018-06-11 23:22:34 +00:00
playerFire_abort:
pla ; Balance stack
bra playerFire_done
2017-09-03 03:52:19 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; playerIntersectRect
;
; Y = Player index
; rectParams = Rectangle to intersect with us
; A => non zero if rectangle is intersecting player
;
playerIntersectRect:
phy
2017-09-03 03:52:19 +00:00
PLAYERPTR_Y
lda playerData+GO_POSX,y
sta rectParams2+0
lda playerData+GO_POSY,y
sta rectParams2+2
lda #GAMEOBJECTWIDTH
sta rectParams2+4
lda #GAMEOBJECTHEIGHT
sta rectParams2+6
jsr intersectRectRect
ply
rts
2017-08-16 02:04:22 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; renderPlayers
;
;
renderPlayers:
SAVE_AXY
lda #playerData
sta PARAML0
2018-06-08 17:49:29 +00:00
lda playerData+PD_BASESPRITE
jsr renderGameObject
lda #playerData+PD_SIZE
sta PARAML0
2018-06-08 17:49:29 +00:00
lda playerData+PD_SIZE+PD_BASESPRITE
jsr renderGameObject
RESTORE_AXY
2017-08-16 02:04:22 +00:00
rts
2017-10-19 19:59:24 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; protectPlayers
;
;
protectPlayers:
SAVE_AXY
lda #playerData
sta PARAML0
jsr vramPtr
cpx #0
bmi protectPlayerNext
2017-10-19 19:59:24 +00:00
lda #playerData+GO_BACKGROUND
jsr protectGameObject
protectPlayerNext:
lda #playerData+PD_SIZE
sta PARAML0
jsr vramPtr
cpx #0
bmi protectPlayerDone
2017-10-19 19:59:24 +00:00
lda #playerData+GO_BACKGROUND+PD_SIZE
jsr protectGameObject
protectPlayerDone:
2017-10-19 19:59:24 +00:00
RESTORE_AXY
rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; unrenderPlayers
;
;
unrenderPlayers:
SAVE_AXY
lda #playerData
sta PARAML0
jsr unrenderGameObject
lda #playerData+PD_SIZE
sta PARAML0
jsr unrenderGameObject
RESTORE_AXY
rts
2017-08-15 19:40:14 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; renderPlayerHeader
;
; Y = Player index to render
;
renderPlayerHeader:
SAVE_AXY
PLAYERPTR_Y
2017-08-15 19:40:14 +00:00
ldx #0 + 321
2017-09-03 00:31:12 +00:00
tya
clc
adc #playerData
adc #PD_NAME
jsr DrawString
ldx #48 + 321
2017-08-15 19:40:14 +00:00
lda #angleStr
jsr DrawString
lda playerData+PD_ANGLE,y
ldx #56 + 321
2017-08-15 19:40:14 +00:00
jsr drawNumber
ldx #68 + 321
lda #powerStr
jsr DrawString
lda playerData+PD_POWER,y
ldx #76 + 321
2017-09-04 00:20:24 +00:00
jsr drawNumber
ldx #88 + 321
2017-09-04 00:20:24 +00:00
lda #angerStr
jsr DrawString
lda playerData+PD_ANGER,y
ldx #96 + 321
jsr drawNumber
2017-08-15 19:40:14 +00:00
RESTORE_AXY
rts
angleStr:
2017-09-04 00:20:24 +00:00
pstring "*: "
powerStr:
2017-09-04 00:20:24 +00:00
pstring "+: "
angerStr:
pstring "): "