From fb803c6e4deef5910cc35f6238516fb56f80e90e Mon Sep 17 00:00:00 2001 From: Kurt Date: Mon, 19 May 2025 23:37:41 -0500 Subject: [PATCH] Revise region handling and game version mapping Updated region handling logic in XK3.cs to treat PAL and NTSC_U as equivalent and adjusted remapping logic accordingly. Added a check in PKMEditor.cs to map GameVersion.COLO and GameVersion.XD to GameVersion.CXD for consistency in filtered data sources. --- PKHeX.Core/PKM/CK3.cs | 14 +++++++------- PKHeX.Core/PKM/XK3.cs | 14 +++++++------- PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs | 2 ++ 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/PKHeX.Core/PKM/CK3.cs b/PKHeX.Core/PKM/CK3.cs index 06dfee927..e90235eca 100644 --- a/PKHeX.Core/PKM/CK3.cs +++ b/PKHeX.Core/PKM/CK3.cs @@ -257,10 +257,10 @@ public override string GetString(ReadOnlySpan data) if (current == GCRegion.NoRegion) return StringConverter3GC.GetString(data); // don't bother var language = Language; - var expect = language == 1 ? GCRegion.NTSC_J : GCRegion.NTSC_U; - if (current == expect) + if (CurrentRegion == GCRegion.NTSC_J == (language == 1)) // treat PAL and NTSC_U as equivalent return StringConverter3GC.GetString(data); // no remap needed + var expect = language == 1 ? GCRegion.NTSC_J : GCRegion.NTSC_U; Span remap = stackalloc byte[data.Length]; data.CopyTo(remap); StringConverter3GC.RemapGlyphsBetweenRegions3GC(remap, current, expect, language); @@ -273,10 +273,10 @@ public override int LoadString(ReadOnlySpan data, Span destBuffer) if (current == GCRegion.NoRegion) return StringConverter3GC.LoadString(data, destBuffer); // don't bother var language = Language; - var expect = language == 1 ? GCRegion.NTSC_J : GCRegion.NTSC_U; - if (current == expect) + if (CurrentRegion == GCRegion.NTSC_J == (language == 1)) // treat PAL and NTSC_U as equivalent return StringConverter3GC.LoadString(data, destBuffer); // no remap needed + var expect = language == 1 ? GCRegion.NTSC_J : GCRegion.NTSC_U; Span remap = stackalloc byte[data.Length]; data.CopyTo(remap); StringConverter3GC.RemapGlyphsBetweenRegions3GC(remap, current, expect, language); @@ -285,14 +285,14 @@ public override int LoadString(ReadOnlySpan data, Span destBuffer) public override int SetString(Span destBuffer, ReadOnlySpan value, int maxLength, StringConverterOption option) { - var language = Language; var current = CurrentRegion; if (current == GCRegion.NoRegion) return StringConverter3GC.SetString(destBuffer, value, maxLength, option); // don't bother - var expect = language == 1 ? GCRegion.NTSC_J : GCRegion.NTSC_U; - if (current == expect) + var language = Language; + if (CurrentRegion == GCRegion.NTSC_J == (language == 1)) // treat PAL and NTSC_U as equivalent return StringConverter3GC.SetString(destBuffer, value, maxLength, option); // no remap needed + var expect = language == 1 ? GCRegion.NTSC_J : GCRegion.NTSC_U; // ensure glyphs match the transfer route var result = StringConverter3GC.SetString(destBuffer, value, maxLength, option); StringConverter3GC.RemapGlyphsBetweenRegions3GC(destBuffer[..result], expect, current, language); diff --git a/PKHeX.Core/PKM/XK3.cs b/PKHeX.Core/PKM/XK3.cs index 8b1dcdd54..a4ae3b0c2 100644 --- a/PKHeX.Core/PKM/XK3.cs +++ b/PKHeX.Core/PKM/XK3.cs @@ -260,10 +260,10 @@ public override string GetString(ReadOnlySpan data) if (current == GCRegion.NoRegion) return StringConverter3GC.GetString(data); // don't bother var language = Language; - var expect = language == 1 ? GCRegion.NTSC_J : GCRegion.NTSC_U; - if (current == expect) + if (CurrentRegion == GCRegion.NTSC_J == (language == 1)) // treat PAL and NTSC_U as equivalent return StringConverter3GC.GetString(data); // no remap needed + var expect = language == 1 ? GCRegion.NTSC_J : GCRegion.NTSC_U; Span remap = stackalloc byte[data.Length]; data.CopyTo(remap); StringConverter3GC.RemapGlyphsBetweenRegions3GC(remap, current, expect, language); @@ -276,10 +276,10 @@ public override int LoadString(ReadOnlySpan data, Span destBuffer) if (current == GCRegion.NoRegion) return StringConverter3GC.LoadString(data, destBuffer); // don't bother var language = Language; - var expect = language == 1 ? GCRegion.NTSC_J : GCRegion.NTSC_U; - if (current == expect) + if (CurrentRegion == GCRegion.NTSC_J == (language == 1)) // treat PAL and NTSC_U as equivalent return StringConverter3GC.LoadString(data, destBuffer); // no remap needed + var expect = language == 1 ? GCRegion.NTSC_J : GCRegion.NTSC_U; Span remap = stackalloc byte[data.Length]; data.CopyTo(remap); StringConverter3GC.RemapGlyphsBetweenRegions3GC(remap, current, expect, language); @@ -288,14 +288,14 @@ public override int LoadString(ReadOnlySpan data, Span destBuffer) public override int SetString(Span destBuffer, ReadOnlySpan value, int maxLength, StringConverterOption option) { - var language = Language; var current = CurrentRegion; if (current == GCRegion.NoRegion) return StringConverter3GC.SetString(destBuffer, value, maxLength, option); // don't bother - var expect = language == 1 ? GCRegion.NTSC_J : GCRegion.NTSC_U; - if (current == expect) + var language = Language; + if (CurrentRegion == GCRegion.NTSC_J == (language == 1)) // treat PAL and NTSC_U as equivalent return StringConverter3GC.SetString(destBuffer, value, maxLength, option); // no remap needed + var expect = language == 1 ? GCRegion.NTSC_J : GCRegion.NTSC_U; // ensure glyphs match the transfer route var result = StringConverter3GC.SetString(destBuffer, value, maxLength, option); StringConverter3GC.RemapGlyphsBetweenRegions3GC(destBuffer[..result], expect, current, language); diff --git a/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs b/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs index 5a7abc2dc..f4dff6905 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs @@ -2179,6 +2179,8 @@ private void PopulateFilteredDataSources(ITrainerInfo sav, bool force = false) var game = sav.Version; if (game <= 0) game = Entity.Context.GetSingleGameVersion(); + else if (game is GameVersion.COLO or GameVersion.XD) + game = GameVersion.CXD; CheckMetLocationChange(game, sav.Context); SetIfDifferentCount(source.Items, CB_HeldItem, force); }