From 983f8e34a1db1dca31438b987529995e374eb2d1 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 26 May 2025 23:15:16 +0200 Subject: [PATCH] Fixes repeated learning of level up moves (#6981) --- include/battle.h | 3 ++- src/battle_script_commands.c | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/include/battle.h b/include/battle.h index 6de73a95f3..6b9609758b 100644 --- a/include/battle.h +++ b/include/battle.h @@ -385,7 +385,8 @@ struct BattleCallbacksStack struct StatsArray { u16 stats[NUM_STATS]; - u16 level; + u16 level:15; + u16 learnMultipleMoves:1; }; struct BattleResources diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index f419d298cb..ec9dd03601 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5155,6 +5155,7 @@ static void Cmd_getexp(void) gBattleResources->beforeLvlUp->stats[STAT_SPATK] = GetMonData(&gPlayerParty[*expMonId], MON_DATA_SPATK); gBattleResources->beforeLvlUp->stats[STAT_SPDEF] = GetMonData(&gPlayerParty[*expMonId], MON_DATA_SPDEF); gBattleResources->beforeLvlUp->level = currLvl; + gBattleResources->beforeLvlUp->learnMultipleMoves = FALSE; BtlController_EmitExpUpdate(gBattleStruct->expGetterBattlerId, B_COMM_TO_CONTROLLER, *expMonId, gBattleStruct->battlerExpReward); MarkBattlerForControllerExec(gBattleStruct->expGetterBattlerId); @@ -8501,11 +8502,13 @@ static void Cmd_handlelearnnewmove(void) u16 learnMove = MOVE_NONE; u32 monId = gBattleStruct->expGetterMonId; + u32 currLvl = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - if (B_LEVEL_UP_NOTIFICATION >= GEN_9) + if (!gBattleResources->beforeLvlUp->learnMultipleMoves && gBattleResources->beforeLvlUp->level != (currLvl - 1)) + gBattleResources->beforeLvlUp->learnMultipleMoves = TRUE; + + if (B_LEVEL_UP_NOTIFICATION >= GEN_9 && gBattleResources->beforeLvlUp->learnMultipleMoves) { - u32 currLvl = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - while (gBattleResources->beforeLvlUp->level <= currLvl) { learnMove = MonTryLearningNewMoveAtLevel(&gPlayerParty[monId], cmd->isFirstMove, gBattleResources->beforeLvlUp->level);