#include "global.h" #include "wild_encounter.h" #include "pokemon.h" #include "constants/species.h" #include "metatile_behavior.h" #include "fieldmap.h" #include "random.h" #include "constants/maps.h" #include "field_player_avatar.h" #include "constants/abilities.h" #include "event_data.h" #include "safari_zone.h" #include "overworld.h" #include "pokeblock.h" #include "battle_setup.h" #include "roamer.h" #include "constants/game_stat.h" #include "tv.h" #include "link.h" #include "script.h" #include "constants/items.h" #include "constants/maps.h" extern const u8 EventScript_RepelWoreOff[]; #define NUM_FEEBAS_SPOTS 6 extern u8 GetBattlePikeWildMonHeaderId(void); extern bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate); extern void GenerateBattlePyramidWildMon(void); extern bool8 InBattlePike(void); extern bool8 InBattlePyramid(void); // this file's functions static u16 FeebasRandom(void); static void FeebasSeedRng(u16 seed); static bool8 IsWildLevelAllowedByRepel(u8 level); static void ApplyFluteEncounterRateMod(u32 *encRate); static void ApplyCleanseTagEncounterRateMod(u32 *encRate); static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u8 ability, u8 *monIndex); static bool8 IsAbilityAllowingEncounter(u8 level); // EWRAM vars EWRAM_DATA static u8 sWildEncountersDisabled = 0; EWRAM_DATA static u32 sFeebasRngValue = 0; // const rom data const struct WildPokemon gRoute101_LandMons[] = { {2, 2, SPECIES_WURMPLE}, {2, 2, SPECIES_POOCHYENA}, {2, 2, SPECIES_WURMPLE}, {3, 3, SPECIES_WURMPLE}, {3, 3, SPECIES_POOCHYENA}, {3, 3, SPECIES_POOCHYENA}, {3, 3, SPECIES_WURMPLE}, {3, 3, SPECIES_POOCHYENA}, {2, 2, SPECIES_ZIGZAGOON}, {2, 2, SPECIES_ZIGZAGOON}, {3, 3, SPECIES_ZIGZAGOON}, {3, 3, SPECIES_ZIGZAGOON}, }; const struct WildPokemonInfo gRoute101_LandMonsInfo = {20, gRoute101_LandMons}; const struct WildPokemon gRoute102_LandMons[] = { {3, 3, SPECIES_POOCHYENA}, {3, 3, SPECIES_WURMPLE}, {4, 4, SPECIES_POOCHYENA}, {4, 4, SPECIES_WURMPLE}, {3, 3, SPECIES_LOTAD}, {4, 4, SPECIES_LOTAD}, {3, 3, SPECIES_ZIGZAGOON}, {3, 3, SPECIES_ZIGZAGOON}, {4, 4, SPECIES_ZIGZAGOON}, {4, 4, SPECIES_RALTS}, {4, 4, SPECIES_ZIGZAGOON}, {3, 3, SPECIES_SEEDOT}, }; const struct WildPokemonInfo gRoute102_LandMonsInfo = {20, gRoute102_LandMons}; const struct WildPokemon gRoute102_WaterMons[] = { {20, 30, SPECIES_MARILL}, {10, 20, SPECIES_MARILL}, {30, 35, SPECIES_MARILL}, {5, 10, SPECIES_MARILL}, {20, 30, SPECIES_GOLDEEN}, }; const struct WildPokemonInfo gRoute102_WaterMonsInfo = {4, gRoute102_WaterMons}; const struct WildPokemon gRoute102_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_GOLDEEN}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_GOLDEEN}, {10, 30, SPECIES_CORPHISH}, {25, 30, SPECIES_CORPHISH}, {30, 35, SPECIES_CORPHISH}, {20, 25, SPECIES_CORPHISH}, {35, 40, SPECIES_CORPHISH}, {40, 45, SPECIES_CORPHISH}, }; const struct WildPokemonInfo gRoute102_FishingMonsInfo = {30, gRoute102_FishingMons}; const struct WildPokemon gRoute103_LandMons[] = { {2, 2, SPECIES_POOCHYENA}, {3, 3, SPECIES_POOCHYENA}, {3, 3, SPECIES_POOCHYENA}, {4, 4, SPECIES_POOCHYENA}, {2, 2, SPECIES_WINGULL}, {3, 3, SPECIES_ZIGZAGOON}, {3, 3, SPECIES_ZIGZAGOON}, {4, 4, SPECIES_ZIGZAGOON}, {3, 3, SPECIES_WINGULL}, {3, 3, SPECIES_WINGULL}, {2, 2, SPECIES_WINGULL}, {4, 4, SPECIES_WINGULL}, }; const struct WildPokemonInfo gRoute103_LandMonsInfo = {20, gRoute103_LandMons}; const struct WildPokemon gRoute103_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute103_WaterMonsInfo = {4, gRoute103_WaterMons}; const struct WildPokemon gRoute103_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_SHARPEDO}, {30, 35, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute103_FishingMonsInfo = {30, gRoute103_FishingMons}; const struct WildPokemon gRoute104_LandMons[] = { {4, 4, SPECIES_POOCHYENA}, {4, 4, SPECIES_WURMPLE}, {5, 5, SPECIES_POOCHYENA}, {5, 5, SPECIES_MARILL}, {4, 4, SPECIES_MARILL}, {5, 5, SPECIES_POOCHYENA}, {4, 4, SPECIES_TAILLOW}, {5, 5, SPECIES_TAILLOW}, {4, 4, SPECIES_WINGULL}, {4, 4, SPECIES_WINGULL}, {3, 3, SPECIES_WINGULL}, {5, 5, SPECIES_WINGULL}, }; const struct WildPokemonInfo gRoute104_LandMonsInfo = {20, gRoute104_LandMons}; const struct WildPokemon gRoute104_WaterMons[] = { {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute104_WaterMonsInfo = {4, gRoute104_WaterMons}; const struct WildPokemon gRoute104_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_MAGIKARP}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_MAGIKARP}, {25, 30, SPECIES_MAGIKARP}, {30, 35, SPECIES_MAGIKARP}, {20, 25, SPECIES_MAGIKARP}, {35, 40, SPECIES_MAGIKARP}, {40, 45, SPECIES_MAGIKARP}, }; const struct WildPokemonInfo gRoute104_FishingMonsInfo = {30, gRoute104_FishingMons}; const struct WildPokemon gRoute105_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute105_WaterMonsInfo = {4, gRoute105_WaterMons}; const struct WildPokemon gRoute105_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute105_FishingMonsInfo = {30, gRoute105_FishingMons}; const struct WildPokemon gRoute110_LandMons[] = { {12, 12, SPECIES_POOCHYENA}, {12, 12, SPECIES_ELECTRIKE}, {12, 12, SPECIES_GULPIN}, {13, 13, SPECIES_ELECTRIKE}, {13, 13, SPECIES_MINUN}, {13, 13, SPECIES_ODDISH}, {13, 13, SPECIES_MINUN}, {13, 13, SPECIES_GULPIN}, {12, 12, SPECIES_WINGULL}, {12, 12, SPECIES_WINGULL}, {12, 12, SPECIES_PLUSLE}, {13, 13, SPECIES_PLUSLE}, }; const struct WildPokemonInfo gRoute110_LandMonsInfo = {20, gRoute110_LandMons}; const struct WildPokemon gRoute110_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute110_WaterMonsInfo = {4, gRoute110_WaterMons}; const struct WildPokemon gRoute110_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute110_FishingMonsInfo = {30, gRoute110_FishingMons}; const struct WildPokemon gRoute111_LandMons[] = { {20, 20, SPECIES_SANDSHREW}, {20, 20, SPECIES_TRAPINCH}, {21, 21, SPECIES_SANDSHREW}, {21, 21, SPECIES_TRAPINCH}, {19, 19, SPECIES_BALTOY}, {21, 21, SPECIES_BALTOY}, {19, 19, SPECIES_SANDSHREW}, {19, 19, SPECIES_TRAPINCH}, {20, 20, SPECIES_BALTOY}, {20, 20, SPECIES_CACNEA}, {22, 22, SPECIES_CACNEA}, {22, 22, SPECIES_CACNEA}, }; const struct WildPokemonInfo gRoute111_LandMonsInfo = {10, gRoute111_LandMons}; const struct WildPokemon gRoute111_WaterMons[] = { {20, 30, SPECIES_MARILL}, {10, 20, SPECIES_MARILL}, {30, 35, SPECIES_MARILL}, {5, 10, SPECIES_MARILL}, {20, 30, SPECIES_GOLDEEN}, }; const struct WildPokemonInfo gRoute111_WaterMonsInfo = {4, gRoute111_WaterMons}; const struct WildPokemon gRoute111_RockSmashMons[] = { {10, 15, SPECIES_GEODUDE}, {5, 10, SPECIES_GEODUDE}, {15, 20, SPECIES_GEODUDE}, {15, 20, SPECIES_GEODUDE}, {15, 20, SPECIES_GEODUDE}, }; const struct WildPokemonInfo gRoute111_RockSmashMonsInfo = {20, gRoute111_RockSmashMons}; const struct WildPokemon gRoute111_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_GOLDEEN}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_GOLDEEN}, {10, 30, SPECIES_BARBOACH}, {25, 30, SPECIES_BARBOACH}, {30, 35, SPECIES_BARBOACH}, {20, 25, SPECIES_BARBOACH}, {35, 40, SPECIES_BARBOACH}, {40, 45, SPECIES_BARBOACH}, }; const struct WildPokemonInfo gRoute111_FishingMonsInfo = {30, gRoute111_FishingMons}; const struct WildPokemon gRoute112_LandMons[] = { {15, 15, SPECIES_NUMEL}, {15, 15, SPECIES_NUMEL}, {15, 15, SPECIES_MARILL}, {14, 14, SPECIES_NUMEL}, {14, 14, SPECIES_NUMEL}, {14, 14, SPECIES_MARILL}, {16, 16, SPECIES_NUMEL}, {16, 16, SPECIES_MARILL}, {16, 16, SPECIES_NUMEL}, {16, 16, SPECIES_NUMEL}, {16, 16, SPECIES_NUMEL}, {16, 16, SPECIES_NUMEL}, }; const struct WildPokemonInfo gRoute112_LandMonsInfo = {20, gRoute112_LandMons}; const struct WildPokemon gRoute113_LandMons[] = { {15, 15, SPECIES_SPINDA}, {15, 15, SPECIES_SPINDA}, {15, 15, SPECIES_SLUGMA}, {14, 14, SPECIES_SPINDA}, {14, 14, SPECIES_SPINDA}, {14, 14, SPECIES_SLUGMA}, {16, 16, SPECIES_SPINDA}, {16, 16, SPECIES_SLUGMA}, {16, 16, SPECIES_SPINDA}, {16, 16, SPECIES_SKARMORY}, {16, 16, SPECIES_SPINDA}, {16, 16, SPECIES_SKARMORY}, }; const struct WildPokemonInfo gRoute113_LandMonsInfo = {20, gRoute113_LandMons}; const struct WildPokemon gRoute114_LandMons[] = { {16, 16, SPECIES_SWABLU}, {16, 16, SPECIES_LOTAD}, {17, 17, SPECIES_SWABLU}, {15, 15, SPECIES_SWABLU}, {15, 15, SPECIES_LOTAD}, {16, 16, SPECIES_LOMBRE}, {16, 16, SPECIES_LOMBRE}, {18, 18, SPECIES_LOMBRE}, {17, 17, SPECIES_SEVIPER}, {15, 15, SPECIES_SEVIPER}, {17, 17, SPECIES_SEVIPER}, {15, 15, SPECIES_NUZLEAF}, }; const struct WildPokemonInfo gRoute114_LandMonsInfo = {20, gRoute114_LandMons}; const struct WildPokemon gRoute114_WaterMons[] = { {20, 30, SPECIES_MARILL}, {10, 20, SPECIES_MARILL}, {30, 35, SPECIES_MARILL}, {5, 10, SPECIES_MARILL}, {20, 30, SPECIES_GOLDEEN}, }; const struct WildPokemonInfo gRoute114_WaterMonsInfo = {4, gRoute114_WaterMons}; const struct WildPokemon gRoute114_RockSmashMons[] = { {10, 15, SPECIES_GEODUDE}, {5, 10, SPECIES_GEODUDE}, {15, 20, SPECIES_GEODUDE}, {15, 20, SPECIES_GEODUDE}, {15, 20, SPECIES_GEODUDE}, }; const struct WildPokemonInfo gRoute114_RockSmashMonsInfo = {20, gRoute114_RockSmashMons}; const struct WildPokemon gRoute114_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_GOLDEEN}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_GOLDEEN}, {10, 30, SPECIES_BARBOACH}, {25, 30, SPECIES_BARBOACH}, {30, 35, SPECIES_BARBOACH}, {20, 25, SPECIES_BARBOACH}, {35, 40, SPECIES_BARBOACH}, {40, 45, SPECIES_BARBOACH}, }; const struct WildPokemonInfo gRoute114_FishingMonsInfo = {30, gRoute114_FishingMons}; const struct WildPokemon gRoute116_LandMons[] = { {6, 6, SPECIES_POOCHYENA}, {6, 6, SPECIES_WHISMUR}, {6, 6, SPECIES_NINCADA}, {7, 7, SPECIES_ABRA}, {7, 7, SPECIES_NINCADA}, {6, 6, SPECIES_TAILLOW}, {7, 7, SPECIES_TAILLOW}, {8, 8, SPECIES_TAILLOW}, {7, 7, SPECIES_POOCHYENA}, {8, 8, SPECIES_POOCHYENA}, {7, 7, SPECIES_SKITTY}, {8, 8, SPECIES_SKITTY}, }; const struct WildPokemonInfo gRoute116_LandMonsInfo = {20, gRoute116_LandMons}; const struct WildPokemon gRoute117_LandMons[] = { {13, 13, SPECIES_POOCHYENA}, {13, 13, SPECIES_ODDISH}, {14, 14, SPECIES_POOCHYENA}, {14, 14, SPECIES_ODDISH}, {13, 13, SPECIES_MARILL}, {13, 13, SPECIES_ODDISH}, {13, 13, SPECIES_ILLUMISE}, {13, 13, SPECIES_ILLUMISE}, {14, 14, SPECIES_ILLUMISE}, {14, 14, SPECIES_ILLUMISE}, {13, 13, SPECIES_VOLBEAT}, {13, 13, SPECIES_SEEDOT}, }; const struct WildPokemonInfo gRoute117_LandMonsInfo = {20, gRoute117_LandMons}; const struct WildPokemon gRoute117_WaterMons[] = { {20, 30, SPECIES_MARILL}, {10, 20, SPECIES_MARILL}, {30, 35, SPECIES_MARILL}, {5, 10, SPECIES_MARILL}, {20, 30, SPECIES_GOLDEEN}, }; const struct WildPokemonInfo gRoute117_WaterMonsInfo = {4, gRoute117_WaterMons}; const struct WildPokemon gRoute117_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_GOLDEEN}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_GOLDEEN}, {10, 30, SPECIES_CORPHISH}, {25, 30, SPECIES_CORPHISH}, {30, 35, SPECIES_CORPHISH}, {20, 25, SPECIES_CORPHISH}, {35, 40, SPECIES_CORPHISH}, {40, 45, SPECIES_CORPHISH}, }; const struct WildPokemonInfo gRoute117_FishingMonsInfo = {30, gRoute117_FishingMons}; const struct WildPokemon gRoute118_LandMons[] = { {24, 24, SPECIES_ZIGZAGOON}, {24, 24, SPECIES_ELECTRIKE}, {26, 26, SPECIES_ZIGZAGOON}, {26, 26, SPECIES_ELECTRIKE}, {26, 26, SPECIES_LINOONE}, {26, 26, SPECIES_MANECTRIC}, {25, 25, SPECIES_WINGULL}, {25, 25, SPECIES_WINGULL}, {26, 26, SPECIES_WINGULL}, {26, 26, SPECIES_WINGULL}, {27, 27, SPECIES_WINGULL}, {25, 25, SPECIES_KECLEON}, }; const struct WildPokemonInfo gRoute118_LandMonsInfo = {20, gRoute118_LandMons}; const struct WildPokemon gRoute118_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute118_WaterMonsInfo = {4, gRoute118_WaterMons}; const struct WildPokemon gRoute118_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_CARVANHA}, {30, 35, SPECIES_SHARPEDO}, {30, 35, SPECIES_CARVANHA}, {20, 25, SPECIES_CARVANHA}, {35, 40, SPECIES_CARVANHA}, {40, 45, SPECIES_CARVANHA}, }; const struct WildPokemonInfo gRoute118_FishingMonsInfo = {30, gRoute118_FishingMons}; const struct WildPokemon gRoute124_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute124_WaterMonsInfo = {4, gRoute124_WaterMons}; const struct WildPokemon gRoute124_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_SHARPEDO}, {30, 35, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute124_FishingMonsInfo = {30, gRoute124_FishingMons}; const struct WildPokemon gPetalburgWoods_LandMons[] = { {5, 5, SPECIES_POOCHYENA}, {5, 5, SPECIES_WURMPLE}, {5, 5, SPECIES_SHROOMISH}, {6, 6, SPECIES_POOCHYENA}, {5, 5, SPECIES_SILCOON}, {5, 5, SPECIES_CASCOON}, {6, 6, SPECIES_WURMPLE}, {6, 6, SPECIES_SHROOMISH}, {5, 5, SPECIES_TAILLOW}, {5, 5, SPECIES_SLAKOTH}, {6, 6, SPECIES_TAILLOW}, {6, 6, SPECIES_SLAKOTH}, }; const struct WildPokemonInfo gPetalburgWoods_LandMonsInfo = {20, gPetalburgWoods_LandMons}; const struct WildPokemon gRusturfTunnel_LandMons[] = { {6, 6, SPECIES_WHISMUR}, {7, 7, SPECIES_WHISMUR}, {6, 6, SPECIES_WHISMUR}, {6, 6, SPECIES_WHISMUR}, {7, 7, SPECIES_WHISMUR}, {7, 7, SPECIES_WHISMUR}, {5, 5, SPECIES_WHISMUR}, {8, 8, SPECIES_WHISMUR}, {5, 5, SPECIES_WHISMUR}, {8, 8, SPECIES_WHISMUR}, {5, 5, SPECIES_WHISMUR}, {8, 8, SPECIES_WHISMUR}, }; const struct WildPokemonInfo gRusturfTunnel_LandMonsInfo = {10, gRusturfTunnel_LandMons}; const struct WildPokemon gGraniteCave_1F_LandMons[] = { {7, 7, SPECIES_ZUBAT}, {8, 8, SPECIES_MAKUHITA}, {7, 7, SPECIES_MAKUHITA}, {8, 8, SPECIES_ZUBAT}, {9, 9, SPECIES_MAKUHITA}, {8, 8, SPECIES_ABRA}, {10, 10, SPECIES_MAKUHITA}, {6, 6, SPECIES_MAKUHITA}, {7, 7, SPECIES_GEODUDE}, {8, 8, SPECIES_GEODUDE}, {6, 6, SPECIES_GEODUDE}, {9, 9, SPECIES_GEODUDE}, }; const struct WildPokemonInfo gGraniteCave_1F_LandMonsInfo = {10, gGraniteCave_1F_LandMons}; const struct WildPokemon gGraniteCave_B1F_LandMons[] = { {9, 9, SPECIES_ZUBAT}, {10, 10, SPECIES_ARON}, {9, 9, SPECIES_ARON}, {11, 11, SPECIES_ARON}, {10, 10, SPECIES_ZUBAT}, {9, 9, SPECIES_ABRA}, {10, 10, SPECIES_MAKUHITA}, {11, 11, SPECIES_MAKUHITA}, {10, 10, SPECIES_SABLEYE}, {10, 10, SPECIES_SABLEYE}, {9, 9, SPECIES_SABLEYE}, {11, 11, SPECIES_SABLEYE}, }; const struct WildPokemonInfo gGraniteCave_B1F_LandMonsInfo = {10, gGraniteCave_B1F_LandMons}; const struct WildPokemon gMtPyre_1F_LandMons[] = { {27, 27, SPECIES_SHUPPET}, {28, 28, SPECIES_SHUPPET}, {26, 26, SPECIES_SHUPPET}, {25, 25, SPECIES_SHUPPET}, {29, 29, SPECIES_SHUPPET}, {24, 24, SPECIES_SHUPPET}, {23, 23, SPECIES_SHUPPET}, {22, 22, SPECIES_SHUPPET}, {29, 29, SPECIES_SHUPPET}, {24, 24, SPECIES_SHUPPET}, {29, 29, SPECIES_SHUPPET}, {24, 24, SPECIES_SHUPPET}, }; const struct WildPokemonInfo gMtPyre_1F_LandMonsInfo = {10, gMtPyre_1F_LandMons}; const struct WildPokemon gVictoryRoad_1F_LandMons[] = { {40, 40, SPECIES_GOLBAT}, {40, 40, SPECIES_HARIYAMA}, {40, 40, SPECIES_LAIRON}, {40, 40, SPECIES_LOUDRED}, {36, 36, SPECIES_ZUBAT}, {36, 36, SPECIES_MAKUHITA}, {38, 38, SPECIES_GOLBAT}, {38, 38, SPECIES_HARIYAMA}, {36, 36, SPECIES_ARON}, {36, 36, SPECIES_WHISMUR}, {36, 36, SPECIES_ARON}, {36, 36, SPECIES_WHISMUR}, }; const struct WildPokemonInfo gVictoryRoad_1F_LandMonsInfo = {10, gVictoryRoad_1F_LandMons}; const struct WildPokemon gSafariZone_South_LandMons[] = { {25, 25, SPECIES_ODDISH}, {27, 27, SPECIES_ODDISH}, {25, 25, SPECIES_GIRAFARIG}, {27, 27, SPECIES_GIRAFARIG}, {25, 25, SPECIES_NATU}, {25, 25, SPECIES_DODUO}, {25, 25, SPECIES_GLOOM}, {27, 27, SPECIES_WOBBUFFET}, {25, 25, SPECIES_PIKACHU}, {27, 27, SPECIES_WOBBUFFET}, {27, 27, SPECIES_PIKACHU}, {29, 29, SPECIES_WOBBUFFET}, }; const struct WildPokemonInfo gSafariZone_South_LandMonsInfo = {25, gSafariZone_South_LandMons}; const struct WildPokemon gUnderwater2_WaterMons[] = { {20, 30, SPECIES_CLAMPERL}, {20, 30, SPECIES_CHINCHOU}, {30, 35, SPECIES_CLAMPERL}, {30, 35, SPECIES_RELICANTH}, {30, 35, SPECIES_RELICANTH}, }; const struct WildPokemonInfo gUnderwater2_WaterMonsInfo = {4, gUnderwater2_WaterMons}; const struct WildPokemon gAbandonedShip_Rooms_B1F_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {5, 35, SPECIES_TENTACOOL}, {5, 35, SPECIES_TENTACOOL}, {5, 35, SPECIES_TENTACOOL}, {30, 35, SPECIES_TENTACRUEL}, }; const struct WildPokemonInfo gAbandonedShip_Rooms_B1F_WaterMonsInfo = {4, gAbandonedShip_Rooms_B1F_WaterMons}; const struct WildPokemon gAbandonedShip_Rooms_B1F_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_TENTACOOL}, {25, 30, SPECIES_TENTACOOL}, {30, 35, SPECIES_TENTACOOL}, {30, 35, SPECIES_TENTACRUEL}, {25, 30, SPECIES_TENTACRUEL}, {20, 25, SPECIES_TENTACRUEL}, }; const struct WildPokemonInfo gAbandonedShip_Rooms_B1F_FishingMonsInfo = {20, gAbandonedShip_Rooms_B1F_FishingMons}; const struct WildPokemon gGraniteCave_B2F_LandMons[] = { {10, 10, SPECIES_ZUBAT}, {11, 11, SPECIES_ARON}, {10, 10, SPECIES_ARON}, {11, 11, SPECIES_ZUBAT}, {12, 12, SPECIES_ARON}, {10, 10, SPECIES_ABRA}, {10, 10, SPECIES_SABLEYE}, {11, 11, SPECIES_SABLEYE}, {12, 12, SPECIES_SABLEYE}, {10, 10, SPECIES_SABLEYE}, {12, 12, SPECIES_SABLEYE}, {10, 10, SPECIES_SABLEYE}, }; const struct WildPokemonInfo gGraniteCave_B2F_LandMonsInfo = {10, gGraniteCave_B2F_LandMons}; const struct WildPokemon gGraniteCave_B2F_RockSmashMons[] = { {10, 15, SPECIES_GEODUDE}, {10, 20, SPECIES_NOSEPASS}, {5, 10, SPECIES_GEODUDE}, {15, 20, SPECIES_GEODUDE}, {15, 20, SPECIES_GEODUDE}, }; const struct WildPokemonInfo gGraniteCave_B2F_RockSmashMonsInfo = {20, gGraniteCave_B2F_RockSmashMons}; const struct WildPokemon gFieryPath_LandMons[] = { {15, 15, SPECIES_NUMEL}, {15, 15, SPECIES_KOFFING}, {16, 16, SPECIES_NUMEL}, {15, 15, SPECIES_MACHOP}, {15, 15, SPECIES_TORKOAL}, {15, 15, SPECIES_SLUGMA}, {16, 16, SPECIES_KOFFING}, {16, 16, SPECIES_MACHOP}, {14, 14, SPECIES_TORKOAL}, {16, 16, SPECIES_TORKOAL}, {14, 14, SPECIES_GRIMER}, {14, 14, SPECIES_GRIMER}, }; const struct WildPokemonInfo gFieryPath_LandMonsInfo = {10, gFieryPath_LandMons}; const struct WildPokemon gMeteorFalls_B1F_2R_LandMons[] = { {33, 33, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {30, 30, SPECIES_BAGON}, {35, 35, SPECIES_SOLROCK}, {35, 35, SPECIES_BAGON}, {37, 37, SPECIES_SOLROCK}, {25, 25, SPECIES_BAGON}, {39, 39, SPECIES_SOLROCK}, {38, 38, SPECIES_GOLBAT}, {40, 40, SPECIES_GOLBAT}, {38, 38, SPECIES_GOLBAT}, {40, 40, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gMeteorFalls_B1F_2R_LandMonsInfo = {10, gMeteorFalls_B1F_2R_LandMons}; const struct WildPokemon gMeteorFalls_B1F_2R_WaterMons[] = { {30, 35, SPECIES_GOLBAT}, {30, 35, SPECIES_GOLBAT}, {25, 35, SPECIES_SOLROCK}, {15, 25, SPECIES_SOLROCK}, {5, 15, SPECIES_SOLROCK}, }; const struct WildPokemonInfo gMeteorFalls_B1F_2R_WaterMonsInfo = {4, gMeteorFalls_B1F_2R_WaterMons}; const struct WildPokemon gMeteorFalls_B1F_2R_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_GOLDEEN}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_GOLDEEN}, {10, 30, SPECIES_BARBOACH}, {25, 30, SPECIES_BARBOACH}, {30, 35, SPECIES_BARBOACH}, {30, 35, SPECIES_WHISCASH}, {35, 40, SPECIES_WHISCASH}, {40, 45, SPECIES_WHISCASH}, }; const struct WildPokemonInfo gMeteorFalls_B1F_2R_FishingMonsInfo = {30, gMeteorFalls_B1F_2R_FishingMons}; const struct WildPokemon gJaggedPass_LandMons[] = { {21, 21, SPECIES_NUMEL}, {21, 21, SPECIES_NUMEL}, {21, 21, SPECIES_MACHOP}, {20, 20, SPECIES_NUMEL}, {20, 20, SPECIES_SPOINK}, {20, 20, SPECIES_MACHOP}, {21, 21, SPECIES_SPOINK}, {22, 22, SPECIES_MACHOP}, {22, 22, SPECIES_NUMEL}, {22, 22, SPECIES_SPOINK}, {22, 22, SPECIES_NUMEL}, {22, 22, SPECIES_SPOINK}, }; const struct WildPokemonInfo gJaggedPass_LandMonsInfo = {20, gJaggedPass_LandMons}; const struct WildPokemon gRoute106_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute106_WaterMonsInfo = {4, gRoute106_WaterMons}; const struct WildPokemon gRoute106_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute106_FishingMonsInfo = {30, gRoute106_FishingMons}; const struct WildPokemon gRoute107_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute107_WaterMonsInfo = {4, gRoute107_WaterMons}; const struct WildPokemon gRoute107_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute107_FishingMonsInfo = {30, gRoute107_FishingMons}; const struct WildPokemon gRoute108_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute108_WaterMonsInfo = {4, gRoute108_WaterMons}; const struct WildPokemon gRoute108_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute108_FishingMonsInfo = {30, gRoute108_FishingMons}; const struct WildPokemon gRoute109_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute109_WaterMonsInfo = {4, gRoute109_WaterMons}; const struct WildPokemon gRoute109_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute109_FishingMonsInfo = {30, gRoute109_FishingMons}; const struct WildPokemon gRoute115_LandMons[] = { {23, 23, SPECIES_SWABLU}, {23, 23, SPECIES_TAILLOW}, {25, 25, SPECIES_SWABLU}, {24, 24, SPECIES_TAILLOW}, {25, 25, SPECIES_TAILLOW}, {25, 25, SPECIES_SWELLOW}, {24, 24, SPECIES_JIGGLYPUFF}, {25, 25, SPECIES_JIGGLYPUFF}, {24, 24, SPECIES_WINGULL}, {24, 24, SPECIES_WINGULL}, {26, 26, SPECIES_WINGULL}, {25, 25, SPECIES_WINGULL}, }; const struct WildPokemonInfo gRoute115_LandMonsInfo = {20, gRoute115_LandMons}; const struct WildPokemon gRoute115_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute115_WaterMonsInfo = {4, gRoute115_WaterMons}; const struct WildPokemon gRoute115_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute115_FishingMonsInfo = {30, gRoute115_FishingMons}; const struct WildPokemon gNewMauville_Inside_LandMons[] = { {24, 24, SPECIES_VOLTORB}, {24, 24, SPECIES_MAGNEMITE}, {25, 25, SPECIES_VOLTORB}, {25, 25, SPECIES_MAGNEMITE}, {23, 23, SPECIES_VOLTORB}, {23, 23, SPECIES_MAGNEMITE}, {26, 26, SPECIES_VOLTORB}, {26, 26, SPECIES_MAGNEMITE}, {22, 22, SPECIES_VOLTORB}, {22, 22, SPECIES_MAGNEMITE}, {26, 26, SPECIES_ELECTRODE}, {26, 26, SPECIES_MAGNETON}, }; const struct WildPokemonInfo gNewMauville_Inside_LandMonsInfo = {10, gNewMauville_Inside_LandMons}; const struct WildPokemon gRoute119_LandMons[] = { {25, 25, SPECIES_ZIGZAGOON}, {25, 25, SPECIES_LINOONE}, {27, 27, SPECIES_ZIGZAGOON}, {25, 25, SPECIES_ODDISH}, {27, 27, SPECIES_LINOONE}, {26, 26, SPECIES_ODDISH}, {27, 27, SPECIES_ODDISH}, {24, 24, SPECIES_ODDISH}, {25, 25, SPECIES_TROPIUS}, {26, 26, SPECIES_TROPIUS}, {27, 27, SPECIES_TROPIUS}, {25, 25, SPECIES_KECLEON}, }; const struct WildPokemonInfo gRoute119_LandMonsInfo = {15, gRoute119_LandMons}; const struct WildPokemon gRoute119_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute119_WaterMonsInfo = {4, gRoute119_WaterMons}; const struct WildPokemon gRoute119_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_CARVANHA}, {25, 30, SPECIES_CARVANHA}, {30, 35, SPECIES_CARVANHA}, {20, 25, SPECIES_CARVANHA}, {35, 40, SPECIES_CARVANHA}, {40, 45, SPECIES_CARVANHA}, }; const struct WildPokemonInfo gRoute119_FishingMonsInfo = {30, gRoute119_FishingMons}; const struct WildPokemon gRoute120_LandMons[] = { {25, 25, SPECIES_POOCHYENA}, {25, 25, SPECIES_MIGHTYENA}, {27, 27, SPECIES_MIGHTYENA}, {25, 25, SPECIES_ODDISH}, {25, 25, SPECIES_MARILL}, {26, 26, SPECIES_ODDISH}, {27, 27, SPECIES_ODDISH}, {27, 27, SPECIES_MARILL}, {25, 25, SPECIES_ABSOL}, {27, 27, SPECIES_ABSOL}, {25, 25, SPECIES_KECLEON}, {25, 25, SPECIES_SEEDOT}, }; const struct WildPokemonInfo gRoute120_LandMonsInfo = {20, gRoute120_LandMons}; const struct WildPokemon gRoute120_WaterMons[] = { {20, 30, SPECIES_MARILL}, {10, 20, SPECIES_MARILL}, {30, 35, SPECIES_MARILL}, {5, 10, SPECIES_MARILL}, {20, 30, SPECIES_GOLDEEN}, }; const struct WildPokemonInfo gRoute120_WaterMonsInfo = {4, gRoute120_WaterMons}; const struct WildPokemon gRoute120_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_GOLDEEN}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_GOLDEEN}, {10, 30, SPECIES_BARBOACH}, {25, 30, SPECIES_BARBOACH}, {30, 35, SPECIES_BARBOACH}, {20, 25, SPECIES_BARBOACH}, {35, 40, SPECIES_BARBOACH}, {40, 45, SPECIES_BARBOACH}, }; const struct WildPokemonInfo gRoute120_FishingMonsInfo = {30, gRoute120_FishingMons}; const struct WildPokemon gRoute121_LandMons[] = { {26, 26, SPECIES_POOCHYENA}, {26, 26, SPECIES_SHUPPET}, {26, 26, SPECIES_MIGHTYENA}, {28, 28, SPECIES_SHUPPET}, {28, 28, SPECIES_MIGHTYENA}, {26, 26, SPECIES_ODDISH}, {28, 28, SPECIES_ODDISH}, {28, 28, SPECIES_GLOOM}, {26, 26, SPECIES_WINGULL}, {27, 27, SPECIES_WINGULL}, {28, 28, SPECIES_WINGULL}, {25, 25, SPECIES_KECLEON}, }; const struct WildPokemonInfo gRoute121_LandMonsInfo = {20, gRoute121_LandMons}; const struct WildPokemon gRoute121_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute121_WaterMonsInfo = {4, gRoute121_WaterMons}; const struct WildPokemon gRoute121_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute121_FishingMonsInfo = {30, gRoute121_FishingMons}; const struct WildPokemon gRoute122_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute122_WaterMonsInfo = {4, gRoute122_WaterMons}; const struct WildPokemon gRoute122_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_SHARPEDO}, {30, 35, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute122_FishingMonsInfo = {30, gRoute122_FishingMons}; const struct WildPokemon gRoute123_LandMons[] = { {26, 26, SPECIES_POOCHYENA}, {26, 26, SPECIES_SHUPPET}, {26, 26, SPECIES_MIGHTYENA}, {28, 28, SPECIES_SHUPPET}, {28, 28, SPECIES_MIGHTYENA}, {26, 26, SPECIES_ODDISH}, {28, 28, SPECIES_ODDISH}, {28, 28, SPECIES_GLOOM}, {26, 26, SPECIES_WINGULL}, {27, 27, SPECIES_WINGULL}, {28, 28, SPECIES_WINGULL}, {25, 25, SPECIES_KECLEON}, }; const struct WildPokemonInfo gRoute123_LandMonsInfo = {20, gRoute123_LandMons}; const struct WildPokemon gRoute123_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute123_WaterMonsInfo = {4, gRoute123_WaterMons}; const struct WildPokemon gRoute123_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute123_FishingMonsInfo = {30, gRoute123_FishingMons}; const struct WildPokemon gMtPyre_2F_LandMons[] = { {27, 27, SPECIES_SHUPPET}, {28, 28, SPECIES_SHUPPET}, {26, 26, SPECIES_SHUPPET}, {25, 25, SPECIES_SHUPPET}, {29, 29, SPECIES_SHUPPET}, {24, 24, SPECIES_SHUPPET}, {23, 23, SPECIES_SHUPPET}, {22, 22, SPECIES_SHUPPET}, {29, 29, SPECIES_SHUPPET}, {24, 24, SPECIES_SHUPPET}, {29, 29, SPECIES_SHUPPET}, {24, 24, SPECIES_SHUPPET}, }; const struct WildPokemonInfo gMtPyre_2F_LandMonsInfo = {10, gMtPyre_2F_LandMons}; const struct WildPokemon gMtPyre_3F_LandMons[] = { {27, 27, SPECIES_SHUPPET}, {28, 28, SPECIES_SHUPPET}, {26, 26, SPECIES_SHUPPET}, {25, 25, SPECIES_SHUPPET}, {29, 29, SPECIES_SHUPPET}, {24, 24, SPECIES_SHUPPET}, {23, 23, SPECIES_SHUPPET}, {22, 22, SPECIES_SHUPPET}, {29, 29, SPECIES_SHUPPET}, {24, 24, SPECIES_SHUPPET}, {29, 29, SPECIES_SHUPPET}, {24, 24, SPECIES_SHUPPET}, }; const struct WildPokemonInfo gMtPyre_3F_LandMonsInfo = {10, gMtPyre_3F_LandMons}; const struct WildPokemon gMtPyre_4F_LandMons[] = { {27, 27, SPECIES_SHUPPET}, {28, 28, SPECIES_SHUPPET}, {26, 26, SPECIES_SHUPPET}, {25, 25, SPECIES_SHUPPET}, {29, 29, SPECIES_SHUPPET}, {24, 24, SPECIES_SHUPPET}, {23, 23, SPECIES_SHUPPET}, {22, 22, SPECIES_SHUPPET}, {27, 27, SPECIES_DUSKULL}, {27, 27, SPECIES_DUSKULL}, {25, 25, SPECIES_DUSKULL}, {29, 29, SPECIES_DUSKULL}, }; const struct WildPokemonInfo gMtPyre_4F_LandMonsInfo = {10, gMtPyre_4F_LandMons}; const struct WildPokemon gMtPyre_5F_LandMons[] = { {27, 27, SPECIES_SHUPPET}, {28, 28, SPECIES_SHUPPET}, {26, 26, SPECIES_SHUPPET}, {25, 25, SPECIES_SHUPPET}, {29, 29, SPECIES_SHUPPET}, {24, 24, SPECIES_SHUPPET}, {23, 23, SPECIES_SHUPPET}, {22, 22, SPECIES_SHUPPET}, {27, 27, SPECIES_DUSKULL}, {27, 27, SPECIES_DUSKULL}, {25, 25, SPECIES_DUSKULL}, {29, 29, SPECIES_DUSKULL}, }; const struct WildPokemonInfo gMtPyre_5F_LandMonsInfo = {10, gMtPyre_5F_LandMons}; const struct WildPokemon gMtPyre_6F_LandMons[] = { {27, 27, SPECIES_SHUPPET}, {28, 28, SPECIES_SHUPPET}, {26, 26, SPECIES_SHUPPET}, {25, 25, SPECIES_SHUPPET}, {29, 29, SPECIES_SHUPPET}, {24, 24, SPECIES_SHUPPET}, {23, 23, SPECIES_SHUPPET}, {22, 22, SPECIES_SHUPPET}, {27, 27, SPECIES_DUSKULL}, {27, 27, SPECIES_DUSKULL}, {25, 25, SPECIES_DUSKULL}, {29, 29, SPECIES_DUSKULL}, }; const struct WildPokemonInfo gMtPyre_6F_LandMonsInfo = {10, gMtPyre_6F_LandMons}; const struct WildPokemon gMtPyre_Exterior_LandMons[] = { {27, 27, SPECIES_SHUPPET}, {27, 27, SPECIES_SHUPPET}, {28, 28, SPECIES_SHUPPET}, {29, 29, SPECIES_SHUPPET}, {29, 29, SPECIES_VULPIX}, {27, 27, SPECIES_VULPIX}, {29, 29, SPECIES_VULPIX}, {25, 25, SPECIES_VULPIX}, {27, 27, SPECIES_WINGULL}, {27, 27, SPECIES_WINGULL}, {26, 26, SPECIES_WINGULL}, {28, 28, SPECIES_WINGULL}, }; const struct WildPokemonInfo gMtPyre_Exterior_LandMonsInfo = {10, gMtPyre_Exterior_LandMons}; const struct WildPokemon gMtPyre_Summit_LandMons[] = { {28, 28, SPECIES_SHUPPET}, {29, 29, SPECIES_SHUPPET}, {27, 27, SPECIES_SHUPPET}, {26, 26, SPECIES_SHUPPET}, {30, 30, SPECIES_SHUPPET}, {25, 25, SPECIES_SHUPPET}, {24, 24, SPECIES_SHUPPET}, {28, 28, SPECIES_DUSKULL}, {26, 26, SPECIES_DUSKULL}, {30, 30, SPECIES_DUSKULL}, {28, 28, SPECIES_CHIMECHO}, {28, 28, SPECIES_CHIMECHO}, }; const struct WildPokemonInfo gMtPyre_Summit_LandMonsInfo = {10, gMtPyre_Summit_LandMons}; const struct WildPokemon gGraniteCave_StevensRoom_LandMons[] = { {7, 7, SPECIES_ZUBAT}, {8, 8, SPECIES_MAKUHITA}, {7, 7, SPECIES_MAKUHITA}, {8, 8, SPECIES_ZUBAT}, {9, 9, SPECIES_MAKUHITA}, {8, 8, SPECIES_ABRA}, {10, 10, SPECIES_MAKUHITA}, {6, 6, SPECIES_MAKUHITA}, {7, 7, SPECIES_ARON}, {8, 8, SPECIES_ARON}, {7, 7, SPECIES_ARON}, {8, 8, SPECIES_ARON}, }; const struct WildPokemonInfo gGraniteCave_StevensRoom_LandMonsInfo = {10, gGraniteCave_StevensRoom_LandMons}; const struct WildPokemon gRoute125_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute125_WaterMonsInfo = {4, gRoute125_WaterMons}; const struct WildPokemon gRoute125_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_SHARPEDO}, {30, 35, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute125_FishingMonsInfo = {30, gRoute125_FishingMons}; const struct WildPokemon gRoute126_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute126_WaterMonsInfo = {4, gRoute126_WaterMons}; const struct WildPokemon gRoute126_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_SHARPEDO}, {30, 35, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute126_FishingMonsInfo = {30, gRoute126_FishingMons}; const struct WildPokemon gRoute127_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute127_WaterMonsInfo = {4, gRoute127_WaterMons}; const struct WildPokemon gRoute127_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_SHARPEDO}, {30, 35, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute127_FishingMonsInfo = {30, gRoute127_FishingMons}; const struct WildPokemon gRoute128_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute128_WaterMonsInfo = {4, gRoute128_WaterMons}; const struct WildPokemon gRoute128_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_LUVDISC}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_LUVDISC}, {30, 35, SPECIES_WAILMER}, {30, 35, SPECIES_CORSOLA}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute128_FishingMonsInfo = {30, gRoute128_FishingMons}; const struct WildPokemon gRoute129_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_WAILORD}, }; const struct WildPokemonInfo gRoute129_WaterMonsInfo = {4, gRoute129_WaterMons}; const struct WildPokemon gRoute129_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_SHARPEDO}, {30, 35, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute129_FishingMonsInfo = {30, gRoute129_FishingMons}; const struct WildPokemon gRoute130_LandMons[] = { {30, 30, SPECIES_WYNAUT}, {35, 35, SPECIES_WYNAUT}, {25, 25, SPECIES_WYNAUT}, {40, 40, SPECIES_WYNAUT}, {20, 20, SPECIES_WYNAUT}, {45, 45, SPECIES_WYNAUT}, {15, 15, SPECIES_WYNAUT}, {50, 50, SPECIES_WYNAUT}, {10, 10, SPECIES_WYNAUT}, {5, 5, SPECIES_WYNAUT}, {10, 10, SPECIES_WYNAUT}, {5, 5, SPECIES_WYNAUT}, }; const struct WildPokemonInfo gRoute130_LandMonsInfo = {20, gRoute130_LandMons}; const struct WildPokemon gRoute130_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute130_WaterMonsInfo = {4, gRoute130_WaterMons}; const struct WildPokemon gRoute130_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_SHARPEDO}, {30, 35, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute130_FishingMonsInfo = {30, gRoute130_FishingMons}; const struct WildPokemon gRoute131_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute131_WaterMonsInfo = {4, gRoute131_WaterMons}; const struct WildPokemon gRoute131_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_SHARPEDO}, {30, 35, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute131_FishingMonsInfo = {30, gRoute131_FishingMons}; const struct WildPokemon gRoute132_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute132_WaterMonsInfo = {4, gRoute132_WaterMons}; const struct WildPokemon gRoute132_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_SHARPEDO}, {30, 35, SPECIES_WAILMER}, {25, 30, SPECIES_HORSEA}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute132_FishingMonsInfo = {30, gRoute132_FishingMons}; const struct WildPokemon gRoute133_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute133_WaterMonsInfo = {4, gRoute133_WaterMons}; const struct WildPokemon gRoute133_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_SHARPEDO}, {30, 35, SPECIES_WAILMER}, {25, 30, SPECIES_HORSEA}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute133_FishingMonsInfo = {30, gRoute133_FishingMons}; const struct WildPokemon gRoute134_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gRoute134_WaterMonsInfo = {4, gRoute134_WaterMons}; const struct WildPokemon gRoute134_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_SHARPEDO}, {30, 35, SPECIES_WAILMER}, {25, 30, SPECIES_HORSEA}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gRoute134_FishingMonsInfo = {30, gRoute134_FishingMons}; const struct WildPokemon gAbandonedShip_HiddenFloorCorridors_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {5, 35, SPECIES_TENTACOOL}, {5, 35, SPECIES_TENTACOOL}, {5, 35, SPECIES_TENTACOOL}, {30, 35, SPECIES_TENTACRUEL}, }; const struct WildPokemonInfo gAbandonedShip_HiddenFloorCorridors_WaterMonsInfo = {4, gAbandonedShip_HiddenFloorCorridors_WaterMons}; const struct WildPokemon gAbandonedShip_HiddenFloorCorridors_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_TENTACOOL}, {25, 30, SPECIES_TENTACOOL}, {30, 35, SPECIES_TENTACOOL}, {30, 35, SPECIES_TENTACRUEL}, {25, 30, SPECIES_TENTACRUEL}, {20, 25, SPECIES_TENTACRUEL}, }; const struct WildPokemonInfo gAbandonedShip_HiddenFloorCorridors_FishingMonsInfo = {20, gAbandonedShip_HiddenFloorCorridors_FishingMons}; const struct WildPokemon gSeafloorCavern_Room1_LandMons[] = { {30, 30, SPECIES_ZUBAT}, {31, 31, SPECIES_ZUBAT}, {32, 32, SPECIES_ZUBAT}, {33, 33, SPECIES_ZUBAT}, {28, 28, SPECIES_ZUBAT}, {29, 29, SPECIES_ZUBAT}, {34, 34, SPECIES_ZUBAT}, {35, 35, SPECIES_ZUBAT}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {36, 36, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gSeafloorCavern_Room1_LandMonsInfo = {4, gSeafloorCavern_Room1_LandMons}; const struct WildPokemon gSeafloorCavern_Room2_LandMons[] = { {30, 30, SPECIES_ZUBAT}, {31, 31, SPECIES_ZUBAT}, {32, 32, SPECIES_ZUBAT}, {33, 33, SPECIES_ZUBAT}, {28, 28, SPECIES_ZUBAT}, {29, 29, SPECIES_ZUBAT}, {34, 34, SPECIES_ZUBAT}, {35, 35, SPECIES_ZUBAT}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {36, 36, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gSeafloorCavern_Room2_LandMonsInfo = {4, gSeafloorCavern_Room2_LandMons}; const struct WildPokemon gSeafloorCavern_Room3_LandMons[] = { {30, 30, SPECIES_ZUBAT}, {31, 31, SPECIES_ZUBAT}, {32, 32, SPECIES_ZUBAT}, {33, 33, SPECIES_ZUBAT}, {28, 28, SPECIES_ZUBAT}, {29, 29, SPECIES_ZUBAT}, {34, 34, SPECIES_ZUBAT}, {35, 35, SPECIES_ZUBAT}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {36, 36, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gSeafloorCavern_Room3_LandMonsInfo = {4, gSeafloorCavern_Room3_LandMons}; const struct WildPokemon gSeafloorCavern_Room4_LandMons[] = { {30, 30, SPECIES_ZUBAT}, {31, 31, SPECIES_ZUBAT}, {32, 32, SPECIES_ZUBAT}, {33, 33, SPECIES_ZUBAT}, {28, 28, SPECIES_ZUBAT}, {29, 29, SPECIES_ZUBAT}, {34, 34, SPECIES_ZUBAT}, {35, 35, SPECIES_ZUBAT}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {36, 36, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gSeafloorCavern_Room4_LandMonsInfo = {4, gSeafloorCavern_Room4_LandMons}; const struct WildPokemon gSeafloorCavern_Room5_LandMons[] = { {30, 30, SPECIES_ZUBAT}, {31, 31, SPECIES_ZUBAT}, {32, 32, SPECIES_ZUBAT}, {33, 33, SPECIES_ZUBAT}, {28, 28, SPECIES_ZUBAT}, {29, 29, SPECIES_ZUBAT}, {34, 34, SPECIES_ZUBAT}, {35, 35, SPECIES_ZUBAT}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {36, 36, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gSeafloorCavern_Room5_LandMonsInfo = {4, gSeafloorCavern_Room5_LandMons}; const struct WildPokemon gSeafloorCavern_Room6_LandMons[] = { {30, 30, SPECIES_ZUBAT}, {31, 31, SPECIES_ZUBAT}, {32, 32, SPECIES_ZUBAT}, {33, 33, SPECIES_ZUBAT}, {28, 28, SPECIES_ZUBAT}, {29, 29, SPECIES_ZUBAT}, {34, 34, SPECIES_ZUBAT}, {35, 35, SPECIES_ZUBAT}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {36, 36, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gSeafloorCavern_Room6_LandMonsInfo = {4, gSeafloorCavern_Room6_LandMons}; const struct WildPokemon gSeafloorCavern_Room6_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {5, 35, SPECIES_ZUBAT}, {30, 35, SPECIES_ZUBAT}, {30, 35, SPECIES_GOLBAT}, {30, 35, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gSeafloorCavern_Room6_WaterMonsInfo = {4, gSeafloorCavern_Room6_WaterMons}; const struct WildPokemon gSeafloorCavern_Room6_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gSeafloorCavern_Room6_FishingMonsInfo = {10, gSeafloorCavern_Room6_FishingMons}; const struct WildPokemon gSeafloorCavern_Room7_LandMons[] = { {30, 30, SPECIES_ZUBAT}, {31, 31, SPECIES_ZUBAT}, {32, 32, SPECIES_ZUBAT}, {33, 33, SPECIES_ZUBAT}, {28, 28, SPECIES_ZUBAT}, {29, 29, SPECIES_ZUBAT}, {34, 34, SPECIES_ZUBAT}, {35, 35, SPECIES_ZUBAT}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {36, 36, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gSeafloorCavern_Room7_LandMonsInfo = {4, gSeafloorCavern_Room7_LandMons}; const struct WildPokemon gSeafloorCavern_Room7_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {5, 35, SPECIES_ZUBAT}, {30, 35, SPECIES_ZUBAT}, {30, 35, SPECIES_GOLBAT}, {30, 35, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gSeafloorCavern_Room7_WaterMonsInfo = {4, gSeafloorCavern_Room7_WaterMons}; const struct WildPokemon gSeafloorCavern_Room7_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gSeafloorCavern_Room7_FishingMonsInfo = {10, gSeafloorCavern_Room7_FishingMons}; const struct WildPokemon gSeafloorCavern_Room8_LandMons[] = { {30, 30, SPECIES_ZUBAT}, {31, 31, SPECIES_ZUBAT}, {32, 32, SPECIES_ZUBAT}, {33, 33, SPECIES_ZUBAT}, {28, 28, SPECIES_ZUBAT}, {29, 29, SPECIES_ZUBAT}, {34, 34, SPECIES_ZUBAT}, {35, 35, SPECIES_ZUBAT}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {36, 36, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gSeafloorCavern_Room8_LandMonsInfo = {4, gSeafloorCavern_Room8_LandMons}; const struct WildPokemon gSeafloorCavern_Entrance_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {5, 35, SPECIES_ZUBAT}, {30, 35, SPECIES_ZUBAT}, {30, 35, SPECIES_GOLBAT}, {30, 35, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gSeafloorCavern_Entrance_WaterMonsInfo = {4, gSeafloorCavern_Entrance_WaterMons}; const struct WildPokemon gSeafloorCavern_Entrance_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gSeafloorCavern_Entrance_FishingMonsInfo = {10, gSeafloorCavern_Entrance_FishingMons}; const struct WildPokemon gCaveOfOrigin_Entrance_LandMons[] = { {30, 30, SPECIES_ZUBAT}, {31, 31, SPECIES_ZUBAT}, {32, 32, SPECIES_ZUBAT}, {33, 33, SPECIES_ZUBAT}, {28, 28, SPECIES_ZUBAT}, {29, 29, SPECIES_ZUBAT}, {34, 34, SPECIES_ZUBAT}, {35, 35, SPECIES_ZUBAT}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {36, 36, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gCaveOfOrigin_Entrance_LandMonsInfo = {4, gCaveOfOrigin_Entrance_LandMons}; const struct WildPokemon gCaveOfOrigin_1F_LandMons[] = { {30, 30, SPECIES_ZUBAT}, {31, 31, SPECIES_ZUBAT}, {32, 32, SPECIES_ZUBAT}, {30, 30, SPECIES_SABLEYE}, {32, 32, SPECIES_SABLEYE}, {34, 34, SPECIES_SABLEYE}, {33, 33, SPECIES_ZUBAT}, {34, 34, SPECIES_ZUBAT}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {36, 36, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gCaveOfOrigin_1F_LandMonsInfo = {4, gCaveOfOrigin_1F_LandMons}; const struct WildPokemon gCaveOfOrigin_UnusedRubySapphireMap1_LandMons[] = { {30, 30, SPECIES_ZUBAT}, {31, 31, SPECIES_ZUBAT}, {32, 32, SPECIES_ZUBAT}, {30, 30, SPECIES_SABLEYE}, {32, 32, SPECIES_SABLEYE}, {34, 34, SPECIES_SABLEYE}, {33, 33, SPECIES_ZUBAT}, {34, 34, SPECIES_ZUBAT}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {36, 36, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gCaveOfOrigin_UnusedRubySapphireMap1_LandMonsInfo = {4, gCaveOfOrigin_UnusedRubySapphireMap1_LandMons}; const struct WildPokemon gCaveOfOrigin_UnusedRubySapphireMap2_LandMons[] = { {30, 30, SPECIES_ZUBAT}, {31, 31, SPECIES_ZUBAT}, {32, 32, SPECIES_ZUBAT}, {30, 30, SPECIES_SABLEYE}, {32, 32, SPECIES_SABLEYE}, {34, 34, SPECIES_SABLEYE}, {33, 33, SPECIES_ZUBAT}, {34, 34, SPECIES_ZUBAT}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {36, 36, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gCaveOfOrigin_UnusedRubySapphireMap2_LandMonsInfo = {4, gCaveOfOrigin_UnusedRubySapphireMap2_LandMons}; const struct WildPokemon gCaveOfOrigin_UnusedRubySapphireMap3_LandMons[] = { {30, 30, SPECIES_ZUBAT}, {31, 31, SPECIES_ZUBAT}, {32, 32, SPECIES_ZUBAT}, {30, 30, SPECIES_SABLEYE}, {32, 32, SPECIES_SABLEYE}, {34, 34, SPECIES_SABLEYE}, {33, 33, SPECIES_ZUBAT}, {34, 34, SPECIES_ZUBAT}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {36, 36, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gCaveOfOrigin_UnusedRubySapphireMap3_LandMonsInfo = {4, gCaveOfOrigin_UnusedRubySapphireMap3_LandMons}; const struct WildPokemon gNewMauville_Entrance_LandMons[] = { {24, 24, SPECIES_VOLTORB}, {24, 24, SPECIES_MAGNEMITE}, {25, 25, SPECIES_VOLTORB}, {25, 25, SPECIES_MAGNEMITE}, {23, 23, SPECIES_VOLTORB}, {23, 23, SPECIES_MAGNEMITE}, {26, 26, SPECIES_VOLTORB}, {26, 26, SPECIES_MAGNEMITE}, {22, 22, SPECIES_VOLTORB}, {22, 22, SPECIES_MAGNEMITE}, {22, 22, SPECIES_VOLTORB}, {22, 22, SPECIES_MAGNEMITE}, }; const struct WildPokemonInfo gNewMauville_Entrance_LandMonsInfo = {10, gNewMauville_Entrance_LandMons}; const struct WildPokemon gSafariZone_Southwest_LandMons[] = { {25, 25, SPECIES_ODDISH}, {27, 27, SPECIES_ODDISH}, {25, 25, SPECIES_GIRAFARIG}, {27, 27, SPECIES_GIRAFARIG}, {25, 25, SPECIES_NATU}, {27, 27, SPECIES_DODUO}, {25, 25, SPECIES_GLOOM}, {27, 27, SPECIES_WOBBUFFET}, {25, 25, SPECIES_PIKACHU}, {27, 27, SPECIES_WOBBUFFET}, {27, 27, SPECIES_PIKACHU}, {29, 29, SPECIES_WOBBUFFET}, }; const struct WildPokemonInfo gSafariZone_Southwest_LandMonsInfo = {25, gSafariZone_Southwest_LandMons}; const struct WildPokemon gSafariZone_Southwest_WaterMons[] = { {20, 30, SPECIES_PSYDUCK}, {20, 30, SPECIES_PSYDUCK}, {30, 35, SPECIES_PSYDUCK}, {30, 35, SPECIES_PSYDUCK}, {30, 35, SPECIES_PSYDUCK}, }; const struct WildPokemonInfo gSafariZone_Southwest_WaterMonsInfo = {9, gSafariZone_Southwest_WaterMons}; const struct WildPokemon gSafariZone_Southwest_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_GOLDEEN}, {10, 30, SPECIES_MAGIKARP}, {10, 25, SPECIES_GOLDEEN}, {10, 30, SPECIES_GOLDEEN}, {25, 30, SPECIES_GOLDEEN}, {30, 35, SPECIES_GOLDEEN}, {30, 35, SPECIES_SEAKING}, {35, 40, SPECIES_SEAKING}, {25, 30, SPECIES_SEAKING}, }; const struct WildPokemonInfo gSafariZone_Southwest_FishingMonsInfo = {35, gSafariZone_Southwest_FishingMons}; const struct WildPokemon gSafariZone_North_LandMons[] = { {27, 27, SPECIES_PHANPY}, {27, 27, SPECIES_ODDISH}, {29, 29, SPECIES_PHANPY}, {29, 29, SPECIES_ODDISH}, {27, 27, SPECIES_NATU}, {29, 29, SPECIES_GLOOM}, {31, 31, SPECIES_GLOOM}, {29, 29, SPECIES_NATU}, {29, 29, SPECIES_XATU}, {27, 27, SPECIES_HERACROSS}, {31, 31, SPECIES_XATU}, {29, 29, SPECIES_HERACROSS}, }; const struct WildPokemonInfo gSafariZone_North_LandMonsInfo = {25, gSafariZone_North_LandMons}; const struct WildPokemon gSafariZone_North_RockSmashMons[] = { {10, 15, SPECIES_GEODUDE}, {5, 10, SPECIES_GEODUDE}, {15, 20, SPECIES_GEODUDE}, {20, 25, SPECIES_GEODUDE}, {25, 30, SPECIES_GEODUDE}, }; const struct WildPokemonInfo gSafariZone_North_RockSmashMonsInfo = {25, gSafariZone_North_RockSmashMons}; const struct WildPokemon gSafariZone_Northwest_LandMons[] = { {27, 27, SPECIES_RHYHORN}, {27, 27, SPECIES_ODDISH}, {29, 29, SPECIES_RHYHORN}, {29, 29, SPECIES_ODDISH}, {27, 27, SPECIES_DODUO}, {29, 29, SPECIES_GLOOM}, {31, 31, SPECIES_GLOOM}, {29, 29, SPECIES_DODUO}, {29, 29, SPECIES_DODRIO}, {27, 27, SPECIES_PINSIR}, {31, 31, SPECIES_DODRIO}, {29, 29, SPECIES_PINSIR}, }; const struct WildPokemonInfo gSafariZone_Northwest_LandMonsInfo = {25, gSafariZone_Northwest_LandMons}; const struct WildPokemon gSafariZone_Northwest_WaterMons[] = { {20, 30, SPECIES_PSYDUCK}, {20, 30, SPECIES_PSYDUCK}, {30, 35, SPECIES_PSYDUCK}, {30, 35, SPECIES_GOLDUCK}, {25, 40, SPECIES_GOLDUCK}, }; const struct WildPokemonInfo gSafariZone_Northwest_WaterMonsInfo = {9, gSafariZone_Northwest_WaterMons}; const struct WildPokemon gSafariZone_Northwest_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_GOLDEEN}, {10, 30, SPECIES_MAGIKARP}, {10, 25, SPECIES_GOLDEEN}, {10, 30, SPECIES_GOLDEEN}, {25, 30, SPECIES_GOLDEEN}, {30, 35, SPECIES_GOLDEEN}, {30, 35, SPECIES_SEAKING}, {35, 40, SPECIES_SEAKING}, {25, 30, SPECIES_SEAKING}, }; const struct WildPokemonInfo gSafariZone_Northwest_FishingMonsInfo = {35, gSafariZone_Northwest_FishingMons}; const struct WildPokemon gVictoryRoad_B1F_LandMons[] = { {40, 40, SPECIES_GOLBAT}, {40, 40, SPECIES_HARIYAMA}, {40, 40, SPECIES_LAIRON}, {40, 40, SPECIES_LAIRON}, {38, 38, SPECIES_GOLBAT}, {38, 38, SPECIES_HARIYAMA}, {42, 42, SPECIES_GOLBAT}, {42, 42, SPECIES_HARIYAMA}, {42, 42, SPECIES_LAIRON}, {38, 38, SPECIES_MAWILE}, {42, 42, SPECIES_LAIRON}, {38, 38, SPECIES_MAWILE}, }; const struct WildPokemonInfo gVictoryRoad_B1F_LandMonsInfo = {10, gVictoryRoad_B1F_LandMons}; const struct WildPokemon gVictoryRoad_B1F_RockSmashMons[] = { {30, 40, SPECIES_GRAVELER}, {30, 40, SPECIES_GEODUDE}, {35, 40, SPECIES_GRAVELER}, {35, 40, SPECIES_GRAVELER}, {35, 40, SPECIES_GRAVELER}, }; const struct WildPokemonInfo gVictoryRoad_B1F_RockSmashMonsInfo = {20, gVictoryRoad_B1F_RockSmashMons}; const struct WildPokemon gVictoryRoad_B2F_LandMons[] = { {40, 40, SPECIES_GOLBAT}, {40, 40, SPECIES_SABLEYE}, {40, 40, SPECIES_LAIRON}, {40, 40, SPECIES_LAIRON}, {42, 42, SPECIES_GOLBAT}, {42, 42, SPECIES_SABLEYE}, {44, 44, SPECIES_GOLBAT}, {44, 44, SPECIES_SABLEYE}, {42, 42, SPECIES_LAIRON}, {42, 42, SPECIES_MAWILE}, {44, 44, SPECIES_LAIRON}, {44, 44, SPECIES_MAWILE}, }; const struct WildPokemonInfo gVictoryRoad_B2F_LandMonsInfo = {10, gVictoryRoad_B2F_LandMons}; const struct WildPokemon gVictoryRoad_B2F_WaterMons[] = { {30, 35, SPECIES_GOLBAT}, {25, 30, SPECIES_GOLBAT}, {35, 40, SPECIES_GOLBAT}, {35, 40, SPECIES_GOLBAT}, {35, 40, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gVictoryRoad_B2F_WaterMonsInfo = {4, gVictoryRoad_B2F_WaterMons}; const struct WildPokemon gVictoryRoad_B2F_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_GOLDEEN}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_GOLDEEN}, {10, 30, SPECIES_BARBOACH}, {25, 30, SPECIES_BARBOACH}, {30, 35, SPECIES_BARBOACH}, {30, 35, SPECIES_WHISCASH}, {35, 40, SPECIES_WHISCASH}, {40, 45, SPECIES_WHISCASH}, }; const struct WildPokemonInfo gVictoryRoad_B2F_FishingMonsInfo = {30, gVictoryRoad_B2F_FishingMons}; const struct WildPokemon gMeteorFalls_1F_1R_LandMons[] = { {16, 16, SPECIES_ZUBAT}, {17, 17, SPECIES_ZUBAT}, {18, 18, SPECIES_ZUBAT}, {15, 15, SPECIES_ZUBAT}, {14, 14, SPECIES_ZUBAT}, {16, 16, SPECIES_SOLROCK}, {18, 18, SPECIES_SOLROCK}, {14, 14, SPECIES_SOLROCK}, {19, 19, SPECIES_ZUBAT}, {20, 20, SPECIES_ZUBAT}, {19, 19, SPECIES_ZUBAT}, {20, 20, SPECIES_ZUBAT}, }; const struct WildPokemonInfo gMeteorFalls_1F_1R_LandMonsInfo = {10, gMeteorFalls_1F_1R_LandMons}; const struct WildPokemon gMeteorFalls_1F_1R_WaterMons[] = { {5, 35, SPECIES_ZUBAT}, {30, 35, SPECIES_ZUBAT}, {25, 35, SPECIES_SOLROCK}, {15, 25, SPECIES_SOLROCK}, {5, 15, SPECIES_SOLROCK}, }; const struct WildPokemonInfo gMeteorFalls_1F_1R_WaterMonsInfo = {4, gMeteorFalls_1F_1R_WaterMons}; const struct WildPokemon gMeteorFalls_1F_1R_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_GOLDEEN}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_GOLDEEN}, {10, 30, SPECIES_BARBOACH}, {25, 30, SPECIES_BARBOACH}, {30, 35, SPECIES_BARBOACH}, {20, 25, SPECIES_BARBOACH}, {35, 40, SPECIES_BARBOACH}, {40, 45, SPECIES_BARBOACH}, }; const struct WildPokemonInfo gMeteorFalls_1F_1R_FishingMonsInfo = {30, gMeteorFalls_1F_1R_FishingMons}; const struct WildPokemon gMeteorFalls_1F_2R_LandMons[] = { {33, 33, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {35, 35, SPECIES_SOLROCK}, {33, 33, SPECIES_SOLROCK}, {37, 37, SPECIES_SOLROCK}, {35, 35, SPECIES_GOLBAT}, {39, 39, SPECIES_SOLROCK}, {38, 38, SPECIES_GOLBAT}, {40, 40, SPECIES_GOLBAT}, {38, 38, SPECIES_GOLBAT}, {40, 40, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gMeteorFalls_1F_2R_LandMonsInfo = {10, gMeteorFalls_1F_2R_LandMons}; const struct WildPokemon gMeteorFalls_1F_2R_WaterMons[] = { {30, 35, SPECIES_GOLBAT}, {30, 35, SPECIES_GOLBAT}, {25, 35, SPECIES_SOLROCK}, {15, 25, SPECIES_SOLROCK}, {5, 15, SPECIES_SOLROCK}, }; const struct WildPokemonInfo gMeteorFalls_1F_2R_WaterMonsInfo = {4, gMeteorFalls_1F_2R_WaterMons}; const struct WildPokemon gMeteorFalls_1F_2R_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_GOLDEEN}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_GOLDEEN}, {10, 30, SPECIES_BARBOACH}, {25, 30, SPECIES_BARBOACH}, {30, 35, SPECIES_BARBOACH}, {30, 35, SPECIES_WHISCASH}, {35, 40, SPECIES_WHISCASH}, {40, 45, SPECIES_WHISCASH}, }; const struct WildPokemonInfo gMeteorFalls_1F_2R_FishingMonsInfo = {30, gMeteorFalls_1F_2R_FishingMons}; const struct WildPokemon gMeteorFalls_B1F_1R_LandMons[] = { {33, 33, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {35, 35, SPECIES_SOLROCK}, {33, 33, SPECIES_SOLROCK}, {37, 37, SPECIES_SOLROCK}, {35, 35, SPECIES_GOLBAT}, {39, 39, SPECIES_SOLROCK}, {38, 38, SPECIES_GOLBAT}, {40, 40, SPECIES_GOLBAT}, {38, 38, SPECIES_GOLBAT}, {40, 40, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gMeteorFalls_B1F_1R_LandMonsInfo = {10, gMeteorFalls_B1F_1R_LandMons}; const struct WildPokemon gMeteorFalls_B1F_1R_WaterMons[] = { {30, 35, SPECIES_GOLBAT}, {30, 35, SPECIES_GOLBAT}, {25, 35, SPECIES_SOLROCK}, {15, 25, SPECIES_SOLROCK}, {5, 15, SPECIES_SOLROCK}, }; const struct WildPokemonInfo gMeteorFalls_B1F_1R_WaterMonsInfo = {4, gMeteorFalls_B1F_1R_WaterMons}; const struct WildPokemon gMeteorFalls_B1F_1R_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_GOLDEEN}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_GOLDEEN}, {10, 30, SPECIES_BARBOACH}, {25, 30, SPECIES_BARBOACH}, {30, 35, SPECIES_BARBOACH}, {30, 35, SPECIES_WHISCASH}, {35, 40, SPECIES_WHISCASH}, {40, 45, SPECIES_WHISCASH}, }; const struct WildPokemonInfo gMeteorFalls_B1F_1R_FishingMonsInfo = {30, gMeteorFalls_B1F_1R_FishingMons}; const struct WildPokemon gShoalCave_LowTideStairsRoom_LandMons[] = { {26, 26, SPECIES_ZUBAT}, {26, 26, SPECIES_SPHEAL}, {28, 28, SPECIES_ZUBAT}, {28, 28, SPECIES_SPHEAL}, {30, 30, SPECIES_ZUBAT}, {30, 30, SPECIES_SPHEAL}, {32, 32, SPECIES_ZUBAT}, {32, 32, SPECIES_SPHEAL}, {32, 32, SPECIES_GOLBAT}, {32, 32, SPECIES_SPHEAL}, {32, 32, SPECIES_GOLBAT}, {32, 32, SPECIES_SPHEAL}, }; const struct WildPokemonInfo gShoalCave_LowTideStairsRoom_LandMonsInfo = {10, gShoalCave_LowTideStairsRoom_LandMons}; const struct WildPokemon gShoalCave_LowTideLowerRoom_LandMons[] = { {26, 26, SPECIES_ZUBAT}, {26, 26, SPECIES_SPHEAL}, {28, 28, SPECIES_ZUBAT}, {28, 28, SPECIES_SPHEAL}, {30, 30, SPECIES_ZUBAT}, {30, 30, SPECIES_SPHEAL}, {32, 32, SPECIES_ZUBAT}, {32, 32, SPECIES_SPHEAL}, {32, 32, SPECIES_GOLBAT}, {32, 32, SPECIES_SPHEAL}, {32, 32, SPECIES_GOLBAT}, {32, 32, SPECIES_SPHEAL}, }; const struct WildPokemonInfo gShoalCave_LowTideLowerRoom_LandMonsInfo = {10, gShoalCave_LowTideLowerRoom_LandMons}; const struct WildPokemon gShoalCave_LowTideInnerRoom_LandMons[] = { {26, 26, SPECIES_ZUBAT}, {26, 26, SPECIES_SPHEAL}, {28, 28, SPECIES_ZUBAT}, {28, 28, SPECIES_SPHEAL}, {30, 30, SPECIES_ZUBAT}, {30, 30, SPECIES_SPHEAL}, {32, 32, SPECIES_ZUBAT}, {32, 32, SPECIES_SPHEAL}, {32, 32, SPECIES_GOLBAT}, {32, 32, SPECIES_SPHEAL}, {32, 32, SPECIES_GOLBAT}, {32, 32, SPECIES_SPHEAL}, }; const struct WildPokemonInfo gShoalCave_LowTideInnerRoom_LandMonsInfo = {10, gShoalCave_LowTideInnerRoom_LandMons}; const struct WildPokemon gShoalCave_LowTideInnerRoom_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {5, 35, SPECIES_ZUBAT}, {25, 30, SPECIES_SPHEAL}, {25, 30, SPECIES_SPHEAL}, {25, 35, SPECIES_SPHEAL}, }; const struct WildPokemonInfo gShoalCave_LowTideInnerRoom_WaterMonsInfo = {4, gShoalCave_LowTideInnerRoom_WaterMons}; const struct WildPokemon gShoalCave_LowTideInnerRoom_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gShoalCave_LowTideInnerRoom_FishingMonsInfo = {10, gShoalCave_LowTideInnerRoom_FishingMons}; const struct WildPokemon gShoalCave_LowTideEntranceRoom_LandMons[] = { {26, 26, SPECIES_ZUBAT}, {26, 26, SPECIES_SPHEAL}, {28, 28, SPECIES_ZUBAT}, {28, 28, SPECIES_SPHEAL}, {30, 30, SPECIES_ZUBAT}, {30, 30, SPECIES_SPHEAL}, {32, 32, SPECIES_ZUBAT}, {32, 32, SPECIES_SPHEAL}, {32, 32, SPECIES_GOLBAT}, {32, 32, SPECIES_SPHEAL}, {32, 32, SPECIES_GOLBAT}, {32, 32, SPECIES_SPHEAL}, }; const struct WildPokemonInfo gShoalCave_LowTideEntranceRoom_LandMonsInfo = {10, gShoalCave_LowTideEntranceRoom_LandMons}; const struct WildPokemon gShoalCave_LowTideEntranceRoom_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {5, 35, SPECIES_ZUBAT}, {25, 30, SPECIES_SPHEAL}, {25, 30, SPECIES_SPHEAL}, {25, 35, SPECIES_SPHEAL}, }; const struct WildPokemonInfo gShoalCave_LowTideEntranceRoom_WaterMonsInfo = {4, gShoalCave_LowTideEntranceRoom_WaterMons}; const struct WildPokemon gShoalCave_LowTideEntranceRoom_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gShoalCave_LowTideEntranceRoom_FishingMonsInfo = {10, gShoalCave_LowTideEntranceRoom_FishingMons}; const struct WildPokemon gLilycoveCity_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gLilycoveCity_WaterMonsInfo = {4, gLilycoveCity_WaterMons}; const struct WildPokemon gLilycoveCity_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {25, 30, SPECIES_STARYU}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gLilycoveCity_FishingMonsInfo = {10, gLilycoveCity_FishingMons}; const struct WildPokemon gDewfordTown_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gDewfordTown_WaterMonsInfo = {4, gDewfordTown_WaterMons}; const struct WildPokemon gDewfordTown_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gDewfordTown_FishingMonsInfo = {10, gDewfordTown_FishingMons}; const struct WildPokemon gSlateportCity_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gSlateportCity_WaterMonsInfo = {4, gSlateportCity_WaterMons}; const struct WildPokemon gSlateportCity_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {30, 35, SPECIES_WAILMER}, {20, 25, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gSlateportCity_FishingMonsInfo = {10, gSlateportCity_FishingMons}; const struct WildPokemon gMossdeepCity_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gMossdeepCity_WaterMonsInfo = {4, gMossdeepCity_WaterMons}; const struct WildPokemon gMossdeepCity_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_SHARPEDO}, {30, 35, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gMossdeepCity_FishingMonsInfo = {10, gMossdeepCity_FishingMons}; const struct WildPokemon gPacifidlogTown_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gPacifidlogTown_WaterMonsInfo = {4, gPacifidlogTown_WaterMons}; const struct WildPokemon gPacifidlogTown_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_TENTACOOL}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_SHARPEDO}, {30, 35, SPECIES_WAILMER}, {25, 30, SPECIES_WAILMER}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gPacifidlogTown_FishingMonsInfo = {10, gPacifidlogTown_FishingMons}; const struct WildPokemon gEverGrandeCity_WaterMons[] = { {5, 35, SPECIES_TENTACOOL}, {10, 30, SPECIES_WINGULL}, {15, 25, SPECIES_WINGULL}, {25, 30, SPECIES_PELIPPER}, {25, 30, SPECIES_PELIPPER}, }; const struct WildPokemonInfo gEverGrandeCity_WaterMonsInfo = {4, gEverGrandeCity_WaterMons}; const struct WildPokemon gEverGrandeCity_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_LUVDISC}, {10, 30, SPECIES_WAILMER}, {30, 35, SPECIES_LUVDISC}, {30, 35, SPECIES_WAILMER}, {30, 35, SPECIES_CORSOLA}, {35, 40, SPECIES_WAILMER}, {40, 45, SPECIES_WAILMER}, }; const struct WildPokemonInfo gEverGrandeCity_FishingMonsInfo = {10, gEverGrandeCity_FishingMons}; const struct WildPokemon gPetalburgCity_WaterMons[] = { {20, 30, SPECIES_MARILL}, {10, 20, SPECIES_MARILL}, {30, 35, SPECIES_MARILL}, {5, 10, SPECIES_MARILL}, {5, 10, SPECIES_MARILL}, }; const struct WildPokemonInfo gPetalburgCity_WaterMonsInfo = {1, gPetalburgCity_WaterMons}; const struct WildPokemon gPetalburgCity_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_GOLDEEN}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_GOLDEEN}, {10, 30, SPECIES_CORPHISH}, {25, 30, SPECIES_CORPHISH}, {30, 35, SPECIES_CORPHISH}, {20, 25, SPECIES_CORPHISH}, {35, 40, SPECIES_CORPHISH}, {40, 45, SPECIES_CORPHISH}, }; const struct WildPokemonInfo gPetalburgCity_FishingMonsInfo = {10, gPetalburgCity_FishingMons}; const struct WildPokemon gUnderwater1_WaterMons[] = { {20, 30, SPECIES_CLAMPERL}, {20, 30, SPECIES_CHINCHOU}, {30, 35, SPECIES_CLAMPERL}, {30, 35, SPECIES_RELICANTH}, {30, 35, SPECIES_RELICANTH}, }; const struct WildPokemonInfo gUnderwater1_WaterMonsInfo = {4, gUnderwater1_WaterMons}; const struct WildPokemon gShoalCave_LowTideIceRoom_LandMons[] = { {26, 26, SPECIES_ZUBAT}, {26, 26, SPECIES_SPHEAL}, {28, 28, SPECIES_ZUBAT}, {28, 28, SPECIES_SPHEAL}, {30, 30, SPECIES_ZUBAT}, {30, 30, SPECIES_SPHEAL}, {26, 26, SPECIES_SNORUNT}, {32, 32, SPECIES_SPHEAL}, {30, 30, SPECIES_GOLBAT}, {28, 28, SPECIES_SNORUNT}, {32, 32, SPECIES_GOLBAT}, {30, 30, SPECIES_SNORUNT}, }; const struct WildPokemonInfo gShoalCave_LowTideIceRoom_LandMonsInfo = {10, gShoalCave_LowTideIceRoom_LandMons}; const struct WildPokemon gSkyPillar_1F_LandMons[] = { {33, 33, SPECIES_SABLEYE}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {34, 34, SPECIES_SABLEYE}, {36, 36, SPECIES_CLAYDOL}, {37, 37, SPECIES_BANETTE}, {38, 38, SPECIES_BANETTE}, {36, 36, SPECIES_CLAYDOL}, {37, 37, SPECIES_CLAYDOL}, {38, 38, SPECIES_CLAYDOL}, {37, 37, SPECIES_CLAYDOL}, {38, 38, SPECIES_CLAYDOL}, }; const struct WildPokemonInfo gSkyPillar_1F_LandMonsInfo = {10, gSkyPillar_1F_LandMons}; const struct WildPokemon gSootopolisCity_WaterMons[] = { {5, 35, SPECIES_MAGIKARP}, {10, 30, SPECIES_MAGIKARP}, {15, 25, SPECIES_MAGIKARP}, {25, 30, SPECIES_MAGIKARP}, {25, 30, SPECIES_MAGIKARP}, }; const struct WildPokemonInfo gSootopolisCity_WaterMonsInfo = {1, gSootopolisCity_WaterMons}; const struct WildPokemon gSootopolisCity_FishingMons[] = { {5, 10, SPECIES_MAGIKARP}, {5, 10, SPECIES_TENTACOOL}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_MAGIKARP}, {10, 30, SPECIES_MAGIKARP}, {30, 35, SPECIES_MAGIKARP}, {30, 35, SPECIES_MAGIKARP}, {35, 40, SPECIES_GYARADOS}, {35, 45, SPECIES_GYARADOS}, {5, 45, SPECIES_GYARADOS}, }; const struct WildPokemonInfo gSootopolisCity_FishingMonsInfo = {10, gSootopolisCity_FishingMons}; const struct WildPokemon gSkyPillar_3F_LandMons[] = { {33, 33, SPECIES_SABLEYE}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {34, 34, SPECIES_SABLEYE}, {36, 36, SPECIES_CLAYDOL}, {37, 37, SPECIES_BANETTE}, {38, 38, SPECIES_BANETTE}, {36, 36, SPECIES_CLAYDOL}, {37, 37, SPECIES_CLAYDOL}, {38, 38, SPECIES_CLAYDOL}, {37, 37, SPECIES_CLAYDOL}, {38, 38, SPECIES_CLAYDOL}, }; const struct WildPokemonInfo gSkyPillar_3F_LandMonsInfo = {10, gSkyPillar_3F_LandMons}; const struct WildPokemon gSkyPillar_5F_LandMons[] = { {33, 33, SPECIES_SABLEYE}, {34, 34, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {34, 34, SPECIES_SABLEYE}, {36, 36, SPECIES_CLAYDOL}, {37, 37, SPECIES_BANETTE}, {38, 38, SPECIES_BANETTE}, {36, 36, SPECIES_CLAYDOL}, {37, 37, SPECIES_CLAYDOL}, {38, 38, SPECIES_ALTARIA}, {39, 39, SPECIES_ALTARIA}, {39, 39, SPECIES_ALTARIA}, }; const struct WildPokemonInfo gSkyPillar_5F_LandMonsInfo = {10, gSkyPillar_5F_LandMons}; const struct WildPokemon gSafariZone_Southeast_LandMons[] = { {33, 33, SPECIES_SUNKERN}, {34, 34, SPECIES_MAREEP}, {35, 35, SPECIES_SUNKERN}, {36, 36, SPECIES_MAREEP}, {34, 34, SPECIES_AIPOM}, {33, 33, SPECIES_SPINARAK}, {35, 35, SPECIES_HOOTHOOT}, {34, 34, SPECIES_SNUBBULL}, {36, 36, SPECIES_STANTLER}, {37, 37, SPECIES_GLIGAR}, {39, 39, SPECIES_STANTLER}, {40, 40, SPECIES_GLIGAR}, }; const struct WildPokemonInfo gSafariZone_Southeast_LandMonsInfo = {25, gSafariZone_Southeast_LandMons}; const struct WildPokemon gSafariZone_Southeast_WaterMons[] = { {25, 30, SPECIES_WOOPER}, {25, 30, SPECIES_MARILL}, {25, 30, SPECIES_MARILL}, {30, 35, SPECIES_MARILL}, {35, 40, SPECIES_QUAGSIRE}, }; const struct WildPokemonInfo gSafariZone_Southeast_WaterMonsInfo = {9, gSafariZone_Southeast_WaterMons}; const struct WildPokemon gSafariZone_Southeast_FishingMons[] = { {25, 30, SPECIES_MAGIKARP}, {25, 30, SPECIES_GOLDEEN}, {25, 30, SPECIES_MAGIKARP}, {25, 30, SPECIES_GOLDEEN}, {30, 35, SPECIES_REMORAID}, {25, 30, SPECIES_GOLDEEN}, {25, 30, SPECIES_REMORAID}, {30, 35, SPECIES_REMORAID}, {30, 35, SPECIES_REMORAID}, {35, 40, SPECIES_OCTILLERY}, }; const struct WildPokemonInfo gSafariZone_Southeast_FishingMonsInfo = {35, gSafariZone_Southeast_FishingMons}; const struct WildPokemon gSafariZone_Northeast_LandMons[] = { {33, 33, SPECIES_AIPOM}, {34, 34, SPECIES_TEDDIURSA}, {35, 35, SPECIES_AIPOM}, {36, 36, SPECIES_TEDDIURSA}, {34, 34, SPECIES_SUNKERN}, {33, 33, SPECIES_LEDYBA}, {35, 35, SPECIES_HOOTHOOT}, {34, 34, SPECIES_PINECO}, {36, 36, SPECIES_HOUNDOUR}, {37, 37, SPECIES_MILTANK}, {39, 39, SPECIES_HOUNDOUR}, {40, 40, SPECIES_MILTANK}, }; const struct WildPokemonInfo gSafariZone_Northeast_LandMonsInfo = {25, gSafariZone_Northeast_LandMons}; const struct WildPokemon gSafariZone_Northeast_RockSmashMons[] = { {25, 30, SPECIES_SHUCKLE}, {20, 25, SPECIES_SHUCKLE}, {30, 35, SPECIES_SHUCKLE}, {30, 35, SPECIES_SHUCKLE}, {35, 40, SPECIES_SHUCKLE}, }; const struct WildPokemonInfo gSafariZone_Northeast_RockSmashMonsInfo = {25, gSafariZone_Northeast_RockSmashMons}; const struct WildPokemon gMagmaHideout_1F_LandMons[] = { {27, 27, SPECIES_GEODUDE}, {28, 28, SPECIES_TORKOAL}, {28, 28, SPECIES_GEODUDE}, {30, 30, SPECIES_TORKOAL}, {29, 29, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GRAVELER}, {30, 30, SPECIES_GRAVELER}, {31, 31, SPECIES_GRAVELER}, {32, 32, SPECIES_GRAVELER}, {33, 33, SPECIES_GRAVELER}, }; const struct WildPokemonInfo gMagmaHideout_1F_LandMonsInfo = {10, gMagmaHideout_1F_LandMons}; const struct WildPokemon gMagmaHideout_2F_1R_LandMons[] = { {27, 27, SPECIES_GEODUDE}, {28, 28, SPECIES_TORKOAL}, {28, 28, SPECIES_GEODUDE}, {30, 30, SPECIES_TORKOAL}, {29, 29, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GRAVELER}, {30, 30, SPECIES_GRAVELER}, {31, 31, SPECIES_GRAVELER}, {32, 32, SPECIES_GRAVELER}, {33, 33, SPECIES_GRAVELER}, }; const struct WildPokemonInfo gMagmaHideout_2F_1R_LandMonsInfo = {10, gMagmaHideout_2F_1R_LandMons}; const struct WildPokemon gMagmaHideout_2F_2R_LandMons[] = { {27, 27, SPECIES_GEODUDE}, {28, 28, SPECIES_TORKOAL}, {28, 28, SPECIES_GEODUDE}, {30, 30, SPECIES_TORKOAL}, {29, 29, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GRAVELER}, {30, 30, SPECIES_GRAVELER}, {31, 31, SPECIES_GRAVELER}, {32, 32, SPECIES_GRAVELER}, {33, 33, SPECIES_GRAVELER}, }; const struct WildPokemonInfo gMagmaHideout_2F_2R_LandMonsInfo = {10, gMagmaHideout_2F_2R_LandMons}; const struct WildPokemon gMagmaHideout_3F_1R_LandMons[] = { {27, 27, SPECIES_GEODUDE}, {28, 28, SPECIES_TORKOAL}, {28, 28, SPECIES_GEODUDE}, {30, 30, SPECIES_TORKOAL}, {29, 29, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GRAVELER}, {30, 30, SPECIES_GRAVELER}, {31, 31, SPECIES_GRAVELER}, {32, 32, SPECIES_GRAVELER}, {33, 33, SPECIES_GRAVELER}, }; const struct WildPokemonInfo gMagmaHideout_3F_1R_LandMonsInfo = {10, gMagmaHideout_3F_1R_LandMons}; const struct WildPokemon gMagmaHideout_3F_2R_LandMons[] = { {27, 27, SPECIES_GEODUDE}, {28, 28, SPECIES_TORKOAL}, {28, 28, SPECIES_GEODUDE}, {30, 30, SPECIES_TORKOAL}, {29, 29, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GRAVELER}, {30, 30, SPECIES_GRAVELER}, {31, 31, SPECIES_GRAVELER}, {32, 32, SPECIES_GRAVELER}, {33, 33, SPECIES_GRAVELER}, }; const struct WildPokemonInfo gMagmaHideout_3F_2R_LandMonsInfo = {10, gMagmaHideout_3F_2R_LandMons}; const struct WildPokemon gMagmaHideout_4F_LandMons[] = { {27, 27, SPECIES_GEODUDE}, {28, 28, SPECIES_TORKOAL}, {28, 28, SPECIES_GEODUDE}, {30, 30, SPECIES_TORKOAL}, {29, 29, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GRAVELER}, {30, 30, SPECIES_GRAVELER}, {31, 31, SPECIES_GRAVELER}, {32, 32, SPECIES_GRAVELER}, {33, 33, SPECIES_GRAVELER}, }; const struct WildPokemonInfo gMagmaHideout_4F_LandMonsInfo = {10, gMagmaHideout_4F_LandMons}; const struct WildPokemon gMagmaHideout_3F_3R_LandMons[] = { {27, 27, SPECIES_GEODUDE}, {28, 28, SPECIES_TORKOAL}, {28, 28, SPECIES_GEODUDE}, {30, 30, SPECIES_TORKOAL}, {29, 29, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GRAVELER}, {30, 30, SPECIES_GRAVELER}, {31, 31, SPECIES_GRAVELER}, {32, 32, SPECIES_GRAVELER}, {33, 33, SPECIES_GRAVELER}, }; const struct WildPokemonInfo gMagmaHideout_3F_3R_LandMonsInfo = {10, gMagmaHideout_3F_3R_LandMons}; const struct WildPokemon gMagmaHideout_2F_3R_LandMons[] = { {27, 27, SPECIES_GEODUDE}, {28, 28, SPECIES_TORKOAL}, {28, 28, SPECIES_GEODUDE}, {30, 30, SPECIES_TORKOAL}, {29, 29, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GEODUDE}, {30, 30, SPECIES_GRAVELER}, {30, 30, SPECIES_GRAVELER}, {31, 31, SPECIES_GRAVELER}, {32, 32, SPECIES_GRAVELER}, {33, 33, SPECIES_GRAVELER}, }; const struct WildPokemonInfo gMagmaHideout_2F_3R_LandMonsInfo = {10, gMagmaHideout_2F_3R_LandMons}; const struct WildPokemon gMirageTower_1F_LandMons[] = { {21, 21, SPECIES_SANDSHREW}, {21, 21, SPECIES_TRAPINCH}, {20, 20, SPECIES_SANDSHREW}, {20, 20, SPECIES_TRAPINCH}, {20, 20, SPECIES_SANDSHREW}, {20, 20, SPECIES_TRAPINCH}, {22, 22, SPECIES_SANDSHREW}, {22, 22, SPECIES_TRAPINCH}, {23, 23, SPECIES_SANDSHREW}, {23, 23, SPECIES_TRAPINCH}, {24, 24, SPECIES_SANDSHREW}, {24, 24, SPECIES_TRAPINCH}, }; const struct WildPokemonInfo gMirageTower_1F_LandMonsInfo = {10, gMirageTower_1F_LandMons}; const struct WildPokemon gMirageTower_2F_LandMons[] = { {21, 21, SPECIES_SANDSHREW}, {21, 21, SPECIES_TRAPINCH}, {20, 20, SPECIES_SANDSHREW}, {20, 20, SPECIES_TRAPINCH}, {20, 20, SPECIES_SANDSHREW}, {20, 20, SPECIES_TRAPINCH}, {22, 22, SPECIES_SANDSHREW}, {22, 22, SPECIES_TRAPINCH}, {23, 23, SPECIES_SANDSHREW}, {23, 23, SPECIES_TRAPINCH}, {24, 24, SPECIES_SANDSHREW}, {24, 24, SPECIES_TRAPINCH}, }; const struct WildPokemonInfo gMirageTower_2F_LandMonsInfo = {10, gMirageTower_2F_LandMons}; const struct WildPokemon gMirageTower_3F_LandMons[] = { {21, 21, SPECIES_SANDSHREW}, {21, 21, SPECIES_TRAPINCH}, {20, 20, SPECIES_SANDSHREW}, {20, 20, SPECIES_TRAPINCH}, {20, 20, SPECIES_SANDSHREW}, {20, 20, SPECIES_TRAPINCH}, {22, 22, SPECIES_SANDSHREW}, {22, 22, SPECIES_TRAPINCH}, {23, 23, SPECIES_SANDSHREW}, {23, 23, SPECIES_TRAPINCH}, {24, 24, SPECIES_SANDSHREW}, {24, 24, SPECIES_TRAPINCH}, }; const struct WildPokemonInfo gMirageTower_3F_LandMonsInfo = {10, gMirageTower_3F_LandMons}; const struct WildPokemon gMirageTower_4F_LandMons[] = { {21, 21, SPECIES_SANDSHREW}, {21, 21, SPECIES_TRAPINCH}, {20, 20, SPECIES_SANDSHREW}, {20, 20, SPECIES_TRAPINCH}, {20, 20, SPECIES_SANDSHREW}, {20, 20, SPECIES_TRAPINCH}, {22, 22, SPECIES_SANDSHREW}, {22, 22, SPECIES_TRAPINCH}, {23, 23, SPECIES_SANDSHREW}, {23, 23, SPECIES_TRAPINCH}, {24, 24, SPECIES_SANDSHREW}, {24, 24, SPECIES_TRAPINCH}, }; const struct WildPokemonInfo gMirageTower_4F_LandMonsInfo = {10, gMirageTower_4F_LandMons}; const struct WildPokemon gDesertUnderpass_LandMons[] = { {38, 38, SPECIES_DITTO}, {35, 35, SPECIES_WHISMUR}, {40, 40, SPECIES_DITTO}, {40, 40, SPECIES_LOUDRED}, {41, 41, SPECIES_DITTO}, {36, 36, SPECIES_WHISMUR}, {38, 38, SPECIES_LOUDRED}, {42, 42, SPECIES_DITTO}, {38, 38, SPECIES_WHISMUR}, {43, 43, SPECIES_DITTO}, {44, 44, SPECIES_LOUDRED}, {45, 45, SPECIES_DITTO}, }; const struct WildPokemonInfo gDesertUnderpass_LandMonsInfo = {10, gDesertUnderpass_LandMons}; const struct WildPokemon gArtisanCave_B1F_LandMons[] = { {40, 40, SPECIES_SMEARGLE}, {41, 41, SPECIES_SMEARGLE}, {42, 42, SPECIES_SMEARGLE}, {43, 43, SPECIES_SMEARGLE}, {44, 44, SPECIES_SMEARGLE}, {45, 45, SPECIES_SMEARGLE}, {46, 46, SPECIES_SMEARGLE}, {47, 47, SPECIES_SMEARGLE}, {48, 48, SPECIES_SMEARGLE}, {49, 49, SPECIES_SMEARGLE}, {50, 50, SPECIES_SMEARGLE}, {50, 50, SPECIES_SMEARGLE}, }; const struct WildPokemonInfo gArtisanCave_B1F_LandMonsInfo = {10, gArtisanCave_B1F_LandMons}; const struct WildPokemon gArtisanCave_1F_LandMons[] = { {40, 40, SPECIES_SMEARGLE}, {41, 41, SPECIES_SMEARGLE}, {42, 42, SPECIES_SMEARGLE}, {43, 43, SPECIES_SMEARGLE}, {44, 44, SPECIES_SMEARGLE}, {45, 45, SPECIES_SMEARGLE}, {46, 46, SPECIES_SMEARGLE}, {47, 47, SPECIES_SMEARGLE}, {48, 48, SPECIES_SMEARGLE}, {49, 49, SPECIES_SMEARGLE}, {50, 50, SPECIES_SMEARGLE}, {50, 50, SPECIES_SMEARGLE}, }; const struct WildPokemonInfo gArtisanCave_1F_LandMonsInfo = {10, gArtisanCave_1F_LandMons}; const struct WildPokemon gAlteringCave1_LandMons[] = { {10, 10, SPECIES_ZUBAT}, {12, 12, SPECIES_ZUBAT}, {8, 8, SPECIES_ZUBAT}, {14, 14, SPECIES_ZUBAT}, {10, 10, SPECIES_ZUBAT}, {12, 12, SPECIES_ZUBAT}, {16, 16, SPECIES_ZUBAT}, {6, 6, SPECIES_ZUBAT}, {8, 8, SPECIES_ZUBAT}, {14, 14, SPECIES_ZUBAT}, {8, 8, SPECIES_ZUBAT}, {14, 14, SPECIES_ZUBAT}, }; const struct WildPokemonInfo gAlteringCave1_LandMonsInfo = {7, gAlteringCave1_LandMons}; const struct WildPokemon gAlteringCave2_LandMons[] = { {7, 7, SPECIES_MAREEP}, {9, 9, SPECIES_MAREEP}, {5, 5, SPECIES_MAREEP}, {11, 11, SPECIES_MAREEP}, {7, 7, SPECIES_MAREEP}, {9, 9, SPECIES_MAREEP}, {13, 13, SPECIES_MAREEP}, {3, 3, SPECIES_MAREEP}, {5, 5, SPECIES_MAREEP}, {11, 11, SPECIES_MAREEP}, {5, 5, SPECIES_MAREEP}, {11, 11, SPECIES_MAREEP}, }; const struct WildPokemonInfo gAlteringCave2_LandMonsInfo = {7, gAlteringCave2_LandMons}; const struct WildPokemon gAlteringCave3_LandMons[] = { {23, 23, SPECIES_PINECO}, {25, 25, SPECIES_PINECO}, {22, 22, SPECIES_PINECO}, {27, 27, SPECIES_PINECO}, {23, 23, SPECIES_PINECO}, {25, 25, SPECIES_PINECO}, {29, 29, SPECIES_PINECO}, {19, 19, SPECIES_PINECO}, {21, 21, SPECIES_PINECO}, {27, 27, SPECIES_PINECO}, {21, 21, SPECIES_PINECO}, {27, 27, SPECIES_PINECO}, }; const struct WildPokemonInfo gAlteringCave3_LandMonsInfo = {7, gAlteringCave3_LandMons}; const struct WildPokemon gAlteringCave4_LandMons[] = { {16, 16, SPECIES_HOUNDOUR}, {18, 18, SPECIES_HOUNDOUR}, {14, 14, SPECIES_HOUNDOUR}, {20, 20, SPECIES_HOUNDOUR}, {16, 16, SPECIES_HOUNDOUR}, {18, 18, SPECIES_HOUNDOUR}, {22, 22, SPECIES_HOUNDOUR}, {12, 12, SPECIES_HOUNDOUR}, {14, 14, SPECIES_HOUNDOUR}, {20, 20, SPECIES_HOUNDOUR}, {14, 14, SPECIES_HOUNDOUR}, {20, 20, SPECIES_HOUNDOUR}, }; const struct WildPokemonInfo gAlteringCave4_LandMonsInfo = {7, gAlteringCave4_LandMons}; const struct WildPokemon gAlteringCave5_LandMons[] = { {10, 10, SPECIES_TEDDIURSA}, {12, 12, SPECIES_TEDDIURSA}, {8, 8, SPECIES_TEDDIURSA}, {14, 14, SPECIES_TEDDIURSA}, {10, 10, SPECIES_TEDDIURSA}, {12, 12, SPECIES_TEDDIURSA}, {16, 16, SPECIES_TEDDIURSA}, {6, 6, SPECIES_TEDDIURSA}, {8, 8, SPECIES_TEDDIURSA}, {14, 14, SPECIES_TEDDIURSA}, {8, 8, SPECIES_TEDDIURSA}, {14, 14, SPECIES_TEDDIURSA}, }; const struct WildPokemonInfo gAlteringCave5_LandMonsInfo = {7, gAlteringCave5_LandMons}; const struct WildPokemon gAlteringCave6_LandMons[] = { {22, 22, SPECIES_AIPOM}, {24, 24, SPECIES_AIPOM}, {20, 20, SPECIES_AIPOM}, {26, 26, SPECIES_AIPOM}, {22, 22, SPECIES_AIPOM}, {24, 24, SPECIES_AIPOM}, {28, 28, SPECIES_AIPOM}, {18, 18, SPECIES_AIPOM}, {20, 20, SPECIES_AIPOM}, {26, 26, SPECIES_AIPOM}, {20, 20, SPECIES_AIPOM}, {26, 26, SPECIES_AIPOM}, }; const struct WildPokemonInfo gAlteringCave6_LandMonsInfo = {7, gAlteringCave6_LandMons}; const struct WildPokemon gAlteringCave7_LandMons[] = { {22, 22, SPECIES_SHUCKLE}, {24, 24, SPECIES_SHUCKLE}, {20, 20, SPECIES_SHUCKLE}, {26, 26, SPECIES_SHUCKLE}, {22, 22, SPECIES_SHUCKLE}, {24, 24, SPECIES_SHUCKLE}, {28, 28, SPECIES_SHUCKLE}, {18, 18, SPECIES_SHUCKLE}, {20, 20, SPECIES_SHUCKLE}, {26, 26, SPECIES_SHUCKLE}, {20, 20, SPECIES_SHUCKLE}, {26, 26, SPECIES_SHUCKLE}, }; const struct WildPokemonInfo gAlteringCave7_LandMonsInfo = {7, gAlteringCave7_LandMons}; const struct WildPokemon gAlteringCave8_LandMons[] = { {22, 22, SPECIES_STANTLER}, {24, 24, SPECIES_STANTLER}, {20, 20, SPECIES_STANTLER}, {26, 26, SPECIES_STANTLER}, {22, 22, SPECIES_STANTLER}, {24, 24, SPECIES_STANTLER}, {28, 28, SPECIES_STANTLER}, {18, 18, SPECIES_STANTLER}, {20, 20, SPECIES_STANTLER}, {26, 26, SPECIES_STANTLER}, {20, 20, SPECIES_STANTLER}, {26, 26, SPECIES_STANTLER}, }; const struct WildPokemonInfo gAlteringCave8_LandMonsInfo = {7, gAlteringCave8_LandMons}; const struct WildPokemon gAlteringCave9_LandMons[] = { {22, 22, SPECIES_SMEARGLE}, {24, 24, SPECIES_SMEARGLE}, {20, 20, SPECIES_SMEARGLE}, {26, 26, SPECIES_SMEARGLE}, {22, 22, SPECIES_SMEARGLE}, {24, 24, SPECIES_SMEARGLE}, {28, 28, SPECIES_SMEARGLE}, {18, 18, SPECIES_SMEARGLE}, {20, 20, SPECIES_SMEARGLE}, {26, 26, SPECIES_SMEARGLE}, {20, 20, SPECIES_SMEARGLE}, {26, 26, SPECIES_SMEARGLE}, }; const struct WildPokemonInfo gAlteringCave9_LandMonsInfo = {7, gAlteringCave9_LandMons}; const struct WildPokemon gMeteorFalls_StevensCave_LandMons[] = { {33, 33, SPECIES_GOLBAT}, {35, 35, SPECIES_GOLBAT}, {33, 33, SPECIES_GOLBAT}, {35, 35, SPECIES_SOLROCK}, {33, 33, SPECIES_SOLROCK}, {37, 37, SPECIES_SOLROCK}, {35, 35, SPECIES_GOLBAT}, {39, 39, SPECIES_SOLROCK}, {38, 38, SPECIES_GOLBAT}, {40, 40, SPECIES_GOLBAT}, {38, 38, SPECIES_GOLBAT}, {40, 40, SPECIES_GOLBAT}, }; const struct WildPokemonInfo gMeteorFalls_StevensCave_LandMonsInfo = {10, gMeteorFalls_StevensCave_LandMons}; const struct WildPokemonHeader gWildMonHeaders[] = { { .mapGroup = MAP_GROUP(ROUTE101), .mapNum = MAP_NUM(ROUTE101), .landMonsInfo = &gRoute101_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ROUTE102), .mapNum = MAP_NUM(ROUTE102), .landMonsInfo = &gRoute102_LandMonsInfo, .waterMonsInfo = &gRoute102_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute102_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE103), .mapNum = MAP_NUM(ROUTE103), .landMonsInfo = &gRoute103_LandMonsInfo, .waterMonsInfo = &gRoute103_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute103_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE104), .mapNum = MAP_NUM(ROUTE104), .landMonsInfo = &gRoute104_LandMonsInfo, .waterMonsInfo = &gRoute104_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute104_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE105), .mapNum = MAP_NUM(ROUTE105), .landMonsInfo = NULL, .waterMonsInfo = &gRoute105_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute105_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE110), .mapNum = MAP_NUM(ROUTE110), .landMonsInfo = &gRoute110_LandMonsInfo, .waterMonsInfo = &gRoute110_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute110_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE111), .mapNum = MAP_NUM(ROUTE111), .landMonsInfo = &gRoute111_LandMonsInfo, .waterMonsInfo = &gRoute111_WaterMonsInfo, .rockSmashMonsInfo = &gRoute111_RockSmashMonsInfo, .fishingMonsInfo = &gRoute111_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE112), .mapNum = MAP_NUM(ROUTE112), .landMonsInfo = &gRoute112_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ROUTE113), .mapNum = MAP_NUM(ROUTE113), .landMonsInfo = &gRoute113_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ROUTE114), .mapNum = MAP_NUM(ROUTE114), .landMonsInfo = &gRoute114_LandMonsInfo, .waterMonsInfo = &gRoute114_WaterMonsInfo, .rockSmashMonsInfo = &gRoute114_RockSmashMonsInfo, .fishingMonsInfo = &gRoute114_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE116), .mapNum = MAP_NUM(ROUTE116), .landMonsInfo = &gRoute116_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ROUTE117), .mapNum = MAP_NUM(ROUTE117), .landMonsInfo = &gRoute117_LandMonsInfo, .waterMonsInfo = &gRoute117_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute117_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE118), .mapNum = MAP_NUM(ROUTE118), .landMonsInfo = &gRoute118_LandMonsInfo, .waterMonsInfo = &gRoute118_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute118_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE124), .mapNum = MAP_NUM(ROUTE124), .landMonsInfo = NULL, .waterMonsInfo = &gRoute124_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute124_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(PETALBURG_WOODS), .mapNum = MAP_NUM(PETALBURG_WOODS), .landMonsInfo = &gPetalburgWoods_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(RUSTURF_TUNNEL), .mapNum = MAP_NUM(RUSTURF_TUNNEL), .landMonsInfo = &gRusturfTunnel_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(GRANITE_CAVE_1F), .mapNum = MAP_NUM(GRANITE_CAVE_1F), .landMonsInfo = &gGraniteCave_1F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(GRANITE_CAVE_B1F), .mapNum = MAP_NUM(GRANITE_CAVE_B1F), .landMonsInfo = &gGraniteCave_B1F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MT_PYRE_1F), .mapNum = MAP_NUM(MT_PYRE_1F), .landMonsInfo = &gMtPyre_1F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(VICTORY_ROAD_1F), .mapNum = MAP_NUM(VICTORY_ROAD_1F), .landMonsInfo = &gVictoryRoad_1F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTH), .mapNum = MAP_NUM(SAFARI_ZONE_SOUTH), .landMonsInfo = &gSafariZone_South_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(UNDERWATER2), .mapNum = MAP_NUM(UNDERWATER2), .landMonsInfo = NULL, .waterMonsInfo = &gUnderwater2_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ABANDONED_SHIP_ROOMS_B1F), .mapNum = MAP_NUM(ABANDONED_SHIP_ROOMS_B1F), .landMonsInfo = NULL, .waterMonsInfo = &gAbandonedShip_Rooms_B1F_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gAbandonedShip_Rooms_B1F_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(GRANITE_CAVE_B2F), .mapNum = MAP_NUM(GRANITE_CAVE_B2F), .landMonsInfo = &gGraniteCave_B2F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = &gGraniteCave_B2F_RockSmashMonsInfo, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(FIERY_PATH), .mapNum = MAP_NUM(FIERY_PATH), .landMonsInfo = &gFieryPath_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(METEOR_FALLS_B1F_2R), .mapNum = MAP_NUM(METEOR_FALLS_B1F_2R), .landMonsInfo = &gMeteorFalls_B1F_2R_LandMonsInfo, .waterMonsInfo = &gMeteorFalls_B1F_2R_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gMeteorFalls_B1F_2R_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(JAGGED_PASS), .mapNum = MAP_NUM(JAGGED_PASS), .landMonsInfo = &gJaggedPass_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ROUTE106), .mapNum = MAP_NUM(ROUTE106), .landMonsInfo = NULL, .waterMonsInfo = &gRoute106_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute106_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE107), .mapNum = MAP_NUM(ROUTE107), .landMonsInfo = NULL, .waterMonsInfo = &gRoute107_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute107_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE108), .mapNum = MAP_NUM(ROUTE108), .landMonsInfo = NULL, .waterMonsInfo = &gRoute108_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute108_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE109), .mapNum = MAP_NUM(ROUTE109), .landMonsInfo = NULL, .waterMonsInfo = &gRoute109_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute109_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE115), .mapNum = MAP_NUM(ROUTE115), .landMonsInfo = &gRoute115_LandMonsInfo, .waterMonsInfo = &gRoute115_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute115_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(NEW_MAUVILLE_INSIDE), .mapNum = MAP_NUM(NEW_MAUVILLE_INSIDE), .landMonsInfo = &gNewMauville_Inside_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ROUTE119), .mapNum = MAP_NUM(ROUTE119), .landMonsInfo = &gRoute119_LandMonsInfo, .waterMonsInfo = &gRoute119_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute119_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE120), .mapNum = MAP_NUM(ROUTE120), .landMonsInfo = &gRoute120_LandMonsInfo, .waterMonsInfo = &gRoute120_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute120_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE121), .mapNum = MAP_NUM(ROUTE121), .landMonsInfo = &gRoute121_LandMonsInfo, .waterMonsInfo = &gRoute121_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute121_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE122), .mapNum = MAP_NUM(ROUTE122), .landMonsInfo = NULL, .waterMonsInfo = &gRoute122_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute122_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE123), .mapNum = MAP_NUM(ROUTE123), .landMonsInfo = &gRoute123_LandMonsInfo, .waterMonsInfo = &gRoute123_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute123_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(MT_PYRE_2F), .mapNum = MAP_NUM(MT_PYRE_2F), .landMonsInfo = &gMtPyre_2F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MT_PYRE_3F), .mapNum = MAP_NUM(MT_PYRE_3F), .landMonsInfo = &gMtPyre_3F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MT_PYRE_4F), .mapNum = MAP_NUM(MT_PYRE_4F), .landMonsInfo = &gMtPyre_4F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MT_PYRE_5F), .mapNum = MAP_NUM(MT_PYRE_5F), .landMonsInfo = &gMtPyre_5F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MT_PYRE_6F), .mapNum = MAP_NUM(MT_PYRE_6F), .landMonsInfo = &gMtPyre_6F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MT_PYRE_EXTERIOR), .mapNum = MAP_NUM(MT_PYRE_EXTERIOR), .landMonsInfo = &gMtPyre_Exterior_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MT_PYRE_SUMMIT), .mapNum = MAP_NUM(MT_PYRE_SUMMIT), .landMonsInfo = &gMtPyre_Summit_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(GRANITE_CAVE_STEVENS_ROOM), .mapNum = MAP_NUM(GRANITE_CAVE_STEVENS_ROOM), .landMonsInfo = &gGraniteCave_StevensRoom_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ROUTE125), .mapNum = MAP_NUM(ROUTE125), .landMonsInfo = NULL, .waterMonsInfo = &gRoute125_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute125_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE126), .mapNum = MAP_NUM(ROUTE126), .landMonsInfo = NULL, .waterMonsInfo = &gRoute126_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute126_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE127), .mapNum = MAP_NUM(ROUTE127), .landMonsInfo = NULL, .waterMonsInfo = &gRoute127_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute127_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE128), .mapNum = MAP_NUM(ROUTE128), .landMonsInfo = NULL, .waterMonsInfo = &gRoute128_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute128_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE129), .mapNum = MAP_NUM(ROUTE129), .landMonsInfo = NULL, .waterMonsInfo = &gRoute129_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute129_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE130), .mapNum = MAP_NUM(ROUTE130), .landMonsInfo = &gRoute130_LandMonsInfo, .waterMonsInfo = &gRoute130_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute130_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE131), .mapNum = MAP_NUM(ROUTE131), .landMonsInfo = NULL, .waterMonsInfo = &gRoute131_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute131_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE132), .mapNum = MAP_NUM(ROUTE132), .landMonsInfo = NULL, .waterMonsInfo = &gRoute132_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute132_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE133), .mapNum = MAP_NUM(ROUTE133), .landMonsInfo = NULL, .waterMonsInfo = &gRoute133_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute133_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ROUTE134), .mapNum = MAP_NUM(ROUTE134), .landMonsInfo = NULL, .waterMonsInfo = &gRoute134_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gRoute134_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS), .mapNum = MAP_NUM(ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS), .landMonsInfo = NULL, .waterMonsInfo = &gAbandonedShip_HiddenFloorCorridors_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gAbandonedShip_HiddenFloorCorridors_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM1), .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM1), .landMonsInfo = &gSeafloorCavern_Room1_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM2), .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM2), .landMonsInfo = &gSeafloorCavern_Room2_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM3), .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM3), .landMonsInfo = &gSeafloorCavern_Room3_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM4), .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM4), .landMonsInfo = &gSeafloorCavern_Room4_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM5), .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM5), .landMonsInfo = &gSeafloorCavern_Room5_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM6), .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM6), .landMonsInfo = &gSeafloorCavern_Room6_LandMonsInfo, .waterMonsInfo = &gSeafloorCavern_Room6_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gSeafloorCavern_Room6_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM7), .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM7), .landMonsInfo = &gSeafloorCavern_Room7_LandMonsInfo, .waterMonsInfo = &gSeafloorCavern_Room7_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gSeafloorCavern_Room7_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM8), .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM8), .landMonsInfo = &gSeafloorCavern_Room8_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ENTRANCE), .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ENTRANCE), .landMonsInfo = NULL, .waterMonsInfo = &gSeafloorCavern_Entrance_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gSeafloorCavern_Entrance_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_ENTRANCE), .mapNum = MAP_NUM(CAVE_OF_ORIGIN_ENTRANCE), .landMonsInfo = &gCaveOfOrigin_Entrance_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_1F), .mapNum = MAP_NUM(CAVE_OF_ORIGIN_1F), .landMonsInfo = &gCaveOfOrigin_1F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1), .mapNum = MAP_NUM(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1), .landMonsInfo = &gCaveOfOrigin_UnusedRubySapphireMap1_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2), .mapNum = MAP_NUM(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2), .landMonsInfo = &gCaveOfOrigin_UnusedRubySapphireMap2_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3), .mapNum = MAP_NUM(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3), .landMonsInfo = &gCaveOfOrigin_UnusedRubySapphireMap3_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(NEW_MAUVILLE_ENTRANCE), .mapNum = MAP_NUM(NEW_MAUVILLE_ENTRANCE), .landMonsInfo = &gNewMauville_Entrance_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTHWEST), .mapNum = MAP_NUM(SAFARI_ZONE_SOUTHWEST), .landMonsInfo = &gSafariZone_Southwest_LandMonsInfo, .waterMonsInfo = &gSafariZone_Southwest_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gSafariZone_Southwest_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTH), .mapNum = MAP_NUM(SAFARI_ZONE_NORTH), .landMonsInfo = &gSafariZone_North_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = &gSafariZone_North_RockSmashMonsInfo, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTHWEST), .mapNum = MAP_NUM(SAFARI_ZONE_NORTHWEST), .landMonsInfo = &gSafariZone_Northwest_LandMonsInfo, .waterMonsInfo = &gSafariZone_Northwest_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gSafariZone_Northwest_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(VICTORY_ROAD_B1F), .mapNum = MAP_NUM(VICTORY_ROAD_B1F), .landMonsInfo = &gVictoryRoad_B1F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = &gVictoryRoad_B1F_RockSmashMonsInfo, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(VICTORY_ROAD_B2F), .mapNum = MAP_NUM(VICTORY_ROAD_B2F), .landMonsInfo = &gVictoryRoad_B2F_LandMonsInfo, .waterMonsInfo = &gVictoryRoad_B2F_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gVictoryRoad_B2F_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(METEOR_FALLS_1F_1R), .mapNum = MAP_NUM(METEOR_FALLS_1F_1R), .landMonsInfo = &gMeteorFalls_1F_1R_LandMonsInfo, .waterMonsInfo = &gMeteorFalls_1F_1R_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gMeteorFalls_1F_1R_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(METEOR_FALLS_1F_2R), .mapNum = MAP_NUM(METEOR_FALLS_1F_2R), .landMonsInfo = &gMeteorFalls_1F_2R_LandMonsInfo, .waterMonsInfo = &gMeteorFalls_1F_2R_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gMeteorFalls_1F_2R_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(METEOR_FALLS_B1F_1R), .mapNum = MAP_NUM(METEOR_FALLS_B1F_1R), .landMonsInfo = &gMeteorFalls_B1F_1R_LandMonsInfo, .waterMonsInfo = &gMeteorFalls_B1F_1R_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gMeteorFalls_B1F_1R_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM), .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM), .landMonsInfo = &gShoalCave_LowTideStairsRoom_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_LOWER_ROOM), .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_LOWER_ROOM), .landMonsInfo = &gShoalCave_LowTideLowerRoom_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_INNER_ROOM), .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_INNER_ROOM), .landMonsInfo = &gShoalCave_LowTideInnerRoom_LandMonsInfo, .waterMonsInfo = &gShoalCave_LowTideInnerRoom_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gShoalCave_LowTideInnerRoom_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM), .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM), .landMonsInfo = &gShoalCave_LowTideEntranceRoom_LandMonsInfo, .waterMonsInfo = &gShoalCave_LowTideEntranceRoom_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gShoalCave_LowTideEntranceRoom_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(LILYCOVE_CITY), .mapNum = MAP_NUM(LILYCOVE_CITY), .landMonsInfo = NULL, .waterMonsInfo = &gLilycoveCity_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gLilycoveCity_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(DEWFORD_TOWN), .mapNum = MAP_NUM(DEWFORD_TOWN), .landMonsInfo = NULL, .waterMonsInfo = &gDewfordTown_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gDewfordTown_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(SLATEPORT_CITY), .mapNum = MAP_NUM(SLATEPORT_CITY), .landMonsInfo = NULL, .waterMonsInfo = &gSlateportCity_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gSlateportCity_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(MOSSDEEP_CITY), .mapNum = MAP_NUM(MOSSDEEP_CITY), .landMonsInfo = NULL, .waterMonsInfo = &gMossdeepCity_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gMossdeepCity_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(PACIFIDLOG_TOWN), .mapNum = MAP_NUM(PACIFIDLOG_TOWN), .landMonsInfo = NULL, .waterMonsInfo = &gPacifidlogTown_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gPacifidlogTown_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(EVER_GRANDE_CITY), .mapNum = MAP_NUM(EVER_GRANDE_CITY), .landMonsInfo = NULL, .waterMonsInfo = &gEverGrandeCity_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gEverGrandeCity_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(PETALBURG_CITY), .mapNum = MAP_NUM(PETALBURG_CITY), .landMonsInfo = NULL, .waterMonsInfo = &gPetalburgCity_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gPetalburgCity_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(UNDERWATER1), .mapNum = MAP_NUM(UNDERWATER1), .landMonsInfo = NULL, .waterMonsInfo = &gUnderwater1_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_ICE_ROOM), .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_ICE_ROOM), .landMonsInfo = &gShoalCave_LowTideIceRoom_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SKY_PILLAR_1F), .mapNum = MAP_NUM(SKY_PILLAR_1F), .landMonsInfo = &gSkyPillar_1F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SOOTOPOLIS_CITY), .mapNum = MAP_NUM(SOOTOPOLIS_CITY), .landMonsInfo = NULL, .waterMonsInfo = &gSootopolisCity_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gSootopolisCity_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(SKY_PILLAR_3F), .mapNum = MAP_NUM(SKY_PILLAR_3F), .landMonsInfo = &gSkyPillar_3F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SKY_PILLAR_5F), .mapNum = MAP_NUM(SKY_PILLAR_5F), .landMonsInfo = &gSkyPillar_5F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTHEAST), .mapNum = MAP_NUM(SAFARI_ZONE_SOUTHEAST), .landMonsInfo = &gSafariZone_Southeast_LandMonsInfo, .waterMonsInfo = &gSafariZone_Southeast_WaterMonsInfo, .rockSmashMonsInfo = NULL, .fishingMonsInfo = &gSafariZone_Southeast_FishingMonsInfo, }, { .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTHEAST), .mapNum = MAP_NUM(SAFARI_ZONE_NORTHEAST), .landMonsInfo = &gSafariZone_Northeast_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = &gSafariZone_Northeast_RockSmashMonsInfo, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_1F), .mapNum = MAP_NUM(MAGMA_HIDEOUT_1F), .landMonsInfo = &gMagmaHideout_1F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_2F_1R), .mapNum = MAP_NUM(MAGMA_HIDEOUT_2F_1R), .landMonsInfo = &gMagmaHideout_2F_1R_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_2F_2R), .mapNum = MAP_NUM(MAGMA_HIDEOUT_2F_2R), .landMonsInfo = &gMagmaHideout_2F_2R_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_3F_1R), .mapNum = MAP_NUM(MAGMA_HIDEOUT_3F_1R), .landMonsInfo = &gMagmaHideout_3F_1R_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_3F_2R), .mapNum = MAP_NUM(MAGMA_HIDEOUT_3F_2R), .landMonsInfo = &gMagmaHideout_3F_2R_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_4F), .mapNum = MAP_NUM(MAGMA_HIDEOUT_4F), .landMonsInfo = &gMagmaHideout_4F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_3F_3R), .mapNum = MAP_NUM(MAGMA_HIDEOUT_3F_3R), .landMonsInfo = &gMagmaHideout_3F_3R_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_2F_3R), .mapNum = MAP_NUM(MAGMA_HIDEOUT_2F_3R), .landMonsInfo = &gMagmaHideout_2F_3R_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MIRAGE_TOWER_1F), .mapNum = MAP_NUM(MIRAGE_TOWER_1F), .landMonsInfo = &gMirageTower_1F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MIRAGE_TOWER_2F), .mapNum = MAP_NUM(MIRAGE_TOWER_2F), .landMonsInfo = &gMirageTower_2F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MIRAGE_TOWER_3F), .mapNum = MAP_NUM(MIRAGE_TOWER_3F), .landMonsInfo = &gMirageTower_3F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(MIRAGE_TOWER_4F), .mapNum = MAP_NUM(MIRAGE_TOWER_4F), .landMonsInfo = &gMirageTower_4F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(DESERT_UNDERPASS), .mapNum = MAP_NUM(DESERT_UNDERPASS), .landMonsInfo = &gDesertUnderpass_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ARTISAN_CAVE_B1F), .mapNum = MAP_NUM(ARTISAN_CAVE_B1F), .landMonsInfo = &gArtisanCave_B1F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ARTISAN_CAVE_1F), .mapNum = MAP_NUM(ARTISAN_CAVE_1F), .landMonsInfo = &gArtisanCave_1F_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ALTERING_CAVE), .mapNum = MAP_NUM(ALTERING_CAVE), .landMonsInfo = &gAlteringCave1_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ALTERING_CAVE), .mapNum = MAP_NUM(ALTERING_CAVE), .landMonsInfo = &gAlteringCave2_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ALTERING_CAVE), .mapNum = MAP_NUM(ALTERING_CAVE), .landMonsInfo = &gAlteringCave3_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ALTERING_CAVE), .mapNum = MAP_NUM(ALTERING_CAVE), .landMonsInfo = &gAlteringCave4_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ALTERING_CAVE), .mapNum = MAP_NUM(ALTERING_CAVE), .landMonsInfo = &gAlteringCave5_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ALTERING_CAVE), .mapNum = MAP_NUM(ALTERING_CAVE), .landMonsInfo = &gAlteringCave6_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ALTERING_CAVE), .mapNum = MAP_NUM(ALTERING_CAVE), .landMonsInfo = &gAlteringCave7_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ALTERING_CAVE), .mapNum = MAP_NUM(ALTERING_CAVE), .landMonsInfo = &gAlteringCave8_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(ALTERING_CAVE), .mapNum = MAP_NUM(ALTERING_CAVE), .landMonsInfo = &gAlteringCave9_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(METEOR_FALLS_STEVENS_CAVE), .mapNum = MAP_NUM(METEOR_FALLS_STEVENS_CAVE), .landMonsInfo = &gMeteorFalls_StevensCave_LandMonsInfo, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = MAP_GROUP(UNDEFINED), .mapNum = MAP_NUM(UNDEFINED), .landMonsInfo = NULL, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, }; const struct WildPokemon gBattlePyramidPlaceholders_1[] = { {5, 5, SPECIES_BULBASAUR}, {5, 5, SPECIES_BULBASAUR}, {5, 5, SPECIES_BULBASAUR}, {5, 5, SPECIES_BULBASAUR}, {5, 5, SPECIES_IVYSAUR}, {5, 5, SPECIES_IVYSAUR}, {5, 5, SPECIES_VENUSAUR}, {5, 5, SPECIES_VENUSAUR}, {5, 5, SPECIES_VENUSAUR}, {5, 5, SPECIES_CHARMANDER}, {5, 5, SPECIES_VENUSAUR}, {5, 5, SPECIES_CHARMANDER}, }; const struct WildPokemonInfo gBattlePyramidPlaceholders_1Info = {4, gBattlePyramidPlaceholders_1}; const struct WildPokemon gBattlePyramidPlaceholders_2[] = { {5, 5, SPECIES_IVYSAUR}, {5, 5, SPECIES_IVYSAUR}, {5, 5, SPECIES_IVYSAUR}, {5, 5, SPECIES_IVYSAUR}, {5, 5, SPECIES_VENUSAUR}, {5, 5, SPECIES_VENUSAUR}, {5, 5, SPECIES_CHARMANDER}, {5, 5, SPECIES_CHARMANDER}, {5, 5, SPECIES_CHARMANDER}, {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_CHARMANDER}, }; const struct WildPokemonInfo gBattlePyramidPlaceholders_2Info = {4, gBattlePyramidPlaceholders_2}; const struct WildPokemon gBattlePyramidPlaceholders_3[] = { {5, 5, SPECIES_VENUSAUR}, {5, 5, SPECIES_VENUSAUR}, {5, 5, SPECIES_VENUSAUR}, {5, 5, SPECIES_VENUSAUR}, {5, 5, SPECIES_CHARMANDER}, {5, 5, SPECIES_CHARMANDER}, {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_CHARIZARD}, {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_CHARIZARD}, }; const struct WildPokemonInfo gBattlePyramidPlaceholders_3Info = {4, gBattlePyramidPlaceholders_3}; const struct WildPokemon gBattlePyramidPlaceholders_4[] = { {5, 5, SPECIES_CHARMANDER}, {5, 5, SPECIES_CHARMANDER}, {5, 5, SPECIES_CHARMANDER}, {5, 5, SPECIES_CHARMANDER}, {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_CHARIZARD}, {5, 5, SPECIES_CHARIZARD}, {5, 5, SPECIES_CHARIZARD}, {5, 5, SPECIES_SQUIRTLE}, {5, 5, SPECIES_CHARIZARD}, {5, 5, SPECIES_SQUIRTLE}, }; const struct WildPokemonInfo gBattlePyramidPlaceholders_4Info = {4, gBattlePyramidPlaceholders_4}; const struct WildPokemon gBattlePyramidPlaceholders_5[] = { {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_CHARIZARD}, {5, 5, SPECIES_CHARIZARD}, {5, 5, SPECIES_SQUIRTLE}, {5, 5, SPECIES_SQUIRTLE}, {5, 5, SPECIES_SQUIRTLE}, {5, 5, SPECIES_WARTORTLE}, {5, 5, SPECIES_SQUIRTLE}, {5, 5, SPECIES_WARTORTLE}, }; const struct WildPokemonInfo gBattlePyramidPlaceholders_5Info = {4, gBattlePyramidPlaceholders_5}; const struct WildPokemon gBattlePyramidPlaceholders_6[] = { {5, 5, SPECIES_CHARIZARD}, {5, 5, SPECIES_CHARIZARD}, {5, 5, SPECIES_CHARIZARD}, {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_SQUIRTLE}, {5, 5, SPECIES_SQUIRTLE}, {5, 5, SPECIES_WARTORTLE}, {5, 5, SPECIES_WARTORTLE}, {5, 5, SPECIES_WARTORTLE}, {5, 5, SPECIES_WARTORTLE}, {5, 5, SPECIES_WARTORTLE}, {5, 5, SPECIES_WARTORTLE}, }; const struct WildPokemonInfo gBattlePyramidPlaceholders_6Info = {4, gBattlePyramidPlaceholders_6}; const struct WildPokemon gBattlePyramidPlaceholders_7[] = { {5, 5, SPECIES_WARTORTLE}, {5, 5, SPECIES_WARTORTLE}, {5, 5, SPECIES_SQUIRTLE}, {5, 5, SPECIES_SQUIRTLE}, {5, 5, SPECIES_SQUIRTLE}, {5, 5, SPECIES_CHARIZARD}, {5, 5, SPECIES_CHARIZARD}, {5, 5, SPECIES_CHARIZARD}, {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_CHARMELEON}, {5, 5, SPECIES_CHARMELEON}, }; const struct WildPokemonInfo gBattlePyramidPlaceholders_7Info = {8, gBattlePyramidPlaceholders_7}; const struct WildPokemonHeader gBattlePyramidWildMonHeaders[] = { { .mapGroup = 0, .mapNum = 1, .landMonsInfo = &gBattlePyramidPlaceholders_1Info, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = 0, .mapNum = 2, .landMonsInfo = &gBattlePyramidPlaceholders_2Info, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = 0, .mapNum = 3, .landMonsInfo = &gBattlePyramidPlaceholders_3Info, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = 0, .mapNum = 4, .landMonsInfo = &gBattlePyramidPlaceholders_4Info, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = 0, .mapNum = 5, .landMonsInfo = &gBattlePyramidPlaceholders_5Info, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = 0, .mapNum = 6, .landMonsInfo = &gBattlePyramidPlaceholders_6Info, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = 0, .mapNum = 7, .landMonsInfo = &gBattlePyramidPlaceholders_7Info, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = 255, .mapNum = 255, .landMonsInfo = NULL, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, }; const struct WildPokemon gBattlePikeMons_1[] = { {5, 5, SPECIES_SEVIPER}, {5, 5, SPECIES_MILOTIC}, {5, 5, SPECIES_DUSCLOPS}, {5, 5, SPECIES_DUSCLOPS}, {5, 5, SPECIES_DUSCLOPS}, {5, 5, SPECIES_DUSCLOPS}, {5, 5, SPECIES_SEVIPER}, {5, 5, SPECIES_MILOTIC}, {5, 5, SPECIES_DUSCLOPS}, {5, 5, SPECIES_DUSCLOPS}, {5, 5, SPECIES_SEVIPER}, {5, 5, SPECIES_MILOTIC}, }; const struct WildPokemonInfo gBattlePikeMonsInfo_1 = {10, gBattlePikeMons_1}; const struct WildPokemon gBattlePikeMons_2[] = { {5, 5, SPECIES_SEVIPER}, {5, 5, SPECIES_MILOTIC}, {5, 5, SPECIES_ELECTRODE}, {5, 5, SPECIES_ELECTRODE}, {5, 5, SPECIES_ELECTRODE}, {5, 5, SPECIES_ELECTRODE}, {5, 5, SPECIES_SEVIPER}, {5, 5, SPECIES_MILOTIC}, {5, 5, SPECIES_ELECTRODE}, {5, 5, SPECIES_ELECTRODE}, {5, 5, SPECIES_SEVIPER}, {5, 5, SPECIES_MILOTIC}, }; const struct WildPokemonInfo gBattlePikeMonsInfo_2 = {10, gBattlePikeMons_2}; const struct WildPokemon gBattlePikeMons_3[] = { {5, 5, SPECIES_SEVIPER}, {5, 5, SPECIES_MILOTIC}, {5, 5, SPECIES_BRELOOM}, {5, 5, SPECIES_BRELOOM}, {5, 5, SPECIES_BRELOOM}, {5, 5, SPECIES_BRELOOM}, {5, 5, SPECIES_SEVIPER}, {5, 5, SPECIES_MILOTIC}, {5, 5, SPECIES_BRELOOM}, {5, 5, SPECIES_BRELOOM}, {5, 5, SPECIES_SEVIPER}, {5, 5, SPECIES_MILOTIC}, }; const struct WildPokemonInfo gBattlePikeMonsInfo_3 = {10, gBattlePikeMons_3}; const struct WildPokemon gBattlePikeMons_4[] = { {5, 5, SPECIES_SEVIPER}, {5, 5, SPECIES_MILOTIC}, {5, 5, SPECIES_WOBBUFFET}, {5, 5, SPECIES_WOBBUFFET}, {5, 5, SPECIES_WOBBUFFET}, {5, 5, SPECIES_WOBBUFFET}, {5, 5, SPECIES_SEVIPER}, {5, 5, SPECIES_MILOTIC}, {5, 5, SPECIES_WOBBUFFET}, {5, 5, SPECIES_WOBBUFFET}, {5, 5, SPECIES_SEVIPER}, {5, 5, SPECIES_MILOTIC}, }; const struct WildPokemonInfo gBattlePikeMonsInfo_4 = {10, gBattlePikeMons_4}; const struct WildPokemonHeader gBattlePikeWildMonHeaders[] = { { .mapGroup = 0, .mapNum = 1, .landMonsInfo = &gBattlePikeMonsInfo_1, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = 0, .mapNum = 2, .landMonsInfo = &gBattlePikeMonsInfo_2, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = 0, .mapNum = 3, .landMonsInfo = &gBattlePikeMonsInfo_3, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = 0, .mapNum = 4, .landMonsInfo = &gBattlePikeMonsInfo_4, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, { .mapGroup = 255, .mapNum = 255, .landMonsInfo = NULL, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, .fishingMonsInfo = NULL, }, }; const struct WildPokemon gWildFeebasRoute119Data = {20, 25, SPECIES_FEEBAS}; const u16 gRoute119WaterTileData[] = { 0, 0x2D, 0, 0x2E, 0x5B, 0x83, 0x5C, 0x8B, 0x12A, }; // code void DisableWildEncounters(bool8 disabled) { sWildEncountersDisabled = disabled; } static u16 GetRoute119WaterTileNum(s16 x, s16 y, u8 section) { u16 xCur; u16 yCur; u16 yMin = gRoute119WaterTileData[section * 3 + 0]; u16 yMax = gRoute119WaterTileData[section * 3 + 1]; u16 tileNum = gRoute119WaterTileData[section * 3 + 2]; for (yCur = yMin; yCur <= yMax; yCur++) { for (xCur = 0; xCur < gMapHeader.mapLayout->width; xCur++) { u8 tileBehaviorId = MapGridGetMetatileBehaviorAt(xCur + 7, yCur + 7); if (MetatileBehavior_IsSurfableAndNotWaterfall(tileBehaviorId) == TRUE) { tileNum++; if (x == xCur && y == yCur) return tileNum; } } } return tileNum + 1; } static bool8 CheckFeebas(void) { u8 i; u16 feebasSpots[NUM_FEEBAS_SPOTS]; s16 x; s16 y; u8 route119Section = 0; u16 waterTileNum; if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE119) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE119)) { GetXYCoordsOneStepInFrontOfPlayer(&x, &y); x -= 7; y -= 7; #ifdef NONMATCHING if (y >= gRoute119WaterTileData[3 * 1 + 0] && y <= gRoute119WaterTileData[3 * 1 + 1]) route119Section = 1; if (y >= gRoute119WaterTileData[3 * 2 + 0] && y <= gRoute119WaterTileData[3 * 2 + 1]) route119Section = 2; #else { register const u16 *arr asm("r0"); if (y >= (arr = gRoute119WaterTileData)[3 * 1 + 0] && y <= arr[3 * 1 + 1]) route119Section = 1; if (y >= arr[3 * 2 + 0] && y <= arr[3 * 2 + 1]) route119Section = 2; } #endif if (Random() % 100 > 49) // 50% chance of encountering Feebas return FALSE; FeebasSeedRng(gSaveBlock1Ptr->easyChatPairs[0].unk2); for (i = 0; i != NUM_FEEBAS_SPOTS;) { feebasSpots[i] = FeebasRandom() % 447; if (feebasSpots[i] == 0) feebasSpots[i] = 447; if (feebasSpots[i] < 1 || feebasSpots[i] >= 4) i++; } waterTileNum = GetRoute119WaterTileNum(x, y, route119Section); for (i = 0; i < NUM_FEEBAS_SPOTS; i++) { if (waterTileNum == feebasSpots[i]) return TRUE; } } return FALSE; } // The number 1103515245 comes from the example implementation of rand and srand // in the ISO C standard. static u16 FeebasRandom(void) { sFeebasRngValue = (1103515245 * sFeebasRngValue) + 12345; return sFeebasRngValue >> 16; } static void FeebasSeedRng(u16 seed) { sFeebasRngValue = seed; } static u8 ChooseWildMonIndex_Land(void) { u8 rand = Random() % 100; if (rand < 20) // 20% chance return 0; else if (rand >= 20 && rand < 40) // 20% chance return 1; else if (rand >= 40 && rand < 50) // 10% chance return 2; else if (rand >= 50 && rand < 60) // 10% chance return 3; else if (rand >= 60 && rand < 70) // 10% chance return 4; else if (rand >= 70 && rand < 80) // 10% chance return 5; else if (rand >= 80 && rand < 85) // 5% chance return 6; else if (rand >= 85 && rand < 90) // 5% chance return 7; else if (rand >= 90 && rand < 94) // 4% chance return 8; else if (rand >= 94 && rand < 98) // 4% chance return 9; else if (rand == 98) // 1% chance return 10; else // 1% chance return 11; } static u8 ChooseWildMonIndex_WaterRock(void) { u8 rand = Random() % 100; if (rand < 60) // 60% chance return 0; else if (rand >= 60 && rand < 90) // 30% chance return 1; else if (rand >= 90 && rand < 95) // 5% chance return 2; else if (rand >= 95 && rand < 99) // 4% chance return 3; else // 1% chance return 4; } enum { OLD_ROD, GOOD_ROD, SUPER_ROD }; static u8 ChooseWildMonIndex_Fishing(u8 rod) { u8 wildMonIndex = 0; u8 rand = Random() % 100; switch (rod) { case OLD_ROD: if (rand < 70) // 70% chance wildMonIndex = 0; else // 30% chance wildMonIndex = 1; break; case GOOD_ROD: if (rand < 60) // 60% chance wildMonIndex = 2; if (rand >= 60 && rand < 80) // 20% chance wildMonIndex = 3; if (rand >= 80 && rand < 100) // 20% chance wildMonIndex = 4; break; case SUPER_ROD: if (rand < 40) // 40% chance wildMonIndex = 5; if (rand >= 40 && rand < 80) // 40% chance wildMonIndex = 6; if (rand >= 80 && rand < 95) // 15% chance wildMonIndex = 7; if (rand >= 95 && rand < 99) // 4% chance wildMonIndex = 8; if (rand == 99) // 1% chance wildMonIndex = 9; break; } return wildMonIndex; } static u8 ChooseWildMonLevel(const struct WildPokemon *wildPokemon) { u8 min; u8 max; u8 range; u8 rand; // Make sure minimum level is less than maximum level if (wildPokemon->maxLevel >= wildPokemon->minLevel) { min = wildPokemon->minLevel; max = wildPokemon->maxLevel; } else { min = wildPokemon->maxLevel; max = wildPokemon->minLevel; } range = max - min + 1; rand = Random() % range; // check ability for max level mon if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3)) { u8 ability = GetMonAbility(&gPlayerParty[0]); if (ability == ABILITY_HUSTLE || ability == ABILITY_VITAL_SPIRIT || ability == ABILITY_PRESSURE) { if (Random() % 2 == 0) return max; if (rand != 0) rand--; } } return min + rand; } static u16 GetCurrentMapWildMonHeaderId(void) { u16 i; for (i = 0; ; i++) { const struct WildPokemonHeader *wildHeader = &gWildMonHeaders[i]; if (wildHeader->mapGroup == 0xFF) break; if (gWildMonHeaders[i].mapGroup == gSaveBlock1Ptr->location.mapGroup && gWildMonHeaders[i].mapNum == gSaveBlock1Ptr->location.mapNum) { if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ALTERING_CAVE) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ALTERING_CAVE)) { u16 alteringCaveId = VarGet(VAR_ALTERING_CAVE_WILD_SET); if (alteringCaveId > 8) alteringCaveId = 0; i += alteringCaveId; } return i; } } return -1; } static u8 PickWildMonNature(void) { u8 i; u8 j; struct Pokeblock *safariPokeblock; u8 natures[25]; if (GetSafariZoneFlag() == TRUE && Random() % 100 < 80) { safariPokeblock = SafariZoneGetActivePokeblock(); if (safariPokeblock != NULL) { for (i = 0; i < 25; i++) natures[i] = i; for (i = 0; i < 24; i++) { for (j = i + 1; j < 25; j++) { if (Random() & 1) { u8 temp = natures[i]; natures[i] = natures[j]; natures[j] = temp; } } } for (i = 0; i < 25; i++) { if (PokeblockGetGain(natures[i], safariPokeblock) > 0) return natures[i]; } } } // check synchronize for a pokemon with the same ability if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3) && GetMonAbility(&gPlayerParty[0]) == ABILITY_SYNCHRONIZE && Random() % 2 == 0) { return GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY) % 25; } // random nature return Random() % 25; } static void CreateWildMon(u16 species, u8 level) { bool32 checkCuteCharm; ZeroEnemyPartyMons(); checkCuteCharm = TRUE; switch (gBaseStats[species].genderRatio) { case MON_MALE: case MON_FEMALE: case MON_GENDERLESS: checkCuteCharm = FALSE; break; } if (checkCuteCharm && !GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3) && GetMonAbility(&gPlayerParty[0]) == ABILITY_CUTE_CHARM && Random() % 3 != 0) { u16 leadingMonSpecies = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES); u32 leadingMonPersonality = GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY); u8 gender = GetGenderFromSpeciesAndPersonality(leadingMonSpecies, leadingMonPersonality); // misses mon is genderless check, although no genderless mon can have cute charm as ability if (gender == MON_FEMALE) gender = MON_MALE; else gender = MON_FEMALE; CreateMonWithGenderNatureLetter(&gEnemyParty[0], species, level, 32, gender, PickWildMonNature(), 0); return; } CreateMonWithNature(&gEnemyParty[0], species, level, 32, PickWildMonNature()); } enum { WILD_AREA_LAND, WILD_AREA_WATER, WILD_AREA_ROCKS, WILD_AREA_FISHING, }; #define WILD_CHECK_REPEL 0x1 #define WILD_CHECK_KEEN_EYE 0x2 static bool8 TryGenerateWildMon(const struct WildPokemonInfo *wildMonInfo, u8 area, u8 flags) { u8 wildMonIndex = 0; u8 level; switch (area) { case WILD_AREA_LAND: if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_STEEL, ABILITY_MAGNET_PULL, &wildMonIndex)) break; if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex)) break; wildMonIndex = ChooseWildMonIndex_Land(); break; case WILD_AREA_WATER: if (TryGetAbilityInfluencedWildMonIndex(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex)) break; wildMonIndex = ChooseWildMonIndex_WaterRock(); break; case WILD_AREA_ROCKS: wildMonIndex = ChooseWildMonIndex_WaterRock(); break; } level = ChooseWildMonLevel(&wildMonInfo->wildPokemon[wildMonIndex]); if (flags & WILD_CHECK_REPEL && !IsWildLevelAllowedByRepel(level)) return FALSE; if (gMapHeader.mapLayoutId != 0x166 && flags & WILD_CHECK_KEEN_EYE && !IsAbilityAllowingEncounter(level)) return FALSE; CreateWildMon(wildMonInfo->wildPokemon[wildMonIndex].species, level); return TRUE; } static u16 GenerateFishingWildMon(const struct WildPokemonInfo *wildMonInfo, u8 rod) { u8 wildMonIndex = ChooseWildMonIndex_Fishing(rod); u8 level = ChooseWildMonLevel(&wildMonInfo->wildPokemon[wildMonIndex]); CreateWildMon(wildMonInfo->wildPokemon[wildMonIndex].species, level); return wildMonInfo->wildPokemon[wildMonIndex].species; } static bool8 SetUpMassOutbreakEncounter(u8 flags) { u16 i; if (flags & WILD_CHECK_REPEL && !IsWildLevelAllowedByRepel(gSaveBlock1Ptr->outbreakPokemonLevel)) return FALSE; CreateWildMon(gSaveBlock1Ptr->outbreakPokemonSpecies, gSaveBlock1Ptr->outbreakPokemonLevel); for (i = 0; i < 4; i++) SetMonMoveSlot(&gEnemyParty[0], gSaveBlock1Ptr->outbreakPokemonMoves[i], i); return TRUE; } static bool8 DoMassOutbreakEncounterTest(void) { if (gSaveBlock1Ptr->outbreakPokemonSpecies != 0 && gSaveBlock1Ptr->location.mapNum == gSaveBlock1Ptr->outbreakLocationMapNum && gSaveBlock1Ptr->location.mapGroup == gSaveBlock1Ptr->outbreakLocationMapGroup) { if (Random() % 100 < gSaveBlock1Ptr->outbreakPokemonProbability) return TRUE; } return FALSE; } static bool8 DoWildEncounterRateDiceRoll(u16 encounterRate) { if (Random() % 2880 < encounterRate) return TRUE; else return FALSE; } static bool8 DoWildEncounterRateTest(u32 encounterRate, bool8 ignoreAbility) { encounterRate *= 16; if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) encounterRate = encounterRate * 80 / 100; ApplyFluteEncounterRateMod(&encounterRate); ApplyCleanseTagEncounterRateMod(&encounterRate); if (!ignoreAbility && !GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3)) { u32 ability = GetMonAbility(&gPlayerParty[0]); if (ability == ABILITY_STENCH && gMapHeader.mapLayoutId == 0x169) encounterRate = encounterRate * 3 / 4; else if (ability == ABILITY_STENCH) encounterRate /= 2; else if (ability == ABILITY_ILLUMINATE) encounterRate *= 2; else if (ability == ABILITY_WHITE_SMOKE) encounterRate /= 2; else if (ability == ABILITY_ARENA_TRAP) encounterRate *= 2; else if (ability == ABILITY_SAND_VEIL && gSaveBlock1Ptr->weather == 8) encounterRate /= 2; } if (encounterRate > 2880) encounterRate = 2880; return DoWildEncounterRateDiceRoll(encounterRate); } static bool8 DoGlobalWildEncounterDiceRoll(void) { if (Random() % 100 >= 60) return FALSE; else return TRUE; } static bool8 AreLegendariesInSootopolisPreventingEncounters(void) { if (gSaveBlock1Ptr->location.mapGroup != MAP_GROUP(SOOTOPOLIS_CITY) || gSaveBlock1Ptr->location.mapNum != MAP_NUM(SOOTOPOLIS_CITY)) { return FALSE; } return FlagGet(FLAG_LEGENDARIES_IN_SOOTOPOLIS); } bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavior) { u16 headerId; struct Roamer *roamer; if (sWildEncountersDisabled == TRUE) return FALSE; headerId = GetCurrentMapWildMonHeaderId(); if (headerId == 0xFFFF) // invalid { if (gMapHeader.mapLayoutId == 0x166) { headerId = GetBattlePikeWildMonHeaderId(); if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll()) return FALSE; else if (DoWildEncounterRateTest(gBattlePikeWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE) return FALSE; else if (TryGenerateWildMon(gBattlePikeWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, WILD_CHECK_KEEN_EYE) != TRUE) return FALSE; else if (!TryGenerateBattlePikeWildMon(TRUE)) return FALSE; BattleSetup_StartBattlePikeWildBattle(); return TRUE; } if (gMapHeader.mapLayoutId == 0x169) { headerId = gSaveBlock2Ptr->frontier.field_CB2; if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll()) return FALSE; else if (DoWildEncounterRateTest(gBattlePyramidWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE) return FALSE; else if (TryGenerateWildMon(gBattlePyramidWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, WILD_CHECK_KEEN_EYE) != TRUE) return FALSE; GenerateBattlePyramidWildMon(); BattleSetup_StartWildBattle(); return TRUE; } } else { if (MetatileBehavior_IsLandWildEncounter(currMetaTileBehavior) == TRUE) { if (gWildMonHeaders[headerId].landMonsInfo == NULL) return FALSE; else if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll()) return FALSE; else if (DoWildEncounterRateTest(gWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE) return FALSE; if (TryStartRoamerEncounter() == TRUE) { roamer = &gSaveBlock1Ptr->roamer; if (!IsWildLevelAllowedByRepel(roamer->level)) return FALSE; BattleSetup_StartRoamerBattle(); return TRUE; } else { if (DoMassOutbreakEncounterTest() == TRUE && SetUpMassOutbreakEncounter(WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE) { BattleSetup_StartWildBattle(); return TRUE; } // try a regular wild land encounter if (TryGenerateWildMon(gWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE) { BattleSetup_StartWildBattle(); return TRUE; } return FALSE; } } else if (MetatileBehavior_IsWaterWildEncounter(currMetaTileBehavior) == TRUE || (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridge(currMetaTileBehavior) == TRUE)) { if (AreLegendariesInSootopolisPreventingEncounters() == TRUE) return FALSE; else if (gWildMonHeaders[headerId].waterMonsInfo == NULL) return FALSE; else if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll()) return FALSE; else if (DoWildEncounterRateTest(gWildMonHeaders[headerId].waterMonsInfo->encounterRate, FALSE) != TRUE) return FALSE; if (TryStartRoamerEncounter() == TRUE) { roamer = &gSaveBlock1Ptr->roamer; if (!IsWildLevelAllowedByRepel(roamer->level)) return FALSE; BattleSetup_StartRoamerBattle(); return TRUE; } else // try a regular surfing encounter { if (TryGenerateWildMon(gWildMonHeaders[headerId].waterMonsInfo, WILD_AREA_WATER, WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE) { BattleSetup_StartWildBattle(); return TRUE; } return FALSE; } } } return FALSE; } void RockSmashWildEncounter(void) { u16 headerId = GetCurrentMapWildMonHeaderId(); if (headerId != 0xFFFF) { const struct WildPokemonInfo *wildPokemonInfo = gWildMonHeaders[headerId].rockSmashMonsInfo; if (wildPokemonInfo == NULL) { gSpecialVar_Result = FALSE; } else if (DoWildEncounterRateTest(wildPokemonInfo->encounterRate, 1) == TRUE && TryGenerateWildMon(wildPokemonInfo, 2, WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE) { BattleSetup_StartWildBattle(); gSpecialVar_Result = TRUE; } else { gSpecialVar_Result = FALSE; } } else { gSpecialVar_Result = FALSE; } } bool8 SweetScentWildEncounter(void) { s16 x, y; u16 headerId; PlayerGetDestCoords(&x, &y); headerId = GetCurrentMapWildMonHeaderId(); if (headerId == 0xFFFF) // invalid { if (gMapHeader.mapLayoutId == 0x166) { headerId = GetBattlePikeWildMonHeaderId(); if (TryGenerateWildMon(gBattlePikeWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, 0) != TRUE) return FALSE; TryGenerateBattlePikeWildMon(FALSE); BattleSetup_StartBattlePikeWildBattle(); return TRUE; } if (gMapHeader.mapLayoutId == 0x169) { headerId = gSaveBlock2Ptr->frontier.field_CB2; if (TryGenerateWildMon(gBattlePyramidWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, 0) != TRUE) return FALSE; GenerateBattlePyramidWildMon(); BattleSetup_StartWildBattle(); return TRUE; } } else { if (MetatileBehavior_IsLandWildEncounter(MapGridGetMetatileBehaviorAt(x, y)) == TRUE) { if (gWildMonHeaders[headerId].landMonsInfo == NULL) return FALSE; if (TryStartRoamerEncounter() == TRUE) { BattleSetup_StartRoamerBattle(); return TRUE; } if (DoMassOutbreakEncounterTest() == TRUE) SetUpMassOutbreakEncounter(0); else TryGenerateWildMon(gWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, 0); BattleSetup_StartWildBattle(); return TRUE; } else if (MetatileBehavior_IsWaterWildEncounter(MapGridGetMetatileBehaviorAt(x, y)) == TRUE) { if (AreLegendariesInSootopolisPreventingEncounters() == TRUE) return FALSE; if (gWildMonHeaders[headerId].waterMonsInfo == NULL) return FALSE; if (TryStartRoamerEncounter() == TRUE) { BattleSetup_StartRoamerBattle(); return TRUE; } TryGenerateWildMon(gWildMonHeaders[headerId].waterMonsInfo, WILD_AREA_WATER, 0); BattleSetup_StartWildBattle(); return TRUE; } } return FALSE; } bool8 DoesCurrentMapHaveFishingMons(void) { u16 headerId = GetCurrentMapWildMonHeaderId(); if (headerId != 0xFFFF && gWildMonHeaders[headerId].fishingMonsInfo != NULL) return TRUE; else return FALSE; } void FishingWildEncounter(u8 rod) { u16 species; if (CheckFeebas() == TRUE) { u8 level = ChooseWildMonLevel(&gWildFeebasRoute119Data); species = gWildFeebasRoute119Data.species; CreateWildMon(species, level); } else { species = GenerateFishingWildMon(gWildMonHeaders[GetCurrentMapWildMonHeaderId()].fishingMonsInfo, rod); } IncrementGameStat(GAME_STAT_FISHING_CAPTURES); SetPokemonAnglerSpecies(species); BattleSetup_StartWildBattle(); } u16 GetLocalWildMon(bool8 *isWaterMon) { u16 headerId; const struct WildPokemonInfo *landMonsInfo; const struct WildPokemonInfo *waterMonsInfo; *isWaterMon = FALSE; headerId = GetCurrentMapWildMonHeaderId(); if (headerId == 0xFFFF) return SPECIES_NONE; landMonsInfo = gWildMonHeaders[headerId].landMonsInfo; waterMonsInfo = gWildMonHeaders[headerId].waterMonsInfo; // Neither if (landMonsInfo == NULL && waterMonsInfo == NULL) return SPECIES_NONE; // Land Pokemon else if (landMonsInfo != NULL && waterMonsInfo == NULL) return landMonsInfo->wildPokemon[ChooseWildMonIndex_Land()].species; // Water Pokemon else if (landMonsInfo == NULL && waterMonsInfo != NULL) { *isWaterMon = TRUE; return waterMonsInfo->wildPokemon[ChooseWildMonIndex_WaterRock()].species; } // Either land or water Pokemon if ((Random() % 100) < 80) { return landMonsInfo->wildPokemon[ChooseWildMonIndex_Land()].species; } else { *isWaterMon = TRUE; return waterMonsInfo->wildPokemon[ChooseWildMonIndex_WaterRock()].species; } } u16 GetLocalWaterMon(void) { u16 headerId = GetCurrentMapWildMonHeaderId(); if (headerId != 0xFFFF) { const struct WildPokemonInfo *waterMonsInfo = gWildMonHeaders[headerId].waterMonsInfo; if (waterMonsInfo) return waterMonsInfo->wildPokemon[ChooseWildMonIndex_WaterRock()].species; } return SPECIES_NONE; } bool8 UpdateRepelCounter(void) { u16 steps; if (InBattlePike() || InBattlePyramid()) return FALSE; if (InUnionRoom() == TRUE) return FALSE; steps = VarGet(VAR_REPEL_STEP_COUNT); if (steps != 0) { steps--; VarSet(VAR_REPEL_STEP_COUNT, steps); if (steps == 0) { ScriptContext1_SetupScript(EventScript_RepelWoreOff); return TRUE; } } return FALSE; } static bool8 IsWildLevelAllowedByRepel(u8 wildLevel) { u8 i; if (!VarGet(VAR_REPEL_STEP_COUNT)) return TRUE; for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_HP) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) { u8 ourLevel = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); if (wildLevel < ourLevel) return FALSE; else return TRUE; } } return FALSE; } static bool8 IsAbilityAllowingEncounter(u8 level) { u8 ability; if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3)) return TRUE; ability = GetMonAbility(&gPlayerParty[0]); if (ability == ABILITY_KEEN_EYE || ability == ABILITY_INTIMIDATE) { u8 playerMonLevel = GetMonData(&gPlayerParty[0], MON_DATA_LEVEL); if (playerMonLevel > 5 && level <= playerMonLevel - 5 && !(Random() % 2)) return FALSE; } return TRUE; } static bool8 TryGetRandomWildMonIndexByType(const struct WildPokemon *wildMon, u8 type, u8 numMon, u8 *monIndex) { u8 validIndexes[numMon]; // variable length array, an interesting feature u8 i, validMonCount; for (i = 0; i < numMon; i++) validIndexes[i] = 0; for (validMonCount = 0, i = 0; i < numMon; i++) { if (gBaseStats[wildMon[i].species].type1 == type || gBaseStats[wildMon[i].species].type2 == type) validIndexes[validMonCount++] = i; } if (validMonCount == 0 || validMonCount == numMon) return FALSE; *monIndex = validIndexes[Random() % validMonCount]; return TRUE; } static bool8 TryGetAbilityInfluencedWildMonIndex(const struct WildPokemon *wildMon, u8 type, u8 ability, u8 *monIndex) { if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_BIT3)) return FALSE; else if (GetMonAbility(&gPlayerParty[0]) != ability) return FALSE; else if (Random() % 2 != 0) return FALSE; return TryGetRandomWildMonIndexByType(wildMon, type, LAND_WILD_COUNT, monIndex); } static void ApplyFluteEncounterRateMod(u32 *encRate) { if (FlagGet(FLAG_SYS_ENC_UP_ITEM) == TRUE) *encRate += *encRate / 2; else if (FlagGet(FLAG_SYS_ENC_DOWN_ITEM) == TRUE) *encRate = *encRate / 2; } static void ApplyCleanseTagEncounterRateMod(u32 *encRate) { if (GetMonData(&gPlayerParty[0], MON_DATA_HELD_ITEM) == ITEM_CLEANSE_TAG) *encRate = *encRate * 2 / 3; }