diff --git a/PKHeX.Core/Editing/PKM/EntityTemplates.cs b/PKHeX.Core/Editing/PKM/EntityTemplates.cs index 267eaafd1..50a0459fb 100644 --- a/PKHeX.Core/Editing/PKM/EntityTemplates.cs +++ b/PKHeX.Core/Editing/PKM/EntityTemplates.cs @@ -18,9 +18,7 @@ public static void TemplateFields(PKM pk, ITrainerInfo tr) if (pk.Format >= 4) pk.MetDate = EncounterDate.GetDate(pk.Context.GetConsole()); - if (tr.Game >= 0) - pk.Version = tr.Game; - + pk.Version = GetTemplateVersion(tr); pk.Species = GetTemplateSpecies(pk, tr); pk.Language = GetTemplateLanguage(tr); pk.Gender = pk.GetSaneGender(); @@ -41,6 +39,25 @@ public static void TemplateFields(PKM pk, ITrainerInfo tr) pk.RefreshChecksum(); } + private static int GetTemplateVersion(ITrainerInfo tr) + { + GameVersion version = (GameVersion)tr.Game; + if (version.IsValidSavedVersion()) + return (int)version; + + if (tr is IVersion v) + { + version = v.Version; + if (version.IsValidSavedVersion()) + return (int)version; + version = v.GetSingleVersion(); + if (version.IsValidSavedVersion()) + return (int)version; + } + + return default; // 0 + } + private static void ApplyTrashBytes(PKM pk, ITrainerInfo tr) { // Copy OT trash bytes for sensitive games (Gen1/2) diff --git a/PKHeX.Core/Legality/Encounters/Templates/Interfaces/Properties/IVersion.cs b/PKHeX.Core/Legality/Encounters/Templates/Interfaces/Properties/IVersion.cs index 9c8dc59c1..a827b33f2 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Interfaces/Properties/IVersion.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Interfaces/Properties/IVersion.cs @@ -22,11 +22,12 @@ public static GameVersion GetCompatibleVersion(this IVersion ver, GameVersion pr return ver.GetSingleVersion(); } - private static GameVersion GetSingleVersion(this IVersion ver) + public static GameVersion GetSingleVersion(this IVersion ver) { const int max = (int)GameUtil.HighestGameID; - if ((int)ver.Version <= max) - return ver.Version; + var v = ver.Version; + if (v.IsValidSavedVersion()) + return v; var rnd = Util.Rand; while (true) // this isn't optimal, but is low maintenance {