Fix sav clone metadata inclusion

Need to not include it when cloning saves into the sav constructor, need to mirror it in metadata instead.
This commit is contained in:
Kurt 2024-07-04 22:27:53 -05:00
parent 21271c2931
commit 1dcda6d2e8
8 changed files with 18 additions and 7 deletions

View file

@ -210,7 +210,7 @@ public sealed class SAV1 : SaveFile, ILangDeviantSave, IEventFlagArray, IEventWo
}
// Configuration
protected override SAV1 CloneInternal() => new(Write(), 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;

View file

@ -237,7 +237,7 @@ public sealed class SAV2 : SaveFile, ILangDeviantSave, IEventFlagArray, IEventWo
}
// Configuration
protected override SAV2 CloneInternal() => new(Write(), 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;

View file

@ -11,7 +11,7 @@ namespace PKHeX.Core;
public sealed class SAV3E : SAV3, IGen3Hoenn, IGen3Joyful, IGen3Wonder, IDaycareRandomState<uint>
{
// Configuration
protected override SAV3E CloneInternal() => new(Write()) { Language = Language };
protected override SAV3E CloneInternal() => new(GetFinalData()) { Language = Language };
public override GameVersion Version { get => GameVersion.E; set { } }
public override PersonalTable3 Personal => PersonalTable.E;

View file

@ -10,7 +10,7 @@ namespace PKHeX.Core;
public sealed class SAV3FRLG : SAV3, IGen3Joyful, IGen3Wonder, IDaycareRandomState<ushort>
{
// Configuration
protected override SAV3FRLG CloneInternal() => new(Write()) { 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;

View file

@ -11,7 +11,7 @@ namespace PKHeX.Core;
public sealed class SAV3RS : SAV3, IGen3Hoenn, IDaycareRandomState<ushort>
{
// Configuration
protected override SAV3RS CloneInternal() => new(Write()) { 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;

View file

@ -71,7 +71,7 @@ public sealed class SAV4BR : SaveFile, IBoxDetailName
}
// Configuration
protected override SAV4BR CloneInternal() => new(Write());
protected override SAV4BR CloneInternal() => new(GetFinalData());
public readonly IReadOnlyList<string> SaveNames = new string[SAVE_COUNT];

View file

@ -33,7 +33,7 @@ public abstract class SaveFile : ITrainerInfo, IGameValueLimit, IGeneration, IVe
public SaveFile Clone()
{
var sav = CloneInternal();
sav.Metadata = Metadata with {SAV = sav};
sav.Metadata = Metadata.CloneInternal(sav);
return sav;
}

View file

@ -202,4 +202,15 @@ public sealed record SaveFileMetadata(SaveFile SAV)
}
return flags;
}
internal SaveFileMetadata CloneInternal(SaveFile sav)
{
var clone = this with { SAV = sav };
// Disassociate any mutable references from this object
if (HasFooter)
clone.Footer = [..Footer];
if (HasHeader)
clone.Header = [..Header];
return clone;
}
}