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.
This commit is contained in:
Kurt
2025-05-19 23:37:41 -05:00
parent 064e4293a0
commit fb803c6e4d
3 changed files with 16 additions and 14 deletions

View File

@@ -257,10 +257,10 @@ public override string GetString(ReadOnlySpan<byte> 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<byte> remap = stackalloc byte[data.Length];
data.CopyTo(remap);
StringConverter3GC.RemapGlyphsBetweenRegions3GC(remap, current, expect, language);
@@ -273,10 +273,10 @@ public override int LoadString(ReadOnlySpan<byte> data, Span<char> 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<byte> remap = stackalloc byte[data.Length];
data.CopyTo(remap);
StringConverter3GC.RemapGlyphsBetweenRegions3GC(remap, current, expect, language);
@@ -285,14 +285,14 @@ public override int LoadString(ReadOnlySpan<byte> data, Span<char> destBuffer)
public override int SetString(Span<byte> destBuffer, ReadOnlySpan<char> 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);

View File

@@ -260,10 +260,10 @@ public override string GetString(ReadOnlySpan<byte> 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<byte> remap = stackalloc byte[data.Length];
data.CopyTo(remap);
StringConverter3GC.RemapGlyphsBetweenRegions3GC(remap, current, expect, language);
@@ -276,10 +276,10 @@ public override int LoadString(ReadOnlySpan<byte> data, Span<char> 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<byte> remap = stackalloc byte[data.Length];
data.CopyTo(remap);
StringConverter3GC.RemapGlyphsBetweenRegions3GC(remap, current, expect, language);
@@ -288,14 +288,14 @@ public override int LoadString(ReadOnlySpan<byte> data, Span<char> destBuffer)
public override int SetString(Span<byte> destBuffer, ReadOnlySpan<char> 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);

View File

@@ -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);
}