From b898a65891354c4dcf0ab56dcd6a6023d0244005 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 1 Feb 2024 19:26:30 -0300 Subject: [PATCH] Fixed Gigantamax Factor not changing form (#4108) Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- asm/macros/battle_script.inc | 3 ++- data/battle_scripts_1.s | 12 ++++++------ src/battle_script_commands.c | 7 +++++-- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 2cb66a4ab5..80e498d2b0 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -527,9 +527,10 @@ .byte 0x57 .endm - .macro returntoball battler:req + .macro returntoball battler:req, changingForm:req .byte 0x58 .byte \battler + .byte \changingForm .endm .macro handlelearnnewmove learnedMoveInstr:req, nothingToLearnInstr:req, isFirstMove:req diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index af53e9f371..74e61bbdc2 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -184,7 +184,7 @@ BattleScript_MoveSwitchOpenPartyScreen: switchoutabilities BS_ATTACKER waitstate switchhandleorder BS_ATTACKER, 2 - returntoball BS_ATTACKER + returntoball BS_ATTACKER, FALSE getswitchedmondata BS_ATTACKER switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER @@ -4487,7 +4487,7 @@ BattleScript_EffectBatonPass:: switchoutabilities BS_ATTACKER waitstate switchhandleorder BS_ATTACKER, 2 - returntoball BS_ATTACKER + returntoball BS_ATTACKER, FALSE getswitchedmondata BS_ATTACKER switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER @@ -6318,7 +6318,7 @@ BattleScript_RoarSuccessRet: waitanimation BattleScript_RoarSuccessRet_Ret: switchoutabilities BS_TARGET - returntoball BS_TARGET + returntoball BS_TARGET, FALSE waitstate return @@ -7791,7 +7791,7 @@ BattleScript_EmergencyExitNoPopUp:: switchoutabilities BS_TARGET waitstate switchhandleorder BS_TARGET, 2 - returntoball BS_TARGET + returntoball BS_TARGET, FALSE getswitchedmondata BS_TARGET switchindataupdate BS_TARGET hpthresholds BS_TARGET @@ -9602,7 +9602,7 @@ BattleScript_EjectButtonActivates:: switchoutabilities BS_SCRIPTING waitstate switchhandleorder BS_SCRIPTING 0x2 - returntoball BS_SCRIPTING + returntoball BS_SCRIPTING, FALSE getswitchedmondata BS_SCRIPTING switchindataupdate BS_SCRIPTING hpthresholds BS_SCRIPTING @@ -9988,7 +9988,7 @@ BattleScript_DynamaxBegins:: trytrainerslidedynamaxmsg returnatktoball pause B_WAIT_TIME_SHORT - returntoball BS_SCRIPTING + returntoball BS_SCRIPTING, TRUE switchinanim BS_SCRIPTING, TRUE updatedynamax playanimation BS_SCRIPTING, B_ANIM_DYNAMAX_GROWTH diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0a684aafd5..ec9afc056c 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7234,12 +7234,15 @@ static void Cmd_endlinkbattle(void) static void Cmd_returntoball(void) { - CMD_ARGS(u8 battler); + CMD_ARGS(u8 battler, bool8 changingForm); u32 battler = GetBattlerForBattleScript(cmd->battler); BtlController_EmitReturnMonToBall(battler, BUFFER_A, TRUE); MarkBattlerForControllerExec(battler); - TryBattleFormChange(battler, FORM_CHANGE_BATTLE_SWITCH); + + // Don't always execute a form change here otherwise we can stomp gigantamax + if(!cmd->changingForm) + TryBattleFormChange(battler, FORM_CHANGE_BATTLE_SWITCH); gBattlescriptCurrInstr = cmd->nextInstr; }