From 39ffda4245318e7d8c81f7d20e17164c7011ecbc Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 19 Nov 2025 15:14:59 +0100 Subject: [PATCH] Fixes End Turn Speed Order (#8289) --- src/battle_end_turn.c | 14 ++------------ test/battle/end_turn_effects.c | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/battle_end_turn.c b/src/battle_end_turn.c index d423659be9..62a8f67006 100644 --- a/src/battle_end_turn.c +++ b/src/battle_end_turn.c @@ -121,19 +121,9 @@ static bool32 HandleEndTurnOrder(u32 battler) gBattleTurnCounter++; gBattleStruct->endTurnEventsCounter++; - u32 i, j; - for (i = 0; i < gBattlersCount; i++) - { + for (u32 i = 0; i < gBattlersCount; i++) gBattlerByTurnOrder[i] = i; - } - for (i = 0; i < gBattlersCount - 1; i++) - { - for (j = i + 1; j < gBattlersCount; j++) - { - if (GetWhichBattlerFaster(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], FALSE) == -1) - SwapTurnOrder(i, j); - } - } + SortBattlersBySpeed(gBattlerByTurnOrder, FALSE); return effect; } diff --git a/test/battle/end_turn_effects.c b/test/battle/end_turn_effects.c index 51aa1e79bf..01c844f9b5 100644 --- a/test/battle/end_turn_effects.c +++ b/test/battle/end_turn_effects.c @@ -29,3 +29,27 @@ DOUBLE_BATTLE_TEST("End Turn Effects: First Event Block is executed correctly") } } +DOUBLE_BATTLE_TEST("End Turn Effects: Effects are applied by Speed Order") +{ + GIVEN { + PLAYER(SPECIES_WYNAUT) { MaxHP(200); HP(100); Speed(3); } + PLAYER(SPECIES_RILLABOOM) { MaxHP(200); HP(100); Speed(1); Ability(ABILITY_GRASSY_SURGE); } + OPPONENT(SPECIES_MEWTWO) { MaxHP(200); HP(100); Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(200); HP(100); Speed(4); } + } WHEN { + TURN { + MOVE(opponentLeft, MOVE_FAKE_OUT, target: playerLeft); + MOVE(playerRight, MOVE_FAKE_OUT, target: opponentRight); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponentLeft); + HP_BAR(playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, playerRight); + HP_BAR(opponentRight); + + HP_BAR(opponentRight); + HP_BAR(playerLeft); + HP_BAR(opponentLeft); + HP_BAR(playerRight); + } +}