mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-25 20:30:31 +00:00
288 lines
3.7 KiB
ArmAsm
288 lines
3.7 KiB
ArmAsm
;
|
|
; Gun behavior
|
|
;
|
|
; When 'L' pressed gun is charging
|
|
; we handle that here
|
|
|
|
|
|
;===================================
|
|
; handle/draw all gun related stuff
|
|
;===================================
|
|
handle_gun:
|
|
|
|
;===================
|
|
; check_gun_firing
|
|
;===================
|
|
jsr check_gun_firing
|
|
|
|
;=======================
|
|
; draw gun charge effect
|
|
;=======================
|
|
|
|
jsr draw_gun_charging
|
|
|
|
;================
|
|
; move laser
|
|
;================
|
|
|
|
jsr move_laser
|
|
|
|
;================
|
|
; draw laser
|
|
;================
|
|
|
|
jsr draw_laser
|
|
|
|
;================
|
|
; move blast
|
|
;================
|
|
|
|
jsr move_blast
|
|
|
|
;================
|
|
; draw blast
|
|
;================
|
|
|
|
jsr draw_blast
|
|
|
|
;================
|
|
; draw shields
|
|
;================
|
|
|
|
jmp draw_shields
|
|
|
|
; rts
|
|
|
|
|
|
;====================
|
|
;====================
|
|
; check gun firing
|
|
;====================
|
|
;====================
|
|
|
|
check_gun_firing:
|
|
|
|
lda HAVE_GUN ; no gun, do nothing
|
|
beq no_have_gun
|
|
|
|
;================
|
|
; fire laser
|
|
;================
|
|
|
|
lda LASER_OUT
|
|
beq no_fire_laser
|
|
jsr fire_laser
|
|
no_fire_laser:
|
|
lda #0
|
|
sta LASER_OUT
|
|
|
|
|
|
lda GUN_STATE ; gun not charging, do nothing
|
|
beq done_gun
|
|
|
|
lda GUN_FIRE ; if fired, fire it
|
|
bne fire_gun
|
|
|
|
; increment gun state
|
|
|
|
lda FRAMEL ; slow down
|
|
and #$7
|
|
bne done_inc_gun_state
|
|
|
|
inc GUN_STATE
|
|
|
|
; saturate
|
|
|
|
lda GUN_STATE
|
|
cmp #24
|
|
bne done_inc_gun_state
|
|
|
|
lda #21 ; wrap at end
|
|
sta GUN_STATE
|
|
|
|
done_inc_gun_state:
|
|
|
|
|
|
jmp done_gun
|
|
|
|
fire_gun:
|
|
; fire here
|
|
|
|
lda GUN_STATE
|
|
cmp #5
|
|
bcc done_gun ; too short, do nothing
|
|
|
|
cmp #21
|
|
bcs do_blast ; too long, blast
|
|
|
|
; shield
|
|
|
|
jsr activate_shield
|
|
jmp done_firing
|
|
do_blast:
|
|
jsr fire_blast
|
|
|
|
done_firing:
|
|
lda #0
|
|
sta GUN_STATE
|
|
done_gun:
|
|
no_have_gun:
|
|
lda #0
|
|
sta GUN_FIRE
|
|
|
|
rts
|
|
|
|
|
|
;============================
|
|
; draw gun charging effect
|
|
;============================
|
|
draw_gun_charging:
|
|
|
|
lda HAVE_GUN ; no gun, do nothing
|
|
beq done_draw_gun_charging
|
|
|
|
lda GUN_STATE ; gun not charging, do nothing
|
|
beq done_draw_gun_charging
|
|
|
|
|
|
; set direction
|
|
|
|
lda DIRECTION
|
|
bne zap_right
|
|
|
|
zap_left:
|
|
|
|
ldx PHYSICIST_X
|
|
dex
|
|
dex
|
|
stx XPOS
|
|
|
|
jmp done_zap
|
|
|
|
zap_right:
|
|
|
|
lda PHYSICIST_X
|
|
clc
|
|
adc #5
|
|
sta XPOS
|
|
done_zap:
|
|
|
|
lda PHYSICIST_Y
|
|
clc
|
|
adc #4
|
|
|
|
ldy PHYSICIST_STATE
|
|
cpy #P_CROUCH_SHOOTING
|
|
bne done_zap_ypos
|
|
clc
|
|
adc #4
|
|
|
|
done_zap_ypos:
|
|
sta YPOS
|
|
|
|
ldy GUN_STATE
|
|
lda gun_charge_progression,Y
|
|
tay
|
|
|
|
lda gun_charge_table_lo,Y
|
|
sta INL
|
|
|
|
lda gun_charge_table_hi,Y
|
|
sta INH
|
|
|
|
jsr put_sprite
|
|
|
|
done_draw_gun_charging:
|
|
rts
|
|
|
|
; progression
|
|
|
|
gun_charge_progression:
|
|
.byte 0,0,0,1,2,3
|
|
.byte 4,5,6,4,5,6,4,5,6,4,5,6,4,5,6 ; 20
|
|
.byte 7,8,9
|
|
|
|
gun_charge_table_lo:
|
|
.byte <gun_charge_sprite0
|
|
.byte <gun_charge_sprite1
|
|
.byte <gun_charge_sprite2
|
|
.byte <gun_charge_sprite3
|
|
.byte <gun_charge_sprite4
|
|
.byte <gun_charge_sprite5
|
|
.byte <gun_charge_sprite6
|
|
.byte <gun_charge_sprite7
|
|
.byte <gun_charge_sprite8
|
|
.byte <gun_charge_sprite9
|
|
|
|
gun_charge_table_hi:
|
|
.byte >gun_charge_sprite0
|
|
.byte >gun_charge_sprite1
|
|
.byte >gun_charge_sprite2
|
|
.byte >gun_charge_sprite3
|
|
.byte >gun_charge_sprite4
|
|
.byte >gun_charge_sprite5
|
|
.byte >gun_charge_sprite6
|
|
.byte >gun_charge_sprite7
|
|
.byte >gun_charge_sprite8
|
|
.byte >gun_charge_sprite9
|
|
|
|
|
|
|
|
; startup
|
|
|
|
gun_charge_sprite0:
|
|
.byte 2,2
|
|
.byte $AA,$AA
|
|
.byte $AA,$AA
|
|
|
|
gun_charge_sprite1:
|
|
.byte 2,2
|
|
.byte $fA,$AA
|
|
.byte $AA,$AA
|
|
|
|
gun_charge_sprite2:
|
|
.byte 2,2
|
|
.byte $22,$AA
|
|
.byte $AA,$AA
|
|
|
|
gun_charge_sprite3:
|
|
.byte 2,2
|
|
.byte $ef,$eA
|
|
.byte $fe,$Ae
|
|
|
|
; medium
|
|
|
|
gun_charge_sprite4:
|
|
.byte 2,2
|
|
.byte $ff,$AA
|
|
.byte $Ae,$AA
|
|
|
|
gun_charge_sprite5:
|
|
.byte 2,2
|
|
.byte $ef,$AA
|
|
.byte $Ae,$AA
|
|
|
|
gun_charge_sprite6:
|
|
.byte 2,2
|
|
.byte $ef,$AA
|
|
.byte $Af,$AA
|
|
|
|
; large
|
|
|
|
gun_charge_sprite7:
|
|
.byte 2,2
|
|
.byte $fe,$fe
|
|
.byte $Ae,$Ae
|
|
|
|
gun_charge_sprite8:
|
|
.byte 2,2
|
|
.byte $fe,$fe
|
|
.byte $ef,$ef
|
|
|
|
gun_charge_sprite9:
|
|
.byte 2,2
|
|
.byte $ff,$ff
|
|
.byte $Ae,$Ae
|
|
|
|
|