From 99b243b4faeffb6198d3fcc164de5e906db8a84a Mon Sep 17 00:00:00 2001 From: Kurt Date: Tue, 2 May 2017 19:08:16 -0700 Subject: [PATCH] Handle CXD egg encounters There are none. But the detection routine for gen3 can assign cxd pkm as egg if no other possible encounter is matched, thus we'll flag if the failure case occurs. add missing spacing formatting, simplify break->return for egg game retrieval --- PKHeX/Legality/Checks.cs | 42 ++++++++++++++++++---------------------- PKHeX/Legality/Core.cs | 12 ++++++------ 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/PKHeX/Legality/Checks.cs b/PKHeX/Legality/Checks.cs index 7d84d5fd0..33bafed19 100644 --- a/PKHeX/Legality/Checks.cs +++ b/PKHeX/Legality/Checks.cs @@ -1351,6 +1351,10 @@ private void verifyCXD() break; // todo } } + else if (pkm.WasEgg) // can't obtain eggs in CXD + { + AddLine(Severity.Invalid, V80, CheckIdentifier.Encounter); // invalid encounter + } } private void verifyAbility() @@ -2064,7 +2068,7 @@ private void verifyOTMemory() if (pkm.GenNumber < 6) { - verifyOTMemoryIs(new [] {0,0,0,0}); // empty + verifyOTMemoryIs(new [] {0, 0, 0, 0}); // empty return; } @@ -2785,22 +2789,20 @@ private GameVersion[] getBaseMovesIsEggGames() { case 1: case 2: - Games = new[] { GameVersion.GS, GameVersion.C }; - break; + return new[] { GameVersion.GS, GameVersion.C }; case 3: switch ((GameVersion)pkm.Version) { case GameVersion.R: case GameVersion.S: - Games = new[] { GameVersion.RS}; - break; + return new[] { GameVersion.RS }; case GameVersion.E: - Games = new[] { GameVersion.E }; - break; + return new[] { GameVersion.E }; case GameVersion.FR: case GameVersion.LG: - Games = new[] { GameVersion.FRLG }; - break; + return new[] { GameVersion.FRLG }; + case GameVersion.CXD: + return new[] { GameVersion.CXD }; // will yield no moves } break; case 4: @@ -2808,15 +2810,12 @@ private GameVersion[] getBaseMovesIsEggGames() { case GameVersion.D: case GameVersion.P: - Games = new[] { GameVersion.DP }; - break; + return new[] { GameVersion.DP }; case GameVersion.Pt: - Games = new[] { GameVersion.Pt }; - break; + return new[] { GameVersion.Pt }; case GameVersion.HG: case GameVersion.SS: - Games = new[] { GameVersion.HGSS }; - break; + return new[] { GameVersion.HGSS }; } break; case 5: @@ -2824,15 +2823,12 @@ private GameVersion[] getBaseMovesIsEggGames() { case GameVersion.B: case GameVersion.W: - Games = new[] { GameVersion.BW }; - break; + return new[] { GameVersion.BW }; case GameVersion.Pt: - Games = new[] { GameVersion.Pt }; - break; + return new[] { GameVersion.Pt }; case GameVersion.B2: case GameVersion.W2: - Games = new[] { GameVersion.B2W2 }; - break; + return new[] { GameVersion.B2W2 }; } break; } @@ -2920,7 +2916,7 @@ private CheckResult[] parseMovesWasEggPreRelearn(int[] Moves, List[] validL bool volt = (gen > 3 || ver == GameVersion.E) && Legal.LightBall.Contains(pkm.Species); var SpecialMoves = volt && EventEggMoves.Length == 0 ? new[] {344} : new int[0]; // Volt Tackle for bred Pichu line - res = parseMoves(Moves, validLevelMoves, new int[0], validTMHM, validTutor, SpecialMoves, LvlupEggMoves, EggMoves, ExclusiveIncenseMoves,EventEggMoves, new int[0], issplitbreed); + res = parseMoves(Moves, validLevelMoves, new int[0], validTMHM, validTutor, SpecialMoves, LvlupEggMoves, EggMoves, ExclusiveIncenseMoves, EventEggMoves, new int[0], issplitbreed); if (res.All(r => r.Valid)) // moves is satisfactory return res; @@ -3064,7 +3060,7 @@ private CheckResult[] parseMoves(int[] moves, List[] learn, int[] relearn, if (gen == 4 && pkm.Format > 4) { // Copy to array the hm found or else the list will be emptied when the legal status of moves changes in the current generation - HMLearned = moves.Where((m,i) => !(res[i]?.Valid ?? false) && Legal.HM_4_RemovePokeTransfer.Any(l => l == m)).Select((m, i) => i).ToArray(); + HMLearned = moves.Where((m, i) => !(res[i]?.Valid ?? false) && Legal.HM_4_RemovePokeTransfer.Any(l => l == m)).Select((m, i) => i).ToArray(); // Defog and Whirlpool at the same time, also both can't be learned in future generations or else they will be valid KnowDefogWhirlpool = moves.Where((m, i) => (m == 250 || m == 432) && !(res[i]?.Valid ?? false)).Count() == 2; } diff --git a/PKHeX/Legality/Core.cs b/PKHeX/Legality/Core.cs index d1d52bebc..cdac44f90 100644 --- a/PKHeX/Legality/Core.cs +++ b/PKHeX/Legality/Core.cs @@ -586,7 +586,7 @@ private static EncounterArea[] getTables2(GameVersion Version) var h_g = EncounterArea.getArray2_H(Resources.encounter_gold_h); var h_s = EncounterArea.getArray2_H(Resources.encounter_silver_h); - Slots = addExtraTableSlots(g, s, h_g, h_s,f); + Slots = addExtraTableSlots(g, s, h_g, h_s, f); } if (Version == GameVersion.C || Version == GameVersion.GSC) { @@ -1276,7 +1276,7 @@ internal static IEnumerable getValidPostEvolutionMoves(PKM pkm, int Species } return evomoves; } - internal static List[] getExclusivePreEvolutionMoves(PKM pkm, int Species,DexLevel[][] evoChains, GameVersion Version) + internal static List[] getExclusivePreEvolutionMoves(PKM pkm, int Species, DexLevel[][] evoChains, GameVersion Version) { // Return moves that the pokemon could only learn throught the preevolution Species List[] Moves = new List[evoChains.Length]; @@ -1311,8 +1311,8 @@ internal static List[] getBaseEggMoves(PKM pkm, GameVersion gameSource, int if (getSplitBreedGeneration(pkm.GenNumber).Contains(pkm.Species)) return new[] { - getBaseEggMoves(pkm, 0, gameSource,lvl).ToList(), - getBaseEggMoves(pkm, 1, gameSource,lvl).ToList(), + getBaseEggMoves(pkm, 0, gameSource, lvl).ToList(), + getBaseEggMoves(pkm, 1, gameSource, lvl).ToList(), }; return new[] { getBaseEggMoves(pkm, 0, gameSource, lvl).ToList(), }; } @@ -2788,7 +2788,7 @@ internal static DexLevel[][] getEvolutionChainsAllGens(PKM pkm, object Encounter //Remove previous evolutions bellow transfer level //For example a gen3 charizar in format 7 with current level 36 and met level 36 //chain level for charmander is 35, is bellow met level - GensEvoChains[gen] = GensEvoChains[gen].Where(e => e.Level >= getMinLevelGeneration(pkm,gen)).ToArray(); + GensEvoChains[gen] = GensEvoChains[gen].Where(e => e.Level >= getMinLevelGeneration(pkm, gen)).ToArray(); if (gen == 1 && GensEvoChains[gen].LastOrDefault()?.Species > MaxSpeciesID_1) // Remove generation 2 pre-evolutions @@ -3328,7 +3328,7 @@ private static IEnumerable getMoves(PKM pkm, int species, int minlvlG1, int r.AddRange(getMoves(pkm, species, minlvlG1, lvl, form, moveTutor, Version, LVL, specialTutors, Machine, MoveReminder, RemoveTransferHM, gen)); return r.Distinct(); } - private static IEnumerable getMoves(PKM pkm, int species, int minlvlG1,int lvl, int form, bool moveTutor, GameVersion Version, bool LVL, bool specialTutors, bool Machine, bool MoveReminder, bool RemoveTransferHM, int Generation) + private static IEnumerable getMoves(PKM pkm, int species, int minlvlG1, int lvl, int form, bool moveTutor, GameVersion Version, bool LVL, bool specialTutors, bool Machine, bool MoveReminder, bool RemoveTransferHM, int Generation) { List r = new List();