From 49c36e21739df5d458ecfb0e103cd30284559571 Mon Sep 17 00:00:00 2001 From: Kurt Date: Fri, 15 Jun 2018 18:47:17 -0700 Subject: [PATCH] Misc legality gen tweaks bypass savefile language checks if no language set fix gen2 static gift egg that is really a wild encounter -- egg flag was set & not cleared -> no wild pkm, bad! Adds test case for this. (probably isn't a better place to clear, enforces only once per generation rather than on every yield/end of every static yield) --- PKHeX.Core/Legality/Checks.cs | 10 +++++----- PKHeX.Core/Legality/Core.cs | 2 +- .../Encounters/Generator/EncounterGenerator.cs | 4 ++++ .../Legal/Generation 2/035 - CLEFAIRY - 8A0C.pk2 | Bin 0 -> 73 bytes 4 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 Tests/PKHeX.Tests/Legality/Legal/Generation 2/035 - CLEFAIRY - 8A0C.pk2 diff --git a/PKHeX.Core/Legality/Checks.cs b/PKHeX.Core/Legality/Checks.cs index 9d46d2fa1..056d2a86d 100644 --- a/PKHeX.Core/Legality/Checks.cs +++ b/PKHeX.Core/Legality/Checks.cs @@ -92,9 +92,9 @@ private void VerifyEReaderBerry() var matchJP = Legal.EReaderBerriesNames_JP.Contains(Legal.EReaderBerryName); if (!matchJP && !matchUSA) // Does not match any released E-Reader berry AddLine(Severity.Invalid, V369, CheckIdentifier.Form); - else if (matchJP && !Legal.SavegameJapanese) // E-Reader is region locked + else if (matchJP && !Legal.SavegameJapanese && Legal.SavegameLanguage >= 0) // E-Reader is region locked AddLine(Severity.Invalid, V370, CheckIdentifier.Form); - else if (matchUSA && Legal.SavegameJapanese) // E-Reader is region locked + else if (matchUSA && Legal.SavegameJapanese && Legal.SavegameLanguage >= 0) // E-Reader is region locked AddLine(Severity.Invalid, V371, CheckIdentifier.Form); } private void VerifyECPID() @@ -197,7 +197,7 @@ private bool VerifyLanguage() // Korean Gen4 games can not trade with other Gen4 languages, but can use Pal Park with any Gen3 game/language. if (pkm.Format == 4 && pkm.Gen4 - && (pkm.Language == (int)LanguageID.Korean) ^ (Legal.SavegameLanguage == (int)LanguageID.Korean)) + && (pkm.Language == (int)LanguageID.Korean) ^ (Legal.SavegameLanguage == (int)LanguageID.Korean) && Legal.SavegameLanguage >= 0) { bool kor = pkm.Language == (int) LanguageID.Korean; var currentpkm = kor ? V611 : V612; @@ -387,7 +387,7 @@ private void VerifyTrade4() { lang = DetectTradeLanguageG4SurgePikachu(pkm, lang); // flag korean magikarp on gen4 saves since the pkm.Language is German - if (pkm.Format == 4 && lang == (int)LanguageID.Korean && Legal.SavegameLanguage != (int)LanguageID.Korean) + if (pkm.Format == 4 && lang == (int)LanguageID.Korean && Legal.SavegameLanguage != (int)LanguageID.Korean && Legal.SavegameLanguage >= 0) AddLine(Severity.Invalid, string.Format(V610, V611, V612), CheckIdentifier.Language); } VerifyTradeTable(Encounters4.TradeHGSS, Encounters4.TradeGift_HGSS, lang); @@ -399,7 +399,7 @@ private void VerifyTrade4() { lang = DetectTradeLanguageG4MeisterMagikarp(pkm, lang); // flag korean magikarp on gen4 saves since the pkm.Language is German - if (pkm.Format == 4 && lang == (int)LanguageID.Korean && Legal.SavegameLanguage != (int)LanguageID.Korean) + if (pkm.Format == 4 && lang == (int)LanguageID.Korean && Legal.SavegameLanguage != (int)LanguageID.Korean && Legal.SavegameLanguage >= 0) AddLine(Severity.Invalid, string.Format(V610, V611, V612), CheckIdentifier.Language); } else if (!pkm.Pt && lang == 1) // DP English origin are Japanese lang diff --git a/PKHeX.Core/Legality/Core.cs b/PKHeX.Core/Legality/Core.cs index 36eaaf8df..2b86401b3 100644 --- a/PKHeX.Core/Legality/Core.cs +++ b/PKHeX.Core/Legality/Core.cs @@ -23,7 +23,7 @@ public static partial class Legal public static bool CheckWordFilter { get; set; } = true; - public static int SavegameLanguage { get; set; } + public static int SavegameLanguage { get; set; } = -1; /// e-Reader Berry originates from a Japanese SaveFile public static bool SavegameJapanese { get; set; } /// e-Reader Berry is Enigma or special berry diff --git a/PKHeX.Core/Legality/Encounters/Generator/EncounterGenerator.cs b/PKHeX.Core/Legality/Encounters/Generator/EncounterGenerator.cs index 9796e850b..1da3c0014 100644 --- a/PKHeX.Core/Legality/Encounters/Generator/EncounterGenerator.cs +++ b/PKHeX.Core/Legality/Encounters/Generator/EncounterGenerator.cs @@ -145,6 +145,10 @@ private static IEnumerable GenerateRawEncounters12(PKM pkm, Gam } yield return new GBEncounterData(pkm, gen, s, s.Version); } + // clear egg flag + // necessary for static egg gifts which appear in wild, level 8 GS clefairy + // GetValidWildEncounters immediately returns empty otherwise + pkm.WasEgg = false; foreach (var e in GetValidWildEncounters(pkm, game).OfType()) { if (!species.Contains(e.Species)) diff --git a/Tests/PKHeX.Tests/Legality/Legal/Generation 2/035 - CLEFAIRY - 8A0C.pk2 b/Tests/PKHeX.Tests/Legality/Legal/Generation 2/035 - CLEFAIRY - 8A0C.pk2 new file mode 100644 index 0000000000000000000000000000000000000000..0ec9814fdc4134c402a8961dc6574c837c1c9423 GIT binary patch literal 73 zcmZQn{;$lysQXyoz>