tfv: split off magic code

This commit is contained in:
Vince Weaver 2021-01-17 15:27:03 -05:00
parent 614778e999
commit 21ead6d010
4 changed files with 226 additions and 223 deletions

View File

@ -77,6 +77,7 @@ TFV_WORLD: tfv_world.o
tfv_world.o: tfv_world.s zp.inc \
tfv_overworld.s tfv_drawmap.s \
tfv_battle.s tfv_battle_menu.s tfv_battle_limit.s tfv_battle_summons.s \
tfv_battle_magic.s \
tfv_battle_boss.s \
help_overworld.s rotate_intro.s \
sound_effects.s speaker_tone.s \

View File

@ -875,229 +875,6 @@ victory_draw_done:
rts
;===========================
; magic attack
;===========================
magic_attack:
lda #34
sta HERO_X
lda #$15
sta DAMAGE_VAL
lda MENU_POSITION
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
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 MENU_POSITION
sta MAGIC_TYPE
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 #20
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
lda #34
sta HERO_X
lda #20
sta HERO_Y
jsr draw_hero_and_sword
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 #50
jsr WAIT
dec ANIMATE_LOOP
bne magic_happens_loop
;=============================
; decrease magic points
; mp-=5;
jsr gr_copy_to_current
; draw hero
lda #34
sta HERO_X
lda #20
sta HERO_Y
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_self
done_magic_damage:
jsr draw_battle_bottom
jsr page_flip
; wait 2s
ldx #200
jsr long_wait
rts
;=============================
; done attack

View File

@ -0,0 +1,224 @@
;===========================
; magic attack
;===========================
magic_attack:
lda #34
sta HERO_X
lda #$15
sta DAMAGE_VAL
lda MENU_POSITION
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
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 MENU_POSITION
sta MAGIC_TYPE
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 #20
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
lda #34
sta HERO_X
lda #20
sta HERO_Y
jsr draw_hero_and_sword
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 #50
jsr WAIT
dec ANIMATE_LOOP
bne magic_happens_loop
;=============================
; decrease magic points
; mp-=5;
jsr gr_copy_to_current
; draw hero
lda #34
sta HERO_X
lda #20
sta HERO_Y
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_self
done_magic_damage:
jsr draw_battle_bottom
jsr page_flip
; wait 2s
ldx #200
jsr long_wait
rts

View File

@ -59,6 +59,7 @@
.include "tfv_battle.s"
.include "tfv_battle_menu.s"
.include "tfv_battle_magic.s"
.include "tfv_battle_limit.s"
.include "tfv_battle_summons.s"
.include "tfv_battle_boss.s"