private void HealFriend()
 {
     //casts can't revive party members, certain items can, however
     if (CharacterParty[FriendlyTarget].CurrentHealth == 0)
     {
         //attempting to cast on a dead party member does nothing.
         //this space here is in preparation for the ITEM menu
     }
     else
     {
         if (OptionID == 2) //cast
         {
             if (CharacterParty[ActiveCharacter].Commands[CastID].CastType == CastType.Heal)
             {
                 CastCooldown(ref CharacterParty[ActiveCharacter].Commands[CastID]);
                 HealTarget(ref CharacterParty[FriendlyTarget].CurrentHealth, CharacterMaxHealth(FriendlyTarget), CharacterParty[ActiveCharacter].Commands[CastID].CastValue);
                 StatusHandler.Add(ref CharacterParty[FriendlyTarget].StatusList, CharacterParty[ActiveCharacter].Commands[CastID].Status);
                 CharacterParty[FriendlyTarget].ValueUpdate();
                 CharacterParty[ActiveCharacter].HealthLimit();
                 ModeBarUpdate();
                 AdvanceTurn();
             }
             else if (CharacterParty[ActiveCharacter].Commands[CastID].CastType == CastType.Fortify)
             {
                 CastCooldown(ref CharacterParty[ActiveCharacter].Commands[CastID]);
                 FortifyTarget(ref CharacterParty[FriendlyTarget].DefenceBuffList, new Defence(CharacterParty[ActiveCharacter].Commands[CastID].CastValue, CharacterParty[ActiveCharacter].Commands[CastID].Status.StatusDuration));
                 StatusHandler.Add(ref CharacterParty[FriendlyTarget].StatusList, CharacterParty[ActiveCharacter].Commands[CastID].Status);
                 CharacterParty[FriendlyTarget].ValueUpdate();
                 AdvanceTurn();
             }
         }
     }
 }
 private void Defend()
 {
     FortifyTarget(ref CharacterParty[ActiveCharacter].DefenceBuffList,
                   Defence.OneTurn(CharacterParty[ActiveCharacter].CurrentDefence));
     StatusHandler.Add(ref CharacterParty[ActiveCharacter].StatusList, new Status(StatusType.DefenceUp, 1));
     AdvanceTurn();
 }
    private void AttackEnemy()
    {
        int TotalDamage = 0;

        if (OptionID == 2) //cast
        {
            //casts bypass defence, but the values can't be influenced by attack.up or attack.down statuses
            CastCooldown(ref CharacterParty[ActiveCharacter].Commands[CastID]);
            StatusHandler.Add(ref EnemyParty[ActiveEnemy].StatusList, CharacterParty[ActiveCharacter].Commands[CastID].Status);
            TotalDamage = CalculateDamage(EnemyParty[ActiveEnemy].CurrentDefence, CharacterParty[ActiveCharacter].Commands[CastID].CastValue, 0);
        }
        else //ordinary attack
        {
            TotalDamage = CalculateDamage(EnemyParty[ActiveEnemy].CurrentDefence, CharacterParty[ActiveCharacter].CurrentAttack, CharacterParty[ActiveCharacter].CurrentLuck);
        }
        AttackTarget(ref EnemyParty[ActiveEnemy].CurrentHealth, TotalDamage);
        AddModeUp(ref CharacterParty[ActiveCharacter].CurrentModeUp, ref CharacterParty[ActiveCharacter].StatusList, TotalDamage);
        CharacterParty[ActiveCharacter].ModeUpCheck();
        ModeBarUpdate();
        AdvanceTurn();
    }