Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    // 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);
    }
Exemplo n.º 3
0
 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));
     }
 }