diff --git a/PKHeX.Core/Legality/Structures/ITrainerInfo.cs b/PKHeX.Core/Legality/Structures/ITrainerInfo.cs
index e5d7e1ee6..70648de37 100644
--- a/PKHeX.Core/Legality/Structures/ITrainerInfo.cs
+++ b/PKHeX.Core/Legality/Structures/ITrainerInfo.cs
@@ -3,11 +3,9 @@ namespace PKHeX.Core
///
/// Minimal Trainer Information necessary for generating a .
///
- public interface ITrainerInfo
+ public interface ITrainerInfo : ITrainerID
{
string OT { get; }
- ushort TID { get; }
- ushort SID { get; }
int Gender { get; }
int Game { get; }
int Language { get; }
diff --git a/PKHeX.Core/Legality/Structures/SimpleTrainerInfo.cs b/PKHeX.Core/Legality/Structures/SimpleTrainerInfo.cs
index da39a6775..a67a4b688 100644
--- a/PKHeX.Core/Legality/Structures/SimpleTrainerInfo.cs
+++ b/PKHeX.Core/Legality/Structures/SimpleTrainerInfo.cs
@@ -3,8 +3,8 @@
public class SimpleTrainerInfo : ITrainerInfo
{
public string OT { get; set; } = "PKHeX";
- public ushort TID { get; set; } = 12345;
- public ushort SID { get; set; } = 54321;
+ public int TID { get; set; } = 12345;
+ public int SID { get; set; } = 54321;
public int Gender { get; set; } = 0;
public int Language { get; set; } = (int)LanguageID.English;
diff --git a/PKHeX.Core/PKM/PKM.cs b/PKHeX.Core/PKM/PKM.cs
index 5ff78885b..040c3e9bc 100644
--- a/PKHeX.Core/PKM/PKM.cs
+++ b/PKHeX.Core/PKM/PKM.cs
@@ -6,7 +6,7 @@ namespace PKHeX.Core
///
/// Object representing a 's data and derived properties.
///
- public abstract class PKM : IContestStats
+ public abstract class PKM : IContestStats, ITrainerID
{
public static readonly string[] Extensions = PKX.GetPKMExtensions();
public abstract int SIZE_PARTY { get; }
diff --git a/PKHeX.Core/PKM/Shared/ITrainerID.cs b/PKHeX.Core/PKM/Shared/ITrainerID.cs
new file mode 100644
index 000000000..7a9281d03
--- /dev/null
+++ b/PKHeX.Core/PKM/Shared/ITrainerID.cs
@@ -0,0 +1,11 @@
+namespace PKHeX.Core
+{
+ ///
+ /// Object has Trainer ownership
+ ///
+ public interface ITrainerID
+ {
+ int TID { get; set; }
+ int SID { get; set; }
+ }
+}
diff --git a/PKHeX.Core/Saves/SAV1.cs b/PKHeX.Core/Saves/SAV1.cs
index 149024757..48d3c67c7 100644
--- a/PKHeX.Core/Saves/SAV1.cs
+++ b/PKHeX.Core/Saves/SAV1.cs
@@ -249,16 +249,12 @@ namespace PKHeX.Core
get => 0;
set { }
}
- public override ushort TID
+ public override int TID
{
get => BigEndian.ToUInt16(Data, Japanese ? 0x25FB : 0x2605);
- set => BigEndian.GetBytes(value).CopyTo(Data, Japanese ? 0x25FB : 0x2605);
- }
- public override ushort SID
- {
- get => 0;
- set { }
+ set => BigEndian.GetBytes((ushort)value).CopyTo(Data, Japanese ? 0x25FB : 0x2605);
}
+ public override int SID { get => 0; set { } }
public bool Yellow => Starter == 0x54; // Pikachu
public int Starter => Data[Japanese ? 0x29B9 : 0x29C3];
diff --git a/PKHeX.Core/Saves/SAV2.cs b/PKHeX.Core/Saves/SAV2.cs
index e58cc683e..26d943c64 100644
--- a/PKHeX.Core/Saves/SAV2.cs
+++ b/PKHeX.Core/Saves/SAV2.cs
@@ -282,15 +282,11 @@ namespace PKHeX.Core
Data[Offsets.Palette] = (byte) value;
}
}
- public override ushort TID
+ public override int TID
{
- get => BigEndian.ToUInt16(Data, Offsets.Trainer1); set => BigEndian.GetBytes(value).CopyTo(Data, Offsets.Trainer1);
- }
- public override ushort SID
- {
- get => 0;
- set { }
+ get => BigEndian.ToUInt16(Data, Offsets.Trainer1); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, Offsets.Trainer1);
}
+ public override int SID { get => 0; set { } }
public override int PlayedHours
{
get => BigEndian.ToUInt16(Data, Offsets.TimePlayed);
diff --git a/PKHeX.Core/Saves/SAV3.cs b/PKHeX.Core/Saves/SAV3.cs
index 4450dec07..7a385e265 100644
--- a/PKHeX.Core/Saves/SAV3.cs
+++ b/PKHeX.Core/Saves/SAV3.cs
@@ -287,15 +287,15 @@ namespace PKHeX.Core
get => Data[BlockOfs[0] + 8];
set => Data[BlockOfs[0] + 8] = (byte)value;
}
- public override ushort TID
+ public override int TID
{
get => BitConverter.ToUInt16(Data, BlockOfs[0] + 0xA + 0);
- set => BitConverter.GetBytes(value).CopyTo(Data, BlockOfs[0] + 0xA + 0);
+ set => BitConverter.GetBytes((ushort)value).CopyTo(Data, BlockOfs[0] + 0xA + 0);
}
- public override ushort SID
+ public override int SID
{
get => BitConverter.ToUInt16(Data, BlockOfs[0] + 0xC);
- set => BitConverter.GetBytes(value).CopyTo(Data, BlockOfs[0] + 0xC);
+ set => BitConverter.GetBytes((ushort)value).CopyTo(Data, BlockOfs[0] + 0xC);
}
public override int PlayedHours
{
diff --git a/PKHeX.Core/Saves/SAV3Colosseum.cs b/PKHeX.Core/Saves/SAV3Colosseum.cs
index 30fcbbeca..d177e82c7 100644
--- a/PKHeX.Core/Saves/SAV3Colosseum.cs
+++ b/PKHeX.Core/Saves/SAV3Colosseum.cs
@@ -351,8 +351,8 @@ namespace PKHeX.Core
// Trainer Info (offset 0x78, length 0xB18, end @ 0xB90)
public override string OT { get => GetString(0x78, 20); set { SetString(value, 10).CopyTo(Data, 0x78); OT2 = value; } }
private string OT2 { get => GetString(0x8C, 20); set => SetString(value, 10).CopyTo(Data, 0x8C); }
- public override ushort SID { get => BigEndian.ToUInt16(Data, 0xA4); set => BigEndian.GetBytes(value).CopyTo(Data, 0xA4); }
- public override ushort TID { get => BigEndian.ToUInt16(Data, 0xA6); set => BigEndian.GetBytes(value).CopyTo(Data, 0xA6); }
+ public override int SID { get => BigEndian.ToUInt16(Data, 0xA4); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, 0xA4); }
+ public override int TID { get => BigEndian.ToUInt16(Data, 0xA6); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, 0xA6); }
public override int Gender { get => Data[0xAF8]; set => Data[0xAF8] = (byte)value; }
public override uint Money { get => BigEndian.ToUInt32(Data, 0xAFC); set => BigEndian.GetBytes(value).CopyTo(Data, 0xAFC); }
diff --git a/PKHeX.Core/Saves/SAV3XD.cs b/PKHeX.Core/Saves/SAV3XD.cs
index e070e2f44..85a5efbd6 100644
--- a/PKHeX.Core/Saves/SAV3XD.cs
+++ b/PKHeX.Core/Saves/SAV3XD.cs
@@ -237,8 +237,8 @@ namespace PKHeX.Core
// Trainer Info
public override GameVersion Version { get => GameVersion.XD; protected set { } }
public override string OT { get => GetString(Trainer1 + 0x00, 20); set => SetString(value, 10).CopyTo(Data, Trainer1 + 0x00); }
- public override ushort SID { get => BigEndian.ToUInt16(Data, Trainer1 + 0x2C); set => BigEndian.GetBytes(value).CopyTo(Data, Trainer1 + 0x2C); }
- public override ushort TID { get => BigEndian.ToUInt16(Data, Trainer1 + 0x2E); set => BigEndian.GetBytes(value).CopyTo(Data, Trainer1 + 0x2E); }
+ public override int SID { get => BigEndian.ToUInt16(Data, Trainer1 + 0x2C); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, Trainer1 + 0x2C); }
+ public override int TID { get => BigEndian.ToUInt16(Data, Trainer1 + 0x2E); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, Trainer1 + 0x2E); }
public override int Gender { get => Data[Trainer1 + 0x8E0]; set => Data[Trainer1 + 0x8E0] = (byte)value; }
public override uint Money { get => BigEndian.ToUInt32(Data, Trainer1 + 0x8E4); set => BigEndian.GetBytes(value).CopyTo(Data, Trainer1 + 0x8E4); }
diff --git a/PKHeX.Core/Saves/SAV4.cs b/PKHeX.Core/Saves/SAV4.cs
index 99d06e1fc..b4f80bc70 100644
--- a/PKHeX.Core/Saves/SAV4.cs
+++ b/PKHeX.Core/Saves/SAV4.cs
@@ -340,15 +340,15 @@ namespace PKHeX.Core
get => GetString(Trainer1, 16);
set => SetString(value, OTLength).CopyTo(Data, Trainer1);
}
- public override ushort TID
+ public override int TID
{
get => BitConverter.ToUInt16(Data, Trainer1 + 0x10 + 0);
- set => BitConverter.GetBytes(value).CopyTo(Data, Trainer1 + 0x10 + 0);
+ set => BitConverter.GetBytes((ushort)value).CopyTo(Data, Trainer1 + 0x10 + 0);
}
- public override ushort SID
+ public override int SID
{
get => BitConverter.ToUInt16(Data, Trainer1 + 0x12);
- set => BitConverter.GetBytes(value).CopyTo(Data, Trainer1 + 0x12);
+ set => BitConverter.GetBytes((ushort)value).CopyTo(Data, Trainer1 + 0x12);
}
public override uint Money
{
diff --git a/PKHeX.Core/Saves/SAV5.cs b/PKHeX.Core/Saves/SAV5.cs
index ed62df32a..3dce4b219 100644
--- a/PKHeX.Core/Saves/SAV5.cs
+++ b/PKHeX.Core/Saves/SAV5.cs
@@ -310,15 +310,15 @@ namespace PKHeX.Core
get => GetString(Trainer1 + 0x4, 16);
set => SetString(value, OTLength).CopyTo(Data, Trainer1 + 0x4);
}
- public override ushort TID
+ public override int TID
{
get => BitConverter.ToUInt16(Data, Trainer1 + 0x14 + 0);
- set => BitConverter.GetBytes(value).CopyTo(Data, Trainer1 + 0x14 + 0);
+ set => BitConverter.GetBytes((ushort)value).CopyTo(Data, Trainer1 + 0x14 + 0);
}
- public override ushort SID
+ public override int SID
{
get => BitConverter.ToUInt16(Data, Trainer1 + 0x14 + 2);
- set => BitConverter.GetBytes(value).CopyTo(Data, Trainer1 + 0x14 + 2);
+ set => BitConverter.GetBytes((ushort)value).CopyTo(Data, Trainer1 + 0x14 + 2);
}
public override uint Money
{
diff --git a/PKHeX.Core/Saves/SAV6.cs b/PKHeX.Core/Saves/SAV6.cs
index 8d9bbca41..9d5d25814 100644
--- a/PKHeX.Core/Saves/SAV6.cs
+++ b/PKHeX.Core/Saves/SAV6.cs
@@ -247,15 +247,15 @@ namespace PKHeX.Core
}
// Player Information
- public override ushort TID
+ public override int TID
{
get => BitConverter.ToUInt16(Data, TrainerCard + 0);
- set => BitConverter.GetBytes(value).CopyTo(Data, TrainerCard + 0);
+ set => BitConverter.GetBytes((ushort)value).CopyTo(Data, TrainerCard + 0);
}
- public override ushort SID
+ public override int SID
{
get => BitConverter.ToUInt16(Data, TrainerCard + 2);
- set => BitConverter.GetBytes(value).CopyTo(Data, TrainerCard + 2);
+ set => BitConverter.GetBytes((ushort)value).CopyTo(Data, TrainerCard + 2);
}
public override int Game
{
diff --git a/PKHeX.Core/Saves/SAV7.cs b/PKHeX.Core/Saves/SAV7.cs
index 1f23f9339..814fb49cb 100644
--- a/PKHeX.Core/Saves/SAV7.cs
+++ b/PKHeX.Core/Saves/SAV7.cs
@@ -280,15 +280,15 @@ namespace PKHeX.Core
}
// Player Information
- public override ushort TID
+ public override int TID
{
get => BitConverter.ToUInt16(Data, TrainerCard + 0);
- set => BitConverter.GetBytes(value).CopyTo(Data, TrainerCard + 0);
+ set => BitConverter.GetBytes((ushort)value).CopyTo(Data, TrainerCard + 0);
}
- public override ushort SID
+ public override int SID
{
get => BitConverter.ToUInt16(Data, TrainerCard + 2);
- set => BitConverter.GetBytes(value).CopyTo(Data, TrainerCard + 2);
+ set => BitConverter.GetBytes((ushort)value).CopyTo(Data, TrainerCard + 2);
}
public override int Game
{
diff --git a/PKHeX.Core/Saves/SaveFile.cs b/PKHeX.Core/Saves/SaveFile.cs
index a4db3020a..a33fb6a9b 100644
--- a/PKHeX.Core/Saves/SaveFile.cs
+++ b/PKHeX.Core/Saves/SaveFile.cs
@@ -362,8 +362,8 @@ namespace PKHeX.Core
public virtual int Gender { get; set; }
public virtual int Language { get => -1; set { } }
public virtual int Game { get => -1; set { } }
- public virtual ushort TID { get; set; }
- public virtual ushort SID { get; set; }
+ public virtual int TID { get; set; }
+ public virtual int SID { get; set; }
public int TrainerID7 => (int)((uint)(TID | (SID << 16)) % 1000000);
public virtual string OT { get; set; } = "PKHeX";
public virtual int PlayedHours { get; set; }
diff --git a/PKHeX.WinForms/Controls/PKM Editor/TrainerID.cs b/PKHeX.WinForms/Controls/PKM Editor/TrainerID.cs
index 73aff7e55..c5345763f 100644
--- a/PKHeX.WinForms/Controls/PKM Editor/TrainerID.cs
+++ b/PKHeX.WinForms/Controls/PKM Editor/TrainerID.cs
@@ -11,39 +11,42 @@ namespace PKHeX.WinForms.Controls
public event EventHandler UpdatedID;
private int Format = -1;
- private PKM pkm;
+ private ITrainerID Trainer;
private readonly ToolTip TSVTooltip = new ToolTip();
public void UpdateTSV()
{
+ if (!(Trainer is PKM pkm))
+ return;
string IDstr = $"TSV: {pkm.TSV:d4}";
TSVTooltip.SetToolTip(TB_TID, IDstr);
TSVTooltip.SetToolTip(TB_SID, IDstr);
TSVTooltip.SetToolTip(TB_TID7, IDstr);
TSVTooltip.SetToolTip(TB_SID7, IDstr);
}
- public void LoadIDValues(PKM pk)
+ public void LoadIDValues(ITrainerID tr)
{
- pkm = pk;
- SetFormat(pkm.GenNumber);
+ Trainer = tr;
+ int format = tr is PKM p ? p.GenNumber : tr is SaveFile s ? s.Generation : -1;
+ SetFormat(format);
LoadValues();
}
public void UpdateSID() => LoadValues();
public void LoadInfo(ITrainerInfo info)
{
- pkm.TID = info.TID;
- pkm.SID = info.SID;
+ Trainer.TID = info.TID;
+ Trainer.SID = info.SID;
LoadValues();
}
private void LoadValues()
{
if (Format <= 2)
- TB_TID.Text = pkm.TID.ToString();
+ TB_TID.Text = Trainer.TID.ToString();
else if (Format <= 6)
- LoadTID(pkm.TID, pkm.SID);
+ LoadTID(Trainer.TID, Trainer.SID);
else
- LoadTID7(pkm.TID, pkm.SID);
+ LoadTID7(Trainer.TID, Trainer.SID);
}
private void LoadTID(int tid, int sid)
{
@@ -113,9 +116,9 @@ namespace PKHeX.WinForms.Controls
mt.Text = (val = ushort.MaxValue).ToString();
if (mt == TB_TID)
- pkm.TID = val;
+ Trainer.TID = val;
else
- pkm.SID = val;
+ Trainer.SID = val;
}
UpdatedID?.Invoke(sender, e);
@@ -129,8 +132,8 @@ namespace PKHeX.WinForms.Controls
return;
}
- pkm.SID = (ushort)(repack >> 16);
- pkm.TID = (ushort)repack;
+ Trainer.SID = (ushort)(repack >> 16);
+ Trainer.TID = (ushort)repack;
}
}
}