From ea6842e5eb83a88a1e89ff843f4390cc8d9e2f08 Mon Sep 17 00:00:00 2001 From: Kurt Date: Sat, 23 Jun 2018 12:37:01 -0700 Subject: [PATCH] Refactoring improve readability --- PKHeX.Core/Legality/Checks.cs | 85 ++++++++++--------- .../Legality/Encounters/EncounterStatic.cs | 9 +- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/PKHeX.Core/Legality/Checks.cs b/PKHeX.Core/Legality/Checks.cs index 6440c9197..7a1daecfa 100644 --- a/PKHeX.Core/Legality/Checks.cs +++ b/PKHeX.Core/Legality/Checks.cs @@ -9,63 +9,68 @@ public partial class LegalityAnalysis { private void VerifyGender() { - var gr = pkm.PersonalInfo.Gender; - if (gr == 255 != (pkm.Gender == 2)) + var pi = pkm.PersonalInfo; + if (pi.Genderless != (pkm.Gender == 2)) { // DP/HGSS shedinja glitch -- only generation 4 spawns bool ignore = pkm.Format == 4 && pkm.Species == 292 && pkm.Met_Level != pkm.CurrentLevel; if (!ignore) AddLine(Severity.Invalid, V203, CheckIdentifier.Gender); + return; } // Check for PID relationship to Gender & Nature if applicable int gen = Info.Generation; - bool PIDGender = 3 <= gen && gen <= 5; - if (!PIDGender) + if (3 <= gen && gen <= 5) { - // Check fixed gender cases - if ((gr == 254 || gr == 0) && (gr == 0 ? 0 : 1) != pkm.Gender) - AddLine(Severity.Invalid, V203, CheckIdentifier.Gender); + // Gender-PID & Nature-PID relationship check + if (IsValidGenderPID()) + AddLine(Severity.Valid, V250, CheckIdentifier.Gender); + else + AddLine(Severity.Invalid, V251, CheckIdentifier.Gender); + + if (gen != 5) + VerifyNaturePID(); return; } + // Check fixed gender cases + if ((pi.OnlyFemale && pkm.Gender != 1) || (pi.OnlyMale && pkm.Gender != 0)) + AddLine(Severity.Invalid, V203, CheckIdentifier.Gender); + } + private bool IsValidGenderPID() + { bool genderValid = pkm.IsGenderValid(); if (!genderValid) { if (pkm.Format == 4 && pkm.Species == 292) // Shedinja glitch { // should match original gender - var gender = PKX.GetGenderFromPIDAndRatio(pkm.PID, 0x7F); // 50-50 + var gender = PKX.GetGenderFromPIDAndRatio(pkm.PID, 0x7F); // 50M-50F if (gender == pkm.Gender) - genderValid = true; + return true; } - else if (pkm.Format > 5 && (pkm.Species == 183 || pkm.Species == 184)) + else if (pkm.Format > 5 && (pkm.Species == 183 || pkm.Species == 184)) // Azurill/Marill Gender Ratio Change { var gv = pkm.PID & 0xFF; if (gv > 63 && pkm.Gender == 1) // evolved from azurill after transferring to keep gender - genderValid = true; + return true; } + return false; } - else + + // check for mixed->fixed gender incompatibility by checking the gender of the original species + if (Legal.FixedGenderFromBiGender.Contains(EncounterMatch.Species) && pkm.Gender != 2) // shedinja { - // check for mixed->fixed gender incompatibility by checking the gender of the original species - if (Legal.FixedGenderFromBiGender.Contains(EncounterMatch.Species) && pkm.Gender != 2) // shedinja - { - var gender = PKX.GetGenderFromPID(EncounterMatch.Species, pkm.EncryptionConstant); - genderValid &= gender == pkm.Gender; // gender must not be different from original - } + var gender = PKX.GetGenderFromPID(EncounterMatch.Species, pkm.EncryptionConstant); + if (gender != pkm.Gender) // gender must not be different from original + return false; } - - if (genderValid) - AddLine(Severity.Valid, V250, CheckIdentifier.Gender); - else - AddLine(Severity.Invalid, V251, CheckIdentifier.Gender); - - bool PIDNature = gen != 5; - if (!PIDNature) - return; - + return true; + } + private void VerifyNaturePID() + { if (pkm.EncryptionConstant % 25 == pkm.Nature) AddLine(Severity.Valid, V252, CheckIdentifier.Nature); else @@ -75,7 +80,7 @@ private void VerifyItem() { if (!Legal.IsHeldItemAllowed(pkm)) AddLine(Severity.Invalid, V204, CheckIdentifier.Form); - if (pkm.Format == 3 && pkm.HeldItem == 175) + if (pkm.Format == 3 && pkm.HeldItem == 175) // Enigma Berry VerifyEReaderBerry(); if (pkm.IsEgg && pkm.HeldItem != 0) AddLine(Severity.Invalid, V419, CheckIdentifier.Egg); @@ -186,20 +191,22 @@ private void VerifyTransferEC() #region verifyLanguage private bool VerifyLanguage() { - int maxLanguageID = Legal.GetMaxLanguageID(Info.Generation); + int originalGeneration = Info.Generation; + int currentLanguage = pkm.Language; + int maxLanguageID = Legal.GetMaxLanguageID(originalGeneration); // Language ID 6 is unused; flag if an impossible language is used - if (pkm.Language == (int)LanguageID.UNUSED_6 || pkm.Language > maxLanguageID || pkm.Language <= (int)LanguageID.Hacked && !Legal.IsValidMissingLanguage(pkm)) + if (currentLanguage == (int)LanguageID.UNUSED_6 || currentLanguage > maxLanguageID || currentLanguage <= (int)LanguageID.Hacked && !Legal.IsValidMissingLanguage(pkm)) { - AddLine(Severity.Invalid, string.Format(V5, $"<={maxLanguageID}", pkm.Language), CheckIdentifier.Language); + AddLine(Severity.Invalid, string.Format(V5, $"<={maxLanguageID}", currentLanguage), CheckIdentifier.Language); return false; } // 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) && Legal.SavegameLanguage >= 0) + && (currentLanguage == (int)LanguageID.Korean) ^ (Legal.SavegameLanguage == (int)LanguageID.Korean) && Legal.SavegameLanguage >= 0) { - bool kor = pkm.Language == (int) LanguageID.Korean; + bool kor = currentLanguage == (int) LanguageID.Korean; var currentpkm = kor ? V611 : V612; var currentsav = kor ? V612 : V611; AddLine(Severity.Invalid, string.Format(V610, currentpkm, currentsav), CheckIdentifier.Language); @@ -207,9 +214,9 @@ private bool VerifyLanguage() } // Korean Crystal does not exist, neither do VC1 - if (Info.Generation <= 2 && pkm.Korean && !GameVersion.GS.Contains((GameVersion)pkm.Version)) + if (originalGeneration <= 2 && pkm.Korean && !GameVersion.GS.Contains((GameVersion)pkm.Version)) { - AddLine(Severity.Invalid, string.Format(V5, $"!={pkm.Language}", pkm.Language), CheckIdentifier.Language); + AddLine(Severity.Invalid, string.Format(V5, $"!={(LanguageID)currentLanguage}", currentLanguage), CheckIdentifier.Language); return false; } @@ -266,10 +273,8 @@ private void VerifyNickname() { if (!PKX.SpeciesDict[i].TryGetValue(nickname, out int index)) continue; - - AddLine(Severity.Fishy, index == pkm.Species && i != pkm.Language - ? V15 - : V16, CheckIdentifier.Nickname); + var msg = index == pkm.Species && i != pkm.Language ? V15 : V16; + AddLine(Severity.Fishy, msg, CheckIdentifier.Nickname); return; } if (nickname.Any(c => 0x4E00 <= c && c <= 0x9FFF)) // East Asian Scripts diff --git a/PKHeX.Core/Legality/Encounters/EncounterStatic.cs b/PKHeX.Core/Legality/Encounters/EncounterStatic.cs index 2a1d96ed8..75a81f610 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterStatic.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterStatic.cs @@ -121,7 +121,7 @@ public PKM ConvertToPKM(ITrainerInfo SAV) { pk5.IVs = new[] { 30, 30, 30, 30, 30, 30 }; pk5.NPokémon = p.NSparkle; - pk5.OT_Name = lang == (int)LanguageID.Japanese ? "N" : "N"; + pk5.OT_Name = Legal.GetG5OT_NSparkle(lang); pk5.TID = 00002; pk5.SID = 00000; } @@ -203,7 +203,7 @@ private int GetEdgeCaseLanguage(PKM pk, int lang) { case 1 when Species == 151 && Version == GameVersion.VCEvents: // VC Mew pk.TID = 22796; - pk.OT_Name = GetG1OT_GFMew(lang); + pk.OT_Name = Legal.GetG1OT_GFMew(lang); return lang; case 1 when Version == GameVersion.EventsGBGen1: case 2 when Version == GameVersion.EventsGBGen2: @@ -217,11 +217,6 @@ private int GetEdgeCaseLanguage(PKM pk, int lang) } } - public static string GetG1OT_GFMew(int lang) - { - return lang == 1 ? "ゲーフリ" : "GF"; - } - private PIDType GetPIDType() { switch (Generation)