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>
/// Minimal Trainer Information necessary for generating a <see cref="PKM"/>.
/// </summary>
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; }

View file

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

View file

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

View file

@ -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);

View file

@ -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
{

View file

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

View file

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

View file

@ -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
{

View file

@ -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
{

View file

@ -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
{

View file

@ -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
{

View file

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

View file

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