From 013cf4cf93a2b343cfd11fd335ef4427e478b4de Mon Sep 17 00:00:00 2001 From: Kurt Date: Mon, 16 Dec 2024 19:37:03 -0600 Subject: [PATCH] Fix cloning of gen1-3 saves in subeditors Clone'd saves no longer retain same byte[] refs as original evident in GUI editors and canceled changes somehow being saved (gen3 isn't required, because it's unpacked into the blocks, but just be consistent) --- PKHeX.Core/Saves/SAV1.cs | 10 +++++++++- PKHeX.Core/Saves/SAV2.cs | 2 +- PKHeX.Core/Saves/SAV3E.cs | 2 +- PKHeX.Core/Saves/SAV3FRLG.cs | 2 +- PKHeX.Core/Saves/SAV3RS.cs | 2 +- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/PKHeX.Core/Saves/SAV1.cs b/PKHeX.Core/Saves/SAV1.cs index 0fc537a57..2dd93f596 100644 --- a/PKHeX.Core/Saves/SAV1.cs +++ b/PKHeX.Core/Saves/SAV1.cs @@ -210,7 +210,7 @@ private int GetBoxRawDataOffset(int box) } // Configuration - protected override SAV1 CloneInternal() => new(GetFinalData(), Version) { Language = Language }; + protected override SAV1 CloneInternal() => new(GetFinalData()[..], Version) { Language = Language }; protected override int SIZE_STORED => Japanese ? PokeCrypto.SIZE_1JLIST : PokeCrypto.SIZE_1ULIST; protected override int SIZE_PARTY => SIZE_STORED; @@ -571,6 +571,14 @@ public bool[] EventSpawnFlags } } + public HallOfFameReader1 HallOfFame => new(Data.AsMemory(0x0598, HallOfFameReader1.SIZE), Japanese); + + public byte HallOfFameCount + { + get => Data[Offsets.HallOfFameCount]; + set => Data[Offsets.HallOfFameCount] = value; + } + public override string GetString(ReadOnlySpan data) => StringConverter1.GetString(data, Japanese); public override int LoadString(ReadOnlySpan data, Span destBuffer) diff --git a/PKHeX.Core/Saves/SAV2.cs b/PKHeX.Core/Saves/SAV2.cs index 3d41eab08..653ab8069 100644 --- a/PKHeX.Core/Saves/SAV2.cs +++ b/PKHeX.Core/Saves/SAV2.cs @@ -237,7 +237,7 @@ protected override byte[] GetFinalData() } // Configuration - protected override SAV2 CloneInternal() => new(GetFinalData(), Version) { Language = Language }; + protected override SAV2 CloneInternal() => new(GetFinalData()[..], Version) { Language = Language }; protected override int SIZE_STORED => Japanese ? PokeCrypto.SIZE_2JLIST : PokeCrypto.SIZE_2ULIST; protected override int SIZE_PARTY => SIZE_STORED; diff --git a/PKHeX.Core/Saves/SAV3E.cs b/PKHeX.Core/Saves/SAV3E.cs index 7c85fbe74..ffdea2144 100644 --- a/PKHeX.Core/Saves/SAV3E.cs +++ b/PKHeX.Core/Saves/SAV3E.cs @@ -11,7 +11,7 @@ namespace PKHeX.Core; public sealed class SAV3E : SAV3, IGen3Hoenn, IGen3Joyful, IGen3Wonder, IDaycareRandomState { // Configuration - protected override SAV3E CloneInternal() => new(GetFinalData()) { Language = Language }; + protected override SAV3E CloneInternal() => new(GetFinalData()[..]) { Language = Language }; public override GameVersion Version { get => GameVersion.E; set { } } public override PersonalTable3 Personal => PersonalTable.E; diff --git a/PKHeX.Core/Saves/SAV3FRLG.cs b/PKHeX.Core/Saves/SAV3FRLG.cs index ff3669938..f39ca3464 100644 --- a/PKHeX.Core/Saves/SAV3FRLG.cs +++ b/PKHeX.Core/Saves/SAV3FRLG.cs @@ -10,7 +10,7 @@ namespace PKHeX.Core; public sealed class SAV3FRLG : SAV3, IGen3Joyful, IGen3Wonder, IDaycareRandomState { // Configuration - protected override SAV3FRLG CloneInternal() => new(GetFinalData()) { Language = Language }; + protected override SAV3FRLG CloneInternal() => new(GetFinalData()[..]) { Language = Language }; public override GameVersion Version { get; set; } = GameVersion.FR; // allow mutation private PersonalTable3 _personal = PersonalTable.FR; public override PersonalTable3 Personal => _personal; diff --git a/PKHeX.Core/Saves/SAV3RS.cs b/PKHeX.Core/Saves/SAV3RS.cs index 2ed7d5038..2ceb979d4 100644 --- a/PKHeX.Core/Saves/SAV3RS.cs +++ b/PKHeX.Core/Saves/SAV3RS.cs @@ -11,7 +11,7 @@ namespace PKHeX.Core; public sealed class SAV3RS : SAV3, IGen3Hoenn, IDaycareRandomState { // Configuration - protected override SAV3RS CloneInternal() => new(GetFinalData()) { Language = Language }; + protected override SAV3RS CloneInternal() => new(GetFinalData()[..]) { Language = Language }; public override GameVersion Version { get; set; } = GameVersion.RS; // allow mutation public override PersonalTable3 Personal => PersonalTable.RS;