Added BUGFIX for "dual non-immunity" glitch. In certain AI script commands, the call to TypeCalc does not assign effectiveness flags properly, resulting in the check for immunity always failing

This commit is contained in:
kaboissonneault
2023-11-02 09:48:13 -04:00
parent 2304283c3e
commit 3122d744f5

View File

@@ -1484,7 +1484,13 @@ static void Cmd_get_highest_type_effectiveness(void)
if (gCurrentMove != MOVE_NONE)
{
// TypeCalc does not assign to gMoveResultFlags, Cmd_TypeCalc does
// This makes the check for gMoveResultFlags below always fail
#ifdef BUGFIX
gMoveResultFlags = TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
#else
TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
#endif
if (gBattleMoveDamage == 120) // Super effective STAB.
gBattleMoveDamage = AI_EFFECTIVENESS_x2;
@@ -1519,7 +1525,16 @@ static void Cmd_if_type_effectiveness(void)
gBattleMoveDamage = AI_EFFECTIVENESS_x1;
gCurrentMove = AI_THINKING_STRUCT->moveConsidered;
// TypeCalc does not assign to gMoveResultFlags, Cmd_TypeCalc does
// This makes the check for gMoveResultFlags below always fail
// This is how you get the "dual non-immunity" glitch, where AI
// will use ineffective moves on immune pokémon if the second type
// has a non-neutral, non-immune effectiveness
#ifdef BUGFIX
gMoveResultFlags = TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
#else
TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
#endif
if (gBattleMoveDamage == 120) // Super effective STAB.
gBattleMoveDamage = AI_EFFECTIVENESS_x2;