More White Herb fixes/clean up (#7826)
Co-authored-by: Bassoonian <iasperbassoonian@gmail.com>
This commit is contained in:
parent
db43fc3c83
commit
3ea095a941
@ -1373,11 +1373,6 @@
|
||||
.4byte \failInstr
|
||||
.endm
|
||||
|
||||
.macro itemstatchangeeffects battler:req
|
||||
callnative BS_RunStatChangeItems
|
||||
.byte \battler
|
||||
.endm
|
||||
|
||||
.macro allyswitchswapbattlers
|
||||
callnative BS_AllySwitchSwapBattler
|
||||
.endm
|
||||
|
||||
@ -6761,7 +6761,6 @@ BattleScript_ActivateWeatherAbilities_Loop:
|
||||
return
|
||||
|
||||
BattleScript_TryIntimidateHoldEffects:
|
||||
itemstatchangeeffects BS_TARGET
|
||||
jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_ADRENALINE_ORB, BattleScript_TryIntimidateHoldEffectsRet
|
||||
jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_TryIntimidateHoldEffectsRet
|
||||
setstatchanger STAT_SPEED, 1, FALSE
|
||||
|
||||
@ -58,6 +58,7 @@ enum FirstTurnEventsStates
|
||||
FIRST_TURN_EVENTS_NEUTRALIZING_GAS,
|
||||
FIRST_TURN_EVENTS_SWITCH_IN_ABILITIES,
|
||||
FIRST_TURN_EVENTS_ITEM_EFFECTS,
|
||||
FIRST_TURN_EVENTS_WHITE_HERB,
|
||||
FIRST_TURN_EVENTS_OPPORTUNIST,
|
||||
FIRST_TURN_EVENTS_MIRROR_HERB,
|
||||
FIRST_TURN_EVENTS_EJECT_PACK,
|
||||
|
||||
@ -77,6 +77,7 @@ enum ItemCaseId
|
||||
ITEMEFFECT_USE_LAST_ITEM, // move end effects for just the battler, not whole field
|
||||
ITEMEFFECT_WHITE_HERB,
|
||||
ITEMEFFECT_WHITE_HERB_ENDTURN,
|
||||
ITEMEFFECT_WHITE_HERB_FIRST_TURN,
|
||||
ITEMEFFECT_MIRROR_HERB,
|
||||
ITEMEFFECT_MIRROR_HERB_FIRST_TURN,
|
||||
};
|
||||
@ -408,7 +409,6 @@ bool32 IsPursuitTargetSet(void);
|
||||
void ClearPursuitValuesIfSet(u32 battler);
|
||||
void ClearPursuitValues(void);
|
||||
bool32 HasWeatherEffect(void);
|
||||
u32 RestoreWhiteHerbStats(u32 battler);
|
||||
bool32 IsFutureSightAttackerInParty(u32 battlerAtk, u32 battlerDef, u32 move);
|
||||
bool32 HadMoreThanHalfHpNowDoesnt(u32 battler);
|
||||
void UpdateStallMons(void);
|
||||
|
||||
@ -3885,6 +3885,15 @@ static void TryDoEventsBeforeFirstTurn(void)
|
||||
gBattleStruct->switchInBattlerCounter = 0;
|
||||
gBattleStruct->eventsBeforeFirstTurnState++;
|
||||
break;
|
||||
case FIRST_TURN_EVENTS_WHITE_HERB:
|
||||
while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest
|
||||
{
|
||||
if (ItemBattleEffects(ITEMEFFECT_WHITE_HERB_FIRST_TURN, gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++]))
|
||||
return;
|
||||
}
|
||||
gBattleStruct->switchInBattlerCounter = 0;
|
||||
gBattleStruct->eventsBeforeFirstTurnState++;
|
||||
break;
|
||||
case FIRST_TURN_EVENTS_OPPORTUNIST:
|
||||
while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest
|
||||
{
|
||||
|
||||
@ -7822,6 +7822,11 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
if (ItemBattleEffects(ITEMEFFECT_WHITE_HERB, i))
|
||||
return TRUE;
|
||||
}
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, i, GetBattlerAbility(i), 0, 0))
|
||||
@ -7829,7 +7834,7 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler)
|
||||
}
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
if (ItemBattleEffects(ITEMEFFECT_MIRROR_HERB, battler))
|
||||
if (ItemBattleEffects(ITEMEFFECT_MIRROR_HERB, i))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -15352,15 +15357,6 @@ void BS_TryAllySwitch(void)
|
||||
}
|
||||
}
|
||||
|
||||
void BS_RunStatChangeItems(void)
|
||||
{
|
||||
NATIVE_ARGS(u8 battler);
|
||||
|
||||
// Change instruction before calling ItemBattleEffects.
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
ItemBattleEffects(ITEMEFFECT_WHITE_HERB, GetBattlerForBattleScript(cmd->battler));
|
||||
}
|
||||
|
||||
static void TryUpdateEvolutionTracker(u32 evolutionCondition, u32 upAmount, u16 usedMove)
|
||||
{
|
||||
u32 i, j;
|
||||
|
||||
@ -6575,7 +6575,7 @@ u32 TryBoosterEnergy(u32 battler, enum Ability ability, enum ItemCaseId caseID)
|
||||
return ITEM_NO_EFFECT;
|
||||
}
|
||||
|
||||
u32 RestoreWhiteHerbStats(u32 battler)
|
||||
static u32 RestoreWhiteHerbStats(u32 battler, enum ItemCaseId caseID)
|
||||
{
|
||||
u32 i, effect = 0;
|
||||
|
||||
@ -6592,7 +6592,12 @@ u32 RestoreWhiteHerbStats(u32 battler)
|
||||
gLastUsedItem = gBattleMons[battler].item;
|
||||
gBattleScripting.battler = battler;
|
||||
gPotentialItemEffectBattler = battler;
|
||||
}
|
||||
if (caseID == ITEMEFFECT_WHITE_HERB)
|
||||
BattleScriptCall(BattleScript_WhiteHerbRet);
|
||||
else
|
||||
BattleScriptExecute(BattleScript_WhiteHerbEnd2);
|
||||
}
|
||||
|
||||
return effect;
|
||||
}
|
||||
|
||||
@ -6932,16 +6937,6 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler)
|
||||
gBattleStruct->moneyMultiplierItem = 1;
|
||||
}
|
||||
break;
|
||||
case HOLD_EFFECT_WHITE_HERB:
|
||||
effect = RestoreWhiteHerbStats(battler);
|
||||
if (effect != 0)
|
||||
{
|
||||
if (caseID == ITEMEFFECT_ON_SWITCH_IN)
|
||||
BattleScriptCall(BattleScript_WhiteHerbRet);
|
||||
else
|
||||
BattleScriptExecute(BattleScript_WhiteHerbEnd2);
|
||||
}
|
||||
break;
|
||||
case HOLD_EFFECT_CONFUSE_SPICY:
|
||||
if (B_BERRIES_INSTANT >= GEN_4)
|
||||
effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SPICY, caseID);
|
||||
@ -7177,11 +7172,6 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler)
|
||||
case HOLD_EFFECT_RESTORE_PP:
|
||||
effect = ItemRestorePp(battler, gLastUsedItem, caseID);
|
||||
break;
|
||||
case HOLD_EFFECT_WHITE_HERB:
|
||||
effect = RestoreWhiteHerbStats(battler);
|
||||
if (effect != 0)
|
||||
BattleScriptExecute(BattleScript_WhiteHerbEnd2);
|
||||
break;
|
||||
case HOLD_EFFECT_CONFUSE_SPICY:
|
||||
effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SPICY, caseID);
|
||||
break;
|
||||
@ -7638,32 +7628,14 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler)
|
||||
break;
|
||||
case ITEMEFFECT_WHITE_HERB:
|
||||
case ITEMEFFECT_WHITE_HERB_ENDTURN:
|
||||
switch (battlerHoldEffect)
|
||||
{
|
||||
case HOLD_EFFECT_WHITE_HERB:
|
||||
effect = RestoreWhiteHerbStats(battler);
|
||||
if (effect != 0)
|
||||
{
|
||||
if (caseID == ITEMEFFECT_WHITE_HERB)
|
||||
BattleScriptCall(BattleScript_WhiteHerbRet);
|
||||
else
|
||||
BattleScriptExecute(BattleScript_WhiteHerbEnd2);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
case ITEMEFFECT_WHITE_HERB_FIRST_TURN:
|
||||
if (battlerHoldEffect == HOLD_EFFECT_WHITE_HERB)
|
||||
effect = RestoreWhiteHerbStats(battler, caseID);
|
||||
break;
|
||||
case ITEMEFFECT_MIRROR_HERB:
|
||||
case ITEMEFFECT_MIRROR_HERB_FIRST_TURN:
|
||||
switch (battlerHoldEffect)
|
||||
{
|
||||
case HOLD_EFFECT_MIRROR_HERB:
|
||||
if (battlerHoldEffect == HOLD_EFFECT_MIRROR_HERB)
|
||||
effect = TryConsumeMirrorHerb(battler, caseID);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@ -55,10 +55,10 @@ DOUBLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimi
|
||||
ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE);
|
||||
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
|
||||
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft);
|
||||
MESSAGE("The opposing Wobbuffet returned its stats to normal using its White Herb!");
|
||||
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentRight);
|
||||
MESSAGE("The opposing Wynaut returned its stats to normal using its White Herb!");
|
||||
} THEN {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user