mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-11-04 20:06:09 +00:00
244 lines
2.8 KiB
ArmAsm
244 lines
2.8 KiB
ArmAsm
|
|
|
|
;===========================
|
|
; magic attack
|
|
;===========================
|
|
|
|
magic_attack:
|
|
|
|
lda #34
|
|
sta HERO_X
|
|
lda #20
|
|
sta HERO_Y
|
|
|
|
lda #$15
|
|
sta DAMAGE_VAL_LO
|
|
lda #$00
|
|
sta DAMAGE_VAL_HI
|
|
|
|
lda MAGIC_TYPE
|
|
cmp #MENU_MAGIC_HEAL
|
|
beq do_magic_heal
|
|
cmp #MENU_MAGIC_FIRE
|
|
beq do_magic_fire
|
|
cmp #MENU_MAGIC_ICE
|
|
beq do_magic_ice
|
|
cmp #MENU_MAGIC_BOLT
|
|
beq do_magic_bolt
|
|
cmp #MENU_MAGIC_MALAISE
|
|
beq do_magic_malaise
|
|
brk
|
|
|
|
do_magic_heal: ; MENU_MAGIC_HEAL
|
|
lda #33
|
|
sta MAGIC_X
|
|
lda #20
|
|
sta MAGIC_Y
|
|
|
|
jmp done_magic_setup
|
|
|
|
do_magic_fire: ; MENU_MAGIC_FIRE
|
|
lda #2
|
|
sta MAGIC_X
|
|
lda #20
|
|
sta MAGIC_Y
|
|
|
|
jmp done_magic_setup
|
|
|
|
do_magic_ice: ; MENU_MAGIC_ICE
|
|
lda #2
|
|
sta MAGIC_X
|
|
lda #20
|
|
sta MAGIC_Y
|
|
|
|
jmp done_magic_setup
|
|
|
|
do_magic_bolt: ; MENU_MAGIC_BOLT
|
|
lda #2
|
|
sta MAGIC_X
|
|
lda #20
|
|
sta MAGIC_Y
|
|
|
|
jmp done_magic_setup
|
|
|
|
do_magic_malaise: ; MENU_MAGIC_MALAISE
|
|
lda #2
|
|
sta MAGIC_X
|
|
lda #20
|
|
sta MAGIC_Y
|
|
|
|
jmp done_magic_setup
|
|
|
|
done_magic_setup:
|
|
|
|
|
|
|
|
;=========================================
|
|
; cast the magic
|
|
; FIXME: damage based on weakness of enemy
|
|
; FIXME: disallow if not enough MP
|
|
|
|
cast_the_magic:
|
|
|
|
lda #10
|
|
sta ANIMATE_LOOP
|
|
|
|
cast_magic_loop:
|
|
jsr gr_copy_to_current
|
|
|
|
; sprite with hands up
|
|
|
|
lda HERO_X
|
|
sta XPOS
|
|
lda #20
|
|
sta YPOS
|
|
|
|
lda #<tfv_victory_sprite
|
|
sta INL
|
|
lda #>tfv_victory_sprite
|
|
sta INH
|
|
|
|
jsr put_sprite_crop
|
|
|
|
; draw enemy
|
|
lda ENEMY_X
|
|
sta XPOS
|
|
lda #20
|
|
sta YPOS
|
|
jsr draw_enemy
|
|
|
|
|
|
jsr draw_battle_bottom
|
|
|
|
jsr page_flip
|
|
|
|
; delay a bit
|
|
lda #50
|
|
jsr WAIT
|
|
|
|
dec ANIMATE_LOOP
|
|
bne cast_magic_loop
|
|
|
|
|
|
;========================
|
|
; Actually do the magic
|
|
|
|
lda #15
|
|
sta ANIMATE_LOOP
|
|
magic_happens_loop:
|
|
|
|
jsr gr_copy_to_current
|
|
|
|
; draw enemy
|
|
lda ENEMY_X
|
|
sta XPOS
|
|
lda #20
|
|
sta YPOS
|
|
jsr draw_enemy
|
|
|
|
; draw hero (no sword while casting)
|
|
lda #34
|
|
sta HERO_X
|
|
lda #20
|
|
sta HERO_Y
|
|
jsr draw_hero
|
|
|
|
lda ANIMATE_LOOP
|
|
and #$1
|
|
clc
|
|
adc MAGIC_X
|
|
sta XPOS
|
|
|
|
lda MAGIC_Y
|
|
sta YPOS
|
|
|
|
lda MAGIC_TYPE
|
|
asl
|
|
tay
|
|
lda magic_sprites,Y
|
|
sta INL
|
|
lda magic_sprites+1,Y
|
|
sta INH
|
|
|
|
jsr put_sprite_crop
|
|
|
|
jsr draw_battle_bottom
|
|
|
|
jsr page_flip
|
|
|
|
; delay a bit
|
|
lda #200
|
|
jsr WAIT
|
|
|
|
dec ANIMATE_LOOP
|
|
bne magic_happens_loop
|
|
|
|
|
|
;=============================
|
|
; decrease magic points
|
|
|
|
lda #5
|
|
sta MAGIC_COST
|
|
jsr hero_use_magic
|
|
|
|
;=============================
|
|
; copy to current
|
|
|
|
jsr gr_copy_to_current
|
|
|
|
|
|
;==============================
|
|
; draw hero
|
|
|
|
lda #34
|
|
sta HERO_X
|
|
lda #20
|
|
sta HERO_Y
|
|
jsr draw_hero
|
|
; jsr draw_hero_and_sword
|
|
|
|
; draw enemy
|
|
lda ENEMY_X
|
|
sta XPOS
|
|
lda #20
|
|
sta YPOS
|
|
jsr draw_enemy
|
|
|
|
lda MAGIC_TYPE
|
|
cmp #MENU_MAGIC_HEAL
|
|
beq was_heal_magic
|
|
|
|
jsr damage_enemy
|
|
lda #2
|
|
sta XPOS
|
|
lda #10
|
|
sta YPOS
|
|
jsr gr_put_num
|
|
jmp done_magic_damage
|
|
|
|
was_heal_magic:
|
|
jsr heal_hero
|
|
|
|
lda #30
|
|
sta XPOS
|
|
lda #10
|
|
sta YPOS
|
|
lda #$ee ; print teal
|
|
jsr gr_put_num_color
|
|
|
|
|
|
|
|
done_magic_damage:
|
|
|
|
jsr draw_battle_bottom
|
|
|
|
jsr page_flip
|
|
|
|
; wait 1.5s
|
|
ldx #150
|
|
jsr long_wait
|
|
|
|
rts
|
|
|
|
|