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; } } }