Beispiel #1
0
 public void SetUpFight(Character fighter1, Character fighter2, Fight1v1 fight)
 {
     Fight = fight;
     fighterBox1.fighter = fighter1;
     fighterBox1.UpdatePanelInfo();
     fighterBox2.fighter = fighter2;
     fighterBox2.UpdatePanelInfo();
     fight.fightPanel = this;
 }
Beispiel #2
0
    //Special Move 1
    public static void HealingSpell(Character attacker, Fight1v1 fight)
    {
        float healingBaseValue = 100f;

        //TODO_P: Prooobably going to need to rebalance this a lot.
        float healingValue = healingBaseValue + attacker.Magic;

        MonoBehaviour.print(attacker.FirstName + " used a healing spell!");
        attacker.CurrentHealth = attacker.CurrentHealth + healingValue;
    }
Beispiel #3
0
    public void SpecialMoveChance(Character attacker, Character defender, Fight1v1 fight)
    {
        bool  activateSpecialMove        = false;
        float specialChanceDivisonFactor = 1000f;
        float fighterSpecialChanceValue  = attacker.Magic + attacker.Strategy;
        float fighterSpecialChance       = fighterSpecialChanceValue / specialChanceDivisonFactor;

        activateSpecialMove = StandardFunctions.CheckPercentageChance(fighterSpecialChance);

        if (activateSpecialMove)
        {
            //TODO_P: Add a system for handling selection of special moves
            SpecialMoves.PowerStrike(attacker, defender, fight);
        }
    }
Beispiel #4
0
    //Special Move 0
    public static void PowerStrike(Character attacker, Character defender, Fight1v1 fight)
    {
        float powerStrikeBaseDamage = 60f;
        float armourBypass          = 30f;

        attacker.TurnsSinceLastSpecialMove = 0;
        bool tempPrintStats = false;

        if (fight.PlayerInFight)
        {
            string powerStrikeReport = attacker.FirstName + " used Power Strike!";
            fight.fightPanel.UpdateTextLog(powerStrikeReport);

            tempPrintStats = true;
        }
        fight.CauseDamage(attacker, defender, fight, powerStrikeBaseDamage, armourBypass, true, tempPrintStats);
    }
