Fix infinite confusion (berserk gene) not being cured by cure_status bag items (#8343)

This commit is contained in:
FosterProgramming 2025-11-25 10:09:10 +01:00 committed by GitHub
parent 68a974af86
commit ec3e16801a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 54 additions and 4 deletions

View File

@ -15226,8 +15226,6 @@ void BS_ItemCureStatus(void)
statusChanged = TRUE;
if (GetItemStatus1Mask(gLastUsedItem) & STATUS1_SLEEP)
gBattleMons[targetBattler].volatiles.nightmare = FALSE;
if (ItemHasVolatileFlag(gLastUsedItem, VOLATILE_CONFUSION))
gBattleMons[targetBattler].volatiles.infiniteConfusion = FALSE;
}
if (!statusChanged)

View File

@ -11748,9 +11748,10 @@ bool32 ItemHealMonVolatile(u32 battler, u16 itemId)
const u8 *effect = GetItemEffect(itemId);
if (effect[3] & ITEM3_STATUS_ALL)
{
statusChanged = (gBattleMons[battler].volatiles.infatuation || gBattleMons[battler].volatiles.confusionTurns > 0);
statusChanged = (gBattleMons[battler].volatiles.infatuation || gBattleMons[battler].volatiles.confusionTurns > 0 || gBattleMons[battler].volatiles.infiniteConfusion);
gBattleMons[battler].volatiles.infatuation = 0;
gBattleMons[battler].volatiles.confusionTurns = 0;
gBattleMons[battler].volatiles.infiniteConfusion = FALSE;
}
else if (effect[0] & ITEM0_INFATUATION)
{
@ -11759,8 +11760,9 @@ bool32 ItemHealMonVolatile(u32 battler, u16 itemId)
}
else if (effect[3] & ITEM3_CONFUSION)
{
statusChanged = gBattleMons[battler].volatiles.confusionTurns > 0;
statusChanged = (gBattleMons[battler].volatiles.confusionTurns > 0 || gBattleMons[battler].volatiles.infiniteConfusion);
gBattleMons[battler].volatiles.confusionTurns = 0;
gBattleMons[battler].volatiles.infiniteConfusion = FALSE;
}
return statusChanged;

View File

@ -252,3 +252,53 @@ SINGLE_BATTLE_TEST("Berserk Gene does not cause an infinite loop")
MESSAGE("Using Berserk Gene, the Attack of the opposing Wobbuffet sharply rose!");
}
}
SINGLE_BATTLE_TEST("Berserker Gene confusion can be healed with bag items")
{
u16 item;
PARAMETRIZE { item = ITEM_FULL_HEAL; }
PARAMETRIZE { item = ITEM_HEAL_POWDER; }
PARAMETRIZE { item = ITEM_PEWTER_CRUNCHIES; }
PARAMETRIZE { item = ITEM_LAVA_COOKIE; }
PARAMETRIZE { item = ITEM_RAGE_CANDY_BAR; }
PARAMETRIZE { item = ITEM_OLD_GATEAU; }
PARAMETRIZE { item = ITEM_CASTELIACONE; }
PARAMETRIZE { item = ITEM_LUMIOSE_GALETTE; }
PARAMETRIZE { item = ITEM_SHALOUR_SABLE; }
PARAMETRIZE { item = ITEM_BIG_MALASADA; }
PARAMETRIZE { item = ITEM_JUBILIFE_MUFFIN; }
GIVEN {
ASSUME(gItemsInfo[item].battleUsage == EFFECT_ITEM_CURE_STATUS);
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BERSERK_GENE);};
OPPONENT(SPECIES_GENGAR);
} WHEN {
TURN { USE_ITEM(player, item, partyIndex: 0); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, player);
MESSAGE("Wobbuffet had its status healed!");
} THEN {
EXPECT(player->volatiles.infiniteConfusion == 0);
}
}
SINGLE_BATTLE_TEST("Berserker Gene confusion can be healed with used held items")
{
u16 item;
PARAMETRIZE { item = ITEM_PERSIM_BERRY; }
PARAMETRIZE { item = ITEM_LUM_BERRY; }
GIVEN {
ASSUME(gItemsInfo[ITEM_PERSIM_BERRY].holdEffect == HOLD_EFFECT_CURE_CONFUSION);
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BERSERK_GENE);};
OPPONENT(SPECIES_WOBBUFFET) { Item(item);};
} WHEN {
TURN { MOVE(player, MOVE_COVET, WITH_RNG(RNG_CONFUSION, FALSE)); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, player);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
} THEN {
EXPECT(player->volatiles.infiniteConfusion == 0);
}
}