From 99d0a56cba4ab8aabf1a16d0d2bc88969db21771 Mon Sep 17 00:00:00 2001 From: javierhimura Date: Sun, 19 Mar 2017 13:42:59 +0100 Subject: [PATCH] Alt slots for gen 3, feebas and unown forms --- PKHeX/Legality/Core.cs | 42 ++++++++++++++++++--- PKHeX/Legality/Tables3.cs | 78 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 5 deletions(-) diff --git a/PKHeX/Legality/Core.cs b/PKHeX/Legality/Core.cs index 790c9751c..1127592d9 100644 --- a/PKHeX/Legality/Core.cs +++ b/PKHeX/Legality/Core.cs @@ -166,7 +166,27 @@ private static EncounterArea[] addExtraTableSlots(EncounterArea[] GameSlots, Enc } return GameSlots; } + private static void MarkG3Slots_FRLG(ref EncounterArea[] Areas) + { + // Remove slots for unown, those slots does not contains alt form info, it will be added manually in SlotsRFLGAlt + // Group areas by location id, the raw data have areas with different slots but the same location id + Areas = Areas.Where(a => (a.Location < 188 || a.Location > 194)). + GroupBy(a => a.Location). + Select(a => + new EncounterArea() + { Location = a.First().Location, Slots = a.SelectMany(m => m.Slots).ToArray() }). + ToArray(); + } + private static void MarkG3Slots_RSE(ref EncounterArea[] Areas) + { + // Group areas by location id, the raw data have areas with different slots but the same location id + Areas = Areas.GroupBy(a => a.Location). + Select(a => + new EncounterArea() + { Location = a.First().Location, Slots = a.SelectMany(m => m.Slots).ToArray() }). + ToArray(); + } private static void MarkG5Slots(ref EncounterArea[] Areas) { foreach (var area in Areas) @@ -282,11 +302,23 @@ private static EncounterArea[] getTables2() StaticFR = getStaticEncounters(GameVersion.FR); StaticLG = getStaticEncounters(GameVersion.LG); - SlotsR = getEncounterTables(GameVersion.R); - SlotsS = getEncounterTables(GameVersion.S); - SlotsE = getEncounterTables(GameVersion.E); - SlotsFR = getEncounterTables(GameVersion.FR); - SlotsLG = getEncounterTables(GameVersion.LG); + var R_Slots = getEncounterTables(GameVersion.R); + var S_Slots = getEncounterTables(GameVersion.S); + var E_Slots = getEncounterTables(GameVersion.E); + var FR_Slots = getEncounterTables(GameVersion.FR); + var LG_Slots = getEncounterTables(GameVersion.LG); + + MarkG3Slots_RSE(ref R_Slots); + MarkG3Slots_RSE(ref S_Slots); + MarkG3Slots_RSE(ref E_Slots); + MarkG3Slots_FRLG(ref FR_Slots); + MarkG3Slots_FRLG(ref LG_Slots); + + SlotsR = addExtraTableSlots(R_Slots, SlotsRSEAlt); + SlotsS = addExtraTableSlots(S_Slots, SlotsRSEAlt); + SlotsE = addExtraTableSlots(E_Slots, SlotsRSEAlt); + SlotsFR = addExtraTableSlots(FR_Slots, SlotsFRLGAlt); + SlotsLG = addExtraTableSlots(LG_Slots, SlotsFRLGAlt); Evolves3 = new EvolutionTree(new[] { Resources.evos_g3 }, GameVersion.RS, PersonalTable.RS, MaxSpeciesID_3); diff --git a/PKHeX/Legality/Tables3.cs b/PKHeX/Legality/Tables3.cs index 695ba62fe..bacf8d4ae 100644 --- a/PKHeX/Legality/Tables3.cs +++ b/PKHeX/Legality/Tables3.cs @@ -144,5 +144,83 @@ public static partial class Legal //todo }; + #region AltSlots + private static readonly EncounterArea[] SlotsRSEAlt = + { + new EncounterArea { + Location = 34, // Route 119 + Slots = new[] + { + new EncounterSlot { Species = 349, LevelMin = 20, LevelMax = 25, Type = SlotType.Super_Rod, Form = 25 }, // Feebas + },} + }; + private static readonly EncounterArea[] SlotsFRLGAlt = + { + new EncounterArea { + Location = 188, // Monean Chamber + Slots = new[] + { + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 0 }, // Unown A + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 26 }, // Unown ? + },}, + new EncounterArea { + Location = 189, // Liptoo Chamber + Slots = new[] + { + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 2 }, // Unown C + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 3 }, // Unown D + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 7 }, // Unown H + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 14 }, // Unown O + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 20 }, // Unown U + },}, + new EncounterArea { + Location = 190, // Weepth Chamber + Slots = new[] + { + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 4 }, // Unown E + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 8 }, // Unown I + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 13 }, // Unown N + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 18 }, // Unown S + },}, + new EncounterArea { + Location = 191, // Dilford Chamber + Slots = new[] + { + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 9 }, // Unown J + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 11 }, // Unown L + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 15 }, // Unown P + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 16 }, // Unown Q + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 17 }, // Unown R + },}, + new EncounterArea { + Location = 192, // Scufib Chamber + Slots = new[] + { + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 5 }, // Unown F + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 6 }, // Unown G + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 10 }, // Unown K + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 19 }, // Unown T + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 24 }, // Unown Y + },}, + new EncounterArea { + Location = 193, // Rixy Chamber + Slots = new[] + { + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 1 }, // Unown B + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 12 }, // Unown M + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 21 }, // Unown V + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 22 }, // Unown W + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 23 }, // Unown X + },}, + new EncounterArea { + Location = 193, // Viapois Chamber + Slots = new[] + { + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 25 }, // Unown Z + new EncounterSlot { Species = 201, LevelMin = 25, LevelMax = 25, Type = SlotType.Grass, Form = 27 }, // Unown ! + },} + }; + #endregion + } }