Fixes weather abilities not activating when Cloud Nine user leaves th… (#5209)
* Fixes weather abilities not activating when Cloud Nine user leaves the field * parametrize
This commit is contained in:
parent
a111ac496d
commit
bde6982890
@ -7150,7 +7150,7 @@ BattleScript_TargetFormChangeWithStringNoPopup::
|
|||||||
|
|
||||||
BattleScript_BattlerFormChangeWithStringEnd3::
|
BattleScript_BattlerFormChangeWithStringEnd3::
|
||||||
pause 5
|
pause 5
|
||||||
call BattleScript_AbilityPopUp
|
call BattleScript_AbilityPopUpScripting
|
||||||
flushtextbox
|
flushtextbox
|
||||||
handleformchange BS_SCRIPTING, 0
|
handleformchange BS_SCRIPTING, 0
|
||||||
handleformchange BS_SCRIPTING, 1
|
handleformchange BS_SCRIPTING, 1
|
||||||
@ -8010,7 +8010,7 @@ BattleScript_DeltaStreamActivates::
|
|||||||
end3
|
end3
|
||||||
|
|
||||||
BattleScript_ProtosynthesisActivates::
|
BattleScript_ProtosynthesisActivates::
|
||||||
call BattleScript_AbilityPopUp
|
call BattleScript_AbilityPopUpScripting
|
||||||
printstring STRINGID_SUNLIGHTACTIVATEDABILITY
|
printstring STRINGID_SUNLIGHTACTIVATEDABILITY
|
||||||
waitmessage B_WAIT_TIME_MED
|
waitmessage B_WAIT_TIME_MED
|
||||||
printstring STRINGID_STATWASHEIGHTENED
|
printstring STRINGID_STATWASHEIGHTENED
|
||||||
|
|||||||
@ -7292,19 +7292,32 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler)
|
|||||||
|
|
||||||
gDisableStructs[battler].truantSwitchInHack = 0;
|
gDisableStructs[battler].truantSwitchInHack = 0;
|
||||||
|
|
||||||
for (i = 0; i < gBattlersCount; i++)
|
|
||||||
{
|
|
||||||
if (i != battler
|
|
||||||
&& GetBattlerAbility(i) == ABILITY_TRACE
|
|
||||||
&& AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, i, 0, 0, 0))
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (DoSwitchInAbilities(battler) || ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, battler, FALSE))
|
if (DoSwitchInAbilities(battler) || ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, battler, FALSE))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
else if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, 0, 0, 0))
|
else if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, 0, 0, 0))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
for (i = 0; i < gBattlersCount; i++)
|
||||||
|
{
|
||||||
|
if (i == battler)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
switch (GetBattlerAbility(i))
|
||||||
|
{
|
||||||
|
case ABILITY_TRACE:
|
||||||
|
if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, i, 0, 0, 0))
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case ABILITY_FORECAST:
|
||||||
|
case ABILITY_FLOWER_GIFT:
|
||||||
|
case ABILITY_ICE_FACE:
|
||||||
|
case ABILITY_PROTOSYNTHESIS:
|
||||||
|
if (AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, i, 0, 0, 0))
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
gDisableStructs[battler].stickyWebDone = FALSE;
|
gDisableStructs[battler].stickyWebDone = FALSE;
|
||||||
gDisableStructs[battler].spikesDone = FALSE;
|
gDisableStructs[battler].spikesDone = FALSE;
|
||||||
gDisableStructs[battler].toxicSpikesDone = FALSE;
|
gDisableStructs[battler].toxicSpikesDone = FALSE;
|
||||||
|
|||||||
@ -6269,17 +6269,17 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITYEFFECT_ON_WEATHER: // For ability effects that activate when the battle weather changes.
|
case ABILITYEFFECT_ON_WEATHER: // For ability effects that activate when the battle weather changes.
|
||||||
battler = gBattlerAbility = gBattleScripting.battler;
|
|
||||||
gLastUsedAbility = GetBattlerAbility(battler);
|
gLastUsedAbility = GetBattlerAbility(battler);
|
||||||
switch (gLastUsedAbility)
|
switch (gLastUsedAbility)
|
||||||
{
|
{
|
||||||
case ABILITY_FORECAST:
|
case ABILITY_FORECAST:
|
||||||
case ABILITY_FLOWER_GIFT:
|
case ABILITY_FLOWER_GIFT:
|
||||||
if ((IsBattlerWeatherAffected(battler, gBattleWeather)
|
if ((IsBattlerWeatherAffected(battler, gBattleWeather)
|
||||||
|| gBattleWeather == B_WEATHER_NONE
|
|| gBattleWeather == B_WEATHER_NONE
|
||||||
|| !WEATHER_HAS_EFFECT) // Air Lock active
|
|| !WEATHER_HAS_EFFECT) // Air Lock active
|
||||||
&& TryBattleFormChange(battler, FORM_CHANGE_BATTLE_WEATHER))
|
&& TryBattleFormChange(battler, FORM_CHANGE_BATTLE_WEATHER))
|
||||||
{
|
{
|
||||||
|
gBattleScripting.battler = battler;
|
||||||
BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3);
|
BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3);
|
||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
@ -6290,6 +6290,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|||||||
&& !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED))
|
&& !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED))
|
||||||
{
|
{
|
||||||
// TODO: Convert this to a proper FORM_CHANGE type.
|
// TODO: Convert this to a proper FORM_CHANGE type.
|
||||||
|
gBattleScripting.battler = battler;
|
||||||
gBattleMons[battler].species = SPECIES_EISCUE_ICE_FACE;
|
gBattleMons[battler].species = SPECIES_EISCUE_ICE_FACE;
|
||||||
BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3);
|
BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3);
|
||||||
effect++;
|
effect++;
|
||||||
@ -6300,7 +6301,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|||||||
{
|
{
|
||||||
gDisableStructs[battler].weatherAbilityDone = TRUE;
|
gDisableStructs[battler].weatherAbilityDone = TRUE;
|
||||||
PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler));
|
PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler));
|
||||||
gBattlerAbility = gBattleScripting.battler = battler;
|
gBattleScripting.battler = battler;
|
||||||
BattleScriptPushCursorAndCallback(BattleScript_ProtosynthesisActivates);
|
BattleScriptPushCursorAndCallback(BattleScript_ProtosynthesisActivates);
|
||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -397,3 +397,25 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform back when it uses a move that f
|
|||||||
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_CASTFORM);
|
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_CASTFORM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SINGLE_BATTLE_TEST("Forecast transforms Castform when Cloud Nine ability user leaves the field")
|
||||||
|
{
|
||||||
|
u32 species = 0, ability = 0;
|
||||||
|
PARAMETRIZE { species = SPECIES_PSYDUCK; ability = ABILITY_CLOUD_NINE; }
|
||||||
|
PARAMETRIZE { species = SPECIES_RAYQUAZA; ability = ABILITY_AIR_LOCK; }
|
||||||
|
|
||||||
|
GIVEN {
|
||||||
|
PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); }
|
||||||
|
OPPONENT(species) { Ability(ability); }
|
||||||
|
OPPONENT(SPECIES_WOBBUFFET);
|
||||||
|
} WHEN {
|
||||||
|
TURN { MOVE(player, MOVE_SUNNY_DAY); MOVE(opponent, MOVE_CELEBRATE); }
|
||||||
|
TURN { SWITCH(opponent, 1); }
|
||||||
|
} SCENE {
|
||||||
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, player);
|
||||||
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
|
||||||
|
MESSAGE("2 sent out Wobbuffet!");
|
||||||
|
ABILITY_POPUP(player, ABILITY_FORECAST);
|
||||||
|
MESSAGE("Castform transformed!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user