From d85f2444fc7df294d5793c504f985ada54f8ede7 Mon Sep 17 00:00:00 2001 From: javierhimura Date: Sun, 26 Mar 2017 19:17:30 +0200 Subject: [PATCH] Revert "The last commit was reverted because the change should not apply to base moves from was egg pokemon, unlike egg moves base level moves are not equal among all generations." Pokemon crystal does not store egg received location like generation 3 games, that means both crystal and gold/silver should be checked for base egg moves always --- PKHeX/Legality/Checks.cs | 111 +++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 58 deletions(-) diff --git a/PKHeX/Legality/Checks.cs b/PKHeX/Legality/Checks.cs index 64bae981d..2d60aa058 100644 --- a/PKHeX/Legality/Checks.cs +++ b/PKHeX/Legality/Checks.cs @@ -2100,45 +2100,29 @@ private CheckResult[] verifyMoves(GameVersion game = GameVersion.Any) return res; } - private GameVersion[] getBaseGamesWasEggGen2() - { - if (pkm.Format != 2) - return new[] { GameVersion.GS, GameVersion.C }; - - if (pkm.HasOriginalMetLocation) - return new[] { GameVersion.C }; - if (pkm.Species > 151 && !Legal.FutureEvolutionsGen1.Contains(pkm.Species)) - return new[] { GameVersion.GS }; - - return new[] { GameVersion.GS, GameVersion.C }; - } - private GameVersion getBaseGamesIsEgg() + private GameVersion[] getBaseMovesIsEggGames() { + GameVersion[] Games = { }; switch (pkm.GenNumber) { case 1: case 2: - // Every egg move from Gold/Silver is included in Crystal - if (pkm.Format != 2) - return GameVersion.C; - - if (pkm.HasOriginalMetLocation) - return GameVersion.C; - if (pkm.Species > 151 && !Legal.FutureEvolutionsGen1.Contains(pkm.Species)) - return GameVersion.GS; - - return GameVersion.C; + Games = new[] { GameVersion.GS, GameVersion.C }; + break; case 3: - switch ((GameVersion)pkm.Version) + switch((GameVersion)pkm.Version) { case GameVersion.R: case GameVersion.S: - return GameVersion.RS; + Games = new[] { GameVersion.RS}; + break; case GameVersion.E: - return GameVersion.E; + Games = new[] { GameVersion.E }; + break; case GameVersion.FR: case GameVersion.LG: - return GameVersion.FRLG; + Games = new[] { GameVersion.FRLG }; + break; } break; case 4: @@ -2146,12 +2130,15 @@ private GameVersion getBaseGamesIsEgg() { case GameVersion.D: case GameVersion.P: - return GameVersion.DP; + Games = new[] { GameVersion.DP }; + break; case GameVersion.Pt: - return GameVersion.Pt; + Games = new[] { GameVersion.Pt }; + break; case GameVersion.HG: case GameVersion.SS: - return GameVersion.HGSS; + Games = new[] { GameVersion.HGSS }; + break; } break; case 5: @@ -2159,46 +2146,54 @@ private GameVersion getBaseGamesIsEgg() { case GameVersion.B: case GameVersion.W: - return GameVersion.BW; + Games = new[] { GameVersion.BW }; + break; + case GameVersion.Pt: + Games = new[] { GameVersion.Pt }; + break; case GameVersion.B2: case GameVersion.W2: - return GameVersion.B2W2; + Games = new[] { GameVersion.B2W2 }; + break; } break; } - return GameVersion.Any; + return Games; } private CheckResult[] verifyMovesIsEggPreRelearn(int[] Moves, int[] SpecialMoves, bool allowinherited) { CheckResult[] res = new CheckResult[4]; var ValidSpecialMoves = SpecialMoves.Where(m => m > 0); // Some games can have different egg movepools. Have to check all situations. - GameVersion ver = getBaseGamesIsEgg(); + GameVersion[] Games = getBaseMovesIsEggGames(); int splitctr = Legal.getSplitBreedGeneration(pkm).Contains(pkm.Species) ? 1 : 0; - for (int i = 0; i <= splitctr; i++) + foreach (var ver in Games) { - var baseEggMoves = Legal.getBaseEggMoves(pkm, i, ver, pkm.GenNumber < 4 ? 5 : 1)?.ToList() ?? new List(); - var InheritedLvlMoves = Legal.getBaseEggMoves(pkm, i, ver, 100) ?? new List(); - var EggMoves = Legal.getEggMoves(pkm, ver)?.ToList() ?? new List(); - var InheritedTutorMoves = (ver == GameVersion.C) ? Legal.getTutorMoves(pkm, pkm.Species, pkm.AltForm, false, 2) : new int[0]; - // Only TM Hm moves from the source game of the egg, not any other games from the same generation - var InheritedTMHMMoves = Legal.getTMHM(pkm, pkm.Species, pkm.AltForm, pkm.GenNumber, ver, false); - InheritedLvlMoves = InheritedLvlMoves.Except(baseEggMoves); + for (int i = 0; i <= splitctr; i++) + { + var baseEggMoves = Legal.getBaseEggMoves(pkm, i, ver, pkm.GenNumber < 4 ? 5 : 1)?.ToList() ?? new List(); + var InheritedLvlMoves = Legal.getBaseEggMoves(pkm, i, ver, 100) ?? new List(); + var EggMoves = Legal.getEggMoves(pkm, ver)?.ToList() ?? new List(); + var InheritedTutorMoves = (ver == GameVersion.C) ? Legal.getTutorMoves(pkm, pkm.Species, pkm.AltForm, false, 2) : new int[0]; + // Only TM Hm moves from the source game of the egg, not any other games from the same generation + var InheritedTMHMMoves = Legal.getTMHM(pkm, pkm.Species, pkm.AltForm, pkm.GenNumber, ver, false); + InheritedLvlMoves = InheritedLvlMoves.Except(baseEggMoves); - if (pkm.Format > 2 || SpecialMoves.Any()) - { - // For gen 2 is not possible to difference normal eggs from event eggs - // If there is no special moves assume normal egg - res = verifyPreRelearnEggBase(Moves, baseEggMoves, EggMoves, InheritedLvlMoves, InheritedTMHMMoves, InheritedTutorMoves, ValidSpecialMoves, allowinherited, ver); - if (res.All(r => r.Valid)) // moves is satisfactory - return res; - } - if(pkm.Format == 2) - { - // For gen 2 if does not match special egg check for normal egg too - res = verifyPreRelearnEggBase(Moves, baseEggMoves, EggMoves, InheritedLvlMoves, InheritedTMHMMoves, InheritedTutorMoves, new List(), true, ver); - if (res.All(r => r.Valid)) // moves is satisfactory - return res; + if (pkm.Format > 2 || SpecialMoves.Any()) + { + // For gen 2 is not possible to difference normal eggs from event eggs + // If there is no special moves assume normal egg + res = verifyPreRelearnEggBase(Moves, baseEggMoves, EggMoves, InheritedLvlMoves, InheritedTMHMMoves, InheritedTutorMoves, ValidSpecialMoves, allowinherited, ver); + if (res.All(r => r.Valid)) // moves is satisfactory + return res; + } + if(pkm.Format == 2) + { + // For gen 2 if does not match special egg check for normal egg too + res = verifyPreRelearnEggBase(Moves, baseEggMoves, EggMoves, InheritedLvlMoves, InheritedTMHMMoves, InheritedTutorMoves, new List(), true, ver); + if (res.All(r => r.Valid)) // moves is satisfactory + return res; + } } } return res; @@ -2213,10 +2208,10 @@ private CheckResult[] verifyMovesWasEggPreRelearn(int[] Moves, List[] valid { case 1: case 2: - Games = getBaseGamesWasEggGen2(); + Games = new[] { GameVersion.GS, GameVersion.C }; break; case 3: // Generation 3 does not overwrite source game after pokemon hatched - Games = new[] { getBaseGamesIsEgg() }; + Games = getBaseMovesIsEggGames(); break; case 4: Games = new[] { GameVersion.DP, GameVersion.Pt, GameVersion.HGSS };