Differentiate HG/SS save files (no HGSS)

Pt/HG/SS store the ROMCode, but D/P do not. In D/P, every "get version" function for the ROM is inlined to return a fixed value, not from the save file.
This commit is contained in:
Kurt 2026-05-03 22:34:55 -05:00
parent 571de117fb
commit de5e983faf
3 changed files with 32 additions and 6 deletions

View File

@ -300,18 +300,44 @@ public override int Language
set => General[Trainer1 + 0x19] = (byte)value;
}
public int Badges
public byte Badges
{
get => General[Trainer1 + 0x1A];
set { if (value < 0) return; General[Trainer1 + 0x1A] = (byte)value; }
set => General[Trainer1 + 0x1A] = value;
}
public int Sprite
public byte Sprite
{
get => General[Trainer1 + 0x1B];
set { if (value < 0) return; General[Trainer1 + 0x1B] = (byte)value; }
set => General[Trainer1 + 0x1B] = value;
}
public byte ROMCode // Unused by D/P
{
get => General[Trainer1 + 0x1C];
set => General[Trainer1 + 0x1C] = value;
}
public byte ProgressFlags
{
get => General[Trainer1 + 0x1D];
set => General[Trainer1 + 0x1D] = value;
}
public bool GameClear
{
get => (ProgressFlags & 1) == 1;
set => ProgressFlags = (byte)((ProgressFlags & 0xFE) | (value ? 1 : 0));
}
public bool NationalDex
{
get => (ProgressFlags & 2) == 2;
set => ProgressFlags = (byte)((ProgressFlags & 0xFD) | (value ? 2 : 0));
}
// 1E-1F are unused (alignment)
public uint Coin
{
get => ReadUInt16LittleEndian(General[(Trainer1 + 0x20)..]);

View File

@ -26,7 +26,7 @@ public SAV4HGSS(Memory<byte> data) : base(data, GeneralSize, StorageSize, Genera
public override Zukan4 Dex { get; }
protected override SAV4 CloneInternal4() => State.Exportable ? new SAV4HGSS(Data.ToArray()) : new SAV4HGSS();
public override GameVersion Version { get => GameVersion.HGSS; set { } }
public override GameVersion Version { get => (GameVersion)ROMCode; set => ROMCode = (byte)value; }
public override PersonalTable4 Personal => PersonalTable.HGSS;
public override ReadOnlySpan<ushort> HeldItems => Legal.HeldItems_HGSS;
public override int MaxItemID => Legal.MaxItemID_4_HGSS;

View File

@ -288,7 +288,7 @@ private void B_Save_Click(object sender, EventArgs e)
sav4.Z = (int)NUD_Z.Value;
sav4.Y = (int)NUD_Y.Value;
}
sav4.Badges = badgeval & 0xFF;
sav4.Badges = (byte)badgeval;
if (sav4 is SAV4HGSS hgss)
{
hgss.Badges16 = badgeval >> 8;