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)
This commit is contained in:
Kurt
2018-06-15 18:47:17 -07:00
parent 6fc33f4b19
commit 49c36e2173
4 changed files with 10 additions and 6 deletions

View File

@@ -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

View File

@@ -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;
/// <summary> e-Reader Berry originates from a Japanese SaveFile </summary>
public static bool SavegameJapanese { get; set; }
/// <summary> e-Reader Berry is Enigma or special berry </summary>

View File

@@ -145,6 +145,10 @@ private static IEnumerable<GBEncounterData> 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<EncounterSlot1>())
{
if (!species.Contains(e.Species))