diff --git a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic8N.cs b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic8N.cs index 14f29dc2d..f86f93a52 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic8N.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStatic8N.cs @@ -52,22 +52,33 @@ protected override bool IsMatchLevel(PKM pkm, int lvl) if (rank > MaxRank) return false; if (rank < MinRank) // down-leveled - { - if (metLevel % 5 != 0) - return false; - - // shared nests can be down-leveled to any - if (pkm.Met_Location == SharedNest) - return met >= 20; - - // native down-levels: only allow 1 rank down (1 badge 2star -> 25), (3badge 3star -> 35) - return ((MinRank <= 1 && 1 <= MaxRank && met == 25) - || (MinRank <= 2 && 2 <= MaxRank && met == 35)) && !pkm.IsShiny; - } + return IsDownLeveled(pkm, metLevel, met); return metLevel % 10 <= 5; } + public bool IsDownLeveled(PKM pkm) + { + var met = pkm.Met_Level; + var metLevel = met - 15; + var rank = ((uint)metLevel) / 10; + return rank < MinRank && IsDownLeveled(pkm, metLevel, met); + } + + private bool IsDownLeveled(PKM pkm, int metLevel, int met) + { + if (metLevel % 5 != 0) + return false; + + // shared nests can be down-leveled to any + if (pkm.Met_Location == SharedNest) + return met >= 20; + + // native down-levels: only allow 1 rank down (1 badge 2star -> 25), (3badge 3star -> 35) + return ((MinRank <= 1 && 1 <= MaxRank && met == 25) + || (MinRank <= 2 && 2 <= MaxRank && met == 35)) && !pkm.IsShiny; + } + protected override bool IsMatchLocation(PKM pkm) { var loc = pkm.Met_Location; diff --git a/PKHeX.Core/Legality/Encounters/Information/ValidEncounterMoves.cs b/PKHeX.Core/Legality/Encounters/Information/ValidEncounterMoves.cs index 5da52916a..b78201ad5 100644 --- a/PKHeX.Core/Legality/Encounters/Information/ValidEncounterMoves.cs +++ b/PKHeX.Core/Legality/Encounters/Information/ValidEncounterMoves.cs @@ -33,8 +33,8 @@ private static void AddEdgeCaseMoves(List moves, IEncounterable encounter, { switch (encounter) { - case EncounterStatic8N r when !EncounterStatic8N.IsHighestLevelTier(pkm.Met_Level) && pkm.Met_Level % 5 == 0: // Downleveled Raid can happen for shared raids and self-hosted raids. - moves.AddRange(MoveLevelUp.GetMovesLevelUp(pkm, r.Species, -1, -1, 60, r.Form, GameVersion.SW, false, 8)); + case EncounterStatic8N r when !EncounterStatic8N.IsHighestLevelTier(pkm.Met_Level) && r.IsDownLeveled(pkm): // Downleveled Raid can happen for shared raids and self-hosted raids. + moves.AddRange(MoveLevelUp.GetMovesLevelUp(pkm, r.Species, -1, -1, r.LevelMax, r.Form, GameVersion.SW, false, 8)); break; } }