Fix infinite confusion (berserk gene) not being cured by cure_status bag items (#8343)
This commit is contained in:
parent
68a974af86
commit
ec3e16801a
@ -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)
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user