public void SetUpFight(Character fighter1, Character fighter2, Fight1v1 fight) { Fight = fight; fighterBox1.fighter = fighter1; fighterBox1.UpdatePanelInfo(); fighterBox2.fighter = fighter2; fighterBox2.UpdatePanelInfo(); fight.fightPanel = this; }
//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; }
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); } }
//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); }
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; }
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); }
public void ActivateFightScreen(Character fighter1, Character fighter2, Fight1v1 fight) { FightPanel.SetActive(true); FightPanel.GetComponent <FightPanel> ().SetUpFight(fighter1, fighter2, fight); }