diff --git a/PKHeX/Legality/Analysis.cs b/PKHeX/Legality/Analysis.cs index 4f2c48dd6..84e7782bf 100644 --- a/PKHeX/Legality/Analysis.cs +++ b/PKHeX/Legality/Analysis.cs @@ -66,8 +66,8 @@ public LegalityAnalysis(PKM pk) } catch { Valid = false; } getLegalityReport(); - AllSuggestedMoves = getSuggestedMoves(true, true); - AllSuggestedRelearnMoves = Legal.getValidRelearn(pkm, -1).ToArray(); + AllSuggestedMoves = !isOriginValid(pkm) ? new int[4] : getSuggestedMoves(true, true); + AllSuggestedRelearnMoves = !isOriginValid(pkm) ? new int[4] : Legal.getValidRelearn(pkm, -1).ToArray(); AllSuggestedMovesAndRelearn = AllSuggestedMoves.Concat(AllSuggestedRelearnMoves).ToArray(); } @@ -82,7 +82,7 @@ private void AddLine(CheckResult chk) private void parsePK6(PKM pk) { pkm = pk; - if (pkm.Species > 721) + if (!isOriginValid(pkm)) { AddLine(Severity.Invalid, "Species does not exist in origin game.", CheckIdentifier.None); return; } updateRelearnLegality(); @@ -92,13 +92,27 @@ private void parsePK6(PKM pk) private void parsePK7(PKM pk) { pkm = pk; - if (pkm.Species > 802) + if (!isOriginValid(pkm)) { AddLine(Severity.Invalid, "Species does not exist in origin game.", CheckIdentifier.None); return; } updateRelearnLegality(); updateMoveLegality(); updateChecks(); } + private bool isOriginValid(PKM pk) + { + switch (pkm.GenNumber) + { + case 1: return pkm.Species <= 151; + case 2: return pkm.Species <= 251; + case 3: return pkm.Species <= 386; + case 4: return pkm.Species <= 493; + case 5: return pkm.Species <= 649; + case 6: return pkm.Species <= 721; + case 7: return pkm.Species <= 802; + default: return false; + } + } private void updateRelearnLegality() { @@ -196,9 +210,7 @@ private string getVerboseLegalityReport() public int[] getSuggestedRelearn() { - if (RelearnBase == null) - return new int[4]; - if (pkm.GenNumber < 6) + if (RelearnBase == null || pkm.GenNumber < 6 || !isOriginValid(pkm)) return new int[4]; if (!pkm.WasEgg) @@ -216,7 +228,7 @@ public int[] getSuggestedRelearn() } public int[] getSuggestedMoves(bool tm, bool tutor) { - if (pkm == null || pkm.Format < 6) + if (pkm == null || pkm.GenNumber < 6 || !isOriginValid(pkm)) return null; return Legal.getValidMoves(pkm, Tutor: tutor, Machine: tm).Skip(1).ToArray(); // skip move 0 }