Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds Generational config for Magic Guard (Fix for Gen4+) #5893

Merged
merged 3 commits into from
Dec 30, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/config/battle.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@
// In Gen3, Effect Spore has a 10% chance to sleep, poison or paralyze, with an equal chance.
// In Gen4, it's 30%. In Gen5+ it has 11% to sleep, 9% chance to poison and 10% chance to paralyze.
#define B_PICKUP_WILD GEN_LATEST // In Gen9+, Pickup allows its user to pickup its own used item at the end of the turn in wild battles.
#define B_MAGIC_GUARD GEN_LATEST // In Gen4+, Magic Guard ignores immobilization caused by paralysis

// Item settings
#define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore HP activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn.
Expand Down
5 changes: 4 additions & 1 deletion src/battle_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -3484,7 +3484,10 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType)
gBattleStruct->atkCancellerTracker++;
break;
case CANCELLER_PARALYSED: // paralysis
if (!gBattleStruct->isAtkCancelerForCalledMove && (gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && !RandomPercentage(RNG_PARALYSIS, 75))
if (!gBattleStruct->isAtkCancelerForCalledMove
&& gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS
&& (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD && B_MAGIC_GUARD >= GEN_4)
&& RandomPercentage(RNG_PARALYSIS, 25))
AlexOn1ine marked this conversation as resolved.
Show resolved Hide resolved
{
gProtectStructs[gBattlerAttacker].prlzImmobility = TRUE;
// This is removed in FRLG and Emerald for some reason
Expand Down
29 changes: 29 additions & 0 deletions test/battle/ability/magic_guard.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,32 @@ SINGLE_BATTLE_TEST("Magic Guard prevents recoil damage to the user")
NOT HP_BAR(player);
}
}

SINGLE_BATTLE_TEST("Magic Guard ignores immobilization that can be caused by paralysis")
{
if (B_MAGIC_GUARD >= GEN_4)
PASSES_RANDOMLY(1, 1, RNG_PARALYSIS);
else
PASSES_RANDOMLY(75, 100, RNG_PARALYSIS);
GIVEN {
PLAYER(SPECIES_CLEFABLE) { Ability(ABILITY_MAGIC_GUARD); Status1(STATUS1_PARALYSIS);}
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_CELEBRATE); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
}
}

SINGLE_BATTLE_TEST("Magic Guard does not ignore speed stat changes caused by paralysis")
{
GIVEN {
PLAYER(SPECIES_CLEFABLE) { Speed(100); Ability(ABILITY_MAGIC_GUARD); Status1(STATUS1_PARALYSIS);}
OPPONENT(SPECIES_WOBBUFFET) { Speed(99); }
} WHEN {
TURN { }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
}
}
Loading