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);