From 3a131f61aa817d2f2dd699fc4f19708b2c340637 Mon Sep 17 00:00:00 2001 From: Kurt Date: Sat, 13 Jul 2024 10:34:55 -0500 Subject: [PATCH] Add duking glyph remap check for Colo Plusle Only applies to Spanish; other languages don't use special accent-mark chars. make logic flow easier to understand for this if-duking case. --- .../Legality/Encounters/Data/Gen3/Encounters3Colo.cs | 6 ++++++ .../Templates/Gen3/Colo/EncounterGift3Colo.cs | 11 ++++++++--- .../Encounters/Templates/Gen3/XD/EncounterTrade3XD.cs | 9 +++++---- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/PKHeX.Core/Legality/Encounters/Data/Gen3/Encounters3Colo.cs b/PKHeX.Core/Legality/Encounters/Data/Gen3/Encounters3Colo.cs index c47c8555f..2952c313d 100644 --- a/PKHeX.Core/Legality/Encounters/Data/Gen3/Encounters3Colo.cs +++ b/PKHeX.Core/Legality/Encounters/Data/Gen3/Encounters3Colo.cs @@ -13,6 +13,12 @@ internal static class Encounters3Colo internal static readonly string[] TrainerNameDuking = [string.Empty, "ギンザル", "DUKING", "DOKING", "RODRIGO", "GRAND", string.Empty, "GERMÁN"]; + /// + /// When transferring from Gen3->Gen4, a Spanish OT:Duking has the Á char changed to い. + /// + /// cref=""/> + internal const string TrainerNameDukingSpanish4 = "GERMいN"; + internal static readonly EncounterGift3Colo[] Gifts = [ // In-Game without Bonus Disk diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterGift3Colo.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterGift3Colo.cs index 74c7ba35f..adce9e3e6 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterGift3Colo.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterGift3Colo.cs @@ -170,14 +170,19 @@ public sealed record EncounterGift3Colo : IEncounterable, IEncounterMatch, IEnco if ((uint)language >= TrainerNames.Length) return false; - var max = language == 1 ? 5 : 7; var expect = TrainerNames[language].AsSpan(); - if (pk is CK3 && expect.SequenceEqual(trainer)) return true; // not yet transferred to mainline Gen3 + var max = language == 1 ? 5 : 7; if (expect.Length > max) expect = expect[..max]; - return expect.SequenceEqual(trainer); + if (pk.Context == EntityContext.Gen3) + return trainer.SequenceEqual(expect); + if (IsSpanishDuking(language)) // Gen4+ + return trainer is Encounters3Colo.TrainerNameDukingSpanish4; + return trainer.SequenceEqual(expect); } + + private bool IsSpanishDuking(int language) => language is (int)LanguageID.Spanish && Species is (int)Core.Species.Plusle; } diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterTrade3XD.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterTrade3XD.cs index 98fecefe2..ca54568fe 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterTrade3XD.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterTrade3XD.cs @@ -182,12 +182,13 @@ public sealed record EncounterTrade3XD : IEncounterable, IEncounterMatch, IEncou var name = TrainerNames[language]; if (pk.Context == EntityContext.Gen3) return trainer.SequenceEqual(name); - - Span tmp = stackalloc char[name.Length]; - StringConverter345.TransferGlyphs34(name, language, tmp); - return trainer.SequenceEqual(tmp); + if (IsSpanishDuking(language)) // Gen4+ + return trainer is Encounters3Colo.TrainerNameDukingSpanish4; + return trainer.SequenceEqual(name); } + private bool IsSpanishDuking(int language) => language is (int)LanguageID.Spanish && Species is not (int)Core.Species.Elekid; + public bool IsNicknameMatch(PKM pk, ReadOnlySpan nickname, int language) { if (!IsFixedNickname)