Beispiel #5
0
    public void CauseDamage(Character attacker, Character defender, Fight1v1 fight, float baseDamage, float armourBypass, bool ignoreEnergyFactor, bool tempPrintStats)
    {
        float damageToDeal;
        float minEnergyFactor = 0.1f;

        float secondWindDamageFactor  = 1.0f;
        float secondWindDefenseFactor = 1.0f;

        float minDamage = 10;
        float attackEnergyFactor;
        int   baseDefense = 1;
        float defenseEnergyFactor;
        int   damagePrecisionFactor = 100;

        //Calculate max possible defense:
        //Todo: Why is this all done as int?
        int maxPossibleDefenseIntValue = baseDefense + defender.Defense - Convert.ToInt32(armourBypass);

        if (maxPossibleDefenseIntValue < baseDefense)
        {
            maxPossibleDefenseIntValue = baseDefense;
        }

        //Reduce by the defenseEnergyFactor:
        defenseEnergyFactor = defender.CurrentEnergy / defender.MaxEnergy;
        //Make sure that there's a lower limit to the defense
        if (defenseEnergyFactor < minEnergyFactor)
        {
            defenseEnergyFactor = minEnergyFactor;
        }
        float maxPossibleDefenseFloatValue = maxPossibleDefenseIntValue * defenseEnergyFactor * damagePrecisionFactor;

        //Convert to int for the random:
        maxPossibleDefenseIntValue = Convert.ToInt32(maxPossibleDefenseFloatValue);

        int minPossibleDefenseInt = maxPossibleDefenseIntValue / 2;
        //Roll for final defense value:
        float actualDefense = GameObject.Find("GameController").GetComponent <GameController>().GameRandom.Next(minPossibleDefenseInt, maxPossibleDefenseIntValue);

        //Increase in case of second wind
        if (defender.SecondWindActive)
        {
            actualDefense = actualDefense * secondWindDefenseFactor;
        }
        //Convert back to a float in a reasonable range:
        actualDefense = actualDefense / damagePrecisionFactor;

        //Calculate maximum possible damage:
        float maxPossibleDamage = baseDamage + attacker.Attack - actualDefense;

        //If actualDefense is greater than the possible damage, cause a minimum amount of damage:
        if (maxPossibleDamage <= 0)
        {
            damageToDeal = minDamage;
        }
        else
        {
            //Convert maxPossibleDamage to int and calculate minPossibleDamage:
            float maxPossibleDamageIntValue = maxPossibleDamage * damagePrecisionFactor;
            int   maxPossibleDamageInt      = Convert.ToInt32(maxPossibleDamageIntValue);

            int minPossibleDamageInt = maxPossibleDamageInt / 2;
            //Roll for random actual damage:
            int damageToDealIntValue = GameObject.Find("GameController").GetComponent <GameController>().GameRandom.Next(minPossibleDamageInt, maxPossibleDamageInt);
            //Convert back to float damage
            damageToDeal = damageToDealIntValue / damagePrecisionFactor;
        }
        //If the damage is lower than the minimum, set it to the minimum.
        if (damageToDeal < minDamage)
        {
            damageToDeal = minDamage;
        }
        //Reduce resulting damage by the energy factor
        attackEnergyFactor = attacker.CurrentEnergy / attacker.MaxEnergy;
        //Cap minimum attack energy factor somewhere:
        if (attackEnergyFactor < minEnergyFactor & !ignoreEnergyFactor)
        {
            attackEnergyFactor = minEnergyFactor;
        }
        else
        {
            attackEnergyFactor = 1;
        }
        damageToDeal = damageToDeal * attackEnergyFactor;

        //Increase in case of Second Wind
        if (attacker.SecondWindActive)
        {
            damageToDeal = damageToDeal * secondWindDamageFactor;
        }

        //TODO: Some weird damage factor number goes here, in case that is a better way to balance the power curve than increasing health
        float randomFactor = 5f;

        damageToDeal = damageToDeal * randomFactor;

        //Modifiers
        if (PlayerWatchingFight)
        {
            if (fightPanel.fighterBox1.fighter == attacker && fightPanel.fighterBox1.extraDamageModifier || fightPanel.fighterBox2.fighter == attacker && fightPanel.fighterBox2.extraDamageModifier)
            {
                damageToDeal = damageToDeal + gameController.GetComponent <FightModifiers> ().DamageIncrease(damageToDeal, 1);
            }
        }
        //Deal the damage to the defender
        defender.CurrentHealth = defender.CurrentHealth - damageToDeal;

        if (PlayerWatchingFight)
        {
            if (tempPrintStats == true)
            {
                fightPanel.UpdateTextLog("Power Strike caused " + damageToDeal + " damage!");
            }
            else
            {
                if (attacker == f1)
                {
                    f1damageToReport = f1damageToReport + damageToDeal;
                }
                else
                {
                    f2damageToReport = f2damageToReport + damageToDeal;
                }
            }
        }
        //Update details on button:
        attacker.UpdateUI();
        defender.UpdateUI();

        //Store the last damage done in the Fight itself
        fight.LastDamageDone = damageToDeal;
    }
Beispiel #6
0
 public void StandardAttack(Character attacker, Character defender, Fight1v1 fight, float baseDamage, float baseEnergyCost)
 {
     CauseDamage(attacker, defender, fight, baseDamage, 0f, false, false);
     //Calculate actual energy cost:
     PayEnergyCost(attacker, baseEnergyCost);
 }
Beispiel #7
0
 public void ActivateFightScreen(Character fighter1, Character fighter2, Fight1v1 fight)
 {
     FightPanel.SetActive(true);
     FightPanel.GetComponent <FightPanel> ().SetUpFight(fighter1, fighter2, fight);
 }