private void update_battler_animation() { switch (Battler_Action) { // Starts attack case Class_Reel_Battler_Actions.Start_Attack: switch (Battler_Timer) { // Wait for attack case 0: if (Battler.duration <= 1) { Battler.hit_freeze(false, class_data.Distance); if (Unit.spell_animation()) { Data_Weapon weapon = Unit.actor.weapon; if (weapon.has_anima_start()) { Battler.anima_start(1); Battler_Timer = 1; } else { Battler.attack_spell(true, false, class_data.Distance); Battler_Timer = 2; } } else { Battler_Timer = 2; } } break; // Wait for anima startup case 1: if (Battler.anima_ready) { Battler.attack_spell(true, false, class_data.Distance); Battler_Timer = 2; } break; // Wait for hit case 2: if (Unit.spell_animation() ? Battler.spell_ready : Battler.duration <= 1) { if (Unit.spell_animation()) { Battler.end_spell(true, false, 1); } Battler_Timer = 0; Battler_Action = Class_Reel_Battler_Actions.End_Attack; } break; } break; // Ends attack case Class_Reel_Battler_Actions.End_Attack: if (Battler_Timer >= class_data.Wait_Time[0] + 30) { if (Battler.spell_ready) { Battler.return_anim(false, class_data.Distance); Battler_Timer = 0; Battler_Action = Class_Reel_Battler_Actions.Wait_For_Return; } } else { Battler_Timer++; } break; // Waits for return case Class_Reel_Battler_Actions.Wait_For_Return: if (Battler.duration <= 4) { Battler_Action = Class_Reel_Battler_Actions.Next_Attack; } break; // Next attack case Class_Reel_Battler_Actions.Next_Attack: if (Battler_Timer >= class_data.Wait_Time[1]) { Battler_Timer = 0; Battler_Action = Class_Reel_Battler_Actions.Idle; } else { Battler_Timer++; } break; } }