diff --git a/PKHeX.Core/Legality/Encounters/Generator/EncounterMovesetGenerator.cs b/PKHeX.Core/Legality/Encounters/Generator/EncounterMovesetGenerator.cs
index f0dfc965d..a2981e182 100644
--- a/PKHeX.Core/Legality/Encounters/Generator/EncounterMovesetGenerator.cs
+++ b/PKHeX.Core/Legality/Encounters/Generator/EncounterMovesetGenerator.cs
@@ -14,6 +14,32 @@ public static class EncounterMovesetGenerator
///
private static readonly GameVersion[] Versions = ((GameVersion[]) Enum.GetValues(typeof(GameVersion))).Where(z => z < GameVersion.RB && z > 0).Reverse().ToArray();
+ ///
+ /// Gets possible objects that allow all moves requested to be learned.
+ ///
+ /// Rough Pokémon data which contains the requested species, gender, and form.
+ /// Trainer information of the receiver.
+ /// Moves that the resulting must be able to learn.
+ /// Any specific version(s) to iterate for. If left blank, all will be checked.
+ /// A consumable list of possible results.
+ public static IEnumerable GeneratePKMs(PKM pk, ITrainerInfo info, int[] moves = null, params GameVersion[] versions)
+ {
+ var m = moves ?? pk.Moves;
+ var vers = versions?.Length >= 1 ? versions : Versions.Where(z => z <= (GameVersion) pk.MaxGameID);
+ foreach (var ver in vers)
+ {
+ var encs = GenerateVersionEncounters(pk, m, ver);
+ foreach (var enc in encs)
+ {
+ var result = enc.ConvertToPKM(info);
+ result.Version = (int)ver; // some encounters don't have explicit versions defined, provide one
+ if (result.GenNumber <= 2)
+ result.SID = 0;
+ yield return result;
+ }
+ }
+ }
+
///
/// Gets possible encounters that allow all moves requested to be learned.
///
@@ -23,7 +49,9 @@ public static class EncounterMovesetGenerator
/// A consumable list of possible encounters.
public static IEnumerable GenerateEncounters(PKM pk, int[] moves = null, params GameVersion[] versions)
{
- return (versions ?? Versions).SelectMany(ver => GenerateVersionEncounters(pk, moves ?? pk.Moves, ver));
+ var m = moves ?? pk.Moves;
+ var vers = versions?.Length >= 1 ? versions : Versions.Where(z => z <= (GameVersion)pk.MaxGameID);
+ return vers.SelectMany(ver => GenerateVersionEncounters(pk, m, ver));
}
///
diff --git a/Tests/PKHeX.Tests/Simulator/ShowdownSetTests.cs b/Tests/PKHeX.Tests/Simulator/ShowdownSetTests.cs
index a92fd84d3..5242f65d4 100644
--- a/Tests/PKHeX.Tests/Simulator/ShowdownSetTests.cs
+++ b/Tests/PKHeX.Tests/Simulator/ShowdownSetTests.cs
@@ -37,6 +37,10 @@ public void SimulatorGetEncounters()
var la = new LegalityAnalysis(pk);
Assert.IsTrue(la.Valid);
+
+ var test = EncounterMovesetGenerator.GeneratePKMs(pk7, info);
+ var la2 = new LegalityAnalysis(test.First());
+ Assert.IsTrue(la2.Valid);
}
private const string SetGlaceonUSUMTutor =