#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;
}
