Getting started with implementing an explicit AI, based on the Essentials one.
All checks were successful
Build / Build (push) Successful in 1m2s
All checks were successful
Build / Build (push) Successful in 1m2s
This commit is contained in:
@@ -40,7 +40,7 @@ public class Gen7BattleStatCalculator : IBattleStatCalculator
|
||||
public uint CalculateBoostedStat(IPokemon pokemon, Statistic stat)
|
||||
{
|
||||
var flatStat = CalculateFlatStat(pokemon, stat);
|
||||
var boostModifier = GetStatBoostModifier(pokemon, stat);
|
||||
var boostModifier = GetStatBoostModifier(pokemon.StatBoost.GetStatistic(stat));
|
||||
var boostedStat = flatStat * boostModifier;
|
||||
if (boostedStat > uint.MaxValue)
|
||||
boostedStat = uint.MaxValue;
|
||||
@@ -71,13 +71,7 @@ public class Gen7BattleStatCalculator : IBattleStatCalculator
|
||||
if (ignoreEvasion)
|
||||
targetEvasion = 0;
|
||||
var userAccuracy = executingMove.User.StatBoost.Accuracy;
|
||||
var difference = targetEvasion - userAccuracy;
|
||||
var statModifier = difference switch
|
||||
{
|
||||
> 0 => 3.0f / (3.0f + Math.Min(difference, 6)),
|
||||
< 0 => 3.0f + -Math.Max(difference, -6) / 3.0f,
|
||||
_ => 1.0f,
|
||||
};
|
||||
var statModifier = GetAccuracyEvasionStatModifier(targetEvasion, userAccuracy);
|
||||
modifiedAccuracy = (int)(modifiedAccuracy * statModifier);
|
||||
modifiedAccuracy = modifiedAccuracy switch
|
||||
{
|
||||
@@ -116,10 +110,9 @@ public class Gen7BattleStatCalculator : IBattleStatCalculator
|
||||
return (uint)modified;
|
||||
}
|
||||
|
||||
private static float GetStatBoostModifier(IPokemon pokemon, Statistic statistic)
|
||||
public static float GetStatBoostModifier(sbyte amount)
|
||||
{
|
||||
var boost = pokemon.StatBoost.GetStatistic(statistic);
|
||||
return boost switch
|
||||
return amount switch
|
||||
{
|
||||
-6 => 2.0f / 8.0f,
|
||||
-5 => 2.0f / 7.0f,
|
||||
@@ -134,7 +127,18 @@ public class Gen7BattleStatCalculator : IBattleStatCalculator
|
||||
4 => 6.0f / 2.0f,
|
||||
5 => 7.0f / 2.0f,
|
||||
6 => 8.0f / 2.0f,
|
||||
_ => throw new ArgumentException($"Stat boost was out of expected range of -6 to 6: {boost}"),
|
||||
_ => throw new ArgumentException($"Stat boost was out of expected range of -6 to 6: {amount}"),
|
||||
};
|
||||
}
|
||||
|
||||
public static float GetAccuracyEvasionStatModifier(sbyte evasion, sbyte accuracy)
|
||||
{
|
||||
var difference = evasion - accuracy;
|
||||
return difference switch
|
||||
{
|
||||
> 0 => 3.0f / (3.0f + Math.Min(difference, 6)),
|
||||
< 0 => 3.0f + -Math.Max(difference, -6) / 3.0f,
|
||||
_ => 1.0f,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user