Refactor savefile tid/sid to int

can now use TrainerID editor control on a savefile... soon?
This commit is contained in:
Kurt 2018-04-28 11:06:58 -07:00
parent 43507a5ae5
commit 71faaee31c
15 changed files with 63 additions and 59 deletions

View file

@ -3,11 +3,9 @@ namespace PKHeX.Core
/// <summary> /// <summary>
/// Minimal Trainer Information necessary for generating a <see cref="PKM"/>. /// Minimal Trainer Information necessary for generating a <see cref="PKM"/>.
/// </summary> /// </summary>
public interface ITrainerInfo public interface ITrainerInfo : ITrainerID
{ {
string OT { get; } string OT { get; }
ushort TID { get; }
ushort SID { get; }
int Gender { get; } int Gender { get; }
int Game { get; } int Game { get; }
int Language { get; } int Language { get; }

View file

@ -3,8 +3,8 @@
public class SimpleTrainerInfo : ITrainerInfo public class SimpleTrainerInfo : ITrainerInfo
{ {
public string OT { get; set; } = "PKHeX"; public string OT { get; set; } = "PKHeX";
public ushort TID { get; set; } = 12345; public int TID { get; set; } = 12345;
public ushort SID { get; set; } = 54321; public int SID { get; set; } = 54321;
public int Gender { get; set; } = 0; public int Gender { get; set; } = 0;
public int Language { get; set; } = (int)LanguageID.English; public int Language { get; set; } = (int)LanguageID.English;

View file

@ -6,7 +6,7 @@ namespace PKHeX.Core
/// <summary> /// <summary>
/// Object representing a <see cref="PKM"/>'s data and derived properties. /// Object representing a <see cref="PKM"/>'s data and derived properties.
/// </summary> /// </summary>
public abstract class PKM : IContestStats public abstract class PKM : IContestStats, ITrainerID
{ {
public static readonly string[] Extensions = PKX.GetPKMExtensions(); public static readonly string[] Extensions = PKX.GetPKMExtensions();
public abstract int SIZE_PARTY { get; } public abstract int SIZE_PARTY { get; }

View file

@ -0,0 +1,11 @@
namespace PKHeX.Core
{
/// <summary>
/// Object has Trainer ownership
/// </summary>
public interface ITrainerID
{
int TID { get; set; }
int SID { get; set; }
}
}

View file

@ -249,16 +249,12 @@ namespace PKHeX.Core
get => 0; get => 0;
set { } set { }
} }
public override ushort TID public override int TID
{ {
get => BigEndian.ToUInt16(Data, Japanese ? 0x25FB : 0x2605); get => BigEndian.ToUInt16(Data, Japanese ? 0x25FB : 0x2605);
set => BigEndian.GetBytes(value).CopyTo(Data, Japanese ? 0x25FB : 0x2605); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, Japanese ? 0x25FB : 0x2605);
}
public override ushort SID
{
get => 0;
set { }
} }
public override int SID { get => 0; set { } }
public bool Yellow => Starter == 0x54; // Pikachu public bool Yellow => Starter == 0x54; // Pikachu
public int Starter => Data[Japanese ? 0x29B9 : 0x29C3]; public int Starter => Data[Japanese ? 0x29B9 : 0x29C3];

View file

@ -282,15 +282,11 @@ namespace PKHeX.Core
Data[Offsets.Palette] = (byte) value; 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); get => BigEndian.ToUInt16(Data, Offsets.Trainer1); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, Offsets.Trainer1);
}
public override ushort SID
{
get => 0;
set { }
} }
public override int SID { get => 0; set { } }
public override int PlayedHours public override int PlayedHours
{ {
get => BigEndian.ToUInt16(Data, Offsets.TimePlayed); get => BigEndian.ToUInt16(Data, Offsets.TimePlayed);

View file

@ -287,15 +287,15 @@ namespace PKHeX.Core
get => Data[BlockOfs[0] + 8]; get => Data[BlockOfs[0] + 8];
set => Data[BlockOfs[0] + 8] = (byte)value; set => Data[BlockOfs[0] + 8] = (byte)value;
} }
public override ushort TID public override int TID
{ {
get => BitConverter.ToUInt16(Data, BlockOfs[0] + 0xA + 0); 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); 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 public override int PlayedHours
{ {

View file

@ -351,8 +351,8 @@ namespace PKHeX.Core
// Trainer Info (offset 0x78, length 0xB18, end @ 0xB90) // 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; } } 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); } 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 int SID { get => BigEndian.ToUInt16(Data, 0xA4); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, 0xA4); }
public override ushort TID { get => BigEndian.ToUInt16(Data, 0xA6); set => BigEndian.GetBytes(value).CopyTo(Data, 0xA6); } 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 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); } public override uint Money { get => BigEndian.ToUInt32(Data, 0xAFC); set => BigEndian.GetBytes(value).CopyTo(Data, 0xAFC); }

View file

@ -237,8 +237,8 @@ namespace PKHeX.Core
// Trainer Info // Trainer Info
public override GameVersion Version { get => GameVersion.XD; protected set { } } 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 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 int SID { get => BigEndian.ToUInt16(Data, Trainer1 + 0x2C); set => BigEndian.GetBytes((ushort)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 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 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); } public override uint Money { get => BigEndian.ToUInt32(Data, Trainer1 + 0x8E4); set => BigEndian.GetBytes(value).CopyTo(Data, Trainer1 + 0x8E4); }

View file

@ -340,15 +340,15 @@ namespace PKHeX.Core
get => GetString(Trainer1, 16); get => GetString(Trainer1, 16);
set => SetString(value, OTLength).CopyTo(Data, Trainer1); set => SetString(value, OTLength).CopyTo(Data, Trainer1);
} }
public override ushort TID public override int TID
{ {
get => BitConverter.ToUInt16(Data, Trainer1 + 0x10 + 0); 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); 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 public override uint Money
{ {

View file

@ -310,15 +310,15 @@ namespace PKHeX.Core
get => GetString(Trainer1 + 0x4, 16); get => GetString(Trainer1 + 0x4, 16);
set => SetString(value, OTLength).CopyTo(Data, Trainer1 + 0x4); set => SetString(value, OTLength).CopyTo(Data, Trainer1 + 0x4);
} }
public override ushort TID public override int TID
{ {
get => BitConverter.ToUInt16(Data, Trainer1 + 0x14 + 0); 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); 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 public override uint Money
{ {

View file

@ -247,15 +247,15 @@ namespace PKHeX.Core
} }
// Player Information // Player Information
public override ushort TID public override int TID
{ {
get => BitConverter.ToUInt16(Data, TrainerCard + 0); 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); 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 public override int Game
{ {

View file

@ -280,15 +280,15 @@ namespace PKHeX.Core
} }
// Player Information // Player Information
public override ushort TID public override int TID
{ {
get => BitConverter.ToUInt16(Data, TrainerCard + 0); 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); 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 public override int Game
{ {

View file

@ -362,8 +362,8 @@ namespace PKHeX.Core
public virtual int Gender { get; set; } public virtual int Gender { get; set; }
public virtual int Language { get => -1; set { } } public virtual int Language { get => -1; set { } }
public virtual int Game { get => -1; set { } } public virtual int Game { get => -1; set { } }
public virtual ushort TID { get; set; } public virtual int TID { get; set; }
public virtual ushort SID { get; set; } public virtual int SID { get; set; }
public int TrainerID7 => (int)((uint)(TID | (SID << 16)) % 1000000); public int TrainerID7 => (int)((uint)(TID | (SID << 16)) % 1000000);
public virtual string OT { get; set; } = "PKHeX"; public virtual string OT { get; set; } = "PKHeX";
public virtual int PlayedHours { get; set; } public virtual int PlayedHours { get; set; }

View file

@ -11,39 +11,42 @@ namespace PKHeX.WinForms.Controls
public event EventHandler UpdatedID; public event EventHandler UpdatedID;
private int Format = -1; private int Format = -1;
private PKM pkm; private ITrainerID Trainer;
private readonly ToolTip TSVTooltip = new ToolTip(); private readonly ToolTip TSVTooltip = new ToolTip();
public void UpdateTSV() public void UpdateTSV()
{ {
if (!(Trainer is PKM pkm))
return;
string IDstr = $"TSV: {pkm.TSV:d4}"; string IDstr = $"TSV: {pkm.TSV:d4}";
TSVTooltip.SetToolTip(TB_TID, IDstr); TSVTooltip.SetToolTip(TB_TID, IDstr);
TSVTooltip.SetToolTip(TB_SID, IDstr); TSVTooltip.SetToolTip(TB_SID, IDstr);
TSVTooltip.SetToolTip(TB_TID7, IDstr); TSVTooltip.SetToolTip(TB_TID7, IDstr);
TSVTooltip.SetToolTip(TB_SID7, IDstr); TSVTooltip.SetToolTip(TB_SID7, IDstr);
} }
public void LoadIDValues(PKM pk) public void LoadIDValues(ITrainerID tr)
{ {
pkm = pk; Trainer = tr;
SetFormat(pkm.GenNumber); int format = tr is PKM p ? p.GenNumber : tr is SaveFile s ? s.Generation : -1;
SetFormat(format);
LoadValues(); LoadValues();
} }
public void UpdateSID() => LoadValues(); public void UpdateSID() => LoadValues();
public void LoadInfo(ITrainerInfo info) public void LoadInfo(ITrainerInfo info)
{ {
pkm.TID = info.TID; Trainer.TID = info.TID;
pkm.SID = info.SID; Trainer.SID = info.SID;
LoadValues(); LoadValues();
} }
private void LoadValues() private void LoadValues()
{ {
if (Format <= 2) if (Format <= 2)
TB_TID.Text = pkm.TID.ToString(); TB_TID.Text = Trainer.TID.ToString();
else if (Format <= 6) else if (Format <= 6)
LoadTID(pkm.TID, pkm.SID); LoadTID(Trainer.TID, Trainer.SID);
else else
LoadTID7(pkm.TID, pkm.SID); LoadTID7(Trainer.TID, Trainer.SID);
} }
private void LoadTID(int tid, int sid) private void LoadTID(int tid, int sid)
{ {
@ -113,9 +116,9 @@ namespace PKHeX.WinForms.Controls
mt.Text = (val = ushort.MaxValue).ToString(); mt.Text = (val = ushort.MaxValue).ToString();
if (mt == TB_TID) if (mt == TB_TID)
pkm.TID = val; Trainer.TID = val;
else else
pkm.SID = val; Trainer.SID = val;
} }
UpdatedID?.Invoke(sender, e); UpdatedID?.Invoke(sender, e);
@ -129,8 +132,8 @@ namespace PKHeX.WinForms.Controls
return; return;
} }
pkm.SID = (ushort)(repack >> 16); Trainer.SID = (ushort)(repack >> 16);
pkm.TID = (ushort)repack; Trainer.TID = (ushort)repack;
} }
} }
} }