From acf811f5c19686f7f7a08daf5614737f1c7672c8 Mon Sep 17 00:00:00 2001 From: Kurt Date: Mon, 4 Jan 2021 15:38:30 -0800 Subject: [PATCH] Permit all generations prior to requested generation for know move check --- PKHeX.Core/Legality/Core.cs | 12 ++++++++++-- PKHeX.Core/Legality/Verifiers/MemoryVerifier.cs | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/PKHeX.Core/Legality/Core.cs b/PKHeX.Core/Legality/Core.cs index 1590efdb9..57955cbe9 100644 --- a/PKHeX.Core/Legality/Core.cs +++ b/PKHeX.Core/Legality/Core.cs @@ -132,7 +132,7 @@ internal static bool GetCanRelearnMove(PKM pkm, int move, int generation, IReadO return MoveList.GetValidMoves(pkm, version, evos, generation, types: MoveSourceType.Reminder).Contains(move); } - internal static bool GetCanKnowMove(PKM pkm, int move, int generation, IReadOnlyList evos, GameVersion version = GameVersion.Any) + internal static bool GetCanKnowMove(PKM pkm, int move, int generation, IReadOnlyList> evos, GameVersion version = GameVersion.Any) { if (pkm.Species == (int)Species.Smeargle) return !InvalidSketch.Contains(move); @@ -140,7 +140,15 @@ internal static bool GetCanKnowMove(PKM pkm, int move, int generation, IReadOnly if (generation >= 8 && MoveEgg.GetIsSharedEggMove(pkm, generation, move)) return true; - return MoveList.GetValidMoves(pkm, version, evos, generation, types: MoveSourceType.All).Contains(move); + if (evos.Count <= generation) + return false; + for (int i = 1; i <= generation; i++) + { + var moves = MoveList.GetValidMoves(pkm, version, evos[i], i, types: MoveSourceType.All); + if (moves.Contains(move)) + return true; + } + return false; } internal static bool IsCatchRateHeldItem(int rate) => ParseSettings.AllowGen1Tradeback && HeldItems_GSC.Contains((ushort) rate); diff --git a/PKHeX.Core/Legality/Verifiers/MemoryVerifier.cs b/PKHeX.Core/Legality/Verifiers/MemoryVerifier.cs index 6d526fd3d..59ccf9051 100644 --- a/PKHeX.Core/Legality/Verifiers/MemoryVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/MemoryVerifier.cs @@ -94,7 +94,7 @@ private static bool CanKnowMove(PKM pkm, MemoryVariableSet memory, int gen, Lega if (pkm.HasMove(move)) return true; - if (Legal.GetCanKnowMove(pkm, memory.Variable, gen, info.EvoChainsAllGens[gen])) + if (Legal.GetCanKnowMove(pkm, memory.Variable, gen, info.EvoChainsAllGens)) return true; var enc = info.EncounterMatch;