Fixes Uproar not waking up mons (#7714)

This commit is contained in:
Alex 2025-09-12 17:42:41 +02:00 committed by GitHub
parent 5aac8bb7e4
commit 2f22780c17
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 28 additions and 15 deletions

View File

@ -6735,7 +6735,7 @@ BattleScript_MoveUsedWokeUp::
BattleScript_MonWokeUpInUproar::
printstring STRINGID_PKMNWOKEUPINUPROAR
waitmessage B_WAIT_TIME_LONG
updatestatusicon BS_ATTACKER
updatestatusicon BS_EFFECT_BATTLER
end2
BattleScript_PoisonTurnDmg::

View File

@ -1370,25 +1370,22 @@ static bool32 HandleEndTurnThirdEventBlock(u32 battler)
case THIRD_EVENT_BLOCK_UPROAR:
if (gBattleMons[battler].volatiles.uproarTurns)
{
for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount; gBattlerAttacker++)
for (gEffectBattler = 0; gEffectBattler < gBattlersCount; gEffectBattler++)
{
if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)
&& GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF)
if ((gBattleMons[gEffectBattler].status1 & STATUS1_SLEEP)
&& GetBattlerAbility(gEffectBattler) != ABILITY_SOUNDPROOF)
{
gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_SLEEP;
gBattleMons[gBattlerAttacker].volatiles.nightmare = FALSE;
gBattleMons[gEffectBattler].status1 &= ~STATUS1_SLEEP;
gBattleMons[gEffectBattler].volatiles.nightmare = FALSE;
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
BattleScriptExecute(BattleScript_MonWokeUpInUproar);
BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBattlerAttacker].status1);
MarkBattlerForControllerExec(gBattlerAttacker);
BtlController_EmitSetMonData(gEffectBattler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBattlerAttacker].status1);
MarkBattlerForControllerExec(gEffectBattler);
effect = TRUE;
break;
}
}
if (gBattlerAttacker != gBattlersCount)
{
break;
}
else
if (effect == FALSE)
{
gBattlerAttacker = battler;
gBattleMons[battler].volatiles.uproarTurns--; // uproar timer goes down

View File

@ -270,7 +270,7 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] =
[STRINGID_PKMNFASTASLEEP] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is fast asleep."),
[STRINGID_PKMNWOKEUP] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} woke up!"),
[STRINGID_PKMNUPROARKEPTAWAKE] = COMPOUND_STRING("But the uproar kept {B_SCR_NAME_WITH_PREFIX2} awake!"),
[STRINGID_PKMNWOKEUPINUPROAR] = COMPOUND_STRING("The uproar woke {B_ATK_NAME_WITH_PREFIX2}!"),
[STRINGID_PKMNWOKEUPINUPROAR] = COMPOUND_STRING("The uproar woke {B_EFF_NAME_WITH_PREFIX2}!"),
[STRINGID_PKMNCAUSEDUPROAR] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} caused an uproar!"),
[STRINGID_PKMNMAKINGUPROAR] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is making an uproar!"),
[STRINGID_PKMNCALMEDDOWN] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} calmed down."),

View File

@ -1956,6 +1956,7 @@ static enum MoveCanceller CancellerAsleepOrFrozen(void)
TryDeactivateSleepClause(GetBattlerSide(gBattlerAttacker), gBattlerPartyIndexes[gBattlerAttacker]);
gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_SLEEP;
gBattleMons[gBattlerAttacker].volatiles.nightmare = FALSE;
gEffectBattler = gBattlerAttacker;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WOKE_UP_UPROAR;
BattleScriptCall(BattleScript_MoveUsedWokeUp);
return MOVE_STEP_REMOVES_STATUS;

View File

@ -132,6 +132,7 @@ u32 BattlePalace_TryEscapeStatus(u8 battler)
if (UproarWakeUpCheck(battler))
{
// Wake up from Uproar
gEffectBattler = battler;
gBattleMons[battler].status1 &= ~(STATUS1_SLEEP);
gBattleMons[battler].volatiles.nightmare = FALSE;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WOKE_UP_UPROAR;

View File

@ -27,3 +27,17 @@ DOUBLE_BATTLE_TEST("Uproar status causes sleeping Pokémon to wake up during an
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight);
}
}
SINGLE_BATTLE_TEST("Uproar wakes up other pokemon on field")
{
GIVEN {
ASSUME(B_UPROAR_TURNS >= GEN_5);
PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_UPROAR); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_UPROAR, opponent);
MESSAGE("The uproar woke Wobbuffet!");
}
}

View File

@ -690,7 +690,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo
ASSUME(GetMoveEffect(MOVE_UPROAR) == EFFECT_UPROAR);
PLAYER(SPECIES_ZIGZAGOON);
PLAYER(SPECIES_ZIGZAGOON);
PLAYER(SPECIES_ZIGZAGOON);
PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_CELEBRATE); }
OPPONENT(SPECIES_ZIGZAGOON);
OPPONENT(SPECIES_ZIGZAGOON);
} WHEN {