mirror of
https://github.com/kwsch/PKHeX
synced 2024-09-20 14:21:59 +00:00
Refactor savefile tid/sid to int
can now use TrainerID editor control on a savefile... soon?
This commit is contained in:
parent
43507a5ae5
commit
71faaee31c
15 changed files with 63 additions and 59 deletions
|
@ -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; }
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
11
PKHeX.Core/PKM/Shared/ITrainerID.cs
Normal file
11
PKHeX.Core/PKM/Shared/ITrainerID.cs
Normal 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; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -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];
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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); }
|
||||||
|
|
|
@ -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); }
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue