diff --git a/PKHeX.Core/Legality/Structures/ITrainerInfo.cs b/PKHeX.Core/Legality/Structures/ITrainerInfo.cs
new file mode 100644
index 000000000..f5d927af8
--- /dev/null
+++ b/PKHeX.Core/Legality/Structures/ITrainerInfo.cs
@@ -0,0 +1,21 @@
+namespace PKHeX.Core
+{
+ ///
+ /// Minimal Trainer Information necessary for generating a .
+ ///
+ public interface ITrainerInfo
+ {
+ string OT { get; }
+ ushort TID { get; }
+ ushort SID { get; }
+ int Gender { get; }
+ int Game { get; }
+ int Language { get; }
+
+ int Country { get; }
+ int SubRegion { get; }
+ int ConsoleRegion { get; }
+
+ int Generation { get; }
+ }
+}
\ No newline at end of file
diff --git a/PKHeX.Core/MysteryGifts/MysteryGift.cs b/PKHeX.Core/MysteryGifts/MysteryGift.cs
index 3b5716cf1..9b720dddc 100644
--- a/PKHeX.Core/MysteryGifts/MysteryGift.cs
+++ b/PKHeX.Core/MysteryGifts/MysteryGift.cs
@@ -80,7 +80,7 @@ public static MysteryGift GetMysteryGift(byte[] data)
public string Extension => GetType().Name.ToLower();
public string FileName => $"{CardHeader}.{Extension}";
public byte[] Data { get; set; }
- public abstract PKM ConvertToPKM(SaveFile SAV);
+ public abstract PKM ConvertToPKM(ITrainerInfo sav);
public abstract int Format { get; }
///
diff --git a/PKHeX.Core/MysteryGifts/PGF.cs b/PKHeX.Core/MysteryGifts/PGF.cs
index ba6334f19..36c5b55ec 100644
--- a/PKHeX.Core/MysteryGifts/PGF.cs
+++ b/PKHeX.Core/MysteryGifts/PGF.cs
@@ -149,7 +149,7 @@ public override int CardID
public override bool IsItem { get => CardType == 2; set { if (value) CardType = 2; } }
public bool IsPower { get => CardType == 3; set { if (value) CardType = 3; } }
- public override PKM ConvertToPKM(SaveFile SAV)
+ public override PKM ConvertToPKM(ITrainerInfo SAV)
{
if (!IsPokémon)
return null;
diff --git a/PKHeX.Core/MysteryGifts/PGT.cs b/PKHeX.Core/MysteryGifts/PGT.cs
index b5fd735b9..5ebf6590d 100644
--- a/PKHeX.Core/MysteryGifts/PGT.cs
+++ b/PKHeX.Core/MysteryGifts/PGT.cs
@@ -112,7 +112,7 @@ public bool GiftEquals(PGT pgt)
return true;
}
- public override PKM ConvertToPKM(SaveFile SAV)
+ public override PKM ConvertToPKM(ITrainerInfo SAV)
{
return Gift.ConvertToPKM(SAV);
}
@@ -233,7 +233,7 @@ private void EncryptPK()
public override int Location { get => PK.Met_Location; set => PK.Met_Location = value; }
public override int EggLocation { get => PK.Egg_Location; set => PK.Egg_Location = value; }
- public override PKM ConvertToPKM(SaveFile SAV)
+ public override PKM ConvertToPKM(ITrainerInfo SAV)
{
if (!IsPokémon)
return null;
diff --git a/PKHeX.Core/MysteryGifts/WC3.cs b/PKHeX.Core/MysteryGifts/WC3.cs
index 492891917..805dec8de 100644
--- a/PKHeX.Core/MysteryGifts/WC3.cs
+++ b/PKHeX.Core/MysteryGifts/WC3.cs
@@ -60,9 +60,8 @@ public int Met_Level
set => _metLevel = value;
}
- public override PKM ConvertToPKM(SaveFile SAV)
+ public override PKM ConvertToPKM(ITrainerInfo SAV)
{
- var pi = SAV.Personal.GetFormeEntry(Species, 0);
PK3 pk = new PK3
{
Species = Species,
@@ -82,6 +81,7 @@ public override PKM ConvertToPKM(SaveFile SAV)
FatefulEncounter = Fateful,
};
+ var pi = pk.PersonalInfo;
if (Version == 0)
{
diff --git a/PKHeX.Core/MysteryGifts/WC6.cs b/PKHeX.Core/MysteryGifts/WC6.cs
index ff7c2f559..e52fe934b 100644
--- a/PKHeX.Core/MysteryGifts/WC6.cs
+++ b/PKHeX.Core/MysteryGifts/WC6.cs
@@ -278,7 +278,7 @@ public override int[] RelearnMoves
}
}
- public override PKM ConvertToPKM(SaveFile SAV)
+ public override PKM ConvertToPKM(ITrainerInfo SAV)
{
if (!IsPokémon)
return null;
diff --git a/PKHeX.Core/MysteryGifts/WC7.cs b/PKHeX.Core/MysteryGifts/WC7.cs
index ec32ac5da..ba44119b7 100644
--- a/PKHeX.Core/MysteryGifts/WC7.cs
+++ b/PKHeX.Core/MysteryGifts/WC7.cs
@@ -302,7 +302,7 @@ public override int[] RelearnMoves
}
}
- public override PKM ConvertToPKM(SaveFile SAV)
+ public override PKM ConvertToPKM(ITrainerInfo SAV)
{
if (!IsPokémon)
return null;
diff --git a/PKHeX.Core/Saves/SaveFile.cs b/PKHeX.Core/Saves/SaveFile.cs
index bf61c20e4..3b25e71d0 100644
--- a/PKHeX.Core/Saves/SaveFile.cs
+++ b/PKHeX.Core/Saves/SaveFile.cs
@@ -8,7 +8,7 @@ namespace PKHeX.Core
///
/// Base Class for Save Files
///
- public abstract class SaveFile
+ public abstract class SaveFile : ITrainerInfo
{
public static bool SetUpdateDex { protected get; set; } = true;
public static bool SetUpdatePKM { protected get; set; } = true;