public virtual int DuoDamageFormula(CharacterStats user, CharacterStats[] partners, CharacterStats target) { int dmg; float weak = 1; if (target.EType1 != ElementalTyping.None && target.EType2 != ElementalTyping.None) { weak = WeaknessChart.GetEffective(elementType, target.EType1, target.EType2); } if (target.EType1 != ElementalTyping.None) { weak = WeaknessChart.GetEffective(elementType, target.EType1); } // get target stat from both units, using the base power and ext ext. int attacker = user.ReturnStatValue(atkStat); int allies = 0; foreach (CharacterStats partner in partners) { allies += partner.ReturnStatValue(atkStat); } int defender = target.ReturnStatValue(defStat); float critBlow = RNG(baseCritBlow + user.ReturnStatValue(TargetStat.skill)) ? CritMultiplier : 1; float tempDmg = Mathf.Max(0, ((attacker + allies + ((basePower + Random.Range(-basePower * randomnessCoefficient, basePower * randomnessCoefficient)) * weak)) * critBlow - (defender)));; dmg = Mathf.CeilToInt(tempDmg); return(dmg); }
// SoloDamageFormula // public virtual int SoloDamageFormula(CharacterStats user, CharacterStats target) { // This is just for testing moveUser = user; movetarget = target; // End float weak = 1; if (target.EType1 != ElementalTyping.None && target.EType2 != ElementalTyping.None) { weak = WeaknessChart.GetEffective(elementType, target.EType1, target.EType2); } if (target.EType1 != ElementalTyping.None) { weak = WeaknessChart.GetEffective(elementType, target.EType1); } // get target stat from both units, using the base power and ext ext. int attacker = user.ReturnStatValue(atkStat); int defender = target.ReturnStatValue(defStat); // Check this later since I dont know how strong Skill should be float critBlow = RNG(baseCritBlow + (user.ReturnStatValue(TargetStat.skill) * 4)) ? CritMultiplier : 1; //float tempDmg = Mathf.Max(0, ((attacker + ((basePower + Random.Range(-basePower * randomnessCoefficient, basePower * randomnessCoefficient)) * weak)) * critBlow - (defender))); //-CritStrike(defender) float tempDmg = Mathf.Max(0, attacker + ((basePower * weak) * critBlow) - defender); //-CritStrike(defender) int dmg = Mathf.CeilToInt(tempDmg); return(dmg); }
public void Attack(CharacterStats currentUnit, CharacterStats target, Move move) { // Can desync with the actual value due to being two seperate calls. //Debug.Log(currentUnit.name + " hit " + target.name + " with " + move.name + " for a supposed " + move.SoloDamageFormula(currentUnit, target)); Debug.Log(currentUnit.name + " attacks! "); if (target.EType2 != ElementalTyping.None) { Debug.Log("Target has weakness of " + WeaknessChart.GetEffective(move.elementType, target.EType1, target.EType2)); } else { Debug.Log("Target has weakness of " + WeaknessChart.GetEffective(move.elementType, target.EType1)); } }