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;
            }
        }