From 21ead6d010d62c1b965960b79c96c53e9f8003e2 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sun, 17 Jan 2021 15:27:03 -0500 Subject: [PATCH] tfv: split off magic code --- games/tfv/Makefile | 1 + games/tfv/tfv_battle.s | 223 ---------------------------------- games/tfv/tfv_battle_magic.s | 224 +++++++++++++++++++++++++++++++++++ games/tfv/tfv_world.s | 1 + 4 files changed, 226 insertions(+), 223 deletions(-) create mode 100644 games/tfv/tfv_battle_magic.s diff --git a/games/tfv/Makefile b/games/tfv/Makefile index e0509f6b..0f8f5999 100644 --- a/games/tfv/Makefile +++ b/games/tfv/Makefile @@ -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 \ diff --git a/games/tfv/tfv_battle.s b/games/tfv/tfv_battle.s index cfbb8448..4ebfb15f 100644 --- a/games/tfv/tfv_battle.s +++ b/games/tfv/tfv_battle.s @@ -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 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 diff --git a/games/tfv/tfv_battle_magic.s b/games/tfv/tfv_battle_magic.s new file mode 100644 index 00000000..a114d93a --- /dev/null +++ b/games/tfv/tfv_battle_magic.s @@ -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 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 + + diff --git a/games/tfv/tfv_world.s b/games/tfv/tfv_world.s index d6035204..ffb6ba63 100644 --- a/games/tfv/tfv_world.s +++ b/games/tfv/tfv_world.s @@ -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"