From cbccc6a28b5eaf87c8fc0f1b386a271a01e98ce9 Mon Sep 17 00:00:00 2001 From: Kurt Date: Sun, 12 Feb 2017 09:52:26 -0800 Subject: [PATCH] Add rby encounters Includes fishing slots todo on trades/static encounters; feel free to pull request (look at tables6/7 for ref). --- PKHeX.WinForms/Program.cs | 8 +- PKHeX/Legality/Core.cs | 127 ++++++++++++++------ PKHeX/Legality/Structures/EncounterArea.cs | 113 ++++++++++++++++- PKHeX/Legality/Structures/EncounterSlot.cs | 13 ++ PKHeX/Legality/Tables1.cs | 27 +++++ PKHeX/Legality/Tables2.cs | 1 + PKHeX/Legality/Tables3.cs | 1 + PKHeX/Legality/Tables4.cs | 12 ++ PKHeX/Legality/Tables5.cs | 7 ++ PKHeX/PKHeX.Core.csproj | 5 + PKHeX/PKM/PKM.cs | 8 +- PKHeX/Properties/Resources.Designer.cs | 50 ++++++++ PKHeX/Properties/Resources.resx | 15 +++ PKHeX/Resources/byte/encounter_blue.pkl | Bin 0 -> 1756 bytes PKHeX/Resources/byte/encounter_rb_f.pkl | Bin 0 -> 172 bytes PKHeX/Resources/byte/encounter_red.pkl | Bin 0 -> 1756 bytes PKHeX/Resources/byte/encounter_yellow.pkl | Bin 0 -> 1880 bytes PKHeX/Resources/byte/encounter_yellow_f.pkl | Bin 0 -> 280 bytes 18 files changed, 346 insertions(+), 41 deletions(-) create mode 100644 PKHeX/Resources/byte/encounter_blue.pkl create mode 100644 PKHeX/Resources/byte/encounter_rb_f.pkl create mode 100644 PKHeX/Resources/byte/encounter_red.pkl create mode 100644 PKHeX/Resources/byte/encounter_yellow.pkl create mode 100644 PKHeX/Resources/byte/encounter_yellow_f.pkl diff --git a/PKHeX.WinForms/Program.cs b/PKHeX.WinForms/Program.cs index 5d671e786..31ff979bd 100644 --- a/PKHeX.WinForms/Program.cs +++ b/PKHeX.WinForms/Program.cs @@ -49,11 +49,9 @@ private static void Main() MessageBox.Show("Could not locate PKHeX.Core.dll. Make sure you're running PKHeX together with its code library. Usually caused when all files are not extracted.", "PKHeX Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } - else - { - // Exception came from Main - throw; - } + + // Exception came from Main + throw; } } diff --git a/PKHeX/Legality/Core.cs b/PKHeX/Legality/Core.cs index eab18325b..c13d56dab 100644 --- a/PKHeX/Legality/Core.cs +++ b/PKHeX/Legality/Core.cs @@ -13,6 +13,8 @@ public static partial class Legal // Gen 1 private static readonly Learnset[] LevelUpRB = Learnset1.getArray(Resources.lvlmove_rby); private static readonly EvolutionTree Evolves1; + private static readonly EncounterArea[] SlotsRBY; + private static readonly EncounterStatic[] StaticRBY; // Gen 6 private static readonly EggMoves[] EggMovesXY = EggMoves6.getArray(Data.unpackMini(Resources.eggmove_xy, "xy")); @@ -36,16 +38,16 @@ private static EncounterStatic[] getStaticEncounters(GameVersion Game) EncounterStatic[] table; switch (Game) { - case GameVersion.X: - case GameVersion.Y: + case GameVersion.RBY: + table = Encounter_RBY; + break; + case GameVersion.X: case GameVersion.Y: table = Encounter_XY; break; - case GameVersion.AS: - case GameVersion.OR: + case GameVersion.AS: case GameVersion.OR: table = Encounter_AO; break; - case GameVersion.SN: - case GameVersion.MN: + case GameVersion.SN: case GameVersion.MN: table = Encounter_SM; break; @@ -136,6 +138,20 @@ private static void MarkG7SMSlots(ref EncounterArea[] Areas) // Gen 1 { Evolves1 = new EvolutionTree(new[] { Resources.evos_rby }, GameVersion.RBY, PersonalTable.RBY, MaxSpeciesID_1); + var red = EncounterArea.getArray1_GW(Resources.encounter_red); + var blu = EncounterArea.getArray1_GW(Resources.encounter_blue); + var ylw = EncounterArea.getArray1_GW(Resources.encounter_yellow); + var rb_fish = EncounterArea.getArray1_F(Resources.encounter_rb_f); + var ylw_fish = EncounterArea.getArray1_FY(Resources.encounter_yellow_f); + + red = addExtraTableSlots(red, rb_fish); + blu = addExtraTableSlots(blu, rb_fish); + ylw = addExtraTableSlots(ylw, ylw_fish); + + SlotsRBY = addExtraTableSlots(addExtraTableSlots(red, blu), ylw); + Array.Resize(ref SlotsRBY, SlotsRBY.Length + 1); + SlotsRBY[SlotsRBY.Length - 1] = FishOldGood_RBY; + StaticRBY = getStaticEncounters(GameVersion.RBY); } // Gen 6 { @@ -186,6 +202,9 @@ internal static IEnumerable getValidMoves(PKM pkm, IEnumerable ev internal static IEnumerable getValidRelearn(PKM pkm, int skipOption) { List r = new List { 0 }; + if (pkm.Format < 6) + return r; + int species = getBaseSpecies(pkm, skipOption); r.AddRange(getLVLMoves(pkm, species, 1, pkm.AltForm)); @@ -241,7 +260,7 @@ internal static EncounterLink getValidLinkGifts(PKM pkm) case 6: return LinkGifts6.FirstOrDefault(g => g.Species == pkm.Species && g.Level == pkm.Met_Level); default: - return LinkGifts7.FirstOrDefault(g => g.Species == pkm.Species && g.Level == pkm.Met_Level); + return null; } } internal static EncounterSlot[] getValidWildEncounters(PKM pkm) @@ -263,7 +282,7 @@ internal static EncounterStatic getValidStaticEncounter(PKM pkm) continue; if (e.EggLocation != pkm.Egg_Location) continue; - if (e.Location != 0 && e.Location != pkm.Met_Location) + if (pkm.HasOriginalMetLocation && e.Location != 0 && e.Location != pkm.Met_Location) continue; if (e.Gender != -1 && e.Gender != pkm.Gender) continue; @@ -297,11 +316,13 @@ internal static EncounterTrade getValidIngameTrade(PKM pkm) IEnumerable p = getValidPreEvolutions(pkm); EncounterTrade[] table = null; - if (pkm.XY) + if (pkm.VC1) + table = TradeGift_RBY; + else if (pkm.XY) table = TradeGift_XY; - if (pkm.AO) + else if (pkm.AO) table = TradeGift_AO; - if (pkm.SM) + else if (pkm.SM) table = TradeGift_SM; EncounterTrade z = table?.FirstOrDefault(f => p.Any(r => r.Species == f.Species)); @@ -319,7 +340,7 @@ internal static EncounterTrade getValidIngameTrade(PKM pkm) return null; if (z.SID != pkm.SID) return null; - if (z.Location != pkm.Met_Location) + if (pkm.HasOriginalMetLocation && z.Location != pkm.Met_Location) return null; if (z.Level != pkm.Met_Level) return null; @@ -365,13 +386,16 @@ private static EvolutionTree getEvolutionTable(PKM pkm) { switch (pkm.Format) { + case 1: + return Evolves1; + case 6: return Evolves6; case 7: return Evolves7; default: - return Evolves6; + return Evolves7; } } @@ -400,12 +424,11 @@ private static int getMaxSpeciesOrigin(int generation) internal static int getMaxSpeciesOrigin(PKM pkm) { - if (pkm.Format == 1 || pkm.VC1) //Gen1 VC could not trade with gen 2 yet + if (pkm.Format == 1 || pkm.VC1) // Gen1 VC could not trade with gen 2 yet return getMaxSpeciesOrigin(1); - else if (pkm.Format == 2 || pkm.VC2) + if (pkm.Format == 2 || pkm.VC2) return getMaxSpeciesOrigin(2); - else - return getMaxSpeciesOrigin(pkm.GenNumber); + return getMaxSpeciesOrigin(pkm.GenNumber); } internal static IEnumerable getValidGifts(PKM pkm) @@ -540,10 +563,23 @@ internal static IEnumerable getWildBalls(PKM pkm) { switch (pkm.GenNumber) { + case 1: + return WildPokeBalls1; + case 2: + return WildPokeBalls2; + case 3: + return WildPokeBalls3; + case 4: + return pkm.HGSS ? WildPokeBalls4_HGSS : WildPokeBalls4_DPPt; + case 5: + return WildPokeBalls5; + case 6: + return WildPokeballs6; case 7: return WildPokeballs7; + default: - return WildPokeballs6; + return null; } } @@ -624,6 +660,9 @@ internal static bool getCanBeCaptured(int species, int gen, GameVersion version { switch (gen) { + case 1: + return getCanBeCaptured(species, SlotsRBY, StaticRBY); + case 6: switch (version) { @@ -761,6 +800,10 @@ private static IEnumerable getDexNavAreas(PKM pkm) private static IEnumerable getLVLMoves(PKM pkm, int species, int lvl, int formnum) { List moves = new List(); + if (pkm.InhabitedGeneration(1)) + { + moves.AddRange(LevelUpRB[species].getMoves(lvl)); + } if (pkm.InhabitedGeneration(6)) { int ind_XY = PersonalTable.XY.getFormeIndex(species, formnum); @@ -777,49 +820,62 @@ private static IEnumerable getLVLMoves(PKM pkm, int species, int lvl, int f } private static IEnumerable getEncounterSlots(PKM pkm, int lvl = -1) { - switch (pkm.Version) + switch ((GameVersion)pkm.Version) { - case (int)GameVersion.X: + case GameVersion.RD: case GameVersion.BU: + case GameVersion.GN: case GameVersion.YW: + return getSlots(pkm, SlotsRBY, lvl); + + case GameVersion.X: return getSlots(pkm, SlotsX, lvl); - case (int)GameVersion.Y: + case GameVersion.Y: return getSlots(pkm, SlotsY, lvl); - case (int)GameVersion.AS: + case GameVersion.AS: return getSlots(pkm, SlotsA, lvl); - case (int)GameVersion.OR: + case GameVersion.OR: return getSlots(pkm, SlotsO, lvl); - case (int)GameVersion.SN: + + case GameVersion.SN: return getSlots(pkm, SlotsSN, lvl); - case (int)GameVersion.MN: + case GameVersion.MN: return getSlots(pkm, SlotsMN, lvl); default: return new List(); } } private static IEnumerable getStaticEncounters(PKM pkm, int lvl = -1) { - switch (pkm.Version) + switch ((GameVersion)pkm.Version) { - case (int)GameVersion.X: + case GameVersion.RD: case GameVersion.BU: + case GameVersion.GN: case GameVersion.YW: + return getStatic(pkm, StaticRBY, lvl); + + case GameVersion.X: return getStatic(pkm, StaticX, lvl); - case (int)GameVersion.Y: + case GameVersion.Y: return getStatic(pkm, StaticY, lvl); - case (int)GameVersion.AS: + case GameVersion.AS: return getStatic(pkm, StaticA, lvl); - case (int)GameVersion.OR: + case GameVersion.OR: return getStatic(pkm, StaticO, lvl); - case (int)GameVersion.SN: + + case GameVersion.SN: return getStatic(pkm, StaticSN, lvl); - case (int)GameVersion.MN: + case GameVersion.MN: return getStatic(pkm, StaticMN, lvl); + default: return new List(); } } private static IEnumerable getEncounterAreas(PKM pkm) { - return getEncounterSlots(pkm).Where(l => l.Location == pkm.Met_Location); + var slots = getEncounterSlots(pkm); + bool noMet = !pkm.HasOriginalMetLocation; + return noMet ? slots : slots.Where(area => area.Location == pkm.Met_Location); } private static IEnumerable getValidEncounterSlots(PKM pkm, EncounterArea loc, bool DexNav, bool ignoreLevel = false) { - const int fluteBoost = 4; + int fluteBoost = pkm.Format < 3 ? 0 : 4; const int dexnavBoost = 30; int df = DexNav ? fluteBoost : 0; @@ -1036,6 +1092,9 @@ private static IEnumerable getTutorMoves(PKM pkm, int species, int form, bo PersonalInfo info = pkm.PersonalInfo; List moves = new List(); + if (pkm.Format < 3) + return moves; + // Type Tutors -- Pledge moves and High BP moves switched places in G7+ if (pkm.Format <= 6) moves.AddRange(TypeTutor6.Where((t, i) => info.TypeTutors[i])); diff --git a/PKHeX/Legality/Structures/EncounterArea.cs b/PKHeX/Legality/Structures/EncounterArea.cs index 954a42b2f..5c7a333ed 100644 --- a/PKHeX/Legality/Structures/EncounterArea.cs +++ b/PKHeX/Legality/Structures/EncounterArea.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; namespace PKHeX.Core { @@ -24,6 +25,117 @@ private EncounterArea(byte[] data) }; } } + + private static EncounterSlot1[] getSlots1_GW(byte[] data, ref int ofs, SlotType t) + { + int rate = data[ofs++]; + return rate == 0 ? new EncounterSlot1[0] : readSlots(data, ref ofs, 10, t, rate); + } + private static EncounterSlot1[] getSlots1_F(byte[] data, ref int ofs) + { + int count = data[ofs++]; + return readSlots(data, ref ofs, count, SlotType.Super_Rod, -1); + } + + /// + /// RBY Format Slot Getter from data. + /// + /// Byte array containing complete slot data table. + /// Offset to start reading from. + /// Amount of slots to read. + /// Type of encounter slot. + /// Slot type encounter rate. + /// Array of encounter slots. + private static EncounterSlot1[] readSlots(byte[] data, ref int ofs, int count, SlotType t, int rate) + { + EncounterSlot1[] slots = new EncounterSlot1[count]; + for (int i = 0; i < count; i++) + { + int lvl = data[ofs++]; + int spec = data[ofs++]; + + slots[i] = new EncounterSlot1 + { + LevelMax = lvl, + LevelMin = lvl, + Species = spec, + Type = t, + Rate = rate, + }; + } + return slots; + } + public static EncounterArea[] getArray1_GW(byte[] data) + { + // RBY Format + var ptr = new int[255]; + int count = 0; + for (int i = 0; i < ptr.Length; i++) + { + ptr[i] = BitConverter.ToInt16(data, i*2); + if (ptr[i] != -1) + continue; + + count = i; + break; + } + + EncounterArea[] areas = new EncounterArea[count]; + for (int i = 0; i < areas.Length; i++) + { + var grass = getSlots1_GW(data, ref ptr[i], SlotType.Grass); + var water = getSlots1_GW(data, ref ptr[i], SlotType.Surf); + areas[i] = new EncounterArea + { + Location = i, + Slots = grass.Concat(water).ToArray() + }; + } + return areas.Where(area => area.Slots.Any()).ToArray(); + } + public static EncounterArea[] getArray1_FY(byte[] data) + { + const int size = 9; + int count = data.Length/size; + EncounterArea[] areas = new EncounterArea[count]; + for (int i = 0; i < count; i++) + { + int ofs = i*size + 1; + areas[i] = new EncounterArea + { + Location = data[i*size + 0], + Slots = readSlots(data, ref ofs, 4, SlotType.Super_Rod, -1) + }; + } + return areas; + } + public static EncounterArea[] getArray1_F(byte[] data) + { + var ptr = new int[255]; + var map = new int[255]; + int count = 0; + for (int i = 0; i < ptr.Length; i++) + { + map[i] = data[i*3 + 0]; + if (map[i] == 0xFF) + { + count = i; + break; + } + ptr[i] = BitConverter.ToInt16(data, i * 3 + 1); + } + + EncounterArea[] areas = new EncounterArea[count]; + for (int i = 0; i < areas.Length; i++) + { + areas[i] = new EncounterArea + { + Location = map[i], + Slots = getSlots1_F(data, ref ptr[i]) + }; + } + return areas; + } public static EncounterArea[] getArray(byte[][] entries) { if (entries == null) @@ -35,5 +147,4 @@ public static EncounterArea[] getArray(byte[][] entries) return data; } } - } diff --git a/PKHeX/Legality/Structures/EncounterSlot.cs b/PKHeX/Legality/Structures/EncounterSlot.cs index efa3f9bc0..ae020cf51 100644 --- a/PKHeX/Legality/Structures/EncounterSlot.cs +++ b/PKHeX/Legality/Structures/EncounterSlot.cs @@ -27,4 +27,17 @@ public EncounterSlot(EncounterSlot template) public string Name => "Wild Encounter"; } + public class EncounterSlot1 : EncounterSlot + { + public int Rate; + public EncounterSlot1() { } + public EncounterSlot1(EncounterSlot1 template) + { + Species = template.Species; + LevelMax = template.LevelMax; + LevelMin = template.LevelMin; + Type = template.Type; + Rate = template.Rate; + } + } } diff --git a/PKHeX/Legality/Tables1.cs b/PKHeX/Legality/Tables1.cs index a4347720e..2e0760bca 100644 --- a/PKHeX/Legality/Tables1.cs +++ b/PKHeX/Legality/Tables1.cs @@ -30,5 +30,32 @@ public static partial class Legal }; internal static readonly int[] TransferSpeciesDefaultAbility_1 = {92, 93, 94, 109, 110, 151}; + + internal static readonly int[] TMHM_RBY = + { + 005, 013, 014, 018, 025, 092, 032, 034, 036, 038, + 061, 055, 058, 059, 063, 006, 066, 068, 069, 099, + 072, 076, 082, 085, 087, 089, 090, 091, 094, 100, + 102, 104, 115, 117, 118, 120, 121, 126, 129, 130, + 135, 138, 143, 156, 086, 149, 153, 157, 161, 164, + + 015, 019, 057, 070, 148 + }; + internal static readonly int[] WildPokeBalls1 = {4}; + + internal static readonly EncounterStatic[] Encounter_RBY = + { + // todo + }; + internal static readonly EncounterTrade[] TradeGift_RBY = + { + // todo + }; + internal static readonly EncounterArea FishOldGood_RBY = new EncounterArea { Location = -1, Slots = new EncounterSlot[] + { + new EncounterSlot1 {Species = 129, LevelMin = 05, LevelMax = 05, Type = SlotType.Old_Rod, Rate = -1, }, // Magikarp + new EncounterSlot1 {Species = 118, LevelMin = 10, LevelMax = 10, Type = SlotType.Good_Rod, Rate = -1, }, // Goldeen + new EncounterSlot1 {Species = 060, LevelMin = 10, LevelMax = 10, Type = SlotType.Good_Rod, Rate = -1, }, // Poliwag + }}; } } diff --git a/PKHeX/Legality/Tables2.cs b/PKHeX/Legality/Tables2.cs index 542a7e868..27a3a89c5 100644 --- a/PKHeX/Legality/Tables2.cs +++ b/PKHeX/Legality/Tables2.cs @@ -35,5 +35,6 @@ public static partial class Legal 10, 05, 10, 20, 20, 40, 15, 10, 20, 20, 25, 05, 15, 10, 05, 20, 15, 20, 25, 20, 05, 30, 05, 10, 20, 40, 05, 20, 40, 20, 15, 35, 10, 05, 05, 05, 15, 05, 20, 05, 05, 15, 20, 10, 05, 05, 15, 15, 15, 15, 10, 00, 00, 00, 00 }; + internal static readonly int[] WildPokeBalls2 = { 4 }; } } diff --git a/PKHeX/Legality/Tables3.cs b/PKHeX/Legality/Tables3.cs index 6bd11db41..a136845ca 100644 --- a/PKHeX/Legality/Tables3.cs +++ b/PKHeX/Legality/Tables3.cs @@ -81,5 +81,6 @@ public static partial class Legal 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593 }; + internal static readonly int[] WildPokeBalls3 = {1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12}; } } diff --git a/PKHeX/Legality/Tables4.cs b/PKHeX/Legality/Tables4.cs index 12127926c..8dbfb116b 100644 --- a/PKHeX/Legality/Tables4.cs +++ b/PKHeX/Legality/Tables4.cs @@ -118,5 +118,17 @@ public static partial class Legal 10, 15, 20, 15, 10, 10, 10, 20, 05, 30, 05, 10, 15, 10, 10, 05, 20, 30, 10, 30, 15, 15, 15, 15, 30, 10, 20, 15, 10, 10, 20, 15, 05, 05, 15, 15, 05, 10, 05, 20, 05, 15, 20, 05, 20, 20, 20, 20, 10, 20, 10, 15, 20, 15, 10, 10, 05, 10, 05, 05, 10, 05, 05, 10, 05, 05, 05, }; + internal static readonly int[] WildPokeBalls4_DPPt = + { + 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + // Cherish ball not usable + }; + internal static readonly int[] WildPokeBalls4_HGSS = + { + 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + // Cherish ball not usable + 17, 18, 19, 20, 21, 22, + // Comp Ball not usable in wild + }; } } diff --git a/PKHeX/Legality/Tables5.cs b/PKHeX/Legality/Tables5.cs index 833b20018..7c1199c20 100644 --- a/PKHeX/Legality/Tables5.cs +++ b/PKHeX/Legality/Tables5.cs @@ -82,5 +82,12 @@ public static partial class Legal 15, 15, 15, 15, 10, 10, 10, 10, 10, 15, 15, 15, 15, 05, 05, 15, 05, 10, 10, 10, 20, 20, 20, 10, 10, 30, 15, 15, 10, 15, 25, 10, 20, 10, 10, 10, 20, 10, 10, 10, 10, 10, 15, 15, 05, 05, 10, 10, 10, 05, 05, 10, 05, 05, 15, 10, 05, 05, 05, }; + internal static readonly int[] WildPokeBalls5 = + { + 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + // Cherish ball not usable + // HGSS balls not usable + // Dream ball not usable in wild + }; } } diff --git a/PKHeX/PKHeX.Core.csproj b/PKHeX/PKHeX.Core.csproj index 663c90d0d..2dd8b260c 100644 --- a/PKHeX/PKHeX.Core.csproj +++ b/PKHeX/PKHeX.Core.csproj @@ -261,10 +261,15 @@ True + + + + + diff --git a/PKHeX/PKM/PKM.cs b/PKHeX/PKM/PKM.cs index e9b44677b..3b3707873 100644 --- a/PKHeX/PKM/PKM.cs +++ b/PKHeX/PKM/PKM.cs @@ -268,7 +268,7 @@ public byte[] Write() public bool AO => Version == (int)GameVersion.AS || Version == (int)GameVersion.OR; public bool SM => Version == (int)GameVersion.SN || Version == (int)GameVersion.MN; protected bool PtHGSS => GameVersion.Pt == (GameVersion)Version || HGSS; - protected bool HGSS => new[] {GameVersion.HG, GameVersion.SS}.Contains((GameVersion)Version); + public bool HGSS => new[] {GameVersion.HG, GameVersion.SS}.Contains((GameVersion)Version); public bool VC => VC1 || VC2; public bool Gen7 => Version >= 30 && Version <= 33; public bool Gen6 => Version >= 24 && Version <= 29; @@ -478,6 +478,12 @@ public bool InhabitedGeneration(int Generation) } } + /// + /// Checks if the PKM has its original met location. + /// + /// Returns false if the Met Location has been overwritten via generational transfer. + public bool HasOriginalMetLocation => !(GenNumber <= 4 && Format > 4 || VC); + /// /// Checks if the current is valid. /// diff --git a/PKHeX/Properties/Resources.Designer.cs b/PKHeX/Properties/Resources.Designer.cs index 294b925a1..ba75d688c 100644 --- a/PKHeX/Properties/Resources.Designer.cs +++ b/PKHeX/Properties/Resources.Designer.cs @@ -12461,6 +12461,16 @@ public class Resources { } } + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] encounter_blue { + get { + object obj = ResourceManager.GetObject("encounter_blue", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// @@ -12491,6 +12501,26 @@ public class Resources { } } + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] encounter_rb_f { + get { + object obj = ResourceManager.GetObject("encounter_rb_f", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] encounter_red { + get { + object obj = ResourceManager.GetObject("encounter_red", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// @@ -12531,6 +12561,26 @@ public class Resources { } } + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] encounter_yellow { + get { + object obj = ResourceManager.GetObject("encounter_yellow", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] encounter_yellow_f { + get { + object obj = ResourceManager.GetObject("encounter_yellow_f", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// diff --git a/PKHeX/Properties/Resources.resx b/PKHeX/Properties/Resources.resx index d9e9428d3..8f83d57d0 100644 --- a/PKHeX/Properties/Resources.resx +++ b/PKHeX/Properties/Resources.resx @@ -7390,4 +7390,19 @@ ..\Resources\byte\lvlmove_rby.pkl;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\byte\encounter_blue.pkl;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\byte\encounter_red.pkl;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\byte\encounter_yellow.pkl;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\byte\encounter_rb_f.pkl;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\byte\encounter_yellow_f.pkl;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/PKHeX/Resources/byte/encounter_blue.pkl b/PKHeX/Resources/byte/encounter_blue.pkl new file mode 100644 index 0000000000000000000000000000000000000000..1ba7b481a6eda9a7585b8ebdaa153cfe8ae5614d GIT binary patch literal 1756 zcmb7?OKjsr9LA@9B+lgFaqO|<*TiY+Bu?41Nxcb3D_UBmio8UyRkoX=R4LhR)gpCw z+m%obQMU&l5huifBjSWOa73ICLVHA29N}Kp&t`7$8~i?h!jH92 zChKLcSFr+3g_EvNBA@+7=P&v1_@DV7xnH?Ixo@87^IBvzqMm0v?5o~(HuLl;06L3U znUxutL3D>WdHf|QmFb>7@rZ?t%*!0);e^`MVN_JQC+pY?9S^ z9VijR<0y*YC>D@_*&<(z76BBzs2B5uAmTv}20|t73Hd3F20{??U`vHv`kR;7NjpAIP9r5$$9JM3O`$TW4Nq0FM%G!~7f ziL7<94#YG{`;v)V1u4F4O0MXpT_DOxZc4t|RH>SF6<78ZAB-=k^l(q@X+61@?qzz) zzPhh(KTq}TG0pU@pyD)7vvh{BO`ZGJHh6|w=ZtIvW!%~Pr?VbTJ7<~((!z_AkabHU z5)dg3HDu89S@eA8R9CQy)3VZ0|yb)dxui`lpExR zHdV8Ad$ZVZ$^bfD(w%LS_N?o)$)VMDw~F^Eb!WS?UD77qDJ^cflxDj*H&4mzNoi~L zu&_1PE>oK8X1jTs&UPtn=MM`fl_lx0k9*EB-_Oz`ytUQN7d%Z-hW^JZu~^?yVfHEUXxB zSZ{^P;aUhF-o>{RJ)>*4v|VQ-zmYTM3;+!?7aF*r7Q%w+S@WT%&Z_{btC_&?=K95c zx$mu&%B6$(oAl3FH3HQu_e<4l{rQ_-xx995?Sh_rCv^S*DCwG9lWIy0)x;XEsWp2k Hy9E9Q!akI| literal 0 HcmV?d00001 diff --git a/PKHeX/Resources/byte/encounter_rb_f.pkl b/PKHeX/Resources/byte/encounter_rb_f.pkl new file mode 100644 index 0000000000000000000000000000000000000000..28c002c072c17e3f6c3b111f02f4cd72be3f9848 GIT binary patch literal 172 zcmWN|Ef0b~0D$3FIF;rM3Y+3LncrZtk)2Z$#d4-AluK;PS+3p&oBFH#Nb3Jk+EX4< z8Y!-%sc2=iZ+M1|q^sy<^c8+VP%tbA3r2>qVPcpbm|5nMg=8t&D=vns;jVdTo|>2D zZTVQfmY<^oy>h}bT)D)QBn}C_bCx<1tZT=;ViW57rslue*`5(OX BDR=+? literal 0 HcmV?d00001 diff --git a/PKHeX/Resources/byte/encounter_red.pkl b/PKHeX/Resources/byte/encounter_red.pkl new file mode 100644 index 0000000000000000000000000000000000000000..bf235971dd940bda9d5d44bb439862eaeb098c12 GIT binary patch literal 1756 zcmb7?Pi)&%9LHb%Cvjfl_&N6Tvt8%KZrUV{yR=EWHAE9F=_SgDx>Z?MqEsoUt6HRV zYnP!(%TNzKB2I_{N5lzn;D|UOgmy%nIB`UrI8~ew(s*fF*q?R?TY7r_e81nHzfbnb z#L0#C9}|#!oBM+Mi%aoe@t^X)aqsg5{+M4Bn!>j5f$)*=xqw6@{w})QLF8NRC+^}o zV|wi+^*!zp_wh^Y^8B0pX5@19V&&`qop^Q5_xun1Q~nqJgqH*=ysDo}To>2HJ@G?v zq+)FhX-C-Se&N}RzcQ6AB5oFFAfjw^r zlgOE+vp`9qR8=LYrX#(o5w)h&QZ=AxNDI`e5g1HO)%2QH)vI81LA{H+MwfK8ZmMf` z^*v+H+Io>%TO(?AFQLjf&$4WWy~Uh+&K7u%I%kY-0e#eY@}JIDIPPo)HX`BqN$9Mj zQWYqSh6LH{d=5L`8MSn5;FPAfbuHC4+J;7SO9!Xa(#`gyZnvFwTDOcz<6mkSV>)T1 z4L}Xox@XLryBW{g%}_c=9+N{rP1kN4C2QC7$gY{T=Bx+K zg@dWh+`)9K$f(!P^s_9T=`-5OZWa$1wXjAI)rp1?RbACNqDStLC^le2X^dCBK^xgd zp#e+9(z~Vg^6heY(JZel&Rw;yhCo@ky-;3QS-iivzj(KLc&)G$UJrq_bbo1o>F&zm z%G`?mhWS>w9Il1{;vIZTw@i!NB0KJScHMh2{RBXpc%hARMlQ@5z8Qo*`SojS zr+fKcvFEQAiiQ2)2K#gBcGK{Sy+Zj)FSy|si>p^w&*_=>lm`1iPgS&vTG1=0qEv9j KsH7J%3*c|gj+Au( literal 0 HcmV?d00001 diff --git a/PKHeX/Resources/byte/encounter_yellow.pkl b/PKHeX/Resources/byte/encounter_yellow.pkl new file mode 100644 index 0000000000000000000000000000000000000000..16718e6323942919027b3aaeeb23659a3dcc5060 GIT binary patch literal 1880 zcmb7@&rcgi6vrp~%Xn?r*`3*Ce|wD$X4b~Q24Ul(kQy0TYY~3LHAY%$WDufNBp|s| z$ssxT&|}m?k3B~H1A2_Ao_nmSo_ngQs;YX3a%?(_6NwM`KW4S>)vZ?} z?e(oRbB}q!{KsJSH})s?Pv#kWhy9lQoco&lj{AZ8nfsl)#~<^j!W8qD@RIq38J%ZH ztJl28%wy*HHFk4+oBdU|**n@(N{r?oL;q&~VgF?X&gKHH$&HG9&cEPa@_+EL4}Nry zanxfP3od)DC$tarJR__MyF!|u;;a1YEB$;g{3v|$w)&Uss6MZJ?JP%@f1f^m8{}oj5HugZ~`UPAcQE6 zWea>EQ5a2GY5AH}a7BVpLJE`)Wh5UeGM3SyjA=Z9p-d1_LL90@uA{nI2NEW7sMJ-W z5jDj1iJsEadO(6Zw5uJwBYU!=?O+V+3e_4#qhUi^wu)B6DLEVF{mgw<+PY@jcw53y zgBVF`Xib+TV_o()cVx8tPBP+7w+^0^YA2?Kdc@EizA3ld!G#mPYE89i8;g;MDYr$Ov(vW)Z zQ$tg=_9W8VIx^dns;(K>#K17ymS(l>w!P_YI-1?~Hl5GFXstWp?7le^c1*`rw+B*q1Je6 zJp_Q~n_^RH4)3_>HgnC{=4dJ@#OPani{y#D!4MTEy&A(zkqPOCk1=)-gLV zwJ5cG`$+FN{k)&q%4}2W=ZQlzxJPCu(|0@ep0~#vv?{IqRgSJ%x?&UaRO$A;BfH~u zEPsx;ds8zSw*`2D*)PNZ8%&ya&MYGuJ=DNB4nSCI>+Z9m}&vdEn z6H0URZ5q#FvR}mdpp2D4dH@VMp=cbYpiC!5!ZIBgNgnyN#K5okbFE6Lvaw_@FD}nl z2CD-gE%_^c(5l+O+3KKHs%@;E*Uo{l?0@1{T1#hl&Q}N3i%$oY2f+g%x;wd@>~8jW z`Z(L2?#}FH_or!JBum_UwUjNnvl^++X=J6m0>n(14@p=e1;5mq>&^EH>;5{B@?ps* x;bN~Gl9s0DW>NQe z^X7dPUO>D7S_Ts&V351aS&No*4+sRpW|d8rjG5Mh8Dv0<4;}&Qr#@zy