From 03a9f3f41338eedd9e6555d8aeb4788aba2f5463 Mon Sep 17 00:00:00 2001 From: kleeenexfeu Date: Fri, 19 Nov 2021 22:03:10 +0100 Subject: [PATCH 1/7] Mega Evolution alters turn order --- include/constants/battle_config.h | 5 +++++ src/battle_main.c | 32 +++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/include/constants/battle_config.h b/include/constants/battle_config.h index 5e6c7d7293..cc331c3163 100644 --- a/include/constants/battle_config.h +++ b/include/constants/battle_config.h @@ -92,6 +92,11 @@ #define GEN_8 5 #endif + +// Mega Evolution settings +#define B_MEGA_EVO_ALTER_TURN_ORDER GEN_7 // In gen6, mega evolving doesn't change the turn order when mega evolving occurs. This is fixed in gen 7 + + // Calculation settings #define B_CRIT_CHANCE GEN_7 // Chances of a critical hit landing. See CalcCritChanceStage. #define B_CRIT_MULTIPLIER GEN_7 // In Gen6+, critical hits multiply damage by 1.5 instead of 2. diff --git a/src/battle_main.c b/src/battle_main.c index 5277ade1ea..f0a2ee0455 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -104,6 +104,7 @@ static void RunTurnActionsFunctions(void); static void SetActionsAndBattlersTurnOrder(void); static void sub_803CDF8(void); static bool8 AllAtActionConfirmed(void); +static void TryChangeTurnOrder(void); static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); static void CheckMegaEvolutionBeforeTurn(void); static void CheckQuickClaw_CustapBerryActivation(void); @@ -4688,10 +4689,41 @@ static void CheckMegaEvolutionBeforeTurn(void) } } + #if B_MEGA_EVO_ALTER_TURN_ORDER <= GEN_6 + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + gBattleStruct->focusPunchBattlerId = 0; + #else + gBattleMainFunc = TryChangeTurnOrder; // This will just do nothing if no mon has mega evolved + #endif +} + +// In gen7, priority and speed are recalculated during the turn in which a pokemon mega evolves +static void TryChangeTurnOrder(void) +{ + s32 i, j; + for (i = 0; i < gBattlersCount - 1; i++) + { + for (j = i + 1; j < gBattlersCount; j++) + { + u8 battler1 = gBattlerByTurnOrder[i]; + u8 battler2 = gBattlerByTurnOrder[j]; + if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM + && gActionsByTurnOrder[j] != B_ACTION_USE_ITEM + && gActionsByTurnOrder[i] != B_ACTION_SWITCH + && gActionsByTurnOrder[j] != B_ACTION_SWITCH + && gActionsByTurnOrder[i] != B_ACTION_THROW_BALL + && gActionsByTurnOrder[j] != B_ACTION_THROW_BALL) + { + if (GetWhoStrikesFirst(battler1, battler2, FALSE)) + SwapTurnOrder(i, j); + } + } + } gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; } + static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) { u32 i; From fa4d71817b975e1ae6514ab4582114a728d3ce94 Mon Sep 17 00:00:00 2001 From: kleeenexfeu <94004034+kleeenexfeu@users.noreply.github.com> Date: Fri, 19 Nov 2021 22:30:30 +0100 Subject: [PATCH 2/7] Spaces instead of tab --- src/battle_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index f0a2ee0455..3c000989bc 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4717,8 +4717,8 @@ static void TryChangeTurnOrder(void) if (GetWhoStrikesFirst(battler1, battler2, FALSE)) SwapTurnOrder(i, j); } - } - } + } + } gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; } From acddeeb1f92cd9e211710d28f1eef72885ff49fc Mon Sep 17 00:00:00 2001 From: kleeenexfeu <94004034+kleeenexfeu@users.noreply.github.com> Date: Fri, 19 Nov 2021 23:30:33 +0100 Subject: [PATCH 3/7] follow suggestion Co-authored-by: LOuroboros --- include/constants/battle_config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/constants/battle_config.h b/include/constants/battle_config.h index cc331c3163..13a59060ab 100644 --- a/include/constants/battle_config.h +++ b/include/constants/battle_config.h @@ -94,7 +94,7 @@ // Mega Evolution settings -#define B_MEGA_EVO_ALTER_TURN_ORDER GEN_7 // In gen6, mega evolving doesn't change the turn order when mega evolving occurs. This is fixed in gen 7 +#define B_MEGA_EVO_TURN_ORDER GEN_7 // In Gen7, a Pokémon's Speed after Mega Evolution is used to determine turn order, not its Speed before. // Calculation settings From c1743db19aa353aab5448ca3f8d4e40060b0db01 Mon Sep 17 00:00:00 2001 From: kleeenexfeu <94004034+kleeenexfeu@users.noreply.github.com> Date: Fri, 19 Nov 2021 23:30:45 +0100 Subject: [PATCH 4/7] follow suggestion Co-authored-by: LOuroboros --- src/battle_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_main.c b/src/battle_main.c index 3c000989bc..3737fcc543 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4689,7 +4689,7 @@ static void CheckMegaEvolutionBeforeTurn(void) } } - #if B_MEGA_EVO_ALTER_TURN_ORDER <= GEN_6 + #if B_MEGA_EVO_TURN_ORDER <= GEN_6 gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; #else From 6402a7ab6e0b01e319ba2753563475596310effc Mon Sep 17 00:00:00 2001 From: kleeenexfeu <94004034+kleeenexfeu@users.noreply.github.com> Date: Fri, 19 Nov 2021 23:42:20 +0100 Subject: [PATCH 5/7] follow suggestion Co-authored-by: LOuroboros --- include/constants/battle_config.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/constants/battle_config.h b/include/constants/battle_config.h index 13a59060ab..4ca3ae4dda 100644 --- a/include/constants/battle_config.h +++ b/include/constants/battle_config.h @@ -92,11 +92,9 @@ #define GEN_8 5 #endif - // Mega Evolution settings #define B_MEGA_EVO_TURN_ORDER GEN_7 // In Gen7, a Pokémon's Speed after Mega Evolution is used to determine turn order, not its Speed before. - // Calculation settings #define B_CRIT_CHANCE GEN_7 // Chances of a critical hit landing. See CalcCritChanceStage. #define B_CRIT_MULTIPLIER GEN_7 // In Gen6+, critical hits multiply damage by 1.5 instead of 2. From da20dae9c35f77616189c6cada31ab7d1e1166b9 Mon Sep 17 00:00:00 2001 From: kleeenexfeu <94004034+kleeenexfeu@users.noreply.github.com> Date: Sat, 20 Nov 2021 02:09:33 +0100 Subject: [PATCH 6/7] Only recalculate speed for battler choosing a move Other actions have priority --- src/battle_main.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index 3737fcc543..6caff36f50 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4707,12 +4707,8 @@ static void TryChangeTurnOrder(void) { u8 battler1 = gBattlerByTurnOrder[i]; u8 battler2 = gBattlerByTurnOrder[j]; - if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM - && gActionsByTurnOrder[j] != B_ACTION_USE_ITEM - && gActionsByTurnOrder[i] != B_ACTION_SWITCH - && gActionsByTurnOrder[j] != B_ACTION_SWITCH - && gActionsByTurnOrder[i] != B_ACTION_THROW_BALL - && gActionsByTurnOrder[j] != B_ACTION_THROW_BALL) + if (gActionsByTurnOrder[i] = B_ACTION_USE_MOVE + && gActionsByTurnOrder[j] = B_ACTION_USE_MOVE) { if (GetWhoStrikesFirst(battler1, battler2, FALSE)) SwapTurnOrder(i, j); From 62b31aec55cf20f6b972e5e633a3dec7d92efdfe Mon Sep 17 00:00:00 2001 From: kleeenexfeu <94004034+kleeenexfeu@users.noreply.github.com> Date: Sat, 20 Nov 2021 02:12:43 +0100 Subject: [PATCH 7/7] syntax --- src/battle_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index 6caff36f50..0c7f023bba 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4707,8 +4707,8 @@ static void TryChangeTurnOrder(void) { u8 battler1 = gBattlerByTurnOrder[i]; u8 battler2 = gBattlerByTurnOrder[j]; - if (gActionsByTurnOrder[i] = B_ACTION_USE_MOVE - && gActionsByTurnOrder[j] = B_ACTION_USE_MOVE) + if (gActionsByTurnOrder[i] == B_ACTION_USE_MOVE + && gActionsByTurnOrder[j] == B_ACTION_USE_MOVE) { if (GetWhoStrikesFirst(battler1, battler2, FALSE)) SwapTurnOrder(i, j);