Example #1
0
    public static Beautymon load(string beautymonName)
    {
        StreamReader reader = new StreamReader("Assets\\Scripts\\Data\\Beautymons\\" + beautymonName + ".json");
        string       json   = reader.ReadToEnd();

        reader.Close();

        Beautymon beautymon = JsonUtility.FromJson <Beautymon>(json);

        json = json.Replace("{", "").Replace("}", "").Replace("\"", "").Replace("  ", "");
        string[] jsonArray = json.Split('\n');

        foreach (string line in jsonArray)
        {
            string editedLine = Utility.cleanJson(line);

            if (editedLine.Contains("possibleTalents: "))
            {
                editedLine = editedLine.Replace("possibleTalents: [", "").Replace("]", "").Replace("\"", "");
                string[] editedLineArray = editedLine.Split(',');
                foreach (string talent in editedLineArray)
                {
                    beautymon.possibleTalents.Add(talent.Trim());
                }
            }
            else if (editedLine.Contains("possibleMoves: "))
            {
                editedLine = editedLine.Replace("possibleMoves: [", "").Replace("]", "").Replace("\"", "");
                string[] editedLineArray = editedLine.Split(',');
                foreach (string move in editedLineArray)
                {
                    beautymon.possibleMoves.Add(move.Trim());
                }
            }
            else if (editedLine.Contains("types: "))
            {
                editedLine = editedLine.Replace("types: [", "").Replace("]", "").Replace("\"", "");
                string[] editedLineArray = editedLine.Split(',');
                foreach (string type in editedLineArray)
                {
                    if (type.Trim().Length == 0)
                    {
                        continue;
                    }
                    beautymon.types.Add(Type.load(type.Trim()));
                }
            }
        }

        beautymon.resetConditionsCounter();
        beautymon.resetTemporaryStatsModifiers();
        beautymon.currentHp = beautymon.maxHp;

        return(beautymon);
    }
Example #2
0
    public void displayMoves(Beautymon beautymon)
    {
        Transform transform = Moves.transform;
        int       index     = 0;

        foreach (Transform child in transform)
        {
            if (beautymon.moves.Count > index)
            {
                displayMove(child, beautymon.moves[index]);
            }
            else
            {
                displayEmptyMove(child);
            }
            index++;
        }
    }
Example #3
0
    public void useMove(Beautymon attacker, Beautymon defender, Move move)
    {
        // Change climate
        if (move.invokesClimate != null)
        {
            setClimate(move.invokesClimate, false);                              // TODO item to extend climate duration
        }
        // Not targeting the enemy
        if (!move.targetsEnemy)
        {
            if (move.modifiesStat != null)
            {
                attacker.temporaryStatChange(move.modifiesStat, move.modifiesStatModifier);
            }
            return;
        }

        // Immunity
        if (!defender.canBeAffectedByMove(move))
        {
            return;
        }

        // Deals damages
        if (move.power > 0)
        {
            calculateDamages(attacker, defender, move);
        }

        // Change stats
        if (move.modifiesStat != null)
        {
            defender.temporaryStatChange(move.modifiesStat, move.modifiesStatModifier);
        }

        // Secondary effects
        if (move.inflictsCondition != null)
        {
            defender.changeConditionCounter(move.inflictsCondition, move.inflictsConditionModifier, move.inflictsConditionForce);
        }
    }
Example #4
0
    // Start is called before the first frame update
    void Start()
    {
        Beautymon bebisel = Beautymon.load("Bebisel");

        bebisel.setTalent("Sturdy");
        bebisel.setMoves(new List <string>()
        {
            "Scratch"
        });
        Beautymon potus = Beautymon.load("Potus");

        potus.setTalent(Talent.load("Flash Fire"));
        potus.setMoves(new List <Move>()
        {
            Move.load("Ember"), Move.load("Growl"), Move.load("Scratch"), Move.load("Zenith")
        });

        displayMoves(potus);

        useMove(potus, bebisel, potus.moves[0]);
        useMove(bebisel, potus, bebisel.moves[0]);
    }
Example #5
0
    public void calculateDamages(Beautymon attacker, Beautymon defender, Move move)
    {
        // https://www.pokepedia.fr/Calcul_des_d%C3%A9g%C3%A2ts#Formule_math.C3.A9matique
        string offensiveStatName;
        string defensiveStatName;

        if (move.isPhysical)
        {
            offensiveStatName = Beautymon.ATTACK;
            if (move.attacksOnTheOtherStat)
            {
                defensiveStatName = Beautymon.SPECIALDEFENSE;
            }
            else
            {
                defensiveStatName = Beautymon.DEFENSE;
            }
        }
        else
        {
            offensiveStatName = Beautymon.SPECIALATTACK;
            if (move.attacksOnTheOtherStat)
            {
                defensiveStatName = Beautymon.DEFENSE;
            }
            else
            {
                defensiveStatName = Beautymon.SPECIALDEFENSE;
            }
        }

        // Get stats
        double offensiveStat = attacker.getStatWithTemporaryModifier(offensiveStatName);
        double defensiveStat = defender.getStatWithTemporaryModifier(defensiveStatName);

        // Calculate move power before coeffiencients
        double movePower      = ((30 * move.power * offensiveStat) / (defensiveStat * 50)) + 2;
        double moveTotalPower = movePower;

        Type moveType = move.type;

        // Flash Fire
        if (attacker.flashFireBuff && moveType.name == "Fire")
        {
            moveTotalPower += movePower / 2;
        }

        // STAB
        if (attacker.hasType(moveType))
        {
            moveTotalPower += movePower / 2;
        }

        // Burned
        if ((attacker.condition != null) && (attacker.condition.name == "Burned") && (move.isPhysical))
        {
            moveTotalPower -= moveTotalPower / 2;
        }

        // Climate
        if (climate != null)
        {
            if (climate.name == "Hail")
            {
                if (moveType.name == "Ice")
                {
                    moveTotalPower = moveTotalPower * 1.5;
                }
            }
            else if (climate.name == "Rain")
            {
                if (moveType.name == "Fire")
                {
                    moveTotalPower = moveTotalPower / 2;
                }
                else if (moveType.name == "Water")
                {
                    moveTotalPower = moveTotalPower * 1.5;
                }
            }
            else if (climate.name == "Sandstorm")
            {
                if ((moveType.name == "Air") && (!move.isPhysical))
                {
                    moveType = Type.load("Rock");
                }

                if (moveType.name == "Fire")
                {
                    moveTotalPower = moveTotalPower / 2;
                }
                else if ((moveType.name == "Rock") && (!move.isPhysical))
                {
                    moveTotalPower = moveTotalPower * 1.5;
                }
            }
            if (climate.name == "Sun")
            {
                if ((moveType.name == "Fire") || (moveType.name == "Air"))
                {
                    moveTotalPower = moveTotalPower * 1.5;
                }
                else if (moveType.name == "Water")
                {
                    moveTotalPower = moveTotalPower / 2;
                }
            }
        }

        // Resistances & Weaknesses
        foreach (Type defenderType in defender.types)
        {
            if (defenderType.IsWeakAgainst(moveType))
            {
                moveTotalPower = moveTotalPower * 2;
            }
            else if (defenderType.isResistantAgainst(moveType))
            {
                moveTotalPower = moveTotalPower / 2;
            }
        }

        defender.changeHP(moveTotalPower * -1);
        Debug.Log("DEFENDER HP AFTER ATTACK: " + defender.name + " " + defender.currentHp + "/" + defender.maxHp);
    }