diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/berry.c | 791 | ||||
| -rw-r--r-- | src/berry_tag_screen.c | 4 | ||||
| -rw-r--r-- | src/credits.c | 8 | ||||
| -rw-r--r-- | src/intro.c | 567 | ||||
| -rw-r--r-- | src/main_menu.c | 4 | ||||
| -rw-r--r-- | src/pokemon_2.c | 12 | ||||
| -rw-r--r-- | src/sprite.c | 116 | ||||
| -rw-r--r-- | src/starter_choose.c | 166 | ||||
| -rw-r--r-- | src/wallclock.c | 689 | ||||
| -rw-r--r-- | src/wild_encounter.c | 2889 | 
10 files changed, 5030 insertions, 216 deletions
| diff --git a/src/berry.c b/src/berry.c index 2a8ce8380..7932fafea 100644 --- a/src/berry.c +++ b/src/berry.c @@ -10,9 +10,788 @@  #define FIRST_BERRY ITEM_CHERI_BERRY  #define LAST_BERRY  ITEM_ENIGMA_BERRY -extern struct Berry gBerries[]; +const u8 gBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers."); +const u8 gBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy."); +const u8 gBerryDescriptionPart1_Chesto[] = _("The BERRY’s thick skin and fruit are"); +const u8 gBerryDescriptionPart2_Chesto[] = _("very tough. It is dry-tasting all over."); +const u8 gBerryDescriptionPart1_Pecha[] = _("Very sweet and delicious."); +const u8 gBerryDescriptionPart2_Pecha[] = _("Also very tender - handle with care."); +const u8 gBerryDescriptionPart1_Rawst[] = _("If the leaves grow long and curly,"); +const u8 gBerryDescriptionPart2_Rawst[] = _("the BERRY seems to grow very bitter."); +const u8 gBerryDescriptionPart1_Aspear[] = _("The hard BERRY is dense with a rich"); +const u8 gBerryDescriptionPart2_Aspear[] = _("juice. It is quite sour."); +const u8 gBerryDescriptionPart1_Leppa[] = _("Grows slower than CHERI and others."); +const u8 gBerryDescriptionPart2_Leppa[] = _("The smaller the BERRY, the tastier."); +const u8 gBerryDescriptionPart1_Oran[] = _("A peculiar BERRY with a mix of flavors."); +const u8 gBerryDescriptionPart2_Oran[] = _("BERRIES grow in half a day."); +const u8 gBerryDescriptionPart1_Persim[] = _("Loves sunlight. The BERRY’s color"); +const u8 gBerryDescriptionPart2_Persim[] = _("grows vivid when exposed to the sun."); +const u8 gBerryDescriptionPart1_Lum[] = _("Slow to grow. If raised with loving"); +const u8 gBerryDescriptionPart2_Lum[] = _("care, it may grow two BERRIES."); +const u8 gBerryDescriptionPart1_Sitrus[] = _("Closely related to ORAN. The large"); +const u8 gBerryDescriptionPart2_Sitrus[] = _("BERRY has a well-rounded flavor."); +const u8 gBerryDescriptionPart1_Figy[] = _("The BERRY, which looks chewed up,"); +const u8 gBerryDescriptionPart2_Figy[] = _("brims with spicy substances."); +const u8 gBerryDescriptionPart1_Wiki[] = _("The BERRY is said to have grown lumpy"); +const u8 gBerryDescriptionPart2_Wiki[] = _("to help POKéMON grip it."); +const u8 gBerryDescriptionPart1_Mago[] = _("The BERRY turns curvy as it grows."); +const u8 gBerryDescriptionPart2_Mago[] = _("The curvier, the sweeter and tastier."); +const u8 gBerryDescriptionPart1_Aguav[] = _("The flower is dainty. It is rare in its"); +const u8 gBerryDescriptionPart2_Aguav[] = _("ability to grow without light."); +const u8 gBerryDescriptionPart1_Iapapa[] = _("The BERRY is very big and sour."); +const u8 gBerryDescriptionPart2_Iapapa[] = _("It takes at least a day to grow."); +const u8 gBerryDescriptionPart1_Razz[] = _("The red BERRY tastes slightly spicy."); +const u8 gBerryDescriptionPart2_Razz[] = _("It grows quickly in just four hours."); +const u8 gBerryDescriptionPart1_Bluk[] = _("The BERRY is blue on the outside, but"); +const u8 gBerryDescriptionPart2_Bluk[] = _("it blackens the mouth when eaten."); +const u8 gBerryDescriptionPart1_Nanab[] = _("This BERRY was the seventh"); +const u8 gBerryDescriptionPart2_Nanab[] = _("discovered in the world. It is sweet."); +const u8 gBerryDescriptionPart1_Wepear[] = _("The flower is small and white. It has a"); +const u8 gBerryDescriptionPart2_Wepear[] = _("delicate balance of bitter and sour."); +const u8 gBerryDescriptionPart1_Pinap[] = _("Weak against wind and cold."); +const u8 gBerryDescriptionPart2_Pinap[] = _("The fruit is spicy and the skin, sour."); +const u8 gBerryDescriptionPart1_Pomeg[] = _("However much it is watered,"); +const u8 gBerryDescriptionPart2_Pomeg[] = _("it only grows up to six BERRIES."); +const u8 gBerryDescriptionPart1_Kelpsy[] = _("A rare variety shaped like a root."); +const u8 gBerryDescriptionPart2_Kelpsy[] = _("Grows a very large flower."); +const u8 gBerryDescriptionPart1_Qualot[] = _("Loves water. Grows strong even in"); +const u8 gBerryDescriptionPart2_Qualot[] = _("locations with constant rainfall."); +const u8 gBerryDescriptionPart1_Hondew[] = _("A BERRY that is very valuable and"); +const u8 gBerryDescriptionPart2_Hondew[] = _("rarely seen. It is very delicious."); +const u8 gBerryDescriptionPart1_Grepa[] = _("Despite its tenderness and round"); +const u8 gBerryDescriptionPart2_Grepa[] = _("shape, the BERRY is unimaginably sour."); +const u8 gBerryDescriptionPart1_Tamato[] = _("The BERRY is lip-bendingly spicy."); +const u8 gBerryDescriptionPart2_Tamato[] = _("It takes time to grow."); +const u8 gBerryDescriptionPart1_Cornn[] = _("A BERRY from an ancient era. May not"); +const u8 gBerryDescriptionPart2_Cornn[] = _("grow unless planted in quantity."); +const u8 gBerryDescriptionPart1_Magost[] = _("A BERRY that is widely said to have"); +const u8 gBerryDescriptionPart2_Magost[] = _("a finely balanced flavor."); +const u8 gBerryDescriptionPart1_Rabuta[] = _("A rare variety that is overgrown with"); +const u8 gBerryDescriptionPart2_Rabuta[] = _("hair. It is quite bitter."); +const u8 gBerryDescriptionPart1_Nomel[] = _("Quite sour. Just one bite makes it"); +const u8 gBerryDescriptionPart2_Nomel[] = _("impossible to taste for three days."); +const u8 gBerryDescriptionPart1_Spelon[] = _("The vividly red BERRY is very spicy."); +const u8 gBerryDescriptionPart2_Spelon[] = _("Its warts secrete a spicy substance."); +const u8 gBerryDescriptionPart1_Pamtre[] = _("Drifts on the sea from somewhere."); +const u8 gBerryDescriptionPart2_Pamtre[] = _("It is thought to grow elsewhere."); +const u8 gBerryDescriptionPart1_Watmel[] = _("A huge BERRY, with some over 20"); +const u8 gBerryDescriptionPart2_Watmel[] = _("inches discovered. Exceedingly sweet."); +const u8 gBerryDescriptionPart1_Durin[] = _("Bitter to even look at. It is so"); +const u8 gBerryDescriptionPart2_Durin[] = _("bitter, no one has ever eaten it as is."); +const u8 gBerryDescriptionPart1_Belue[] = _("It is glossy and looks delicious, but"); +const u8 gBerryDescriptionPart2_Belue[] = _("it is awfully sour. Takes time to grow."); +const u8 gBerryDescriptionPart1_Liechi[] = _("A mysterious BERRY. It is rumored to"); +const u8 gBerryDescriptionPart2_Liechi[] = _("contain the power of the sea."); +const u8 gBerryDescriptionPart1_Ganlon[] = _("A mysterious BERRY. It is rumored to"); +const u8 gBerryDescriptionPart2_Ganlon[] = _("contain the power of the land."); +const u8 gBerryDescriptionPart1_Salac[] = _("A mysterious BERRY. It is rumored to"); +const u8 gBerryDescriptionPart2_Salac[] = _("contain the power of the sky."); +const u8 gBerryDescriptionPart1_Petaya[] = _("A mysterious BERRY. It is rumored to"); +const u8 gBerryDescriptionPart2_Petaya[] = _("contain the power of all living things."); +const u8 gBerryDescriptionPart1_Apicot[] = _("A very mystifying BERRY. No telling"); +const u8 gBerryDescriptionPart2_Apicot[] = _("what may happen or how it can be used."); +const u8 gBerryDescriptionPart1_Lansat[] = _("Said to be a legendary BERRY."); +const u8 gBerryDescriptionPart2_Lansat[] = _("Holding it supposedly brings joy."); +const u8 gBerryDescriptionPart1_Starf[] = _("So strong, it was abandoned at the"); +const u8 gBerryDescriptionPart2_Starf[] = _("world’s edge. Considered a mirage."); +const u8 gBerryDescriptionPart1_Enigma[] = _("A completely enigmatic BERRY."); +const u8 gBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars."); + +const struct Berry gBerries[] = +{ +    { +        .name = _("CHERI"), +        .firmness = BERRY_FIRMNESS_SOFT, +        .size = 20, +        .maxYield = 3, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Cheri, +        .description2 = gBerryDescriptionPart2_Cheri, +        .stageDuration = 3, +        .spicy = 10, +        .dry = 0, +        .sweet = 0, +        .bitter = 0, +        .sour = 0, +        .smoothness = 25, +    }, +    { +        .name = _("CHESTO"), +        .firmness = BERRY_FIRMNESS_SUPER_HARD, +        .size = 80, +        .maxYield = 3, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Chesto, +        .description2 = gBerryDescriptionPart2_Chesto, +        .stageDuration = 3, +        .spicy = 0, +        .dry = 10, +        .sweet = 0, +        .bitter = 0, +        .sour = 0, +        .smoothness = 25, +    }, +    { +        .name = _("PECHA"), +        .firmness = BERRY_FIRMNESS_VERY_SOFT, +        .size = 40, +        .maxYield = 3, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Pecha, +        .description2 = gBerryDescriptionPart2_Pecha, +        .stageDuration = 3, +        .spicy = 0, +        .dry = 0, +        .sweet = 10, +        .bitter = 0, +        .sour = 0, +        .smoothness = 25, +    }, +    { +        .name = _("RAWST"), +        .firmness = BERRY_FIRMNESS_HARD, +        .size = 32, +        .maxYield = 3, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Rawst, +        .description2 = gBerryDescriptionPart2_Rawst, +        .stageDuration = 3, +        .spicy = 0, +        .dry = 0, +        .sweet = 0, +        .bitter = 10, +        .sour = 0, +        .smoothness = 25, +    }, +    { +        .name = _("ASPEAR"), +        .firmness = BERRY_FIRMNESS_SUPER_HARD, +        .size = 50, +        .maxYield = 3, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Aspear, +        .description2 = gBerryDescriptionPart2_Aspear, +        .stageDuration = 3, +        .spicy = 0, +        .dry = 0, +        .sweet = 0, +        .bitter = 0, +        .sour = 10, +        .smoothness = 25, +    }, +    { +        .name = _("LEPPA"), +        .firmness = BERRY_FIRMNESS_VERY_HARD, +        .size = 28, +        .maxYield = 3, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Leppa, +        .description2 = gBerryDescriptionPart2_Leppa, +        .stageDuration = 4, +        .spicy = 10, +        .dry = 0, +        .sweet = 10, +        .bitter = 10, +        .sour = 10, +        .smoothness = 20, +    }, +    { +        .name = _("ORAN"), +        .firmness = BERRY_FIRMNESS_SUPER_HARD, +        .size = 35, +        .maxYield = 3, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Oran, +        .description2 = gBerryDescriptionPart2_Oran, +        .stageDuration = 3, +        .spicy = 10, +        .dry = 10, +        .sweet = 10, +        .bitter = 10, +        .sour = 10, +        .smoothness = 20, +    }, +    { +        .name = _("PERSIM"), +        .firmness = BERRY_FIRMNESS_HARD, +        .size = 47, +        .maxYield = 3, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Persim, +        .description2 = gBerryDescriptionPart2_Persim, +        .stageDuration = 3, +        .spicy = 10, +        .dry = 10, +        .sweet = 10, +        .bitter = 10, +        .sour = 10, +        .smoothness = 20, +    }, +    { +        .name = _("LUM"), +        .firmness = BERRY_FIRMNESS_SUPER_HARD, +        .size = 34, +        .maxYield = 2, +        .minYield = 1, +        .description1 = gBerryDescriptionPart1_Lum, +        .description2 = gBerryDescriptionPart2_Lum, +        .stageDuration = 12, +        .spicy = 10, +        .dry = 10, +        .sweet = 10, +        .bitter = 10, +        .sour = 10, +        .smoothness = 20, +    }, +    { +        .name = _("SITRUS"), +        .firmness = BERRY_FIRMNESS_VERY_HARD, +        .size = 95, +        .maxYield = 3, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Sitrus, +        .description2 = gBerryDescriptionPart2_Sitrus, +        .stageDuration = 6, +        .spicy = 10, +        .dry = 10, +        .sweet = 10, +        .bitter = 10, +        .sour = 10, +        .smoothness = 20, +    }, +    { +        .name = _("FIGY"), +        .firmness = BERRY_FIRMNESS_SOFT, +        .size = 100, +        .maxYield = 3, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Figy, +        .description2 = gBerryDescriptionPart2_Figy, +        .stageDuration = 6, +        .spicy = 10, +        .dry = 0, +        .sweet = 0, +        .bitter = 0, +        .sour = 0, +        .smoothness = 25, +    }, +    { +        .name = _("WIKI"), +        .firmness = BERRY_FIRMNESS_HARD, +        .size = 115, +        .maxYield = 3, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Wiki, +        .description2 = gBerryDescriptionPart2_Wiki, +        .stageDuration = 6, +        .spicy = 0, +        .dry = 10, +        .sweet = 0, +        .bitter = 0, +        .sour = 0, +        .smoothness = 25, +    }, +    { +        .name = _("MAGO"), +        .firmness = BERRY_FIRMNESS_HARD, +        .size = 126, +        .maxYield = 3, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Mago, +        .description2 = gBerryDescriptionPart2_Mago, +        .stageDuration = 6, +        .spicy = 0, +        .dry = 0, +        .sweet = 10, +        .bitter = 0, +        .sour = 0, +        .smoothness = 25, +    }, +    { +        .name = _("AGUAV"), +        .firmness = BERRY_FIRMNESS_SUPER_HARD, +        .size = 64, +        .maxYield = 3, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Aguav, +        .description2 = gBerryDescriptionPart2_Aguav, +        .stageDuration = 6, +        .spicy = 0, +        .dry = 0, +        .sweet = 0, +        .bitter = 10, +        .sour = 0, +        .smoothness = 25, +    }, +    { +        .name = _("IAPAPA"), +        .firmness = BERRY_FIRMNESS_SOFT, +        .size = 223, +        .maxYield = 3, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Iapapa, +        .description2 = gBerryDescriptionPart2_Iapapa, +        .stageDuration = 6, +        .spicy = 0, +        .dry = 0, +        .sweet = 0, +        .bitter = 0, +        .sour = 10, +        .smoothness = 25, +    }, +    { +        .name = _("RAZZ"), +        .firmness = BERRY_FIRMNESS_VERY_HARD, +        .size = 120, +        .maxYield = 6, +        .minYield = 3, +        .description1 = gBerryDescriptionPart1_Razz, +        .description2 = gBerryDescriptionPart2_Razz, +        .stageDuration = 1, +        .spicy = 10, +        .dry = 10, +        .sweet = 0, +        .bitter = 0, +        .sour = 0, +        .smoothness = 20, +    }, +    { +        .name = _("BLUK"), +        .firmness = BERRY_FIRMNESS_SOFT, +        .size = 108, +        .maxYield = 6, +        .minYield = 3, +        .description1 = gBerryDescriptionPart1_Bluk, +        .description2 = gBerryDescriptionPart2_Bluk, +        .stageDuration = 1, +        .spicy = 0, +        .dry = 10, +        .sweet = 10, +        .bitter = 0, +        .sour = 0, +        .smoothness = 20, +    }, +    { +        .name = _("NANAB"), +        .firmness = BERRY_FIRMNESS_VERY_HARD, +        .size = 77, +        .maxYield = 6, +        .minYield = 3, +        .description1 = gBerryDescriptionPart1_Nanab, +        .description2 = gBerryDescriptionPart2_Nanab, +        .stageDuration = 1, +        .spicy = 0, +        .dry = 0, +        .sweet = 10, +        .bitter = 10, +        .sour = 0, +        .smoothness = 20, +    }, +    { +        .name = _("WEPEAR"), +        .firmness = BERRY_FIRMNESS_SUPER_HARD, +        .size = 74, +        .maxYield = 6, +        .minYield = 3, +        .description1 = gBerryDescriptionPart1_Wepear, +        .description2 = gBerryDescriptionPart2_Wepear, +        .stageDuration = 1, +        .spicy = 0, +        .dry = 0, +        .sweet = 0, +        .bitter = 10, +        .sour = 10, +        .smoothness = 20, +    }, +    { +        .name = _("PINAP"), +        .firmness = BERRY_FIRMNESS_HARD, +        .size = 80, +        .maxYield = 6, +        .minYield = 3, +        .description1 = gBerryDescriptionPart1_Pinap, +        .description2 = gBerryDescriptionPart2_Pinap, +        .stageDuration = 1, +        .spicy = 10, +        .dry = 0, +        .sweet = 0, +        .bitter = 0, +        .sour = 10, +        .smoothness = 20, +    }, +    { +        .name = _("POMEG"), +        .firmness = BERRY_FIRMNESS_VERY_HARD, +        .size = 135, +        .maxYield = 6, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Pomeg, +        .description2 = gBerryDescriptionPart2_Pomeg, +        .stageDuration = 3, +        .spicy = 10, +        .dry = 0, +        .sweet = 10, +        .bitter = 10, +        .sour = 0, +        .smoothness = 20, +    }, +    { +        .name = _("KELPSY"), +        .firmness = BERRY_FIRMNESS_HARD, +        .size = 150, +        .maxYield = 6, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Kelpsy, +        .description2 = gBerryDescriptionPart2_Kelpsy, +        .stageDuration = 3, +        .spicy = 0, +        .dry = 10, +        .sweet = 0, +        .bitter = 10, +        .sour = 10, +        .smoothness = 20, +    }, +    { +        .name = _("QUALOT"), +        .firmness = BERRY_FIRMNESS_HARD, +        .size = 110, +        .maxYield = 6, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Qualot, +        .description2 = gBerryDescriptionPart2_Qualot, +        .stageDuration = 3, +        .spicy = 10, +        .dry = 0, +        .sweet = 10, +        .bitter = 0, +        .sour = 10, +        .smoothness = 20, +    }, +    { +        .name = _("HONDEW"), +        .firmness = BERRY_FIRMNESS_HARD, +        .size = 162, +        .maxYield = 6, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Hondew, +        .description2 = gBerryDescriptionPart2_Hondew, +        .stageDuration = 3, +        .spicy = 10, +        .dry = 10, +        .sweet = 0, +        .bitter = 10, +        .sour = 0, +        .smoothness = 20, +    }, +    { +        .name = _("GREPA"), +        .firmness = BERRY_FIRMNESS_SOFT, +        .size = 149, +        .maxYield = 6, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Grepa, +        .description2 = gBerryDescriptionPart2_Grepa, +        .stageDuration = 3, +        .spicy = 0, +        .dry = 10, +        .sweet = 10, +        .bitter = 0, +        .sour = 10, +        .smoothness = 20, +    }, +    { +        .name = _("TAMATO"), +        .firmness = BERRY_FIRMNESS_SOFT, +        .size = 200, +        .maxYield = 4, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Tamato, +        .description2 = gBerryDescriptionPart2_Tamato, +        .stageDuration = 6, +        .spicy = 20, +        .dry = 10, +        .sweet = 0, +        .bitter = 0, +        .sour = 0, +        .smoothness = 30, +    }, +    { +        .name = _("CORNN"), +        .firmness = BERRY_FIRMNESS_HARD, +        .size = 75, +        .maxYield = 4, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Cornn, +        .description2 = gBerryDescriptionPart2_Cornn, +        .stageDuration = 6, +        .spicy = 0, +        .dry = 20, +        .sweet = 10, +        .bitter = 0, +        .sour = 0, +        .smoothness = 30, +    }, +    { +        .name = _("MAGOST"), +        .firmness = BERRY_FIRMNESS_HARD, +        .size = 140, +        .maxYield = 4, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Magost, +        .description2 = gBerryDescriptionPart2_Magost, +        .stageDuration = 6, +        .spicy = 0, +        .dry = 0, +        .sweet = 20, +        .bitter = 10, +        .sour = 0, +        .smoothness = 30, +    }, +    { +        .name = _("RABUTA"), +        .firmness = BERRY_FIRMNESS_SOFT, +        .size = 226, +        .maxYield = 4, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Rabuta, +        .description2 = gBerryDescriptionPart2_Rabuta, +        .stageDuration = 6, +        .spicy = 0, +        .dry = 0, +        .sweet = 0, +        .bitter = 20, +        .sour = 10, +        .smoothness = 30, +    }, +    { +        .name = _("NOMEL"), +        .firmness = BERRY_FIRMNESS_SUPER_HARD, +        .size = 285, +        .maxYield = 4, +        .minYield = 2, +        .description1 = gBerryDescriptionPart1_Nomel, +        .description2 = gBerryDescriptionPart2_Nomel, +        .stageDuration = 6, +        .spicy = 10, +        .dry = 0, +        .sweet = 0, +        .bitter = 0, +        .sour = 20, +        .smoothness = 30, +    }, +    { +        .name = _("SPELON"), +        .firmness = BERRY_FIRMNESS_SOFT, +        .size = 133, +        .maxYield = 2, +        .minYield = 1, +        .description1 = gBerryDescriptionPart1_Spelon, +        .description2 = gBerryDescriptionPart2_Spelon, +        .stageDuration = 18, +        .spicy = 40, +        .dry = 10, +        .sweet = 0, +        .bitter = 0, +        .sour = 0, +        .smoothness = 70, +    }, +    { +        .name = _("PAMTRE"), +        .firmness = BERRY_FIRMNESS_VERY_SOFT, +        .size = 244, +        .maxYield = 2, +        .minYield = 1, +        .description1 = gBerryDescriptionPart1_Pamtre, +        .description2 = gBerryDescriptionPart2_Pamtre, +        .stageDuration = 18, +        .spicy = 0, +        .dry = 40, +        .sweet = 10, +        .bitter = 0, +        .sour = 0, +        .smoothness = 70, +    }, +    { +        .name = _("WATMEL"), +        .firmness = BERRY_FIRMNESS_SOFT, +        .size = 250, +        .maxYield = 2, +        .minYield = 1, +        .description1 = gBerryDescriptionPart1_Watmel, +        .description2 = gBerryDescriptionPart2_Watmel, +        .stageDuration = 18, +        .spicy = 0, +        .dry = 0, +        .sweet = 40, +        .bitter = 10, +        .sour = 0, +        .smoothness = 70, +    }, +    { +        .name = _("DURIN"), +        .firmness = BERRY_FIRMNESS_HARD, +        .size = 280, +        .maxYield = 2, +        .minYield = 1, +        .description1 = gBerryDescriptionPart1_Durin, +        .description2 = gBerryDescriptionPart2_Durin, +        .stageDuration = 18, +        .spicy = 0, +        .dry = 0, +        .sweet = 0, +        .bitter = 40, +        .sour = 10, +        .smoothness = 70, +    }, +    { +        .name = _("BELUE"), +        .firmness = BERRY_FIRMNESS_VERY_SOFT, +        .size = 300, +        .maxYield = 2, +        .minYield = 1, +        .description1 = gBerryDescriptionPart1_Belue, +        .description2 = gBerryDescriptionPart2_Belue, +        .stageDuration = 18, +        .spicy = 10, +        .dry = 0, +        .sweet = 0, +        .bitter = 0, +        .sour = 40, +        .smoothness = 70, +    }, +    { +        .name = _("LIECHI"), +        .firmness = BERRY_FIRMNESS_VERY_HARD, +        .size = 111, +        .maxYield = 2, +        .minYield = 1, +        .description1 = gBerryDescriptionPart1_Liechi, +        .description2 = gBerryDescriptionPart2_Liechi, +        .stageDuration = 24, +        .spicy = 40, +        .dry = 0, +        .sweet = 40, +        .bitter = 0, +        .sour = 10, +        .smoothness = 80, +    }, +    { +        .name = _("GANLON"), +        .firmness = BERRY_FIRMNESS_VERY_HARD, +        .size = 33, +        .maxYield = 2, +        .minYield = 1, +        .description1 = gBerryDescriptionPart1_Ganlon, +        .description2 = gBerryDescriptionPart2_Ganlon, +        .stageDuration = 24, +        .spicy = 0, +        .dry = 40, +        .sweet = 0, +        .bitter = 40, +        .sour = 0, +        .smoothness = 80, +    }, +    { +        .name = _("SALAC"), +        .firmness = BERRY_FIRMNESS_VERY_HARD, +        .size = 95, +        .maxYield = 2, +        .minYield = 1, +        .description1 = gBerryDescriptionPart1_Salac, +        .description2 = gBerryDescriptionPart2_Salac, +        .stageDuration = 24, +        .spicy = 0, +        .dry = 0, +        .sweet = 40, +        .bitter = 0, +        .sour = 40, +        .smoothness = 80, +    }, +    { +        .name = _("PETAYA"), +        .firmness = BERRY_FIRMNESS_VERY_HARD, +        .size = 237, +        .maxYield = 2, +        .minYield = 1, +        .description1 = gBerryDescriptionPart1_Petaya, +        .description2 = gBerryDescriptionPart2_Petaya, +        .stageDuration = 24, +        .spicy = 40, +        .dry = 0, +        .sweet = 0, +        .bitter = 40, +        .sour = 0, +        .smoothness = 80, +    }, +    { +        .name = _("APICOT"), +        .firmness = BERRY_FIRMNESS_HARD, +        .size = 75, +        .maxYield = 2, +        .minYield = 1, +        .description1 = gBerryDescriptionPart1_Apicot, +        .description2 = gBerryDescriptionPart2_Apicot, +        .stageDuration = 24, +        .spicy = 0, +        .dry = 40, +        .sweet = 0, +        .bitter = 0, +        .sour = 40, +        .smoothness = 80, +    }, +    { +        .name = _("LANSAT"), +        .firmness = BERRY_FIRMNESS_SOFT, +        .size = 97, +        .maxYield = 2, +        .minYield = 1, +        .description1 = gBerryDescriptionPart1_Lansat, +        .description2 = gBerryDescriptionPart2_Lansat, +        .stageDuration = 24, +        .spicy = 10, +        .dry = 10, +        .sweet = 10, +        .bitter = 10, +        .sour = 10, +        .smoothness = 30, +    }, +    { +        .name = _("STARF"), +        .firmness = BERRY_FIRMNESS_SUPER_HARD, +        .size = 153, +        .maxYield = 2, +        .minYield = 1, +        .description1 = gBerryDescriptionPart1_Starf, +        .description2 = gBerryDescriptionPart2_Starf, +        .stageDuration = 24, +        .spicy = 10, +        .dry = 10, +        .sweet = 10, +        .bitter = 10, +        .sour = 10, +        .smoothness = 30, +    }, +    { +        .name = _("ENIGMA"), +        .firmness = BERRY_FIRMNESS_UNKNOWN, +        .size = 0, +        .maxYield = 2, +        .minYield = 1, +        .description1 = gBerryDescriptionPart1_Enigma, +        .description2 = gBerryDescriptionPart2_Enigma, +        .stageDuration = 24, +        .spicy = 40, +        .dry = 40, +        .sweet = 40, +        .bitter = 40, +        .sour = 40, +        .smoothness = 40, +    }, +}; + +const struct BerryTree gBlankBerryTree = {0}; +  extern u8 BerryTreeScript; -extern struct BerryTree gBlankBerryTree;  extern u16 gScriptItemId;  extern u16 gScriptLastTalked;  extern u16 gSpecialVar_0x8004; @@ -39,8 +818,8 @@ void SetEnigmaBerry(u8 *src)  u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)  { -    u8 *description1; -    u8 *description2; +    const u8 *description1; +    const u8 *description2;      u32 i;      u32 checksum;      u8 *dest; @@ -74,7 +853,7 @@ bool32 IsEnigmaBerryValid(void)      return TRUE;  } -struct Berry *GetBerryInfo(u8 berry) +const struct Berry *GetBerryInfo(u8 berry)  {      if (berry == 0x2B && IsEnigmaBerryValid())          return &gSaveBlock1.enigmaBerry.berry; @@ -319,7 +1098,7 @@ u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)  u8 CalcBerryYield(struct BerryTree *tree)  { -    struct Berry *berry = GetBerryInfo(tree->berry); +    const struct Berry *berry = GetBerryInfo(tree->berry);      u8 min = berry->minYield;      u8 max = berry->maxYield; diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index 040b9acd1..11f6e3ded 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -265,7 +265,7 @@ static void sub_8146480(u8 taskid)  static void sub_81464E4(void)  { -    struct Berry *berryInfo; +    const struct Berry *berryInfo;      u32 size;      s32 sizeMajor;      s32 sizeMinor; @@ -306,7 +306,7 @@ static void sub_81464E4(void)  static void sub_8146600(u8 berry)  { -    struct Berry *berryInfo; +    const struct Berry *berryInfo;      u16 i;      berryInfo = GetBerryInfo(berry + 1); diff --git a/src/credits.c b/src/credits.c index eb8f45374..e0e662904 100644 --- a/src/credits.c +++ b/src/credits.c @@ -180,8 +180,8 @@ extern u8 gBirchHelpGfx[];  extern void *gUnknown_0840B5A0[];  // data/credits -extern u16 gUnknown_0840B7BC[32]; -extern u16 gUnknown_0840B7FC[32]; +const u16 gUnknown_0840B7BC[] = INCBIN_U16("graphics/credits/palette_1.gbapal"); +const u8 gUnknown_0840B7FC[] = INCBIN_U8("graphics/credits/ampersand.4bpp");  extern u8 gUnknown_0840B83C[];  extern u8 gUnknown_0840B84B[];  extern u8 gUnknown_0840B85A[]; @@ -191,8 +191,8 @@ extern struct CreditsEntry *gCreditsEntryPointerTable[][5];  extern u8 gUnknown_0840CA00[][2];  extern struct SpriteSheet gUnknown_0840CAA0;  extern struct SpritePalette gUnknown_0840CAB0; -extern union AnimCmd *gSpriteAnimTable_0840CA54[]; -extern union AnimCmd *gSpriteAnimTable_0840CA94[]; +extern const union AnimCmd *const gSpriteAnimTable_0840CA54[]; +extern const union AnimCmd *const gSpriteAnimTable_0840CA94[];  extern struct SpriteTemplate gSpriteTemplate_840CAEC;  // data/intro_credits_graphics diff --git a/src/intro.c b/src/intro.c index e2fcf3a1c..a2adbe0f5 100644 --- a/src/intro.c +++ b/src/intro.c @@ -46,22 +46,8 @@ extern struct SpriteSheet gTrainerBackPicTable[];  extern struct MonCoords gTrainerBackPicCoords[];  extern struct SpritePalette gTrainerBackPicPaletteTable[]; -extern const u16 gIntro1BGPals[]; -extern const u8 gIntro1BG0_Tilemap[]; -extern const u8 gIntro1BG1_Tilemap[]; -extern const u8 gIntro1BG2_Tilemap[]; -extern const u8 gIntro1BG3_Tilemap[]; -extern const u8 gIntro1BGLeavesGfx[]; -extern const u8 gIntro3PokeballPal[]; -extern const u8 gIntro3Pokeball_Tilemap[]; -extern const u8 gIntro3Pokeball_Gfx[]; -extern const u16 gIntro3Streaks_Pal[]; -extern const u8 gIntro3Streaks_Gfx[]; -extern const u8 gIntro3Streaks_Tilemap[]; -extern union AnimCmd *gUnknown_0840AE80[]; +extern const union AnimCmd *const gUnknown_0840AE80[];  extern const struct SpriteTemplate gSpriteTemplate_840AFF0; -extern const struct SpriteSheet gUnknown_0840B008; -extern const struct SpriteSheet gUnknown_0840B018;  extern const struct SpritePalette gUnknown_0840B028[];  extern const struct SpriteTemplate gSpriteTemplate_840B1F4;  extern const struct SpriteSheet gIntro3PokeballGfx_Table; @@ -82,12 +68,9 @@ extern const u16 gIntroCopyright_Pal[];  extern const u16 gIntroCopyright_Tilemap[];  extern const u16 gUnknown_08393E64[]; -extern const s16 gUnknown_0840AF50[][2]; -extern const s16 gUnknown_0840AF74[][2];  extern const struct SpriteTemplate gSpriteTemplate_840AF94;  extern const struct SpriteTemplate gSpriteTemplate_840AFAC;  extern const struct SpriteTemplate gSpriteTemplate_840AFC4; -extern union AnimCmd *gUnknown_0840B064[];  extern const struct SpriteTemplate gSpriteTemplate_840B084;  extern const struct SpriteTemplate gSpriteTemplate_840B0B0;  extern const struct SpriteTemplate gSpriteTemplate_840B0DC; @@ -100,9 +83,547 @@ extern const u16 gUnknown_0840B188[];  extern const struct SpriteTemplate gSpriteTemplate_840B1B0;  extern const struct SpriteTemplate gSpriteTemplate_840B1C8;  extern void *gUnknown_0840B5A0[]; -  extern const s16 gSineTable[]; +//-------------------------------------------------- +// Graphics Data +//-------------------------------------------------- + +const u16 Palette_406340[] = INCBIN_U16("graphics/intro/unknown1.gbapal"); +const u16 Palette_406360[] = INCBIN_U16("graphics/intro/unknown2.gbapal"); +const u8 gIntroTiles[] = INCBIN_U8("graphics/intro/intro.4bpp.lz"); +static const u16 gIntro1BGPals[][16] = +{ +    INCBIN_U16("graphics/intro/intro1_bgpal1.gbapal"), +    INCBIN_U16("graphics/intro/intro1_bgpal2.gbapal"), +    INCBIN_U16("graphics/intro/intro1_bgpal3.gbapal"), +    INCBIN_U16("graphics/intro/intro1_bgpal4.gbapal"), +    INCBIN_U16("graphics/intro/intro1_bgpal5.gbapal"), +    INCBIN_U16("graphics/intro/intro1_bgpal6.gbapal"), +    INCBIN_U16("graphics/intro/intro1_bgpal7.gbapal"), +    INCBIN_U16("graphics/intro/intro1_bgpal8.gbapal"), +    INCBIN_U16("graphics/intro/intro1_bgpal9.gbapal"), +    INCBIN_U16("graphics/intro/intro1_bgpal10.gbapal"), +    INCBIN_U16("graphics/intro/intro1_bgpal11.gbapal"), +    INCBIN_U16("graphics/intro/intro1_bgpal12.gbapal"), +    INCBIN_U16("graphics/intro/intro1_bgpal13.gbapal"), +    INCBIN_U16("graphics/intro/intro1_bgpal14.gbapal"), +    INCBIN_U16("graphics/intro/intro1_bgpal15.gbapal"), +    INCBIN_U16("graphics/intro/intro1_bgpal16.gbapal"), +}; +static const u8 gIntro1BG0_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg0_map.bin.lz"); +static const u8 gIntro1BG1_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg1_map.bin.lz"); +static const u8 gIntro1BG2_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg2_map.bin.lz"); +static const u8 gIntro1BG3_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg3_map.bin.lz"); +static const u8 gIntro1BGLeavesGfx[] = INCBIN_U8("graphics/intro/introgfx.4bpp.lz"); +static const u16 gIntro3PokeballPal[] = INCBIN_U16("graphics/intro/intro3_pokeball.gbapal"); +static const u8 gIntro3Pokeball_Tilemap[] = INCBIN_U8("graphics/intro/intro3_pokeball_map.bin.lz"); +static const u8 gIntro3Pokeball_Gfx[] = INCBIN_U8("graphics/intro/intro3_pokeball.8bpp.lz"); +static const u16 gIntro3Streaks_Pal[] = INCBIN_U16("graphics/intro/intro3_streaks.gbapal"); +static const u8 gIntro3Streaks_Gfx[] = INCBIN_U8("graphics/intro/intro3_streaks.4bpp.lz"); +static const u8 gIntro3Streaks_Tilemap[] = INCBIN_U8("graphics/intro/intro3_streaks_map.bin.lz"); +const u16 gIntro3Misc1Palette[] = INCBIN_U16("graphics/intro/intro3_misc1.gbapal"); +const u16 gIntro3Misc2Palette[] = INCBIN_U16("graphics/intro/intro3_misc2.gbapal"); +const u8 gIntro3MiscTiles[] = INCBIN_U8("graphics/intro/intro3_misc.4bpp.lz"); +const u16 gIntro1EonPalette[] = INCBIN_U16("graphics/intro/intro1_eon.gbapal"); +const u8 gIntro1EonTiles[] = INCBIN_U8("graphics/intro/intro1_eon.4bpp.lz"); +static const struct OamData gOamData_840ADE8 = +{ +    .y = 160, +    .affineMode = 0, +    .objMode = 0, +    .mosaic = 0, +    .bpp = 0, +    .shape = 0, +    .x = 0, +    .matrixNum = 0, +    .size = 2, +    .tileNum = 0, +    .priority = 0, +    .paletteNum = 0, +    .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_840ADF0[] = +{ +    ANIMCMD_FRAME(16, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840ADF8[] = +{ +    ANIMCMD_FRAME(24, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AE00[] = +{ +    ANIMCMD_FRAME(0, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AE08[] = +{ +    ANIMCMD_FRAME(48, 8), +    ANIMCMD_END, +}; +static const union AnimCmd *const gSpriteAnimTable_840AE10[] = +{ +    gSpriteAnim_840ADF0, +    gSpriteAnim_840ADF8, +    gSpriteAnim_840AE00, +    gSpriteAnim_840AE08, +}; +static void sub_813D208(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_840AE20 = +{ +    .tileTag = 2000, +    .paletteTag = 2000, +    .oam = &gOamData_840ADE8, +    .anims = gSpriteAnimTable_840AE10, +    .images = NULL, +    .affineAnims = gDummySpriteAffineAnimTable, +    .callback = sub_813D208, +}; +static const union AnimCmd Unknown_40AE38[] = +{ +    ANIMCMD_FRAME(0, 4), +    ANIMCMD_FRAME(64, 4), +    ANIMCMD_FRAME(128, 4), +    ANIMCMD_FRAME(192, 4), +    ANIMCMD_JUMP(0), +}; +static const union AnimCmd Unknown_40AE4C[] = +{ +    ANIMCMD_FRAME(0, 8), +    ANIMCMD_FRAME(64, 8), +    ANIMCMD_FRAME(128, 8), +    ANIMCMD_FRAME(192, 8), +    ANIMCMD_JUMP(0), +}; +static const union AnimCmd Unknown_40AE60[] = +{ +    ANIMCMD_FRAME(256, 4), +    ANIMCMD_FRAME(0x140, 4), +    ANIMCMD_FRAME(0x180, 4), +    ANIMCMD_END, +}; +static const union AnimCmd Unknown_40AE70[] = +{ +    ANIMCMD_FRAME(0x180, 16), +    ANIMCMD_FRAME(0x140, 16), +    ANIMCMD_FRAME(256, 16), +    ANIMCMD_END, +}; +static const union AnimCmd *const gUnknown_0840AE80[] = +{ +    Unknown_40AE38, +    Unknown_40AE4C, +    Unknown_40AE60, +    Unknown_40AE70, +}; +const struct OamData gOamData_840AE90 = +{ +    .y = 160, +    .affineMode = 0, +    .objMode = 0, +    .mosaic = 0, +    .bpp = 0, +    .shape = 0, +    .x = 0, +    .matrixNum = 0, +    .size = 1, +    .tileNum = 0, +    .priority = 0, +    .paletteNum = 0, +    .affineParam = 0, +}; +const struct OamData gOamData_840AE98 = +{ +    .y = 160, +    .affineMode = 0, +    .objMode = 0, +    .mosaic = 0, +    .bpp = 0, +    .shape = 0, +    .x = 0, +    .matrixNum = 0, +    .size = 0, +    .tileNum = 0, +    .priority = 0, +    .paletteNum = 0, +    .affineParam = 0, +}; +const struct OamData gOamData_840AEA0 = +{ +    .y = 160, +    .affineMode = 0, +    .objMode = 0, +    .mosaic = 0, +    .bpp = 0, +    .shape = 2, +    .x = 0, +    .matrixNum = 0, +    .size = 3, +    .tileNum = 0, +    .priority = 0, +    .paletteNum = 0, +    .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_840AEA8[] = +{ +    ANIMCMD_FRAME(80, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEB0[] = +{ +    ANIMCMD_FRAME(84, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEB8[] = +{ +    ANIMCMD_FRAME(88, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEC0[] = +{ +    ANIMCMD_FRAME(92, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEC8[] = +{ +    ANIMCMD_FRAME(96, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AED0[] = +{ +    ANIMCMD_FRAME(100, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AED8[] = +{ +    ANIMCMD_FRAME(104, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEE0[] = +{ +    ANIMCMD_FRAME(112, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEE8[] = +{ +    ANIMCMD_FRAME(113, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEF0[] = +{ +    ANIMCMD_FRAME(114, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AEF8[] = +{ +    ANIMCMD_FRAME(115, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AF00[] = +{ +    ANIMCMD_FRAME(116, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AF08[] = +{ +    ANIMCMD_FRAME(117, 8), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_840AF10[] = +{ +    ANIMCMD_FRAME(128, 8), +    ANIMCMD_END, +}; +const union AnimCmd *const gSpriteAnimTable_840AF18[] = +{ +    gSpriteAnim_840AEA8, +    gSpriteAnim_840AEB0, +    gSpriteAnim_840AEB8, +    gSpriteAnim_840AEC0, +    gSpriteAnim_840AEC8, +    gSpriteAnim_840AED0, +    gSpriteAnim_840AED8, +}; +const union AnimCmd *const gSpriteAnimTable_840AF34[] = +{ +    gSpriteAnim_840AEE0, +    gSpriteAnim_840AEE8, +    gSpriteAnim_840AEF0, +    gSpriteAnim_840AEF8, +    gSpriteAnim_840AF00, +    gSpriteAnim_840AF08, +}; +const union AnimCmd *const gSpriteAnimTable_840AF4C[] = +{ +    gSpriteAnim_840AF10, +}; +static const s16 gUnknown_0840AF50[][2] = +{ +    {0, -72}, +    {1, -56}, +    {2, -40}, +    {3, -24}, +    {4, 8}, +    {5, 24}, +    {3, 40}, +    {1, 56}, +    {6, 72}, +}; +static const s16 gUnknown_0840AF74[][2] = +{ +    {0, -28}, +    {1, -20}, +    {2, -12}, +    {3, -4}, +    {2, 4}, +    {4, 12}, +    {5, 20}, +    {3, 28}, +}; +void sub_813D908(struct Sprite *sprite); +const struct SpriteTemplate gSpriteTemplate_840AF94 = +{ +    .tileTag = 2000, +    .paletteTag = 2001, +    .oam = &gOamData_840AE90, +    .anims = gSpriteAnimTable_840AF18, +    .images = NULL, +    .affineAnims = gDummySpriteAffineAnimTable, +    .callback = sub_813D908, +}; +const struct SpriteTemplate gSpriteTemplate_840AFAC = +{ +    .tileTag = 2000, +    .paletteTag = 2001, +    .oam = &gOamData_840AE98, +    .anims = gSpriteAnimTable_840AF34, +    .images = NULL, +    .affineAnims = gDummySpriteAffineAnimTable, +    .callback = sub_813D908, +}; +const struct SpriteTemplate gSpriteTemplate_840AFC4 = +{ +    .tileTag = 2000, +    .paletteTag = 2001, +    .oam = &gOamData_840AEA0, +    .anims = gSpriteAnimTable_840AF4C, +    .images = NULL, +    .affineAnims = gDummySpriteAffineAnimTable, +    .callback = sub_813D908, +}; +const struct OamData gOamData_840AFDC = +{ +    .y = 160, +    .affineMode = 0, +    .objMode = 0, +    .mosaic = 0, +    .bpp = 0, +    .shape = 1, +    .x = 0, +    .matrixNum = 0, +    .size = 3, +    .tileNum = 0, +    .priority = 0, +    .paletteNum = 0, +    .affineParam = 0, +}; +const union AnimCmd gSpriteAnim_840AFE4[] = +{ +    ANIMCMD_FRAME(0, 10), +    ANIMCMD_JUMP(0), +}; +const union AnimCmd *const gSpriteAnimTable_840AFEC[] = +{ +    gSpriteAnim_840AFE4, +}; +void sub_813DA64(struct Sprite *sprite); +const struct SpriteTemplate gSpriteTemplate_840AFF0 = +{ +    .tileTag = 2002, +    .paletteTag = 2002, +    .oam = &gOamData_840AFDC, +    .anims = gSpriteAnimTable_840AFEC, +    .images = NULL, +    .affineAnims = gDummySpriteAffineAnimTable, +    .callback = sub_813DA64, +}; +const struct SpriteSheet gUnknown_0840B008[] = +{ +    {gIntroTiles, 0x1400, 2000}, +    {NULL}, +}; +const struct SpriteSheet gUnknown_0840B018[] = +{ +    {gIntro1EonTiles, 0x400, 2002}, +    {NULL}, +}; +const struct SpritePalette gUnknown_0840B028[] = +{ +    {Palette_406340, 2000}, +    {Palette_406360, 2001}, +    {gIntro1EonPalette, 2002}, +    {NULL}, +}; +const union AnimCmd gUnknown_0840B048[] = +{ +    ANIMCMD_FRAME(3, 0), +    ANIMCMD_END, +}; +const union AnimCmd gUnknown_0840B050[] = +{ +    ANIMCMD_FRAME(0, 8), +    ANIMCMD_END, +}; +const union AnimCmd gUnknown_0840B058[] = +{ +    ANIMCMD_FRAME(1, 8), +    ANIMCMD_FRAME(2, 8), +    ANIMCMD_END, +}; +const union AnimCmd *const gUnknown_0840B064[] = +{ +    gUnknown_0840B048, +    gUnknown_0840B050, +    gUnknown_0840B058, +}; +const struct OamData gOamData_840B070 = +{ +    .y = 160, +    .affineMode = 0, +    .objMode = 0, +    .mosaic = 0, +    .bpp = 0, +    .shape = 0, +    .x = 0, +    .matrixNum = 0, +    .size = 1, +    .tileNum = 0, +    .priority = 1, +    .paletteNum = 0, +    .affineParam = 0, +}; +const union AnimCmd gSpriteAnim_840B078[] = +{ +    ANIMCMD_FRAME(0, 8), +    ANIMCMD_END, +}; +const union AnimCmd *const gSpriteAnimTable_840B080[] = +{ +    gSpriteAnim_840B078, +}; +void sub_813E30C(struct Sprite *sprite); +const struct SpriteTemplate gSpriteTemplate_840B084 = +{ +    .tileTag = 2002, +    .paletteTag = 2002, +    .oam = &gOamData_840B070, +    .anims = gSpriteAnimTable_840B080, +    .images = NULL, +    .affineAnims = gDummySpriteAffineAnimTable, +    .callback = sub_813E30C, +}; +const struct OamData gOamData_840B09C = +{ +    .y = 160, +    .affineMode = 0, +    .objMode = 0, +    .mosaic = 0, +    .bpp = 0, +    .shape = 0, +    .x = 0, +    .matrixNum = 0, +    .size = 0, +    .tileNum = 0, +    .priority = 1, +    .paletteNum = 0, +    .affineParam = 0, +}; +const union AnimCmd gSpriteAnim_840B0A4[] = +{ +    ANIMCMD_FRAME(1, 8), +    ANIMCMD_END, +}; +const union AnimCmd *const gSpriteAnimTable_840B0AC[] = +{ +    gSpriteAnim_840B0A4, +}; +void sub_813E4B8(struct Sprite *sprite); +const struct SpriteTemplate gSpriteTemplate_840B0B0 = +{ +    .tileTag = 2003, +    .paletteTag = 2003, +    .oam = &gOamData_840B09C, +    .anims = gSpriteAnimTable_840B0AC, +    .images = NULL, +    .affineAnims = gDummySpriteAffineAnimTable, +    .callback = sub_813E4B8, +}; +const struct OamData gOamData_840B0C8 = +{ +    .y = 160, +    .affineMode = 0, +    .objMode = 0, +    .mosaic = 0, +    .bpp = 0, +    .shape = 0, +    .x = 0, +    .matrixNum = 0, +    .size = 0, +    .tileNum = 0, +    .priority = 1, +    .paletteNum = 0, +    .affineParam = 0, +}; +const union AnimCmd gSpriteAnim_840B0D0[] = +{ +    ANIMCMD_FRAME(14, 8), +    ANIMCMD_END, +}; +const union AnimCmd *const gSpriteAnimTable_840B0D8[] = +{ +    gSpriteAnim_840B0D0, +}; +void sub_813E5E0(struct Sprite *sprite); +const struct SpriteTemplate gSpriteTemplate_840B0DC = +{ +    .tileTag = 2003, +    .paletteTag = 2004, +    .oam = &gOamData_840B0C8, +    .anims = gSpriteAnimTable_840B0D8, +    .images = NULL, +    .affineAnims = gDummySpriteAffineAnimTable, +    .callback = sub_813E5E0, +}; +void sub_813E6C0(struct Sprite *sprite); +const struct SpriteTemplate gSpriteTemplate_840B0F4 = +{ +    .tileTag = 2003, +    .paletteTag = 2004, +    .oam = &gOamData_840B0C8, +    .anims = gSpriteAnimTable_840B0D8, +    .images = NULL, +    .affineAnims = gDummySpriteAffineAnimTable, +    .callback = sub_813E6C0, +}; +const struct OamData gOamData_840B10C = +{ +    .y = 160, +    .affineMode = 0, +    .objMode = 0, +    .mosaic = 0, +    .bpp = 0, +    .shape = 0, +    .x = 0, +    .matrixNum = 0, +    .size = 1, +    .tileNum = 0, +    .priority = 1, +    .paletteNum = 0, +    .affineParam = 0, +}; +  static void MainCB2_EndIntro(void);  static void Task_IntroLoadPart1Graphics(u8);  static void Task_IntroFadeIn(u8); @@ -288,13 +809,13 @@ static void Task_IntroLoadPart1Graphics(u8 taskId)      DmaClear16(3, VRAM + 0xA800, 0x800);      LZ77UnCompVram(gIntro1BG3_Tilemap, (void *)(VRAM + 0xB000));      DmaClear16(3, VRAM + 0xB800, 0x800); -    LoadPalette(gIntro1BGPals, 0, 0x200); +    LoadPalette(gIntro1BGPals, 0, sizeof(gIntro1BGPals));      REG_BG3CNT = 0x9603;      REG_BG2CNT = 0x9402;      REG_BG1CNT = 0x9201;      REG_BG0CNT = 0x9000; -    LoadCompressedObjectPic(&gUnknown_0840B008); -    LoadCompressedObjectPic(&gUnknown_0840B018); +    LoadCompressedObjectPic(&gUnknown_0840B008[0]); +    LoadCompressedObjectPic(&gUnknown_0840B018[0]);      LoadSpritePalettes(gUnknown_0840B028);      CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1F0, 0x20);      CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1E1, 0x1E); @@ -1198,7 +1719,7 @@ void sub_813D158(struct Sprite *sprite)      }  } -void sub_813D208(struct Sprite *sprite) +static void sub_813D208(struct Sprite *sprite)  {      if (sprite->data0 != 0)          sprite->callback = sub_813D220; diff --git a/src/main_menu.c b/src/main_menu.c index c586e2b08..f47b3bb47 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -69,7 +69,7 @@ extern const u8 gUnknown_081E7834[];  extern const u8 gUnknown_081E796C[];  extern const u8 gSystemText_NewPara[]; -extern u8 gSpriteAffineAnimTable_81E79AC[]; +extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E79AC[];  extern u8 unk_2000000[]; @@ -1256,7 +1256,7 @@ static void Task_NewGameSpeech30(u8 taskId)              spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID];              gSprites[spriteId].oam.affineMode = 1; -            gSprites[spriteId].affineAnims = (union AffineAnimCmd **)gSpriteAffineAnimTable_81E79AC; +            gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E79AC;              InitSpriteAffineAnim(&gSprites[spriteId]);              StartSpriteAffineAnim(&gSprites[spriteId], 0);              gSprites[spriteId].callback = ShrinkPlayerSprite; diff --git a/src/pokemon_2.c b/src/pokemon_2.c index 87d95e1fa..ecdd1af20 100644 --- a/src/pokemon_2.c +++ b/src/pokemon_2.c @@ -39,10 +39,11 @@ extern u32 gBitTable[];  extern struct BaseStats gBaseStats[];  extern u8 gSpeciesNames[][11];  extern struct BattleMove gBattleMoves[]; -extern struct SpriteTemplate gSpriteTemplate_8208288[]; -extern union AmimCmd *gSpriteAnimTable_81E7C64[]; -extern union AnimCmd **gUnknown_081EC2A4[]; -extern union AnimCmd **gUnknown_081ECACC[]; +extern const struct SpriteTemplate gSpriteTemplate_8208288[]; +extern const union AmimCmd *const gSpriteAnimTable_81E7C64[]; +//array of pointers to arrays of pointers to union AnimCmd (We probably need to typedef this.) +extern const union AnimCmd *const *const gUnknown_081EC2A4[]; +extern const union AnimCmd *const *const gUnknown_081ECACC[];  extern u8 gTrainerClassToPicIndex[];  extern u8 gTrainerClassToNameIndex[];  extern u8 gSecretBaseTrainerClasses[]; @@ -248,7 +249,8 @@ void GetMonSpriteTemplate_803C56C(u16 species, u8 a2)  {      gUnknown_02024E8C = gSpriteTemplate_8208288[a2];      gUnknown_02024E8C.paletteTag = species; -    gUnknown_02024E8C.anims = (union AnimCmd **)gSpriteAnimTable_81E7C64; +    //Don't know why the compiler says this is incompatible +    gUnknown_02024E8C.anims = (const union AnimCmd *const *)gSpriteAnimTable_81E7C64;  }  void GetMonSpriteTemplate_803C5A0(u16 species, u8 a2) diff --git a/src/sprite.c b/src/sprite.c index 8e8833536..987f2a812 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -36,7 +36,7 @@ struct OamMatrix  struct SpriteCopyRequest  { -    u8 *src; +    const u8 *src;      u8 *dest;      u16 size;  }; @@ -95,7 +95,7 @@ static void ApplyAffineAnimFrame(u8 matrixNum, struct AffineAnimFrameCmd *frameC  static void ResetAffineAnimData(void);  static u8 IndexOfSpriteTileTag(u16 tag);  static void AllocSpriteTileRange(u16 tag, u16 start, u16 count); -static void DoLoadSpritePalette(u16 *src, u16 paletteOffset); +static void DoLoadSpritePalette(const u16 *src, u16 paletteOffset);  typedef void (*AnimFunc)(struct Sprite *);  typedef void (*AnimCmdFunc)(struct Sprite *); @@ -171,51 +171,51 @@ static const u8 sCenterToCornerVecTable[3][4][2] =  static const struct Sprite sDummySprite =  { -    DUMMY_OAM_DATA, -    (union AnimCmd **)gDummySpriteAnimTable, -    NULL, -    (union AffineAnimCmd **)gDummySpriteAffineAnimTable, -    (struct SpriteTemplate *)&gDummySpriteTemplate, -    NULL, -    SpriteCallbackDummy, -    { 304, 160 }, -    {   0,   0 }, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0, -    0xFF +    .oam = DUMMY_OAM_DATA, +    .anims = gDummySpriteAnimTable, +    .images = NULL, +    .affineAnims = gDummySpriteAffineAnimTable, +    .template = &gDummySpriteTemplate, +    .subspriteTables = NULL, +    .callback = SpriteCallbackDummy, +    .pos1 = { 304, 160 }, +    .pos2 = {   0,   0 }, +    .centerToCornerVecX = 0, +    .centerToCornerVecY = 0, +    .animNum = 0, +    .animCmdIndex = 0, +    .animDelayCounter = 0, +    .animPaused = 0, +    .affineAnimPaused = 0, +    .animLoopCounter = 0, +    .data0 = 0, +    .data1 = 0, +    .data2 = 0, +    .data3 = 0, +    .data4 = 0, +    .data5 = 0, +    .data6 = 0, +    .data7 = 0, +    .inUse = 0, +    .coordOffsetEnabled = 0, +    .invisible = 0, +    .flags_3 = 0, +    .flags_4 = 0, +    .flags_5 = 0, +    .flags_6 = 0, +    .flags_7 = 0, +    .hFlip = 0, +    .vFlip = 0, +    .animBeginning = 0, +    .affineAnimBeginning = 0, +    .animEnded = 0, +    .affineAnimEnded = 0, +    .usingSheet = 0, +    .flags_f = 0, +    .sheetTileStart = 0, +    .subspriteTableNum = 0, +    .subspriteMode = 0, +    .subpriority = 0xFF  };  const struct OamData gDummyOamData = DUMMY_OAM_DATA; @@ -230,13 +230,13 @@ const union AffineAnimCmd * const gDummySpriteAffineAnimTable[] = { &sDummyAffin  const struct SpriteTemplate gDummySpriteTemplate =  { -    0, -    0xFFFF, -    (struct OamData *)&gDummyOamData, -    (union AnimCmd **)gDummySpriteAnimTable, -    NULL, -    (union AffineAnimCmd **)gDummySpriteAffineAnimTable, -    SpriteCallbackDummy +    .tileTag = 0, +    .paletteTag = 0xFFFF, +    .oam = &gDummyOamData, +    .anims = gDummySpriteAnimTable, +    .images = NULL, +    .affineAnims = gDummySpriteAffineAnimTable, +    .callback = SpriteCallbackDummy  };  // TODO: Find out what these are used for. @@ -840,7 +840,7 @@ static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, struct SpriteFra      }  } -void RequestSpriteCopy(u8 *src, u8 *dest, u16 size) +void RequestSpriteCopy(const u8 *src, u8 *dest, u16 size)  {      if (gSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS)      { @@ -1515,7 +1515,7 @@ void AllocTilesForSpriteSheets(struct SpriteSheet *sheets)  void LoadTilesForSpriteSheet(const struct SpriteSheet *sheet)  { -    u8 *data = sheet->data; +    const u8 *data = sheet->data;      u16 tileStart = GetSpriteTileStartByTag(sheet->tag);      CpuCopy16(data, (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size);  } @@ -1601,7 +1601,7 @@ static void AllocSpriteTileRange(u16 tag, u16 start, u16 count)  void RequestSpriteSheetCopy(const struct SpriteSheet *sheet)  { -    u8 *data = sheet->data; +    const u8 *data = sheet->data;      u16 tileStart = GetSpriteTileStartByTag(sheet->tag);      RequestSpriteCopy(data, (u8 *)OBJ_VRAM0 + tileStart * TILE_SIZE_4BPP, sheet->size);  } @@ -1659,7 +1659,7 @@ void LoadSpritePalettes(const struct SpritePalette *palettes)              break;  } -static void DoLoadSpritePalette(u16 *src, u16 paletteOffset) +static void DoLoadSpritePalette(const u16 *src, u16 paletteOffset)  {      LoadPalette(src, paletteOffset + 0x100, 32);  } diff --git a/src/starter_choose.c b/src/starter_choose.c index 4a6fb11eb..29c090fc0 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -8,6 +8,7 @@  #include "pokedex.h"  #include "songs.h"  #include "sound.h" +#include "species.h"  #include "sprite.h"  #include "string_util.h"  #include "task.h" @@ -18,17 +19,159 @@ struct MonCoords      u8 x, y;  }; +const u16 gBirchBagGrassPal[][16] = +{ +    INCBIN_U16("graphics/misc/birch_bag.gbapal"), +    INCBIN_U16("graphics/misc/birch_grass.gbapal"), +}; +const u16 gBirchBallarrow_Pal[] = INCBIN_U16("graphics/misc/birch_ballarrow.gbapal"); +const u16 gBirchCircle_Pal[] = INCBIN_U16("graphics/misc/birch_circle.gbapal"); +const u8 gBirchBagTilemap[] = INCBIN_U8("graphics/misc/birch_bag_map.bin.lz"); +const u8 gBirchGrassTilemap[] = INCBIN_U8("graphics/misc/birch_grass_map.bin.lz"); +const u8 gBirchHelpGfx[] = INCBIN_U8("graphics/misc/birch_help.4bpp.lz"); +const u8 gBirchBallarrow_Gfx[] = INCBIN_U8("graphics/misc/birch_ballarrow.4bpp.lz"); +const u8 gBirchCircle_Gfx[] = INCBIN_U8("graphics/misc/birch_circle.4bpp.lz"); +const u8 gStarterChoose_PokeballCoords[][2] = +{ +    {60, 64}, +    {120, 88}, +    {180, 64}, +}; +const u8 gStarterChoose_LabelCoords[][2] = +{ +    {0, 9}, +    {16, 10}, +    {8, 4}, +}; +const u16 gStarterMons[] = {SPECIES_TREECKO, SPECIES_TORCHIC, SPECIES_MUDKIP}; +const struct OamData gOamData_83F76CC = +{ +    .y = 160, +    .affineMode = 0, +    .objMode = 0, +    .mosaic = 0, +    .bpp = 0, +    .shape = 0, +    .x = 0, +    .matrixNum = 0, +    .size = 2, +    .tileNum = 0, +    .priority = 1, +    .paletteNum = 0, +    .affineParam = 0, +}; +const struct OamData gOamData_83F76D4 = +{ +    .y = 160, +    .affineMode = 0, +    .objMode = 0, +    .mosaic = 0, +    .bpp = 0, +    .shape = 0, +    .x = 0, +    .matrixNum = 0, +    .size = 2, +    .tileNum = 0, +    .priority = 1, +    .paletteNum = 0, +    .affineParam = 0, +}; +const struct OamData gOamData_83F76DC = +{ +    .y = 160, +    .affineMode = 3, +    .objMode = 0, +    .mosaic = 0, +    .bpp = 0, +    .shape = 0, +    .x = 0, +    .matrixNum = 0, +    .size = 3, +    .tileNum = 0, +    .priority = 1, +    .paletteNum = 0, +    .affineParam = 0, +}; +const u8 gUnknown_083F76E4[][2] = +{ +    {60, 32}, +    {120, 56}, +    {180, 32}, +    {0, 0}, +}; +const union AnimCmd gSpriteAnim_83F76EC[] = +{ +    ANIMCMD_FRAME(48, 30), +    ANIMCMD_END, +}; +const union AnimCmd gSpriteAnim_83F76F4[] = +{ +    ANIMCMD_FRAME(0, 30), +    ANIMCMD_END, +}; +const union AnimCmd gSpriteAnim_83F76FC[] = +{ +    ANIMCMD_FRAME(16, 4), +    ANIMCMD_FRAME(0, 4), +    ANIMCMD_FRAME(32, 4), +    ANIMCMD_FRAME(0, 4), +    ANIMCMD_FRAME(16, 4), +    ANIMCMD_FRAME(0, 4), +    ANIMCMD_FRAME(32, 4), +    ANIMCMD_FRAME(0, 4), +    ANIMCMD_FRAME(0, 32), +    ANIMCMD_FRAME(16, 8), +    ANIMCMD_FRAME(0, 8), +    ANIMCMD_FRAME(32, 8), +    ANIMCMD_FRAME(0, 8), +    ANIMCMD_FRAME(16, 8), +    ANIMCMD_FRAME(0, 8), +    ANIMCMD_FRAME(32, 8), +    ANIMCMD_FRAME(0, 8), +    ANIMCMD_JUMP(0), +}; +const union AnimCmd gSpriteAnim_83F7744[] = +{ +    ANIMCMD_FRAME(0, 8), +    ANIMCMD_END, +}; +const union AnimCmd *const gSpriteAnimTable_83F774C[] = +{ +    gSpriteAnim_83F76EC, +}; +const union AnimCmd *const gSpriteAnimTable_83F7750[] = +{ +    gSpriteAnim_83F76F4, +    gSpriteAnim_83F76FC, +}; +const union AnimCmd *const gSpriteAnimTable_83F7758[] = +{ +    gSpriteAnim_83F7744, +}; +const union AffineAnimCmd gSpriteAffineAnim_83F775C[] = +{ +    AFFINEANIMCMD_FRAME(16, 16, 0, 0), +    AFFINEANIMCMD_FRAME(16, 16, 0, 15), +    AFFINEANIMCMD_END, +}; +const union AffineAnimCmd gSpriteAffineAnim_83F7774[] = +{ +    AFFINEANIMCMD_FRAME(20, 20, 0, 0), +    AFFINEANIMCMD_FRAME(20, 20, 0, 15), +    AFFINEANIMCMD_END, +}; +const union AffineAnimCmd *const gSpriteAffineAnimTable_83F778C[] = +{ +    gSpriteAffineAnim_83F775C, +}; +const union AffineAnimCmd *const gSpriteAffineAnimTable_83F7790[] = +{ +    gSpriteAffineAnim_83F7774, +}; +  extern void * const gUnknown_081FAF4C[]; -extern const u8 gStarterChoose_PokeballCoords[][2]; -extern u8 gBirchHelpGfx[]; -extern u8 gBirchBagTilemap[]; -extern u8 gBirchGrassTilemap[]; -extern struct SpriteSheet gUnknown_083F7794; -extern struct SpriteSheet gUnknown_083F77A4; -extern u8 gBirchBagGrassPal[]; -extern const u8 gStarterChoose_LabelCoords[][2]; -extern u16 gStarterMons[]; -extern union AffineAnimCmd *gSpriteAffineAnimTable_83F778C[]; +extern const struct SpriteSheet gUnknown_083F7794; +extern const struct SpriteSheet gUnknown_083F77A4;  extern u8 gOtherText_DoYouChoosePoke[];  extern u16 gScriptResult;  extern u8 gSpeciesNames[][11]; @@ -36,7 +179,6 @@ extern u8 gOtherText_Poke[];  extern const struct SpriteSheet gMonFrontPicTable[];  extern const struct MonCoords gMonFrontPicCoords[];  extern const struct SpritePalette gMonPaletteTable[]; -extern u8 gUnknown_083F76E4[][2];  extern u8 gOtherText_BirchInTrouble[];  extern struct SpriteTemplate gSpriteTemplate_83F77E4; @@ -116,7 +258,7 @@ void CB2_ChooseStarter(void)      ResetSpriteData();      ResetPaletteFade();      FreeAllSpritePalettes(); -    LoadPalette(gBirchBagGrassPal, 0, 0x40); +    LoadPalette(gBirchBagGrassPal, 0, sizeof(gBirchBagGrassPal));      LoadCompressedObjectPic(&gUnknown_083F7794);      LoadCompressedObjectPic(&gUnknown_083F77A4);      LoadSpritePalettes(gUnknown_083F77B4); diff --git a/src/wallclock.c b/src/wallclock.c index dc9d871e7..2f4d694a6 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -12,21 +12,142 @@  #include "trig.h"  extern u16 gSpecialVar_0x8004; -extern u16 gMiscClockMale_Pal[]; -extern u16 gMiscClockFemale_Pal[];  extern u8 gMiscClock_Gfx[]; -extern struct SpriteSheet gUnknown_083F7A90; -extern struct SpritePalette gUnknown_083F7AA0;  extern u8 gUnknown_08E95774[];  extern u8 gUnknown_08E954B0[];  extern u8 gOtherText_CorrectTimePrompt[];  extern const struct MenuAction gMenuYesNoItems[]; -extern s8 gClockHandCoords[][2]; +extern u16 gMiscClockMale_Pal[]; +extern u16 gMiscClockFemale_Pal[]; + +//-------------------------------------------------- +// Graphics Data +//-------------------------------------------------- -extern struct SpriteTemplate gSpriteTemplate_83F7AD8; -extern struct SpriteTemplate gSpriteTemplate_83F7AF0; -extern struct SpriteTemplate gSpriteTemplate_83F7B28; -extern struct SpriteTemplate gSpriteTemplate_83F7B40; +static const u8 ClockGfx_Misc[] = INCBIN_U8("graphics/misc/clock_misc.4bpp.lz"); +static const struct SpriteSheet gUnknown_083F7A90[] = +{ +    {ClockGfx_Misc, 0x2000, 0x1000}, +    {NULL}, +}; +static const struct SpritePalette gUnknown_083F7AA0[] = +{ +    {gMiscClockMale_Pal, 0x1000}, +    {gMiscClockFemale_Pal, 0x1001}, +    {NULL}, +}; +static const struct OamData gOamData_83F7AB8 = +{ +    .y = 160, +    .affineMode = 0, +    .objMode = 0, +    .mosaic = 0, +    .bpp = 0, +    .shape = 0, +    .x = 0, +    .matrixNum = 0, +    .size = 3, +    .tileNum = 0, +    .priority = 1, +    .paletteNum = 0, +    .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_83F7AC0[] = +{ +    ANIMCMD_FRAME(0, 30), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83F7AC8[] = +{ +    ANIMCMD_FRAME(64, 30), +    ANIMCMD_END, +}; +static const union AnimCmd *const gSpriteAnimTable_83F7AD0[] = +{ +    gSpriteAnim_83F7AC0, +}; +static const union AnimCmd *const gSpriteAnimTable_83F7AD4[] = +{ +    gSpriteAnim_83F7AC8, +}; +static void sub_810B05C(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_83F7AD8 = +{ +    .tileTag = 0x1000, +    .paletteTag = 0x1000, +    .oam = &gOamData_83F7AB8, +    .anims = gSpriteAnimTable_83F7AD0, +    .images = NULL, +    .affineAnims = gDummySpriteAffineAnimTable, +    .callback = sub_810B05C, +}; +static void sub_810B0F4(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_83F7AF0 = +{ +    .tileTag = 0x1000, +    .paletteTag = 0x1000, +    .oam = &gOamData_83F7AB8, +    .anims = gSpriteAnimTable_83F7AD4, +    .images = NULL, +    .affineAnims = gDummySpriteAffineAnimTable, +    .callback = sub_810B0F4, +}; +static const struct OamData gOamData_83F7B08 = +{ +    .y = 160, +    .affineMode = 0, +    .objMode = 0, +    .mosaic = 0, +    .bpp = 0, +    .shape = 0, +    .x = 0, +    .matrixNum = 0, +    .size = 1, +    .tileNum = 0, +    .priority = 2, +    .paletteNum = 0, +    .affineParam = 0, +}; +static const union AnimCmd gSpriteAnim_83F7B10[] = +{ +    ANIMCMD_FRAME(132, 30), +    ANIMCMD_END, +}; +static const union AnimCmd gSpriteAnim_83F7B18[] = +{ +    ANIMCMD_FRAME(128, 30), +    ANIMCMD_END, +}; +static const union AnimCmd *const gSpriteAnimTable_83F7B20[] = +{ +    gSpriteAnim_83F7B10, +}; +static const union AnimCmd *const gSpriteAnimTable_83F7B24[] = +{ +    gSpriteAnim_83F7B18, +}; +static void sub_810B18C(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_83F7B28 = +{ +    .tileTag = 0x1000, +    .paletteTag = 0x1000, +    .oam = &gOamData_83F7B08, +    .anims = gSpriteAnimTable_83F7B20, +    .images = NULL, +    .affineAnims = gDummySpriteAffineAnimTable, +    .callback = sub_810B18C, +}; +static void sub_810B230(struct Sprite *sprite); +static const struct SpriteTemplate gSpriteTemplate_83F7B40 = +{ +    .tileTag = 0x1000, +    .paletteTag = 0x1000, +    .oam = &gOamData_83F7B08, +    .anims = gSpriteAnimTable_83F7B24, +    .images = NULL, +    .affineAnims = gDummySpriteAffineAnimTable, +    .callback = sub_810B230, +};  static void WallClockVblankCallback(void);  static void LoadWallClockGraphics(void); @@ -48,25 +169,17 @@ static u8 AdvanceClock(u8 taskId, u8 direction);  static void UpdateClockPeriod(u8 taskId, u8 direction);  static void InitClockWithRtc(u8 taskId); -//Task data -enum { -    TD_MHAND_ANGLE, -    TD_HHAND_ANGLE, -    TD_HOURS, -    TD_MINUTES, -    TD_SETDIRECTION,    //Movement direction when setting the clock -    TD_PERIOD,          //Whether the time is AM or PM -    TD_SETSPEED,        //Movement speed when setting the clock -}; - -enum { -    AM, -    PM +enum +{ +    PERIOD_AM, +    PERIOD_PM,  }; -enum { -    BACKWARD = 1, -    FORWARD +enum +{ +    MVMT_NONE, +    MVMT_BACKWARD, +    MVMT_FORWARD,  };  static void WallClockVblankCallback(void) @@ -122,8 +235,8 @@ static void LoadWallClockGraphics(void)      ResetSpriteData();      ResetPaletteFade();      FreeAllSpritePalettes(); -    LoadCompressedObjectPic(&gUnknown_083F7A90); -    LoadSpritePalettes(&gUnknown_083F7AA0); +    LoadCompressedObjectPic(&gUnknown_083F7A90[0]); +    LoadSpritePalettes(gUnknown_083F7AA0);      SetUpWindowConfig(&gWindowConfig_81E6C3C);      InitMenuWindow(&gWindowConfig_81E6CE4);  } @@ -149,6 +262,14 @@ static void WallClockInit(void)        DISPCNT_BG3_ON | DISPCNT_OBJ_ON;  } +#define tMinuteHandAngle data[0] +#define tHourHandAngle data[1] +#define tHours data[2] +#define tMinutes data[3] +#define tMvmtDir data[4] +#define tPeriod data[5] +#define tMvmtSpeed data[6] +  //Allow player to set the clock  void CB2_StartWallClock(void)  { @@ -159,29 +280,29 @@ void CB2_StartWallClock(void)      LZ77UnCompVram(&gUnknown_08E954B0, (void *)(VRAM + 0x3800));      taskId = CreateTask(Task_SetClock1, 0); -    gTasks[taskId].data[TD_HOURS] = 10; -    gTasks[taskId].data[TD_MINUTES] = 0; -    gTasks[taskId].data[TD_SETDIRECTION] = 0; -    gTasks[taskId].data[TD_PERIOD] = AM; -    gTasks[taskId].data[TD_SETSPEED] = 0; -    gTasks[taskId].data[TD_MHAND_ANGLE] = 0; -    gTasks[taskId].data[TD_HHAND_ANGLE] = 300; - -    spriteId = CreateSprite(&gSpriteTemplate_83F7AD8, 0x78, 0x50, 1); +    gTasks[taskId].tHours = 10; +    gTasks[taskId].tMinutes = 0; +    gTasks[taskId].tMvmtDir = MVMT_NONE; +    gTasks[taskId].tPeriod = PERIOD_AM; +    gTasks[taskId].tMvmtSpeed = 0; +    gTasks[taskId].tMinuteHandAngle = 0; +    gTasks[taskId].tHourHandAngle = 300; + +    spriteId = CreateSprite(&gSpriteTemplate_83F7AD8, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 1);      gSprites[spriteId].data0 = taskId;      gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;      gSprites[spriteId].oam.matrixNum = 0; -    spriteId = CreateSprite(&gSpriteTemplate_83F7AF0, 0x78, 0x50, 0); +    spriteId = CreateSprite(&gSpriteTemplate_83F7AF0, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 0);      gSprites[spriteId].data0 = taskId;      gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;      gSprites[spriteId].oam.matrixNum = 1; -    spriteId = CreateSprite(&gSpriteTemplate_83F7B28, 0x78, 0x50, 2); +    spriteId = CreateSprite(&gSpriteTemplate_83F7B28, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 2);      gSprites[spriteId].data0 = taskId;      gSprites[spriteId].data1 = 45; -    spriteId = CreateSprite(&gSpriteTemplate_83F7B40, 0x78, 0x50, 2); +    spriteId = CreateSprite(&gSpriteTemplate_83F7B40, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 2);      gSprites[spriteId].data0 = taskId;      gSprites[spriteId].data1 = 90; @@ -201,7 +322,7 @@ void CB2_ViewWallClock(void)      taskId = CreateTask(Task_ViewClock1, 0);      InitClockWithRtc(taskId); -    if (gTasks[taskId].data[TD_PERIOD] == 0) +    if (gTasks[taskId].tPeriod == PERIOD_AM)      {          angle1 = 45;          angle2 = 90; @@ -250,17 +371,17 @@ static void Task_SetClock1(u8 taskId)  //Handle keypresses when setting clock  static void Task_SetClock2(u8 taskId)  { -    if (gTasks[taskId].data[TD_MHAND_ANGLE] % 6) +    if (gTasks[taskId].tMinuteHandAngle % 6)      { -        gTasks[taskId].data[TD_MHAND_ANGLE] = CalcNewMinHandAngle( -          gTasks[taskId].data[TD_MHAND_ANGLE], -          gTasks[taskId].data[TD_SETDIRECTION], -          gTasks[taskId].data[TD_SETSPEED]); +        gTasks[taskId].tMinuteHandAngle = CalcNewMinHandAngle( +          gTasks[taskId].tMinuteHandAngle, +          gTasks[taskId].tMvmtDir, +          gTasks[taskId].tMvmtSpeed);      }      else      { -        gTasks[taskId].data[TD_MHAND_ANGLE] = gTasks[taskId].data[TD_MINUTES] * 6; -        gTasks[taskId].data[TD_HHAND_ANGLE] = (gTasks[taskId].data[TD_HOURS] % 12) * 30 + (gTasks[taskId].data[TD_MINUTES] / 10) * 5; +        gTasks[taskId].tMinuteHandAngle = gTasks[taskId].tMinutes * 6; +        gTasks[taskId].tHourHandAngle = (gTasks[taskId].tHours % 12) * 30 + (gTasks[taskId].tMinutes / 10) * 5;          if (gMain.newKeys & A_BUTTON)          {              gTasks[taskId].func = Task_SetClock3; @@ -268,24 +389,24 @@ static void Task_SetClock2(u8 taskId)          }          else          { -            gTasks[taskId].data[TD_SETDIRECTION] = gMain.newKeys & A_BUTTON; +            gTasks[taskId].tMvmtDir = gMain.newKeys & A_BUTTON;              if (gMain.heldKeys & DPAD_LEFT) -                gTasks[taskId].data[TD_SETDIRECTION] = BACKWARD; +                gTasks[taskId].tMvmtDir = MVMT_BACKWARD;              if (gMain.heldKeys & DPAD_RIGHT) -                gTasks[taskId].data[TD_SETDIRECTION] = FORWARD; -            if (gTasks[taskId].data[TD_SETDIRECTION]) +                gTasks[taskId].tMvmtDir = MVMT_FORWARD; +            if (gTasks[taskId].tMvmtDir)              { -                if (gTasks[taskId].data[TD_SETSPEED] <= 0xFE) -                    gTasks[taskId].data[TD_SETSPEED]++; -                gTasks[taskId].data[TD_MHAND_ANGLE] = CalcNewMinHandAngle( -                  gTasks[taskId].data[TD_MHAND_ANGLE], -                  gTasks[taskId].data[TD_SETDIRECTION], -                  gTasks[taskId].data[TD_SETSPEED]); -                AdvanceClock(taskId, gTasks[taskId].data[TD_SETDIRECTION]); +                if (gTasks[taskId].tMvmtSpeed < 0xFF) +                    gTasks[taskId].tMvmtSpeed++; +                gTasks[taskId].tMinuteHandAngle = CalcNewMinHandAngle( +                  gTasks[taskId].tMinuteHandAngle, +                  gTasks[taskId].tMvmtDir, +                  gTasks[taskId].tMvmtSpeed); +                AdvanceClock(taskId, gTasks[taskId].tMvmtDir);              }              else              { -                gTasks[taskId].data[TD_SETSPEED] = 0; +                gTasks[taskId].tMvmtSpeed = 0;              }          }      } @@ -324,7 +445,7 @@ static void Task_SetClock4(u8 taskId)  //Set the time offset based on the wall clock's time  static void Task_SetClock5(u8 taskId)  { -    RtcInitLocalTimeOffset(gTasks[taskId].data[TD_HOURS], gTasks[taskId].data[TD_MINUTES]); +    RtcInitLocalTimeOffset(gTasks[taskId].tHours, gTasks[taskId].tMinutes);      BeginNormalPaletteFade(-1, 0, 0, 16, 0);      gTasks[taskId].func = Task_SetClock6;  } @@ -373,20 +494,20 @@ static u8 CalcMinHandDelta(u16 speed)          return 1;  } -//Calculates the new position of the minute hand when setting the clock +//Calculates the new angle of the minute hand when setting the clock  static u16 CalcNewMinHandAngle(u16 angle, u8 direction, u8 speed)  {      u8 delta = CalcMinHandDelta(speed);      switch (direction)      { -        case BACKWARD: +        case MVMT_BACKWARD:              if (angle)                  angle = angle - delta;              else                  angle = 360 - delta;              break; -        case FORWARD: +        case MVMT_FORWARD:              if (angle < 360 - delta)                  angle = angle + delta;              else @@ -401,29 +522,29 @@ static u8 AdvanceClock(u8 taskId, u8 direction)  {      switch (direction)      { -        case BACKWARD: -            if (gTasks[taskId].data[TD_MINUTES] > 0) -                gTasks[taskId].data[TD_MINUTES]--; +        case MVMT_BACKWARD: +            if (gTasks[taskId].tMinutes > 0) +                gTasks[taskId].tMinutes--;              else              { -                gTasks[taskId].data[TD_MINUTES] = 59; -                if (gTasks[taskId].data[TD_HOURS] > 0) -                    gTasks[taskId].data[TD_HOURS]--; +                gTasks[taskId].tMinutes = 59; +                if (gTasks[taskId].tHours > 0) +                    gTasks[taskId].tHours--;                  else -                    gTasks[taskId].data[TD_HOURS] = 23; +                    gTasks[taskId].tHours = 23;                  UpdateClockPeriod(taskId, direction);              }              break; -        case FORWARD: -            if (gTasks[taskId].data[TD_MINUTES] <= 58) -                gTasks[taskId].data[TD_MINUTES]++; +        case MVMT_FORWARD: +            if (gTasks[taskId].tMinutes < 59) +                gTasks[taskId].tMinutes++;              else              { -                gTasks[taskId].data[TD_MINUTES] = 0; -                if (gTasks[taskId].data[TD_HOURS] <= 22) -                    gTasks[taskId].data[TD_HOURS]++; +                gTasks[taskId].tMinutes = 0; +                if (gTasks[taskId].tHours < 23) +                    gTasks[taskId].tHours++;                  else -                    gTasks[taskId].data[TD_HOURS] = 0; +                    gTasks[taskId].tHours = 0;                  UpdateClockPeriod(taskId, direction);              }              break; @@ -434,29 +555,29 @@ static u8 AdvanceClock(u8 taskId, u8 direction)  //Updates the clock period (AM/PM) if it needs to change  static void UpdateClockPeriod(u8 taskId, u8 direction)  { -    u8 hours = gTasks[taskId].data[TD_HOURS]; +    u8 hours = gTasks[taskId].tHours;      switch (direction)      { -        case BACKWARD: +        case MVMT_BACKWARD:              switch (hours)              {                  case 11: -                    gTasks[taskId].data[TD_PERIOD] = AM; +                    gTasks[taskId].tPeriod = PERIOD_AM;                      break;                  case 23: -                    gTasks[taskId].data[TD_PERIOD] = PM; +                    gTasks[taskId].tPeriod = PERIOD_PM;                      break;              }              break; -        case FORWARD: +        case MVMT_FORWARD:              switch (hours)              {                  case 0: -                    gTasks[taskId].data[TD_PERIOD] = AM; +                    gTasks[taskId].tPeriod = PERIOD_AM;                      break;                  case 12: -                    gTasks[taskId].data[TD_PERIOD] = PM; +                    gTasks[taskId].tPeriod = PERIOD_PM;                      break;              }              break; @@ -466,17 +587,381 @@ static void UpdateClockPeriod(u8 taskId, u8 direction)  static void InitClockWithRtc(u8 taskId)  {      RtcCalcLocalTime(); -    gTasks[taskId].data[TD_HOURS] = gLocalTime.hours; -    gTasks[taskId].data[TD_MINUTES] = gLocalTime.minutes; -    gTasks[taskId].data[TD_MHAND_ANGLE] = gTasks[taskId].data[TD_MINUTES] * 6; -    gTasks[taskId].data[TD_HHAND_ANGLE] = (gTasks[taskId].data[TD_HOURS] % 12) * 30 + (gTasks[taskId].data[TD_MINUTES] / 10) * 5; +    gTasks[taskId].tHours = gLocalTime.hours; +    gTasks[taskId].tMinutes = gLocalTime.minutes; +    gTasks[taskId].tMinuteHandAngle = gTasks[taskId].tMinutes * 6; +    gTasks[taskId].tHourHandAngle = (gTasks[taskId].tHours % 12) * 30 + (gTasks[taskId].tMinutes / 10) * 5;      if (gLocalTime.hours <= 11) -        gTasks[taskId].data[TD_PERIOD] = AM; +        gTasks[taskId].tPeriod = PERIOD_AM;      else -        gTasks[taskId].data[TD_PERIOD] = PM; +        gTasks[taskId].tPeriod = PERIOD_PM;  } -void sub_810B05C(struct Sprite *sprite) +static const s8 gClockHandCoords[][2] = +{ +    {  0, -24}, +    {  1, -25}, +    {  1, -25}, +    {  2, -25}, +    {  2, -25}, +    {  2, -25}, +    {  3, -24}, +    {  3, -25}, +    {  4, -25}, +    {  4, -25}, +    {  4, -25}, +    {  5, -25}, +    {  5, -25}, +    {  6, -24}, +    {  6, -24}, +    {  6, -24}, +    {  7, -24}, +    {  7, -24}, +    {  7, -24}, +    {  8, -24}, +    {  8, -24}, +    {  9, -24}, +    {  9, -24}, +    { 10, -23}, +    { 10, -23}, +    { 11, -22}, +    { 11, -22}, +    { 11, -22}, +    { 12, -22}, +    { 12, -21}, +    { 13, -21}, +    { 13, -21}, +    { 13, -21}, +    { 14, -21}, +    { 14, -21}, +    { 14, -20}, +    { 14, -20}, +    { 15, -20}, +    { 15, -19}, +    { 16, -19}, +    { 16, -19}, +    { 16, -19}, +    { 16, -18}, +    { 16, -18}, +    { 17, -18}, +    { 17, -17}, +    { 17, -17}, +    { 18, -17}, +    { 18, -17}, +    { 18, -16}, +    { 18, -16}, +    { 19, -16}, +    { 19, -15}, +    { 19, -15}, +    { 20, -15}, +    { 20, -14}, +    { 20, -14}, +    { 20, -13}, +    { 20, -13}, +    { 21, -13}, +    { 21, -13}, +    { 21, -12}, +    { 22, -12}, +    { 22, -12}, +    { 22, -11}, +    { 22, -11}, +    { 22, -10}, +    { 23, -10}, +    { 23,  -9}, +    { 23,  -9}, +    { 23,  -9}, +    { 23,  -9}, +    { 23,  -8}, +    { 23,  -8}, +    { 23,  -7}, +    { 23,  -7}, +    { 23,  -6}, +    { 24,  -6}, +    { 24,  -6}, +    { 25,  -5}, +    { 25,  -5}, +    { 24,  -4}, +    { 25,  -4}, +    { 24,  -3}, +    { 25,  -3}, +    { 25,  -3}, +    { 25,  -2}, +    { 25,  -2}, +    { 24,  -1}, +    { 25,  -1}, +    { 24,   0}, +    { 24,   0}, +    { 24,   0}, +    { 24,   1}, +    { 24,   1}, +    { 25,   2}, +    { 24,   2}, +    { 25,   2}, +    { 24,   3}, +    { 24,   3}, +    { 25,   4}, +    { 24,   4}, +    { 24,   5}, +    { 24,   5}, +    { 24,   5}, +    { 24,   6}, +    { 23,   6}, +    { 23,   6}, +    { 23,   7}, +    { 23,   8}, +    { 23,   8}, +    { 23,   8}, +    { 23,   9}, +    { 23,   9}, +    { 23,  10}, +    { 22,  10}, +    { 22,  10}, +    { 22,  11}, +    { 22,  11}, +    { 22,  11}, +    { 22,  12}, +    { 21,  12}, +    { 21,  12}, +    { 21,  13}, +    { 20,  13}, +    { 20,  13}, +    { 19,  13}, +    { 19,  13}, +    { 19,  14}, +    { 19,  14}, +    { 19,  15}, +    { 19,  15}, +    { 18,  15}, +    { 18,  16}, +    { 17,  16}, +    { 17,  16}, +    { 17,  17}, +    { 17,  17}, +    { 16,  17}, +    { 16,  18}, +    { 16,  18}, +    { 15,  18}, +    { 14,  18}, +    { 15,  19}, +    { 14,  19}, +    { 14,  19}, +    { 13,  19}, +    { 13,  20}, +    { 13,  20}, +    { 13,  20}, +    { 12,  20}, +    { 12,  20}, +    { 12,  21}, +    { 11,  21}, +    { 11,  21}, +    { 11,  21}, +    { 10,  21}, +    { 10,  22}, +    { 10,  22}, +    {  9,  22}, +    {  9,  22}, +    {  8,  22}, +    {  7,  22}, +    {  7,  23}, +    {  7,  23}, +    {  6,  23}, +    {  6,  23}, +    {  5,  23}, +    {  5,  23}, +    {  5,  24}, +    {  4,  24}, +    {  4,  24}, +    {  4,  24}, +    {  3,  24}, +    {  2,  24}, +    {  2,  24}, +    {  1,  24}, +    {  1,  24}, +    {  0,  24}, +    {  0,  24}, +    { -1,  23}, +    {  0,  24}, +    {  0,  24}, +    { -1,  24}, +    { -1,  24}, +    { -2,  24}, +    { -2,  24}, +    { -3,  24}, +    { -3,  24}, +    { -4,  24}, +    { -4,  24}, +    { -5,  24}, +    { -5,  23}, +    { -5,  23}, +    { -6,  23}, +    { -6,  23}, +    { -7,  23}, +    { -7,  23}, +    { -7,  23}, +    { -8,  23}, +    { -8,  22}, +    { -9,  22}, +    { -9,  22}, +    {-10,  22}, +    {-10,  22}, +    {-10,  21}, +    {-11,  21}, +    {-11,  21}, +    {-11,  21}, +    {-11,  20}, +    {-12,  20}, +    {-12,  20}, +    {-13,  20}, +    {-13,  20}, +    {-13,  19}, +    {-14,  19}, +    {-14,  19}, +    {-14,  19}, +    {-14,  18}, +    {-15,  18}, +    {-15,  18}, +    {-15,  17}, +    {-16,  17}, +    {-16,  17}, +    {-17,  17}, +    {-17,  16}, +    {-17,  16}, +    {-18,  16}, +    {-17,  15}, +    {-18,  15}, +    {-18,  15}, +    {-19,  15}, +    {-19,  14}, +    {-19,  14}, +    {-19,  13}, +    {-19,  13}, +    {-20,  13}, +    {-20,  12}, +    {-20,  12}, +    {-21,  12}, +    {-21,  12}, +    {-21,  11}, +    {-21,  11}, +    {-21,  10}, +    {-21,  10}, +    {-21,   9}, +    {-22,   9}, +    {-22,   9}, +    {-22,   8}, +    {-22,   8}, +    {-22,   7}, +    {-23,   7}, +    {-23,   7}, +    {-23,   6}, +    {-23,   6}, +    {-23,   5}, +    {-24,   5}, +    {-23,   4}, +    {-23,   4}, +    {-24,   4}, +    {-24,   4}, +    {-24,   3}, +    {-24,   3}, +    {-24,   2}, +    {-24,   2}, +    {-24,   1}, +    {-24,   1}, +    {-24,   1}, +    {-24,   0}, +    {-25,   0}, +    {-24,  -1}, +    {-25,  -1}, +    {-24,  -1}, +    {-24,  -2}, +    {-24,  -2}, +    {-24,  -3}, +    {-24,  -3}, +    {-24,  -4}, +    {-24,  -4}, +    {-24,  -4}, +    {-24,  -5}, +    {-24,  -5}, +    {-24,  -6}, +    {-24,  -6}, +    {-23,  -6}, +    {-23,  -7}, +    {-23,  -7}, +    {-23,  -8}, +    {-23,  -8}, +    {-23,  -9}, +    {-23,  -9}, +    {-22,  -9}, +    {-22,  -9}, +    {-22, -10}, +    {-22, -10}, +    {-21, -10}, +    {-21, -11}, +    {-22, -11}, +    {-22, -12}, +    {-21, -12}, +    {-21, -13}, +    {-21, -13}, +    {-20, -13}, +    {-21, -14}, +    {-20, -14}, +    {-20, -14}, +    {-19, -14}, +    {-19, -15}, +    {-19, -15}, +    {-18, -16}, +    {-18, -16}, +    {-18, -16}, +    {-18, -17}, +    {-18, -17}, +    {-17, -17}, +    {-17, -18}, +    {-17, -18}, +    {-16, -18}, +    {-16, -18}, +    {-16, -19}, +    {-16, -19}, +    {-15, -19}, +    {-15, -19}, +    {-15, -20}, +    {-14, -20}, +    {-14, -20}, +    {-14, -21}, +    {-13, -21}, +    {-13, -21}, +    {-13, -21}, +    {-12, -21}, +    {-12, -22}, +    {-11, -22}, +    {-11, -22}, +    {-11, -22}, +    {-10, -22}, +    {-10, -22}, +    { -9, -22}, +    { -9, -23}, +    { -9, -23}, +    { -8, -23}, +    { -8, -23}, +    { -7, -23}, +    { -7, -23}, +    { -7, -24}, +    { -6, -24}, +    { -6, -24}, +    { -5, -24}, +    { -5, -24}, +    { -4, -24}, +    { -4, -24}, +    { -4, -24}, +    { -4, -25}, +    { -3, -25}, +    { -2, -25}, +    { -2, -24}, +    { -2, -24}, +    { -1, -25}, +    { -1, -25}, +    {  0, -25}, +}; + +static void sub_810B05C(struct Sprite *sprite)  {      u16 angle;      s16 sin; @@ -484,7 +969,7 @@ void sub_810B05C(struct Sprite *sprite)      u16 x;      u16 y; -    angle = gTasks[sprite->data0].data[TD_MHAND_ANGLE]; +    angle = gTasks[sprite->data0].tMinuteHandAngle;      sin = Sin2(angle) / 16;      cos = Cos2(angle) / 16;      SetOamMatrix(0, cos, sin, -sin, cos); @@ -501,7 +986,7 @@ void sub_810B05C(struct Sprite *sprite)      sprite->pos2.y = y;  } -void sub_810B0F4(struct Sprite *sprite) +static void sub_810B0F4(struct Sprite *sprite)  {      u16 angle;      s16 sin; @@ -509,7 +994,7 @@ void sub_810B0F4(struct Sprite *sprite)      u16 x;      u16 y; -    angle = gTasks[sprite->data0].data[TD_HHAND_ANGLE]; +    angle = gTasks[sprite->data0].tHourHandAngle;      sin = Sin2(angle) / 16;      cos = Cos2(angle) / 16;      SetOamMatrix(1, cos, sin, -sin, cos); @@ -526,21 +1011,21 @@ void sub_810B0F4(struct Sprite *sprite)      sprite->pos2.y = y;  } -void sub_810B18C(struct Sprite *sprite) +static void sub_810B18C(struct Sprite *sprite)  {      s16 sin;      s16 cos; -    if (gTasks[sprite->data0].data[TD_PERIOD] != AM) +    if (gTasks[sprite->data0].tPeriod != PERIOD_AM)      { -        if ((u16)(sprite->data1 - 60) <= 29) +        if (sprite->data1 >= 60 && sprite->data1 < 90)              sprite->data1 += 5; -        if (sprite->data1 <= 59) +        if (sprite->data1 < 60)              sprite->data1++;      }      else      { -        if ((u16)(sprite->data1 - 46) <= 29) +        if (sprite->data1 > 45 && sprite->data1 <= 75)              sprite->data1 -= 5;          if (sprite->data1 > 75)              sprite->data1--; @@ -551,12 +1036,12 @@ void sub_810B18C(struct Sprite *sprite)      sprite->pos2.y = sin * 30 / 4096;  } -void sub_810B230(struct Sprite *sprite) +static void sub_810B230(struct Sprite *sprite)  {      s16 sin;      s16 cos; -    if (gTasks[sprite->data0].data[TD_PERIOD] != AM) +    if (gTasks[sprite->data0].tPeriod != PERIOD_AM)      {          if (sprite->data1 >= 105 && sprite->data1 < 135)              sprite->data1 += 5; diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 820ff34f5..f848873bb 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -10,6 +10,7 @@  #include "rom4.h"  #include "safari_zone.h"  #include "script.h" +#include "species.h"  struct WildPokemon  { @@ -21,7 +22,7 @@ struct WildPokemon  struct WildPokemonInfo  {      u8 encounterRate; -    struct WildPokemon *wildPokemon; +    const struct WildPokemon *wildPokemon;  };  struct WildPokemonHeader @@ -34,6 +35,2890 @@ struct WildPokemonHeader      struct WildPokemonInfo *fishingMonsInfo;  }; + +const struct WildPokemon PetalburgCity_WaterMons [] = +{ +    {20, 30, SPECIES_MARILL}, +    {10, 20, SPECIES_MARILL}, +    {30, 35, SPECIES_MARILL}, +    {5, 10, SPECIES_MARILL}, +    {5, 10, SPECIES_MARILL}, +}; +const struct WildPokemonInfo PetalburgCity_WaterMonsInfo = {1, PetalburgCity_WaterMons}; + +const struct WildPokemon PetalburgCity_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 PetalburgCity_FishingMonsInfo = {10, PetalburgCity_FishingMons}; + +const struct WildPokemon SlateportCity_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo SlateportCity_WaterMonsInfo = {4, SlateportCity_WaterMons}; + +const struct WildPokemon SlateportCity_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 SlateportCity_FishingMonsInfo = {10, SlateportCity_FishingMons}; + +const struct WildPokemon LilycoveCity_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo LilycoveCity_WaterMonsInfo = {4, LilycoveCity_WaterMons}; + +const struct WildPokemon LilycoveCity_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 LilycoveCity_FishingMonsInfo = {10, LilycoveCity_FishingMons}; + +const struct WildPokemon MossdeepCity_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo MossdeepCity_WaterMonsInfo = {4, MossdeepCity_WaterMons}; + +const struct WildPokemon MossdeepCity_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 MossdeepCity_FishingMonsInfo = {10, MossdeepCity_FishingMons}; + +const struct WildPokemon SootopolisCity_WaterMons [] = +{ +    {5, 35, SPECIES_MAGIKARP}, +    {10, 30, SPECIES_MAGIKARP}, +    {15, 25, SPECIES_MAGIKARP}, +    {25, 30, SPECIES_MAGIKARP}, +    {25, 30, SPECIES_MAGIKARP}, +}; +const struct WildPokemonInfo SootopolisCity_WaterMonsInfo = {1, SootopolisCity_WaterMons}; + +const struct WildPokemon SootopolisCity_FishingMons [] = +{ +    {5, 10, SPECIES_MAGIKARP}, +#ifdef SAPPHIRE +    {5, 10, SPECIES_TENTACOOL}, +#else +    {10, 15, SPECIES_MAGIKARP}, +#endif +    {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 SootopolisCity_FishingMonsInfo = {10, SootopolisCity_FishingMons}; + +const struct WildPokemon EverGrandeCity_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo EverGrandeCity_WaterMonsInfo = {4, EverGrandeCity_WaterMons}; + +const struct WildPokemon EverGrandeCity_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 EverGrandeCity_FishingMonsInfo = {10, EverGrandeCity_FishingMons}; + +const struct WildPokemon MeteorFalls_1F_1R_LandMons [] = +{ +    {16, 16, SPECIES_ZUBAT}, +    {17, 17, SPECIES_ZUBAT}, +    {18, 18, SPECIES_ZUBAT}, +    {15, 15, SPECIES_ZUBAT}, +    {14, 14, SPECIES_ZUBAT}, +#ifdef SAPPHIRE +    {16, 16, SPECIES_LUNATONE}, +    {18, 18, SPECIES_LUNATONE}, +    {14, 14, SPECIES_LUNATONE}, +#else +    {16, 16, SPECIES_SOLROCK}, +    {18, 18, SPECIES_SOLROCK}, +    {14, 14, SPECIES_SOLROCK}, +#endif +    {19, 19, SPECIES_ZUBAT}, +    {20, 20, SPECIES_ZUBAT}, +    {19, 19, SPECIES_ZUBAT}, +    {20, 20, SPECIES_ZUBAT}, +}; +const struct WildPokemonInfo MeteorFalls_1F_1R_LandMonsInfo = {10, MeteorFalls_1F_1R_LandMons}; + +const struct WildPokemon MeteorFalls_1F_1R_WaterMons [] = +{ +    {5, 35, SPECIES_ZUBAT}, +    {30, 35, SPECIES_ZUBAT}, +#ifdef SAPPHIRE +    {25, 35, SPECIES_LUNATONE}, +    {15, 25, SPECIES_LUNATONE}, +    {5, 15, SPECIES_LUNATONE}, +#else +    {25, 35, SPECIES_SOLROCK}, +    {15, 25, SPECIES_SOLROCK}, +    {5, 15, SPECIES_SOLROCK}, +#endif +}; +const struct WildPokemonInfo MeteorFalls_1F_1R_WaterMonsInfo = {4, MeteorFalls_1F_1R_WaterMons}; + +const struct WildPokemon MeteorFalls_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 MeteorFalls_1F_1R_FishingMonsInfo = {30, MeteorFalls_1F_1R_FishingMons}; + +const struct WildPokemon MeteorFalls_1F_2R_LandMons [] = +{ +    {33, 33, SPECIES_GOLBAT}, +    {35, 35, SPECIES_GOLBAT}, +    {33, 33, SPECIES_GOLBAT}, +#ifdef SAPPHIRE +    {35, 35, SPECIES_LUNATONE}, +    {33, 33, SPECIES_LUNATONE}, +    {37, 37, SPECIES_LUNATONE}, +#else +    {35, 35, SPECIES_SOLROCK}, +    {33, 33, SPECIES_SOLROCK}, +    {37, 37, SPECIES_SOLROCK}, +#endif +    {35, 35, SPECIES_GOLBAT}, +#ifdef SAPPHIRE +    {39, 39, SPECIES_LUNATONE}, +#else +    {39, 39, SPECIES_SOLROCK}, +#endif +    {38, 38, SPECIES_GOLBAT}, +    {40, 40, SPECIES_GOLBAT}, +    {38, 38, SPECIES_GOLBAT}, +    {40, 40, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo MeteorFalls_1F_2R_LandMonsInfo = {10, MeteorFalls_1F_2R_LandMons}; + +const struct WildPokemon MeteorFalls_1F_2R_WaterMons [] = +{ +    {30, 35, SPECIES_GOLBAT}, +    {30, 35, SPECIES_GOLBAT}, +#ifdef SAPPHIRE +    {25, 35, SPECIES_LUNATONE}, +    {15, 25, SPECIES_LUNATONE}, +    {5, 15, SPECIES_LUNATONE}, +#else +    {25, 35, SPECIES_SOLROCK}, +    {15, 25, SPECIES_SOLROCK}, +    {5, 15, SPECIES_SOLROCK}, +#endif +}; +const struct WildPokemonInfo MeteorFalls_1F_2R_WaterMonsInfo = {4, MeteorFalls_1F_2R_WaterMons}; + +const struct WildPokemon MeteorFalls_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 MeteorFalls_1F_2R_FishingMonsInfo = {30, MeteorFalls_1F_2R_FishingMons}; + +const struct WildPokemon MeteorFalls_B1F_1R_LandMons [] = +{ +    {33, 33, SPECIES_GOLBAT}, +    {35, 35, SPECIES_GOLBAT}, +    {33, 33, SPECIES_GOLBAT}, +#ifdef SAPPHIRE +    {35, 35, SPECIES_LUNATONE}, +    {33, 33, SPECIES_LUNATONE}, +    {37, 37, SPECIES_LUNATONE}, +#else +    {35, 35, SPECIES_SOLROCK}, +    {33, 33, SPECIES_SOLROCK}, +    {37, 37, SPECIES_SOLROCK}, +#endif +    {35, 35, SPECIES_GOLBAT}, +#ifdef SAPPHIRE +    {39, 39, SPECIES_LUNATONE}, +#else +    {39, 39, SPECIES_SOLROCK}, +#endif +    {38, 38, SPECIES_GOLBAT}, +    {40, 40, SPECIES_GOLBAT}, +    {38, 38, SPECIES_GOLBAT}, +    {40, 40, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo MeteorFalls_B1F_1R_LandMonsInfo = {10, MeteorFalls_B1F_1R_LandMons}; + +const struct WildPokemon MeteorFalls_B1F_1R_WaterMons [] = +{ +    {30, 35, SPECIES_GOLBAT}, +    {30, 35, SPECIES_GOLBAT}, +#ifdef SAPPHIRE +    {25, 35, SPECIES_LUNATONE}, +    {15, 25, SPECIES_LUNATONE}, +    {5, 15, SPECIES_LUNATONE}, +#else +    {25, 35, SPECIES_SOLROCK}, +    {15, 25, SPECIES_SOLROCK}, +    {5, 15, SPECIES_SOLROCK}, +#endif +}; +const struct WildPokemonInfo MeteorFalls_B1F_1R_WaterMonsInfo = {4, MeteorFalls_B1F_1R_WaterMons}; + +const struct WildPokemon MeteorFalls_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 MeteorFalls_B1F_1R_FishingMonsInfo = {30, MeteorFalls_B1F_1R_FishingMons}; + +const struct WildPokemon MeteorFalls_B1F_2R_LandMons [] = +{ +    {33, 33, SPECIES_GOLBAT}, +    {35, 35, SPECIES_GOLBAT}, +    {30, 30, SPECIES_BAGON}, +#ifdef SAPPHIRE +    {35, 35, SPECIES_LUNATONE}, +#else +    {35, 35, SPECIES_SOLROCK}, +#endif +    {35, 35, SPECIES_BAGON}, +#ifdef SAPPHIRE +    {37, 37, SPECIES_LUNATONE}, +#else +    {37, 37, SPECIES_SOLROCK}, +#endif +    {25, 25, SPECIES_BAGON}, +#ifdef SAPPHIRE +    {39, 39, SPECIES_LUNATONE}, +#else +    {39, 39, SPECIES_SOLROCK}, +#endif +    {38, 38, SPECIES_GOLBAT}, +    {40, 40, SPECIES_GOLBAT}, +    {38, 38, SPECIES_GOLBAT}, +    {40, 40, SPECIES_GOLBAT}, +}; +const struct WildPokemonInfo MeteorFalls_B1F_2R_LandMonsInfo = {10, MeteorFalls_B1F_2R_LandMons}; + +const struct WildPokemon MeteorFalls_B1F_2R_WaterMons [] = +{ +    {30, 35, SPECIES_GOLBAT}, +    {30, 35, SPECIES_GOLBAT}, +#ifdef SAPPHIRE +    {25, 35, SPECIES_LUNATONE}, +    {15, 25, SPECIES_LUNATONE}, +    {5, 15, SPECIES_LUNATONE}, +#else +    {25, 35, SPECIES_SOLROCK}, +    {15, 25, SPECIES_SOLROCK}, +    {5, 15, SPECIES_SOLROCK}, +#endif +}; +const struct WildPokemonInfo MeteorFalls_B1F_2R_WaterMonsInfo = {4, MeteorFalls_B1F_2R_WaterMons}; + +const struct WildPokemon MeteorFalls_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 MeteorFalls_B1F_2R_FishingMonsInfo = {30, MeteorFalls_B1F_2R_FishingMons}; + +const struct WildPokemon RusturfTunnel_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 RusturfTunnel_LandMonsInfo = {10, RusturfTunnel_LandMons}; + +const struct WildPokemon GraniteCave_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 GraniteCave_1F_LandMonsInfo = {10, GraniteCave_1F_LandMons}; + +const struct WildPokemon GraniteCave_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}, +#ifdef SAPPHIRE +    {10, 10, SPECIES_SABLEYE}, +    {10, 10, SPECIES_SABLEYE}, +    {9, 9, SPECIES_SABLEYE}, +    {11, 11, SPECIES_SABLEYE}, +#else +    {10, 10, SPECIES_MAWILE}, +    {10, 10, SPECIES_MAWILE}, +    {9, 9, SPECIES_MAWILE}, +    {11, 11, SPECIES_MAWILE}, +#endif +}; +const struct WildPokemonInfo GraniteCave_B1F_LandMonsInfo = {10, GraniteCave_B1F_LandMons}; + +const struct WildPokemon GraniteCave_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}, +#ifdef SAPPHIRE +    {10, 10, SPECIES_SABLEYE}, +    {11, 11, SPECIES_SABLEYE}, +    {12, 12, SPECIES_SABLEYE}, +    {10, 10, SPECIES_SABLEYE}, +    {12, 12, SPECIES_SABLEYE}, +    {10, 10, SPECIES_SABLEYE}, +#else +    {10, 10, SPECIES_MAWILE}, +    {11, 11, SPECIES_MAWILE}, +    {12, 12, SPECIES_MAWILE}, +    {10, 10, SPECIES_MAWILE}, +    {12, 12, SPECIES_MAWILE}, +    {10, 10, SPECIES_MAWILE}, +#endif +}; +const struct WildPokemonInfo GraniteCave_B2F_LandMonsInfo = {10, GraniteCave_B2F_LandMons}; + +const struct WildPokemon GraniteCave_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 GraniteCave_B2F_RockSmashMonsInfo = {20, GraniteCave_B2F_RockSmashMons}; + +const struct WildPokemon GraniteCave_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 GraniteCave_StevensRoom_LandMonsInfo = {10, GraniteCave_StevensRoom_LandMons}; + +const struct WildPokemon PetalburgWoods_LandMons [] = +{ +    {5, 5, SPECIES_ZIGZAGOON}, +    {5, 5, SPECIES_WURMPLE}, +    {5, 5, SPECIES_SHROOMISH}, +    {6, 6, SPECIES_ZIGZAGOON}, +    {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 PetalburgWoods_LandMonsInfo = {20, PetalburgWoods_LandMons}; + +//Jagged Pass Pokemon are 2 levels higher on Sapphire +#ifdef SAPPHIRE +#define JAGGED_PASS_LEVEL_DIFF 2 +#else +#define JAGGED_PASS_LEVEL_DIFF 0 +#endif + +const struct WildPokemon JaggedPass_LandMons [] = +{ +    {19 + JAGGED_PASS_LEVEL_DIFF, 19 + JAGGED_PASS_LEVEL_DIFF, SPECIES_NUMEL}, +    {19 + JAGGED_PASS_LEVEL_DIFF, 19 + JAGGED_PASS_LEVEL_DIFF, SPECIES_NUMEL}, +    {19 + JAGGED_PASS_LEVEL_DIFF, 19 + JAGGED_PASS_LEVEL_DIFF, SPECIES_MACHOP}, +    {18 + JAGGED_PASS_LEVEL_DIFF, 18 + JAGGED_PASS_LEVEL_DIFF, SPECIES_NUMEL}, +    {18 + JAGGED_PASS_LEVEL_DIFF, 18 + JAGGED_PASS_LEVEL_DIFF, SPECIES_SPOINK}, +    {18 + JAGGED_PASS_LEVEL_DIFF, 18 + JAGGED_PASS_LEVEL_DIFF, SPECIES_MACHOP}, +    {19 + JAGGED_PASS_LEVEL_DIFF, 19 + JAGGED_PASS_LEVEL_DIFF, SPECIES_SPOINK}, +    {20 + JAGGED_PASS_LEVEL_DIFF, 20 + JAGGED_PASS_LEVEL_DIFF, SPECIES_MACHOP}, +    {20 + JAGGED_PASS_LEVEL_DIFF, 20 + JAGGED_PASS_LEVEL_DIFF, SPECIES_NUMEL}, +    {20 + JAGGED_PASS_LEVEL_DIFF, 20 + JAGGED_PASS_LEVEL_DIFF, SPECIES_SPOINK}, +    {20 + JAGGED_PASS_LEVEL_DIFF, 20 + JAGGED_PASS_LEVEL_DIFF, SPECIES_NUMEL}, +    {20 + JAGGED_PASS_LEVEL_DIFF, 20 + JAGGED_PASS_LEVEL_DIFF, SPECIES_SPOINK}, +}; +const struct WildPokemonInfo JaggedPass_LandMonsInfo = {20, JaggedPass_LandMons}; + +const struct WildPokemon FieryPath_LandMons [] = +{ +    {15, 15, SPECIES_NUMEL}, +#ifdef SAPPHIRE +    {15, 15, SPECIES_GRIMER}, +#else +    {15, 15, SPECIES_KOFFING}, +#endif +    {16, 16, SPECIES_NUMEL}, +    {15, 15, SPECIES_MACHOP}, +    {15, 15, SPECIES_TORKOAL}, +    {15, 15, SPECIES_SLUGMA}, +#ifdef SAPPHIRE +    {16, 16, SPECIES_GRIMER}, +#else +    {16, 16, SPECIES_KOFFING}, +#endif +    {16, 16, SPECIES_MACHOP}, +    {14, 14, SPECIES_TORKOAL}, +    {16, 16, SPECIES_TORKOAL}, +#ifdef SAPPHIRE +    {14, 14, SPECIES_KOFFING}, +    {14, 14, SPECIES_KOFFING}, +#else +    {14, 14, SPECIES_GRIMER}, +    {14, 14, SPECIES_GRIMER}, +#endif +}; +const struct WildPokemonInfo FieryPath_LandMonsInfo = {10, FieryPath_LandMons}; + +const struct WildPokemon MtPyre_1F_LandMons [] = +{ +#ifdef SAPPHIRE +    {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}, +#else +    {27, 27, SPECIES_DUSKULL}, +    {28, 28, SPECIES_DUSKULL}, +    {26, 26, SPECIES_DUSKULL}, +    {25, 25, SPECIES_DUSKULL}, +    {29, 29, SPECIES_DUSKULL}, +    {24, 24, SPECIES_DUSKULL}, +    {23, 23, SPECIES_DUSKULL}, +    {22, 22, SPECIES_DUSKULL}, +    {29, 29, SPECIES_DUSKULL}, +    {24, 24, SPECIES_DUSKULL}, +    {29, 29, SPECIES_DUSKULL}, +    {24, 24, SPECIES_DUSKULL}, +#endif +}; +const struct WildPokemonInfo MtPyre_1F_LandMonsInfo = {10, MtPyre_1F_LandMons}; + +const struct WildPokemon MtPyre_2F_LandMons [] = +{ +#ifdef SAPPHIRE +    {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}, +#else +    {27, 27, SPECIES_DUSKULL}, +    {28, 28, SPECIES_DUSKULL}, +    {26, 26, SPECIES_DUSKULL}, +    {25, 25, SPECIES_DUSKULL}, +    {29, 29, SPECIES_DUSKULL}, +    {24, 24, SPECIES_DUSKULL}, +    {23, 23, SPECIES_DUSKULL}, +    {22, 22, SPECIES_DUSKULL}, +    {29, 29, SPECIES_DUSKULL}, +    {24, 24, SPECIES_DUSKULL}, +    {29, 29, SPECIES_DUSKULL}, +    {24, 24, SPECIES_DUSKULL}, +#endif +}; +const struct WildPokemonInfo MtPyre_2F_LandMonsInfo = {10, MtPyre_2F_LandMons}; + +const struct WildPokemon MtPyre_3F_LandMons [] = +{ +#ifdef SAPPHIRE +    {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}, +#else +    {27, 27, SPECIES_DUSKULL}, +    {28, 28, SPECIES_DUSKULL}, +    {26, 26, SPECIES_DUSKULL}, +    {25, 25, SPECIES_DUSKULL}, +    {29, 29, SPECIES_DUSKULL}, +    {24, 24, SPECIES_DUSKULL}, +    {23, 23, SPECIES_DUSKULL}, +    {22, 22, SPECIES_DUSKULL}, +    {29, 29, SPECIES_DUSKULL}, +    {24, 24, SPECIES_DUSKULL}, +    {29, 29, SPECIES_DUSKULL}, +    {24, 24, SPECIES_DUSKULL}, +#endif +}; +const struct WildPokemonInfo MtPyre_3F_LandMonsInfo = {10, MtPyre_3F_LandMons}; + +const struct WildPokemon MtPyre_4F_LandMons [] = +{ +#ifdef SAPPHIRE +    {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}, +#else +    {27, 27, SPECIES_DUSKULL}, +    {28, 28, SPECIES_DUSKULL}, +    {26, 26, SPECIES_DUSKULL}, +    {25, 25, SPECIES_DUSKULL}, +    {29, 29, SPECIES_DUSKULL}, +    {24, 24, SPECIES_DUSKULL}, +    {23, 23, SPECIES_DUSKULL}, +    {22, 22, SPECIES_DUSKULL}, +    {27, 27, SPECIES_SHUPPET}, +    {27, 27, SPECIES_SHUPPET}, +    {25, 25, SPECIES_SHUPPET}, +    {29, 29, SPECIES_SHUPPET}, +#endif +}; +const struct WildPokemonInfo MtPyre_4F_LandMonsInfo = {10, MtPyre_4F_LandMons}; + +const struct WildPokemon MtPyre_5F_LandMons [] = +{ +#ifdef SAPPHIRE +    {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}, +#else +    {27, 27, SPECIES_DUSKULL}, +    {28, 28, SPECIES_DUSKULL}, +    {26, 26, SPECIES_DUSKULL}, +    {25, 25, SPECIES_DUSKULL}, +    {29, 29, SPECIES_DUSKULL}, +    {24, 24, SPECIES_DUSKULL}, +    {23, 23, SPECIES_DUSKULL}, +    {22, 22, SPECIES_DUSKULL}, +    {27, 27, SPECIES_SHUPPET}, +    {27, 27, SPECIES_SHUPPET}, +    {25, 25, SPECIES_SHUPPET}, +    {29, 29, SPECIES_SHUPPET}, +#endif +}; +const struct WildPokemonInfo MtPyre_5F_LandMonsInfo = {10, MtPyre_5F_LandMons}; + +const struct WildPokemon MtPyre_6F_LandMons [] = +{ +#ifdef SAPPHIRE +    {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}, +#else +    {27, 27, SPECIES_DUSKULL}, +    {28, 28, SPECIES_DUSKULL}, +    {26, 26, SPECIES_DUSKULL}, +    {25, 25, SPECIES_DUSKULL}, +    {29, 29, SPECIES_DUSKULL}, +    {24, 24, SPECIES_DUSKULL}, +    {23, 23, SPECIES_DUSKULL}, +    {22, 22, SPECIES_DUSKULL}, +    {27, 27, SPECIES_SHUPPET}, +    {27, 27, SPECIES_SHUPPET}, +    {25, 25, SPECIES_SHUPPET}, +    {29, 29, SPECIES_SHUPPET}, +#endif +}; +const struct WildPokemonInfo MtPyre_6F_LandMonsInfo = {10, MtPyre_6F_LandMons}; + +const struct WildPokemon MtPyre_Exterior_LandMons [] = +{ +#ifdef SAPPHIRE +    {27, 27, SPECIES_SHUPPET}, +#else +    {27, 27, SPECIES_DUSKULL}, +#endif +    {27, 27, SPECIES_MEDITITE}, +#ifdef SAPPHIRE +    {28, 28, SPECIES_SHUPPET}, +#else +    {28, 28, SPECIES_DUSKULL}, +#endif +    {29, 29, SPECIES_MEDITITE}, +#ifdef SAPPHIRE +    {29, 29, SPECIES_SHUPPET}, +#else +    {29, 29, SPECIES_DUSKULL}, +#endif +    {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 MtPyre_Exterior_LandMonsInfo = {10, MtPyre_Exterior_LandMons}; + +const struct WildPokemon MtPyre_Summit_LandMons [] = +{ +#ifdef SAPPHIRE +    {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}, +#else +    {28, 28, SPECIES_DUSKULL}, +    {29, 29, SPECIES_DUSKULL}, +    {27, 27, SPECIES_DUSKULL}, +    {26, 26, SPECIES_DUSKULL}, +    {30, 30, SPECIES_DUSKULL}, +    {25, 25, SPECIES_DUSKULL}, +    {24, 24, SPECIES_DUSKULL}, +    {28, 28, SPECIES_SHUPPET}, +    {26, 26, SPECIES_SHUPPET}, +    {30, 30, SPECIES_SHUPPET}, +#endif +    {28, 28, SPECIES_CHIMECHO}, +    {28, 28, SPECIES_CHIMECHO}, +}; +const struct WildPokemonInfo MtPyre_Summit_LandMonsInfo = {10, MtPyre_Summit_LandMons}; + +const struct WildPokemon SeafloorCavern_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 SeafloorCavern_Entrance_WaterMonsInfo = {4, SeafloorCavern_Entrance_WaterMons}; + +const struct WildPokemon SeafloorCavern_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 SeafloorCavern_Entrance_FishingMonsInfo = {10, SeafloorCavern_Entrance_FishingMons}; + +const struct WildPokemon SeafloorCavern_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 SeafloorCavern_Room1_LandMonsInfo = {4, SeafloorCavern_Room1_LandMons}; + +const struct WildPokemon SeafloorCavern_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 SeafloorCavern_Room2_LandMonsInfo = {4, SeafloorCavern_Room2_LandMons}; + +const struct WildPokemon SeafloorCavern_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 SeafloorCavern_Room3_LandMonsInfo = {4, SeafloorCavern_Room3_LandMons}; + +const struct WildPokemon SeafloorCavern_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 SeafloorCavern_Room4_LandMonsInfo = {4, SeafloorCavern_Room4_LandMons}; + +const struct WildPokemon SeafloorCavern_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 SeafloorCavern_Room5_LandMonsInfo = {4, SeafloorCavern_Room5_LandMons}; + +const struct WildPokemon SeafloorCavern_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 SeafloorCavern_Room6_LandMonsInfo = {4, SeafloorCavern_Room6_LandMons}; + +const struct WildPokemon SeafloorCavern_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 SeafloorCavern_Room6_WaterMonsInfo = {4, SeafloorCavern_Room6_WaterMons}; + +const struct WildPokemon SeafloorCavern_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 SeafloorCavern_Room6_FishingMonsInfo = {10, SeafloorCavern_Room6_FishingMons}; + +const struct WildPokemon SeafloorCavern_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 SeafloorCavern_Room7_LandMonsInfo = {4, SeafloorCavern_Room7_LandMons}; + +const struct WildPokemon SeafloorCavern_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 SeafloorCavern_Room7_WaterMonsInfo = {4, SeafloorCavern_Room7_WaterMons}; + +const struct WildPokemon SeafloorCavern_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 SeafloorCavern_Room7_FishingMonsInfo = {10, SeafloorCavern_Room7_FishingMons}; + +const struct WildPokemon SeafloorCavern_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 SeafloorCavern_Room8_LandMonsInfo = {4, SeafloorCavern_Room8_LandMons}; + +const struct WildPokemon CaveOfOrigin_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 CaveOfOrigin_Entrance_LandMonsInfo = {4, CaveOfOrigin_Entrance_LandMons}; + +const struct WildPokemon CaveOfOrigin_1F_LandMons [] = +{ +    {30, 30, SPECIES_ZUBAT}, +    {31, 31, SPECIES_ZUBAT}, +    {32, 32, SPECIES_ZUBAT}, +#ifdef SAPPHIRE +    {30, 30, SPECIES_SABLEYE}, +    {32, 32, SPECIES_SABLEYE}, +    {34, 34, SPECIES_SABLEYE}, +#else +    {30, 30, SPECIES_MAWILE}, +    {32, 32, SPECIES_MAWILE}, +    {34, 34, SPECIES_MAWILE}, +#endif +    {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 CaveOfOrigin_1F_LandMonsInfo = {4, CaveOfOrigin_1F_LandMons}; + +const struct WildPokemon CaveOfOrigin_B1F_LandMons [] = +{ +    {30, 30, SPECIES_ZUBAT}, +    {31, 31, SPECIES_ZUBAT}, +    {32, 32, SPECIES_ZUBAT}, +#ifdef SAPPHIRE +    {30, 30, SPECIES_SABLEYE}, +    {32, 32, SPECIES_SABLEYE}, +    {34, 34, SPECIES_SABLEYE}, +#else +    {30, 30, SPECIES_MAWILE}, +    {32, 32, SPECIES_MAWILE}, +    {34, 34, SPECIES_MAWILE}, +#endif +    {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 CaveOfOrigin_B1F_LandMonsInfo = {4, CaveOfOrigin_B1F_LandMons}; + +const struct WildPokemon CaveOfOrigin_B2F_LandMons [] = +{ +    {30, 30, SPECIES_ZUBAT}, +    {31, 31, SPECIES_ZUBAT}, +    {32, 32, SPECIES_ZUBAT}, +#ifdef SAPPHIRE +    {30, 30, SPECIES_SABLEYE}, +    {32, 32, SPECIES_SABLEYE}, +    {34, 34, SPECIES_SABLEYE}, +#else +    {30, 30, SPECIES_MAWILE}, +    {32, 32, SPECIES_MAWILE}, +    {34, 34, SPECIES_MAWILE}, +#endif +    {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 CaveOfOrigin_B2F_LandMonsInfo = {4, CaveOfOrigin_B2F_LandMons}; + +const struct WildPokemon CaveOfOrigin_B3F_LandMons [] = +{ +    {30, 30, SPECIES_ZUBAT}, +    {31, 31, SPECIES_ZUBAT}, +    {32, 32, SPECIES_ZUBAT}, +#ifdef SAPPHIRE +    {30, 30, SPECIES_SABLEYE}, +    {32, 32, SPECIES_SABLEYE}, +    {34, 34, SPECIES_SABLEYE}, +#else +    {30, 30, SPECIES_MAWILE}, +    {32, 32, SPECIES_MAWILE}, +    {34, 34, SPECIES_MAWILE}, +#endif +    {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 CaveOfOrigin_B3F_LandMonsInfo = {4, CaveOfOrigin_B3F_LandMons}; + +const struct WildPokemon VictoryRoad_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 VictoryRoad_1F_LandMonsInfo = {10, VictoryRoad_1F_LandMons}; + +const struct WildPokemon VictoryRoad_B1F_LandMons [] = +{ +    {40, 40, SPECIES_GOLBAT}, +    {40, 40, SPECIES_HARIYAMA}, +    {40, 40, SPECIES_LAIRON}, +    {40, 40, SPECIES_MEDICHAM}, +    {38, 38, SPECIES_GOLBAT}, +    {38, 38, SPECIES_HARIYAMA}, +    {42, 42, SPECIES_GOLBAT}, +    {42, 42, SPECIES_HARIYAMA}, +    {42, 42, SPECIES_LAIRON}, +    {38, 38, SPECIES_MEDITITE}, +    {42, 42, SPECIES_LAIRON}, +    {38, 38, SPECIES_MEDITITE}, +}; +const struct WildPokemonInfo VictoryRoad_B1F_LandMonsInfo = {10, VictoryRoad_B1F_LandMons}; + +const struct WildPokemon VictoryRoad_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 VictoryRoad_B1F_RockSmashMonsInfo = {20, VictoryRoad_B1F_RockSmashMons}; + +const struct WildPokemon VictoryRoad_B2F_LandMons [] = +{ +    {40, 40, SPECIES_GOLBAT}, +#ifdef SAPPHIRE +    {40, 40, SPECIES_SABLEYE}, +#else +    {40, 40, SPECIES_MAWILE}, +#endif +    {40, 40, SPECIES_LAIRON}, +    {40, 40, SPECIES_MEDICHAM}, +    {42, 42, SPECIES_GOLBAT}, +#ifdef SAPPHIRE +    {42, 42, SPECIES_SABLEYE}, +#else +    {42, 42, SPECIES_MAWILE}, +#endif +    {44, 44, SPECIES_GOLBAT}, +#ifdef SAPPHIRE +    {44, 44, SPECIES_SABLEYE}, +#else +    {44, 44, SPECIES_MAWILE}, +#endif +    {42, 42, SPECIES_LAIRON}, +    {42, 42, SPECIES_MEDICHAM}, +    {44, 44, SPECIES_LAIRON}, +    {44, 44, SPECIES_MEDICHAM}, +}; +const struct WildPokemonInfo VictoryRoad_B2F_LandMonsInfo = {10, VictoryRoad_B2F_LandMons}; + +const struct WildPokemon VictoryRoad_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 VictoryRoad_B2F_WaterMonsInfo = {4, VictoryRoad_B2F_WaterMons}; + +const struct WildPokemon VictoryRoad_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 VictoryRoad_B2F_FishingMonsInfo = {30, VictoryRoad_B2F_FishingMons}; + +const struct WildPokemon ShoalCave_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 ShoalCave_LowTideEntranceRoom_LandMonsInfo = {10, ShoalCave_LowTideEntranceRoom_LandMons}; + +const struct WildPokemon ShoalCave_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 ShoalCave_LowTideEntranceRoom_WaterMonsInfo = {4, ShoalCave_LowTideEntranceRoom_WaterMons}; + +const struct WildPokemon ShoalCave_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 ShoalCave_LowTideEntranceRoom_FishingMonsInfo = {10, ShoalCave_LowTideEntranceRoom_FishingMons}; + +const struct WildPokemon ShoalCave_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 ShoalCave_LowTideInnerRoom_LandMonsInfo = {10, ShoalCave_LowTideInnerRoom_LandMons}; + +const struct WildPokemon ShoalCave_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 ShoalCave_LowTideInnerRoom_WaterMonsInfo = {4, ShoalCave_LowTideInnerRoom_WaterMons}; + +const struct WildPokemon ShoalCave_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 ShoalCave_LowTideInnerRoom_FishingMonsInfo = {10, ShoalCave_LowTideInnerRoom_FishingMons}; + +const struct WildPokemon ShoalCave_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 ShoalCave_LowTideStairsRoom_LandMonsInfo = {10, ShoalCave_LowTideStairsRoom_LandMons}; + +const struct WildPokemon ShoalCave_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 ShoalCave_LowTideLowerRoom_LandMonsInfo = {10, ShoalCave_LowTideLowerRoom_LandMons}; + +const struct WildPokemon ShoalCave_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 ShoalCave_LowTideIceRoom_LandMonsInfo = {10, ShoalCave_LowTideIceRoom_LandMons}; + +const struct WildPokemon NewMauville_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 NewMauville_Entrance_LandMonsInfo = {10, NewMauville_Entrance_LandMons}; + +const struct WildPokemon NewMauville_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 NewMauville_Inside_LandMonsInfo = {10, NewMauville_Inside_LandMons}; + +const struct WildPokemon AbandonedShip_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 AbandonedShip_Rooms_B1F_WaterMonsInfo = {4, AbandonedShip_Rooms_B1F_WaterMons}; + +const struct WildPokemon AbandonedShip_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 AbandonedShip_Rooms_B1F_FishingMonsInfo = {20, AbandonedShip_Rooms_B1F_FishingMons}; + +const struct WildPokemon AbandonedShip_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 AbandonedShip_HiddenFloorCorridors_WaterMonsInfo = {4, AbandonedShip_HiddenFloorCorridors_WaterMons}; + +const struct WildPokemon AbandonedShip_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 AbandonedShip_HiddenFloorCorridors_FishingMonsInfo = {20, AbandonedShip_HiddenFloorCorridors_FishingMons}; + +const struct WildPokemon SkyPillar_1F_LandMons [] = +{ +#ifdef SAPPHIRE +    {48, 48, SPECIES_SABLEYE}, +#else +    {48, 48, SPECIES_MAWILE}, +#endif +    {48, 48, SPECIES_GOLBAT}, +    {50, 50, SPECIES_GOLBAT}, +#ifdef SAPPHIRE +    {50, 50, SPECIES_SABLEYE}, +#else +    {50, 50, SPECIES_MAWILE}, +#endif +    {48, 48, SPECIES_CLAYDOL}, +#ifdef SAPPHIRE +    {48, 48, SPECIES_BANETTE}, +    {50, 50, SPECIES_BANETTE}, +#else +    {48, 48, SPECIES_DUSCLOPS}, +    {50, 50, SPECIES_DUSCLOPS}, +#endif +    {49, 49, SPECIES_CLAYDOL}, +    {47, 47, SPECIES_CLAYDOL}, +    {50, 50, SPECIES_CLAYDOL}, +    {47, 47, SPECIES_CLAYDOL}, +    {50, 50, SPECIES_CLAYDOL}, +}; +const struct WildPokemonInfo SkyPillar_1F_LandMonsInfo = {10, SkyPillar_1F_LandMons}; + +const struct WildPokemon SkyPillar_3F_LandMons [] = +{ +#ifdef SAPPHIRE +    {51, 51, SPECIES_SABLEYE}, +#else +    {51, 51, SPECIES_MAWILE}, +#endif +    {51, 51, SPECIES_GOLBAT}, +    {53, 53, SPECIES_GOLBAT}, +#ifdef SAPPHIRE +    {53, 53, SPECIES_SABLEYE}, +#else +    {53, 53, SPECIES_MAWILE}, +#endif +    {51, 51, SPECIES_CLAYDOL}, +#ifdef SAPPHIRE +    {51, 51, SPECIES_BANETTE}, +    {53, 53, SPECIES_BANETTE}, +#else +    {51, 51, SPECIES_DUSCLOPS}, +    {53, 53, SPECIES_DUSCLOPS}, +#endif +    {52, 52, SPECIES_CLAYDOL}, +    {50, 50, SPECIES_CLAYDOL}, +    {53, 53, SPECIES_CLAYDOL}, +    {50, 50, SPECIES_CLAYDOL}, +    {53, 53, SPECIES_CLAYDOL}, +}; +const struct WildPokemonInfo SkyPillar_3F_LandMonsInfo = {10, SkyPillar_3F_LandMons}; + +const struct WildPokemon SkyPillar_5F_LandMons [] = +{ +#ifdef SAPPHIRE +    {54, 54, SPECIES_SABLEYE}, +#else +    {54, 54, SPECIES_MAWILE}, +#endif +    {54, 54, SPECIES_GOLBAT}, +    {56, 56, SPECIES_GOLBAT}, +#ifdef SAPPHIRE +    {56, 56, SPECIES_SABLEYE}, +#else +    {56, 56, SPECIES_MAWILE}, +#endif +    {54, 54, SPECIES_CLAYDOL}, +#ifdef SAPPHIRE +    {54, 54, SPECIES_BANETTE}, +    {56, 56, SPECIES_BANETTE}, +#else +    {54, 54, SPECIES_DUSCLOPS}, +    {56, 56, SPECIES_DUSCLOPS}, +#endif +    {55, 55, SPECIES_CLAYDOL}, +    {56, 56, SPECIES_CLAYDOL}, +    {57, 57, SPECIES_ALTARIA}, +    {54, 54, SPECIES_ALTARIA}, +    {60, 60, SPECIES_ALTARIA}, +}; +const struct WildPokemonInfo SkyPillar_5F_LandMonsInfo = {10, SkyPillar_5F_LandMons}; + +const struct WildPokemon Route101_LandMons [] = +{ +    {2, 2, SPECIES_WURMPLE}, +    {2, 2, SPECIES_ZIGZAGOON}, +    {2, 2, SPECIES_WURMPLE}, +    {3, 3, SPECIES_WURMPLE}, +    {3, 3, SPECIES_ZIGZAGOON}, +    {3, 3, SPECIES_ZIGZAGOON}, +    {3, 3, SPECIES_WURMPLE}, +    {3, 3, SPECIES_ZIGZAGOON}, +    {2, 2, SPECIES_POOCHYENA}, +    {2, 2, SPECIES_POOCHYENA}, +    {3, 3, SPECIES_POOCHYENA}, +    {3, 3, SPECIES_POOCHYENA}, +}; +const struct WildPokemonInfo Route101_LandMonsInfo = {20, Route101_LandMons}; + +const struct WildPokemon Route102_LandMons [] = +{ +    {3, 3, SPECIES_ZIGZAGOON}, +    {3, 3, SPECIES_WURMPLE}, +    {4, 4, SPECIES_ZIGZAGOON}, +    {4, 4, SPECIES_WURMPLE}, +#ifdef SAPPHIRE +    {3, 3, SPECIES_LOTAD}, +    {4, 4, SPECIES_LOTAD}, +#else +    {3, 3, SPECIES_SEEDOT}, +    {4, 4, SPECIES_SEEDOT}, +#endif +    {3, 3, SPECIES_POOCHYENA}, +    {3, 3, SPECIES_POOCHYENA}, +    {4, 4, SPECIES_POOCHYENA}, +    {4, 4, SPECIES_RALTS}, +    {4, 4, SPECIES_POOCHYENA}, +    {3, 3, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route102_LandMonsInfo = {20, Route102_LandMons}; + +const struct WildPokemon Route102_WaterMons [] = +{ +    {20, 30, SPECIES_MARILL}, +    {10, 20, SPECIES_MARILL}, +    {30, 35, SPECIES_MARILL}, +    {5, 10, SPECIES_MARILL}, +    {20, 30, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route102_WaterMonsInfo = {4, Route102_WaterMons}; + +const struct WildPokemon Route102_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 Route102_FishingMonsInfo = {30, Route102_FishingMons}; + +const struct WildPokemon Route103_LandMons [] = +{ +    {2, 2, SPECIES_ZIGZAGOON}, +    {3, 3, SPECIES_ZIGZAGOON}, +    {3, 3, SPECIES_ZIGZAGOON}, +    {4, 4, SPECIES_ZIGZAGOON}, +    {2, 2, SPECIES_POOCHYENA}, +    {3, 3, SPECIES_POOCHYENA}, +    {3, 3, SPECIES_POOCHYENA}, +    {4, 4, SPECIES_POOCHYENA}, +    {3, 3, SPECIES_WINGULL}, +    {3, 3, SPECIES_WINGULL}, +    {2, 2, SPECIES_WINGULL}, +    {4, 4, SPECIES_WINGULL}, +}; +const struct WildPokemonInfo Route103_LandMonsInfo = {20, Route103_LandMons}; + +const struct WildPokemon Route103_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route103_WaterMonsInfo = {4, Route103_WaterMons}; + +const struct WildPokemon Route103_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 Route103_FishingMonsInfo = {30, Route103_FishingMons}; + +const struct WildPokemon Route104_LandMons [] = +{ +    {4, 4, SPECIES_ZIGZAGOON}, +    {4, 4, SPECIES_WURMPLE}, +    {5, 5, SPECIES_ZIGZAGOON}, +    {5, 5, SPECIES_WURMPLE}, +    {4, 4, SPECIES_ZIGZAGOON}, +    {5, 5, SPECIES_ZIGZAGOON}, +    {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 Route104_LandMonsInfo = {20, Route104_LandMons}; + +const struct WildPokemon Route104_WaterMons [] = +{ +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route104_WaterMonsInfo = {4, Route104_WaterMons}; + +const struct WildPokemon Route104_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 Route104_FishingMonsInfo = {30, Route104_FishingMons}; + +const struct WildPokemon Route105_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route105_WaterMonsInfo = {4, Route105_WaterMons}; + +const struct WildPokemon Route105_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 Route105_FishingMonsInfo = {30, Route105_FishingMons}; + +const struct WildPokemon Route106_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route106_WaterMonsInfo = {4, Route106_WaterMons}; + +const struct WildPokemon Route106_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 Route106_FishingMonsInfo = {30, Route106_FishingMons}; + +const struct WildPokemon Route107_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route107_WaterMonsInfo = {4, Route107_WaterMons}; + +const struct WildPokemon Route107_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 Route107_FishingMonsInfo = {30, Route107_FishingMons}; + +const struct WildPokemon Route108_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route108_WaterMonsInfo = {4, Route108_WaterMons}; + +const struct WildPokemon Route108_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 Route108_FishingMonsInfo = {30, Route108_FishingMons}; + +const struct WildPokemon Route109_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route109_WaterMonsInfo = {4, Route109_WaterMons}; + +const struct WildPokemon Route109_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 Route109_FishingMonsInfo = {30, Route109_FishingMons}; + +const struct WildPokemon Route110_LandMons [] = +{ +    {12, 12, SPECIES_ZIGZAGOON}, +    {12, 12, SPECIES_ELECTRIKE}, +    {12, 12, SPECIES_GULPIN}, +    {13, 13, SPECIES_ELECTRIKE}, +#ifdef SAPPHIRE +    {13, 13, SPECIES_PLUSLE}, +#else +    {13, 13, SPECIES_MINUN}, +#endif +    {13, 13, SPECIES_ODDISH}, +#ifdef SAPPHIRE +    {13, 13, SPECIES_PLUSLE}, +#else +    {13, 13, SPECIES_MINUN}, +#endif +    {13, 13, SPECIES_GULPIN}, +    {12, 12, SPECIES_WINGULL}, +    {12, 12, SPECIES_WINGULL}, +#ifdef SAPPHIRE +    {12, 12, SPECIES_MINUN}, +    {13, 13, SPECIES_MINUN}, +#else +    {12, 12, SPECIES_PLUSLE}, +    {13, 13, SPECIES_PLUSLE}, +#endif +}; +const struct WildPokemonInfo Route110_LandMonsInfo = {20, Route110_LandMons}; + +const struct WildPokemon Route110_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route110_WaterMonsInfo = {4, Route110_WaterMons}; + +const struct WildPokemon Route110_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 Route110_FishingMonsInfo = {30, Route110_FishingMons}; + +const struct WildPokemon Route111_LandMons [] = +{ +    {20, 20, SPECIES_SANDSHREW}, +    {20, 20, SPECIES_TRAPINCH}, +    {21, 21, SPECIES_SANDSHREW}, +    {21, 21, SPECIES_TRAPINCH}, +    {19, 19, SPECIES_CACNEA}, +    {21, 21, SPECIES_CACNEA}, +    {19, 19, SPECIES_SANDSHREW}, +    {19, 19, SPECIES_TRAPINCH}, +    {20, 20, SPECIES_BALTOY}, +    {20, 20, SPECIES_BALTOY}, +    {22, 22, SPECIES_BALTOY}, +    {22, 22, SPECIES_BALTOY}, +}; +const struct WildPokemonInfo Route111_LandMonsInfo = {10, Route111_LandMons}; + +const struct WildPokemon Route111_WaterMons [] = +{ +    {20, 30, SPECIES_MARILL}, +    {10, 20, SPECIES_MARILL}, +    {30, 35, SPECIES_MARILL}, +    {5, 10, SPECIES_MARILL}, +    {20, 30, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route111_WaterMonsInfo = {4, Route111_WaterMons}; + +const struct WildPokemon Route111_RockSmashMons [] = +{ +    {10, 15, SPECIES_GEODUDE}, +    {5, 10, SPECIES_GEODUDE}, +    {15, 20, SPECIES_GEODUDE}, +    {15, 20, SPECIES_GEODUDE}, +    {15, 20, SPECIES_GEODUDE}, +}; +const struct WildPokemonInfo Route111_RockSmashMonsInfo = {20, Route111_RockSmashMons}; + +const struct WildPokemon Route111_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 Route111_FishingMonsInfo = {30, Route111_FishingMons}; + +const struct WildPokemon Route112_LandMons [] = +{ +    {15, 15, SPECIES_NUMEL}, +    {15, 15, SPECIES_NUMEL}, +    {15, 15, SPECIES_MACHOP}, +    {14, 14, SPECIES_NUMEL}, +    {14, 14, SPECIES_NUMEL}, +    {14, 14, SPECIES_MACHOP}, +    {16, 16, SPECIES_NUMEL}, +    {16, 16, SPECIES_MACHOP}, +    {16, 16, SPECIES_NUMEL}, +    {16, 16, SPECIES_NUMEL}, +    {16, 16, SPECIES_NUMEL}, +    {16, 16, SPECIES_NUMEL}, +}; +const struct WildPokemonInfo Route112_LandMonsInfo = {20, Route112_LandMons}; + +const struct WildPokemon Route113_LandMons [] = +{ +    {15, 15, SPECIES_SPINDA}, +    {15, 15, SPECIES_SPINDA}, +    {15, 15, SPECIES_SANDSHREW}, +    {14, 14, SPECIES_SPINDA}, +    {14, 14, SPECIES_SPINDA}, +    {14, 14, SPECIES_SANDSHREW}, +    {16, 16, SPECIES_SPINDA}, +    {16, 16, SPECIES_SANDSHREW}, +    {16, 16, SPECIES_SPINDA}, +    {16, 16, SPECIES_SKARMORY}, +    {16, 16, SPECIES_SPINDA}, +    {16, 16, SPECIES_SKARMORY}, +}; +const struct WildPokemonInfo Route113_LandMonsInfo = {20, Route113_LandMons}; + +const struct WildPokemon Route114_LandMons [] = +{ +    {16, 16, SPECIES_SWABLU}, +#ifdef SAPPHIRE +    {16, 16, SPECIES_LOTAD}, +#else +    {16, 16, SPECIES_SEEDOT}, +#endif +    {17, 17, SPECIES_SWABLU}, +    {15, 15, SPECIES_SWABLU}, +#ifdef SAPPHIRE +    {15, 15, SPECIES_LOTAD}, +    {16, 16, SPECIES_SEVIPER}, +    {16, 16, SPECIES_LOMBRE}, +    {18, 18, SPECIES_LOMBRE}, +    {17, 17, SPECIES_SEVIPER}, +    {15, 15, SPECIES_SEVIPER}, +    {17, 17, SPECIES_SEVIPER}, +#else +    {15, 15, SPECIES_SEEDOT}, +    {16, 16, SPECIES_ZANGOOSE}, +    {16, 16, SPECIES_NUZLEAF}, +    {18, 18, SPECIES_NUZLEAF}, +    {17, 17, SPECIES_ZANGOOSE}, +    {15, 15, SPECIES_ZANGOOSE}, +    {17, 17, SPECIES_ZANGOOSE}, +#endif +    {15, 15, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route114_LandMonsInfo = {20, Route114_LandMons}; + +const struct WildPokemon Route114_WaterMons [] = +{ +    {20, 30, SPECIES_MARILL}, +    {10, 20, SPECIES_MARILL}, +    {30, 35, SPECIES_MARILL}, +    {5, 10, SPECIES_MARILL}, +    {20, 30, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route114_WaterMonsInfo = {4, Route114_WaterMons}; + +const struct WildPokemon Route114_RockSmashMons [] = +{ +    {10, 15, SPECIES_GEODUDE}, +    {5, 10, SPECIES_GEODUDE}, +    {15, 20, SPECIES_GEODUDE}, +    {15, 20, SPECIES_GEODUDE}, +    {15, 20, SPECIES_GEODUDE}, +}; +const struct WildPokemonInfo Route114_RockSmashMonsInfo = {20, Route114_RockSmashMons}; + +const struct WildPokemon Route114_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 Route114_FishingMonsInfo = {30, Route114_FishingMons}; + +const struct WildPokemon Route115_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 Route115_LandMonsInfo = {20, Route115_LandMons}; + +const struct WildPokemon Route115_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route115_WaterMonsInfo = {4, Route115_WaterMons}; + +const struct WildPokemon Route115_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 Route115_FishingMonsInfo = {30, Route115_FishingMons}; + +const struct WildPokemon Route116_LandMons [] = +{ +    {6, 6, SPECIES_ZIGZAGOON}, +    {6, 6, SPECIES_WHISMUR}, +    {6, 6, SPECIES_NINCADA}, +    {7, 7, SPECIES_WHISMUR}, +    {7, 7, SPECIES_NINCADA}, +    {6, 6, SPECIES_TAILLOW}, +    {7, 7, SPECIES_TAILLOW}, +    {8, 8, SPECIES_TAILLOW}, +    {7, 7, SPECIES_ZIGZAGOON}, +    {8, 8, SPECIES_ZIGZAGOON}, +    {7, 7, SPECIES_SKITTY}, +    {8, 8, SPECIES_SKITTY}, +}; +const struct WildPokemonInfo Route116_LandMonsInfo = {20, Route116_LandMons}; + +const struct WildPokemon Route117_LandMons [] = +{ +    {13, 13, SPECIES_ZIGZAGOON}, +    {13, 13, SPECIES_ROSELIA}, +    {14, 14, SPECIES_ZIGZAGOON}, +    {14, 14, SPECIES_ROSELIA}, +    {13, 13, SPECIES_MARILL}, +    {13, 13, SPECIES_ODDISH}, +#ifdef SAPPHIRE +    {13, 13, SPECIES_VOLBEAT}, +    {13, 13, SPECIES_VOLBEAT}, +    {14, 14, SPECIES_VOLBEAT}, +    {14, 14, SPECIES_VOLBEAT}, +    {13, 13, SPECIES_ILLUMISE}, +#else +    {13, 13, SPECIES_ILLUMISE}, +    {13, 13, SPECIES_ILLUMISE}, +    {14, 14, SPECIES_ILLUMISE}, +    {14, 14, SPECIES_ILLUMISE}, +    {13, 13, SPECIES_VOLBEAT}, +#endif +    {13, 13, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route117_LandMonsInfo = {20, Route117_LandMons}; + +const struct WildPokemon Route117_WaterMons [] = +{ +    {20, 30, SPECIES_MARILL}, +    {10, 20, SPECIES_MARILL}, +    {30, 35, SPECIES_MARILL}, +    {5, 10, SPECIES_MARILL}, +    {20, 30, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route117_WaterMonsInfo = {4, Route117_WaterMons}; + +const struct WildPokemon Route117_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 Route117_FishingMonsInfo = {30, Route117_FishingMons}; + +const struct WildPokemon Route118_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 Route118_LandMonsInfo = {20, Route118_LandMons}; + +const struct WildPokemon Route118_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route118_WaterMonsInfo = {4, Route118_WaterMons}; + +const struct WildPokemon Route118_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 Route118_FishingMonsInfo = {30, Route118_FishingMons}; + +const struct WildPokemon Route119_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 Route119_LandMonsInfo = {15, Route119_LandMons}; + +const struct WildPokemon Route119_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route119_WaterMonsInfo = {4, Route119_WaterMons}; + +const struct WildPokemon Route119_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 Route119_FishingMonsInfo = {30, Route119_FishingMons}; + +const struct WildPokemon Route120_LandMons [] = +{ +    {25, 25, SPECIES_ZIGZAGOON}, +    {25, 25, SPECIES_LINOONE}, +    {27, 27, SPECIES_LINOONE}, +    {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_SURSKIT}, +}; +const struct WildPokemonInfo Route120_LandMonsInfo = {20, Route120_LandMons}; + +const struct WildPokemon Route120_WaterMons [] = +{ +    {20, 30, SPECIES_MARILL}, +    {10, 20, SPECIES_MARILL}, +    {30, 35, SPECIES_MARILL}, +    {5, 10, SPECIES_MARILL}, +    {20, 30, SPECIES_SURSKIT}, +}; +const struct WildPokemonInfo Route120_WaterMonsInfo = {4, Route120_WaterMons}; + +const struct WildPokemon Route120_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 Route120_FishingMonsInfo = {30, Route120_FishingMons}; + +const struct WildPokemon Route121_LandMons [] = +{ +    {26, 26, SPECIES_ZIGZAGOON}, +#ifdef SAPPHIRE +    {26, 26, SPECIES_SHUPPET}, +#else +    {26, 26, SPECIES_DUSKULL}, +#endif +    {26, 26, SPECIES_LINOONE}, +#ifdef SAPPHIRE +    {28, 28, SPECIES_SHUPPET}, +#else +    {28, 28, SPECIES_DUSKULL}, +#endif +    {28, 28, SPECIES_LINOONE}, +    {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 Route121_LandMonsInfo = {20, Route121_LandMons}; + +const struct WildPokemon Route121_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route121_WaterMonsInfo = {4, Route121_WaterMons}; + +const struct WildPokemon Route121_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 Route121_FishingMonsInfo = {30, Route121_FishingMons}; + +const struct WildPokemon Route122_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route122_WaterMonsInfo = {4, Route122_WaterMons}; + +const struct WildPokemon Route122_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 Route122_FishingMonsInfo = {30, Route122_FishingMons}; + +const struct WildPokemon Route123_LandMons [] = +{ +    {26, 26, SPECIES_ZIGZAGOON}, +#ifdef SAPPHIRE +    {26, 26, SPECIES_SHUPPET}, +#else +    {26, 26, SPECIES_DUSKULL}, +#endif +    {26, 26, SPECIES_LINOONE}, +#ifdef SAPPHIRE +    {28, 28, SPECIES_SHUPPET}, +#else +    {28, 28, SPECIES_DUSKULL}, +#endif +    {28, 28, SPECIES_LINOONE}, +    {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 Route123_LandMonsInfo = {20, Route123_LandMons}; + +const struct WildPokemon Route123_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route123_WaterMonsInfo = {4, Route123_WaterMons}; + +const struct WildPokemon Route123_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 Route123_FishingMonsInfo = {30, Route123_FishingMons}; + +const struct WildPokemon Route124_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route124_WaterMonsInfo = {4, Route124_WaterMons}; + +const struct WildPokemon Route124_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 Route124_FishingMonsInfo = {30, Route124_FishingMons}; + +const struct WildPokemon Route125_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route125_WaterMonsInfo = {4, Route125_WaterMons}; + +const struct WildPokemon Route125_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 Route125_FishingMonsInfo = {30, Route125_FishingMons}; + +const struct WildPokemon Route126_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route126_WaterMonsInfo = {4, Route126_WaterMons}; + +const struct WildPokemon Route126_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 Route126_FishingMonsInfo = {30, Route126_FishingMons}; + +const struct WildPokemon Route127_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route127_WaterMonsInfo = {4, Route127_WaterMons}; + +const struct WildPokemon Route127_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 Route127_FishingMonsInfo = {30, Route127_FishingMons}; + +const struct WildPokemon Route128_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route128_WaterMonsInfo = {4, Route128_WaterMons}; + +const struct WildPokemon Route128_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 Route128_FishingMonsInfo = {30, Route128_FishingMons}; + +const struct WildPokemon Route129_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +#ifdef SAPPHIRE +    {25, 30, SPECIES_WAILORD}, +#else +    {35, 40, SPECIES_WAILORD}, +#endif +}; +const struct WildPokemonInfo Route129_WaterMonsInfo = {4, Route129_WaterMons}; + +const struct WildPokemon Route129_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 Route129_FishingMonsInfo = {30, Route129_FishingMons}; + +const struct WildPokemon Route130_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 Route130_LandMonsInfo = {20, Route130_LandMons}; + +const struct WildPokemon Route130_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route130_WaterMonsInfo = {4, Route130_WaterMons}; + +const struct WildPokemon Route130_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 Route130_FishingMonsInfo = {30, Route130_FishingMons}; + +const struct WildPokemon Route131_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route131_WaterMonsInfo = {4, Route131_WaterMons}; + +const struct WildPokemon Route131_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 Route131_FishingMonsInfo = {30, Route131_FishingMons}; + +const struct WildPokemon Route132_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route132_WaterMonsInfo = {4, Route132_WaterMons}; + +const struct WildPokemon Route132_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 Route132_FishingMonsInfo = {30, Route132_FishingMons}; + +const struct WildPokemon Route133_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route133_WaterMonsInfo = {4, Route133_WaterMons}; + +const struct WildPokemon Route133_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 Route133_FishingMonsInfo = {30, Route133_FishingMons}; + +const struct WildPokemon Route134_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo Route134_WaterMonsInfo = {4, Route134_WaterMons}; + +const struct WildPokemon Route134_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 Route134_FishingMonsInfo = {30, Route134_FishingMons}; + +const struct WildPokemon SafariZone_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 SafariZone_Northwest_LandMonsInfo = {25, SafariZone_Northwest_LandMons}; + +const struct WildPokemon SafariZone_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 SafariZone_Northwest_WaterMonsInfo = {9, SafariZone_Northwest_WaterMons}; + +const struct WildPokemon SafariZone_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 SafariZone_Northwest_FishingMonsInfo = {35, SafariZone_Northwest_FishingMons}; + +const struct WildPokemon SafariZone_Northeast_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 SafariZone_Northeast_LandMonsInfo = {25, SafariZone_Northeast_LandMons}; + +const struct WildPokemon SafariZone_Northeast_RockSmashMons [] = +{ +    {10, 15, SPECIES_GEODUDE}, +    {5, 10, SPECIES_GEODUDE}, +    {15, 20, SPECIES_GEODUDE}, +    {20, 25, SPECIES_GEODUDE}, +    {25, 30, SPECIES_GEODUDE}, +}; +const struct WildPokemonInfo SafariZone_Northeast_RockSmashMonsInfo = {25, SafariZone_Northeast_RockSmashMons}; + +const struct WildPokemon SafariZone_Southwest_LandMons [] = +{ +    {25, 25, SPECIES_ODDISH}, +    {27, 27, SPECIES_ODDISH}, +    {25, 25, SPECIES_GIRAFARIG}, +    {27, 27, SPECIES_GIRAFARIG}, +    {25, 25, SPECIES_NATU}, +#ifdef SAPPHIRE +    {27, 27, SPECIES_DODUO}, +#else +    {25, 25, SPECIES_DODUO}, +#endif +    {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 SafariZone_Southwest_LandMonsInfo = {25, SafariZone_Southwest_LandMons}; + +const struct WildPokemon SafariZone_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 SafariZone_Southwest_WaterMonsInfo = {9, SafariZone_Southwest_WaterMons}; + +const struct WildPokemon SafariZone_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 SafariZone_Southwest_FishingMonsInfo = {35, SafariZone_Southwest_FishingMons}; + +const struct WildPokemon SafariZone_Southeast_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 SafariZone_Southeast_LandMonsInfo = {25, SafariZone_Southeast_LandMons}; + +const struct WildPokemon DewfordTown_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo DewfordTown_WaterMonsInfo = {4, DewfordTown_WaterMons}; + +const struct WildPokemon DewfordTown_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 DewfordTown_FishingMonsInfo = {10, DewfordTown_FishingMons}; + +const struct WildPokemon PacifidlogTown_WaterMons [] = +{ +    {5, 35, SPECIES_TENTACOOL}, +    {10, 30, SPECIES_WINGULL}, +    {15, 25, SPECIES_WINGULL}, +    {25, 30, SPECIES_PELIPPER}, +    {25, 30, SPECIES_PELIPPER}, +}; +const struct WildPokemonInfo PacifidlogTown_WaterMonsInfo = {4, PacifidlogTown_WaterMons}; + +const struct WildPokemon PacifidlogTown_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 PacifidlogTown_FishingMonsInfo = {10, PacifidlogTown_FishingMons}; + +const struct WildPokemon Underwater1_WaterMons [] = +{ +    {20, 30, SPECIES_CLAMPERL}, +    {20, 30, SPECIES_CHINCHOU}, +    {30, 35, SPECIES_CLAMPERL}, +    {30, 35, SPECIES_RELICANTH}, +    {30, 35, SPECIES_RELICANTH}, +}; +const struct WildPokemonInfo Underwater1_WaterMonsInfo = {4, Underwater1_WaterMons}; + +const struct WildPokemon Underwater2_WaterMons [] = +{ +    {20, 30, SPECIES_CLAMPERL}, +    {20, 30, SPECIES_CHINCHOU}, +    {30, 35, SPECIES_CLAMPERL}, +    {30, 35, SPECIES_RELICANTH}, +    {30, 35, SPECIES_RELICANTH}, +}; +const struct WildPokemonInfo Underwater2_WaterMonsInfo = {4, Underwater2_WaterMons}; + +  extern u16 gRoute119WaterTileData[];  extern struct WildPokemonHeader gWildMonHeaders[];  extern struct Pokemon gEnemyParty[6]; @@ -234,7 +3119,7 @@ static u8 ChooseWildMonIndex_Fishing(u8 rod)      return wildMonIndex;  } -static u8 ChooseWildMonLevel(struct WildPokemon *wildPokemon) +static u8 ChooseWildMonLevel(const struct WildPokemon *wildPokemon)  {      u8 min;      u8 max; | 
