Minor White Herb and Neutralizing Gas clean up (#7754)
This commit is contained in:
parent
7172639bc0
commit
780867611e
@ -49,6 +49,7 @@ enum {
|
||||
ABILITYEFFECT_ATK_SYNCHRONIZE,
|
||||
ABILITYEFFECT_MOVE_END_OTHER,
|
||||
ABILITYEFFECT_NEUTRALIZINGGAS,
|
||||
ABILITYEFFECT_NEUTRALIZINGGAS_FIRST_TURN,
|
||||
ABILITYEFFECT_ON_WEATHER,
|
||||
ABILITYEFFECT_ON_TERRAIN,
|
||||
ABILITYEFFECT_SWITCH_IN_TERRAIN,
|
||||
@ -71,7 +72,8 @@ enum ItemCaseId
|
||||
ITEMEFFECT_ORBS,
|
||||
ITEMEFFECT_LIFEORB_SHELLBELL,
|
||||
ITEMEFFECT_USE_LAST_ITEM, // move end effects for just the battler, not whole field
|
||||
ITEMEFFECT_STATS_CHANGED, // For White Herb and Eject Pack
|
||||
ITEMEFFECT_WHITE_HERB,
|
||||
ITEMEFFECT_WHITE_HERB_ENDTURN,
|
||||
};
|
||||
|
||||
enum ItemEffect
|
||||
|
||||
@ -1443,7 +1443,7 @@ static bool32 HandleEndTurnThirdEventBlock(u32 battler)
|
||||
effect = TRUE;
|
||||
break;
|
||||
case HOLD_EFFECT_WHITE_HERB:
|
||||
if (ItemBattleEffects(ITEMEFFECT_NORMAL, battler))
|
||||
if (ItemBattleEffects(ITEMEFFECT_WHITE_HERB_ENDTURN, battler))
|
||||
effect = TRUE;
|
||||
break;
|
||||
default:
|
||||
|
||||
@ -3851,8 +3851,13 @@ static void TryDoEventsBeforeFirstTurn(void)
|
||||
gBattleStruct->eventsBeforeFirstTurnState++;
|
||||
break;
|
||||
case FIRST_TURN_EVENTS_NEUTRALIZING_GAS:
|
||||
if (AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, 0, 0, 0, 0) != 0)
|
||||
return;
|
||||
while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest
|
||||
{
|
||||
i = gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++];
|
||||
if (AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS_FIRST_TURN, i, gBattleMons[i].ability, 0, 0) != 0)
|
||||
return;
|
||||
}
|
||||
gBattleStruct->switchInBattlerCounter = 0;
|
||||
gBattleStruct->eventsBeforeFirstTurnState++;
|
||||
break;
|
||||
case FIRST_TURN_EVENTS_SWITCH_IN_ABILITIES:
|
||||
|
||||
@ -6703,16 +6703,10 @@ static void Cmd_moveend(void)
|
||||
if (!IsBattlerAlive(i))
|
||||
continue;
|
||||
|
||||
if (GetBattlerHoldEffect(i, TRUE) == HOLD_EFFECT_WHITE_HERB
|
||||
&& RestoreWhiteHerbStats(i))
|
||||
{
|
||||
BattleScriptCall(BattleScript_WhiteHerbRet);
|
||||
effect = TRUE;
|
||||
break;
|
||||
}
|
||||
if (ItemBattleEffects(ITEMEFFECT_WHITE_HERB, i))
|
||||
return;
|
||||
}
|
||||
if (!effect)
|
||||
gBattleScripting.moveendState++;
|
||||
gBattleScripting.moveendState++;
|
||||
break;
|
||||
case MOVEEND_THIRD_MOVE_BLOCK:
|
||||
// Special case for Steel Roller since it has to check the chosen move
|
||||
@ -7687,13 +7681,10 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler)
|
||||
u32 i = 0;
|
||||
u32 side = GetBattlerSide(battler);
|
||||
// Neutralizing Gas announces itself before hazards
|
||||
if (gBattleMons[battler].ability == ABILITY_NEUTRALIZING_GAS && gSpecialStatuses[battler].announceNeutralizingGas == 0)
|
||||
if (!gSpecialStatuses[battler].announceNeutralizingGas
|
||||
&& AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS_FIRST_TURN, battler, gBattleMons[battler].ability, 0, 0))
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_NEUTRALIZING_GAS;
|
||||
gSpecialStatuses[battler].announceNeutralizingGas = TRUE;
|
||||
gDisableStructs[battler].neutralizingGas = TRUE;
|
||||
gBattlerAbility = battler;
|
||||
BattleScriptCall(BattleScript_SwitchInAbilityMsgRet);
|
||||
}
|
||||
// Healing Wish activates before hazards.
|
||||
// Starting from Gen8 - it heals only pokemon which can be healed. In gens 5,6,7 the effect activates anyways.
|
||||
@ -15272,7 +15263,7 @@ void BS_RunStatChangeItems(void)
|
||||
|
||||
// Change instruction before calling ItemBattleEffects.
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
ItemBattleEffects(ITEMEFFECT_STATS_CHANGED, GetBattlerForBattleScript(cmd->battler));
|
||||
ItemBattleEffects(ITEMEFFECT_WHITE_HERB, GetBattlerForBattleScript(cmd->battler));
|
||||
}
|
||||
|
||||
static void TryUpdateEvolutionTracker(u32 evolutionCondition, u32 upAmount, u16 usedMove)
|
||||
|
||||
@ -5535,20 +5535,18 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
break;
|
||||
|
||||
case ABILITYEFFECT_NEUTRALIZINGGAS:
|
||||
case ABILITYEFFECT_NEUTRALIZINGGAS_FIRST_TURN:
|
||||
// Prints message only. separate from ABILITYEFFECT_ON_SWITCHIN bc activates before entry hazards
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
if (ability == ABILITY_NEUTRALIZING_GAS && !gDisableStructs[battler].neutralizingGas)
|
||||
{
|
||||
if (gBattleMons[i].ability == ABILITY_NEUTRALIZING_GAS && !gDisableStructs[i].neutralizingGas)
|
||||
{
|
||||
gDisableStructs[i].neutralizingGas = TRUE;
|
||||
gBattlerAbility = i;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_NEUTRALIZING_GAS;
|
||||
gDisableStructs[battler].neutralizingGas = TRUE;
|
||||
gBattlerAbility = battler;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_NEUTRALIZING_GAS;
|
||||
if (caseID == ABILITYEFFECT_NEUTRALIZINGGAS_FIRST_TURN)
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg);
|
||||
effect++;
|
||||
}
|
||||
|
||||
if (effect != 0)
|
||||
break;
|
||||
else
|
||||
BattleScriptCall(BattleScript_SwitchInAbilityMsgRet);
|
||||
effect++;
|
||||
}
|
||||
break;
|
||||
case ABILITYEFFECT_ON_WEATHER: // For ability effects that activate when the battle weather changes.
|
||||
@ -6873,7 +6871,12 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler)
|
||||
case HOLD_EFFECT_WHITE_HERB:
|
||||
effect = RestoreWhiteHerbStats(battler);
|
||||
if (effect != 0)
|
||||
BattleScriptExecute(BattleScript_WhiteHerbEnd2);
|
||||
{
|
||||
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)
|
||||
@ -7071,11 +7074,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_BLACK_SLUDGE:
|
||||
if (IS_BATTLER_OF_TYPE(battler, TYPE_POISON))
|
||||
{
|
||||
@ -7579,13 +7577,19 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ITEMEFFECT_STATS_CHANGED:
|
||||
case ITEMEFFECT_WHITE_HERB:
|
||||
case ITEMEFFECT_WHITE_HERB_ENDTURN:
|
||||
switch (battlerHoldEffect)
|
||||
{
|
||||
case HOLD_EFFECT_WHITE_HERB:
|
||||
effect = RestoreWhiteHerbStats(battler);
|
||||
if (effect != 0)
|
||||
BattleScriptCall(BattleScript_WhiteHerbRet);
|
||||
{
|
||||
if (caseID == ITEMEFFECT_WHITE_HERB)
|
||||
BattleScriptCall(BattleScript_WhiteHerbRet);
|
||||
else
|
||||
BattleScriptExecute(BattleScript_WhiteHerbEnd2);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Skill Swap swaps user and target's abilities")
|
||||
} THEN {
|
||||
EXPECT_EQ(player->ability, ABILITY_BLAZE);
|
||||
EXPECT_EQ(opponent->ability, ABILITY_TELEPATHY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Skill Swap only swaps user's ability with target's ability")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user