Implement basic AI check for whether a move would fail

This commit is contained in:
2025-07-11 17:13:11 +02:00
parent a3a4993407
commit 364d4b9080
3 changed files with 56 additions and 8 deletions

View File

@@ -35,6 +35,9 @@ public abstract class ChangeUserStats : Script, IScriptOnInitialize, IScriptOnSe
move.User.ChangeStatBoost(_stat, _amount, true, false);
}
protected static bool WouldMoveFail(MoveOption option, Statistic stat) =>
option.Move.User.StatBoost.GetStatistic(stat) == StatBoostStatisticSet.MaxStatBoost;
protected static void GetMoveEffectScore(MoveOption option, Statistic stat, ref int score)
{
if (option.Move.Move.SecondaryEffect == null ||
@@ -56,6 +59,9 @@ public class ChangeUserAttack : ChangeUserStats
{
}
[AIMoveFailureFunction]
public static bool AIMoveWillFail(MoveOption option) => WouldMoveFail(option, Statistic.Attack);
[AIMoveScoreFunction]
public static void AIMoveEffectScore(MoveOption option, ref int score) =>
GetMoveEffectScore(option, Statistic.Attack, ref score);
@@ -68,6 +74,9 @@ public class ChangeUserDefense : ChangeUserStats
{
}
[AIMoveFailureFunction]
public static bool AIMoveWillFail(MoveOption option) => WouldMoveFail(option, Statistic.Defense);
[AIMoveScoreFunction]
public static void AIMoveEffectScore(MoveOption option, ref int score) =>
GetMoveEffectScore(option, Statistic.Defense, ref score);
@@ -80,6 +89,9 @@ public class ChangeUserSpecialAttack : ChangeUserStats
{
}
[AIMoveFailureFunction]
public static bool AIMoveWillFail(MoveOption option) => WouldMoveFail(option, Statistic.SpecialAttack);
[AIMoveScoreFunction]
public static void AIMoveEffectScore(MoveOption option, ref int score) =>
GetMoveEffectScore(option, Statistic.SpecialAttack, ref score);
@@ -92,6 +104,9 @@ public class ChangeUserSpecialDefense : ChangeUserStats
{
}
[AIMoveFailureFunction]
public static bool AIMoveWillFail(MoveOption option) => WouldMoveFail(option, Statistic.SpecialDefense);
[AIMoveScoreFunction]
public static void AIMoveEffectScore(MoveOption option, ref int score) =>
GetMoveEffectScore(option, Statistic.SpecialDefense, ref score);
@@ -104,6 +119,9 @@ public class ChangeUserSpeed : ChangeUserStats
{
}
[AIMoveFailureFunction]
public static bool AIMoveWillFail(MoveOption option) => WouldMoveFail(option, Statistic.Speed);
[AIMoveScoreFunction]
public static void AIMoveEffectScore(MoveOption option, ref int score) =>
GetMoveEffectScore(option, Statistic.Speed, ref score);
@@ -116,6 +134,9 @@ public class ChangeUserAccuracy : ChangeUserStats
{
}
[AIMoveFailureFunction]
public static bool AIMoveWillFail(MoveOption option) => WouldMoveFail(option, Statistic.Accuracy);
[AIMoveScoreFunction]
public static void AIMoveEffectScore(MoveOption option, ref int score) =>
GetMoveEffectScore(option, Statistic.Accuracy, ref score);
@@ -128,6 +149,9 @@ public class ChangeUserEvasion : ChangeUserStats
{
}
[AIMoveFailureFunction]
public static bool AIMoveWillFail(MoveOption option) => WouldMoveFail(option, Statistic.Evasion);
[AIMoveScoreFunction]
public static void AIMoveEffectScore(MoveOption option, ref int score) =>
GetMoveEffectScore(option, Statistic.Evasion, ref score);