diff --git a/PKHeX.Core/Game/GameData.cs b/PKHeX.Core/Game/GameData.cs new file mode 100644 index 000000000..58a93b1ac --- /dev/null +++ b/PKHeX.Core/Game/GameData.cs @@ -0,0 +1,137 @@ +using System.Collections.Generic; + +namespace PKHeX.Core +{ + public static class GameData + { + public static Learnset[] GetLearnsets(GameVersion game) => Learnsets[game]; + public static PersonalTable GetPersonal(GameVersion game) => Personal[game]; + + private static readonly Dictionary Learnsets = new Dictionary + { + { GameVersion.RD, Legal.LevelUpRB }, + { GameVersion.BU, Legal.LevelUpRB }, + { GameVersion.GN, Legal.LevelUpRB }, + { GameVersion.YW, Legal.LevelUpY }, + { GameVersion.GD, Legal.LevelUpGS }, + { GameVersion.SV, Legal.LevelUpGS }, + { GameVersion.C, Legal.LevelUpC }, + + { GameVersion.R, Legal.LevelUpRS }, + { GameVersion.S, Legal.LevelUpRS }, + { GameVersion.E, Legal.LevelUpE }, + { GameVersion.FR, Legal.LevelUpFR }, + { GameVersion.LG, Legal.LevelUpLG }, + { GameVersion.COLO, Legal.LevelUpE }, + { GameVersion.XD, Legal.LevelUpE }, + + { GameVersion.D, Legal.LevelUpDP }, + { GameVersion.P, Legal.LevelUpDP }, + { GameVersion.Pt, Legal.LevelUpPt }, + { GameVersion.HG, Legal.LevelUpHGSS }, + { GameVersion.SS, Legal.LevelUpHGSS }, + + { GameVersion.B, Legal.LevelUpBW }, + { GameVersion.W, Legal.LevelUpBW }, + { GameVersion.B2, Legal.LevelUpB2W2 }, + { GameVersion.W2, Legal.LevelUpB2W2 }, + + { GameVersion.X, Legal.LevelUpXY }, + { GameVersion.Y, Legal.LevelUpXY }, + { GameVersion.AS, Legal.LevelUpAO }, + { GameVersion.OR, Legal.LevelUpAO }, + + { GameVersion.SN, Legal.LevelUpSM }, + { GameVersion.MN, Legal.LevelUpSM }, + { GameVersion.US, Legal.LevelUpUSUM }, + { GameVersion.UM, Legal.LevelUpUSUM }, + + { GameVersion.RB, Legal.LevelUpRB }, + { GameVersion.RBY, Legal.LevelUpY }, + { GameVersion.GSC, Legal.LevelUpC }, + { GameVersion.RS, Legal.LevelUpRS }, + { GameVersion.FRLG, Legal.LevelUpE }, + { GameVersion.CXD, Legal.LevelUpE }, + { GameVersion.DP, Legal.LevelUpDP }, + { GameVersion.HGSS, Legal.LevelUpHGSS }, + { GameVersion.BW, Legal.LevelUpBW }, + { GameVersion.B2W2, Legal.LevelUpB2W2 }, + { GameVersion.XY, Legal.LevelUpXY }, + { GameVersion.ORAS, Legal.LevelUpAO }, + { GameVersion.SM, Legal.LevelUpSM }, + { GameVersion.USUM, Legal.LevelUpUSUM }, + + { GameVersion.Gen1, Legal.LevelUpY }, + { GameVersion.Gen2, Legal.LevelUpC }, + { GameVersion.Gen3, Legal.LevelUpE }, + { GameVersion.Gen4, Legal.LevelUpHGSS }, + { GameVersion.Gen5, Legal.LevelUpB2W2 }, + { GameVersion.Gen6, Legal.LevelUpAO }, + { GameVersion.Gen7, Legal.LevelUpSM }, + { GameVersion.VCEvents, Legal.LevelUpY }, + }; + private static readonly Dictionary Personal = new Dictionary + { + { GameVersion.RD, PersonalTable.RB }, + { GameVersion.BU, PersonalTable.RB }, + { GameVersion.GN, PersonalTable.RB }, + { GameVersion.YW, PersonalTable.Y }, + { GameVersion.GD, PersonalTable.GS }, + { GameVersion.SV, PersonalTable.GS }, + { GameVersion.C, PersonalTable.C }, + + { GameVersion.R, PersonalTable.RS }, + { GameVersion.S, PersonalTable.RS }, + { GameVersion.E, PersonalTable.E }, + { GameVersion.FR, PersonalTable.FR }, + { GameVersion.LG, PersonalTable.LG }, + { GameVersion.COLO, PersonalTable.E }, + { GameVersion.XD, PersonalTable.E }, + + { GameVersion.D, PersonalTable.DP }, + { GameVersion.P, PersonalTable.DP }, + { GameVersion.Pt, PersonalTable.Pt }, + { GameVersion.HG, PersonalTable.HGSS }, + { GameVersion.SS, PersonalTable.HGSS }, + + { GameVersion.B, PersonalTable.BW }, + { GameVersion.W, PersonalTable.BW }, + { GameVersion.B2, PersonalTable.B2W2 }, + { GameVersion.W2, PersonalTable.B2W2 }, + + { GameVersion.X, PersonalTable.XY }, + { GameVersion.Y, PersonalTable.XY }, + { GameVersion.AS, PersonalTable.AO }, + { GameVersion.OR, PersonalTable.AO }, + + { GameVersion.SN, PersonalTable.SM }, + { GameVersion.MN, PersonalTable.SM }, + { GameVersion.US, PersonalTable.USUM }, + { GameVersion.UM, PersonalTable.USUM }, + + { GameVersion.RB, PersonalTable.RB }, + { GameVersion.RBY, PersonalTable.Y }, + { GameVersion.GSC, PersonalTable.C }, + { GameVersion.RS, PersonalTable.RS }, + { GameVersion.FRLG, PersonalTable.E }, + { GameVersion.CXD, PersonalTable.E }, + { GameVersion.DP, PersonalTable.DP }, + { GameVersion.HGSS, PersonalTable.HGSS }, + { GameVersion.BW, PersonalTable.BW }, + { GameVersion.B2W2, PersonalTable.B2W2 }, + { GameVersion.XY, PersonalTable.XY }, + { GameVersion.ORAS, PersonalTable.AO }, + { GameVersion.SM, PersonalTable.SM }, + { GameVersion.USUM, PersonalTable.USUM }, + + { GameVersion.Gen1, PersonalTable.Y }, + { GameVersion.Gen2, PersonalTable.C }, + { GameVersion.Gen3, PersonalTable.E }, + { GameVersion.Gen4, PersonalTable.HGSS }, + { GameVersion.Gen5, PersonalTable.B2W2 }, + { GameVersion.Gen6, PersonalTable.AO }, + { GameVersion.Gen7, PersonalTable.SM }, + { GameVersion.VCEvents, PersonalTable.Y }, + }; + } +} diff --git a/PKHeX.Core/Legality/Core.cs b/PKHeX.Core/Legality/Core.cs index 84460d720..cd151b069 100644 --- a/PKHeX.Core/Legality/Core.cs +++ b/PKHeX.Core/Legality/Core.cs @@ -40,45 +40,45 @@ public static partial class Legal public static GameVersion Savegame_Version { private get; set; } = GameVersion.Any; // Gen 1 - private static readonly Learnset[] LevelUpRB = Learnset1.GetArray(Util.GetBinaryResource("lvlmove_rb.pkl"), MaxSpeciesID_1); - private static readonly Learnset[] LevelUpY = Learnset1.GetArray(Util.GetBinaryResource("lvlmove_y.pkl"), MaxSpeciesID_1); + internal static readonly Learnset[] LevelUpRB = Learnset1.GetArray(Util.GetBinaryResource("lvlmove_rb.pkl"), MaxSpeciesID_1); + internal static readonly Learnset[] LevelUpY = Learnset1.GetArray(Util.GetBinaryResource("lvlmove_y.pkl"), MaxSpeciesID_1); // Gen 2 - private static readonly EggMoves[] EggMovesGS = EggMoves2.GetArray(Util.GetBinaryResource("eggmove_gs.pkl"), MaxSpeciesID_2); - private static readonly Learnset[] LevelUpGS = Learnset1.GetArray(Util.GetBinaryResource("lvlmove_gs.pkl"), MaxSpeciesID_2); - private static readonly EggMoves[] EggMovesC = EggMoves2.GetArray(Util.GetBinaryResource("eggmove_c.pkl"), MaxSpeciesID_2); - private static readonly Learnset[] LevelUpC = Learnset1.GetArray(Util.GetBinaryResource("lvlmove_c.pkl"), MaxSpeciesID_2); + internal static readonly EggMoves[] EggMovesGS = EggMoves2.GetArray(Util.GetBinaryResource("eggmove_gs.pkl"), MaxSpeciesID_2); + internal static readonly Learnset[] LevelUpGS = Learnset1.GetArray(Util.GetBinaryResource("lvlmove_gs.pkl"), MaxSpeciesID_2); + internal static readonly EggMoves[] EggMovesC = EggMoves2.GetArray(Util.GetBinaryResource("eggmove_c.pkl"), MaxSpeciesID_2); + internal static readonly Learnset[] LevelUpC = Learnset1.GetArray(Util.GetBinaryResource("lvlmove_c.pkl"), MaxSpeciesID_2); // Gen 3 - private static readonly Learnset[] LevelUpE = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_e.pkl"), "em")); - private static readonly Learnset[] LevelUpRS = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_rs.pkl"), "rs")); - private static readonly Learnset[] LevelUpFR = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_fr.pkl"), "fr")); - private static readonly Learnset[] LevelUpLG = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_lg.pkl"), "lg")); - private static readonly EggMoves[] EggMovesRS = EggMoves6.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_rs.pkl"), "rs")); + internal static readonly Learnset[] LevelUpE = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_e.pkl"), "em")); + internal static readonly Learnset[] LevelUpRS = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_rs.pkl"), "rs")); + internal static readonly Learnset[] LevelUpFR = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_fr.pkl"), "fr")); + internal static readonly Learnset[] LevelUpLG = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_lg.pkl"), "lg")); + internal static readonly EggMoves[] EggMovesRS = EggMoves6.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_rs.pkl"), "rs")); // Gen 4 - private static readonly Learnset[] LevelUpDP = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_dp.pkl"), "dp")); - private static readonly Learnset[] LevelUpPt = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_pt.pkl"), "pt")); - private static readonly Learnset[] LevelUpHGSS = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_hgss.pkl"), "hs")); - private static readonly EggMoves[] EggMovesDPPt = EggMoves6.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_dppt.pkl"), "dp")); - private static readonly EggMoves[] EggMovesHGSS = EggMoves6.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_hgss.pkl"), "hs")); + internal static readonly Learnset[] LevelUpDP = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_dp.pkl"), "dp")); + internal static readonly Learnset[] LevelUpPt = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_pt.pkl"), "pt")); + internal static readonly Learnset[] LevelUpHGSS = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_hgss.pkl"), "hs")); + internal static readonly EggMoves[] EggMovesDPPt = EggMoves6.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_dppt.pkl"), "dp")); + internal static readonly EggMoves[] EggMovesHGSS = EggMoves6.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_hgss.pkl"), "hs")); // Gen 5 - private static readonly Learnset[] LevelUpBW = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_bw.pkl"), "51")); - private static readonly Learnset[] LevelUpB2W2 = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_b2w2.pkl"), "52")); - private static readonly EggMoves[] EggMovesBW = EggMoves6.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_bw.pkl"), "bw")); + internal static readonly Learnset[] LevelUpBW = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_bw.pkl"), "51")); + internal static readonly Learnset[] LevelUpB2W2 = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_b2w2.pkl"), "52")); + internal static readonly EggMoves[] EggMovesBW = EggMoves6.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_bw.pkl"), "bw")); // Gen 6 - private static readonly EggMoves[] EggMovesXY = EggMoves6.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_xy.pkl"), "xy")); - private static readonly Learnset[] LevelUpXY = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_xy.pkl"), "xy")); - private static readonly EggMoves[] EggMovesAO = EggMoves6.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_ao.pkl"), "ao")); - private static readonly Learnset[] LevelUpAO = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_ao.pkl"), "ao")); + internal static readonly EggMoves[] EggMovesXY = EggMoves6.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_xy.pkl"), "xy")); + internal static readonly Learnset[] LevelUpXY = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_xy.pkl"), "xy")); + internal static readonly EggMoves[] EggMovesAO = EggMoves6.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_ao.pkl"), "ao")); + internal static readonly Learnset[] LevelUpAO = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_ao.pkl"), "ao")); // Gen 7 - private static readonly EggMoves[] EggMovesSM = EggMoves7.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_sm.pkl"), "sm")); - private static readonly Learnset[] LevelUpSM = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_sm.pkl"), "sm")); - private static readonly EggMoves[] EggMovesUSUM = EggMoves7.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_uu.pkl"), "uu")); - private static readonly Learnset[] LevelUpUSUM = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_uu.pkl"), "uu")); + internal static readonly EggMoves[] EggMovesSM = EggMoves7.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_sm.pkl"), "sm")); + internal static readonly Learnset[] LevelUpSM = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_sm.pkl"), "sm")); + internal static readonly EggMoves[] EggMovesUSUM = EggMoves7.GetArray(Data.UnpackMini(Util.GetBinaryResource("eggmove_uu.pkl"), "uu")); + internal static readonly Learnset[] LevelUpUSUM = Learnset6.GetArray(Data.UnpackMini(Util.GetBinaryResource("lvlmove_uu.pkl"), "uu")); // Setup Help static Legal() @@ -2187,5 +2187,13 @@ internal static TreesArea GetCrystalTreeArea(EncounterSlot Slot) { return HeadbuttTreesC.FirstOrDefault(a => a.Location == Slot.Location); } + + public static int[] GetEncounterMoves(PKM pk, int level, GameVersion version) + { + var learn = GameData.GetLearnsets(version); + var table = GameData.GetPersonal(version); + var index = table.GetFormeIndex(pk.Species, pk.AltForm); + return learn[index].GetEncounterMoves(level); + } } }