mirror of
https://github.com/rh-hideout/pokeemerald-expansion.git
synced 2026-03-21 18:04:50 -05:00
Fix weatherform change when primal weather leaves the field (#9424)
This commit is contained in:
parent
8dd4135b46
commit
78e4de61f8
|
|
@ -22,6 +22,15 @@
|
|||
|
||||
.section script_data, "aw", %progbits
|
||||
|
||||
BattleScript_TryRevertWeatherform:
|
||||
setbyte gEffectBattler, 0
|
||||
sortbattlers
|
||||
BattleScript_TryRevertWeatherformLoop:
|
||||
tryrevertweatherform
|
||||
addbyte gEffectBattler, 1
|
||||
jumpifbytenotequal gEffectBattler, gBattlersCount, BattleScript_TryRevertWeatherformLoop
|
||||
return
|
||||
|
||||
BattleScript_FickleBeamMessage::
|
||||
pause B_WAIT_TIME_SHORTEST
|
||||
printstring STRINGID_FICKLEBEAMDOUBLED
|
||||
|
|
@ -906,7 +915,7 @@ BattleScript_MoveEffectCoreEnforcer::
|
|||
printstring STRINGID_PKMNSABILITYSUPPRESSED
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
trytoclearprimalweather
|
||||
tryrevertweatherform
|
||||
call BattleScript_TryRevertWeatherform
|
||||
flushtextbox
|
||||
BattleScript_CoreEnforcerRet:
|
||||
return
|
||||
|
|
@ -1812,7 +1821,7 @@ BattleScript_EffectEntrainment::
|
|||
printstring STRINGID_PKMNACQUIREDABILITY
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
trytoclearprimalweather
|
||||
tryrevertweatherform
|
||||
call BattleScript_TryRevertWeatherform
|
||||
flushtextbox
|
||||
tryendneutralizinggas
|
||||
goto BattleScript_MoveEnd
|
||||
|
|
@ -1847,7 +1856,7 @@ BattleScript_EffectHealingWishGen4:
|
|||
switchindataupdate BS_ATTACKER
|
||||
hpthresholds BS_ATTACKER
|
||||
trytoclearprimalweather
|
||||
tryrevertweatherform
|
||||
call BattleScript_TryRevertWeatherform
|
||||
flushtextbox
|
||||
tryendneutralizinggas
|
||||
flushtextbox
|
||||
|
|
@ -1891,7 +1900,7 @@ BattleScript_EffectOverwriteAbility::
|
|||
printstring STRINGID_PKMNACQUIREDABILITY
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
trytoclearprimalweather
|
||||
tryrevertweatherform
|
||||
call BattleScript_TryRevertWeatherform
|
||||
flushtextbox
|
||||
tryendneutralizinggas
|
||||
goto BattleScript_MoveEnd
|
||||
|
|
@ -1997,7 +2006,7 @@ BattleScript_EffectGastroAcid::
|
|||
printstring STRINGID_PKMNSABILITYSUPPRESSED
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
trytoclearprimalweather
|
||||
tryrevertweatherform
|
||||
call BattleScript_TryRevertWeatherform
|
||||
flushtextbox
|
||||
tryendneutralizinggas
|
||||
goto BattleScript_MoveEnd
|
||||
|
|
@ -2725,7 +2734,7 @@ BattleScript_EffectEvasionUp2::
|
|||
BattleScript_EffectTransform::
|
||||
attackcanceler
|
||||
trytoclearprimalweather
|
||||
tryrevertweatherform
|
||||
call BattleScript_TryRevertWeatherform
|
||||
flushtextbox
|
||||
tryendneutralizinggas
|
||||
flushtextbox
|
||||
|
|
@ -4002,7 +4011,7 @@ BattleScript_FaintBattler::
|
|||
printstring STRINGID_BATTLERFAINTED
|
||||
cleareffectsonfaint BS_FAINTED
|
||||
trytoclearprimalweather
|
||||
tryrevertweatherform
|
||||
call BattleScript_TryRevertWeatherform
|
||||
flushtextbox
|
||||
waitanimation
|
||||
tryactivatereceiver BS_FAINTED
|
||||
|
|
@ -5428,7 +5437,7 @@ BattleScript_BattlerFormChangeNoPopup::
|
|||
BattleScript_BattlerFormChangeFromAfterAnimation::
|
||||
handleformchange BS_SCRIPTING, 1
|
||||
switchinabilities BS_SCRIPTING
|
||||
jumpifability BS_TARGET, ABILITY_DISGUISE, BattleScript_ApplyDisguiseFormChangeHPLoss
|
||||
jumpifability BS_SCRIPTING, ABILITY_DISGUISE, BattleScript_ApplyDisguiseFormChangeHPLoss
|
||||
return
|
||||
|
||||
BattleScript_ZenMode::
|
||||
|
|
@ -5450,7 +5459,8 @@ BattleScript_BattlerFormChangeDisguise::
|
|||
waitanimation
|
||||
printstring STRINGID_PKMNDISGUISEWASBUSTED
|
||||
waitmessage B_WAIT_TIME_SHORT
|
||||
goto BattleScript_BattlerFormChangeFromAfterAnimation
|
||||
call BattleScript_BattlerFormChangeFromAfterAnimation
|
||||
return
|
||||
|
||||
BattleScript_BattlerFormChangeEnd3NoPopup::
|
||||
call BattleScript_BattlerFormChangeNoPopup
|
||||
|
|
@ -5508,9 +5518,10 @@ BattleScript_ApplyDisguiseFormChangeHPLossReturn:
|
|||
BattleScript_TargetFormChangeNoPopup:
|
||||
flushtextbox
|
||||
handleformchange BS_SCRIPTING, 0
|
||||
playanimation BS_TARGET, B_ANIM_FORM_CHANGE
|
||||
playanimation BS_SCRIPTING, B_ANIM_FORM_CHANGE
|
||||
waitanimation
|
||||
goto BattleScript_BattlerFormChangeFromAfterAnimation
|
||||
call BattleScript_BattlerFormChangeFromAfterAnimation
|
||||
return
|
||||
|
||||
BattleScript_TargetFormChange::
|
||||
pause 5
|
||||
|
|
@ -6662,7 +6673,7 @@ BattleScript_MummyActivates::
|
|||
printstring STRINGID_ATTACKERACQUIREDABILITY
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
trytoclearprimalweather
|
||||
tryrevertweatherform
|
||||
call BattleScript_TryRevertWeatherform
|
||||
flushtextbox
|
||||
tryendneutralizinggas
|
||||
return
|
||||
|
|
@ -8255,3 +8266,4 @@ BattleScript_SilphScopeUnveiled::
|
|||
printstring STRINGID_GHOSTWASMAROWAK
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
end2
|
||||
|
||||
|
|
|
|||
|
|
@ -12050,10 +12050,11 @@ void BS_ItemRestorePP(void)
|
|||
void BS_TryRevertWeatherForm(void)
|
||||
{
|
||||
NATIVE_ARGS();
|
||||
if (IsBattlerAlive(gBattlerTarget)
|
||||
&& TryBattleFormChange(gBattlerTarget, FORM_CHANGE_BATTLE_WEATHER, GetBattlerAbility(gBattlerTarget)))
|
||||
enum BattlerId battler = gBattlersBySpeed[gEffectBattler];
|
||||
if (IsBattlerAlive(battler)
|
||||
&& TryBattleFormChange(battler, FORM_CHANGE_BATTLE_WEATHER, GetBattlerAbility(battler)))
|
||||
{
|
||||
gBattleScripting.battler = gBattlerTarget;
|
||||
gBattleScripting.battler = battler;
|
||||
BattleScriptPush(cmd->nextInstr);
|
||||
gBattlescriptCurrInstr = BattleScript_TargetFormChangeWithStringNoPopup;
|
||||
return;
|
||||
|
|
@ -13888,17 +13889,18 @@ void BS_SwitchinAbilities(void)
|
|||
{
|
||||
NATIVE_ARGS(u8 battler);
|
||||
enum BattlerId battler = GetBattlerForBattleScript(cmd->battler);
|
||||
u32 ability = GetBattlerAbility(battler);
|
||||
enum Ability ability = GetBattlerAbility(battler);
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
AbilityBattleEffects(ABILITYEFFECT_TERA_SHIFT, battler, ability, MOVE_NONE, TRUE);
|
||||
AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, battler, ability, MOVE_NONE, TRUE);
|
||||
AbilityBattleEffects(ABILITYEFFECT_UNNERVE, battler, ability, MOVE_NONE, TRUE);
|
||||
AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, battler, ability, MOVE_NONE, TRUE);
|
||||
AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, battler, ability, MOVE_NONE, TRUE);
|
||||
AbilityBattleEffects(ABILITYEFFECT_COMMANDER, battler, ability, MOVE_NONE, TRUE);
|
||||
AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, battler, ability, MOVE_NONE, TRUE);
|
||||
AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, battler, ability, MOVE_NONE, TRUE);
|
||||
AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, ability, MOVE_NONE, TRUE);
|
||||
if (AbilityBattleEffects(ABILITYEFFECT_TERA_SHIFT, battler, ability, MOVE_NONE, TRUE)
|
||||
|| AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, battler, ability, MOVE_NONE, TRUE)
|
||||
|| AbilityBattleEffects(ABILITYEFFECT_UNNERVE, battler, ability, MOVE_NONE, TRUE)
|
||||
|| AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, battler, ability, MOVE_NONE, TRUE)
|
||||
|| AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, battler, ability, MOVE_NONE, TRUE)
|
||||
|| AbilityBattleEffects(ABILITYEFFECT_COMMANDER, battler, ability, MOVE_NONE, TRUE)
|
||||
|| AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, battler, ability, MOVE_NONE, TRUE)
|
||||
|| AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, battler, ability, MOVE_NONE, TRUE)
|
||||
|| AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, ability, MOVE_NONE, TRUE))
|
||||
return;
|
||||
}
|
||||
|
||||
void BS_InstantHpDrop(void)
|
||||
|
|
|
|||
|
|
@ -454,3 +454,30 @@ DOUBLE_BATTLE_TEST("Forecast reverts Castform back after Teraform Zero clears we
|
|||
EXPECT_EQ(playerRight->species, SPECIES_CASTFORM_NORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Forecast: All Forecast mons revert on the field if Primal Weather is removed due to fainting")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_KYOGRE) { Speed(20); HP(1); Item(ITEM_BLUE_ORB); }
|
||||
PLAYER(SPECIES_CASTFORM) { Speed(10); Ability(ABILITY_FORECAST); }
|
||||
OPPONENT(SPECIES_CASTFORM) { Speed(40); Ability(ABILITY_FORECAST); }
|
||||
OPPONENT(SPECIES_CASTFORM) { Speed(30); Ability(ABILITY_FORECAST); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponentLeft, MOVE_POUND, target: playerLeft); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, playerLeft);
|
||||
|
||||
ABILITY_POPUP(opponentLeft, ABILITY_FORECAST);
|
||||
ABILITY_POPUP(opponentRight, ABILITY_FORECAST);
|
||||
ABILITY_POPUP(playerRight, ABILITY_FORECAST);
|
||||
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, opponentLeft);
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, opponentRight);
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, playerRight);
|
||||
} THEN {
|
||||
EXPECT_EQ(opponentLeft->species, SPECIES_CASTFORM_NORMAL);
|
||||
EXPECT_EQ(opponentRight->species, SPECIES_CASTFORM_NORMAL);
|
||||
EXPECT_EQ(playerRight->species, SPECIES_CASTFORM_NORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user