private static CheckMoveResult[] ParseMoves(PKM pkm, MoveParseSource source, LegalInfo info) { var res = new CheckMoveResult[4]; bool AllParsed() => res.All(z => z != null); // Special considerations! const int NoMinGeneration = 0; int minGeneration = NoMinGeneration; if (pkm is IBattleVersion { BattleVersion : not 0 } v) { minGeneration = ((GameVersion)v.BattleVersion).GetGeneration(); source.ResetSources(); } // Check empty moves and relearn moves before generation specific moves for (int m = 0; m < 4; m++) { var move = source.CurrentMoves[m]; if (move == 0) { res[m] = new CheckMoveResult(None, pkm.Format, Valid, LMoveSourceEmpty, CurrentMove); } else if (minGeneration == NoMinGeneration && info.EncounterMoves.Relearn.Contains(move)) { res[m] = new CheckMoveResult(Relearn, info.Generation, Valid, LMoveSourceRelearn, CurrentMove); } } if (AllParsed()) { return(res); } // Encapsulate arguments to simplify method calls var moveInfo = new LearnInfo(pkm, source); // Check moves going backwards, marking the move valid in the most current generation when it can be learned int[] generations = GenerationTraversal.GetVisitedGenerationOrder(pkm, info.EncounterOriginal.Generation); if (pkm.Format <= 2) { generations = Array.FindAll(generations, z => z < info.EncounterMoves.LevelUpMoves.Length); } if (minGeneration != NoMinGeneration) { generations = Array.FindAll(generations, z => z >= minGeneration); } if (generations.Length != 0) { int lastgen = generations[^ 1];
private static CheckMoveResult[] ParseMoves(PKM pkm, MoveParseSource source, LegalInfo info) { var res = new CheckMoveResult[4]; bool AllParsed() => res.All(z => z != null); var required = pkm is not PK1 pk1 ? 1 : GBRestrictions.GetRequiredMoveCount(pk1, source.CurrentMoves, info, source.Base); // Special considerations! int reset = 0; if (pkm is IBattleVersion { BattleVersion : not 0 } v) { reset = ((GameVersion)v.BattleVersion).GetGeneration(); source.ResetSources(); } // Check empty moves and relearn moves before generation specific moves for (int m = 0; m < 4; m++) { if (source.CurrentMoves[m] == 0) { res[m] = new CheckMoveResult(None, pkm.Format, m < required ? Fishy : Valid, LMoveSourceEmpty, CurrentMove); } else if (reset == 0 && info.EncounterMoves.Relearn.Contains(source.CurrentMoves[m])) { res[m] = new CheckMoveResult(Relearn, info.Generation, Valid, LMoveSourceRelearn, CurrentMove); } } if (AllParsed()) { return(res); } // Encapsulate arguments to simplify method calls var moveInfo = new LearnInfo(pkm, source); // Check moves going backwards, marking the move valid in the most current generation when it can be learned int[] generations = GenerationTraversal.GetVisitedGenerationOrder(pkm, info.EncounterOriginal.Generation); if (pkm.Format <= 2) { generations = generations.Where(z => z < info.EncounterMoves.LevelUpMoves.Length).ToArray(); } if (reset != 0) { generations = generations.Where(z => z >= reset).ToArray(); } int lastgen = generations.Length == 0 ? 0 : generations[^ 1];
private static void ParseEggMovesRemaining(PKM pkm, CheckMoveResult[] res, LearnInfo learnInfo) { // A pokemon could have normal egg moves and regular egg moves // Only if all regular egg moves are event egg moves or all event egg moves are regular egg moves var RegularEggMovesLearned = learnInfo.EggMovesLearned.Union(learnInfo.LevelUpEggMoves).ToList(); if (RegularEggMovesLearned.Count != 0 && learnInfo.EventEggMoves.Count != 0) { // Moves that are egg moves or event egg moves but not both var IncompatibleEggMoves = RegularEggMovesLearned.Except(learnInfo.EventEggMoves).Union(learnInfo.EventEggMoves.Except(RegularEggMovesLearned)).ToList(); if (IncompatibleEggMoves.Count == 0) { return; } foreach (int m in IncompatibleEggMoves) { if (learnInfo.EventEggMoves.Contains(m) && !learnInfo.EggMovesLearned.Contains(m)) { res[m] = new CheckMoveResult(res[m], Severity.Invalid, V337, CheckIdentifier.Move); } else if (!learnInfo.EventEggMoves.Contains(m) && learnInfo.EggMovesLearned.Contains(m)) { res[m] = new CheckMoveResult(res[m], Severity.Invalid, V336, CheckIdentifier.Move); } else if (!learnInfo.EventEggMoves.Contains(m) && learnInfo.LevelUpEggMoves.Contains(m)) { res[m] = new CheckMoveResult(res[m], Severity.Invalid, V358, CheckIdentifier.Move); } } } // If there is no incompatibility with event egg check that there is no inherited move in gift eggs and event eggs else if (RegularEggMovesLearned.Count != 0 && (pkm.WasGiftEgg || pkm.WasEventEgg)) { foreach (int m in RegularEggMovesLearned) { if (learnInfo.EggMovesLearned.Contains(m)) { res[m] = new CheckMoveResult(res[m], Severity.Invalid, pkm.WasGiftEgg ? V377 : V341, CheckIdentifier.Move); } else if (learnInfo.LevelUpEggMoves.Contains(m)) { res[m] = new CheckMoveResult(res[m], Severity.Invalid, pkm.WasGiftEgg ? V378 : V347, CheckIdentifier.Move); } } } }
private static void ParseEggMovesRemaining(PKM pkm, CheckMoveResult[] res, LearnInfo learnInfo) { // A pokemon could have normal egg moves and regular egg moves // Only if all regular egg moves are event egg moves or all event egg moves are regular egg moves var RegularEggMovesLearned = learnInfo.EggMovesLearned.Union(learnInfo.LevelUpEggMoves).ToList(); if (RegularEggMovesLearned.Count != 0 && learnInfo.EventEggMoves.Count != 0) { // Moves that are egg moves or event egg moves but not both var IncompatibleEggMoves = RegularEggMovesLearned.Except(learnInfo.EventEggMoves).Union(learnInfo.EventEggMoves.Except(RegularEggMovesLearned)).ToList(); if (IncompatibleEggMoves.Count == 0) { return; } foreach (int m in IncompatibleEggMoves) { if (learnInfo.EventEggMoves.Contains(m) && !learnInfo.EggMovesLearned.Contains(m)) { res[m] = new CheckMoveResult(res[m], Invalid, LMoveEggIncompatibleEvent, Move); } else if (!learnInfo.EventEggMoves.Contains(m) && learnInfo.EggMovesLearned.Contains(m)) { res[m] = new CheckMoveResult(res[m], Invalid, LMoveEggIncompatible, Move); } else if (!learnInfo.EventEggMoves.Contains(m) && learnInfo.LevelUpEggMoves.Contains(m)) { res[m] = new CheckMoveResult(res[m], Invalid, LMoveEventEggLevelUp, Move); } } } else if (RegularEggMovesLearned.Count != 0 && (pkm.WasGiftEgg || pkm.WasEventEgg)) { // Event eggs cannot inherit moves from parents; they are not bred. foreach (int m in RegularEggMovesLearned) { if (learnInfo.EggMovesLearned.Contains(m)) { res[m] = new CheckMoveResult(res[m], Invalid, pkm.WasGiftEgg ? LMoveEggMoveGift : LMoveEggInvalidEvent, Move); } else if (learnInfo.LevelUpEggMoves.Contains(m)) { res[m] = new CheckMoveResult(res[m], Invalid, pkm.WasGiftEgg ? LMoveEggInvalidEventLevelUpGift : LMoveEggInvalidEventLevelUp, Move); } } } }
private static void ParseEggMoves(PKM pkm, CheckMoveResult[] res, int gen, LearnInfo learnInfo) { var moves = learnInfo.Source.CurrentMoves; // Check egg moves after all the generations and all the moves, every move that can't be learned in another source should have preference // the moves that can only be learned from egg moves should in the future check if the move combinations can be breed in gens 2 to 5 for (int m = 0; m < 4; m++) { if (IsCheckValid(res[m])) { continue; } if (moves[m] == 0) { continue; } bool wasEggMove = learnInfo.Source.EggMoveSource.Contains(moves[m]); if (wasEggMove) { // To learn exclusive generation 1 moves the pokemon was tradeback, but it can't be trade to generation 1 // without removing moves above MaxMoveID_1, egg moves above MaxMoveID_1 and gen 1 moves are incompatible if (learnInfo.IsGen2Pkm && learnInfo.Gen1Moves.Count != 0 && moves[m] > Legal.MaxMoveID_1) { res[m] = new CheckMoveResult(MoveSource.EggMove, gen, Severity.Invalid, V334, CheckIdentifier.Move); learnInfo.MixedGen12NonTradeback = true; } else { res[m] = new CheckMoveResult(MoveSource.EggMove, gen, Severity.Valid, V171, CheckIdentifier.Move) { Flag = true }; } learnInfo.EggMovesLearned.Add(m); if (pkm.TradebackStatus == TradebackType.Any && pkm.GenNumber == 1) { pkm.TradebackStatus = TradebackType.WasTradeback; } } if (!learnInfo.Source.EggEventSource.Contains(moves[m])) { continue; } if (!wasEggMove) { if (learnInfo.IsGen2Pkm && learnInfo.Gen1Moves.Count != 0 && moves[m] > Legal.MaxMoveID_1) { res[m] = new CheckMoveResult(MoveSource.SpecialEgg, gen, Severity.Invalid, V334, CheckIdentifier.Move); learnInfo.MixedGen12NonTradeback = true; } else { res[m] = new CheckMoveResult(MoveSource.SpecialEgg, gen, Severity.Valid, V333, CheckIdentifier.Move); } } if (pkm.TradebackStatus == TradebackType.Any && pkm.GenNumber == 1) { pkm.TradebackStatus = TradebackType.WasTradeback; } learnInfo.EventEggMoves.Add(m); } }
private static void ParseEggMovesInherited(PKM pkm, CheckMoveResult[] res, int gen, LearnInfo learnInfo) { var moves = learnInfo.Source.CurrentMoves; // Check higher-level moves after all the moves but just before egg moves to differentiate it from normal level up moves // Also check if the base egg moves is a non tradeback move for (int m = 0; m < 4; m++) { if (IsCheckValid(res[m])) // already validated { continue; } if (moves[m] == 0) { continue; } if (!learnInfo.Source.EggLevelUpSource.Contains(moves[m])) // Check if contains level-up egg moves from parents { continue; } if (learnInfo.IsGen2Pkm && learnInfo.Gen1Moves.Count != 0 && moves[m] > Legal.MaxMoveID_1) { res[m] = new CheckMoveResult(MoveSource.InheritLevelUp, gen, Severity.Invalid, V334, CheckIdentifier.Move); learnInfo.MixedGen12NonTradeback = true; } else { res[m] = new CheckMoveResult(MoveSource.InheritLevelUp, gen, Severity.Valid, V345, CheckIdentifier.Move); } learnInfo.LevelUpEggMoves.Add(m); if (pkm.TradebackStatus == TradebackType.Any && pkm.GenNumber == 1) { pkm.TradebackStatus = TradebackType.WasTradeback; } } }
private static void ParseMovesByGenerationLast(PKM pkm, CheckMoveResult[] res, int gen, LearnInfo learnInfo) { ParseEggMovesInherited(pkm, res, gen, learnInfo); ParseEggMoves(pkm, res, gen, learnInfo); ParseEggMovesRemaining(pkm, res, learnInfo); }
private static void ParseMovesByGeneration12(PKM pkm, CheckMoveResult[] res, int[] moves, int gen, LegalInfo info, LearnInfo learnInfo) { // Mark the gen 1 exclusive moves as illegal because the pokemon also have Non tradeback egg moves. if (learnInfo.MixedGen12NonTradeback) { foreach (int m in learnInfo.Gen1Moves) { res[m] = new CheckMoveResult(res[m], Severity.Invalid, V335, CheckIdentifier.Move); } foreach (int m in learnInfo.Gen2PreevoMoves) { res[m] = new CheckMoveResult(res[m], Severity.Invalid, V412, CheckIdentifier.Move); } } if (gen == 1 && pkm.Format == 1 && pkm.Gen1_NotTradeback) { ParseRedYellowIncompatibleMoves(pkm, res, moves); ParseEvolutionsIncompatibleMoves(pkm, res, moves, info.EncounterMoves.TMHMMoves[1]); } }
private static void ParseMovesByGeneration(PKM pkm, IList <CheckMoveResult> res, int gen, LegalInfo info, LearnInfo learnInfo) { var moves = learnInfo.Source.CurrentMoves; bool native = gen == pkm.Format; for (int m = 0; m < 4; m++) { if (IsCheckValid(res[m])) // already validated with another generation { continue; } int move = moves[m]; if (move == 0) { continue; } if (gen <= 2) { if (gen == 2 && !native && move > Legal.MaxMoveID_1 && pkm.VC1) { res[m] = new CheckMoveResult(MoveSource.Unknown, gen, Severity.Invalid, V176, CheckIdentifier.Move); continue; } if (gen == 2 && learnInfo.Source.EggMoveSource.Contains(move)) { res[m] = new CheckMoveResult(MoveSource.EggMove, gen, Severity.Valid, V171, CheckIdentifier.Move); } else if (learnInfo.Source.Base.Contains(move)) { res[m] = new CheckMoveResult(MoveSource.Initial, gen, Severity.Valid, native ? V361 : string.Format(V362, gen), CheckIdentifier.Move); } } if (info.EncounterMoves.LevelUpMoves[gen].Contains(move)) { res[m] = new CheckMoveResult(MoveSource.LevelUp, gen, Severity.Valid, native ? V177 : string.Format(V330, gen), CheckIdentifier.Move); } else if (info.EncounterMoves.TMHMMoves[gen].Contains(move)) { res[m] = new CheckMoveResult(MoveSource.TMHM, gen, Severity.Valid, native ? V173 : string.Format(V331, gen), CheckIdentifier.Move); } else if (info.EncounterMoves.TutorMoves[gen].Contains(move)) { res[m] = new CheckMoveResult(MoveSource.Tutor, gen, Severity.Valid, native ? V174 : string.Format(V332, gen), CheckIdentifier.Move); } else if (gen == info.Generation && learnInfo.Source.SpecialSource.Contains(move)) { res[m] = new CheckMoveResult(MoveSource.Special, gen, Severity.Valid, V175, CheckIdentifier.Move); } if (res[m] == null || gen >= 3) { continue; } if (res[m].Valid && gen == 2 && learnInfo.Source.NonTradeBackLevelUpMoves.Contains(m)) { learnInfo.Gen2PreevoMoves.Add(m); } if (res[m].Valid && gen == 1) { learnInfo.Gen1Moves.Add(m); if (learnInfo.Gen2PreevoMoves.Count != 0) { learnInfo.MixedGen12NonTradeback = true; } } if (res[m].Valid && gen <= 2 && pkm.TradebackStatus == TradebackType.Any && info.Generation != gen) { pkm.TradebackStatus = TradebackType.WasTradeback; } } }
private static void ParseMovesByGeneration(PKM pkm, CheckMoveResult[] res, int gen, LegalInfo info, LearnInfo learnInfo, int last) { GetHMCompatibility(pkm, res, gen, learnInfo.Source.CurrentMoves, out bool[] HMLearned, out bool KnowDefogWhirlpool); ParseMovesByGeneration(pkm, res, gen, info, learnInfo); if (gen == last) { ParseMovesByGenerationLast(pkm, res, gen, learnInfo); } switch (gen) { case 3: case 4: if (pkm.Format > gen) { FlagIncompatibleTransferHMs(res, learnInfo.Source.CurrentMoves, gen, HMLearned, KnowDefogWhirlpool); } break; case 1: case 2: ParseMovesByGeneration12(pkm, res, learnInfo.Source.CurrentMoves, gen, info, learnInfo); break; } // Pokemon that evolved by leveling up while learning a specific move // This pokemon could only have 3 moves from preevolutions that are not the move used to evolved // including special and eggs moves before realearn generations if (Legal.SpeciesEvolutionWithMove.Contains(pkm.Species)) { ParseEvolutionLevelupMove(pkm, res, learnInfo.Source.CurrentMoves, learnInfo.IncenseMoves, info); } }
private static CheckMoveResult[] ParseMoves(PKM pkm, MoveParseSource source, LegalInfo info) { CheckMoveResult[] res = new CheckMoveResult[4]; bool AllParsed() => res.All(r => r != null); var required = Legal.GetRequiredMoveCount(pkm, source.CurrentMoves, info, source.Base); // Check empty moves and relearn moves before generation specific moves for (int m = 0; m < 4; m++) { if (source.CurrentMoves[m] == 0) { res[m] = new CheckMoveResult(MoveSource.None, pkm.Format, m < required ? Severity.Fishy : Severity.Valid, V167, CheckIdentifier.Move); } else if (info.EncounterMoves.Relearn.Contains(source.CurrentMoves[m])) { res[m] = new CheckMoveResult(MoveSource.Relearn, info.Generation, Severity.Valid, V172, CheckIdentifier.Move) { Flag = true } } ; } if (AllParsed()) { return(res); } // Encapsulate arguments to simplify method calls var moveInfo = new LearnInfo(pkm) { Source = source }; // Check moves going backwards, marking the move valid in the most current generation when it can be learned int[] generations = GetGenMovesCheckOrder(pkm); if (pkm.Format <= 2) { generations = generations.Where(z => z < info.EncounterMoves.LevelUpMoves.Length).ToArray(); } int lastgen = generations.LastOrDefault(); foreach (var gen in generations) { ParseMovesByGeneration(pkm, res, gen, info, moveInfo, lastgen); if (AllParsed()) { return(res); } } if (pkm.Species == 292 && info.Generation <= 4) { ParseShedinjaEvolveMoves(pkm, res, source.CurrentMoves); } for (int m = 0; m < 4; m++) { if (res[m] == null) { res[m] = new CheckMoveResult(MoveSource.Unknown, info.Generation, Severity.Invalid, V176, CheckIdentifier.Move); } } return(res); }
private static void ParseMovesByGeneration(PKM pkm, IList <CheckMoveResult> res, int gen, LegalInfo info, LearnInfo learnInfo) { var moves = learnInfo.Source.CurrentMoves; bool native = gen == pkm.Format; for (int m = 0; m < 4; m++) { if (IsCheckValid(res[m])) // already validated with another generation { continue; } int move = moves[m]; if (move == 0) { continue; } if (gen <= 2) { if (gen == 2 && !native && move > Legal.MaxMoveID_1 && pkm.VC1) { res[m] = new CheckMoveResult(Unknown, gen, Invalid, LMoveSourceInvalid, Move); continue; } if (gen == 2 && learnInfo.Source.EggMoveSource.Contains(move)) { res[m] = new CheckMoveResult(EggMove, gen, Valid, LMoveSourceEgg, Move); } else if (learnInfo.Source.Base.Contains(move)) { res[m] = new CheckMoveResult(Initial, gen, Valid, native ? LMoveSourceDefault : string.Format(LMoveFDefault_0, gen), Move); } } if (info.EncounterMoves.LevelUpMoves[gen].Contains(move)) { res[m] = new CheckMoveResult(LevelUp, gen, Valid, native ? LMoveSourceLevelUp : string.Format(LMoveFLevelUp_0, gen), Move); } else if (info.EncounterMoves.TMHMMoves[gen].Contains(move)) { res[m] = new CheckMoveResult(TMHM, gen, Valid, native ? LMoveSourceTMHM : string.Format(LMoveFTMHM_0, gen), Move); } else if (info.EncounterMoves.TutorMoves[gen].Contains(move)) { res[m] = new CheckMoveResult(Tutor, gen, Valid, native ? LMoveSourceTutor : string.Format(LMoveFTutor_0, gen), Move); } else if (gen == info.Generation && learnInfo.Source.SpecialSource.Contains(move)) { res[m] = new CheckMoveResult(Special, gen, Valid, LMoveSourceSpecial, Move); } else if (gen >= 8 && MoveEgg.GetIsSharedEggMove(pkm, gen, move)) { res[m] = new CheckMoveResult(Shared, gen, Valid, native ? LMoveSourceShared : string.Format(LMoveSourceSharedF, gen), Move); } if (gen >= 3 || !IsCheckValid(res[m])) { continue; } // Gen1/Gen2 only below if (gen == 2 && learnInfo.Source.NonTradeBackLevelUpMoves.Contains(m)) { learnInfo.Gen2PreevoMoves.Add(m); } else if (gen == 1) { learnInfo.Gen1Moves.Add(m); if (learnInfo.Gen2PreevoMoves.Count != 0) { learnInfo.MixedGen12NonTradeback = true; } } if (pkm.TradebackStatus == TradebackType.Any && info.Generation != gen) { pkm.TradebackStatus = TradebackType.WasTradeback; } } }
private static CheckMoveResult[] ParseMoves(PKM pkm, MoveParseSource source, LegalInfo info) { var res = new CheckMoveResult[4]; bool AllParsed() => res.All(z => z != null); var required = pkm.Format != 1 ? 1 : GBRestrictions.GetRequiredMoveCount(pkm, source.CurrentMoves, info, source.Base); // Special considerations! int reset = 0; if (pkm is IBattleVersion v && v.BattleVersion != 0) { reset = ((GameVersion)v.BattleVersion).GetGeneration(); source.EggEventSource = Array.Empty <int>(); source.Base = Array.Empty <int>(); source.EggLevelUpSource = Array.Empty <int>(); source.EggMoveSource = Array.Empty <int>(); source.NonTradeBackLevelUpMoves = Array.Empty <int>(); source.SpecialSource = Array.Empty <int>(); } // Check empty moves and relearn moves before generation specific moves for (int m = 0; m < 4; m++) { if (source.CurrentMoves[m] == 0) { res[m] = new CheckMoveResult(None, pkm.Format, m < required ? Fishy : Valid, LMoveSourceEmpty, Move); } else if (reset == 0 && info.EncounterMoves.Relearn.Contains(source.CurrentMoves[m])) { res[m] = new CheckMoveResult(Relearn, info.Generation, Valid, LMoveSourceRelearn, Move) { Flag = true } } ; } if (AllParsed()) { return(res); } // Encapsulate arguments to simplify method calls var moveInfo = new LearnInfo(pkm, source); // Check moves going backwards, marking the move valid in the most current generation when it can be learned int[] generations = GetGenMovesCheckOrder(pkm); if (pkm.Format <= 2) { generations = generations.Where(z => z < info.EncounterMoves.LevelUpMoves.Length).ToArray(); } if (reset != 0) { generations = generations.Where(z => z >= reset).ToArray(); } int lastgen = generations.LastOrDefault(); foreach (var gen in generations) { ParseMovesByGeneration(pkm, res, gen, info, moveInfo, lastgen); if (AllParsed()) { return(res); } } if (pkm.Species == (int)Species.Shedinja && info.Generation <= 4) { ParseShedinjaEvolveMoves(pkm, res, source.CurrentMoves, info.EvoChainsAllGens); } for (int m = 0; m < 4; m++) { if (res[m] == null) { res[m] = new CheckMoveResult(Unknown, info.Generation, Invalid, LMoveSourceInvalid, Move); } } return(res); }
private static void ParseEggMovesInherited(PKM pkm, CheckMoveResult[] res, int gen, LearnInfo learnInfo) { var moves = learnInfo.Source.CurrentMoves; // Check higher-level moves after all the moves but just before egg moves to differentiate it from normal level up moves // Also check if the base egg moves is a non tradeback move for (int m = 0; m < 4; m++) { var r = res[m]; if (IsCheckValid(r)) // already validated { if (gen == 2 && r.Generation != 1) { continue; } } int move = moves[m]; if (move == 0) { continue; } if (!learnInfo.Source.EggLevelUpSource.Contains(move)) // Check if contains level-up egg moves from parents { continue; } if (learnInfo.IsGen2Pkm && learnInfo.Gen1Moves.Count != 0 && move > Legal.MaxMoveID_1) { res[m] = new CheckMoveResult(InheritLevelUp, gen, Invalid, LG1MoveTradeback, Move); learnInfo.MixedGen12NonTradeback = true; } else { res[m] = new CheckMoveResult(InheritLevelUp, gen, Valid, LMoveEggLevelUp, Move); } learnInfo.LevelUpEggMoves.Add(m); if (gen == 2 && learnInfo.Gen1Moves.Contains(m)) { learnInfo.Gen1Moves.Remove(m); } } if (gen <= 2 && learnInfo.Gen1Moves.Count == 0) { pkm.TradebackStatus = TradebackType.Any; } }
private static void ParseMovesByGenerationLast(PKM pkm, CheckMoveResult[] res, LearnInfo learnInfo, IEncounterable enc) { int gen = enc.Generation; ParseEggMovesInherited(pkm, res, gen, learnInfo); ParseEggMoves(pkm, res, gen, learnInfo); ParseEggMovesRemaining(pkm, res, learnInfo, enc); }
private static void ParseMovesByGeneration12(PKM pkm, CheckMoveResult[] res, IReadOnlyList <int> currentMoves, int gen, LegalInfo info, LearnInfo learnInfo) { // Mark the gen 1 exclusive moves as illegal because the pokemon also have Non tradeback egg moves. if (learnInfo.MixedGen12NonTradeback) { foreach (int m in learnInfo.Gen1Moves) { res[m] = new CheckMoveResult(res[m], Invalid, LG1MoveExclusive, CurrentMove); } foreach (int m in learnInfo.Gen2PreevoMoves) { res[m] = new CheckMoveResult(res[m], Invalid, LG1TradebackPreEvoMove, CurrentMove); } } if (gen == 1 && pkm.Format == 1 && pkm.Gen1_NotTradeback) { ParseRedYellowIncompatibleMoves(pkm, res, currentMoves); ParseEvolutionsIncompatibleMoves(pkm, res, currentMoves, info.EncounterMoves.TMHMMoves[1]); } }