From c6307b40ef26dfef69147bc22abf40a84fb9d46b Mon Sep 17 00:00:00 2001 From: Kurt Date: Mon, 9 Dec 2024 01:02:14 -0600 Subject: [PATCH] Misc tweaks SAV3: extract struct slice fetch Metadata: allow setting `Memory` instead of `byte[]` Stats: deduplicate gen1/2 mask set remove some unnecessary spaces (lol) --- .../PersonalInfo/Info/PersonalInfo8LA.cs | 2 +- PKHeX.Core/Saves/SAV3.cs | 31 +++++++++++-------- PKHeX.Core/Saves/SAV5.cs | 2 +- PKHeX.Core/Saves/SaveFileMetadata.cs | 14 ++++----- .../Gen8/BS/FieldObjectSave8b.cs | 2 +- .../Controls/PKM Editor/StatEditor.cs | 6 +--- 6 files changed, 29 insertions(+), 28 deletions(-) diff --git a/PKHeX.Core/PersonalInfo/Info/PersonalInfo8LA.cs b/PKHeX.Core/PersonalInfo/Info/PersonalInfo8LA.cs index 97e147317..e747c4937 100644 --- a/PKHeX.Core/PersonalInfo/Info/PersonalInfo8LA.cs +++ b/PKHeX.Core/PersonalInfo/Info/PersonalInfo8LA.cs @@ -192,7 +192,7 @@ public void SetAllLearnMoveShop(Span result) { var moves = MoveShopMoves; var bits = MoveShopBits; - for (int index = 0 ; index < MoveShopCount; index++) + for (int index = 0; index < MoveShopCount; index++) { if ((bits & 1) == 1) result[moves[index]] = true; diff --git a/PKHeX.Core/Saves/SAV3.cs b/PKHeX.Core/Saves/SAV3.cs index 5ffe825c4..e0c2ad097 100644 --- a/PKHeX.Core/Saves/SAV3.cs +++ b/PKHeX.Core/Saves/SAV3.cs @@ -65,12 +65,9 @@ private void ReadSectors(ReadOnlySpan data, int group) { // Get the sector ID for the serialized savedata block, and copy the chunk into the corresponding object. var id = ReadInt16LittleEndian(data[(ofs + 0xFF4)..]); - switch (id) - { - case >= 5: data.Slice(ofs, SIZE_SECTOR_USED).CopyTo(Storage.AsSpan((id - 5) * SIZE_SECTOR_USED)); break; - case >= 1: data.Slice(ofs, SIZE_SECTOR_USED).CopyTo(Large.AsSpan((id - 1) * SIZE_SECTOR_USED)); break; - default: data.Slice(ofs, SIZE_SECTOR_USED).CopyTo(Small.AsSpan(0)); break; - } + var src = data.Slice(ofs, SIZE_SECTOR_USED); + var dest = GetStructureChunk(id); + src.CopyTo(dest); } } @@ -82,15 +79,19 @@ private void WriteSectors(Span data, int group) { // Get the sector ID for the serialized savedata block, and copy the corresponding chunk of object data into it. var id = ReadInt16LittleEndian(data[(ofs + 0xFF4)..]); - switch (id) - { - case >= 5: Storage.AsSpan((id - 5) * SIZE_SECTOR_USED, SIZE_SECTOR_USED).CopyTo(data[ofs..]); break; - case >= 1: Large.AsSpan((id - 1) * SIZE_SECTOR_USED, SIZE_SECTOR_USED).CopyTo(data[ofs..]); break; - default: Small.AsSpan(0, SIZE_SECTOR_USED).CopyTo(data[ofs..]); break; - } + var src = data.Slice(ofs, SIZE_SECTOR_USED); + var dest = GetStructureChunk(id); + dest.CopyTo(src); } } + private Span GetStructureChunk(short id) => id switch + { + >= 5 => Storage.AsSpan((id - 5) * SIZE_SECTOR_USED, SIZE_SECTOR_USED), + >= 1 => Large .AsSpan((id - 1) * SIZE_SECTOR_USED, SIZE_SECTOR_USED), + _ => Small.AsSpan(0, SIZE_SECTOR_USED), + }; + /// /// Checks the input data to see if all required sectors for the main save data are present for the . /// @@ -335,7 +336,11 @@ protected override void SetPartyValues(PKM pk, bool isParty) public sealed override string OT { - get => GetString(OriginalTrainerTrash); + get + { + int len = Japanese ? 5 : MaxStringLengthTrainer; + return GetString(OriginalTrainerTrash[..len]); + } set { int len = Japanese ? 5 : MaxStringLengthTrainer; diff --git a/PKHeX.Core/Saves/SAV5.cs b/PKHeX.Core/Saves/SAV5.cs index e57c2ebb7..e949f3e77 100644 --- a/PKHeX.Core/Saves/SAV5.cs +++ b/PKHeX.Core/Saves/SAV5.cs @@ -109,7 +109,7 @@ protected override void SetPKM(PKM pk, bool isParty = false) public override int PlayedSeconds { get => PlayerData.PlayedSeconds; set => PlayerData.PlayedSeconds = value; } public override uint Money { get => Misc.Money; set => Misc.Money = value; } public override uint SecondsToStart { get => AdventureInfo.SecondsToStart; set => AdventureInfo.SecondsToStart = value; } - public override uint SecondsToFame { get => AdventureInfo.SecondsToFame ; set => AdventureInfo.SecondsToFame = value; } + public override uint SecondsToFame { get => AdventureInfo.SecondsToFame; set => AdventureInfo.SecondsToFame = value; } public override IReadOnlyList Inventory { get => Items.Inventory; set => Items.Inventory = value; } protected override void SetDex(PKM pk) => Zukan.SetDex(pk); diff --git a/PKHeX.Core/Saves/SaveFileMetadata.cs b/PKHeX.Core/Saves/SaveFileMetadata.cs index b16dd4512..be9a6b710 100644 --- a/PKHeX.Core/Saves/SaveFileMetadata.cs +++ b/PKHeX.Core/Saves/SaveFileMetadata.cs @@ -28,8 +28,8 @@ public sealed record SaveFileMetadata(SaveFile SAV) /// public string? FileFolder { get; private set; } - private byte[] Footer = []; // .dsv - private byte[] Header = []; // .gci + private Memory Footer = Memory.Empty; // .dsv + private Memory Header = Memory.Empty; // .gci private ISaveHandler? Handler; private string BAKSuffix => $" [{SAV.ShortSummary}].bak"; @@ -56,9 +56,9 @@ public sealed record SaveFileMetadata(SaveFile SAV) public byte[] Finalize(byte[] data, BinaryExportSetting setting) { if (HasFooter && !setting.HasFlag(BinaryExportSetting.ExcludeFooter)) - data = [..data, ..Footer]; + data = [..data, ..Footer.Span]; if (HasHeader && !setting.HasFlag(BinaryExportSetting.ExcludeHeader)) - data = [..Header, ..data]; + data = [..Header.Span, ..data]; if (!setting.HasFlag(BinaryExportSetting.ExcludeFinalize)) Handler?.Finalize(data); return data; @@ -67,7 +67,7 @@ public byte[] Finalize(byte[] data, BinaryExportSetting setting) /// /// Sets the details of any trimmed header and footer arrays to a object. /// - public void SetExtraInfo(byte[] header, byte[] footer, ISaveHandler handler) + public void SetExtraInfo(Memory header, Memory footer, ISaveHandler handler) { Header = header; Footer = footer; @@ -208,9 +208,9 @@ internal SaveFileMetadata CloneInternal(SaveFile sav) var clone = this with { SAV = sav }; // Disassociate any mutable references from this object if (HasFooter) - clone.Footer = [..Footer]; + clone.Footer = Footer.ToArray(); if (HasHeader) - clone.Header = [..Header]; + clone.Header = Header.ToArray(); return clone; } } diff --git a/PKHeX.Core/Saves/Substructures/Gen8/BS/FieldObjectSave8b.cs b/PKHeX.Core/Saves/Substructures/Gen8/BS/FieldObjectSave8b.cs index de88f9d37..66c3c1180 100644 --- a/PKHeX.Core/Saves/Substructures/Gen8/BS/FieldObjectSave8b.cs +++ b/PKHeX.Core/Saves/Substructures/Gen8/BS/FieldObjectSave8b.cs @@ -48,7 +48,7 @@ public sealed class FieldObject8b public byte Count // cnt { - get => Data[0] ; + get => Data[0]; set => Data[0] = value; } diff --git a/PKHeX.WinForms/Controls/PKM Editor/StatEditor.cs b/PKHeX.WinForms/Controls/PKM Editor/StatEditor.cs index 0733fa4e8..dc05ced3a 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/StatEditor.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/StatEditor.cs @@ -658,11 +658,7 @@ public void ToggleInterface(PKM pk, byte format) switch (format) { - case 1: - TB_IVHP.Enabled = false; - SetEVMaskSize(Stat_HP.Size, "00000", MT_EVs); - break; - case 2: + case 1 or 2: TB_IVHP.Enabled = false; SetEVMaskSize(Stat_HP.Size, "00000", MT_EVs); break;