diff --git a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade2.cs b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade2.cs index 5f06061fe..eddbb961c 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade2.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterTrade/EncounterTrade2.cs @@ -1,4 +1,6 @@ -namespace PKHeX.Core +using static PKHeX.Core.Species; + +namespace PKHeX.Core { public sealed class EncounterTrade2 : EncounterTradeGB { @@ -52,15 +54,42 @@ private bool IsValidTradeOTName(PKM pkm) if (pkm.Korean) return GetOT((int)LanguageID.Korean) == OT; + var lang = GetInternationalLanguageID(OT); + if (pkm.Format < 7) + return lang != -1; + + switch (Species) + { + case (int)Voltorb when pkm.Language == (int)LanguageID.French: + if (lang == (int)LanguageID.Spanish) + return false; + if (lang != -1) + return true; + return OT == "FALCçN"; // FALCÁN + + case (int)Shuckle when pkm.Language == (int)LanguageID.French: + if (lang == (int)LanguageID.Spanish) + return false; + if (lang != -1) + return true; + return OT == "MANôA"; // MANÍA + + default: return lang != -1; + } + } + + private int GetInternationalLanguageID(string OT) + { const int start = (int)LanguageID.English; const int end = (int)LanguageID.Spanish; + var tr = TrainerNames; for (int i = start; i <= end; i++) { - if (TrainerNames[i] == OT) - return true; + if (tr[i] == OT) + return i; } - return false; + return -1; } } } diff --git a/PKHeX.Core/Legality/Encounters/Generator/EncounterGenerator12.cs b/PKHeX.Core/Legality/Encounters/Generator/EncounterGenerator12.cs index 7d0ae4b41..a2d4a10b2 100644 --- a/PKHeX.Core/Legality/Encounters/Generator/EncounterGenerator12.cs +++ b/PKHeX.Core/Legality/Encounters/Generator/EncounterGenerator12.cs @@ -27,12 +27,7 @@ private static IEnumerable GenerateRawEncounters12(PKM pkm, Game var deferred = new List(); foreach (var t in EncounterTradeGenerator.GetValidEncounterTrades(pkm, chain, game)) { - // some OTs are longer than the keyboard entry; don't defer these - if (pkm.Format >= 7 && pkm.OT_Name.Length <= (pkm.Japanese || pkm.Korean ? 5 : 7)) - { - deferred.Add(t); - continue; - } + // Gen2 trades are strictly matched (OT/Nick), while Gen1 trades allow for deferral (shrug). if (t is EncounterTrade1 t1 && t1.IsMatchDeferred(pkm)) { deferred.Add(t); diff --git a/PKHeX.Core/Legality/Verifiers/TrainerNameVerifier.cs b/PKHeX.Core/Legality/Verifiers/TrainerNameVerifier.cs index b5ece23ad..e97cb477d 100644 --- a/PKHeX.Core/Legality/Verifiers/TrainerNameVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/TrainerNameVerifier.cs @@ -128,7 +128,7 @@ private void VerifyG1OTWithinBounds(LegalityAnalysis data, string str) { if (StringConverter12.GetIsG1English(str)) { - if (str.Length > 7 && !(data.EncounterOriginal is EncounterTrade)) // OT already verified; GER shuckle has 8 chars + if (str.Length > 7 && !(data.EncounterOriginal is EncounterTradeGB)) // OT already verified; GER shuckle has 8 chars data.AddLine(GetInvalid(LOTLong)); } else if (StringConverter12.GetIsG1Japanese(str)) @@ -141,7 +141,7 @@ private void VerifyG1OTWithinBounds(LegalityAnalysis data, string str) if (str.Length > 5) data.AddLine(GetInvalid(LOTLong)); } - else + else if (!(data.EncounterOriginal is EncounterTrade2)) // OT already verified; SPA Shuckle/Voltorb transferred from French can yield 2 inaccessible chars { data.AddLine(GetInvalid(LG1CharOT)); } diff --git a/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 7 Transfer/100 - VOLTI - B086FE1296FC FALCçN.pk7 b/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 7 Transfer/100 - VOLTI - B086FE1296FC FALCçN.pk7 new file mode 100644 index 000000000..a98e4e7a6 Binary files /dev/null and b/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 7 Transfer/100 - VOLTI - B086FE1296FC FALCçN.pk7 differ diff --git a/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 7 Transfer/213 - SHUCKI - 736B6898378B MANôA.pk7 b/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 7 Transfer/213 - SHUCKI - 736B6898378B MANôA.pk7 new file mode 100644 index 000000000..0facc6046 Binary files /dev/null and b/Tests/PKHeX.Core.Tests/Legality/Legal/Generation 7 Transfer/213 - SHUCKI - 736B6898378B MANôA.pk7 differ