summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoryenatch <yenatch@gmail.com>2017-06-15 22:08:23 -0400
committerGitHub <noreply@github.com>2017-06-15 22:08:23 -0400
commitc8213423cefc83310bc62ca8bcc17d7b6b42e442 (patch)
treed832f92e52e4c470e9e8c7aa155a522c207c68f1 /src
parent6f4bf2cb0535b1a7dc72029c65d93e3ebdb19f95 (diff)
parent61e65d1b8e266bfa8909ba0d010947dcbc70979c (diff)
Merge pull request #323 from camthesaxman/decompile_pokedex
finish decompiling pokedex
Diffstat (limited to 'src')
-rw-r--r--src/data/pokedex_entries_en.h9651
-rw-r--r--src/data/pokedex_orders.h1192
-rw-r--r--src/menu.c2
-rw-r--r--src/pokedex.c4176
-rw-r--r--src/pokemon_3.c2
-rw-r--r--src/starter_choose.c2
6 files changed, 14083 insertions, 942 deletions
diff --git a/src/data/pokedex_entries_en.h b/src/data/pokedex_entries_en.h
new file mode 100644
index 000000000..86da3d67b
--- /dev/null
+++ b/src/data/pokedex_entries_en.h
@@ -0,0 +1,9651 @@
+static const u8 DexDescription_Dummy_1[] = _(
+ "This is a newly discovered POKéMON.\n"
+ "It is currently under investigation.");
+static const u8 DexDescription_Dummy_2[] = _(
+ "No detailed information is available\n"
+ "at this time.");
+
+static const u8 DexDescription_Bulbasaur_1[] = _(
+ "BULBASAUR can be seen napping in\n"
+ "bright sunlight.\n"
+ "There is a seed on its back.");
+static const u8 DexDescription_Bulbasaur_2[] = _(
+ "By soaking up the sun’s rays, the seed\n"
+ "grows progressively larger.");
+
+static const u8 DexDescription_Ivysaur_1[] = _(
+ "There is a bud on this POKéMON’s back.\n"
+ "To support its weight, IVYSAUR’s legs\n"
+ "and trunk grow thick and strong.");
+static const u8 DexDescription_Ivysaur_2[] = _(
+ "If it starts spending more time lying\n"
+ "in the sunlight, it’s a sign that the\n"
+ "bud will bloom into a large flower soon.");
+
+static const u8 DexDescription_Venusaur_1[] = _(
+ "There is a large flower on VENUSAUR’s\n"
+ "back. The flower is said to take on vivid\n"
+ "colors if it gets plenty of nutrition");
+static const u8 DexDescription_Venusaur_2[] = _(
+ "and sunlight. The flower’s aroma\n"
+ "soothes the emotions of people.");
+
+static const u8 DexDescription_Charmander_1[] = _(
+ "The flame that burns at the tip of its\n"
+ "tail is an indication of its emotions.\n"
+ "The flame wavers when CHARMANDER is");
+static const u8 DexDescription_Charmander_2[] = _(
+ "enjoying itself. If the POKéMON becomes\n"
+ "enraged, the flame burns fiercely.");
+
+static const u8 DexDescription_Charmeleon_1[] = _(
+ "CHARMELEON mercilessly destroys its\n"
+ "foes using its sharp claws.\n"
+ "If it encounters a strong foe, it turns");
+static const u8 DexDescription_Charmeleon_2[] = _(
+ "aggressive. In this excited state, the\n"
+ "flame at the tip of its tail flares with a\n"
+ "bluish white color.");
+
+static const u8 DexDescription_Charizard_1[] = _(
+ "CHARIZARD flies around the sky in\n"
+ "search of powerful opponents.\n"
+ "It breathes fire of such great heat");
+static const u8 DexDescription_Charizard_2[] = _(
+ "that it melts anything. However, it\n"
+ "never turns its fiery breath on any\n"
+ "opponent weaker than itself.");
+
+static const u8 DexDescription_Squirtle_1[] = _(
+ "SQUIRTLE’s shell is not merely used\n"
+ "for protection.\n"
+ "The shell’s rounded shape and the");
+static const u8 DexDescription_Squirtle_2[] = _(
+ "grooves on its surface help minimize\n"
+ "resistance in water, enabling this\n"
+ "POKéMON to swim at high speeds.");
+
+static const u8 DexDescription_Wartortle_1[] = _(
+ "Its tail is large and covered with a rich,\n"
+ "thick fur. The tail becomes increasingly\n"
+ "deeper in color as WARTORTLE ages.");
+static const u8 DexDescription_Wartortle_2[] = _(
+ "The scratches on its shell are evidence\n"
+ "of this POKéMON’s toughness as a\n"
+ "battler.");
+
+static const u8 DexDescription_Blastoise_1[] = _(
+ "BLASTOISE has water spouts that\n"
+ "protrude from its shell. The water\n"
+ "spouts are very accurate.");
+static const u8 DexDescription_Blastoise_2[] = _(
+ "They can shoot bullets of water with\n"
+ "enough accuracy to strike empty cans\n"
+ "from a distance of over 160 feet.");
+
+static const u8 DexDescription_Caterpie_1[] = _(
+ "CATERPIE has a voracious appetite.\n"
+ "It can devour leaves bigger than its\n"
+ "body right before your eyes.");
+static const u8 DexDescription_Caterpie_2[] = _(
+ "From its antenna, this POKéMON releases\n"
+ "a terrifically strong odor.");
+
+static const u8 DexDescription_Metapod_1[] = _(
+ "The shell covering this POKéMON’s body\n"
+ "is as hard as an iron slab.\n"
+ "METAPOD does not move very much.");
+static const u8 DexDescription_Metapod_2[] = _(
+ "It stays still because it is preparing\n"
+ "its soft innards for evolution inside\n"
+ "the hard shell.");
+
+static const u8 DexDescription_Butterfree_1[] = _(
+ "BUTTERFREE has a superior ability to\n"
+ "search for delicious honey from\n"
+ "flowers.");
+static const u8 DexDescription_Butterfree_2[] = _(
+ "It can even search out, extract, and\n"
+ "carry honey from flowers that are\n"
+ "blooming over six miles from its nest.");
+
+static const u8 DexDescription_Weedle_1[] = _(
+ "WEEDLE has an extremely acute sense\n"
+ "of smell.\n"
+ "It is capable of distinguishing its");
+static const u8 DexDescription_Weedle_2[] = _(
+ "favorite kinds of leaves from those it\n"
+ "dislikes just by sniffing with its big\n"
+ "red proboscis (nose).");
+
+static const u8 DexDescription_Kakuna_1[] = _(
+ "KAKUNA remains virtually immobile as it\n"
+ "clings to a tree. However, on the\n"
+ "inside, it is extremely busy as it");
+static const u8 DexDescription_Kakuna_2[] = _(
+ "prepares for its coming evolution.\n"
+ "This is evident from how hot the shell\n"
+ "becomes to the touch.");
+
+static const u8 DexDescription_Beedrill_1[] = _(
+ "BEEDRILL is extremely territorial.\n"
+ "No one should ever approach its nest -\n"
+ "this is for their own safety.");
+static const u8 DexDescription_Beedrill_2[] = _(
+ "If angered, they will attack in a furious\n"
+ "swarm.");
+
+static const u8 DexDescription_Pidgey_1[] = _(
+ "PIDGEY has an extremely sharp sense\n"
+ "of direction.\n"
+ "It is capable of unerringly returning");
+static const u8 DexDescription_Pidgey_2[] = _(
+ "home to its nest, however far it may be\n"
+ "removed from its familiar surroundings.");
+
+static const u8 DexDescription_Pidgeotto_1[] = _(
+ "PIDGEOTTO claims a large area as its\n"
+ "own territory. This POKéMON flies\n"
+ "around, patrolling its living space.");
+static const u8 DexDescription_Pidgeotto_2[] = _(
+ "If its territory is violated, it shows\n"
+ "no mercy in thoroughly punishing the\n"
+ "foe with its sharp claws.");
+
+static const u8 DexDescription_Pidgeot_1[] = _(
+ "This POKéMON has a dazzling plumage of\n"
+ "beautifully glossy feathers.\n"
+ "Many TRAINERS are captivated by the");
+static const u8 DexDescription_Pidgeot_2[] = _(
+ "striking beauty of the feathers on its\n"
+ "head, compelling them to choose PIDGEOT\n"
+ "as their POKéMON.");
+
+static const u8 DexDescription_Rattata_1[] = _(
+ "RATTATA is cautious in the extreme.\n"
+ "Even while it is asleep, it constantly\n"
+ "listens by moving its ears around.");
+static const u8 DexDescription_Rattata_2[] = _(
+ "It is not picky about where it lives -\n"
+ "it will make its nest anywhere.");
+
+static const u8 DexDescription_Raticate_1[] = _(
+ "RATICATE’s sturdy fangs grow steadily.\n"
+ "To keep them ground down, it gnaws\n"
+ "on rocks and logs.");
+static const u8 DexDescription_Raticate_2[] = _(
+ "It may even chew on the walls of\n"
+ "houses.");
+
+static const u8 DexDescription_Spearow_1[] = _(
+ "SPEAROW has a very loud cry that can\n"
+ "be heard over half a mile away.\n"
+ "If its high, keening cry is heard");
+static const u8 DexDescription_Spearow_2[] = _(
+ "echoing all around, it is a sign that\n"
+ "they are warning each other of danger.");
+
+static const u8 DexDescription_Fearow_1[] = _(
+ "FEAROW is recognized by its long neck\n"
+ "and elongated beak.\n"
+ "They are conveniently shaped for");
+static const u8 DexDescription_Fearow_2[] = _(
+ "catching prey in soil or water.\n"
+ "It deftly moves its long and skinny\n"
+ "beak to pluck prey.");
+
+static const u8 DexDescription_Ekans_1[] = _(
+ "EKANS curls itself up in a spiral while\n"
+ "it rests.\n"
+ "Assuming this position allows it to");
+static const u8 DexDescription_Ekans_2[] = _(
+ "quickly respond to a threat from any\n"
+ "direction with a glare from its upraised\n"
+ "head.");
+
+static const u8 DexDescription_Arbok_1[] = _(
+ "This POKéMON is terrifically strong in\n"
+ "order to constrict things with its body.\n"
+ "It can even flatten steel oil drums.");
+static const u8 DexDescription_Arbok_2[] = _(
+ "Once ARBOK wraps its body around its\n"
+ "foe, escaping its crunching embrace is\n"
+ "impossible.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Pikachu_1[] = _(
+ "This POKéMON has electricity-storing\n"
+ "pouches on its cheeks. These appear to\n"
+ "become electrically charged during the");
+static const u8 DexDescription_Pikachu_2[] = _(
+ "night while PIKACHU sleeps.\n"
+ "It occasionally discharges electricity\n"
+ "when it is dozy after waking up.");
+#else
+static const u8 DexDescription_Pikachu_1[] = _(
+ "Whenever PIKACHU comes across\n"
+ "something new, it blasts it with a jolt\n"
+ "of electricity.");
+static const u8 DexDescription_Pikachu_2[] = _(
+ "If you come across a blackened berry,\n"
+ "it’s evidence that this POKéMON\n"
+ "mistook the intensity of its charge.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Raichu_1[] = _(
+ "This POKéMON exudes a weak electrical\n"
+ "charge from all over its body that makes\n"
+ "it take on a slight glow in darkness.");
+static const u8 DexDescription_Raichu_2[] = _(
+ "RAICHU searches for electricity by\n"
+ "planting its tail in the ground.");
+#else
+static const u8 DexDescription_Raichu_1[] = _(
+ "If the electrical sacks become\n"
+ "excessively charged, RAICHU plants its\n"
+ "tail in the ground and discharges.");
+static const u8 DexDescription_Raichu_2[] = _(
+ "Scorched patches of ground will be\n"
+ "found near this POKéMON’s nest.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Sandshrew_1[] = _(
+ "SANDSHREW has a very dry hide that is\n"
+ "extremely tough. The POKéMON can roll\n"
+ "into a ball that repels any attack.");
+static const u8 DexDescription_Sandshrew_2[] = _(
+ "At night, it burrows into the desert\n"
+ "sand to sleep.");
+#else
+static const u8 DexDescription_Sandshrew_1[] = _(
+ "SANDSHREW’s body is configured to\n"
+ "absorb water without waste, enabling it\n"
+ "to survive in an arid desert.");
+static const u8 DexDescription_Sandshrew_2[] = _(
+ "This POKéMON curls up to protect itself\n"
+ "from its enemies.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Sandslash_1[] = _(
+ "SANDSLASH can roll up its body as if it\n"
+ "were a ball covered with large spikes.\n"
+ "In battle, this POKéMON will try to make");
+static const u8 DexDescription_Sandslash_2[] = _(
+ "the foe flinch by jabbing it with its\n"
+ "spines. It then leaps at the stunned\n"
+ "foe to tear wildly with its sharp claws.");
+#else
+static const u8 DexDescription_Sandslash_1[] = _(
+ "SANDSLASH’s body is covered by tough\n"
+ "spikes, which are hardened sections of\n"
+ "its hide. Once a year, the old spikes fall");
+static const u8 DexDescription_Sandslash_2[] = _(
+ "out, to be replaced with new spikes that\n"
+ "grow out from beneath the old ones.");
+#endif
+
+static const u8 DexDescription_NidoranF_1[] = _(
+ "NIDORAN has barbs that secrete a\n"
+ "powerful poison. They are thought to\n"
+ "have developed as protection for this");
+static const u8 DexDescription_NidoranF_2[] = _(
+ "small-bodied POKéMON.\n"
+ "When enraged, it releases a horrible\n"
+ "toxin from its horn.");
+
+static const u8 DexDescription_Nidorina_1[] = _(
+ "When NIDORINA are with their friends or\n"
+ "family, they keep their barbs tucked\n"
+ "away to prevent hurting each other.");
+static const u8 DexDescription_Nidorina_2[] = _(
+ "This POKéMON appears to become\n"
+ "nervous if separated from the others.");
+
+static const u8 DexDescription_Nidoqueen_1[] = _(
+ "NIDOQUEEN’s body is encased in\n"
+ "extremely hard scales. It is adept at\n"
+ "sending foes flying with harsh tackles.");
+static const u8 DexDescription_Nidoqueen_2[] = _(
+ "This POKéMON is at its strongest when\n"
+ "it is defending its young.");
+
+static const u8 DexDescription_NidoranM_1[] = _(
+ "The male NIDORAN has developed\n"
+ "muscles for moving its ears. Thanks to\n"
+ "them, the ears can be freely moved in");
+static const u8 DexDescription_NidoranM_2[] = _(
+ "any direction. Even the slightest sound\n"
+ "does not escape this POKéMON’s notice.");
+
+static const u8 DexDescription_Nidorino_1[] = _(
+ "NIDORINO has a horn that is harder than\n"
+ "a diamond. If it senses a hostile\n"
+ "presence, all the barbs on its back");
+static const u8 DexDescription_Nidorino_2[] = _(
+ "bristle up at once, and it challenges\n"
+ "the foe with all its might.");
+
+static const u8 DexDescription_Nidoking_1[] = _(
+ "NIDOKING’s thick tail packs enormously\n"
+ "destructive power. With one swing, it\n"
+ "can topple a metal transmission tower.");
+static const u8 DexDescription_Nidoking_2[] = _(
+ "Once this POKéMON goes on a rampage,\n"
+ "there is no stopping it.");
+
+static const u8 DexDescription_Clefairy_1[] = _(
+ "On every night of a full moon, groups of\n"
+ "this POKéMON come out to play.\n"
+ "When dawn arrives, the tired CLEFAIRY");
+static const u8 DexDescription_Clefairy_2[] = _(
+ "return to their quiet mountain retreats\n"
+ "and go to sleep nestled up against each\n"
+ "other.");
+
+static const u8 DexDescription_Clefable_1[] = _(
+ "CLEFABLE moves by skipping lightly as if\n"
+ "it were flying using its wings. Its\n"
+ "bouncy step lets it even walk on water.");
+static const u8 DexDescription_Clefable_2[] = _(
+ "It is known to take strolls on lakes on\n"
+ "quiet, moonlit nights.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Vulpix_1[] = _(
+ "Inside VULPIX’s body burns a flame that\n"
+ "never goes out. During the daytime,\n"
+ "when the temperatures rise, this");
+static const u8 DexDescription_Vulpix_2[] = _(
+ "POKéMON releases flames from its mouth\n"
+ "to prevent its body from growing too\n"
+ "hot.");
+#else
+static const u8 DexDescription_Vulpix_1[] = _(
+ "At the time of its birth, VULPIX has one\n"
+ "white tail. The tail separates into six\n"
+ "if this POKéMON receives plenty of love");
+static const u8 DexDescription_Vulpix_2[] = _(
+ "from its TRAINER.\n"
+ "The six tails become magnificently\n"
+ "curled.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Ninetales_1[] = _(
+ "Legend has it that NINETALES came into\n"
+ "being when nine wizards possessing\n"
+ "sacred powers merged into one.");
+static const u8 DexDescription_Ninetales_2[] = _(
+ "This POKéMON is highly intelligent - it\n"
+ "can understand human speech.");
+#else
+static const u8 DexDescription_Ninetales_1[] = _(
+ "NINETALES casts a sinister light from\n"
+ "its bright red eyes to gain total\n"
+ "control over its foe’s mind.");
+static const u8 DexDescription_Ninetales_2[] = _(
+ "This POKéMON is said to live for a\n"
+ "thousand years.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Jigglypuff_1[] = _(
+ "When this POKéMON sings, it never\n"
+ "pauses to breathe. If it is in a battle\n"
+ "against an opponent that does not");
+static const u8 DexDescription_Jigglypuff_2[] = _(
+ "easily fall asleep, JIGGLYPUFF cannot\n"
+ "breathe, endangering its life.");
+#else
+static const u8 DexDescription_Jigglypuff_1[] = _(
+ "JIGGLYPUFF’s vocal chords can freely\n"
+ "adjust the wavelength of its voice.\n"
+ "This POKéMON uses this ability to sing");
+static const u8 DexDescription_Jigglypuff_2[] = _(
+ "at precisely the right wavelength to\n"
+ "make its foes most drowsy.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Wigglytuff_1[] = _(
+ "WIGGLYTUFF’s body is very flexible.\n"
+ "By inhaling deeply, this POKéMON can\n"
+ "inflate itself seemingly without end.");
+static const u8 DexDescription_Wigglytuff_2[] = _(
+ "Once inflated, WIGGLYTUFF bounces\n"
+ "along lightly like a balloon.");
+#else
+static const u8 DexDescription_Wigglytuff_1[] = _(
+ "WIGGLYTUFF has large, saucerlike eyes.\n"
+ "The surfaces of its eyes are always\n"
+ "covered with a thin layer of tears.");
+static const u8 DexDescription_Wigglytuff_2[] = _(
+ "If any dust gets in this POKéMON’s\n"
+ "eyes, it is quickly washed away.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Zubat_1[] = _(
+ "ZUBAT avoids sunlight because exposure\n"
+ "causes it to become unhealthy.\n"
+ "During the daytime, it stays in caves or");
+static const u8 DexDescription_Zubat_2[] = _(
+ "under the eaves of old houses, sleeping\n"
+ "while hanging upside down.");
+#else
+static const u8 DexDescription_Zubat_1[] = _(
+ "ZUBAT remains quietly unmoving in a\n"
+ "dark spot during the bright daylight\n"
+ "hours. It does so because prolonged");
+static const u8 DexDescription_Zubat_2[] = _(
+ "exposure to the sun causes its body to\n"
+ "become slightly burned.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Golbat_1[] = _(
+ "GOLBAT bites down on prey with its four\n"
+ "fangs and drinks the victim’s blood.\n"
+ "It becomes active on inky dark");
+static const u8 DexDescription_Golbat_2[] = _(
+ "moonless nights, flying around to\n"
+ "attack people and POKéMON.");
+#else
+static const u8 DexDescription_Golbat_1[] = _(
+ "GOLBAT loves to drink the blood of\n"
+ "living things. It is particularly active\n"
+ "in the pitch black of night.");
+static const u8 DexDescription_Golbat_2[] = _(
+ "This POKéMON flits around in the night\n"
+ "skies, seeking fresh blood.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Oddish_1[] = _(
+ "ODDISH searches for fertile, nutrient-\n"
+ "rich soil, then plants itself.\n"
+ "During the daytime, while it is planted,");
+static const u8 DexDescription_Oddish_2[] = _(
+ "this POKéMON’s feet are thought to\n"
+ "change shape and become similar to\n"
+ "the roots of trees.");
+#else
+static const u8 DexDescription_Oddish_1[] = _(
+ "During the daytime, ODDISH buries\n"
+ "itself in soil to absorb nutrients from \n"
+ "the ground using its entire body.");
+static const u8 DexDescription_Oddish_2[] = _(
+ "The more fertile the soil, the glossier\n"
+ "its leaves become.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Gloom_1[] = _(
+ "From its mouth GLOOM drips honey that\n"
+ "smells absolutely horrible.\n"
+ "Apparently, it loves the horrid stench.");
+static const u8 DexDescription_Gloom_2[] = _(
+ "It sniffs the noxious fumes and then \n"
+ "drools even more of its honey.");
+#else
+static const u8 DexDescription_Gloom_1[] = _(
+ "GLOOM releases a foul fragrance from\n"
+ "the pistil of its flower. When faced\n"
+ "with danger, the stench worsens.");
+static const u8 DexDescription_Gloom_2[] = _(
+ "If this POKéMON is feeling calm and\n"
+ "secure, it does not release its usual\n"
+ "stinky aroma.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Vileplume_1[] = _(
+ "VILEPLUME has the world’s largest\n"
+ "petals. They are used to attract prey\n"
+ "that are then doused with toxic spores.");
+static const u8 DexDescription_Vileplume_2[] = _(
+ "Once the prey are immobilized, this\n"
+ "POKéMON catches and devours them.");
+#else
+static const u8 DexDescription_Vileplume_1[] = _(
+ "VILEPLUME’s toxic pollen triggers\n"
+ "atrocious allergy attacks. That’s why\n"
+ "it is advisable never to approach any");
+static const u8 DexDescription_Vileplume_2[] = _(
+ "attractive flowers in a jungle, however\n"
+ "pretty they may be.");
+#endif
+
+#ifdef SAPPHIRE
+#if REVISION >= 1
+static const u8 DexDescription_Paras_1[] = _(
+ "PARAS has parasitic mushrooms growing\n"
+ "on its back called tochukaso. They grow\n"
+ "large by drawing nutrients from this");
+static const u8 DexDescription_Paras_2[] = _(
+ "BUG/GRASS POKéMON host. They are\n" // Identify Paras as BUG/GRASS type rather than just BUG
+ "highly valued as a medicine for\n"
+ "extending life.");
+#else
+static const u8 DexDescription_Paras_1[] = _(
+ "PARAS has parasitic mushrooms growing\n"
+ "on its back called tochukaso. They grow\n"
+ "large by drawing nutrients from this");
+static const u8 DexDescription_Paras_2[] = _(
+ "BUG POKéMON host. They are highly\n"
+ "valued as a medicine for extending life.");
+#endif
+#else
+#if REVISION >= 1
+static const u8 DexDescription_Paras_1[] = _(
+ "PARAS has parasitic mushrooms growing\n"
+ "on its back called tochukaso. They grow\n"
+ "large by drawing nutrients from this");
+static const u8 DexDescription_Paras_2[] = _(
+ "BUG/GRASS POKéMON host. They are\n"
+ "highly valued as a medicine for\n"
+ "extending life.");
+#else
+static const u8 DexDescription_Paras_1[] = _(
+ "PARAS has parasitic mushrooms growing\n"
+ "on its back called tochukaso. They grow\n"
+ "large by drawing nutrients from the BUG");
+static const u8 DexDescription_Paras_2[] = _(
+ "POKéMON host. They are highly valued as\n"
+ "a medicine for extending life.");
+#endif
+#endif
+
+static const u8 DexDescription_Parasect_1[] = _(
+ "PARASECT is known to infest large trees\n"
+ "en masse and drain nutrients from the\n"
+ "lower trunk and roots.");
+static const u8 DexDescription_Parasect_2[] = _(
+ "When an infested tree dies, they move\n"
+ "onto another tree all at once.");
+
+static const u8 DexDescription_Venonat_1[] = _(
+ "VENONAT is said to have evolved with\n"
+ "a coat of thin, stiff hair that covers\n"
+ "its entire body for protection.");
+static const u8 DexDescription_Venonat_2[] = _(
+ "It possesses large eyes that never fail\n"
+ "to spot even miniscule prey.");
+
+static const u8 DexDescription_Venomoth_1[] = _(
+ "VENOMOTH is nocturnal - it is a POKéMON\n"
+ "that only becomes active at night.\n"
+ "Its favorite prey are small insects");
+static const u8 DexDescription_Venomoth_2[] = _(
+ "that gather around streetlights,\n"
+ "attracted by the light in the darkness.");
+
+static const u8 DexDescription_Diglett_1[] = _(
+ "DIGLETT are raised in most farms.\n"
+ "The reason is simple - wherever this\n"
+ "POKéMON burrows, the soil is left");
+static const u8 DexDescription_Diglett_2[] = _(
+ "perfectly tilled for planting crops.\n"
+ "This soil is made ideal for growing\n"
+ "delicious vegetables.");
+
+static const u8 DexDescription_Dugtrio_1[] = _(
+ "DUGTRIO are actually triplets that\n"
+ "emerged from one body. As a result,\n"
+ "each triplet thinks exactly like the");
+static const u8 DexDescription_Dugtrio_2[] = _(
+ "other two triplets.\n"
+ "They work cooperatively to burrow\n"
+ "endlessly.");
+
+static const u8 DexDescription_Meowth_1[] = _(
+ "MEOWTH withdraws its sharp claws into\n"
+ "its paws to slinkily sneak about without\n"
+ "making any incriminating footsteps.");
+static const u8 DexDescription_Meowth_2[] = _(
+ "For some reason, this POKéMON loves\n"
+ "shiny coins that glitter with light.");
+
+static const u8 DexDescription_Persian_1[] = _(
+ "PERSIAN has six bold whiskers that give\n"
+ "it a look of toughness. The whiskers \n"
+ "sense air movements to determine what");
+static const u8 DexDescription_Persian_2[] = _(
+ "is in the POKéMON’s surrounding\n"
+ "vicinity. It becomes docile if grabbed\n"
+ "by the whiskers.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Psyduck_1[] = _(
+ "If it uses its mysterious power,\n"
+ "PSYDUCK can’t remember having done so.\n"
+ "It apparently can’t form a memory of");
+static const u8 DexDescription_Psyduck_2[] = _(
+ "such an event because it goes into\n"
+ "an altered state that is much like\n"
+ "deep sleep.");
+#else
+static const u8 DexDescription_Psyduck_1[] = _(
+ "PSYDUCK uses a mysterious power.\n"
+ "When it does so, this POKéMON \n"
+ "generates brain waves that are");
+static const u8 DexDescription_Psyduck_2[] = _(
+ "supposedly only seen in sleepers.\n"
+ "This discovery spurred controversy\n"
+ "among scholars.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Golduck_1[] = _(
+ "GOLDUCK is the fastest swimmer among\n"
+ "all POKéMON. It swims effortlessly, even\n"
+ "in a rough, stormy sea.");
+static const u8 DexDescription_Golduck_2[] = _(
+ "It sometimes rescues people from\n"
+ "wrecked ships floundering in high seas.");
+#else
+static const u8 DexDescription_Golduck_1[] = _(
+ "The webbed flippers on its forelegs and\n"
+ "hind legs and the streamlined body of\n"
+ "GOLDUCK give it frightening speed.");
+static const u8 DexDescription_Golduck_2[] = _(
+ "This POKéMON is definitely much faster\n"
+ "than even the most athletic swimmer.");
+#endif
+
+static const u8 DexDescription_Mankey_1[] = _(
+ "When MANKEY starts shaking and its\n"
+ "nasal breathing turns rough, it’s a sure\n"
+ "sign that it is becoming angry.");
+static const u8 DexDescription_Mankey_2[] = _(
+ "However, because it goes into a\n"
+ "towering rage almost instantly, it is\n"
+ "impossible for anyone to flee its wrath.");
+
+static const u8 DexDescription_Primeape_1[] = _(
+ "When PRIMEAPE becomes furious, its\n"
+ "blood circulation is boosted. In turn,\n"
+ "its muscles are made even stronger.");
+static const u8 DexDescription_Primeape_2[] = _(
+ "However, it also becomes much less\n"
+ "intelligent at the same time.");
+
+static const u8 DexDescription_Growlithe_1[] = _(
+ "GROWLITHE has a superb sense of smell.\n"
+ "Once it smells anything, this POKéMON\n"
+ "won’t forget the scent, no matter what.");
+static const u8 DexDescription_Growlithe_2[] = _(
+ "It uses its advanced olfactory sense\n"
+ "to determine the emotions of other\n"
+ "living things.");
+
+static const u8 DexDescription_Arcanine_1[] = _(
+ "ARCANINE is known for its high speed.\n"
+ "It is said to be capable of running over\n"
+ "6,200 miles in a single day and night.");
+static const u8 DexDescription_Arcanine_2[] = _(
+ "The fire that blazes wildly within this\n"
+ "POKéMON’s body is its source of power.");
+
+static const u8 DexDescription_Poliwag_1[] = _(
+ "POLIWAG has a very thin skin. It is\n"
+ "possible to see the POKéMON’s spiral\n"
+ "innards right through the skin.");
+static const u8 DexDescription_Poliwag_2[] = _(
+ "Despite its thinness, however, the skin\n"
+ "is also very flexible. Even sharp fangs\n"
+ "bounce right off it.");
+
+static const u8 DexDescription_Poliwhirl_1[] = _(
+ "The surface of POLIWHIRL’s body is\n"
+ "always wet and slick with an oily fluid.\n"
+ "Because of this greasy covering, it can");
+static const u8 DexDescription_Poliwhirl_2[] = _(
+ "easily slip and slide out of the clutches\n"
+ "of any enemy in battle.");
+
+static const u8 DexDescription_Poliwrath_1[] = _(
+ "POLIWRATH’s highly developed, brawny\n"
+ "muscles never grow fatigued, however\n"
+ "much it exercises.");
+static const u8 DexDescription_Poliwrath_2[] = _(
+ "It is so tirelessly strong, this POKéMON\n"
+ "can swim back and forth across the\n"
+ "Pacific Ocean without effort.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Abra_1[] = _(
+ "ABRA needs to sleep for eighteen hours\n"
+ "a day. If it doesn’t, this POKéMON loses\n"
+ "its ability to use telekinetic powers.");
+static const u8 DexDescription_Abra_2[] = _(
+ "If it is attacked, ABRA escapes using\n"
+ "TELEPORT while it is still sleeping.");
+#else
+static const u8 DexDescription_Abra_1[] = _(
+ "ABRA sleeps for eighteen hours a day.\n"
+ "However, it can sense the presence of\n"
+ "foes even while it is sleeping.");
+static const u8 DexDescription_Abra_2[] = _(
+ "In such a situation, this POKéMON\n"
+ "immediately teleports to safety.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Kadabra_1[] = _(
+ "KADABRA holds a silver spoon in its\n"
+ "hand. The spoon is used to amplify the\n"
+ "alpha waves in its brain.");
+static const u8 DexDescription_Kadabra_2[] = _(
+ "Without the spoon, the POKéMON is said\n"
+ "to be limited to half the usual amount\n"
+ "of its telekinetic powers.");
+#else
+static const u8 DexDescription_Kadabra_1[] = _(
+ "KADABRA emits a peculiar alpha wave\n"
+ "if it develops a headache. Only those\n"
+ "people with a particularly strong");
+static const u8 DexDescription_Kadabra_2[] = _(
+ "psyche can hope to become a TRAINER\n"
+ "of this POKéMON.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Alakazam_1[] = _(
+ "ALAKAZAM’s brain continually grows,\n"
+ "infinitely multiplying brain cells.\n"
+ "This amazing brain gives this POKéMON");
+static const u8 DexDescription_Alakazam_2[] = _(
+ "an astoundingly high IQ of 5,000.\n"
+ "It has a thorough memory of everything\n"
+ "that has occurred in the world.");
+#else
+static const u8 DexDescription_Alakazam_1[] = _(
+ "ALAKAZAM’s brain continually grows,\n"
+ "making its head far too heavy to\n"
+ "support with its neck.");
+static const u8 DexDescription_Alakazam_2[] = _(
+ "This POKéMON holds its head up using\n"
+ "its psychokinetic power instead.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Machop_1[] = _(
+ "MACHOP exercises by hefting around\n"
+ "a GRAVELER as if it were a barbell.\n"
+ "There are some MACHOP that travel");
+static const u8 DexDescription_Machop_2[] = _(
+ "the world in a quest to master all\n"
+ "kinds of martial arts.");
+#else
+static const u8 DexDescription_Machop_1[] = _(
+ "MACHOP’s muscles are special - they\n"
+ "never get sore no matter how much they\n"
+ "are used in exercise.");
+static const u8 DexDescription_Machop_2[] = _(
+ "This POKéMON has sufficient power to\n"
+ "hurl a hundred adult humans.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Machoke_1[] = _(
+ "MACHOKE undertakes bodybuilding every\n"
+ "day even as it helps people with tough,\n"
+ "physically demanding labor.");
+static const u8 DexDescription_Machoke_2[] = _(
+ "On its days off, this POKéMON heads to\n"
+ "the fields and mountains to exercise\n"
+ "and train.");
+#else
+static const u8 DexDescription_Machoke_1[] = _(
+ "MACHOKE’s thoroughly toned muscles\n"
+ "possess the hardness of steel.\n"
+ "This POKéMON has so much strength,");
+static const u8 DexDescription_Machoke_2[] = _(
+ "it can easily hold aloft a sumo wrestler\n"
+ "on just one finger.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Machamp_1[] = _(
+ "MACHAMP is known as the POKéMON that\n"
+ "has mastered every kind of martial arts.\n"
+ "If it grabs hold of the foe with its four");
+static const u8 DexDescription_Machamp_2[] = _(
+ "arms, the battle is all but over.\n"
+ "The hapless foe is thrown far over the\n"
+ "horizon.");
+#else
+static const u8 DexDescription_Machamp_1[] = _(
+ "MACHAMP has the power to hurl anything\n"
+ "aside. However, trying to do any work\n"
+ "requiring care and dexterity causes");
+static const u8 DexDescription_Machamp_2[] = _(
+ "its arms to get tangled.\n"
+ "This POKéMON tends to leap into action\n"
+ "before it thinks.");
+#endif
+
+static const u8 DexDescription_Bellsprout_1[] = _(
+ "BELLSPROUT’s thin and flexible body\n"
+ "lets it bend and sway to avoid any\n"
+ "attack, however strong it may be.");
+static const u8 DexDescription_Bellsprout_2[] = _(
+ "From its mouth, this POKéMON spits a\n"
+ "corrosive fluid that melts even iron.");
+
+static const u8 DexDescription_Weepinbell_1[] = _(
+ "WEEPINBELL has a large hook on its rear\n"
+ "end. At night, the POKéMON hooks on to\n"
+ "a tree branch and goes to sleep.");
+static const u8 DexDescription_Weepinbell_2[] = _(
+ "If it moves around in its sleep, it may\n"
+ "wake up to find itself on the ground.");
+
+static const u8 DexDescription_Victreebel_1[] = _(
+ "VICTREEBEL has a long vine that\n"
+ "extends from its head. This vine is\n"
+ "waved and flicked about as if it were");
+static const u8 DexDescription_Victreebel_2[] = _(
+ "an animal to attract prey. When an\n"
+ "unsuspecting prey draws near, this\n"
+ "POKéMON swallows it whole.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Tentacool_1[] = _(
+ "TENTACOOL absorbs sunlight and\n"
+ "refracts it using water inside its body\n"
+ "to convert it into beam energy.");
+static const u8 DexDescription_Tentacool_2[] = _(
+ "This POKéMON shoots beams from its\n"
+ "crystal-like eyes.");
+#else
+static const u8 DexDescription_Tentacool_1[] = _(
+ "TENTACOOL’s body is largely composed\n"
+ "of water. If it is removed from the\n"
+ "sea, it dries up like parchment.");
+static const u8 DexDescription_Tentacool_2[] = _(
+ "If this POKéMON happens to become\n"
+ "dehydrated, put it back into the sea.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Tentacruel_1[] = _(
+ "TENTACRUEL has tentacles that can be\n"
+ "freely elongated and shortened at will.\n"
+ "It ensnares prey with its tentacles and");
+static const u8 DexDescription_Tentacruel_2[] = _(
+ "weakens the prey by dosing it with a\n"
+ "harsh toxin. It can catch up to 80\n"
+ "prey at the same time.");
+#else
+static const u8 DexDescription_Tentacruel_1[] = _(
+ "TENTACRUEL has large red orbs on its\n"
+ "head. The orbs glow before lashing the\n"
+ "vicinity with a harsh ultrasonic blast.");
+static const u8 DexDescription_Tentacruel_2[] = _(
+ "This POKéMON’s outburst creates rough\n"
+ "waves around it.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Geodude_1[] = _(
+ "When GEODUDE sleeps deeply, it buries\n"
+ "itself halfway into the ground.\n"
+ "It will not awaken even if hikers step");
+static const u8 DexDescription_Geodude_2[] = _(
+ "on it unwittingly.\n"
+ "In the morning, this POKéMON rolls\n"
+ "downhill in search of food.");
+#else
+static const u8 DexDescription_Geodude_1[] = _(
+ "The longer a GEODUDE lives, the more\n"
+ "its edges are chipped and worn away,\n"
+ "making it more rounded in appearance.");
+static const u8 DexDescription_Geodude_2[] = _(
+ "However, this POKéMON’s heart will\n"
+ "remain hard, craggy, and rough always.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Graveler_1[] = _(
+ "Rocks are GRAVELER’s favorite food.\n"
+ "This POKéMON will climb a mountain from\n"
+ "the base to the summit, crunchingly");
+static const u8 DexDescription_Graveler_2[] = _(
+ "feasting on rocks all the while.\n"
+ "Upon reaching the peak, it rolls back\n"
+ "down to the bottom.");
+#else
+static const u8 DexDescription_Graveler_1[] = _(
+ "GRAVELER grows by feeding on rocks.\n"
+ "Apparently, it prefers to eat rocks\n"
+ "that are covered in moss.");
+static const u8 DexDescription_Graveler_2[] = _(
+ "This POKéMON eats its way through\n"
+ "a ton of rocks on a daily basis.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Golem_1[] = _(
+ "GOLEM is known for rolling down from\n"
+ "mountains. To prevent them from rolling\n"
+ "into the homes of people downhill,");
+static const u8 DexDescription_Golem_2[] = _(
+ "grooves have been dug into the sides of\n"
+ "mountains to serve as guideways for\n"
+ "diverting this POKéMON’s course.");
+#else
+static const u8 DexDescription_Golem_1[] = _(
+ "GOLEM live up on mountains.\n"
+ "If there is a large earthquake, these\n"
+ "POKéMON will come rolling down off");
+static const u8 DexDescription_Golem_2[] = _(
+ "the mountains en masse to the\n"
+ "foothills below.");
+#endif
+
+static const u8 DexDescription_Ponyta_1[] = _(
+ "PONYTA is very weak at birth.\n"
+ "It can barely stand up.\n"
+ "This POKéMON becomes stronger by");
+static const u8 DexDescription_Ponyta_2[] = _(
+ "stumbling and falling to keep up with\n"
+ "its parent.");
+
+static const u8 DexDescription_Rapidash_1[] = _(
+ "RAPIDASH usually can be seen casually\n"
+ "cantering in the fields and plains.\n"
+ "However, when this POKéMON turns");
+static const u8 DexDescription_Rapidash_2[] = _(
+ "serious, its fiery manes flare and blaze\n"
+ "as it gallops its way up to 150 mph.");
+
+static const u8 DexDescription_Slowpoke_1[] = _(
+ "SLOWPOKE uses its tail to catch prey by\n"
+ "dipping it in water at the side of a\n"
+ "river.");
+static const u8 DexDescription_Slowpoke_2[] = _(
+ "However, this POKéMON often forgets\n"
+ "what it’s doing and often spends entire\n"
+ "days just loafing at water’s edge.");
+
+static const u8 DexDescription_Slowbro_1[] = _(
+ "SLOWBRO’s tail has a SHELLDER firmly\n"
+ "attached with a bite. As a result, the\n"
+ "tail can’t be used for fishing anymore.");
+static const u8 DexDescription_Slowbro_2[] = _(
+ "This causes SLOWBRO to grudgingly swim\n"
+ "and catch prey instead.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Magnemite_1[] = _(
+ "MAGNEMITE floats in the air by emitting\n"
+ "electromagnetic waves from the units\n"
+ "at its sides. These waves block gravity.");
+static const u8 DexDescription_Magnemite_2[] = _(
+ "This POKéMON becomes incapable of\n"
+ "flight if its internal electrical supply\n"
+ "is depleted.");
+#else
+static const u8 DexDescription_Magnemite_1[] = _(
+ "MAGNEMITE attaches itself to power\n"
+ "lines to feed on electricity.\n"
+ "If your house has a power outage,");
+static const u8 DexDescription_Magnemite_2[] = _(
+ "check your circuit breakers. You may\n"
+ "find a large number of this POKéMON\n"
+ "clinging to the breaker box.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Magneton_1[] = _(
+ "MAGNETON emits a powerful magnetic\n"
+ "force that is fatal to electronics and\n"
+ "precision instruments. Because of");
+static const u8 DexDescription_Magneton_2[] = _(
+ "this, it is said that some towns warn\n"
+ "people to keep this POKéMON inside\n"
+ "a POKé BALL.");
+#else
+static const u8 DexDescription_Magneton_1[] = _(
+ "MAGNETON emits a powerful magnetic\n"
+ "force that is fatal to mechanical\n"
+ "devices. As a result, large cities sound");
+static const u8 DexDescription_Magneton_2[] = _(
+ "sirens to warn citizens of large-scale\n"
+ "outbreaks of this POKéMON.");
+#endif
+
+static const u8 DexDescription_Farfetchd_1[] = _(
+ "FARFETCH’D is always seen with a stick\n"
+ "from a plant of some sort. Apparently,\n"
+ "there are good sticks and bad sticks.");
+static const u8 DexDescription_Farfetchd_2[] = _(
+ "This POKéMON has been known to fight\n"
+ "with others over sticks.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Doduo_1[] = _(
+ "DODUO’s two heads contain completely\n"
+ "identical brains.\n"
+ "A scientific study reported that on");
+static const u8 DexDescription_Doduo_2[] = _(
+ "rare occasions, there will be examples\n"
+ "of this POKéMON possessing different\n"
+ "sets of brains.");
+#else
+static const u8 DexDescription_Doduo_1[] = _(
+ "DODUO’s two heads never sleep at the\n"
+ "same time.\n"
+ "Its two heads take turns sleeping,");
+static const u8 DexDescription_Doduo_2[] = _(
+ "so one head can always keep watch for\n"
+ "enemies while the other one sleeps.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Dodrio_1[] = _(
+ "Apparently, the heads aren’t the only\n"
+ "parts of the body that DODRIO has\n"
+ "three of.");
+static const u8 DexDescription_Dodrio_2[] = _(
+ "It has three sets of hearts and lungs\n"
+ "as well, so it is capable of running long\n"
+ "distances without rest.");
+#else
+static const u8 DexDescription_Dodrio_1[] = _(
+ "Watch out if DODRIO’s three heads are\n"
+ "looking in three separate directions.\n"
+ "It’s a sure sign that it is on its guard.");
+static const u8 DexDescription_Dodrio_2[] = _(
+ "Don’t go near this POKéMON if it’s being\n"
+ "wary - it may decide to peck you.");
+#endif
+
+static const u8 DexDescription_Seel_1[] = _(
+ "SEEL hunts for prey in the frigid sea\n"
+ "underneath sheets of ice.\n"
+ "When it needs to breathe, it punches");
+static const u8 DexDescription_Seel_2[] = _(
+ "a hole through the ice with the\n"
+ "sharply protruding section of its head.");
+
+static const u8 DexDescription_Dewgong_1[] = _(
+ "DEWGONG loves to snooze on bitterly\n"
+ "cold ice.\n"
+ "The sight of this POKéMON sleeping on");
+static const u8 DexDescription_Dewgong_2[] = _(
+ "a glacier was mistakenly thought to be\n"
+ "a mermaid by a mariner long ago.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Grimer_1[] = _(
+ "GRIMER emerged from the sludge that\n"
+ "settled on a polluted seabed.\n"
+ "This POKéMON loves anything filthy.");
+static const u8 DexDescription_Grimer_2[] = _(
+ "It constantly leaks a horribly germ-\n"
+ "infested fluid from all over its body.");
+#else
+static const u8 DexDescription_Grimer_1[] = _(
+ "GRIMER’s sludgy and rubbery body can\n"
+ "be forced through any opening, however\n"
+ "small it may be.");
+static const u8 DexDescription_Grimer_2[] = _(
+ "This POKéMON enters sewer pipes to\n"
+ "drink filthy wastewater.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Muk_1[] = _(
+ "This POKéMON’s favorite food is\n"
+ "anything that is repugnantly filthy.\n"
+ "In dirty towns where people think");
+static const u8 DexDescription_Muk_2[] = _(
+ "nothing of throwing away litter on the\n"
+ "streets, MUK are certain to gather.");
+#else
+static const u8 DexDescription_Muk_1[] = _(
+ "From MUK’s body seeps a foul fluid that\n"
+ "gives off a nose-bendingly horrible\n"
+ "stench.");
+static const u8 DexDescription_Muk_2[] = _(
+ "Just one drop of this POKéMON’s body\n"
+ "fluid can turn a pool stagnant and\n"
+ "rancid.");
+#endif
+
+static const u8 DexDescription_Shellder_1[] = _(
+ "At night, this POKéMON uses its broad\n"
+ "tongue to burrow a hole in the seafloor\n"
+ "sand and then sleep in it.");
+static const u8 DexDescription_Shellder_2[] = _(
+ "While it is sleeping, SHELLDER closes its\n"
+ "shell, but leaves its tongue hanging\n"
+ "out.");
+
+static const u8 DexDescription_Cloyster_1[] = _(
+ "CLOYSTER is capable of swimming in the\n"
+ "sea. It does so by swallowing water,\n"
+ "then jetting it out toward the rear.");
+static const u8 DexDescription_Cloyster_2[] = _(
+ "This POKéMON shoots spikes from its\n"
+ "shell using the same system.");
+
+static const u8 DexDescription_Gastly_1[] = _(
+ "GASTLY is largely composed of gaseous\n"
+ "matter. When exposed to a strong wind,\n"
+ "the gaseous body quickly dwindles away.");
+static const u8 DexDescription_Gastly_2[] = _(
+ "Groups of this POKéMON cluster under\n"
+ "the eaves of houses to escape the\n"
+ "ravages of wind.");
+
+static const u8 DexDescription_Haunter_1[] = _(
+ "HAUNTER is a dangerous POKéMON.\n"
+ "If one beckons you while floating in\n"
+ "darkness, you must never approach it.");
+static const u8 DexDescription_Haunter_2[] = _(
+ "This POKéMON will try to lick you with its\n"
+ "tongue and steal your life away.");
+
+static const u8 DexDescription_Gengar_1[] = _(
+ "Sometimes, on a dark night, your shadow\n"
+ "thrown by a streetlight will suddenly\n"
+ "and startlingly overtake you.");
+static const u8 DexDescription_Gengar_2[] = _(
+ "It is actually a GENGAR running past\n"
+ "you, pretending to be your shadow.");
+
+static const u8 DexDescription_Onix_1[] = _(
+ "ONIX has a magnet in its brain. It acts\n"
+ "as a compass so that this POKéMON does\n"
+ "not lose direction while it is tunneling.");
+static const u8 DexDescription_Onix_2[] = _(
+ "As it grows older, its body becomes\n"
+ "increasingly rounder and smoother.");
+
+static const u8 DexDescription_Drowzee_1[] = _(
+ "If your nose becomes itchy while you\n"
+ "are sleeping, it’s a sure sign that one\n"
+ "of these POKéMON is standing above");
+static const u8 DexDescription_Drowzee_2[] = _(
+ "your pillow and trying to eat your dream\n"
+ "through your nostrils.");
+
+static const u8 DexDescription_Hypno_1[] = _(
+ "HYPNO holds a pendulum in its hand.\n"
+ "The arcing movement and glitter of the\n"
+ "pendulum lull the foe into a deep state");
+static const u8 DexDescription_Hypno_2[] = _(
+ "of hypnosis.\n"
+ "While this POKéMON searches for prey,\n"
+ "it polishes the pendulum.");
+
+static const u8 DexDescription_Krabby_1[] = _(
+ "KRABBY live on beaches, burrowed inside\n"
+ "holes dug into the sand.\n"
+ "On sandy beaches with little in the way");
+static const u8 DexDescription_Krabby_2[] = _(
+ "of food, these POKéMON can be seen\n"
+ "squabbling with each other over\n"
+ "territory.");
+
+static const u8 DexDescription_Kingler_1[] = _(
+ "KINGLER has an enormous, oversized\n"
+ "claw. It waves this huge claw in the\n"
+ "air to communicate with others.");
+static const u8 DexDescription_Kingler_2[] = _(
+ "However, because the claw is so heavy,\n"
+ "the POKéMON quickly tires.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Voltorb_1[] = _(
+ "VOLTORB is extremely sensitive - it\n"
+ "explodes at the slightest of shocks.\n"
+ "It is rumored that it was first created");
+static const u8 DexDescription_Voltorb_2[] = _(
+ "when a POKé BALL was exposed to a\n"
+ "powerful pulse of energy.");
+#else
+static const u8 DexDescription_Voltorb_1[] = _(
+ "VOLTORB was first sighted at a company\n"
+ "that manufactures POKé BALLS.\n"
+ "The link between that sighting and");
+static const u8 DexDescription_Voltorb_2[] = _(
+ "the fact that this POKéMON looks very\n"
+ "similar to a POKé BALL remains a\n"
+ "mystery.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Electrode_1[] = _(
+ "One of ELECTRODE’s characteristics is\n"
+ "its attraction to electricity.\n"
+ "It is a problematical POKéMON that");
+static const u8 DexDescription_Electrode_2[] = _(
+ "congregates mostly at electrical\n"
+ "power plants to feed on electricity\n"
+ "that has just been generated.");
+#else
+static const u8 DexDescription_Electrode_1[] = _(
+ "ELECTRODE eats electricity in the\n"
+ "atmosphere. On days when lightning\n"
+ "strikes, you can see this POKéMON");
+static const u8 DexDescription_Electrode_2[] = _(
+ "exploding all over the place from\n"
+ "eating too much electricity.");
+#endif
+
+static const u8 DexDescription_Exeggcute_1[] = _(
+ "This POKéMON consists of six eggs that\n"
+ "form a closely knit cluster. The six eggs\n"
+ "attract each other and spin around.");
+static const u8 DexDescription_Exeggcute_2[] = _(
+ "When cracks increasingly appear on the\n"
+ "eggs, EXEGGCUTE is close to evolution.");
+
+static const u8 DexDescription_Exeggutor_1[] = _(
+ "EXEGGUTOR originally came from the\n"
+ "tropics. Its heads steadily grow larger\n"
+ "from exposure to strong sunlight.");
+static const u8 DexDescription_Exeggutor_2[] = _(
+ "It is said that when the heads fall off,\n"
+ "they group together to form EXEGGCUTE.");
+
+static const u8 DexDescription_Cubone_1[] = _(
+ "CUBONE pines for the mother it will\n"
+ "never see again. Seeing a likeness of\n"
+ "its mother in the full moon, it cries.");
+static const u8 DexDescription_Cubone_2[] = _(
+ "The stains on the skull the POKéMON\n"
+ "wears are made by the tears it sheds.");
+
+static const u8 DexDescription_Marowak_1[] = _(
+ "MAROWAK is the evolved form of a CUBONE\n"
+ "that has overcome its sadness at the\n"
+ "loss of its mother and grown tough.");
+static const u8 DexDescription_Marowak_2[] = _(
+ "This POKéMON’s tempered and hardened\n"
+ "spirit is not easily broken.");
+
+static const u8 DexDescription_Hitmonlee_1[] = _(
+ "HITMONLEE’s legs freely contract and\n"
+ "stretch. Using these springlike legs, it\n"
+ "bowls over foes with devastating kicks.");
+static const u8 DexDescription_Hitmonlee_2[] = _(
+ "After battle, it rubs down its legs and\n"
+ "loosens the muscles to overcome\n"
+ "fatigue.");
+
+static const u8 DexDescription_Hitmonchan_1[] = _(
+ "HITMONCHAN is said to possess the\n"
+ "spirit of a boxer who had been working\n"
+ "towards a world championship.");
+static const u8 DexDescription_Hitmonchan_2[] = _(
+ "This POKéMON has an indomitable spirit\n"
+ "and will never give up in the face of\n"
+ "adversity.");
+
+static const u8 DexDescription_Lickitung_1[] = _(
+ "Whenever LICKITUNG comes across\n"
+ "something new, it will unfailingly give it\n"
+ "a lick. It does so because it memorizes");
+static const u8 DexDescription_Lickitung_2[] = _(
+ "things by texture and by taste.\n"
+ "It is somewhat put off by sour things.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Koffing_1[] = _(
+ "KOFFING embodies toxic substances.\n"
+ "It mixes the toxins with raw garbage to\n"
+ "set off a chemical reaction that");
+static const u8 DexDescription_Koffing_2[] = _(
+ "results in a terribly powerful poison\n"
+ "gas. The higher the temperature, the\n"
+ "more gas is concocted by this POKéMON.");
+#else
+static const u8 DexDescription_Koffing_1[] = _(
+ "If KOFFING becomes agitated, it raises\n"
+ "the toxicity of its internal gases and\n"
+ "jets them out from all over its body.");
+static const u8 DexDescription_Koffing_2[] = _(
+ "This POKéMON may also overinflate its\n"
+ "round body, then explode.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Weezing_1[] = _(
+ "WEEZING alternately shrinks and\n"
+ "inflates its twin bodies to mix together\n"
+ "toxic gases inside.");
+static const u8 DexDescription_Weezing_2[] = _(
+ "The more the gases are mixed, the more\n"
+ "powerful the toxins become. The\n"
+ "POKéMON also becomes more putrid.");
+#else
+static const u8 DexDescription_Weezing_1[] = _(
+ "WEEZING loves the gases given off by\n"
+ "rotted kitchen garbage. This POKéMON\n"
+ "will find a dirty, unkempt house and");
+static const u8 DexDescription_Weezing_2[] = _(
+ "make it its home. At night, when the\n"
+ "people in the house are asleep, it will\n"
+ "go through the trash.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Rhyhorn_1[] = _(
+ "RHYHORN’s brain is very small. It is so\n"
+ "dense, while on a run it forgets why it\n"
+ "started running in the first place.");
+static const u8 DexDescription_Rhyhorn_2[] = _(
+ "It apparently remembers sometimes if it\n"
+ "demolishes something.");
+#else
+static const u8 DexDescription_Rhyhorn_1[] = _(
+ "RHYHORN runs in a straight line,\n"
+ "smashing everything in its path.\n"
+ "It is not bothered even if it rushes");
+static const u8 DexDescription_Rhyhorn_2[] = _(
+ "headlong into a block of steel.\n"
+ "This POKéMON may feel some pain from\n"
+ "the collision the next day, however.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Rhydon_1[] = _(
+ "RHYDON has a horn that serves as a\n"
+ "drill. It is used for destroying rocks\n"
+ "and boulders.");
+static const u8 DexDescription_Rhydon_2[] = _(
+ "This POKéMON occasionally rams into\n"
+ "streams of magma, but the armor-like\n"
+ "hide prevents it from feeling the heat.");
+#else
+static const u8 DexDescription_Rhydon_1[] = _(
+ "RHYDON’s horn can crush even uncut\n"
+ "diamonds. One sweeping blow of its tail\n"
+ "can topple a building.");
+static const u8 DexDescription_Rhydon_2[] = _(
+ "This POKéMON’s hide is extremely tough.\n"
+ "Even direct cannon hits don’t leave\n"
+ "a scratch.");
+#endif
+
+static const u8 DexDescription_Chansey_1[] = _(
+ "CHANSEY lays nutritionally excellent\n"
+ "eggs on an everyday basis.\n"
+ "The eggs are so delicious, they are");
+static const u8 DexDescription_Chansey_2[] = _(
+ "easily and eagerly devoured by even\n"
+ "those people who have lost their\n"
+ "appetite.");
+
+static const u8 DexDescription_Tangela_1[] = _(
+ "TANGELA’s vines snap off easily if they\n"
+ "are grabbed. This happens without pain,\n"
+ "allowing it to make a quick getaway.");
+static const u8 DexDescription_Tangela_2[] = _(
+ "The lost vines are replaced by newly\n"
+ "grown vines the very next day.");
+
+static const u8 DexDescription_Kangaskhan_1[] = _(
+ "If you come across a young KANGASKHAN\n"
+ "playing by itself, you must never\n"
+ "disturb it or attempt to catch it.");
+static const u8 DexDescription_Kangaskhan_2[] = _(
+ "The baby POKéMON’s parent is sure to\n"
+ "be in the area, and it will become\n"
+ "violently enraged at you.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Horsea_1[] = _(
+ "If HORSEA senses danger, it will\n"
+ "reflexively spray a dense black ink\n"
+ "from its mouth and try to escape.");
+static const u8 DexDescription_Horsea_2[] = _(
+ "This POKéMON swims by cleverly flapping\n"
+ "the fins on its back.");
+#else
+static const u8 DexDescription_Horsea_1[] = _(
+ "HORSEA eats small insects and moss off\n"
+ "of rocks. If the ocean current turns\n"
+ "fast, this POKéMON anchors itself by");
+static const u8 DexDescription_Horsea_2[] = _(
+ "wrapping its tail around rocks or coral\n"
+ "to prevent being washed away.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Seadra_1[] = _(
+ "SEADRA generates whirlpools by spinning\n"
+ "its body. The whirlpools are strong\n"
+ "enough to swallow even fishing boats.");
+static const u8 DexDescription_Seadra_2[] = _(
+ "This POKéMON weakens prey with these\n"
+ "currents, then swallows it whole.");
+#else
+static const u8 DexDescription_Seadra_1[] = _(
+ "SEADRA sleeps after wriggling itself\n"
+ "between the branches of coral.\n"
+ "Those trying to harvest coral are");
+static const u8 DexDescription_Seadra_2[] = _(
+ "occasionally stung by this POKéMON’s\n"
+ "poison barbs if they fail to notice it.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Goldeen_1[] = _(
+ "GOLDEEN loves swimming wild and free\n"
+ "in rivers and ponds.\n"
+ "If one of these POKéMON is placed in an");
+static const u8 DexDescription_Goldeen_2[] = _(
+ "aquarium, it will shatter even the\n"
+ "thickest glass with one ram of its horn\n"
+ "and make its escape.");
+#else
+static const u8 DexDescription_Goldeen_1[] = _(
+ "GOLDEEN is a very beautiful POKéMON\n"
+ "with fins that billow elegantly in water.\n"
+ "However, don’t let your guard down");
+static const u8 DexDescription_Goldeen_2[] = _(
+ "around this POKéMON - it could ram you\n"
+ "powerfully with its horn.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Seaking_1[] = _(
+ "SEAKING is very protective of its eggs.\n"
+ "The male and female will take turns\n"
+ "patrolling around their nest and eggs.");
+static const u8 DexDescription_Seaking_2[] = _(
+ "The guarding of eggs by these POKéMON\n"
+ "goes on for over a month.");
+#else
+static const u8 DexDescription_Seaking_1[] = _(
+ "In the autumn, SEAKING males can be\n"
+ "seen performing courtship dances in\n"
+ "riverbeds to woo females.");
+static const u8 DexDescription_Seaking_2[] = _(
+ "During this season, this POKéMON’s body\n"
+ "coloration is at its most beautiful.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Staryu_1[] = _(
+ "STARYU apparently communicates with\n"
+ "the stars in the night sky by flashing\n"
+ "the red core at the center of its body.");
+static const u8 DexDescription_Staryu_2[] = _(
+ "If parts of its body are torn, this\n"
+ "POKéMON simply regenerates the\n"
+ "missing pieces and limbs.");
+#else
+static const u8 DexDescription_Staryu_1[] = _(
+ "STARYU’s center section has an organ\n"
+ "called the core that shines bright red.\n"
+ "If you go to a beach toward the");
+static const u8 DexDescription_Staryu_2[] = _(
+ "end of summer, the glowing cores of\n"
+ "these POKéMON look like the stars\n"
+ "in the sky.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Starmie_1[] = _(
+ "STARMIE swims through water by\n"
+ "spinning its star-shaped body as if it\n"
+ "were a propeller on a ship.");
+static const u8 DexDescription_Starmie_2[] = _(
+ "The core at the center of this\n"
+ "POKéMON’s body glows in seven colors.");
+#else
+static const u8 DexDescription_Starmie_1[] = _(
+ "STARMIE’s center section - the core -\n"
+ "glows brightly in seven colors.\n"
+ "Because of its luminous nature, this");
+static const u8 DexDescription_Starmie_2[] = _(
+ "POKéMON has been given the nickname\n"
+ "“the gem of the sea.”");
+#endif
+
+static const u8 DexDescription_Mrmime_1[] = _(
+ "MR. MIME is a master of pantomime.\n"
+ "Its gestures and motions convince\n"
+ "watchers that something unseeable");
+static const u8 DexDescription_Mrmime_2[] = _(
+ "actually exists. Once it is believed,\n"
+ "it will exist as if it were a real thing.");
+
+static const u8 DexDescription_Scyther_1[] = _(
+ "SCYTHER is blindingly fast. Its blazing\n"
+ "speed enhances the effectiveness of\n"
+ "the twin scythes on its forearms.");
+static const u8 DexDescription_Scyther_2[] = _(
+ "This POKéMON’s scythes are so\n"
+ "effective, they can slice through thick\n"
+ "logs in one wicked stroke.");
+
+static const u8 DexDescription_Jynx_1[] = _(
+ "JYNX walks rhythmically, swaying and\n"
+ "shaking its hips as if it were dancing.\n"
+ "Its motions are so bouncingly alluring,");
+static const u8 DexDescription_Jynx_2[] = _(
+ "people seeing it are compelled to shake\n"
+ "their hips without giving any thought\n"
+ "to what they are doing.");
+
+static const u8 DexDescription_Electabuzz_1[] = _(
+ "When a storm arrives, gangs of this\n"
+ "POKéMON compete with each other to\n"
+ "scale heights that are likely to be");
+static const u8 DexDescription_Electabuzz_2[] = _(
+ "stricken by lightning bolts.\n"
+ "Some towns use ELECTABUZZ in place of\n"
+ "lightning rods.");
+
+static const u8 DexDescription_Magmar_1[] = _(
+ "In battle, MAGMAR blows out intensely\n"
+ "hot flames from all over its body to\n"
+ "intimidate its opponent.");
+static const u8 DexDescription_Magmar_2[] = _(
+ "This POKéMON’s fiery bursts create\n"
+ "heat waves that ignite grass and trees\n"
+ "in its surroundings.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Pinsir_1[] = _(
+ "PINSIR has a pair of massive horns \n"
+ "Protruding from the surface of these\n"
+ "horns are thorns.");
+static const u8 DexDescription_Pinsir_2[] = _(
+ "These thorns are driven deeply into the\n"
+ "foe’s body when the pincer closes,\n"
+ "making it tough for the foe to escape.");
+#else
+static const u8 DexDescription_Pinsir_1[] = _(
+ "PINSIR is astoundingly strong. It can\n"
+ "grip a foe weighing twice its weight\n"
+ "in its horns and easily lift it.");
+static const u8 DexDescription_Pinsir_2[] = _(
+ "This POKéMON’s movements turn sluggish\n"
+ "in cold places.");
+#endif
+
+static const u8 DexDescription_Tauros_1[] = _(
+ "This POKéMON is not satisfied unless\n"
+ "it is rampaging at all times.\n"
+ "If there is no opponent for TAUROS to");
+static const u8 DexDescription_Tauros_2[] = _(
+ "battle, it will charge at thick trees and\n"
+ "knock them down to calm itself.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Magikarp_1[] = _(
+ "MAGIKARP is virtually useless in battle\n"
+ "as it can only splash around.\n"
+ "As a result, it is considered to be weak.");
+static const u8 DexDescription_Magikarp_2[] = _(
+ "However, it is actually a very hardy\n"
+ "POKéMON that can survive in any body of\n"
+ "water no matter how polluted it is.");
+#else
+static const u8 DexDescription_Magikarp_1[] = _(
+ "MAGIKARP is a pathetic excuse for a\n"
+ "POKéMON that is only capable of\n"
+ "flopping and splashing.");
+static const u8 DexDescription_Magikarp_2[] = _(
+ "This behavior prompted scientists to\n"
+ "undertake research into it.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Gyarados_1[] = _(
+ "Once GYARADOS goes on a rampage, its\n"
+ "ferociously violent blood doesn’t calm\n"
+ "until it has burned everything down.");
+static const u8 DexDescription_Gyarados_2[] = _(
+ "There are records of this POKéMON’s\n"
+ "rampages lasting a whole month.");
+#else
+static const u8 DexDescription_Gyarados_1[] = _(
+ "When MAGIKARP evolves into GYARADOS,\n"
+ "its brain cells undergo a structural\n"
+ "transformation. It is said that this");
+static const u8 DexDescription_Gyarados_2[] = _(
+ "transformation is to blame for this\n"
+ "POKéMON’s wildly violent nature.");
+#endif
+
+static const u8 DexDescription_Lapras_1[] = _(
+ "People have driven LAPRAS almost to the\n"
+ "point of extinction. In the evenings,\n"
+ "this POKéMON is said to sing plaintively");
+static const u8 DexDescription_Lapras_2[] = _(
+ "as it seeks what few others of its kind\n"
+ "still remain.");
+
+static const u8 DexDescription_Ditto_1[] = _(
+ "DITTO rearranges its cell structure to\n"
+ "transform itself into other shapes.\n"
+ "However, if it tries to transform itself");
+static const u8 DexDescription_Ditto_2[] = _(
+ "into something by relying on its memory,\n"
+ "this POKéMON manages to get details\n"
+ "wrong.");
+
+static const u8 DexDescription_Eevee_1[] = _(
+ "EEVEE has an unstable genetic makeup\n"
+ "that suddenly mutates due to the\n"
+ "environment in which it lives.");
+static const u8 DexDescription_Eevee_2[] = _(
+ "Radiation from various STONES causes\n"
+ "this POKéMON to evolve.");
+
+static const u8 DexDescription_Vaporeon_1[] = _(
+ "VAPOREON underwent a spontaneous\n"
+ "mutation and grew fins and gills that\n"
+ "allow it to live underwater.");
+static const u8 DexDescription_Vaporeon_2[] = _(
+ "This POKéMON has the ability to freely\n"
+ "control water.");
+
+static const u8 DexDescription_Jolteon_1[] = _(
+ "JOLTEON’s cells generate a low level of\n"
+ "electricity. This power is amplified by\n"
+ "the static electricity of its fur,");
+static const u8 DexDescription_Jolteon_2[] = _(
+ "enabling the POKéMON to drop\n"
+ "thunderbolts. The bristling fur is made\n"
+ "of electrically charged needles.");
+
+static const u8 DexDescription_Flareon_1[] = _(
+ "FLAREON’s fluffy fur has a functional\n"
+ "purpose - it releases heat into the air\n"
+ "so that its body does not get");
+static const u8 DexDescription_Flareon_2[] = _(
+ "excessively hot.\n"
+ "This POKéMON’s body temperature can\n"
+ "rise to a maximum of 1,650 degrees F.");
+
+static const u8 DexDescription_Porygon_1[] = _(
+ "PORYGON is capable of reverting itself\n"
+ "entirely back to program data and\n"
+ "entering cyberspace.");
+static const u8 DexDescription_Porygon_2[] = _(
+ "This POKéMON is copy-protected so it\n"
+ "cannot be duplicated by copying.");
+
+static const u8 DexDescription_Omanyte_1[] = _(
+ "OMANYTE is one of the ancient and long-\n"
+ "since-extinct POKéMON that have been\n"
+ "regenerated from fossils by people.");
+static const u8 DexDescription_Omanyte_2[] = _(
+ "If attacked by an enemy, it withdraws\n"
+ "itself inside its hard shell.");
+
+static const u8 DexDescription_Omastar_1[] = _(
+ "OMASTAR uses its tentacles to capture\n"
+ "its prey. It is believed to have become\n"
+ "extinct because its shell grew too large");
+static const u8 DexDescription_Omastar_2[] = _(
+ "and heavy, causing its movements to\n"
+ "become too slow and ponderous.");
+
+static const u8 DexDescription_Kabuto_1[] = _(
+ "KABUTO is a POKéMON that has been\n"
+ "regenerated from a fossil. However, in\n"
+ "extremely rare cases, living examples");
+static const u8 DexDescription_Kabuto_2[] = _(
+ "have been discovered.\n"
+ "The POKéMON has not changed at all for\n"
+ "300 million years.");
+
+static const u8 DexDescription_Kabutops_1[] = _(
+ "KABUTOPS swam underwater to hunt for\n"
+ "its prey in ancient times.\n"
+ "The POKéMON was apparently evolving");
+static const u8 DexDescription_Kabutops_2[] = _(
+ "from being a water-dweller to living on\n"
+ "land as evident from the beginnings of\n"
+ "change in its gills and legs.");
+
+static const u8 DexDescription_Aerodactyl_1[] = _(
+ "AERODACTYL is a POKéMON from the age\n"
+ "of dinosaurs. It was regenerated from\n"
+ "genetic material extracted from amber.");
+static const u8 DexDescription_Aerodactyl_2[] = _(
+ "It is imagined to have been the king of\n"
+ "the skies in ancient times.");
+
+static const u8 DexDescription_Snorlax_1[] = _(
+ "SNORLAX’s typical day consists of\n"
+ "nothing more than eating and sleeping.\n"
+ "It is such a docile POKéMON that there");
+static const u8 DexDescription_Snorlax_2[] = _(
+ "are children who use its expansive belly\n"
+ "as a place to play.");
+
+static const u8 DexDescription_Articuno_1[] = _(
+ "ARTICUNO is a legendary bird POKéMON\n"
+ "that can control ice.\n"
+ "The flapping of its wings chills the air.");
+static const u8 DexDescription_Articuno_2[] = _(
+ "As a result, it is said that when this\n"
+ "POKéMON flies, snow will fall.");
+
+static const u8 DexDescription_Zapdos_1[] = _(
+ "ZAPDOS is a legendary bird POKéMON that\n"
+ "has the ability to control electricity.\n"
+ "It usually lives in thunderclouds.");
+static const u8 DexDescription_Zapdos_2[] = _(
+ "The POKéMON gains power if it is\n"
+ "stricken by lightning bolts.");
+
+static const u8 DexDescription_Moltres_1[] = _(
+ "MOLTRES is a legendary bird POKéMON\n"
+ "that has the ability to control fire.\n"
+ "If this POKéMON is injured, it is said to");
+static const u8 DexDescription_Moltres_2[] = _(
+ "dip its body in the molten magma of a\n"
+ "volcano to burn and heal itself.");
+
+static const u8 DexDescription_Dratini_1[] = _(
+ "DRATINI continually molts and sloughs\n"
+ "off its old skin.\n"
+ "It does so because the life energy");
+static const u8 DexDescription_Dratini_2[] = _(
+ "within its body steadily builds to reach\n"
+ "uncontrollable levels.");
+
+static const u8 DexDescription_Dragonair_1[] = _(
+ "DRAGONAIR stores an enormous amount\n"
+ "of energy inside its body.\n"
+ "It is said to alter weather conditions");
+static const u8 DexDescription_Dragonair_2[] = _(
+ "in its vicinity by discharging energy\n"
+ "from the crystals on its neck and tail.");
+
+static const u8 DexDescription_Dragonite_1[] = _(
+ "DRAGONITE is capable of circling the\n"
+ "globe in just sixteen hours.\n"
+ "It is a kindhearted POKéMON that leads");
+static const u8 DexDescription_Dragonite_2[] = _(
+ "lost and foundering ships in a storm to\n"
+ "the safety of land.");
+
+static const u8 DexDescription_Mewtwo_1[] = _(
+ "MEWTWO is a POKéMON that was created\n"
+ "by genetic manipulation.\n"
+ "However, even though the scientific");
+static const u8 DexDescription_Mewtwo_2[] = _(
+ "power of humans created this POKéMON’s\n"
+ "body, they failed to endow MEWTWO with\n"
+ "a compassionate heart.");
+
+static const u8 DexDescription_Mew_1[] = _(
+ "MEW is said to possess the genetic\n"
+ "composition of all POKéMON.\n"
+ "It is capable of making itself invisible");
+static const u8 DexDescription_Mew_2[] = _(
+ "at will, so it entirely avoids notice even\n"
+ "if it approaches people.");
+
+static const u8 DexDescription_Chikorita_1[] = _(
+ "In battle, CHIKORITA waves its leaf\n"
+ "around to keep the foe at bay.\n"
+ "However, a sweet fragrance also wafts");
+static const u8 DexDescription_Chikorita_2[] = _(
+ "from the leaf, becalming the battling\n"
+ "POKéMON and creating a cozy, friendly\n"
+ "atmosphere all around.");
+
+static const u8 DexDescription_Bayleef_1[] = _(
+ "BAYLEEF’s neck is ringed by curled-up\n"
+ "leaves. Inside each tubular leaf is a\n"
+ "small shoot of a tree.");
+static const u8 DexDescription_Bayleef_2[] = _(
+ "The fragrance of this shoot makes\n"
+ "people peppy.");
+
+static const u8 DexDescription_Meganium_1[] = _(
+ "The fragrance of MEGANIUM’s flower\n"
+ "soothes and calms emotions.\n"
+ "In battle, this POKéMON gives off more");
+static const u8 DexDescription_Meganium_2[] = _(
+ "of its becalming scent to blunt the\n"
+ "foe’s fighting spirit.");
+
+static const u8 DexDescription_Cyndaquil_1[] = _(
+ "CYNDAQUIL protects itself by flaring up\n"
+ "the flames on its back.\n"
+ "The flames are vigorous if the POKéMON");
+static const u8 DexDescription_Cyndaquil_2[] = _(
+ "is angry. However, if it is tired, the\n"
+ "flames splutter fitfully with incomplete\n"
+ "combustion.");
+
+static const u8 DexDescription_Quilava_1[] = _(
+ "QUILAVA keeps its foes at bay with the\n"
+ "intensity of its flames and gusts of\n"
+ "superheated air.");
+static const u8 DexDescription_Quilava_2[] = _(
+ "This POKéMON applies its outstanding\n"
+ "nimbleness to dodge attacks even while\n"
+ "scorching the foe with flames.");
+
+static const u8 DexDescription_Typhlosion_1[] = _(
+ "TYPHLOSION obscures itself behind a\n"
+ "shimmering heat haze that it creates\n"
+ "using its intensely hot flames.");
+static const u8 DexDescription_Typhlosion_2[] = _(
+ "This POKéMON creates blazing explosive\n"
+ "blasts that burn everything to cinders.");
+
+static const u8 DexDescription_Totodile_1[] = _(
+ "Despite the smallness of its body,\n"
+ "TOTODILE’s jaws are very powerful.\n"
+ "While the POKéMON may think it is just");
+static const u8 DexDescription_Totodile_2[] = _(
+ "playfully nipping, its bite has enough\n"
+ "power to cause serious injury.");
+
+static const u8 DexDescription_Croconaw_1[] = _(
+ "Once CROCONAW has clamped its jaws on\n"
+ "its foe, it will absolutely not let go.\n"
+ "Because the tips of its fangs are");
+static const u8 DexDescription_Croconaw_2[] = _(
+ "forked back like barbed fishhooks, they\n"
+ "become impossible to remove when \n"
+ "they have sunk in.");
+
+static const u8 DexDescription_Feraligatr_1[] = _(
+ "FERALIGATR intimidates its foes by\n"
+ "opening its huge mouth.\n"
+ "In battle, it will kick the ground hard");
+static const u8 DexDescription_Feraligatr_2[] = _(
+ "with its thick and powerful hind legs to\n"
+ "charge at the foe at an incredible\n"
+ "speed.");
+
+static const u8 DexDescription_Sentret_1[] = _(
+ "When SENTRET sleeps, it does so while\n"
+ "another stands guard. The sentry wakes\n"
+ "the others at the first sign of danger.");
+static const u8 DexDescription_Sentret_2[] = _(
+ "When this POKéMON becomes separated\n"
+ "from its pack, it becomes incapable of\n"
+ "sleep due to fear.");
+
+static const u8 DexDescription_Furret_1[] = _(
+ "FURRET has a very slim build.\n"
+ "When under attack, it can slickly squirm\n"
+ "through narrow spaces and get away.");
+static const u8 DexDescription_Furret_2[] = _(
+ "In spite of its short limbs, this\n"
+ "POKéMON is very nimble and fleet.");
+
+static const u8 DexDescription_Hoothoot_1[] = _(
+ "HOOTHOOT has an internal organ that\n"
+ "senses and tracks the earth’s rotation.\n"
+ "Using this special organ, this POKéMON");
+static const u8 DexDescription_Hoothoot_2[] = _(
+ "begins hooting at precisely the same\n"
+ "time every day.");
+
+static const u8 DexDescription_Noctowl_1[] = _(
+ "NOCTOWL never fails at catching prey in\n"
+ "darkness. This POKéMON owes its\n"
+ "success to its superior vision that");
+static const u8 DexDescription_Noctowl_2[] = _(
+ "allows it to see in minimal light, and to\n"
+ "its soft, supple wings that make no\n"
+ "sound in flight.");
+
+static const u8 DexDescription_Ledyba_1[] = _(
+ "LEDYBA secretes an aromatic fluid from\n"
+ "where its legs join its body. This fluid\n"
+ "is used for communicating with others.");
+static const u8 DexDescription_Ledyba_2[] = _(
+ "This POKéMON conveys its feelings to\n"
+ "others by altering the fluid’s scent.");
+
+static const u8 DexDescription_Ledian_1[] = _(
+ "It is said that in lands with clean air,\n"
+ "where the stars fill the sky, there live\n"
+ "LEDIAN in countless numbers.");
+static const u8 DexDescription_Ledian_2[] = _(
+ "There is a good reason for this - the\n"
+ "POKéMON uses the light of the stars\n"
+ "as its energy.");
+
+static const u8 DexDescription_Spinarak_1[] = _(
+ "The web spun by SPINARAK can be\n"
+ "considered its second nervous system.\n"
+ "It is said that this POKéMON can");
+static const u8 DexDescription_Spinarak_2[] = _(
+ "determine what kind of prey is touching\n"
+ "its web just by the tiny vibrations it\n"
+ "feels through the web’s strands.");
+
+static const u8 DexDescription_Ariados_1[] = _(
+ "ARIADOS’s feet are tipped with tiny\n"
+ "hooked claws that enable it to scuttle\n"
+ "on ceilings and vertical walls.");
+static const u8 DexDescription_Ariados_2[] = _(
+ "This POKéMON constricts the foe with\n"
+ "thin and strong silk webbing.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Crobat_1[] = _(
+ "CROBAT sneaks up on its intended prey\n"
+ "using wings that barely make a sound.\n"
+ "This POKéMON rests by hanging on a");
+static const u8 DexDescription_Crobat_2[] = _(
+ "tree branch with its rear legs that\n"
+ "serve as wings.");
+#else
+static const u8 DexDescription_Crobat_1[] = _(
+ "If this POKéMON is flying by fluttering\n"
+ "only a pair of wings on either the\n"
+ "forelegs or hind legs, it’s proof that");
+static const u8 DexDescription_Crobat_2[] = _(
+ "CROBAT has been flying a long distance.\n"
+ "It switches the wings it uses if it is\n"
+ "tired.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Chinchou_1[] = _(
+ "CHINCHOU’s two antennas are filled with\n"
+ "cells that generate strong electricity.\n"
+ "This POKéMON’s cells create so much");
+static const u8 DexDescription_Chinchou_2[] = _(
+ "electrical power, it even makes itself\n"
+ "tingle slightly.");
+#else
+static const u8 DexDescription_Chinchou_1[] = _(
+ "CHINCHOU lets loose positive and\n"
+ "negative electrical charges from its\n"
+ "two antennas to make its prey faint.");
+static const u8 DexDescription_Chinchou_2[] = _(
+ "This POKéMON flashes its electric\n"
+ "lights to exchange signals with others.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Lanturn_1[] = _(
+ "LANTURN is known to emit light.\n"
+ "If you peer down into the dark sea from\n"
+ "a ship at night, you can sometimes see");
+static const u8 DexDescription_Lanturn_2[] = _(
+ "this POKéMON’s light rising from the\n"
+ "depths where it swims. It gives the sea\n"
+ "an appearance of a starlit night.");
+#else
+static const u8 DexDescription_Lanturn_1[] = _(
+ "LANTURN is nicknamed “the deep-sea\n"
+ "star” for its illuminated antenna.\n"
+ "This POKéMON produces light by");
+static const u8 DexDescription_Lanturn_2[] = _(
+ "causing a chemical reaction between\n"
+ "bacteria and its bodily fluids inside\n"
+ "the antenna.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Pichu_1[] = _(
+ "When PICHU plays with others, it may\n"
+ "short out electricity with another\n"
+ "PICHU, creating a shower of sparks.");
+static const u8 DexDescription_Pichu_2[] = _(
+ "In that event, this POKéMON will begin\n"
+ "crying, startled by the flash of sparks.");
+#else
+static const u8 DexDescription_Pichu_1[] = _(
+ "PICHU charges itself with electricity\n"
+ "more easily on days with thunderclouds\n"
+ "or when the air is very dry.");
+static const u8 DexDescription_Pichu_2[] = _(
+ "You can hear the crackling of static\n"
+ "electricity coming off this POKéMON.");
+#endif
+
+static const u8 DexDescription_Cleffa_1[] = _(
+ "On nights with many shooting stars,\n"
+ "CLEFFA can be seen dancing in a ring.\n"
+ "They dance through the night and stop");
+static const u8 DexDescription_Cleffa_2[] = _(
+ "only at the break of day, when these\n"
+ "POKéMON quench their thirst with the\n"
+ "morning dew.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Igglybuff_1[] = _(
+ "IGGLYBUFF has a soft and plushy body\n"
+ "that feels very much like a marshmallow.\n"
+ "From this body wafts a gently sweet");
+static const u8 DexDescription_Igglybuff_2[] = _(
+ "fragrance that soothes and calms the\n"
+ "emotions of its foes.");
+#else
+static const u8 DexDescription_Igglybuff_1[] = _(
+ "IGGLYBUFF’s vocal chords are not\n"
+ "sufficiently developed. It would hurt\n"
+ "its throat if it were to sing too much.");
+static const u8 DexDescription_Igglybuff_2[] = _(
+ "This POKéMON gargles with freshwater\n"
+ "from a clean stream.");
+#endif
+
+static const u8 DexDescription_Togepi_1[] = _(
+ "As its energy, TOGEPI uses the positive\n"
+ "emotions of compassion and pleasure\n"
+ "exuded by people and POKéMON.");
+static const u8 DexDescription_Togepi_2[] = _(
+ "This POKéMON stores up feelings of\n"
+ "happiness inside its shell, then shares\n"
+ "them with others.");
+
+static const u8 DexDescription_Togetic_1[] = _(
+ "TOGETIC is said to be a POKéMON that\n"
+ "brings good fortune. When the POKéMON\n"
+ "spots someone who is pure of heart,");
+static const u8 DexDescription_Togetic_2[] = _(
+ "it is said to appear and share its\n"
+ "happiness with that person.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Natu_1[] = _(
+ "NATU has a highly developed jumping\n"
+ "ability. The POKéMON flaps and leaps\n"
+ "onto tree branches that are taller than");
+static const u8 DexDescription_Natu_2[] = _(
+ "grown-up people to pick at the tree’s\n"
+ "new shoots.");
+#else
+static const u8 DexDescription_Natu_1[] = _(
+ "NATU cannot fly because its wings are\n"
+ "not yet fully grown. If your eyes meet\n"
+ "with this POKéMON’s eyes, it will stare");
+static const u8 DexDescription_Natu_2[] = _(
+ "back intently at you. But if you move\n"
+ "even slightly, it will hop away to safety.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Xatu_1[] = _(
+ "XATU is known to stand motionless while\n"
+ "staring at the sun all day long.\n"
+ "Some people revere it as a mystical");
+static const u8 DexDescription_Xatu_2[] = _(
+ "POKéMON out of their belief that XATU\n"
+ "is in possession of the power to see\n"
+ "into the future.");
+#else
+static const u8 DexDescription_Xatu_1[] = _(
+ "XATU stands rooted and still in one\n"
+ "spot all day long. People believe that\n"
+ "this POKéMON does so out of fear of");
+static const u8 DexDescription_Xatu_2[] = _(
+ "the terrible things it has foreseen in\n"
+ "the future.");
+#endif
+
+static const u8 DexDescription_Mareep_1[] = _(
+ "MAREEP’s fluffy coat of wool rubs\n"
+ "together and builds a static charge.\n"
+ "The more static electricity is charged,");
+static const u8 DexDescription_Mareep_2[] = _(
+ "the more brightly the lightbulb at the\n"
+ "tip of its tail grows.");
+
+static const u8 DexDescription_Flaaffy_1[] = _(
+ "FLAAFFY’s wool quality changes so that\n"
+ "it can generate a high amount of static\n"
+ "electricity with a small amount of wool.");
+static const u8 DexDescription_Flaaffy_2[] = _(
+ "The bare and slick parts of its hide are\n"
+ "shielded against electricity.");
+
+static const u8 DexDescription_Ampharos_1[] = _(
+ "AMPHAROS gives off so much light that\n"
+ "it can be seen even from space.\n"
+ "People in the old days used the light of");
+static const u8 DexDescription_Ampharos_2[] = _(
+ "this POKéMON to send signals back and\n"
+ "forth with others far away.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Bellossom_1[] = _(
+ "A BELLOSSOM grows flowers more\n"
+ "beautifully if it has evolved from a\n"
+ "smelly GLOOM - the stinkier the better.");
+static const u8 DexDescription_Bellossom_2[] = _(
+ "At night, this POKéMON closes its\n"
+ "petals and goes to sleep.");
+#else
+static const u8 DexDescription_Bellossom_1[] = _(
+ "When BELLOSSOM gets exposed to plenty\n"
+ "of sunlight, the leaves ringing its body\n"
+ "begin to spin around.");
+static const u8 DexDescription_Bellossom_2[] = _(
+ "This POKéMON’s dancing is renowned in\n"
+ "the southern lands.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Marill_1[] = _(
+ "When fishing for food at the edge of a\n"
+ "fast-running stream, MARILL wraps its\n"
+ "tail around the trunk of a tree.");
+static const u8 DexDescription_Marill_2[] = _(
+ "This POKéMON’s tail is flexible and\n"
+ "configured to stretch.");
+#else
+static const u8 DexDescription_Marill_1[] = _(
+ "MARILL’s oil-filled tail acts much like\n"
+ "a life preserver. If you see just its\n"
+ "tail bobbing on the water’s surface,");
+static const u8 DexDescription_Marill_2[] = _(
+ "it’s a sure indication that this POKéMON\n"
+ "is diving beneath the water to feed on\n"
+ "aquatic plants.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Azumarill_1[] = _(
+ "AZUMARILL can make balloons out of\n"
+ "air. It makes these air balloons if it\n"
+ "spots a drowning POKéMON.");
+static const u8 DexDescription_Azumarill_2[] = _(
+ "The air balloons enable the POKéMON in\n"
+ "trouble to breathe.");
+#else
+static const u8 DexDescription_Azumarill_1[] = _(
+ "AZUMARILL’s long ears are indispensable\n"
+ "sensors. By focusing its hearing, this\n"
+ "POKéMON can identify what kinds of");
+static const u8 DexDescription_Azumarill_2[] = _(
+ "prey are around, even in rough and\n"
+ "fast-running rivers.");
+#endif
+
+static const u8 DexDescription_Sudowoodo_1[] = _(
+ "SUDOWOODO camouflages itself as a tree\n"
+ "to avoid being attacked by enemies.\n"
+ "However, because the forelegs remain");
+static const u8 DexDescription_Sudowoodo_2[] = _(
+ "green throughout the year, the POKéMON\n"
+ "is easily identified as a fake during\n"
+ "the winter.");
+
+static const u8 DexDescription_Politoed_1[] = _(
+ "The curled hair on POLITOED’s head is\n"
+ "proof of its status as a king. It is said\n"
+ "that the longer and more curled the");
+static const u8 DexDescription_Politoed_2[] = _(
+ "hair, the more respect this POKéMON\n"
+ "earns from its peers.");
+
+static const u8 DexDescription_Hoppip_1[] = _(
+ "This POKéMON drifts and floats with the\n"
+ "wind. If it senses the approach of\n"
+ "strong winds, HOPPIP links its leaves");
+static const u8 DexDescription_Hoppip_2[] = _(
+ "with other HOPPIP to prepare against\n"
+ "being blown away.");
+
+static const u8 DexDescription_Skiploom_1[] = _(
+ "SKIPLOOM’s flower blossoms when the\n"
+ "temperature rises above 64 degrees F.\n"
+ "How much the flower opens depends on");
+static const u8 DexDescription_Skiploom_2[] = _(
+ "the temperature. For that reason, this\n"
+ "POKéMON is sometimes used as a\n"
+ "thermometer.");
+
+static const u8 DexDescription_Jumpluff_1[] = _(
+ "JUMPLUFF rides warm southern winds to\n"
+ "cross the sea and fly to foreign lands.\n"
+ "The POKéMON descends to the ground");
+static const u8 DexDescription_Jumpluff_2[] = _(
+ "when it encounters cold air while it is\n"
+ "floating.");
+
+static const u8 DexDescription_Aipom_1[] = _(
+ "AIPOM’s tail ends in a hand-like\n"
+ "appendage that can be cleverly\n"
+ "manipulated.");
+static const u8 DexDescription_Aipom_2[] = _(
+ "However, because the POKéMON uses its\n"
+ "tail so much, its real hands have become\n"
+ "rather clumsy.");
+
+static const u8 DexDescription_Sunkern_1[] = _(
+ "SUNKERN tries to move as little as it\n"
+ "possibly can. It does so because it\n"
+ "tries to conserve all the nutrients it");
+static const u8 DexDescription_Sunkern_2[] = _(
+ "has stored in its body for its\n"
+ "evolution. It will not eat a thing, \n"
+ "subsisting only on morning dew.");
+
+static const u8 DexDescription_Sunflora_1[] = _(
+ "SUNFLORA converts solar energy into\n"
+ "nutrition. It moves around actively in\n"
+ "the daytime when it is warm.");
+static const u8 DexDescription_Sunflora_2[] = _(
+ "It stops moving as soon as the sun goes\n"
+ "down for the night.");
+
+static const u8 DexDescription_Yanma_1[] = _(
+ "YANMA is capable of seeing 360 degrees\n"
+ "without having to move its eyes.\n"
+ "It is a great flier that is adept at");
+static const u8 DexDescription_Yanma_2[] = _(
+ "making sudden stops and turning midair.\n"
+ "This POKéMON uses its flying ability to\n"
+ "quickly chase down targeted prey.");
+
+static const u8 DexDescription_Wooper_1[] = _(
+ "WOOPER usually lives in water.\n"
+ "However, it occasionally comes out onto\n"
+ "land in search of food.");
+static const u8 DexDescription_Wooper_2[] = _(
+ "On land, it coats its body with a gooey,\n"
+ "toxic film.");
+
+static const u8 DexDescription_Quagsire_1[] = _(
+ "QUAGSIRE hunts for food by leaving\n"
+ "its mouth wide open in water and waiting\n"
+ "for its prey to blunder in unaware.");
+static const u8 DexDescription_Quagsire_2[] = _(
+ "Because the POKéMON does not move,\n"
+ "it does not get very hungry.");
+
+static const u8 DexDescription_Espeon_1[] = _(
+ "ESPEON is extremely loyal to any\n"
+ "TRAINER it considers to be worthy.\n"
+ "It is said that this POKéMON developed");
+static const u8 DexDescription_Espeon_2[] = _(
+ "its precognitive powers to protect its\n"
+ "TRAINER from harm.");
+
+static const u8 DexDescription_Umbreon_1[] = _(
+ "UMBREON evolved as a result of exposure\n"
+ "to the moon’s waves.\n"
+ "It hides silently in darkness and waits");
+static const u8 DexDescription_Umbreon_2[] = _(
+ "for its foes to make a move.\n"
+ "The rings on its body glow when it leaps\n"
+ "to attack.");
+
+static const u8 DexDescription_Murkrow_1[] = _(
+ "MURKROW was feared and loathed as the\n"
+ "alleged bearer of ill fortune.\n"
+ "This POKéMON shows strong interest in");
+static const u8 DexDescription_Murkrow_2[] = _(
+ "anything that sparkles or glitters.\n"
+ "It will even try to steal rings from\n"
+ "women.");
+
+static const u8 DexDescription_Slowking_1[] = _(
+ "SLOWKING undertakes research every\n"
+ "day in an effort to solve the mysteries\n"
+ "of the world.");
+static const u8 DexDescription_Slowking_2[] = _(
+ "However, this POKéMON apparently\n"
+ "forgets everything it has learned if\n"
+ "the SHELLDER on its head comes off.");
+
+static const u8 DexDescription_Misdreavus_1[] = _(
+ "MISDREAVUS frightens people with a\n"
+ "creepy, sobbing cry. The POKéMON\n"
+ "apparently uses its red spheres to");
+static const u8 DexDescription_Misdreavus_2[] = _(
+ "absorb the fearful feelings of foes and\n"
+ "turn them into nutrition.");
+
+static const u8 DexDescription_Unown_1[] = _(
+ "This POKéMON is shaped like ancient\n"
+ "writing. It is a mystery as to which\n"
+ "came first, the ancient writings or the");
+static const u8 DexDescription_Unown_2[] = _(
+ "various UNOWN. Research into this\n"
+ "topic is ongoing but nothing is known.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Wobbuffet_1[] = _(
+ "WOBBUFFET does nothing but endure\n"
+ "attacks - it won’t attack on its own.\n"
+ "However, it won’t endure an attack on");
+static const u8 DexDescription_Wobbuffet_2[] = _(
+ "its tail. When that happens, the\n"
+ "POKéMON will try to take the foe with it\n"
+ "using DESTINY BOND.");
+#else
+static const u8 DexDescription_Wobbuffet_1[] = _(
+ "If two or more WOBBUFFET meet, they will\n"
+ "turn competitive and try to outdo each\n"
+ "other’s endurance.");
+static const u8 DexDescription_Wobbuffet_2[] = _(
+ "However, they may try to see which one\n"
+ "can endure the longest without food.\n"
+ "TRAINERS need to beware of this habit.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Girafarig_1[] = _(
+ "GIRAFARIG’s rear head contains a tiny\n"
+ "brain that is too small for thinking.\n"
+ "However, the rear head doesn’t need to");
+static const u8 DexDescription_Girafarig_2[] = _(
+ "sleep, so it can keep watch over its\n"
+ "surroundings 24 hours a day.");
+#else
+static const u8 DexDescription_Girafarig_1[] = _(
+ "GIRAFARIG’s rear head also has a brain,\n"
+ "but it is small. The rear head attacks in\n"
+ "response to smells and sounds.");
+static const u8 DexDescription_Girafarig_2[] = _(
+ "Approaching this POKéMON from behind\n"
+ "can cause the rear head to suddenly\n"
+ "lash out and bite.");
+#endif
+
+static const u8 DexDescription_Pineco_1[] = _(
+ "PINECO hangs from a tree branch and\n"
+ "patiently waits for prey to come along.\n"
+ "If the POKéMON is disturbed while");
+static const u8 DexDescription_Pineco_2[] = _(
+ "eating by someone shaking its tree, it\n"
+ "drops down to the ground and explodes\n"
+ "with no warning.");
+
+static const u8 DexDescription_Forretress_1[] = _(
+ "FORRETRESS conceals itself inside its\n"
+ "hardened steel shell. The shell is opened\n"
+ "when the POKéMON is catching prey,");
+static const u8 DexDescription_Forretress_2[] = _(
+ "but it does so at such a quick pace\n"
+ "that the shell’s inside cannot be seen.");
+
+static const u8 DexDescription_Dunsparce_1[] = _(
+ "DUNSPARCE has a drill for its tail.\n"
+ "It uses this tail to burrow into the\n"
+ "ground backwards.");
+static const u8 DexDescription_Dunsparce_2[] = _(
+ "This POKéMON is known to make its nest\n"
+ "in complex shapes deep under the\n"
+ "ground.");
+
+static const u8 DexDescription_Gligar_1[] = _(
+ "GLIGAR glides through the air without\n"
+ "a sound as if it were sliding.\n"
+ "This POKéMON hangs on to the face of");
+static const u8 DexDescription_Gligar_2[] = _(
+ "its foe using its clawed hind legs and\n"
+ "the large pincers on its forelegs, then\n"
+ "injects the prey with its poison barb.");
+
+static const u8 DexDescription_Steelix_1[] = _(
+ "STEELIX lives even further underground\n"
+ "than ONIX. This POKéMON is known to dig\n"
+ "towards the earth’s core.");
+static const u8 DexDescription_Steelix_2[] = _(
+ "There are records of this POKéMON\n"
+ "reaching a depth of over six-tenths\n"
+ "of a mile underground.");
+
+static const u8 DexDescription_Snubbull_1[] = _(
+ "By baring its fangs and making a scary\n"
+ "face, SNUBBULL sends smaller POKéMON\n"
+ "scurrying away in terror.");
+static const u8 DexDescription_Snubbull_2[] = _(
+ "However, this POKéMON seems a little\n"
+ "sad at making its foes flee.");
+
+static const u8 DexDescription_Granbull_1[] = _(
+ "GRANBULL has a particularly well-\n"
+ "developed lower jaw. The enormous fangs\n"
+ "are heavy, causing the POKéMON to tip");
+static const u8 DexDescription_Granbull_2[] = _(
+ "its head back for balance.\n"
+ "Unless it is startled, it will not try to\n"
+ "bite indiscriminately.");
+
+static const u8 DexDescription_Qwilfish_1[] = _(
+ "QWILFISH sucks in water, inflating\n"
+ "itself. This POKéMON uses the pressure\n"
+ "of the water it swallowed to shoot");
+static const u8 DexDescription_Qwilfish_2[] = _(
+ "toxic quills all at once from all over\n"
+ "its body. It finds swimming somewhat\n"
+ "challenging.");
+
+static const u8 DexDescription_Scizor_1[] = _(
+ "SCIZOR has a body with the hardness of\n"
+ "steel. It is not easily fazed by ordinary\n"
+ "sorts of attacks.");
+static const u8 DexDescription_Scizor_2[] = _(
+ "This POKéMON flaps its wings to\n"
+ "regulate its body temperature.");
+
+static const u8 DexDescription_Shuckle_1[] = _(
+ "SHUCKLE quietly hides itself under\n"
+ "rocks, keeping its body concealed\n"
+ "inside its hard shell while eating");
+static const u8 DexDescription_Shuckle_2[] = _(
+ "berries it has stored away.\n"
+ "The berries mix with its body fluids to\n"
+ "become a juice.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Heracross_1[] = _(
+ "HERACROSS has sharp claws on its feet.\n"
+ "These are planted firmly into the\n"
+ "ground or the bark of a tree, giving the");
+static const u8 DexDescription_Heracross_2[] = _(
+ "POKéMON a secure and solid footing\n"
+ "to forcefully fling away foes with\n"
+ "its proud horn.");
+#else
+static const u8 DexDescription_Heracross_1[] = _(
+ "HERACROSS charges in a straight line at\n"
+ "its foe, slips beneath the foe’s grasp,\n"
+ "and then scoops up and hurls the");
+static const u8 DexDescription_Heracross_2[] = _(
+ "opponent with its mighty horn.\n"
+ "This POKéMON even has enough power\n"
+ "to topple a massive tree.");
+#endif
+
+static const u8 DexDescription_Sneasel_1[] = _(
+ "SNEASEL scales trees by punching its\n"
+ "hooked claws into the bark.\n"
+ "This POKéMON seeks out unguarded");
+static const u8 DexDescription_Sneasel_2[] = _(
+ "nests and steals eggs for food while\n"
+ "the parents are away.");
+
+static const u8 DexDescription_Teddiursa_1[] = _(
+ "This POKéMON likes to lick its palms that\n"
+ "are sweetened by being soaked in honey.\n"
+ "TEDDIURSA concocts its own honey by");
+static const u8 DexDescription_Teddiursa_2[] = _(
+ "blending fruits and pollen collected by\n"
+ "BEEDRILL.");
+
+static const u8 DexDescription_Ursaring_1[] = _(
+ "In the forests inhabited by URSARING,\n"
+ "it is said that there are many streams\n"
+ "and towering trees where they");
+static const u8 DexDescription_Ursaring_2[] = _(
+ "gather food. This POKéMON walks\n"
+ "through its forest gathering food\n"
+ "every day.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Slugma_1[] = _(
+ "SLUGMA does not have any blood in its\n"
+ "body. Instead, intensely hot magma\n"
+ "circulates throughout this POKéMON’s");
+static const u8 DexDescription_Slugma_2[] = _(
+ "body, carrying essential nutrients and\n"
+ "oxygen to its organs.");
+#else
+static const u8 DexDescription_Slugma_1[] = _(
+ "Molten magma courses throughout\n"
+ "SLUGMA’s circulatory system.\n"
+ "If this POKéMON is chilled, the magma");
+static const u8 DexDescription_Slugma_2[] = _(
+ "cools and hardens. Its body turns\n"
+ "brittle and chunks fall off, reducing\n"
+ "its size.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Magcargo_1[] = _(
+ "MAGCARGO’s body temperature is\n"
+ "approximately 18,000 degrees F.\n"
+ "Water is vaporized on contact.");
+static const u8 DexDescription_Magcargo_2[] = _(
+ "If this POKéMON is caught in the rain,\n"
+ "the raindrops instantly turn into\n"
+ "steam, cloaking the area in a thick fog.");
+#else
+static const u8 DexDescription_Magcargo_1[] = _(
+ "MAGCARGO’s shell is actually its skin\n"
+ "that hardened as a result of cooling.\n"
+ "Its shell is very brittle and fragile -");
+static const u8 DexDescription_Magcargo_2[] = _(
+ "just touching it causes it to crumble\n"
+ "apart. This POKéMON returns to its\n"
+ "original size by dipping itself in magma.");
+#endif
+
+static const u8 DexDescription_Swinub_1[] = _(
+ "SWINUB roots for food by rubbing its\n"
+ "snout against the ground. Its favorite\n"
+ "food is a mushroom that grows under");
+static const u8 DexDescription_Swinub_2[] = _(
+ "the cover of dead grass.\n"
+ "This POKéMON occasionally roots out\n"
+ "hot springs.");
+
+static const u8 DexDescription_Piloswine_1[] = _(
+ "PILOSWINE is covered by a thick coat\n"
+ "of long hair that enables it to endure\n"
+ "the freezing cold.");
+static const u8 DexDescription_Piloswine_2[] = _(
+ "This POKéMON uses its tusks to dig up\n"
+ "food that has been buried under ice.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Corsola_1[] = _(
+ "Clusters of CORSOLA congregate in warm\n"
+ "seas where they serve as ideal hiding\n"
+ "places for smaller POKéMON.");
+static const u8 DexDescription_Corsola_2[] = _(
+ "When the water temperature falls, this\n"
+ "POKéMON migrates to the southern seas.");
+#else
+static const u8 DexDescription_Corsola_1[] = _(
+ "CORSOLA’s branches glitter very\n"
+ "beautifully in seven colors when they\n"
+ "catch sunlight.");
+static const u8 DexDescription_Corsola_2[] = _(
+ "If any branch breaks off, this POKéMON\n"
+ "grows it back in just one night.");
+#endif
+
+static const u8 DexDescription_Remoraid_1[] = _(
+ "REMORAID sucks in water, then expels it\n"
+ "at high velocity using its abdominal\n"
+ "muscles to shoot down flying prey.");
+static const u8 DexDescription_Remoraid_2[] = _(
+ "When evolution draws near, this POKéMON\n"
+ "travels downstream from rivers.");
+
+static const u8 DexDescription_Octillery_1[] = _(
+ "OCTILLERY grabs onto its foe using\n"
+ "its tentacles. This POKéMON tries to\n"
+ "immobilize it before delivering the");
+static const u8 DexDescription_Octillery_2[] = _(
+ "finishing blow.\n"
+ "If the foe turns out to be too strong,\n"
+ "OCTILLERY spews ink to escape.");
+
+static const u8 DexDescription_Delibird_1[] = _(
+ "DELIBIRD carries its food bundled up\n"
+ "in its tail. There once was a famous\n"
+ "explorer who managed to reach the peak");
+static const u8 DexDescription_Delibird_2[] = _(
+ "of Mt. Everest thanks to one of these\n"
+ "POKéMON sharing its food.");
+
+static const u8 DexDescription_Mantine_1[] = _(
+ "On sunny days, schools of MANTINE can\n"
+ "be seen elegantly leaping over the\n"
+ "sea’s waves.");
+static const u8 DexDescription_Mantine_2[] = _(
+ "This POKéMON is not bothered by the\n"
+ "REMORAID that hitches rides.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Skarmory_1[] = _(
+ "SKARMORY’s steel wings become tattered\n"
+ "and bashed in from repeated battles.\n"
+ "Once a year, the battered wings grow");
+static const u8 DexDescription_Skarmory_2[] = _(
+ "back completely, restoring the cutting\n"
+ "edges to their pristine state.");
+#else
+static const u8 DexDescription_Skarmory_1[] = _(
+ "SKARMORY is entirely encased in hard,\n"
+ "protective armor. This POKéMON flies at\n"
+ "close to 190 mph.");
+static const u8 DexDescription_Skarmory_2[] = _(
+ "It slashes foes with its wings that\n"
+ "possess swordlike cutting edges.");
+#endif
+
+static const u8 DexDescription_Houndour_1[] = _(
+ "HOUNDOUR hunt as a coordinated pack.\n"
+ "They communicate with each other using\n"
+ "a variety of cries to corner their prey.");
+static const u8 DexDescription_Houndour_2[] = _(
+ "This POKéMON’s remarkable teamwork is\n"
+ "unparalleled.");
+
+static const u8 DexDescription_Houndoom_1[] = _(
+ "In a HOUNDOOM pack, the one with its\n"
+ "horns raked sharply towards the back\n"
+ "serves a leadership role.");
+static const u8 DexDescription_Houndoom_2[] = _(
+ "These POKéMON choose their leader by\n"
+ "fighting amongst themselves.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Kingdra_1[] = _(
+ "KINGDRA sleeps on the seafloor where\n"
+ "it is otherwise devoid of life.\n"
+ "When a storm arrives, the POKéMON is");
+static const u8 DexDescription_Kingdra_2[] = _(
+ "said to awaken and wander about in\n"
+ "search of prey.");
+#else
+static const u8 DexDescription_Kingdra_1[] = _(
+ "KINGDRA lives at extreme ocean depths\n"
+ "that are otherwise uninhabited.\n"
+ "It has long been believed that the");
+static const u8 DexDescription_Kingdra_2[] = _(
+ "yawning of this POKéMON creates\n"
+ "spiraling ocean currents.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Phanpy_1[] = _(
+ "PHANPY uses its long nose to shower\n"
+ "itself. When others gather around, they\n"
+ "thoroughly douse each other with water.");
+static const u8 DexDescription_Phanpy_2[] = _(
+ "These POKéMON can be seen drying their\n"
+ "soaking-wet bodies at the edge of\n"
+ "water.");
+#else
+static const u8 DexDescription_Phanpy_1[] = _(
+ "For its nest, PHANPY digs a vertical pit \n"
+ "in the ground at the edge of a river.\n"
+ "It marks the area around its nest with");
+static const u8 DexDescription_Phanpy_2[] = _(
+ "its trunk to let the others know that\n"
+ "the area has been claimed.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Donphan_1[] = _(
+ "If DONPHAN were to tackle with its hard\n"
+ "body, even a house could be destroyed.\n"
+ "Using its massive strength, the");
+static const u8 DexDescription_Donphan_2[] = _(
+ "POKéMON helps clear rock and mud slides\n"
+ "that block mountain trails.");
+#else
+static const u8 DexDescription_Donphan_1[] = _(
+ "DONPHAN’s favorite attack is curling\n"
+ "its body into a ball, then charging at\n"
+ "its foe while rolling at high speed.");
+static const u8 DexDescription_Donphan_2[] = _(
+ "Once it starts rolling, this POKéMON\n"
+ "can’t stop very easily.");
+#endif
+
+static const u8 DexDescription_Porygon2_1[] = _(
+ "PORYGON2 was created by humans using\n"
+ "the power of science. The man-made\n"
+ "POKéMON has been endowed with");
+static const u8 DexDescription_Porygon2_2[] = _(
+ "artificial intelligence that enables it\n"
+ "to learn new gestures and emotions\n"
+ "on its own.");
+
+static const u8 DexDescription_Stantler_1[] = _(
+ "STANTLER’s magnificent antlers were\n"
+ "traded at high prices as works of art.\n"
+ "As a result, this POKéMON was hunted");
+static const u8 DexDescription_Stantler_2[] = _(
+ "close to extinction by those who were\n"
+ "after the priceless antlers.");
+
+static const u8 DexDescription_Smeargle_1[] = _(
+ "SMEARGLE marks the boundaries of its\n"
+ "territory using a body fluid that leaks\n"
+ "out from the tip of its tail.");
+static const u8 DexDescription_Smeargle_2[] = _(
+ "Over 5,000 different marks left by this\n"
+ "POKéMON have been found.");
+
+static const u8 DexDescription_Tyrogue_1[] = _(
+ "TYROGUE becomes stressed out if it\n"
+ "does not get to train every day.\n"
+ "When raising this POKéMON, the TRAINER");
+static const u8 DexDescription_Tyrogue_2[] = _(
+ "must establish and uphold various\n"
+ "training methods.");
+
+static const u8 DexDescription_Hitmontop_1[] = _(
+ "HITMONTOP spins on its head at high\n"
+ "speed, all the while delivering kicks.\n"
+ "This technique is a remarkable mix of");
+static const u8 DexDescription_Hitmontop_2[] = _(
+ "both offense and defense at the same\n"
+ "time. The POKéMON travels faster\n"
+ "spinning than it does walking.");
+
+static const u8 DexDescription_Smoochum_1[] = _(
+ "SMOOCHUM actively runs about, but\n"
+ "also falls quite often.\n"
+ "Whenever the chance arrives, it will");
+static const u8 DexDescription_Smoochum_2[] = _(
+ "look for its reflection to make sure its\n"
+ "face hasn’t become dirty.");
+
+static const u8 DexDescription_Elekid_1[] = _(
+ "ELEKID stores electricity in its body.\n"
+ "If it touches metal and accidentally\n"
+ "discharges all its built-up electricity,");
+static const u8 DexDescription_Elekid_2[] = _(
+ "this POKéMON begins swinging its arms\n"
+ "in circles to recharge itself.");
+
+static const u8 DexDescription_Magby_1[] = _(
+ "MAGBY’s state of health is determined\n"
+ "by observing the fire it breathes.\n"
+ "If the POKéMON is spouting yellow");
+static const u8 DexDescription_Magby_2[] = _(
+ "flames from its mouth, it is in good\n"
+ "health. When it is fatigued, black smoke\n"
+ "will be mixed in with the flames.");
+
+static const u8 DexDescription_Miltank_1[] = _(
+ "MILTANK gives over five gallons of milk\n"
+ "on a daily basis. Its sweet milk is\n"
+ "enjoyed by children and grown-ups alike.");
+static const u8 DexDescription_Miltank_2[] = _(
+ "People who can’t drink milk turn it into\n"
+ "yogurt and eat it instead.");
+
+static const u8 DexDescription_Blissey_1[] = _(
+ "BLISSEY senses sadness with its fluffy\n"
+ "coat of fur. If it does so, this POKéMON\n"
+ "will rush over to the sad person,");
+static const u8 DexDescription_Blissey_2[] = _(
+ "however far they may be, to share an\n"
+ "egg of happiness that brings a smile\n"
+ "to any face.");
+
+static const u8 DexDescription_Raikou_1[] = _(
+ "RAIKOU embodies the speed of lightning.\n"
+ "The roars of this POKéMON send shock\n"
+ "waves shuddering through the air and");
+static const u8 DexDescription_Raikou_2[] = _(
+ "shake the ground as if lightning bolts\n"
+ "had come crashing down.");
+
+static const u8 DexDescription_Entei_1[] = _(
+ "ENTEI embodies the passion of magma.\n"
+ "This POKéMON is thought to have been\n"
+ "born in the eruption of a volcano.");
+static const u8 DexDescription_Entei_2[] = _(
+ "It sends up massive bursts of fire that\n"
+ "utterly consume all that they touch.");
+
+static const u8 DexDescription_Suicune_1[] = _(
+ "SUICUNE embodies the compassion of\n"
+ "a pure spring of water. It runs across\n"
+ "the land with gracefulness.");
+static const u8 DexDescription_Suicune_2[] = _(
+ "This POKéMON has the power to purify\n"
+ "dirty water.");
+
+static const u8 DexDescription_Larvitar_1[] = _(
+ "LARVITAR is born deep under the ground.\n"
+ "To come up to the surface, this POKéMON\n"
+ "must eat its way through the soil above.");
+static const u8 DexDescription_Larvitar_2[] = _(
+ "Until it does so, LARVITAR cannot see\n"
+ "its parent’s face.");
+
+static const u8 DexDescription_Pupitar_1[] = _(
+ "PUPITAR creates a gas inside its body\n"
+ "that it compresses and forcefully\n"
+ "ejects to propel itself like a jet.");
+static const u8 DexDescription_Pupitar_2[] = _(
+ "The body is very durable - it avoids\n"
+ "damage even if it hits solid steel.");
+
+static const u8 DexDescription_Tyranitar_1[] = _(
+ "TYRANITAR is so overwhelmingly\n"
+ "powerful, it can bring down a whole\n"
+ "mountain to make its nest.");
+static const u8 DexDescription_Tyranitar_2[] = _(
+ "This POKéMON wanders about in\n"
+ "mountains seeking new opponents to\n"
+ "fight.");
+
+static const u8 DexDescription_Lugia_1[] = _(
+ "LUGIA’s wings pack devastating power -\n"
+ "a light fluttering of its wings can blow\n"
+ "apart regular houses.");
+static const u8 DexDescription_Lugia_2[] = _(
+ "As a result, this POKéMON chooses to\n"
+ "live out of sight deep under the sea.");
+
+static const u8 DexDescription_HoOh_1[] = _(
+ "HO-OH’s feathers glow in seven colors\n"
+ "depending on the angle at which they\n"
+ "are struck by light.");
+static const u8 DexDescription_HoOh_2[] = _(
+ "These feathers are said to bring\n"
+ "happiness to the bearers. This POKéMON\n"
+ "is said to live at the foot of a rainbow.");
+
+static const u8 DexDescription_Celebi_1[] = _(
+ "This POKéMON came from the future by\n"
+ "crossing over time.\n"
+ "It is thought that so long as CELEBI");
+static const u8 DexDescription_Celebi_2[] = _(
+ "appears, a bright and shining future\n"
+ "awaits us.");
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Treecko_1[] = _(
+ "TREECKO is cool, calm, and collected -\n"
+ "it never panics under any situation.\n"
+ "If a bigger foe were to glare at this");
+static const u8 DexDescription_Treecko_2[] = _(
+ "POKéMON, it would glare right back\n"
+ "without conceding an inch of ground.");
+#else
+static const u8 DexDescription_Treecko_1[] = _(
+ "TREECKO has small hooks on the bottom\n"
+ "of its feet that enable it to scale\n"
+ "vertical walls.");
+static const u8 DexDescription_Treecko_2[] = _(
+ "This POKéMON attacks by slamming foes\n"
+ "with its thick tail.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Grovyle_1[] = _(
+ "This POKéMON adeptly flies from branch\n"
+ "to branch in trees.\n"
+ "In a forest, no POKéMON can ever hope");
+static const u8 DexDescription_Grovyle_2[] = _(
+ "to catch a fleeing GROVYLE however\n"
+ "fast they may be.");
+#else
+static const u8 DexDescription_Grovyle_1[] = _(
+ "The leaves growing out of GROVYLE’s\n"
+ "body are convenient for camouflaging\n"
+ "it from enemies in the forest.");
+static const u8 DexDescription_Grovyle_2[] = _(
+ "This POKéMON is a master at climbing\n"
+ "trees in jungles.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Sceptile_1[] = _(
+ "SCEPTILE has seeds growing on its back.\n"
+ "They are said to be bursting with\n"
+ "nutrients that revitalize trees.");
+static const u8 DexDescription_Sceptile_2[] = _(
+ "This POKéMON raises the trees in a\n"
+ "forest with loving care.");
+#else
+static const u8 DexDescription_Sceptile_1[] = _(
+ "The leaves growing on SCEPTILE’s body\n"
+ "are very sharp edged. This POKéMON is\n"
+ "very agile - it leaps all over the");
+static const u8 DexDescription_Sceptile_2[] = _(
+ "branches of trees and jumps on its foe\n"
+ "from above or behind.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Torchic_1[] = _(
+ "TORCHIC has a place inside its body\n"
+ "where it keeps its flame. Give it a hug -\n"
+ "it will be glowing with warmth.");
+static const u8 DexDescription_Torchic_2[] = _(
+ "This POKéMON is covered all over by a\n"
+ "fluffy coat of down.");
+#else
+static const u8 DexDescription_Torchic_1[] = _(
+ "TORCHIC sticks with its TRAINER,\n"
+ "following behind with unsteady\n"
+ "steps.");
+static const u8 DexDescription_Torchic_2[] = _(
+ "This POKéMON breathes fire of over\n"
+ "1,800 degrees F, including fireballs\n"
+ "that leave the foe scorched black.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Combusken_1[] = _(
+ "COMBUSKEN battles with the intensely\n"
+ "hot flames it spews from its beak and\n"
+ "with outstandingly destructive kicks.");
+static const u8 DexDescription_Combusken_2[] = _(
+ "This POKéMON’s cry is very loud and\n"
+ "distracting.");
+#else
+static const u8 DexDescription_Combusken_1[] = _(
+ "COMBUSKEN toughens up its legs and\n"
+ "thighs by running through fields and\n"
+ "mountains.");
+static const u8 DexDescription_Combusken_2[] = _(
+ "This POKéMON’s legs possess both speed\n"
+ "and power, enabling it to dole out ten\n"
+ "kicks in one second.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Blaziken_1[] = _(
+ "BLAZIKEN has incredibly strong legs -\n"
+ "it can easily clear a 30-story building\n"
+ "in one leap.");
+static const u8 DexDescription_Blaziken_2[] = _(
+ "This POKéMON’s blazing punches leave\n"
+ "its foes scorched and blackened.");
+#else
+static const u8 DexDescription_Blaziken_1[] = _(
+ "In battle, BLAZIKEN blows out intense\n"
+ "flames from its wrists and attacks foes\n"
+ "courageously.");
+static const u8 DexDescription_Blaziken_2[] = _(
+ "The stronger the foe, the more\n"
+ "intensely this POKéMON’s wrists burn.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Mudkip_1[] = _(
+ "In water, MUDKIP breathes using the\n"
+ "gills on its cheeks.\n"
+ "If it is faced with a tight situation in");
+static const u8 DexDescription_Mudkip_2[] = _(
+ "battle, this POKéMON will unleash its\n"
+ "amazing power - it can crush rocks\n"
+ "bigger than itself.");
+#else
+static const u8 DexDescription_Mudkip_1[] = _(
+ "The fin on MUDKIP’s head acts as highly\n"
+ "sensitive radar. Using this fin to sense\n"
+ "movements of water and air, this");
+static const u8 DexDescription_Mudkip_2[] = _(
+ "POKéMON can determine what is taking\n"
+ "place around it without using its eyes.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Marshtomp_1[] = _(
+ "MARSHTOMP is much faster at traveling\n"
+ "through mud than it is at swimming.\n"
+ "This POKéMON’s hindquarters exhibit");
+static const u8 DexDescription_Marshtomp_2[] = _(
+ "obvious development, giving it the\n"
+ "ability to walk on just its hind legs.");
+#else
+static const u8 DexDescription_Marshtomp_1[] = _(
+ "The surface of MARSHTOMP’s body is\n"
+ "enveloped by a thin, sticky film that\n"
+ "enables it to live on land.");
+static const u8 DexDescription_Marshtomp_2[] = _(
+ "This POKéMON plays in mud on beaches\n"
+ "when the ocean tide is low.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Swampert_1[] = _(
+ "SWAMPERT predicts storms by sensing\n"
+ "subtle differences in the sounds of\n"
+ "waves and tidal winds with its fins.");
+static const u8 DexDescription_Swampert_2[] = _(
+ "If a storm is approaching, it piles up\n"
+ "boulders to protect itself.");
+#else
+static const u8 DexDescription_Swampert_1[] = _(
+ "SWAMPERT is very strong. It has enough\n"
+ "power to easily drag a boulder weighing\n"
+ "more than a ton.");
+static const u8 DexDescription_Swampert_2[] = _(
+ "This POKéMON also has powerful vision\n"
+ "that lets it see even in murky water.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Poochyena_1[] = _(
+ "POOCHYENA is an omnivore - it will eat\n"
+ "anything. A distinguishing feature is\n"
+ "how large its fangs are compared to");
+static const u8 DexDescription_Poochyena_2[] = _(
+ "its body. This POKéMON tries to\n"
+ "intimidate its foes by making the hair\n"
+ "on its tail bristle out.");
+#else
+static const u8 DexDescription_Poochyena_1[] = _(
+ "At first sight, POOCHYENA takes a bite\n"
+ "at anything that moves.\n"
+ "This POKéMON chases after prey until");
+static const u8 DexDescription_Poochyena_2[] = _(
+ "the victim becomes exhausted.\n"
+ "However, it may turn tail if the prey\n"
+ "strikes back.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Mightyena_1[] = _(
+ "MIGHTYENA travel and act as a pack\n"
+ "in the wild. The memory of its life in the\n"
+ "wild compels the POKéMON to obey only");
+static const u8 DexDescription_Mightyena_2[] = _(
+ "those TRAINERS that it recognizes to\n"
+ "possess superior skill.");
+#else
+static const u8 DexDescription_Mightyena_1[] = _(
+ "MIGHTYENA gives obvious signals when\n"
+ "it is preparing to attack. It starts to\n"
+ "growl deeply and then flattens its body.");
+static const u8 DexDescription_Mightyena_2[] = _(
+ "This POKéMON will bite savagely with its\n"
+ "sharply pointed fangs.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Zigzagoon_1[] = _(
+ "The hair on ZIGZAGOON’s back is \n"
+ "bristly. It rubs the hard back hair\n"
+ "against trees to leave its territorial");
+static const u8 DexDescription_Zigzagoon_2[] = _(
+ "markings.\n"
+ "This POKéMON may play dead to fool foes\n"
+ "in battle.");
+#else
+static const u8 DexDescription_Zigzagoon_1[] = _(
+ "ZIGZAGOON restlessly wanders\n"
+ "everywhere at all times. This POKéMON\n"
+ "does so because it is very curious.");
+static const u8 DexDescription_Zigzagoon_2[] = _(
+ "It becomes interested in anything\n"
+ "that it happens to see.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Linoone_1[] = _(
+ "When hunting, LINOONE will make a\n"
+ "beeline straight for the prey at a full\n"
+ "run. While this POKéMON is capable of");
+static const u8 DexDescription_Linoone_2[] = _(
+ "topping 60 mph, it has to come to a\n"
+ "screeching halt before it can turn.");
+#else
+static const u8 DexDescription_Linoone_1[] = _(
+ "LINOONE always runs full speed and only\n"
+ "in straight lines. If facing an obstacle,\n"
+ "it makes a right-angle turn to evade it.");
+static const u8 DexDescription_Linoone_2[] = _(
+ "This POKéMON is very challenged by\n"
+ "gently curving roads.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Wurmple_1[] = _(
+ "WURMPLE is targeted by SWELLOW as\n"
+ "prey. This POKéMON will try to resist by\n"
+ "pointing the spikes on its rear at the");
+static const u8 DexDescription_Wurmple_2[] = _(
+ "attacking predator.\n"
+ "It will weaken the foe by leaking poison\n"
+ "from the spikes.");
+#else
+static const u8 DexDescription_Wurmple_1[] = _(
+ "Using the spikes on its rear end, \n"
+ "WURMPLE peels the bark off trees and\n"
+ "feeds on the sap that oozes out.");
+static const u8 DexDescription_Wurmple_2[] = _(
+ "This POKéMON’s feet are tipped with\n"
+ "suction pads that allow it to cling to\n"
+ "glass without slipping.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Silcoon_1[] = _(
+ "SILCOON was thought to endure hunger\n"
+ "and not consume anything before its\n"
+ "evolution. However, it is now thought");
+static const u8 DexDescription_Silcoon_2[] = _(
+ "that this POKéMON slakes its thirst by\n"
+ "drinking rainwater that collects on its\n"
+ "silk.");
+#else
+static const u8 DexDescription_Silcoon_1[] = _(
+ "SILCOON tethers itself to a tree branch\n"
+ "using silk to keep from falling. There, \n"
+ "this POKéMON hangs quietly while it");
+static const u8 DexDescription_Silcoon_2[] = _(
+ "awaits evolution.\n"
+ "It peers out of the silk cocoon through\n"
+ "a small hole.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Beautifly_1[] = _(
+ "BEAUTIFLY has a long mouth like a coiled\n"
+ "needle, which is very convenient for\n"
+ "collecting pollen from flowers.");
+static const u8 DexDescription_Beautifly_2[] = _(
+ "This POKéMON rides the spring winds as\n"
+ "it flits around gathering pollen.");
+#else
+static const u8 DexDescription_Beautifly_1[] = _(
+ "BEAUTIFLY’s favorite food is the sweet\n"
+ "pollen of flowers. If you want to see\n"
+ "this POKéMON, just leave a potted");
+static const u8 DexDescription_Beautifly_2[] = _(
+ "flower by an open window. BEAUTIFLY\n"
+ "is sure to come looking for pollen.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Cascoon_1[] = _(
+ "If it is attacked, CASCOON remains\n"
+ "motionless however badly it may be\n"
+ "hurt. It does so because if it were to");
+static const u8 DexDescription_Cascoon_2[] = _(
+ "move, its body would be weak upon\n"
+ "evolution. This POKéMON will also not\n"
+ "forget the pain it endured.");
+#else
+static const u8 DexDescription_Cascoon_1[] = _(
+ "CASCOON makes its protective cocoon\n"
+ "by wrapping its body entirely with a\n"
+ "fine silk from its mouth. Once the silk");
+static const u8 DexDescription_Cascoon_2[] = _(
+ "goes around its body, it hardens.\n"
+ "This POKéMON prepares for its evolution\n"
+ "inside the cocoon.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Dustox_1[] = _(
+ "When DUSTOX flaps its wings, a fine\n"
+ "dust is scattered all over. This dust is\n"
+ "actually a powerful poison that will");
+static const u8 DexDescription_Dustox_2[] = _(
+ "even make a pro wrestler sick.\n"
+ "This POKéMON searches for food using\n"
+ "its antennae like radar.");
+#else
+static const u8 DexDescription_Dustox_1[] = _(
+ "DUSTOX is instinctively drawn to light.\n"
+ "Swarms of this POKéMON are attracted\n"
+ "by the bright lights of cities, where");
+static const u8 DexDescription_Dustox_2[] = _(
+ "they wreak havoc by stripping the\n"
+ "leaves off roadside trees for food.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Lotad_1[] = _(
+ "LOTAD is said to have dwelled on land\n"
+ "before. However, this POKéMON is\n"
+ "thought to have returned to water");
+static const u8 DexDescription_Lotad_2[] = _(
+ "because the leaf on its head grew large\n"
+ "and heavy. It now lives by floating\n"
+ "atop the water.");
+#else
+static const u8 DexDescription_Lotad_1[] = _(
+ "LOTAD live in ponds and lakes, where\n"
+ "they float on the surface.\n"
+ "It grows weak if its broad leaf dies.");
+static const u8 DexDescription_Lotad_2[] = _(
+ "On rare occasions, this POKéMON travels\n"
+ "on land in search of clean water.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Lombre_1[] = _(
+ "LOMBRE’s entire body is covered by a\n"
+ "slippery, slimy film. It feels horribly\n"
+ "unpleasant to be touched by this");
+static const u8 DexDescription_Lombre_2[] = _(
+ "POKéMON’s hands.\n"
+ "LOMBRE is often mistaken for a human\n"
+ "child.");
+#else
+static const u8 DexDescription_Lombre_1[] = _(
+ "LOMBRE is nocturnal - it will get active\n"
+ "after dusk. It is also a mischief-maker.\n"
+ "When this POKéMON spots anglers,");
+static const u8 DexDescription_Lombre_2[] = _(
+ "it tugs on their fishing lines from\n"
+ "beneath the surface and enjoys their\n"
+ "consternation.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Ludicolo_1[] = _(
+ "Upon hearing an upbeat and cheerful\n"
+ "rhythm, the cells in LUDICOLO’s body\n"
+ "become very energetic and active.");
+static const u8 DexDescription_Ludicolo_2[] = _(
+ "Even in battle, this POKéMON will\n"
+ "exhibit an amazing amount of power.");
+#else
+static const u8 DexDescription_Ludicolo_1[] = _(
+ "LUDICOLO begins dancing as soon as\n"
+ "it hears cheerful, festive music.\n"
+ "This POKéMON is said to appear when it");
+static const u8 DexDescription_Ludicolo_2[] = _(
+ "hears the singing of children on hiking\n"
+ "outings.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Seedot_1[] = _(
+ "SEEDOT looks exactly like an acorn\n"
+ "when it is dangling from a tree branch.\n"
+ "It startles other POKéMON by suddenly");
+static const u8 DexDescription_Seedot_2[] = _(
+ "moving.\n"
+ "This POKéMON polishes its body once a\n"
+ "day using leaves.");
+#else
+static const u8 DexDescription_Seedot_1[] = _(
+ "SEEDOT attaches itself to a tree\n"
+ "branch using the top of its head.\n"
+ "It sucks moisture from the tree while");
+static const u8 DexDescription_Seedot_2[] = _(
+ "hanging off the branch.\n"
+ "The more water it drinks, the glossier\n"
+ "this POKéMON’s body becomes.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Nuzleaf_1[] = _(
+ "This POKéMON pulls out the leaf on its\n"
+ "head and makes a flute with it.\n"
+ "The sound of NUZLEAF’s flute strikes");
+static const u8 DexDescription_Nuzleaf_2[] = _(
+ "fear and uncertainty in the hearts of\n"
+ "people lost in a forest.");
+#else
+static const u8 DexDescription_Nuzleaf_1[] = _(
+ "NUZLEAF live in densely overgrown\n"
+ "forests. They occasionally venture out\n"
+ "of the forest to startle people.");
+static const u8 DexDescription_Nuzleaf_2[] = _(
+ "This POKéMON dislikes having its long\n"
+ "nose pinched.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Shiftry_1[] = _(
+ "SHIFTRY’s large fans generate awesome\n"
+ "gusts of wind at a speed close to 100\n"
+ "feet per second. The whipped-up wind");
+static const u8 DexDescription_Shiftry_2[] = _(
+ "blows anything away.\n"
+ "This POKéMON chooses to live quietly\n"
+ "deep in forests.");
+#else
+static const u8 DexDescription_Shiftry_1[] = _(
+ "SHIFTRY is a mysterious POKéMON that\n"
+ "is said to live atop towering trees \n"
+ "dating back over a thousand years.");
+static const u8 DexDescription_Shiftry_2[] = _(
+ "It creates terrific windstorms with\n"
+ "the fans it holds.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Taillow_1[] = _(
+ "TAILLOW is young - it has only just\n"
+ "left its nest. As a result, it sometimes\n"
+ "becomes lonesome and cries at night.");
+static const u8 DexDescription_Taillow_2[] = _(
+ "This POKéMON feeds on WURMPLE that\n"
+ "live in forests.");
+#else
+static const u8 DexDescription_Taillow_1[] = _(
+ "TAILLOW courageously stands its\n"
+ "ground against foes, however strong\n"
+ "they may be.");
+static const u8 DexDescription_Taillow_2[] = _(
+ "This gutsy POKéMON will remain defiant\n"
+ "even after a loss. On the other hand,\n"
+ "it cries loudly if it becomes hungry.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Swellow_1[] = _(
+ "SWELLOW is very conscientious about\n"
+ "the upkeep of its glossy wings.\n"
+ "Once two SWELLOW are gathered, they");
+static const u8 DexDescription_Swellow_2[] = _(
+ "diligently take care of cleaning each\n"
+ "other’s wings.");
+#else
+static const u8 DexDescription_Swellow_1[] = _(
+ "SWELLOW flies high above our heads,\n"
+ "making graceful arcs in the sky.\n"
+ "This POKéMON dives at a steep angle as");
+static const u8 DexDescription_Swellow_2[] = _(
+ "soon as it spots its prey. The hapless\n"
+ "prey is tightly grasped by SWELLOW’s\n"
+ "clawed feet, preventing escape.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Wingull_1[] = _(
+ "WINGULL rides updrafts rising from the\n"
+ "sea by extending its long and narrow\n"
+ "wings to glide.");
+static const u8 DexDescription_Wingull_2[] = _(
+ "This POKéMON’s long beak is useful for\n"
+ "catching prey.");
+#else
+static const u8 DexDescription_Wingull_1[] = _(
+ "WINGULL has the habit of carrying prey\n"
+ "and valuables in its beak and hiding\n"
+ "them in all sorts of locations.");
+static const u8 DexDescription_Wingull_2[] = _(
+ "This POKéMON rides the winds and flies\n"
+ "as if it were skating across the sky.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Pelipper_1[] = _(
+ "PELIPPER searches for food while in\n"
+ "flight by skimming the wave tops.\n"
+ "This POKéMON dips its large bill in the");
+static const u8 DexDescription_Pelipper_2[] = _(
+ "sea to scoop up food, then swallows\n"
+ "everything in one big gulp.");
+#else
+static const u8 DexDescription_Pelipper_1[] = _(
+ "PELIPPER is a flying transporter that\n"
+ "carries small POKéMON and eggs inside\n"
+ "its massive bill.");
+static const u8 DexDescription_Pelipper_2[] = _(
+ "This POKéMON builds its nest on steep\n"
+ "cliffs facing the sea.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Ralts_1[] = _(
+ "RALTS has the ability to sense the\n"
+ "emotions of people.\n"
+ "If its TRAINER is in a cheerful mood,");
+static const u8 DexDescription_Ralts_2[] = _(
+ "this POKéMON grows cheerful and joyous\n"
+ "in the same way.");
+#else
+static const u8 DexDescription_Ralts_1[] = _(
+ "RALTS senses the emotions of\n"
+ "people using the horns on its head.\n"
+ "This POKéMON rarely appears before");
+static const u8 DexDescription_Ralts_2[] = _(
+ "people. But when it does, it draws\n"
+ "closer if it senses that the person has\n"
+ "a positive disposition.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Kirlia_1[] = _(
+ "KIRLIA uses the horns on its head\n"
+ "to amplify its psychokinetic power.\n"
+ "When the POKéMON uses its power,");
+static const u8 DexDescription_Kirlia_2[] = _(
+ "the air around it becomes distorted,\n"
+ "creating mirages of nonexistent\n"
+ "scenery.");
+#else
+static const u8 DexDescription_Kirlia_1[] = _(
+ "It is said that a KIRLIA that is\n"
+ "exposed to the positive emotions of\n"
+ "its TRAINER grows beautiful.");
+static const u8 DexDescription_Kirlia_2[] = _(
+ "This POKéMON controls psychokinetic\n"
+ "powers with its highly developed brain.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Gardevoir_1[] = _(
+ "GARDEVOIR has the psychokinetic\n"
+ "power to distort the dimensions and\n"
+ "create a small black hole.");
+static const u8 DexDescription_Gardevoir_2[] = _(
+ "This POKéMON will try to protect its\n"
+ "TRAINER even at the risk of its own\n"
+ "life.");
+#else
+static const u8 DexDescription_Gardevoir_1[] = _(
+ "GARDEVOIR has the ability to read the\n"
+ "future. If it senses impending danger\n"
+ "to its TRAINER, this POKéMON is said to");
+static const u8 DexDescription_Gardevoir_2[] = _(
+ "unleash its psychokinetic energy at\n"
+ "full power.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Surskit_1[] = _(
+ "If SURSKIT senses danger, it secretes\n"
+ "a thick, sugary syrup from the tip of\n"
+ "its head.");
+static const u8 DexDescription_Surskit_2[] = _(
+ "There are some POKéMON that love\n"
+ "eating this syrup.");
+#else
+static const u8 DexDescription_Surskit_1[] = _(
+ "From the tips of its feet, SURSKIT\n"
+ "secretes an oil that enables it to walk\n"
+ "on water as if it were skating.");
+static const u8 DexDescription_Surskit_2[] = _(
+ "This POKéMON feeds on microscopic\n"
+ "organisms in ponds and lakes.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Masquerain_1[] = _(
+ "MASQUERAIN’s antennas have eyelike\n"
+ "patterns that usually give it an angry\n"
+ "look. If the “eyes” are droopy and");
+static const u8 DexDescription_Masquerain_2[] = _(
+ "appear sad, it is said to be a sign\n"
+ "that a heavy rainfall is on its way.");
+#else
+static const u8 DexDescription_Masquerain_1[] = _(
+ "MASQUERAIN intimidates enemies with\n"
+ "the eyelike patterns on its antennas.\n"
+ "This POKéMON flaps its four wings to");
+static const u8 DexDescription_Masquerain_2[] = _(
+ "freely fly in any direction - even\n"
+ "sideways and backwards - as if it were\n"
+ "a helicopter.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Shroomish_1[] = _(
+ "If SHROOMISH senses danger, it shakes\n"
+ "its body and scatters spores from the\n"
+ "top of its head.");
+static const u8 DexDescription_Shroomish_2[] = _(
+ "This POKéMON’s spores are so toxic,\n"
+ "they make trees and weeds wilt.");
+#else
+static const u8 DexDescription_Shroomish_1[] = _(
+ "SHROOMISH live in damp soil in the dark\n"
+ "depths of forests. They are often\n"
+ "found keeping still under fallen leaves.");
+static const u8 DexDescription_Shroomish_2[] = _(
+ "This POKéMON feeds on compost that\n"
+ "is made up of fallen, rotted leaves.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Breloom_1[] = _(
+ "The seeds ringing BRELOOM’s tail are\n"
+ "made of hardened toxic spores. It is\n"
+ "horrible to eat the seeds.");
+static const u8 DexDescription_Breloom_2[] = _(
+ "Just taking a bite of this POKéMON’s\n"
+ "seed will cause your stomach to rumble.");
+#else
+static const u8 DexDescription_Breloom_1[] = _(
+ "BRELOOM closes in on its foe with light\n"
+ "and sprightly footwork, then throws\n"
+ "punches with its stretchy arms.");
+static const u8 DexDescription_Breloom_2[] = _(
+ "This POKéMON’s fighting technique puts\n"
+ "boxers to shame.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Slakoth_1[] = _(
+ "SLAKOTH’s heart beats just once a\n"
+ "minute. Whatever happens, it is\n"
+ "content to loaf around motionless.");
+static const u8 DexDescription_Slakoth_2[] = _(
+ "It is rare to see this POKéMON in\n"
+ "motion.");
+#else
+static const u8 DexDescription_Slakoth_1[] = _(
+ "SLAKOTH lolls around for over twenty\n"
+ "hours every day. Because it moves so\n"
+ "little, it does not need much food.");
+static const u8 DexDescription_Slakoth_2[] = _(
+ "This POKéMON’s sole daily meal consists\n"
+ "of just three leaves.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Vigoroth_1[] = _(
+ "VIGOROTH is simply incapable of\n"
+ "remaining still. Even when it tries to\n"
+ "sleep, the blood in its veins grows");
+static const u8 DexDescription_Vigoroth_2[] = _(
+ "agitated, compelling this POKéMON to\n"
+ "run wild throughout the jungle before\n"
+ "it can settle down.");
+#else
+static const u8 DexDescription_Vigoroth_1[] = _(
+ "VIGOROTH is always itching and agitated\n"
+ "to go on a wild rampage. It simply can’t\n"
+ "tolerate sitting still for even a minute.");
+static const u8 DexDescription_Vigoroth_2[] = _(
+ "This POKéMON’s stress level rises if it\n"
+ "can’t be moving constantly.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Slaking_1[] = _(
+ "Wherever SLAKING live, rings of over\n"
+ "a yard in diameter appear in grassy\n"
+ "fields. They are made by the POKéMON");
+static const u8 DexDescription_Slaking_2[] = _(
+ "as it eats all the grass within reach\n"
+ "while lying prone on the ground.");
+#else
+static const u8 DexDescription_Slaking_1[] = _(
+ "SLAKING spends all day lying down and\n"
+ "lolling about.\n"
+ "It eats grass growing within its reach.");
+static const u8 DexDescription_Slaking_2[] = _(
+ "If it eats all the grass it can reach,\n"
+ "this POKéMON reluctantly moves to\n"
+ "another spot.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Nincada_1[] = _(
+ "NINCADA lives underground. It uses its\n"
+ "sharp claws to carve the roots of trees\n"
+ "and absorb moisture and nutrients.");
+static const u8 DexDescription_Nincada_2[] = _(
+ "This POKéMON can’t withstand bright\n"
+ "sunlight so avoids it.");
+#else
+static const u8 DexDescription_Nincada_1[] = _(
+ "NINCADA lives underground for many\n"
+ "years in complete darkness.\n"
+ "This POKéMON absorbs nutrients from");
+static const u8 DexDescription_Nincada_2[] = _(
+ "the roots of trees. It stays motionless\n"
+ "as it waits for evolution.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Ninjask_1[] = _(
+ "If NINJASK is not trained properly,\n"
+ "it will refuse to obey the TRAINER and\n"
+ "cry loudly continuously.");
+static const u8 DexDescription_Ninjask_2[] = _(
+ "Because of this quality, this POKéMON\n"
+ "is said to be one that puts the\n"
+ "TRAINER’s abilities to the test.");
+#else
+static const u8 DexDescription_Ninjask_1[] = _(
+ "NINJASK moves around at such a high\n"
+ "speed that it cannot be seen, even\n"
+ "while its crying can be clearly heard.");
+static const u8 DexDescription_Ninjask_2[] = _(
+ "For that reason, this POKéMON was long\n"
+ "believed to be invisible.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Shedinja_1[] = _(
+ "SHEDINJA is a peculiar POKéMON.\n"
+ "It seems to appear unsought in a POKé\n"
+ "BALL after a NINCADA evolves.");
+static const u8 DexDescription_Shedinja_2[] = _(
+ "This bizarre POKéMON is entirely\n"
+ "immobile - it doesn’t even breathe.");
+#else
+static const u8 DexDescription_Shedinja_1[] = _(
+ "SHEDINJA’s hard body doesn’t move -\n"
+ "not even a twitch. In fact, its body\n"
+ "appears to be merely a hollow shell.");
+static const u8 DexDescription_Shedinja_2[] = _(
+ "It is believed that this POKéMON will\n"
+ "steal the spirit of anyone peering into\n"
+ "its hollow body from its back.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Whismur_1[] = _(
+ "WHISMUR is very timid. If it starts to\n"
+ "cry loudly, it becomes startled by its\n"
+ "own crying and cries even harder.");
+static const u8 DexDescription_Whismur_2[] = _(
+ "When it finally stops crying, the\n"
+ "POKéMON goes to sleep, all tired out.");
+#else
+static const u8 DexDescription_Whismur_1[] = _(
+ "Normally, WHISMUR’s voice is very quiet -\n"
+ "it is barely audible even if one is\n"
+ "paying close attention.");
+static const u8 DexDescription_Whismur_2[] = _(
+ "However, if this POKéMON senses danger,\n"
+ "it starts crying at an earsplitting\n"
+ "volume.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Loudred_1[] = _(
+ "LOUDRED shouts while stamping its feet.\n"
+ "After it finishes shouting, this\n"
+ "POKéMON becomes incapable of hearing");
+static const u8 DexDescription_Loudred_2[] = _(
+ "anything for a while. This is considered\n"
+ "to be a weak point.");
+#else
+static const u8 DexDescription_Loudred_1[] = _(
+ "LOUDRED’s bellowing can completely\n"
+ "decimate a wood-frame house. It uses\n"
+ "its voice to punish its foes.");
+static const u8 DexDescription_Loudred_2[] = _(
+ "This POKéMON’s round ears serve as\n"
+ "loudspeakers.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Exploud_1[] = _(
+ "EXPLOUD communicates its feelings to\n"
+ "the others by emitting whistle-like\n"
+ "sounds from the tubes on its body.");
+static const u8 DexDescription_Exploud_2[] = _(
+ "This POKéMON only raises its voice when\n"
+ "it is in battle.");
+#else
+static const u8 DexDescription_Exploud_1[] = _(
+ "EXPLOUD triggers earthquakes with the\n"
+ "tremors it creates by bellowing. If this\n"
+ "POKéMON violently inhales from the");
+static const u8 DexDescription_Exploud_2[] = _(
+ "ports on its body, it’s a sign that it is\n"
+ "preparing to let loose a huge bellow.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Makuhita_1[] = _(
+ "MAKUHITA has a tireless spirit -\n"
+ "it will never give up hope. It eats a lot\n"
+ "of food, gets plenty of sleep, and it");
+static const u8 DexDescription_Makuhita_2[] = _(
+ "trains very rigorously. By living that\n"
+ "way, this POKéMON packs its body with\n"
+ "energy.");
+#else
+static const u8 DexDescription_Makuhita_1[] = _(
+ "MAKUHITA is tenacious - it will keep\n"
+ "getting up and attacking its foe\n"
+ "however many times it is knocked down.");
+static const u8 DexDescription_Makuhita_2[] = _(
+ "Every time it gets back up, this\n"
+ "POKéMON stores more energy in its body\n"
+ "for evolving.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Hariyama_1[] = _(
+ "HARIYAMA’s thick body may appear fat,\n"
+ "but it is actually a hunk of solid muscle.\n"
+ "If this POKéMON bears down and");
+static const u8 DexDescription_Hariyama_2[] = _(
+ "tightens all its muscles, its body\n"
+ "becomes as hard as a rock.");
+#else
+static const u8 DexDescription_Hariyama_1[] = _(
+ "HARIYAMA practices its straight-arm\n"
+ "slaps in any number of locations.\n"
+ "One hit of this POKéMON’s powerful,");
+static const u8 DexDescription_Hariyama_2[] = _(
+ "openhanded, straight-arm punches\n"
+ "could snap a telephone pole in two.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Azurill_1[] = _(
+ "AZURILL’s tail is large and bouncy.\n"
+ "It is packed full of the nutrients this\n"
+ "POKéMON needs to grow.");
+static const u8 DexDescription_Azurill_2[] = _(
+ "AZURILL can be seen bouncing and\n"
+ "playing on its big, rubbery tail.");
+#else
+static const u8 DexDescription_Azurill_1[] = _(
+ "AZURILL spins its tail as if it were a\n"
+ "lasso, then hurls it far. The momentum\n"
+ "of the throw sends its body flying, too.");
+static const u8 DexDescription_Azurill_2[] = _(
+ "Using this unique action, one of these\n"
+ "POKéMON managed to hurl itself a record\n"
+ "33 feet.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Nosepass_1[] = _(
+ "NOSEPASS had been said to be completely\n"
+ "unmoving, with its magnetic nose\n"
+ "pointed due north.");
+static const u8 DexDescription_Nosepass_2[] = _(
+ "However, close observation has revealed\n"
+ "that the POKéMON actually moves by a\n"
+ "little over 3/8 of an inch every year.");
+#else
+static const u8 DexDescription_Nosepass_1[] = _(
+ "NOSEPASS’s magnetic nose is always\n"
+ "pointed to the north. If two of these\n"
+ "POKéMON meet, they cannot turn");
+static const u8 DexDescription_Nosepass_2[] = _(
+ "their faces to each other when they\n"
+ "are close because their magnetic noses\n"
+ "repel one another.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Skitty_1[] = _(
+ "SKITTY is known to chase around\n"
+ "playfully after its own tail. In the wild,\n"
+ "this POKéMON lives in holes in the trees");
+static const u8 DexDescription_Skitty_2[] = _(
+ "of forests. It is very popular as a pet\n"
+ "because of its adorable looks.");
+#else
+static const u8 DexDescription_Skitty_1[] = _(
+ "SKITTY has the habit of becoming\n"
+ "fascinated by moving objects and\n"
+ "chasing them around.");
+static const u8 DexDescription_Skitty_2[] = _(
+ "This POKéMON is known to chase after\n"
+ "its own tail and become dizzy.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Delcatty_1[] = _(
+ "DELCATTY sleeps anywhere it wants\n"
+ "without keeping a permanent nest.\n"
+ "If other POKéMON approach it as it");
+static const u8 DexDescription_Delcatty_2[] = _(
+ "sleeps, this POKéMON will never fight -\n"
+ "it will just move away somewhere else.");
+#else
+static const u8 DexDescription_Delcatty_1[] = _(
+ "DELCATTY prefers to live an unfettered\n"
+ "existence in which it can do as it\n"
+ "pleases at its own pace.");
+static const u8 DexDescription_Delcatty_2[] = _(
+ "Because this POKéMON eats and sleeps\n"
+ "whenever it decides, its daily routines\n"
+ "are completely random.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Sableye_1[] = _(
+ "SABLEYE digs the ground with sharpened\n"
+ "claws to find rocks that it eats.\n"
+ "Substances in the eaten rocks");
+static const u8 DexDescription_Sableye_2[] = _(
+ "crystallize and rise up to the POKéMON’s\n"
+ "body surface.");
+#else
+static const u8 DexDescription_Sableye_1[] = _(
+ "SABLEYE lead quiet lives deep inside\n"
+ "caverns. They are feared, however,\n"
+ "because these POKéMON are thought to");
+static const u8 DexDescription_Sableye_2[] = _(
+ "steal the spirits of people when their\n"
+ "eyes burn with a sinister glow in the\n"
+ "darkness.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Mawile_1[] = _(
+ "Don’t be taken in by this POKéMON’s\n"
+ "cute face - it’s very dangerous. MAWILE\n"
+ "fools the foe into letting down its");
+static const u8 DexDescription_Mawile_2[] = _(
+ "guard, then chomps down with its\n"
+ "massive jaws. The steel jaws are really\n"
+ "horns that have been transformed.");
+#else
+#if REVISION >= 1
+static const u8 DexDescription_Mawile_1[] = _(
+ "MAWILE’s huge jaws are actually steel\n"
+ "horns that have been transformed.\n"
+ "Its docile-looking face serves to lull");
+static const u8 DexDescription_Mawile_2[] = _(
+ "its foe into letting down its guard.\n"
+ "When the foe least expects it, MAWILE\n" // Correct spelling of MAWILE
+ "chomps it with its gaping jaws.");
+#else
+static const u8 DexDescription_Mawile_1[] = _(
+ "MAWHILE’s huge jaws are actually steel\n"
+ "horns that have been transformed.\n"
+ "Its docile-looking face serves to lull");
+static const u8 DexDescription_Mawile_2[] = _(
+ "its foe into letting down its guard.\n"
+ "When the foe least expects it, MAWHILE\n"
+ "chomps it with its gaping jaws.");
+#endif
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Aron_1[] = _(
+ "ARON has a body of steel.\n"
+ "With one all-out charge, this POKéMON\n"
+ "can demolish even a heavy dump truck.");
+static const u8 DexDescription_Aron_2[] = _(
+ "The destroyed dump truck then becomes\n"
+ "a handy meal for the POKéMON.");
+#else
+static const u8 DexDescription_Aron_1[] = _(
+ "This POKéMON has a body of steel.\n"
+ "To make its body, ARON feeds on\n"
+ "iron ore that it digs from mountains.");
+static const u8 DexDescription_Aron_2[] = _(
+ "Occasionally, it causes major trouble by\n"
+ "eating bridges and rails.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Lairon_1[] = _(
+ "LAIRON feeds on iron contained in\n"
+ "rocks and water. It makes its nest on\n"
+ "mountains where iron ore is buried.");
+static const u8 DexDescription_Lairon_2[] = _(
+ "As a result, the POKéMON often clashes\n"
+ "with humans mining the iron ore.");
+#else
+static const u8 DexDescription_Lairon_1[] = _(
+ "LAIRON tempers its steel body by\n"
+ "drinking highly nutritious mineral\n"
+ "springwater until it is bloated.");
+static const u8 DexDescription_Lairon_2[] = _(
+ "This POKéMON makes its nest close to\n"
+ "springs of delicious water.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Aggron_1[] = _(
+ "AGGRON is surprisingly protective\n"
+ "of its environment. If its mountain\n"
+ "is ravaged by a landslide or a fire, this");
+static const u8 DexDescription_Aggron_2[] = _(
+ "POKéMON will haul topsoil to the area,\n"
+ "plant trees, and beautifully restore its\n"
+ "own territory.");
+#else
+static const u8 DexDescription_Aggron_1[] = _(
+ "AGGRON claims an entire mountain as its\n"
+ "own territory. It mercilessly beats up\n"
+ "anything that violates its environment.");
+static const u8 DexDescription_Aggron_2[] = _(
+ "This POKéMON vigilantly patrols its\n"
+ "territory at all times.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Meditite_1[] = _(
+ "MEDITITE heightens its inner energy\n"
+ "through meditation. It survives on\n"
+ "just one berry a day.");
+static const u8 DexDescription_Meditite_2[] = _(
+ "Minimal eating is another aspect of\n"
+ "this POKéMON’s training.");
+#else
+static const u8 DexDescription_Meditite_1[] = _(
+ "MEDITITE undertakes rigorous mental\n"
+ "training deep in the mountains.\n"
+ "However, whenever it meditates, this");
+static const u8 DexDescription_Meditite_2[] = _(
+ "POKéMON always loses its concentration\n"
+ "and focus. As a result, its training\n"
+ "never ends.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Medicham_1[] = _(
+ "Through the power of meditation,\n"
+ "MEDICHAM developed its sixth sense.\n"
+ "It gained the ability to use");
+static const u8 DexDescription_Medicham_2[] = _(
+ "psychokinetic powers. This POKéMON is\n"
+ "known to meditate for a whole month\n"
+ "without eating.");
+#else
+static const u8 DexDescription_Medicham_1[] = _(
+ "It is said that through meditation,\n"
+ "MEDICHAM heightens energy inside\n"
+ "its body and sharpens its sixth sense.");
+static const u8 DexDescription_Medicham_2[] = _(
+ "This POKéMON hides its presence by\n"
+ "merging itself with fields and\n"
+ "mountains.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Electrike_1[] = _(
+ "ELECTRIKE runs faster than the human\n"
+ "eye can follow. The friction from\n"
+ "running is converted into electricity,");
+static const u8 DexDescription_Electrike_2[] = _(
+ "which is then stored in this POKéMON’s\n"
+ "fur.");
+#else
+static const u8 DexDescription_Electrike_1[] = _(
+ "ELECTRIKE stores electricity in its\n"
+ "long body hair. This POKéMON stimulates\n"
+ "its leg muscles with electric charges.");
+static const u8 DexDescription_Electrike_2[] = _(
+ "These jolts of power give its legs\n"
+ "explosive acceleration performance.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Manectric_1[] = _(
+ "MANECTRIC discharges strong\n"
+ "electricity from its mane. The mane is\n"
+ "used for collecting electricity in the");
+static const u8 DexDescription_Manectric_2[] = _(
+ "atmosphere. This POKéMON creates\n"
+ "thunderclouds above its head.");
+#else
+static const u8 DexDescription_Manectric_1[] = _(
+ "MANECTRIC is constantly discharging\n"
+ "electricity from its mane. The sparks\n"
+ "sometimes ignite forest fires.");
+static const u8 DexDescription_Manectric_2[] = _(
+ "When it enters a battle, this POKéMON\n"
+ "creates thunderclouds.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Plusle_1[] = _(
+ "When PLUSLE is cheering on its partner,\n"
+ "it flashes with electric sparks from all\n"
+ "over its body.");
+static const u8 DexDescription_Plusle_2[] = _(
+ "If its partner loses, this POKéMON cries\n"
+ "loudly.");
+#else
+static const u8 DexDescription_Plusle_1[] = _(
+ "PLUSLE always acts as a cheerleader\n"
+ "for its partners. Whenever a teammate\n"
+ "puts out a good effort in battle, this");
+static const u8 DexDescription_Plusle_2[] = _(
+ "POKéMON shorts out its body to create\n"
+ "the crackling noises of sparks to show\n"
+ "its joy.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Minun_1[] = _(
+ "MINUN loves to cheer on its partner in\n"
+ "battle. It gives off sparks from its\n"
+ "body while it is doing so.");
+static const u8 DexDescription_Minun_2[] = _(
+ "If its partner is in trouble, this\n"
+ "POKéMON gives off increasing amounts\n"
+ "of sparks.");
+#else
+static const u8 DexDescription_Minun_1[] = _(
+ "MINUN is more concerned about cheering\n"
+ "on its partners than its own safety.\n"
+ "It shorts out the electricity in its");
+static const u8 DexDescription_Minun_2[] = _(
+ "body to create brilliant showers of\n"
+ "sparks to cheer on its teammates.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Volbeat_1[] = _(
+ "VOLBEAT’s tail glows like a lightbulb.\n"
+ "With other VOLBEAT, it uses its tail to\n"
+ "draw geometric shapes in the night sky.");
+static const u8 DexDescription_Volbeat_2[] = _(
+ "This POKéMON loves the sweet aroma\n"
+ "given off by ILLUMISE.");
+#else
+static const u8 DexDescription_Volbeat_1[] = _(
+ "With the arrival of night, VOLBEAT emits\n"
+ "light from its tail. It communicates with\n"
+ "others by adjusting the intensity and");
+static const u8 DexDescription_Volbeat_2[] = _(
+ "flashing of its light.\n"
+ "This POKéMON is attracted by the sweet\n"
+ "aroma of ILLUMISE.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Illumise_1[] = _(
+ "ILLUMISE leads a flight of illuminated\n"
+ "VOLBEAT to draw signs in the night sky.\n"
+ "This POKéMON is said to earn greater");
+static const u8 DexDescription_Illumise_2[] = _(
+ "respect from its peers by composing\n"
+ "more complex designs in the sky.");
+#else
+static const u8 DexDescription_Illumise_1[] = _(
+ "ILLUMISE attracts a swarm of VOLBEAT\n"
+ "using a sweet fragrance. Once the\n"
+ "VOLBEAT have gathered, this POKéMON");
+static const u8 DexDescription_Illumise_2[] = _(
+ "leads the lit-up swarm in drawing\n"
+ "geometric designs on the canvas of\n"
+ "the night sky.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Roselia_1[] = _(
+ "On extremely rare occasions, a ROSELIA\n"
+ "is said to appear with its flowers in\n"
+ "unusual colors.");
+static const u8 DexDescription_Roselia_2[] = _(
+ "The thorns on this POKéMON’s head\n"
+ "contain a vicious poison.");
+#else
+static const u8 DexDescription_Roselia_1[] = _(
+ "ROSELIA shoots sharp thorns as\n"
+ "projectiles at any opponent that tries\n"
+ "to steal the flowers on its arms.");
+static const u8 DexDescription_Roselia_2[] = _(
+ "The aroma of this POKéMON brings\n"
+ "serenity to living things.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Gulpin_1[] = _(
+ "Most of GULPIN’s body is made up of its\n"
+ "stomach - its heart and brain are very\n"
+ "small in comparison.");
+static const u8 DexDescription_Gulpin_2[] = _(
+ "This POKéMON’s stomach contains\n"
+ "special enzymes that dissolve anything.");
+#else
+static const u8 DexDescription_Gulpin_1[] = _(
+ "Virtually all of GULPIN’s body is its\n"
+ "stomach. As a result, it can swallow\n"
+ "something its own size.");
+static const u8 DexDescription_Gulpin_2[] = _(
+ "This POKéMON’s stomach contains a\n"
+ "special fluid that digests anything.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Swalot_1[] = _(
+ "SWALOT has no teeth, so what it\n"
+ "eats, it swallows whole, no matter what.\n"
+ "Its cavernous mouth yawns widely.");
+static const u8 DexDescription_Swalot_2[] = _(
+ "An automobile tire could easily fit\n"
+ "inside this POKéMON’s mouth.");
+#else
+static const u8 DexDescription_Swalot_1[] = _(
+ "When SWALOT spots prey, it spurts out\n"
+ "a hideously toxic fluid from its pores\n"
+ "and sprays the target.");
+static const u8 DexDescription_Swalot_2[] = _(
+ "Once the prey has weakened, this\n"
+ "POKéMON gulps it down whole with its\n"
+ "cavernous mouth.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Carvanha_1[] = _(
+ "If anything invades CARVANHA’s\n"
+ "territory, it will swarm and tear at the\n"
+ "intruder with its pointed fangs.");
+static const u8 DexDescription_Carvanha_2[] = _(
+ "On its own, however, this POKéMON turns\n"
+ "suddenly timid.");
+#else
+static const u8 DexDescription_Carvanha_1[] = _(
+ "CARVANHA’s strongly developed jaws\n"
+ "and its sharply pointed fangs pack the\n"
+ "destructive power to rip out boat hulls.");
+static const u8 DexDescription_Carvanha_2[] = _(
+ "Many boats have been attacked and\n"
+ "sunk by this POKéMON.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Sharpedo_1[] = _(
+ "SHARPEDO can swim at speeds of up to\n"
+ "75 mph by jetting seawater out of its\n"
+ "backside.");
+static const u8 DexDescription_Sharpedo_2[] = _(
+ "This POKéMON’s drawback is its inability\n"
+ "to swim long distances.");
+#else
+static const u8 DexDescription_Sharpedo_1[] = _(
+ "Nicknamed “the bully of the sea,”\n"
+ "SHARPEDO is widely feared.\n"
+ "Its cruel fangs grow back immediately");
+static const u8 DexDescription_Sharpedo_2[] = _(
+ "if they snap off.\n"
+ "Just one of these POKéMON can\n"
+ "thoroughly tear apart a supertanker.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Wailmer_1[] = _(
+ "WAILMER can store water inside its body\n"
+ "to transform itself into a ball for\n"
+ "bouncing around on the ground.");
+static const u8 DexDescription_Wailmer_2[] = _(
+ "By filling itself up with more water, this\n"
+ "POKéMON can elevate the height of its\n"
+ "bounces.");
+#else
+static const u8 DexDescription_Wailmer_1[] = _(
+ "WAILMER’s nostrils are located above\n"
+ "its eyes. This playful POKéMON loves\n"
+ "to startle people by forcefully snorting");
+static const u8 DexDescription_Wailmer_2[] = _(
+ "out seawater it stores inside its body\n"
+ "out of its nostrils.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Wailord_1[] = _(
+ "When chasing prey, WAILORD herds them\n"
+ "by leaping out of the water and making\n"
+ "a humongous splash.");
+static const u8 DexDescription_Wailord_2[] = _(
+ "It is breathtaking to see this POKéMON\n"
+ "leaping out of the sea with others in\n"
+ "its pod.");
+#else
+static const u8 DexDescription_Wailord_1[] = _(
+ "WAILORD is the largest of all identified\n"
+ "POKéMON up to now.\n"
+ "This giant POKéMON swims languorously");
+static const u8 DexDescription_Wailord_2[] = _(
+ "in the vast open sea, eating massive\n"
+ "amounts of food at once with its\n"
+ "enormous mouth.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Numel_1[] = _(
+ "NUMEL stores magma of almost 2,200\n"
+ "degrees F within its body. If it gets\n"
+ "wet, the magma cools and hardens.");
+static const u8 DexDescription_Numel_2[] = _(
+ "In that event, the POKéMON’s body\n"
+ "grows heavy and its movements become\n"
+ "sluggish.");
+#else
+static const u8 DexDescription_Numel_1[] = _(
+ "NUMEL is extremely dull witted - it\n"
+ "doesn’t notice being hit. However, it\n"
+ "can’t stand hunger for even a second.");
+static const u8 DexDescription_Numel_2[] = _(
+ "This POKéMON’s body is a seething\n"
+ "cauldron of boiling magma.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Camerupt_1[] = _(
+ "The humps on CAMERUPT’s back are\n"
+ "formed by a transformation of its\n"
+ "bones. They sometimes blast out molten");
+static const u8 DexDescription_Camerupt_2[] = _(
+ "magma. This POKéMON apparently erupts\n"
+ "often when it is enraged.");
+#else
+static const u8 DexDescription_Camerupt_1[] = _(
+ "CAMERUPT has a volcano inside its body.\n"
+ "Magma of 18,000 degrees F courses\n"
+ "through its body.");
+static const u8 DexDescription_Camerupt_2[] = _(
+ "Occasionally, the humps on this\n"
+ "POKéMON’s back erupt, spewing the\n"
+ "superheated magma.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Torkoal_1[] = _(
+ "TORKOAL generates energy by burning\n"
+ "coal. It grows weaker as the fire\n"
+ "dies down.");
+static const u8 DexDescription_Torkoal_2[] = _(
+ "When it is preparing for battle, this\n"
+ "POKéMON burns more coal.");
+#else
+static const u8 DexDescription_Torkoal_1[] = _(
+ "TORKOAL digs through mountains in\n"
+ "search of coal. If it finds some, it fills\n"
+ "hollow spaces on its shell with the coal");
+static const u8 DexDescription_Torkoal_2[] = _(
+ "and burns it.\n"
+ "If it is attacked, this POKéMON spouts\n"
+ "thick black smoke to beat a retreat.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Spoink_1[] = _(
+ "SPOINK keeps a pearl on top of its head.\n"
+ "The pearl functions to amplify this\n"
+ "POKéMON’s psychokinetic powers.");
+static const u8 DexDescription_Spoink_2[] = _(
+ "It is therefore on a constant search\n"
+ "for a bigger pearl.");
+#else
+static const u8 DexDescription_Spoink_1[] = _(
+ "SPOINK bounces around on its tail.\n"
+ "The shock of its bouncing makes its\n"
+ "heart pump. As a result, this POKéMON");
+static const u8 DexDescription_Spoink_2[] = _(
+ "cannot afford to stop bouncing - if it\n"
+ "stops, its heart will stop.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Grumpig_1[] = _(
+ "GRUMPIG uses the black pearls on its\n"
+ "body to wield its fantastic powers.\n"
+ "When it is doing so, it dances bizarrely.");
+static const u8 DexDescription_Grumpig_2[] = _(
+ "This POKéMON’s black pearls are valuable\n"
+ "as works of art.");
+#else
+static const u8 DexDescription_Grumpig_1[] = _(
+ "GRUMPIG uses the black pearls on its\n"
+ "body to amplify its psychic power waves\n"
+ "for gaining total control over its foe.");
+static const u8 DexDescription_Grumpig_2[] = _(
+ "When this POKéMON uses its special\n"
+ "power, its snorting breath grows\n"
+ "labored.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Spinda_1[] = _(
+ "No two SPINDA are said to have\n"
+ "identical spot patterns on their hides.\n"
+ "This POKéMON moves in a curious manner");
+static const u8 DexDescription_Spinda_2[] = _(
+ "as if it is stumbling in dizziness.\n"
+ "Its lurching movements can cause the\n"
+ "opponent to become confused.");
+#else
+static const u8 DexDescription_Spinda_1[] = _(
+ "All the SPINDA that exist in the\n"
+ "world are said to have utterly unique\n"
+ "spot patterns.");
+static const u8 DexDescription_Spinda_2[] = _(
+ "The shaky, tottering steps of this\n"
+ "POKéMON give it the appearance of\n"
+ "dancing.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Trapinch_1[] = _(
+ "TRAPINCH is a patient hunter. It digs\n"
+ "an inescapable pit in a desert and waits\n"
+ "for its prey to come tumbling down.");
+static const u8 DexDescription_Trapinch_2[] = _(
+ "This POKéMON can go a whole week\n"
+ "without access to any water.");
+#else
+static const u8 DexDescription_Trapinch_1[] = _(
+ "TRAPINCH’s nest is a sloped, bowl-like\n"
+ "pit dug in sand. This POKéMON patiently\n"
+ "waits for prey to tumble down the pit.");
+static const u8 DexDescription_Trapinch_2[] = _(
+ "Its giant jaws have enough strength\n"
+ "to crush even boulders.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Vibrava_1[] = _(
+ "VIBRAVA’s wings have not yet\n"
+ "completed the process of growing.\n"
+ "Rather than flying long distances,");
+static const u8 DexDescription_Vibrava_2[] = _(
+ "they are more useful for generating\n"
+ "ultrasonic waves by vibrating.");
+#else
+static const u8 DexDescription_Vibrava_1[] = _(
+ "To make prey faint, VIBRAVA generates\n"
+ "ultrasonic waves by vigorously making\n"
+ "its two wings vibrate.");
+static const u8 DexDescription_Vibrava_2[] = _(
+ "This POKéMON’s ultrasonic waves are so\n"
+ "powerful, they can bring on headaches\n"
+ "in people.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Flygon_1[] = _(
+ "FLYGON whips up a sandstorm by\n"
+ "flapping its wings. The wings create a\n"
+ "series of notes that sound like singing.");
+static const u8 DexDescription_Flygon_2[] = _(
+ "Because the “singing” is the only thing\n"
+ "that can be heard in a sandstorm, this\n"
+ "POKéMON is said to be the desert spirit.");
+#else
+static const u8 DexDescription_Flygon_1[] = _(
+ "FLYGON is nicknamed “the elemental \n"
+ "spirit of the desert.” Because its\n"
+ "flapping wings whip up a cloud of sand,");
+static const u8 DexDescription_Flygon_2[] = _(
+ "this POKéMON is always enveloped in a\n"
+ "sandstorm while flying.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Cacnea_1[] = _(
+ "The more arid and harsh the\n"
+ "environment, the more pretty and\n"
+ "fragrant a flower CACNEA grows.");
+static const u8 DexDescription_Cacnea_2[] = _(
+ "This POKéMON battles by wildly swinging\n"
+ "its thorny arms.");
+#else
+static const u8 DexDescription_Cacnea_1[] = _(
+ "CACNEA lives in arid locations such\n"
+ "as deserts. It releases a strong aroma\n"
+ "from its flower to attract prey.");
+static const u8 DexDescription_Cacnea_2[] = _(
+ "When prey comes near, this POKéMON\n"
+ "shoots sharp thorns from its body to\n"
+ "bring the victim down.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Cacturne_1[] = _(
+ "If a traveler is going through a desert\n"
+ "in the thick of night, CACTURNE\n"
+ "will follow in a ragtag group.");
+static const u8 DexDescription_Cacturne_2[] = _(
+ "The POKéMON are biding their time,\n"
+ "waiting for the traveler to tire and\n"
+ "become incapable of moving.");
+#else
+static const u8 DexDescription_Cacturne_1[] = _(
+ "During the daytime, CACTURNE remains\n"
+ "unmoving so that it does not lose any\n"
+ "moisture to the harsh desert sun.");
+static const u8 DexDescription_Cacturne_2[] = _(
+ "This POKéMON becomes active at night\n"
+ "when the temperature drops.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Swablu_1[] = _(
+ "SWABLU loves to make things clean.\n"
+ "If it spots something dirty, it will wipe\n"
+ "and polish it with its cottony wings.");
+static const u8 DexDescription_Swablu_2[] = _(
+ "If its wings become dirty, this POKéMON\n"
+ "finds a stream and showers itself.");
+#else
+static const u8 DexDescription_Swablu_1[] = _(
+ "SWABLU has light and fluffy wings that\n"
+ "are like cottony clouds. This POKéMON\n"
+ "is not frightened of people.");
+static const u8 DexDescription_Swablu_2[] = _(
+ "It lands on the heads of people and\n"
+ "sits there like a cotton-fluff hat.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Altaria_1[] = _(
+ "ALTARIA sings in a gorgeous soprano.\n"
+ "Its wings are like cotton clouds.\n"
+ "This POKéMON catches updrafts with its");
+static const u8 DexDescription_Altaria_2[] = _(
+ "buoyant wings and soars way up into\n"
+ "the wild blue yonder.");
+#else
+static const u8 DexDescription_Altaria_1[] = _(
+ "ALTARIA dances and wheels through the\n"
+ "sky among billowing, cotton-like clouds.\n"
+ "By singing melodies in its crystal-clear");
+static const u8 DexDescription_Altaria_2[] = _(
+ "voice, this POKéMON makes its listeners\n"
+ "experience dreamy wonderment.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Zangoose_1[] = _(
+ "ZANGOOSE usually stays on all fours,\n"
+ "but when angered, it gets up on its\n"
+ "hind legs and extends its claws.");
+static const u8 DexDescription_Zangoose_2[] = _(
+ "This POKéMON shares a bitter rivalry\n"
+ "with SEVIPER that dates back over\n"
+ "generations.");
+#else
+static const u8 DexDescription_Zangoose_1[] = _(
+ "Memories of battling its arch-rival\n"
+ "SEVIPER are etched into every cell of\n"
+ "ZANGOOSE’s body.");
+static const u8 DexDescription_Zangoose_2[] = _(
+ "This POKéMON adroitly dodges attacks\n"
+ "with incredible agility.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Seviper_1[] = _(
+ "SEVIPER’s swordlike tail serves two\n"
+ "purposes - it slashes foes and douses\n"
+ "them with secreted poison.");
+static const u8 DexDescription_Seviper_2[] = _(
+ "This POKéMON will not give up its long-\n"
+ "running blood feud with ZANGOOSE.");
+#else
+static const u8 DexDescription_Seviper_1[] = _(
+ "SEVIPER shares a generations-long\n"
+ "feud with ZANGOOSE. The scars on its\n"
+ "body are evidence of vicious battles.");
+static const u8 DexDescription_Seviper_2[] = _(
+ "This POKéMON attacks using its sword-\n"
+ "edged tail.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Lunatone_1[] = _(
+ "LUNATONE becomes active around the\n"
+ "time of the full moon. Instead of\n"
+ "walking, it moves by floating in midair.");
+static const u8 DexDescription_Lunatone_2[] = _(
+ "The POKéMON’s intimidating red eyes\n"
+ "cause all those who see it to become\n"
+ "transfixed with fear.");
+#else
+static const u8 DexDescription_Lunatone_1[] = _(
+ "LUNATONE was discovered at a location\n"
+ "where a meteorite fell. As a result, some\n"
+ "people theorize that this POKéMON");
+static const u8 DexDescription_Lunatone_2[] = _(
+ "came from space. However, no one has\n"
+ "been able to prove this theory so far.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Solrock_1[] = _(
+ "Sunlight is the source of SOLROCK’s\n"
+ "power. It is said to possess the ability\n"
+ "to read the emotions of others.");
+static const u8 DexDescription_Solrock_2[] = _(
+ "This POKéMON gives off intense heat\n"
+ "while rotating its body.");
+#else
+static const u8 DexDescription_Solrock_1[] = _(
+ "SOLROCK is a new species of POKéMON\n"
+ "that is said to have fallen from space.\n"
+ "It floats in air and moves silently.");
+static const u8 DexDescription_Solrock_2[] = _(
+ "In battle, this POKéMON releases\n"
+ "intensely bright light.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Barboach_1[] = _(
+ "BARBOACH’s body is covered with a\n"
+ "slimy film. If a foe grabs it, this\n"
+ "POKéMON just slips out of the enemy’s");
+static const u8 DexDescription_Barboach_2[] = _(
+ "grip.\n"
+ "This POKéMON grows weak if the slimy\n"
+ "coating dries up.");
+#else
+static const u8 DexDescription_Barboach_1[] = _(
+ "BARBOACH’s sensitive whiskers serve\n"
+ "as a superb radar system.\n"
+ "This POKéMON hides in mud, leaving only");
+static const u8 DexDescription_Barboach_2[] = _(
+ "its two whiskers exposed while it waits\n"
+ "for prey to come along.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Whiscash_1[] = _(
+ "If WHISCASH goes on a wild rampage,\n"
+ "it sets off a quake-like tremor with a\n"
+ "radius of over three miles.");
+static const u8 DexDescription_Whiscash_2[] = _(
+ "This POKéMON has the ability to predict\n"
+ "real earthquakes.");
+#else
+static const u8 DexDescription_Whiscash_1[] = _(
+ "WHISCASH is extremely territorial.\n"
+ "Just one of these POKéMON will claim a\n"
+ "large pond as its exclusive territory.");
+static const u8 DexDescription_Whiscash_2[] = _(
+ "If a foe approaches it, it thrashes\n"
+ "about and triggers a massive\n"
+ "earthquake.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Corphish_1[] = _(
+ "CORPHISH catches prey with its sharp\n"
+ "claws. It has no likes or dislikes when it\n"
+ "comes to food - it will eat anything.");
+static const u8 DexDescription_Corphish_2[] = _(
+ "This POKéMON has no trouble living in\n"
+ "filthy water.");
+#else
+static const u8 DexDescription_Corphish_1[] = _(
+ "CORPHISH were originally foreign\n"
+ "POKéMON that were imported as pets.\n"
+ "They eventually turned up in the wild.");
+static const u8 DexDescription_Corphish_2[] = _(
+ "This POKéMON is very hardy and has\n"
+ "greatly increased its population.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Crawdaunt_1[] = _(
+ "CRAWDAUNT molts (sheds) its shell\n"
+ "regularly. Immediately after molting,\n"
+ "its shell is soft and tender.");
+static const u8 DexDescription_Crawdaunt_2[] = _(
+ "Until the shell hardens, this POKéMON\n"
+ "hides in its streambed burrow to avoid\n"
+ "attack from its foes.");
+#else
+static const u8 DexDescription_Crawdaunt_1[] = _(
+ "CRAWDAUNT has an extremely violent\n"
+ "nature that compels it to challenge\n"
+ "other living things to battle.");
+static const u8 DexDescription_Crawdaunt_2[] = _(
+ "Other life-forms refuse to live in\n"
+ "ponds inhabited by this POKéMON,\n"
+ "making them desolate places.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Baltoy_1[] = _(
+ "As soon as it spots others of its kind,\n"
+ "BALTOY congregates with them and\n"
+ "then begins crying noisily in unison.");
+static const u8 DexDescription_Baltoy_2[] = _(
+ "This POKéMON sleeps while cleverly\n"
+ "balancing itself on its one foot.");
+#else
+static const u8 DexDescription_Baltoy_1[] = _(
+ "BALTOY moves while spinning around on\n"
+ "its one foot. Primitive wall paintings\n"
+ "depicting this POKéMON living among");
+static const u8 DexDescription_Baltoy_2[] = _(
+ "people were discovered in some ancient\n"
+ "ruins.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Claydol_1[] = _(
+ "CLAYDOL is an enigma that appeared\n"
+ "from a clay statue made by an ancient\n"
+ "civilization dating back 20,000 years.");
+static const u8 DexDescription_Claydol_2[] = _(
+ "This POKéMON shoots beams from both\n"
+ "its hands.");
+#else
+static const u8 DexDescription_Claydol_1[] = _(
+ "CLAYDOL are said to be dolls of mud made\n"
+ "by primitive humans and brought to life\n"
+ "by exposure to a mysterious ray.");
+static const u8 DexDescription_Claydol_2[] = _(
+ "This POKéMON moves about while\n"
+ "levitating.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Lileep_1[] = _(
+ "LILEEP is an ancient POKéMON that was\n"
+ "regenerated from a fossil. It remains\n"
+ "permanently anchored to a rock.");
+static const u8 DexDescription_Lileep_2[] = _(
+ "From its immobile perch, this POKéMON\n"
+ "intently scans for prey with its two\n"
+ "eyes.");
+#else
+static const u8 DexDescription_Lileep_1[] = _(
+ "LILEEP became extinct approximately\n"
+ "a hundred million years ago.\n"
+ "This ancient POKéMON attaches itself");
+static const u8 DexDescription_Lileep_2[] = _(
+ "to a rock on the seafloor and catches\n"
+ "approaching prey using tentacles \n"
+ "shaped like flower petals.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Cradily_1[] = _(
+ "CRADILY’s body serves as an anchor,\n"
+ "preventing it from being washed away in\n"
+ "rough seas.");
+static const u8 DexDescription_Cradily_2[] = _(
+ "This POKéMON secretes a strong\n"
+ "digestive fluid from its tentacles.");
+#else
+static const u8 DexDescription_Cradily_1[] = _(
+ "CRADILY roams around the ocean floor\n"
+ "in search of food. This POKéMON freely\n"
+ "extends its tree trunk-like neck and");
+static const u8 DexDescription_Cradily_2[] = _(
+ "captures unwary prey using its eight\n"
+ "tentacles.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Anorith_1[] = _(
+ "ANORITH is said to be a type of \n"
+ "POKéMON predecessor, with eight wings\n"
+ "at the sides of its body.");
+static const u8 DexDescription_Anorith_2[] = _(
+ "This POKéMON swam in the primordial sea\n"
+ "by undulating these eight wings.");
+#else
+static const u8 DexDescription_Anorith_1[] = _(
+ "ANORITH was regenerated from a\n"
+ "prehistoric fossil. This primitive\n"
+ "POKéMON once lived in warm seas.");
+static const u8 DexDescription_Anorith_2[] = _(
+ "It grips its prey firmly between its\n"
+ "two large claws.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Armaldo_1[] = _(
+ "ARMALDO is a POKéMON species that\n"
+ "became extinct in prehistoric times.\n"
+ "This POKéMON is said to have walked on");
+static const u8 DexDescription_Armaldo_2[] = _(
+ "its hind legs, which would have been\n"
+ "more convenient for life on land.");
+#else
+static const u8 DexDescription_Armaldo_1[] = _(
+ "ARMALDO’s tough armor makes all attacks\n"
+ "bounce off. This POKéMON’s two\n"
+ "enormous claws can be freely extended");
+static const u8 DexDescription_Armaldo_2[] = _(
+ "or contracted. They have the power to\n"
+ "punch right through a steel slab.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Feebas_1[] = _(
+ "While FEEBAS’s body is in tatters,\n"
+ "it has a hardy and tenacious life force\n"
+ "that enables it to live anywhere.");
+static const u8 DexDescription_Feebas_2[] = _(
+ "However, this POKéMON is also slow and\n"
+ "dimwitted, making it an easy catch.");
+#else
+static const u8 DexDescription_Feebas_1[] = _(
+ "FEEBAS’s fins are ragged and\n"
+ "tattered from the start of its life.\n"
+ "Because of its shoddy appearance, this");
+static const u8 DexDescription_Feebas_2[] = _(
+ "POKéMON is largely ignored.\n"
+ "It is capable of living in both the sea\n"
+ "and in rivers.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Milotic_1[] = _(
+ "MILOTIC live at the bottom of large\n"
+ "lakes. When this POKéMON’s body glows a\n"
+ "vivid pink, it releases a pulsing wave of");
+static const u8 DexDescription_Milotic_2[] = _(
+ "energy that brings soothing calm to\n"
+ "restless spirits.");
+#else
+static const u8 DexDescription_Milotic_1[] = _(
+ "MILOTIC is said to be the most\n"
+ "beautiful of all the POKéMON.\n"
+ "It has the power to becalm such");
+static const u8 DexDescription_Milotic_2[] = _(
+ "emotions as anger and hostility to quell\n"
+ "bitter feuding.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Castform_1[] = _(
+ "CASTFORM borrows the power of nature\n"
+ "to transform itself into the guises of\n"
+ "the sun, rain clouds, and snow clouds.");
+static const u8 DexDescription_Castform_2[] = _(
+ "This POKéMON’s feelings change with the\n"
+ "weather.");
+#else
+static const u8 DexDescription_Castform_1[] = _(
+ "CASTFORM’s appearance changes with\n"
+ "the weather.\n"
+ "This POKéMON gained the ability to use");
+static const u8 DexDescription_Castform_2[] = _(
+ "the vast power of nature to protect\n"
+ "its tiny body.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Kecleon_1[] = _(
+ "KECLEON alters its body coloration to\n"
+ "blend in with its surroundings, allowing\n"
+ "it to sneak up on its prey unnoticed.");
+static const u8 DexDescription_Kecleon_2[] = _(
+ "Then it lashes out with its long,\n"
+ "stretchy tongue to instantly ensnare\n"
+ "the unsuspecting target.");
+#else
+static const u8 DexDescription_Kecleon_1[] = _(
+ "KECLEON is capable of changing its body\n"
+ "colors at will to blend in with its\n"
+ "surroundings.");
+static const u8 DexDescription_Kecleon_2[] = _(
+ "There is one exception - this POKéMON\n"
+ "can’t change the zigzag pattern on its\n"
+ "belly.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Shuppet_1[] = _(
+ "SHUPPET grows by feeding on dark\n"
+ "emotions, such as vengefulness and \n"
+ "envy, in the hearts of people.");
+static const u8 DexDescription_Shuppet_2[] = _(
+ "It roams through cities in search of\n"
+ "grudges that taint people.");
+#else
+static const u8 DexDescription_Shuppet_1[] = _(
+ "SHUPPET is attracted by feelings\n"
+ "of jealousy and vindictiveness.\n"
+ "If someone develops strong feelings of");
+static const u8 DexDescription_Shuppet_2[] = _(
+ "vengeance, this POKéMON will appear\n"
+ "in a swarm and line up beneath the eaves\n"
+ "of that person’s home.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Banette_1[] = _(
+ "A cursed energy permeated the stuffing\n"
+ "of a discarded and forgotten plush doll,\n"
+ "giving it new life as BANETTE.");
+static const u8 DexDescription_Banette_2[] = _(
+ "The POKéMON’s energy would escape if it\n"
+ "were to ever open its mouth.");
+#else
+static const u8 DexDescription_Banette_1[] = _(
+ "BANETTE generates energy for laying\n"
+ "strong curses by sticking pins into its\n"
+ "own body.");
+static const u8 DexDescription_Banette_2[] = _(
+ "This POKéMON was originally a pitiful\n"
+ "plush doll that was thrown away.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Duskull_1[] = _(
+ "DUSKULL wanders lost among the deep\n"
+ "darkness of midnight. There is an oft-\n"
+ "told admonishment given to misbehaving");
+static const u8 DexDescription_Duskull_2[] = _(
+ "children that this POKéMON will spirit\n"
+ "away bad children who earn scoldings\n"
+ "from their mothers.");
+#else
+static const u8 DexDescription_Duskull_1[] = _(
+ "DUSKULL can pass through any wall no\n"
+ "matter how thick it may be.\n"
+ "Once this POKéMON chooses a target,");
+static const u8 DexDescription_Duskull_2[] = _(
+ "it will doggedly pursue the intended\n"
+ "victim until the break of dawn.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Dusclops_1[] = _(
+ "DUSCLOPS absorbs anything, however\n"
+ "large the object may be. This POKéMON\n"
+ "hypnotizes its foe by waving its hands");
+static const u8 DexDescription_Dusclops_2[] = _(
+ "in a macabre manner and by bringing its\n"
+ "single eye to bear. The hypnotized foe\n"
+ "is made to do DUSCLOPS’s bidding.");
+#else
+static const u8 DexDescription_Dusclops_1[] = _(
+ "DUSCLOPS’s body is completely hollow -\n"
+ "there is nothing at all inside.\n"
+ "It is said that its body is like a black");
+static const u8 DexDescription_Dusclops_2[] = _(
+ "hole. This POKéMON will absorb anything\n"
+ "into its body, but nothing will ever come\n"
+ "back out.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Tropius_1[] = _(
+ "Children of the southern tropics eat\n"
+ "as snacks the fruit that grows in\n"
+ "bunches around the neck of TROPIUS.");
+static const u8 DexDescription_Tropius_2[] = _(
+ "This POKéMON flies by flapping the\n"
+ "leaves on its back as if they were\n"
+ "wings.");
+#else
+static const u8 DexDescription_Tropius_1[] = _(
+ "The bunches of fruit around TROPIUS’s\n"
+ "neck are very popular with children.\n"
+ "This POKéMON loves fruit, and eats it");
+static const u8 DexDescription_Tropius_2[] = _(
+ "continuously. Apparently, its love for\n"
+ "fruit resulted in its own outgrowth\n"
+ "of fruit.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Chimecho_1[] = _(
+ "In high winds, CHIMECHO cries as it\n"
+ "hangs from a tree branch or the eaves\n"
+ "of a building using a suction cup on its");
+static const u8 DexDescription_Chimecho_2[] = _(
+ "head.\n"
+ "This POKéMON plucks berries with its\n"
+ "long tail and eats them.");
+#else
+static const u8 DexDescription_Chimecho_1[] = _(
+ "CHIMECHO makes its cries echo\n"
+ "inside its hollow body. When this\n"
+ "POKéMON becomes enraged, its cries");
+static const u8 DexDescription_Chimecho_2[] = _(
+ "result in ultrasonic waves that have\n"
+ "the power to knock foes flying.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Absol_1[] = _(
+ "ABSOL has the ability to foretell the\n"
+ "coming of natural disasters.\n"
+ "It lives in a harsh, rugged mountain");
+static const u8 DexDescription_Absol_2[] = _(
+ "environment. This POKéMON very rarely\n"
+ "ventures down from the mountains.");
+#else
+static const u8 DexDescription_Absol_1[] = _(
+ "Every time ABSOL appears before people,\n"
+ "it is followed by a disaster such as an\n"
+ "earthquake or a tidal wave.");
+static const u8 DexDescription_Absol_2[] = _(
+ "As a result, it came to be known as the\n"
+ "disaster POKéMON.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Wynaut_1[] = _(
+ "WYNAUT gather on moonlit nights to play\n"
+ "by squeezing up against each other.\n"
+ "By being squeezed, this POKéMON gains");
+static const u8 DexDescription_Wynaut_2[] = _(
+ "endurance and is trained to dole out\n"
+ "powerful counterattacks.");
+#else
+static const u8 DexDescription_Wynaut_1[] = _(
+ "WYNAUT can always be seen with a big,\n"
+ "happy smile on its face. Look at its tail\n"
+ "to determine if it is angry.");
+static const u8 DexDescription_Wynaut_2[] = _(
+ "When angered, this POKéMON will be\n"
+ "slapping the ground with its tail.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Snorunt_1[] = _(
+ "SNORUNT survives by eating only snow\n"
+ "and ice.\n"
+ "Old folklore claims that a house visited");
+static const u8 DexDescription_Snorunt_2[] = _(
+ "by this POKéMON is sure to prosper for\n"
+ "many generations to come.");
+#else
+static const u8 DexDescription_Snorunt_1[] = _(
+ "SNORUNT live in regions with heavy\n"
+ "snowfall. In seasons without snow, such\n"
+ "as spring and summer, this POKéMON");
+static const u8 DexDescription_Snorunt_2[] = _(
+ "steals away to live quietly among\n"
+ "stalactites and stalagmites deep in\n"
+ "caverns.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Glalie_1[] = _(
+ "GLALIE has the ability to freely\n"
+ "control ice. For example, it can\n"
+ "instantly freeze its foe solid.");
+static const u8 DexDescription_Glalie_2[] = _(
+ "After immobilizing its foe in ice, this\n"
+ "POKéMON enjoys eating it in leisurely\n"
+ "fashion.");
+#else
+static const u8 DexDescription_Glalie_1[] = _(
+ "GLALIE has a body made of rock, which it\n"
+ "hardens with an armor of ice.\n"
+ "This POKéMON has the ability to freeze");
+static const u8 DexDescription_Glalie_2[] = _(
+ "moisture in the atmosphere into any\n"
+ "shape it desires.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Spheal_1[] = _(
+ "SPHEAL always travels by rolling\n"
+ "around on its ball-like body. When the\n"
+ "season for ice floes arrives, this");
+static const u8 DexDescription_Spheal_2[] = _(
+ "POKéMON can be seen rolling about on\n"
+ "ice and crossing the sea.");
+#else
+static const u8 DexDescription_Spheal_1[] = _(
+ "SPHEAL is much faster rolling than \n"
+ "walking to get around. When groups of\n"
+ "this POKéMON eat, they all clap at once");
+static const u8 DexDescription_Spheal_2[] = _(
+ "to show their pleasure. Because of this,\n"
+ "their mealtimes are noisy.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Sealeo_1[] = _(
+ "SEALEO often balances and rolls\n"
+ "things on the tip of its nose. While the\n"
+ "POKéMON is rolling something, it checks");
+static const u8 DexDescription_Sealeo_2[] = _(
+ "the object’s aroma and texture to\n"
+ "determine whether it likes the object\n"
+ "or not.");
+#else
+static const u8 DexDescription_Sealeo_1[] = _(
+ "SEALEO has the habit of always juggling\n"
+ "on the tip of its nose anything it sees\n"
+ "for the first time.");
+static const u8 DexDescription_Sealeo_2[] = _(
+ "This POKéMON occasionally entertains\n"
+ "itself by balancing and rolling a SPHEAL\n"
+ "on its nose.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Walrein_1[] = _(
+ "WALREIN swims all over in frigid\n"
+ "seawater while crushing icebergs with\n"
+ "its grand, imposing tusks.");
+static const u8 DexDescription_Walrein_2[] = _(
+ "Its thick layer of blubber makes enemy\n"
+ "attacks bounce off harmlessly.");
+#else
+static const u8 DexDescription_Walrein_1[] = _(
+ "WALREIN’s two massively developed\n"
+ "tusks can totally shatter blocks of\n"
+ "ice weighing ten tons with one blow.");
+static const u8 DexDescription_Walrein_2[] = _(
+ "This POKéMON’s thick coat of blubber\n"
+ "insulates it from subzero temperatures.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Clamperl_1[] = _(
+ "CLAMPERL grows while being protected\n"
+ "by its rock-hard shell. When its body\n"
+ "becomes too large to fit inside the");
+static const u8 DexDescription_Clamperl_2[] = _(
+ "shell, it is sure evidence that this\n"
+ "POKéMON is getting close to evolution.");
+#else
+static const u8 DexDescription_Clamperl_1[] = _(
+ "CLAMPERL’s sturdy shell is not only good\n"
+ "for protection - it is also used for\n"
+ "clamping and catching prey.");
+static const u8 DexDescription_Clamperl_2[] = _(
+ "A fully grown CLAMPERL’s shell will be\n"
+ "scored with nicks and scratches all\n"
+ "over.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Huntail_1[] = _(
+ "HUNTAIL’s tail is shaped like a fish.\n"
+ "It uses the tail to attract prey, then\n"
+ "swallows the prey whole with its large,");
+static const u8 DexDescription_Huntail_2[] = _(
+ "gaping mouth.\n"
+ "This POKéMON swims by wiggling its\n"
+ "slender body like a snake.");
+#else
+static const u8 DexDescription_Huntail_1[] = _(
+ "HUNTAIL’s presence went unnoticed by\n"
+ "people for a long time because it lives\n"
+ "at extreme depths in the sea.");
+static const u8 DexDescription_Huntail_2[] = _(
+ "This POKéMON’s eyes can see clearly\n"
+ "even in the murky dark depths of the\n"
+ "ocean.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Gorebyss_1[] = _(
+ "Although GOREBYSS is the very picture\n"
+ "of elegance and beauty while swimming,\n"
+ "it is also cruel. When it spots prey, this");
+static const u8 DexDescription_Gorebyss_2[] = _(
+ "POKéMON inserts its thin mouth into the\n"
+ "prey’s body and drains the prey of its\n"
+ "body fluids.");
+#else
+static const u8 DexDescription_Gorebyss_1[] = _(
+ "GOREBYSS lives in the southern seas\n"
+ "at extreme depths. Its body is built to\n"
+ "withstand the enormous pressure of");
+static const u8 DexDescription_Gorebyss_2[] = _(
+ "water at incredible depths. Because of\n"
+ "this, this POKéMON’s body is unharmed\n"
+ "by ordinary attacks.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Relicanth_1[] = _(
+ "RELICANTH is a rare species that was\n"
+ "discovered in deep-sea explorations.\n"
+ "This POKéMON’s body withstands the");
+static const u8 DexDescription_Relicanth_2[] = _(
+ "enormous water pressure of the ocean\n"
+ "depths. Its body is covered in tough\n"
+ "scales that are like craggy rocks.");
+#else
+static const u8 DexDescription_Relicanth_1[] = _(
+ "RELICANTH is a POKéMON species that\n"
+ "existed for a hundred million years\n"
+ "without ever changing its form.");
+static const u8 DexDescription_Relicanth_2[] = _(
+ "This ancient POKéMON feeds on\n"
+ "microscopic organisms with its\n"
+ "toothless mouth.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Luvdisc_1[] = _(
+ "LUVDISC’s heart-shaped body is a\n"
+ "symbol of love and romance.\n"
+ "It is said that any couple meeting this");
+static const u8 DexDescription_Luvdisc_2[] = _(
+ "POKéMON is promised a loving\n"
+ "relationship that never ends.");
+#else
+static const u8 DexDescription_Luvdisc_1[] = _(
+ "LUVDISC live in shallow seas in the\n"
+ "tropics. This heart-shaped POKéMON\n"
+ "earned its name by swimming after");
+static const u8 DexDescription_Luvdisc_2[] = _(
+ "loving couples it spotted in the\n"
+ "ocean’s waves.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Bagon_1[] = _(
+ "BAGON harbors a never-ending dream of\n"
+ "one day soaring high among the clouds.\n"
+ "As if trying to dispel its frustration");
+static const u8 DexDescription_Bagon_2[] = _(
+ "over its inability to fly, this POKéMON\n"
+ "slams its hard head against huge rocks\n"
+ "and shatters them into pebbles.");
+#else
+static const u8 DexDescription_Bagon_1[] = _(
+ "BAGON has a dream of one day soaring\n"
+ "in the sky. In doomed efforts to fly,\n"
+ "this POKéMON hurls itself off cliffs.");
+static const u8 DexDescription_Bagon_2[] = _(
+ "As a result of its dives, its head has \n"
+ "grown tough and as hard as tempered\n"
+ "steel.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Shelgon_1[] = _(
+ "Covering SHELGON’s body are outgrowths\n"
+ "much like bones. The shell is very hard\n"
+ "and bounces off enemy attacks.");
+static const u8 DexDescription_Shelgon_2[] = _(
+ "When awaiting evolution, this POKéMON\n"
+ "hides away in a cavern.");
+#else
+static const u8 DexDescription_Shelgon_1[] = _(
+ "Inside SHELGON’s armor-like shell, cells\n"
+ "are in the midst of transformation\n"
+ "to create an entirely new body.");
+static const u8 DexDescription_Shelgon_2[] = _(
+ "This POKéMON’s shell is extremely heavy,\n"
+ "making its movements sluggish.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Salamence_1[] = _(
+ "By evolving into SALAMENCE, this\n"
+ "POKéMON finally realizes its long-held\n"
+ "dream of growing wings.");
+static const u8 DexDescription_Salamence_2[] = _(
+ "To express its joy, it flies and wheels\n"
+ "all over the sky while spouting flames\n"
+ "from its mouth.");
+#else
+static const u8 DexDescription_Salamence_1[] = _(
+ "SALAMENCE came about as a result of a\n"
+ "strong, long-held dream of growing\n"
+ "wings. It is said that this powerful");
+static const u8 DexDescription_Salamence_2[] = _(
+ "desire triggered a sudden mutation in\n"
+ "this POKéMON’s cells, causing it to\n"
+ "sprout its magnificent wings.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Beldum_1[] = _(
+ "BELDUM keeps itself floating by\n"
+ "generating a magnetic force that\n"
+ "repels earth’s natural magnetism.");
+static const u8 DexDescription_Beldum_2[] = _(
+ "When it sleeps, this POKéMON anchors\n"
+ "itself to a cliff using the hooks on\n"
+ "its rear.");
+#else
+static const u8 DexDescription_Beldum_1[] = _(
+ "Instead of blood, a powerful magnetic\n"
+ "force courses throughout BELDUM’s\n"
+ "body. This POKéMON communicates with");
+static const u8 DexDescription_Beldum_2[] = _(
+ "others by sending controlled pulses of\n"
+ "magnetism.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Metang_1[] = _(
+ "When two BELDUM fuse together, METANG\n"
+ "is formed. The brains of the BELDUM are\n"
+ "joined by a magnetic nervous system.");
+static const u8 DexDescription_Metang_2[] = _(
+ "This POKéMON turns its arms to the rear\n"
+ "for traveling at high speed.");
+#else
+static const u8 DexDescription_Metang_1[] = _(
+ "When two BELDUM fuse together, METANG\n"
+ "is formed. The brains of the BELDUM are\n"
+ "joined by a magnetic nervous system.");
+static const u8 DexDescription_Metang_2[] = _(
+ "By linking its brains magnetically,\n"
+ "this POKéMON generates strong\n"
+ "psychokinetic power.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Metagross_1[] = _(
+ "METAGROSS is the result of two METANG\n"
+ "achieving fusion. When hunting, this\n"
+ "POKéMON pins the prey to the ground");
+static const u8 DexDescription_Metagross_2[] = _(
+ "under its massive body. It then eats\n"
+ "the helpless victim using the large \n"
+ "mouth on its stomach.");
+#else
+static const u8 DexDescription_Metagross_1[] = _(
+ "METAGROSS has four brains in total.\n"
+ "Combined, the four brains can breeze\n"
+ "through difficult calculations faster");
+static const u8 DexDescription_Metagross_2[] = _(
+ "than a supercomputer.\n"
+ "This POKéMON can float in the air by\n"
+ "tucking in its four legs.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Regirock_1[] = _(
+ "REGIROCK’s body is composed entirely of\n"
+ "rocks. Recently, a study made the\n"
+ "startling discovery that the rocks");
+static const u8 DexDescription_Regirock_2[] = _(
+ "were all unearthed from different\n"
+ "locations.");
+#else
+static const u8 DexDescription_Regirock_1[] = _(
+ "REGIROCK was sealed away by people\n"
+ "long ago. If this POKéMON’s body is\n"
+ "damaged in battle, it is said to seek");
+static const u8 DexDescription_Regirock_2[] = _(
+ "out suitable rocks on its own to repair\n"
+ "itself.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Regice_1[] = _(
+ "REGICE cloaks itself with frigid air of\n"
+ "negative 328 degrees F.\n"
+ "Things will freeze solid just by going");
+static const u8 DexDescription_Regice_2[] = _(
+ "near this POKéMON.\n"
+ "Its icy body is so cold, it will not melt\n"
+ "even if it is immersed in magma.");
+#else
+static const u8 DexDescription_Regice_1[] = _(
+ "REGICE’s body was made during an ice\n"
+ "age. The deep-frozen body can’t be\n"
+ "melted, even by fire.");
+static const u8 DexDescription_Regice_2[] = _(
+ "This POKéMON controls frigid air of\n"
+ "minus 328 degrees F.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Registeel_1[] = _(
+ "REGISTEEL was imprisoned by people\n"
+ "in ancient times.\n"
+ "The metal composing its body is thought");
+static const u8 DexDescription_Registeel_2[] = _(
+ "to be a curious substance that is not\n"
+ "of this earth.");
+#else
+static const u8 DexDescription_Registeel_1[] = _(
+ "REGISTEEL has a body that is harder\n"
+ "than any kind of metal.\n"
+ "Its body is apparently hollow.");
+static const u8 DexDescription_Registeel_2[] = _(
+ "No one has any idea what this POKéMON\n"
+ "eats.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Latias_1[] = _(
+ "LATIAS is highly intelligent and capable\n"
+ "of understanding human speech.\n"
+ "It is covered with a glass-like down.");
+static const u8 DexDescription_Latias_2[] = _(
+ "The POKéMON enfolds its body with its\n"
+ "down and refracts light to alter its\n"
+ "appearance.");
+#else
+static const u8 DexDescription_Latias_1[] = _(
+ "LATIAS is highly sensitive to the\n"
+ "emotions of people. If it senses any\n"
+ "hostility, this POKéMON ruffles the");
+static const u8 DexDescription_Latias_2[] = _(
+ "feathers all over its body and cries\n"
+ "shrilly to intimidate the foe.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Latios_1[] = _(
+ "LATIOS will only open its heart to a\n"
+ "TRAINER with a compassionate spirit.\n"
+ "This POKéMON can fly faster than a jet");
+static const u8 DexDescription_Latios_2[] = _(
+ "plane by folding its forelegs to minimize\n"
+ "air resistance.");
+#else
+static const u8 DexDescription_Latios_1[] = _(
+ "LATIOS has the ability to make its foe\n"
+ "see an image of what it has seen or\n"
+ "imagines in its head.");
+static const u8 DexDescription_Latios_2[] = _(
+ "This POKéMON is intelligent and\n"
+ "understands human speech.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Kyogre_1[] = _(
+ "KYOGRE is named in mythology as the\n"
+ "POKéMON that expanded the sea by\n"
+ "covering the land with torrential rains");
+static const u8 DexDescription_Kyogre_2[] = _(
+ "and towering tidal waves.\n"
+ "It took to sleep after a cataclysmic\n"
+ "battle with GROUDON.");
+#else
+static const u8 DexDescription_Kyogre_1[] = _(
+ "KYOGRE has the power to create massive\n"
+ "rain clouds that cover the entire sky\n"
+ "and bring about torrential downpours.");
+static const u8 DexDescription_Kyogre_2[] = _(
+ "This POKéMON saved people who were\n"
+ "suffering from droughts.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Groudon_1[] = _(
+ "GROUDON has the power to scatter rain\n"
+ "clouds and make water evaporate with\n"
+ "light and heat.");
+static const u8 DexDescription_Groudon_2[] = _(
+ "It came as a savior to people who had\n"
+ "been suffering from terrible floods.");
+#else
+static const u8 DexDescription_Groudon_1[] = _(
+ "GROUDON has long been described in \n"
+ "mythology as the POKéMON that raised\n"
+ "lands and expanded continents.");
+static const u8 DexDescription_Groudon_2[] = _(
+ "This POKéMON took to sleep after a\n"
+ "cataclysmic battle with KYOGRE.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Rayquaza_1[] = _(
+ "RAYQUAZA is said to have lived for\n"
+ "hundreds of millions of years in the\n"
+ "earth’s ozone layer, above the clouds.");
+static const u8 DexDescription_Rayquaza_2[] = _(
+ "Its existence had been completely\n"
+ "unknown because it lived so high in\n"
+ "the sky.");
+#else
+static const u8 DexDescription_Rayquaza_1[] = _(
+ "RAYQUAZA lived for hundreds of millions\n"
+ "of years in the earth’s ozone layer, \n"
+ "never descending to the ground.");
+static const u8 DexDescription_Rayquaza_2[] = _(
+ "This POKéMON appears to feed on water\n"
+ "and particles in the atmosphere.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Jirachi_1[] = _(
+ "JIRACHI will awaken from its sleep of\n"
+ "a thousand years if you sing to it in a\n"
+ "voice of purity.");
+static const u8 DexDescription_Jirachi_2[] = _(
+ "It is said to make true any wish that\n"
+ "people desire.");
+#else
+static const u8 DexDescription_Jirachi_1[] = _(
+ "A legend states that JIRACHI will make\n"
+ "true any wish that is written on notes\n"
+ "attached to its head when it awakens.");
+static const u8 DexDescription_Jirachi_2[] = _(
+ "If this POKéMON senses danger, it will\n"
+ "fight without awakening.");
+#endif
+
+#ifdef SAPPHIRE
+static const u8 DexDescription_Deoxys_1[] = _(
+ "DEOXYS emerged from a virus that came\n"
+ "from space. It is highly intelligent and\n"
+ "wields psychokinetic powers.");
+static const u8 DexDescription_Deoxys_2[] = _(
+ "This POKéMON shoots lasers from the\n"
+ "crystalline organ on its chest.");
+#else
+static const u8 DexDescription_Deoxys_1[] = _(
+ "The DNA of a space virus underwent a\n"
+ "sudden mutation upon exposure to a\n"
+ "laser beam and resulted in DEOXYS.");
+static const u8 DexDescription_Deoxys_2[] = _(
+ "The crystalline organ on this POKéMON’s\n"
+ "chest appears to be its brain.");
+#endif
+
+static const struct PokedexEntry gPokedexEntries[] =
+{
+ { //Dummy
+ .categoryName = _("UNKNOWN"),
+ .height = 0,
+ .weight = 0,
+ .descriptionPage1 = DexDescription_Dummy_1,
+ .descriptionPage2 = DexDescription_Dummy_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Bulbasaur
+ .categoryName = _("SEED"),
+ .height = 7,
+ .weight = 69,
+ .descriptionPage1 = DexDescription_Bulbasaur_1,
+ .descriptionPage2 = DexDescription_Bulbasaur_2,
+ .pokemonScale = 356,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ivysaur
+ .categoryName = _("SEED"),
+ .height = 10,
+ .weight = 130,
+ .descriptionPage1 = DexDescription_Ivysaur_1,
+ .descriptionPage2 = DexDescription_Ivysaur_2,
+ .pokemonScale = 335,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Venusaur
+ .categoryName = _("SEED"),
+ .height = 20,
+ .weight = 1000,
+ .descriptionPage1 = DexDescription_Venusaur_1,
+ .descriptionPage2 = DexDescription_Venusaur_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 388,
+ .trainerOffset = 6,
+ },
+ { //Charmander
+ .categoryName = _("LIZARD"),
+ .height = 6,
+ .weight = 85,
+ .descriptionPage1 = DexDescription_Charmander_1,
+ .descriptionPage2 = DexDescription_Charmander_2,
+ .pokemonScale = 444,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Charmeleon
+ .categoryName = _("FLAME"),
+ .height = 11,
+ .weight = 190,
+ .descriptionPage1 = DexDescription_Charmeleon_1,
+ .descriptionPage2 = DexDescription_Charmeleon_2,
+ .pokemonScale = 302,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Charizard
+ .categoryName = _("FLAME"),
+ .height = 17,
+ .weight = 905,
+ .descriptionPage1 = DexDescription_Charizard_1,
+ .descriptionPage2 = DexDescription_Charizard_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 302,
+ .trainerOffset = 3,
+ },
+ { //Squirtle
+ .categoryName = _("TINY TURTLE"),
+ .height = 5,
+ .weight = 90,
+ .descriptionPage1 = DexDescription_Squirtle_1,
+ .descriptionPage2 = DexDescription_Squirtle_2,
+ .pokemonScale = 412,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Wartortle
+ .categoryName = _("TURTLE"),
+ .height = 10,
+ .weight = 225,
+ .descriptionPage1 = DexDescription_Wartortle_1,
+ .descriptionPage2 = DexDescription_Wartortle_2,
+ .pokemonScale = 332,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Blastoise
+ .categoryName = _("SHELLFISH"),
+ .height = 16,
+ .weight = 855,
+ .descriptionPage1 = DexDescription_Blastoise_1,
+ .descriptionPage2 = DexDescription_Blastoise_2,
+ .pokemonScale = 256,
+ .pokemonOffset = -1,
+ .trainerScale = 293,
+ .trainerOffset = 2,
+ },
+ { //Caterpie
+ .categoryName = _("WORM"),
+ .height = 3,
+ .weight = 29,
+ .descriptionPage1 = DexDescription_Caterpie_1,
+ .descriptionPage2 = DexDescription_Caterpie_2,
+ .pokemonScale = 549,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Metapod
+ .categoryName = _("COCOON"),
+ .height = 7,
+ .weight = 99,
+ .descriptionPage1 = DexDescription_Metapod_1,
+ .descriptionPage2 = DexDescription_Metapod_2,
+ .pokemonScale = 350,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Butterfree
+ .categoryName = _("BUTTERFLY"),
+ .height = 11,
+ .weight = 320,
+ .descriptionPage1 = DexDescription_Butterfree_1,
+ .descriptionPage2 = DexDescription_Butterfree_2,
+ .pokemonScale = 312,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Weedle
+ .categoryName = _("HAIRY BUG"),
+ .height = 3,
+ .weight = 32,
+ .descriptionPage1 = DexDescription_Weedle_1,
+ .descriptionPage2 = DexDescription_Weedle_2,
+ .pokemonScale = 455,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kakuna
+ .categoryName = _("COCOON"),
+ .height = 6,
+ .weight = 100,
+ .descriptionPage1 = DexDescription_Kakuna_1,
+ .descriptionPage2 = DexDescription_Kakuna_2,
+ .pokemonScale = 424,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Beedrill
+ .categoryName = _("POISON BEE"),
+ .height = 10,
+ .weight = 295,
+ .descriptionPage1 = DexDescription_Beedrill_1,
+ .descriptionPage2 = DexDescription_Beedrill_2,
+ .pokemonScale = 366,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pidgey
+ .categoryName = _("TINY BIRD"),
+ .height = 3,
+ .weight = 18,
+ .descriptionPage1 = DexDescription_Pidgey_1,
+ .descriptionPage2 = DexDescription_Pidgey_2,
+ .pokemonScale = 508,
+ .pokemonOffset = -3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pidgeotto
+ .categoryName = _("BIRD"),
+ .height = 11,
+ .weight = 300,
+ .descriptionPage1 = DexDescription_Pidgeotto_1,
+ .descriptionPage2 = DexDescription_Pidgeotto_2,
+ .pokemonScale = 331,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pidgeot
+ .categoryName = _("BIRD"),
+ .height = 15,
+ .weight = 395,
+ .descriptionPage1 = DexDescription_Pidgeot_1,
+ .descriptionPage2 = DexDescription_Pidgeot_2,
+ .pokemonScale = 269,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Rattata
+ .categoryName = _("MOUSE"),
+ .height = 3,
+ .weight = 35,
+ .descriptionPage1 = DexDescription_Rattata_1,
+ .descriptionPage2 = DexDescription_Rattata_2,
+ .pokemonScale = 481,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Raticate
+ .categoryName = _("MOUSE"),
+ .height = 7,
+ .weight = 185,
+ .descriptionPage1 = DexDescription_Raticate_1,
+ .descriptionPage2 = DexDescription_Raticate_2,
+ .pokemonScale = 459,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Spearow
+ .categoryName = _("TINY BIRD"),
+ .height = 3,
+ .weight = 20,
+ .descriptionPage1 = DexDescription_Spearow_1,
+ .descriptionPage2 = DexDescription_Spearow_2,
+ .pokemonScale = 571,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Fearow
+ .categoryName = _("BEAK"),
+ .height = 12,
+ .weight = 380,
+ .descriptionPage1 = DexDescription_Fearow_1,
+ .descriptionPage2 = DexDescription_Fearow_2,
+ .pokemonScale = 278,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ekans
+ .categoryName = _("SNAKE"),
+ .height = 20,
+ .weight = 69,
+ .descriptionPage1 = DexDescription_Ekans_1,
+ .descriptionPage2 = DexDescription_Ekans_2,
+ .pokemonScale = 298,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Arbok
+ .categoryName = _("COBRA"),
+ .height = 35,
+ .weight = 650,
+ .descriptionPage1 = DexDescription_Arbok_1,
+ .descriptionPage2 = DexDescription_Arbok_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 296,
+ .trainerOffset = 2,
+ },
+ { //Pikachu
+ .categoryName = _("MOUSE"),
+ .height = 4,
+ .weight = 60,
+ .descriptionPage1 = DexDescription_Pikachu_1,
+ .descriptionPage2 = DexDescription_Pikachu_2,
+ .pokemonScale = 479,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Raichu
+ .categoryName = _("MOUSE"),
+ .height = 8,
+ .weight = 300,
+ .descriptionPage1 = DexDescription_Raichu_1,
+ .descriptionPage2 = DexDescription_Raichu_2,
+ .pokemonScale = 426,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sandshrew
+ .categoryName = _("MOUSE"),
+ .height = 6,
+ .weight = 120,
+ .descriptionPage1 = DexDescription_Sandshrew_1,
+ .descriptionPage2 = DexDescription_Sandshrew_2,
+ .pokemonScale = 365,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sandslash
+ .categoryName = _("MOUSE"),
+ .height = 10,
+ .weight = 295,
+ .descriptionPage1 = DexDescription_Sandslash_1,
+ .descriptionPage2 = DexDescription_Sandslash_2,
+ .pokemonScale = 341,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //NidoranF
+ .categoryName = _("POISON PIN"),
+ .height = 4,
+ .weight = 70,
+ .descriptionPage1 = DexDescription_NidoranF_1,
+ .descriptionPage2 = DexDescription_NidoranF_2,
+ .pokemonScale = 488,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Nidorina
+ .categoryName = _("POISON PIN"),
+ .height = 8,
+ .weight = 200,
+ .descriptionPage1 = DexDescription_Nidorina_1,
+ .descriptionPage2 = DexDescription_Nidorina_2,
+ .pokemonScale = 381,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Nidoqueen
+ .categoryName = _("DRILL"),
+ .height = 13,
+ .weight = 600,
+ .descriptionPage1 = DexDescription_Nidoqueen_1,
+ .descriptionPage2 = DexDescription_Nidoqueen_2,
+ .pokemonScale = 293,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //NidoranM
+ .categoryName = _("POISON PIN"),
+ .height = 5,
+ .weight = 90,
+ .descriptionPage1 = DexDescription_NidoranM_1,
+ .descriptionPage2 = DexDescription_NidoranM_2,
+ .pokemonScale = 511,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Nidorino
+ .categoryName = _("POISON PIN"),
+ .height = 9,
+ .weight = 195,
+ .descriptionPage1 = DexDescription_Nidorino_1,
+ .descriptionPage2 = DexDescription_Nidorino_2,
+ .pokemonScale = 408,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Nidoking
+ .categoryName = _("DRILL"),
+ .height = 14,
+ .weight = 620,
+ .descriptionPage1 = DexDescription_Nidoking_1,
+ .descriptionPage2 = DexDescription_Nidoking_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Clefairy
+ .categoryName = _("FAIRY"),
+ .height = 6,
+ .weight = 75,
+ .descriptionPage1 = DexDescription_Clefairy_1,
+ .descriptionPage2 = DexDescription_Clefairy_2,
+ .pokemonScale = 441,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Clefable
+ .categoryName = _("FAIRY"),
+ .height = 13,
+ .weight = 400,
+ .descriptionPage1 = DexDescription_Clefable_1,
+ .descriptionPage2 = DexDescription_Clefable_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Vulpix
+ .categoryName = _("FOX"),
+ .height = 6,
+ .weight = 99,
+ .descriptionPage1 = DexDescription_Vulpix_1,
+ .descriptionPage2 = DexDescription_Vulpix_2,
+ .pokemonScale = 542,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ninetales
+ .categoryName = _("FOX"),
+ .height = 11,
+ .weight = 199,
+ .descriptionPage1 = DexDescription_Ninetales_1,
+ .descriptionPage2 = DexDescription_Ninetales_2,
+ .pokemonScale = 339,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Jigglypuff
+ .categoryName = _("BALLOON"),
+ .height = 5,
+ .weight = 55,
+ .descriptionPage1 = DexDescription_Jigglypuff_1,
+ .descriptionPage2 = DexDescription_Jigglypuff_2,
+ .pokemonScale = 433,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Wigglytuff
+ .categoryName = _("BALLOON"),
+ .height = 10,
+ .weight = 120,
+ .descriptionPage1 = DexDescription_Wigglytuff_1,
+ .descriptionPage2 = DexDescription_Wigglytuff_2,
+ .pokemonScale = 328,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Zubat
+ .categoryName = _("BAT"),
+ .height = 8,
+ .weight = 75,
+ .descriptionPage1 = DexDescription_Zubat_1,
+ .descriptionPage2 = DexDescription_Zubat_2,
+ .pokemonScale = 362,
+ .pokemonOffset = -5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Golbat
+ .categoryName = _("BAT"),
+ .height = 16,
+ .weight = 550,
+ .descriptionPage1 = DexDescription_Golbat_1,
+ .descriptionPage2 = DexDescription_Golbat_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Oddish
+ .categoryName = _("WEED"),
+ .height = 5,
+ .weight = 54,
+ .descriptionPage1 = DexDescription_Oddish_1,
+ .descriptionPage2 = DexDescription_Oddish_2,
+ .pokemonScale = 423,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Gloom
+ .categoryName = _("WEED"),
+ .height = 8,
+ .weight = 86,
+ .descriptionPage1 = DexDescription_Gloom_1,
+ .descriptionPage2 = DexDescription_Gloom_2,
+ .pokemonScale = 329,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Vileplume
+ .categoryName = _("FLOWER"),
+ .height = 12,
+ .weight = 186,
+ .descriptionPage1 = DexDescription_Vileplume_1,
+ .descriptionPage2 = DexDescription_Vileplume_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Paras
+ .categoryName = _("MUSHROOM"),
+ .height = 3,
+ .weight = 54,
+ .descriptionPage1 = DexDescription_Paras_1,
+ .descriptionPage2 = DexDescription_Paras_2,
+ .pokemonScale = 593,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Parasect
+ .categoryName = _("MUSHROOM"),
+ .height = 10,
+ .weight = 295,
+ .descriptionPage1 = DexDescription_Parasect_1,
+ .descriptionPage2 = DexDescription_Parasect_2,
+ .pokemonScale = 307,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Venonat
+ .categoryName = _("INSECT"),
+ .height = 10,
+ .weight = 300,
+ .descriptionPage1 = DexDescription_Venonat_1,
+ .descriptionPage2 = DexDescription_Venonat_2,
+ .pokemonScale = 360,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = -1,
+ },
+ { //Venomoth
+ .categoryName = _("POISON MOTH"),
+ .height = 15,
+ .weight = 125,
+ .descriptionPage1 = DexDescription_Venomoth_1,
+ .descriptionPage2 = DexDescription_Venomoth_2,
+ .pokemonScale = 285,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 1,
+ },
+ { //Diglett
+ .categoryName = _("MOLE"),
+ .height = 2,
+ .weight = 8,
+ .descriptionPage1 = DexDescription_Diglett_1,
+ .descriptionPage2 = DexDescription_Diglett_2,
+ .pokemonScale = 833,
+ .pokemonOffset = 25,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Dugtrio
+ .categoryName = _("MOLE"),
+ .height = 7,
+ .weight = 333,
+ .descriptionPage1 = DexDescription_Dugtrio_1,
+ .descriptionPage2 = DexDescription_Dugtrio_2,
+ .pokemonScale = 406,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Meowth
+ .categoryName = _("SCRATCH CAT"),
+ .height = 4,
+ .weight = 42,
+ .descriptionPage1 = DexDescription_Meowth_1,
+ .descriptionPage2 = DexDescription_Meowth_2,
+ .pokemonScale = 480,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Persian
+ .categoryName = _("CLASSY CAT"),
+ .height = 10,
+ .weight = 320,
+ .descriptionPage1 = DexDescription_Persian_1,
+ .descriptionPage2 = DexDescription_Persian_2,
+ .pokemonScale = 320,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Psyduck
+ .categoryName = _("DUCK"),
+ .height = 8,
+ .weight = 196,
+ .descriptionPage1 = DexDescription_Psyduck_1,
+ .descriptionPage2 = DexDescription_Psyduck_2,
+ .pokemonScale = 369,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Golduck
+ .categoryName = _("DUCK"),
+ .height = 17,
+ .weight = 766,
+ .descriptionPage1 = DexDescription_Golduck_1,
+ .descriptionPage2 = DexDescription_Golduck_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 273,
+ .trainerOffset = 1,
+ },
+ { //Mankey
+ .categoryName = _("PIG MONKEY"),
+ .height = 5,
+ .weight = 280,
+ .descriptionPage1 = DexDescription_Mankey_1,
+ .descriptionPage2 = DexDescription_Mankey_2,
+ .pokemonScale = 404,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Primeape
+ .categoryName = _("PIG MONKEY"),
+ .height = 10,
+ .weight = 320,
+ .descriptionPage1 = DexDescription_Primeape_1,
+ .descriptionPage2 = DexDescription_Primeape_2,
+ .pokemonScale = 326,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Growlithe
+ .categoryName = _("PUPPY"),
+ .height = 7,
+ .weight = 190,
+ .descriptionPage1 = DexDescription_Growlithe_1,
+ .descriptionPage2 = DexDescription_Growlithe_2,
+ .pokemonScale = 346,
+ .pokemonOffset = 14,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Arcanine
+ .categoryName = _("LEGENDARY"),
+ .height = 19,
+ .weight = 1550,
+ .descriptionPage1 = DexDescription_Arcanine_1,
+ .descriptionPage2 = DexDescription_Arcanine_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 312,
+ .trainerOffset = 4,
+ },
+ { //Poliwag
+ .categoryName = _("TADPOLE"),
+ .height = 6,
+ .weight = 124,
+ .descriptionPage1 = DexDescription_Poliwag_1,
+ .descriptionPage2 = DexDescription_Poliwag_2,
+ .pokemonScale = 369,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Poliwhirl
+ .categoryName = _("TADPOLE"),
+ .height = 10,
+ .weight = 200,
+ .descriptionPage1 = DexDescription_Poliwhirl_1,
+ .descriptionPage2 = DexDescription_Poliwhirl_2,
+ .pokemonScale = 288,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Poliwrath
+ .categoryName = _("TADPOLE"),
+ .height = 13,
+ .weight = 540,
+ .descriptionPage1 = DexDescription_Poliwrath_1,
+ .descriptionPage2 = DexDescription_Poliwrath_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Abra
+ .categoryName = _("PSI"),
+ .height = 9,
+ .weight = 195,
+ .descriptionPage1 = DexDescription_Abra_1,
+ .descriptionPage2 = DexDescription_Abra_2,
+ .pokemonScale = 363,
+ .pokemonOffset = 14,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kadabra
+ .categoryName = _("PSI"),
+ .height = 13,
+ .weight = 565,
+ .descriptionPage1 = DexDescription_Kadabra_1,
+ .descriptionPage2 = DexDescription_Kadabra_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Alakazam
+ .categoryName = _("PSI"),
+ .height = 15,
+ .weight = 480,
+ .descriptionPage1 = DexDescription_Alakazam_1,
+ .descriptionPage2 = DexDescription_Alakazam_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Machop
+ .categoryName = _("SUPERPOWER"),
+ .height = 8,
+ .weight = 195,
+ .descriptionPage1 = DexDescription_Machop_1,
+ .descriptionPage2 = DexDescription_Machop_2,
+ .pokemonScale = 342,
+ .pokemonOffset = 14,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Machoke
+ .categoryName = _("SUPERPOWER"),
+ .height = 15,
+ .weight = 705,
+ .descriptionPage1 = DexDescription_Machoke_1,
+ .descriptionPage2 = DexDescription_Machoke_2,
+ .pokemonScale = 323,
+ .pokemonOffset = 9,
+ .trainerScale = 257,
+ .trainerOffset = 0,
+ },
+ { //Machamp
+ .categoryName = _("SUPERPOWER"),
+ .height = 16,
+ .weight = 1300,
+ .descriptionPage1 = DexDescription_Machamp_1,
+ .descriptionPage2 = DexDescription_Machamp_2,
+ .pokemonScale = 280,
+ .pokemonOffset = 1,
+ .trainerScale = 269,
+ .trainerOffset = -1,
+ },
+ { //Bellsprout
+ .categoryName = _("FLOWER"),
+ .height = 7,
+ .weight = 40,
+ .descriptionPage1 = DexDescription_Bellsprout_1,
+ .descriptionPage2 = DexDescription_Bellsprout_2,
+ .pokemonScale = 354,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Weepinbell
+ .categoryName = _("FLYCATCHER"),
+ .height = 10,
+ .weight = 64,
+ .descriptionPage1 = DexDescription_Weepinbell_1,
+ .descriptionPage2 = DexDescription_Weepinbell_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Victreebel
+ .categoryName = _("FLYCATCHER"),
+ .height = 17,
+ .weight = 155,
+ .descriptionPage1 = DexDescription_Victreebel_1,
+ .descriptionPage2 = DexDescription_Victreebel_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 312,
+ .trainerOffset = 3,
+ },
+ { //Tentacool
+ .categoryName = _("JELLYFISH"),
+ .height = 9,
+ .weight = 455,
+ .descriptionPage1 = DexDescription_Tentacool_1,
+ .descriptionPage2 = DexDescription_Tentacool_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Tentacruel
+ .categoryName = _("JELLYFISH"),
+ .height = 16,
+ .weight = 550,
+ .descriptionPage1 = DexDescription_Tentacruel_1,
+ .descriptionPage2 = DexDescription_Tentacruel_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 312,
+ .trainerOffset = 1,
+ },
+ { //Geodude
+ .categoryName = _("ROCK"),
+ .height = 4,
+ .weight = 200,
+ .descriptionPage1 = DexDescription_Geodude_1,
+ .descriptionPage2 = DexDescription_Geodude_2,
+ .pokemonScale = 347,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Graveler
+ .categoryName = _("ROCK"),
+ .height = 10,
+ .weight = 1050,
+ .descriptionPage1 = DexDescription_Graveler_1,
+ .descriptionPage2 = DexDescription_Graveler_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Golem
+ .categoryName = _("MEGATON"),
+ .height = 14,
+ .weight = 3000,
+ .descriptionPage1 = DexDescription_Golem_1,
+ .descriptionPage2 = DexDescription_Golem_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 296,
+ .trainerOffset = 2,
+ },
+ { //Ponyta
+ .categoryName = _("FIRE HORSE"),
+ .height = 10,
+ .weight = 300,
+ .descriptionPage1 = DexDescription_Ponyta_1,
+ .descriptionPage2 = DexDescription_Ponyta_2,
+ .pokemonScale = 283,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Rapidash
+ .categoryName = _("FIRE HORSE"),
+ .height = 17,
+ .weight = 950,
+ .descriptionPage1 = DexDescription_Rapidash_1,
+ .descriptionPage2 = DexDescription_Rapidash_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 289,
+ .trainerOffset = 1,
+ },
+ { //Slowpoke
+ .categoryName = _("DOPEY"),
+ .height = 12,
+ .weight = 360,
+ .descriptionPage1 = DexDescription_Slowpoke_1,
+ .descriptionPage2 = DexDescription_Slowpoke_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Slowbro
+ .categoryName = _("HERMIT CRAB"),
+ .height = 16,
+ .weight = 785,
+ .descriptionPage1 = DexDescription_Slowbro_1,
+ .descriptionPage2 = DexDescription_Slowbro_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 296,
+ .trainerOffset = 2,
+ },
+ { //Magnemite
+ .categoryName = _("MAGNET"),
+ .height = 3,
+ .weight = 60,
+ .descriptionPage1 = DexDescription_Magnemite_1,
+ .descriptionPage2 = DexDescription_Magnemite_2,
+ .pokemonScale = 288,
+ .pokemonOffset = -9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Magneton
+ .categoryName = _("MAGNET"),
+ .height = 10,
+ .weight = 600,
+ .descriptionPage1 = DexDescription_Magneton_1,
+ .descriptionPage2 = DexDescription_Magneton_2,
+ .pokemonScale = 292,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Farfetchd
+ .categoryName = _("WILD DUCK"),
+ .height = 8,
+ .weight = 150,
+ .descriptionPage1 = DexDescription_Farfetchd_1,
+ .descriptionPage2 = DexDescription_Farfetchd_2,
+ .pokemonScale = 330,
+ .pokemonOffset = 2,
+ .trainerScale = 293,
+ .trainerOffset = 2,
+ },
+ { //Doduo
+ .categoryName = _("TWIN BIRD"),
+ .height = 14,
+ .weight = 392,
+ .descriptionPage1 = DexDescription_Doduo_1,
+ .descriptionPage2 = DexDescription_Doduo_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 257,
+ .trainerOffset = -1,
+ },
+ { //Dodrio
+ .categoryName = _("TRIPLE BIRD"),
+ .height = 18,
+ .weight = 852,
+ .descriptionPage1 = DexDescription_Dodrio_1,
+ .descriptionPage2 = DexDescription_Dodrio_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 268,
+ .trainerOffset = 0,
+ },
+ { //Seel
+ .categoryName = _("SEA LION"),
+ .height = 11,
+ .weight = 900,
+ .descriptionPage1 = DexDescription_Seel_1,
+ .descriptionPage2 = DexDescription_Seel_2,
+ .pokemonScale = 297,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Dewgong
+ .categoryName = _("SEA LION"),
+ .height = 17,
+ .weight = 1200,
+ .descriptionPage1 = DexDescription_Dewgong_1,
+ .descriptionPage2 = DexDescription_Dewgong_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 275,
+ .trainerOffset = 0,
+ },
+ { //Grimer
+ .categoryName = _("SLUDGE"),
+ .height = 9,
+ .weight = 300,
+ .descriptionPage1 = DexDescription_Grimer_1,
+ .descriptionPage2 = DexDescription_Grimer_2,
+ .pokemonScale = 258,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Muk
+ .categoryName = _("SLUDGE"),
+ .height = 12,
+ .weight = 300,
+ .descriptionPage1 = DexDescription_Muk_1,
+ .descriptionPage2 = DexDescription_Muk_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Shellder
+ .categoryName = _("BIVALVE"),
+ .height = 3,
+ .weight = 40,
+ .descriptionPage1 = DexDescription_Shellder_1,
+ .descriptionPage2 = DexDescription_Shellder_2,
+ .pokemonScale = 675,
+ .pokemonOffset = 24,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Cloyster
+ .categoryName = _("BIVALVE"),
+ .height = 15,
+ .weight = 1325,
+ .descriptionPage1 = DexDescription_Cloyster_1,
+ .descriptionPage2 = DexDescription_Cloyster_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 269,
+ .trainerOffset = 1,
+ },
+ { //Gastly
+ .categoryName = _("GAS"),
+ .height = 13,
+ .weight = 1,
+ .descriptionPage1 = DexDescription_Gastly_1,
+ .descriptionPage2 = DexDescription_Gastly_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Haunter
+ .categoryName = _("GAS"),
+ .height = 16,
+ .weight = 1,
+ .descriptionPage1 = DexDescription_Haunter_1,
+ .descriptionPage2 = DexDescription_Haunter_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 293,
+ .trainerOffset = 2,
+ },
+ { //Gengar
+ .categoryName = _("SHADOW"),
+ .height = 15,
+ .weight = 405,
+ .descriptionPage1 = DexDescription_Gengar_1,
+ .descriptionPage2 = DexDescription_Gengar_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 302,
+ .trainerOffset = 2,
+ },
+ { //Onix
+ .categoryName = _("ROCK SNAKE"),
+ .height = 88,
+ .weight = 2100,
+ .descriptionPage1 = DexDescription_Onix_1,
+ .descriptionPage2 = DexDescription_Onix_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 515,
+ .trainerOffset = 14,
+ },
+ { //Drowzee
+ .categoryName = _("HYPNOSIS"),
+ .height = 10,
+ .weight = 324,
+ .descriptionPage1 = DexDescription_Drowzee_1,
+ .descriptionPage2 = DexDescription_Drowzee_2,
+ .pokemonScale = 274,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Hypno
+ .categoryName = _("HYPNOSIS"),
+ .height = 16,
+ .weight = 756,
+ .descriptionPage1 = DexDescription_Hypno_1,
+ .descriptionPage2 = DexDescription_Hypno_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 257,
+ .trainerOffset = 0,
+ },
+ { //Krabby
+ .categoryName = _("RIVER CRAB"),
+ .height = 4,
+ .weight = 65,
+ .descriptionPage1 = DexDescription_Krabby_1,
+ .descriptionPage2 = DexDescription_Krabby_2,
+ .pokemonScale = 469,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kingler
+ .categoryName = _("PINCER"),
+ .height = 13,
+ .weight = 600,
+ .descriptionPage1 = DexDescription_Kingler_1,
+ .descriptionPage2 = DexDescription_Kingler_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Voltorb
+ .categoryName = _("BALL"),
+ .height = 5,
+ .weight = 104,
+ .descriptionPage1 = DexDescription_Voltorb_1,
+ .descriptionPage2 = DexDescription_Voltorb_2,
+ .pokemonScale = 364,
+ .pokemonOffset = -8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Electrode
+ .categoryName = _("BALL"),
+ .height = 12,
+ .weight = 666,
+ .descriptionPage1 = DexDescription_Electrode_1,
+ .descriptionPage2 = DexDescription_Electrode_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Exeggcute
+ .categoryName = _("EGG"),
+ .height = 4,
+ .weight = 25,
+ .descriptionPage1 = DexDescription_Exeggcute_1,
+ .descriptionPage2 = DexDescription_Exeggcute_2,
+ .pokemonScale = 489,
+ .pokemonOffset = -4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Exeggutor
+ .categoryName = _("COCONUT"),
+ .height = 20,
+ .weight = 1200,
+ .descriptionPage1 = DexDescription_Exeggutor_1,
+ .descriptionPage2 = DexDescription_Exeggutor_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 309,
+ .trainerOffset = 5,
+ },
+ { //Cubone
+ .categoryName = _("LONELY"),
+ .height = 4,
+ .weight = 65,
+ .descriptionPage1 = DexDescription_Cubone_1,
+ .descriptionPage2 = DexDescription_Cubone_2,
+ .pokemonScale = 545,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Marowak
+ .categoryName = _("BONE KEEPER"),
+ .height = 10,
+ .weight = 450,
+ .descriptionPage1 = DexDescription_Marowak_1,
+ .descriptionPage2 = DexDescription_Marowak_2,
+ .pokemonScale = 293,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Hitmonlee
+ .categoryName = _("KICKING"),
+ .height = 15,
+ .weight = 498,
+ .descriptionPage1 = DexDescription_Hitmonlee_1,
+ .descriptionPage2 = DexDescription_Hitmonlee_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 259,
+ .trainerOffset = 1,
+ },
+ { //Hitmonchan
+ .categoryName = _("PUNCHING"),
+ .height = 14,
+ .weight = 502,
+ .descriptionPage1 = DexDescription_Hitmonchan_1,
+ .descriptionPage2 = DexDescription_Hitmonchan_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 277,
+ .trainerOffset = 2,
+ },
+ { //Lickitung
+ .categoryName = _("LICKING"),
+ .height = 12,
+ .weight = 655,
+ .descriptionPage1 = DexDescription_Lickitung_1,
+ .descriptionPage2 = DexDescription_Lickitung_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Koffing
+ .categoryName = _("POISON GAS"),
+ .height = 6,
+ .weight = 10,
+ .descriptionPage1 = DexDescription_Koffing_1,
+ .descriptionPage2 = DexDescription_Koffing_2,
+ .pokemonScale = 369,
+ .pokemonOffset = -1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Weezing
+ .categoryName = _("POISON GAS"),
+ .height = 12,
+ .weight = 95,
+ .descriptionPage1 = DexDescription_Weezing_1,
+ .descriptionPage2 = DexDescription_Weezing_2,
+ .pokemonScale = 305,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Rhyhorn
+ .categoryName = _("SPIKES"),
+ .height = 10,
+ .weight = 1150,
+ .descriptionPage1 = DexDescription_Rhyhorn_1,
+ .descriptionPage2 = DexDescription_Rhyhorn_2,
+ .pokemonScale = 267,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Rhydon
+ .categoryName = _("DRILL"),
+ .height = 19,
+ .weight = 1200,
+ .descriptionPage1 = DexDescription_Rhydon_1,
+ .descriptionPage2 = DexDescription_Rhydon_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 299,
+ .trainerOffset = 2,
+ },
+ { //Chansey
+ .categoryName = _("EGG"),
+ .height = 11,
+ .weight = 346,
+ .descriptionPage1 = DexDescription_Chansey_1,
+ .descriptionPage2 = DexDescription_Chansey_2,
+ .pokemonScale = 257,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Tangela
+ .categoryName = _("VINE"),
+ .height = 10,
+ .weight = 350,
+ .descriptionPage1 = DexDescription_Tangela_1,
+ .descriptionPage2 = DexDescription_Tangela_2,
+ .pokemonScale = 304,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kangaskhan
+ .categoryName = _("PARENT"),
+ .height = 22,
+ .weight = 800,
+ .descriptionPage1 = DexDescription_Kangaskhan_1,
+ .descriptionPage2 = DexDescription_Kangaskhan_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 387,
+ .trainerOffset = 8,
+ },
+ { //Horsea
+ .categoryName = _("DRAGON"),
+ .height = 4,
+ .weight = 80,
+ .descriptionPage1 = DexDescription_Horsea_1,
+ .descriptionPage2 = DexDescription_Horsea_2,
+ .pokemonScale = 399,
+ .pokemonOffset = -1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Seadra
+ .categoryName = _("DRAGON"),
+ .height = 12,
+ .weight = 250,
+ .descriptionPage1 = DexDescription_Seadra_1,
+ .descriptionPage2 = DexDescription_Seadra_2,
+ .pokemonScale = 299,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Goldeen
+ .categoryName = _("GOLDFISH"),
+ .height = 6,
+ .weight = 150,
+ .descriptionPage1 = DexDescription_Goldeen_1,
+ .descriptionPage2 = DexDescription_Goldeen_2,
+ .pokemonScale = 379,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Seaking
+ .categoryName = _("GOLDFISH"),
+ .height = 13,
+ .weight = 390,
+ .descriptionPage1 = DexDescription_Seaking_1,
+ .descriptionPage2 = DexDescription_Seaking_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Staryu
+ .categoryName = _("STAR SHAPE"),
+ .height = 8,
+ .weight = 345,
+ .descriptionPage1 = DexDescription_Staryu_1,
+ .descriptionPage2 = DexDescription_Staryu_2,
+ .pokemonScale = 326,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Starmie
+ .categoryName = _("MYSTERIOUS"),
+ .height = 11,
+ .weight = 800,
+ .descriptionPage1 = DexDescription_Starmie_1,
+ .descriptionPage2 = DexDescription_Starmie_2,
+ .pokemonScale = 301,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Mrmime
+ .categoryName = _("BARRIER"),
+ .height = 13,
+ .weight = 545,
+ .descriptionPage1 = DexDescription_Mrmime_1,
+ .descriptionPage2 = DexDescription_Mrmime_2,
+ .pokemonScale = 258,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Scyther
+ .categoryName = _("MANTIS"),
+ .height = 15,
+ .weight = 560,
+ .descriptionPage1 = DexDescription_Scyther_1,
+ .descriptionPage2 = DexDescription_Scyther_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 293,
+ .trainerOffset = 2,
+ },
+ { //Jynx
+ .categoryName = _("HUMAN SHAPE"),
+ .height = 14,
+ .weight = 406,
+ .descriptionPage1 = DexDescription_Jynx_1,
+ .descriptionPage2 = DexDescription_Jynx_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 300,
+ .trainerOffset = 1,
+ },
+ { //Electabuzz
+ .categoryName = _("ELECTRIC"),
+ .height = 11,
+ .weight = 300,
+ .descriptionPage1 = DexDescription_Electabuzz_1,
+ .descriptionPage2 = DexDescription_Electabuzz_2,
+ .pokemonScale = 351,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Magmar
+ .categoryName = _("SPITFIRE"),
+ .height = 13,
+ .weight = 445,
+ .descriptionPage1 = DexDescription_Magmar_1,
+ .descriptionPage2 = DexDescription_Magmar_2,
+ .pokemonScale = 277,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pinsir
+ .categoryName = _("STAG BEETLE"),
+ .height = 15,
+ .weight = 550,
+ .descriptionPage1 = DexDescription_Pinsir_1,
+ .descriptionPage2 = DexDescription_Pinsir_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 257,
+ .trainerOffset = 0,
+ },
+ { //Tauros
+ .categoryName = _("WILD BULL"),
+ .height = 14,
+ .weight = 884,
+ .descriptionPage1 = DexDescription_Tauros_1,
+ .descriptionPage2 = DexDescription_Tauros_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Magikarp
+ .categoryName = _("FISH"),
+ .height = 9,
+ .weight = 100,
+ .descriptionPage1 = DexDescription_Magikarp_1,
+ .descriptionPage2 = DexDescription_Magikarp_2,
+ .pokemonScale = 310,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Gyarados
+ .categoryName = _("ATROCIOUS"),
+ .height = 65,
+ .weight = 2350,
+ .descriptionPage1 = DexDescription_Gyarados_1,
+ .descriptionPage2 = DexDescription_Gyarados_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 481,
+ .trainerOffset = 13,
+ },
+ { //Lapras
+ .categoryName = _("TRANSPORT"),
+ .height = 25,
+ .weight = 2200,
+ .descriptionPage1 = DexDescription_Lapras_1,
+ .descriptionPage2 = DexDescription_Lapras_2,
+ .pokemonScale = 257,
+ .pokemonOffset = 10,
+ .trainerScale = 423,
+ .trainerOffset = 8,
+ },
+ { //Ditto
+ .categoryName = _("TRANSFORM"),
+ .height = 3,
+ .weight = 40,
+ .descriptionPage1 = DexDescription_Ditto_1,
+ .descriptionPage2 = DexDescription_Ditto_2,
+ .pokemonScale = 633,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Eevee
+ .categoryName = _("EVOLUTION"),
+ .height = 3,
+ .weight = 65,
+ .descriptionPage1 = DexDescription_Eevee_1,
+ .descriptionPage2 = DexDescription_Eevee_2,
+ .pokemonScale = 476,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Vaporeon
+ .categoryName = _("BUBBLE JET"),
+ .height = 10,
+ .weight = 290,
+ .descriptionPage1 = DexDescription_Vaporeon_1,
+ .descriptionPage2 = DexDescription_Vaporeon_2,
+ .pokemonScale = 316,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Jolteon
+ .categoryName = _("LIGHTNING"),
+ .height = 8,
+ .weight = 245,
+ .descriptionPage1 = DexDescription_Jolteon_1,
+ .descriptionPage2 = DexDescription_Jolteon_2,
+ .pokemonScale = 283,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Flareon
+ .categoryName = _("FLAME"),
+ .height = 9,
+ .weight = 250,
+ .descriptionPage1 = DexDescription_Flareon_1,
+ .descriptionPage2 = DexDescription_Flareon_2,
+ .pokemonScale = 306,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Porygon
+ .categoryName = _("VIRTUAL"),
+ .height = 8,
+ .weight = 365,
+ .descriptionPage1 = DexDescription_Porygon_1,
+ .descriptionPage2 = DexDescription_Porygon_2,
+ .pokemonScale = 328,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Omanyte
+ .categoryName = _("SPIRAL"),
+ .height = 4,
+ .weight = 75,
+ .descriptionPage1 = DexDescription_Omanyte_1,
+ .descriptionPage2 = DexDescription_Omanyte_2,
+ .pokemonScale = 521,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Omastar
+ .categoryName = _("SPIRAL"),
+ .height = 10,
+ .weight = 350,
+ .descriptionPage1 = DexDescription_Omastar_1,
+ .descriptionPage2 = DexDescription_Omastar_2,
+ .pokemonScale = 307,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kabuto
+ .categoryName = _("SHELLFISH"),
+ .height = 5,
+ .weight = 115,
+ .descriptionPage1 = DexDescription_Kabuto_1,
+ .descriptionPage2 = DexDescription_Kabuto_2,
+ .pokemonScale = 454,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kabutops
+ .categoryName = _("SHELLFISH"),
+ .height = 13,
+ .weight = 405,
+ .descriptionPage1 = DexDescription_Kabutops_1,
+ .descriptionPage2 = DexDescription_Kabutops_2,
+ .pokemonScale = 271,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Aerodactyl
+ .categoryName = _("FOSSIL"),
+ .height = 18,
+ .weight = 590,
+ .descriptionPage1 = DexDescription_Aerodactyl_1,
+ .descriptionPage2 = DexDescription_Aerodactyl_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 302,
+ .trainerOffset = 4,
+ },
+ { //Snorlax
+ .categoryName = _("SLEEPING"),
+ .height = 21,
+ .weight = 4600,
+ .descriptionPage1 = DexDescription_Snorlax_1,
+ .descriptionPage2 = DexDescription_Snorlax_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 423,
+ .trainerOffset = 11,
+ },
+ { //Articuno
+ .categoryName = _("FREEZE"),
+ .height = 17,
+ .weight = 554,
+ .descriptionPage1 = DexDescription_Articuno_1,
+ .descriptionPage2 = DexDescription_Articuno_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 309,
+ .trainerOffset = 2,
+ },
+ { //Zapdos
+ .categoryName = _("ELECTRIC"),
+ .height = 16,
+ .weight = 526,
+ .descriptionPage1 = DexDescription_Zapdos_1,
+ .descriptionPage2 = DexDescription_Zapdos_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 318,
+ .trainerOffset = 3,
+ },
+ { //Moltres
+ .categoryName = _("FLAME"),
+ .height = 20,
+ .weight = 600,
+ .descriptionPage1 = DexDescription_Moltres_1,
+ .descriptionPage2 = DexDescription_Moltres_2,
+ .pokemonScale = 270,
+ .pokemonOffset = 0,
+ .trainerScale = 387,
+ .trainerOffset = 8,
+ },
+ { //Dratini
+ .categoryName = _("DRAGON"),
+ .height = 18,
+ .weight = 33,
+ .descriptionPage1 = DexDescription_Dratini_1,
+ .descriptionPage2 = DexDescription_Dratini_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 8,
+ .trainerScale = 386,
+ .trainerOffset = 6,
+ },
+ { //Dragonair
+ .categoryName = _("DRAGON"),
+ .height = 40,
+ .weight = 165,
+ .descriptionPage1 = DexDescription_Dragonair_1,
+ .descriptionPage2 = DexDescription_Dragonair_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 411,
+ .trainerOffset = 5,
+ },
+ { //Dragonite
+ .categoryName = _("DRAGON"),
+ .height = 22,
+ .weight = 2100,
+ .descriptionPage1 = DexDescription_Dragonite_1,
+ .descriptionPage2 = DexDescription_Dragonite_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 309,
+ .trainerOffset = 4,
+ },
+ { //Mewtwo
+ .categoryName = _("GENETIC"),
+ .height = 20,
+ .weight = 1220,
+ .descriptionPage1 = DexDescription_Mewtwo_1,
+ .descriptionPage2 = DexDescription_Mewtwo_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 309,
+ .trainerOffset = 4,
+ },
+ { //Mew
+ .categoryName = _("NEW SPECIES"),
+ .height = 4,
+ .weight = 40,
+ .descriptionPage1 = DexDescription_Mew_1,
+ .descriptionPage2 = DexDescription_Mew_2,
+ .pokemonScale = 457,
+ .pokemonOffset = -2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Chikorita
+ .categoryName = _("LEAF"),
+ .height = 9,
+ .weight = 64,
+ .descriptionPage1 = DexDescription_Chikorita_1,
+ .descriptionPage2 = DexDescription_Chikorita_2,
+ .pokemonScale = 512,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Bayleef
+ .categoryName = _("LEAF"),
+ .height = 12,
+ .weight = 158,
+ .descriptionPage1 = DexDescription_Bayleef_1,
+ .descriptionPage2 = DexDescription_Bayleef_2,
+ .pokemonScale = 296,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Meganium
+ .categoryName = _("HERB"),
+ .height = 18,
+ .weight = 1005,
+ .descriptionPage1 = DexDescription_Meganium_1,
+ .descriptionPage2 = DexDescription_Meganium_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 277,
+ .trainerOffset = 1,
+ },
+ { //Cyndaquil
+ .categoryName = _("FIRE MOUSE"),
+ .height = 5,
+ .weight = 79,
+ .descriptionPage1 = DexDescription_Cyndaquil_1,
+ .descriptionPage2 = DexDescription_Cyndaquil_2,
+ .pokemonScale = 539,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Quilava
+ .categoryName = _("VOLCANO"),
+ .height = 9,
+ .weight = 190,
+ .descriptionPage1 = DexDescription_Quilava_1,
+ .descriptionPage2 = DexDescription_Quilava_2,
+ .pokemonScale = 329,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Typhlosion
+ .categoryName = _("VOLCANO"),
+ .height = 17,
+ .weight = 795,
+ .descriptionPage1 = DexDescription_Typhlosion_1,
+ .descriptionPage2 = DexDescription_Typhlosion_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 268,
+ .trainerOffset = 1,
+ },
+ { //Totodile
+ .categoryName = _("BIG JAW"),
+ .height = 6,
+ .weight = 95,
+ .descriptionPage1 = DexDescription_Totodile_1,
+ .descriptionPage2 = DexDescription_Totodile_2,
+ .pokemonScale = 487,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Croconaw
+ .categoryName = _("BIG JAW"),
+ .height = 11,
+ .weight = 250,
+ .descriptionPage1 = DexDescription_Croconaw_1,
+ .descriptionPage2 = DexDescription_Croconaw_2,
+ .pokemonScale = 378,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Feraligatr
+ .categoryName = _("BIG JAW"),
+ .height = 23,
+ .weight = 888,
+ .descriptionPage1 = DexDescription_Feraligatr_1,
+ .descriptionPage2 = DexDescription_Feraligatr_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 342,
+ .trainerOffset = 7,
+ },
+ { //Sentret
+ .categoryName = _("SCOUT"),
+ .height = 8,
+ .weight = 60,
+ .descriptionPage1 = DexDescription_Sentret_1,
+ .descriptionPage2 = DexDescription_Sentret_2,
+ .pokemonScale = 439,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Furret
+ .categoryName = _("LONG BODY"),
+ .height = 18,
+ .weight = 325,
+ .descriptionPage1 = DexDescription_Furret_1,
+ .descriptionPage2 = DexDescription_Furret_2,
+ .pokemonScale = 346,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Hoothoot
+ .categoryName = _("OWL"),
+ .height = 7,
+ .weight = 212,
+ .descriptionPage1 = DexDescription_Hoothoot_1,
+ .descriptionPage2 = DexDescription_Hoothoot_2,
+ .pokemonScale = 380,
+ .pokemonOffset = -2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Noctowl
+ .categoryName = _("OWL"),
+ .height = 16,
+ .weight = 408,
+ .descriptionPage1 = DexDescription_Noctowl_1,
+ .descriptionPage2 = DexDescription_Noctowl_2,
+ .pokemonScale = 278,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ledyba
+ .categoryName = _("FIVE STAR"),
+ .height = 10,
+ .weight = 108,
+ .descriptionPage1 = DexDescription_Ledyba_1,
+ .descriptionPage2 = DexDescription_Ledyba_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ledian
+ .categoryName = _("FIVE STAR"),
+ .height = 14,
+ .weight = 356,
+ .descriptionPage1 = DexDescription_Ledian_1,
+ .descriptionPage2 = DexDescription_Ledian_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Spinarak
+ .categoryName = _("STRING SPIT"),
+ .height = 5,
+ .weight = 85,
+ .descriptionPage1 = DexDescription_Spinarak_1,
+ .descriptionPage2 = DexDescription_Spinarak_2,
+ .pokemonScale = 414,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ariados
+ .categoryName = _("LONG LEG"),
+ .height = 11,
+ .weight = 335,
+ .descriptionPage1 = DexDescription_Ariados_1,
+ .descriptionPage2 = DexDescription_Ariados_2,
+ .pokemonScale = 316,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Crobat
+ .categoryName = _("BAT"),
+ .height = 18,
+ .weight = 750,
+ .descriptionPage1 = DexDescription_Crobat_1,
+ .descriptionPage2 = DexDescription_Crobat_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 281,
+ .trainerOffset = 1,
+ },
+ { //Chinchou
+ .categoryName = _("ANGLER"),
+ .height = 5,
+ .weight = 120,
+ .descriptionPage1 = DexDescription_Chinchou_1,
+ .descriptionPage2 = DexDescription_Chinchou_2,
+ .pokemonScale = 424,
+ .pokemonOffset = -2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Lanturn
+ .categoryName = _("LIGHT"),
+ .height = 12,
+ .weight = 225,
+ .descriptionPage1 = DexDescription_Lanturn_1,
+ .descriptionPage2 = DexDescription_Lanturn_2,
+ .pokemonScale = 269,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pichu
+ .categoryName = _("TINY MOUSE"),
+ .height = 3,
+ .weight = 20,
+ .descriptionPage1 = DexDescription_Pichu_1,
+ .descriptionPage2 = DexDescription_Pichu_2,
+ .pokemonScale = 508,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Cleffa
+ .categoryName = _("STAR SHAPE"),
+ .height = 3,
+ .weight = 30,
+ .descriptionPage1 = DexDescription_Cleffa_1,
+ .descriptionPage2 = DexDescription_Cleffa_2,
+ .pokemonScale = 462,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Igglybuff
+ .categoryName = _("BALLOON"),
+ .height = 3,
+ .weight = 10,
+ .descriptionPage1 = DexDescription_Igglybuff_1,
+ .descriptionPage2 = DexDescription_Igglybuff_2,
+ .pokemonScale = 457,
+ .pokemonOffset = -1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Togepi
+ .categoryName = _("SPIKE BALL"),
+ .height = 3,
+ .weight = 15,
+ .descriptionPage1 = DexDescription_Togepi_1,
+ .descriptionPage2 = DexDescription_Togepi_2,
+ .pokemonScale = 507,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Togetic
+ .categoryName = _("HAPPINESS"),
+ .height = 6,
+ .weight = 32,
+ .descriptionPage1 = DexDescription_Togetic_1,
+ .descriptionPage2 = DexDescription_Togetic_2,
+ .pokemonScale = 424,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Natu
+ .categoryName = _("TINY BIRD"),
+ .height = 2,
+ .weight = 20,
+ .descriptionPage1 = DexDescription_Natu_1,
+ .descriptionPage2 = DexDescription_Natu_2,
+ .pokemonScale = 610,
+ .pokemonOffset = 25,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Xatu
+ .categoryName = _("MYSTIC"),
+ .height = 15,
+ .weight = 150,
+ .descriptionPage1 = DexDescription_Xatu_1,
+ .descriptionPage2 = DexDescription_Xatu_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 318,
+ .trainerOffset = 4,
+ },
+ { //Mareep
+ .categoryName = _("WOOL"),
+ .height = 6,
+ .weight = 78,
+ .descriptionPage1 = DexDescription_Mareep_1,
+ .descriptionPage2 = DexDescription_Mareep_2,
+ .pokemonScale = 379,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Flaaffy
+ .categoryName = _("WOOL"),
+ .height = 8,
+ .weight = 133,
+ .descriptionPage1 = DexDescription_Flaaffy_1,
+ .descriptionPage2 = DexDescription_Flaaffy_2,
+ .pokemonScale = 372,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ampharos
+ .categoryName = _("LIGHT"),
+ .height = 14,
+ .weight = 615,
+ .descriptionPage1 = DexDescription_Ampharos_1,
+ .descriptionPage2 = DexDescription_Ampharos_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Bellossom
+ .categoryName = _("FLOWER"),
+ .height = 4,
+ .weight = 58,
+ .descriptionPage1 = DexDescription_Bellossom_1,
+ .descriptionPage2 = DexDescription_Bellossom_2,
+ .pokemonScale = 472,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Marill
+ .categoryName = _("AQUA MOUSE"),
+ .height = 4,
+ .weight = 85,
+ .descriptionPage1 = DexDescription_Marill_1,
+ .descriptionPage2 = DexDescription_Marill_2,
+ .pokemonScale = 476,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Azumarill
+ .categoryName = _("AQUA RABBIT"),
+ .height = 8,
+ .weight = 285,
+ .descriptionPage1 = DexDescription_Azumarill_1,
+ .descriptionPage2 = DexDescription_Azumarill_2,
+ .pokemonScale = 448,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sudowoodo
+ .categoryName = _("IMITATION"),
+ .height = 12,
+ .weight = 380,
+ .descriptionPage1 = DexDescription_Sudowoodo_1,
+ .descriptionPage2 = DexDescription_Sudowoodo_2,
+ .pokemonScale = 305,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Politoed
+ .categoryName = _("FROG"),
+ .height = 11,
+ .weight = 339,
+ .descriptionPage1 = DexDescription_Politoed_1,
+ .descriptionPage2 = DexDescription_Politoed_2,
+ .pokemonScale = 289,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Hoppip
+ .categoryName = _("COTTONWEED"),
+ .height = 4,
+ .weight = 5,
+ .descriptionPage1 = DexDescription_Hoppip_1,
+ .descriptionPage2 = DexDescription_Hoppip_2,
+ .pokemonScale = 562,
+ .pokemonOffset = -7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Skiploom
+ .categoryName = _("COTTONWEED"),
+ .height = 6,
+ .weight = 10,
+ .descriptionPage1 = DexDescription_Skiploom_1,
+ .descriptionPage2 = DexDescription_Skiploom_2,
+ .pokemonScale = 387,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Jumpluff
+ .categoryName = _("COTTONWEED"),
+ .height = 8,
+ .weight = 30,
+ .descriptionPage1 = DexDescription_Jumpluff_1,
+ .descriptionPage2 = DexDescription_Jumpluff_2,
+ .pokemonScale = 418,
+ .pokemonOffset = -4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Aipom
+ .categoryName = _("LONG TAIL"),
+ .height = 8,
+ .weight = 115,
+ .descriptionPage1 = DexDescription_Aipom_1,
+ .descriptionPage2 = DexDescription_Aipom_2,
+ .pokemonScale = 363,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sunkern
+ .categoryName = _("SEED"),
+ .height = 3,
+ .weight = 18,
+ .descriptionPage1 = DexDescription_Sunkern_1,
+ .descriptionPage2 = DexDescription_Sunkern_2,
+ .pokemonScale = 541,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sunflora
+ .categoryName = _("SUN"),
+ .height = 8,
+ .weight = 85,
+ .descriptionPage1 = DexDescription_Sunflora_1,
+ .descriptionPage2 = DexDescription_Sunflora_2,
+ .pokemonScale = 444,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Yanma
+ .categoryName = _("CLEAR WING"),
+ .height = 12,
+ .weight = 380,
+ .descriptionPage1 = DexDescription_Yanma_1,
+ .descriptionPage2 = DexDescription_Yanma_2,
+ .pokemonScale = 274,
+ .pokemonOffset = -1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Wooper
+ .categoryName = _("WATER FISH"),
+ .height = 4,
+ .weight = 85,
+ .descriptionPage1 = DexDescription_Wooper_1,
+ .descriptionPage2 = DexDescription_Wooper_2,
+ .pokemonScale = 479,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Quagsire
+ .categoryName = _("WATER FISH"),
+ .height = 14,
+ .weight = 750,
+ .descriptionPage1 = DexDescription_Quagsire_1,
+ .descriptionPage2 = DexDescription_Quagsire_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Espeon
+ .categoryName = _("SUN"),
+ .height = 9,
+ .weight = 265,
+ .descriptionPage1 = DexDescription_Espeon_1,
+ .descriptionPage2 = DexDescription_Espeon_2,
+ .pokemonScale = 363,
+ .pokemonOffset = 14,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Umbreon
+ .categoryName = _("MOONLIGHT"),
+ .height = 10,
+ .weight = 270,
+ .descriptionPage1 = DexDescription_Umbreon_1,
+ .descriptionPage2 = DexDescription_Umbreon_2,
+ .pokemonScale = 317,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Murkrow
+ .categoryName = _("DARKNESS"),
+ .height = 5,
+ .weight = 21,
+ .descriptionPage1 = DexDescription_Murkrow_1,
+ .descriptionPage2 = DexDescription_Murkrow_2,
+ .pokemonScale = 401,
+ .pokemonOffset = -8,
+ .trainerScale = 256,
+ .trainerOffset = 1,
+ },
+ { //Slowking
+ .categoryName = _("ROYAL"),
+ .height = 20,
+ .weight = 795,
+ .descriptionPage1 = DexDescription_Slowking_1,
+ .descriptionPage2 = DexDescription_Slowking_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 309,
+ .trainerOffset = 5,
+ },
+ { //Misdreavus
+ .categoryName = _("SCREECH"),
+ .height = 7,
+ .weight = 10,
+ .descriptionPage1 = DexDescription_Misdreavus_1,
+ .descriptionPage2 = DexDescription_Misdreavus_2,
+ .pokemonScale = 407,
+ .pokemonOffset = -8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Unown
+ .categoryName = _("SYMBOL"),
+ .height = 5,
+ .weight = 50,
+ .descriptionPage1 = DexDescription_Unown_1,
+ .descriptionPage2 = DexDescription_Unown_2,
+ .pokemonScale = 411,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Wobbuffet
+ .categoryName = _("PATIENT"),
+ .height = 13,
+ .weight = 285,
+ .descriptionPage1 = DexDescription_Wobbuffet_1,
+ .descriptionPage2 = DexDescription_Wobbuffet_2,
+ .pokemonScale = 274,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Girafarig
+ .categoryName = _("LONG NECK"),
+ .height = 15,
+ .weight = 415,
+ .descriptionPage1 = DexDescription_Girafarig_1,
+ .descriptionPage2 = DexDescription_Girafarig_2,
+ .pokemonScale = 281,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pineco
+ .categoryName = _("BAGWORM"),
+ .height = 6,
+ .weight = 72,
+ .descriptionPage1 = DexDescription_Pineco_1,
+ .descriptionPage2 = DexDescription_Pineco_2,
+ .pokemonScale = 445,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Forretress
+ .categoryName = _("BAGWORM"),
+ .height = 12,
+ .weight = 1258,
+ .descriptionPage1 = DexDescription_Forretress_1,
+ .descriptionPage2 = DexDescription_Forretress_2,
+ .pokemonScale = 293,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Dunsparce
+ .categoryName = _("LAND SNAKE"),
+ .height = 15,
+ .weight = 140,
+ .descriptionPage1 = DexDescription_Dunsparce_1,
+ .descriptionPage2 = DexDescription_Dunsparce_2,
+ .pokemonScale = 316,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Gligar
+ .categoryName = _("FLYSCORPION"),
+ .height = 11,
+ .weight = 648,
+ .descriptionPage1 = DexDescription_Gligar_1,
+ .descriptionPage2 = DexDescription_Gligar_2,
+ .pokemonScale = 350,
+ .pokemonOffset = -1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Steelix
+ .categoryName = _("IRON SNAKE"),
+ .height = 92,
+ .weight = 4000,
+ .descriptionPage1 = DexDescription_Steelix_1,
+ .descriptionPage2 = DexDescription_Steelix_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 516,
+ .trainerOffset = 13,
+ },
+ { //Snubbull
+ .categoryName = _("FAIRY"),
+ .height = 6,
+ .weight = 78,
+ .descriptionPage1 = DexDescription_Snubbull_1,
+ .descriptionPage2 = DexDescription_Snubbull_2,
+ .pokemonScale = 465,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Granbull
+ .categoryName = _("FAIRY"),
+ .height = 14,
+ .weight = 487,
+ .descriptionPage1 = DexDescription_Granbull_1,
+ .descriptionPage2 = DexDescription_Granbull_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Qwilfish
+ .categoryName = _("BALLOON"),
+ .height = 5,
+ .weight = 39,
+ .descriptionPage1 = DexDescription_Qwilfish_1,
+ .descriptionPage2 = DexDescription_Qwilfish_2,
+ .pokemonScale = 430,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Scizor
+ .categoryName = _("PINCER"),
+ .height = 18,
+ .weight = 1180,
+ .descriptionPage1 = DexDescription_Scizor_1,
+ .descriptionPage2 = DexDescription_Scizor_2,
+ .pokemonScale = 278,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Shuckle
+ .categoryName = _("MOLD"),
+ .height = 6,
+ .weight = 205,
+ .descriptionPage1 = DexDescription_Shuckle_1,
+ .descriptionPage2 = DexDescription_Shuckle_2,
+ .pokemonScale = 485,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Heracross
+ .categoryName = _("SINGLE HORN"),
+ .height = 15,
+ .weight = 540,
+ .descriptionPage1 = DexDescription_Heracross_1,
+ .descriptionPage2 = DexDescription_Heracross_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sneasel
+ .categoryName = _("SHARP CLAW"),
+ .height = 9,
+ .weight = 280,
+ .descriptionPage1 = DexDescription_Sneasel_1,
+ .descriptionPage2 = DexDescription_Sneasel_2,
+ .pokemonScale = 413,
+ .pokemonOffset = -3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Teddiursa
+ .categoryName = _("LITTLE BEAR"),
+ .height = 6,
+ .weight = 88,
+ .descriptionPage1 = DexDescription_Teddiursa_1,
+ .descriptionPage2 = DexDescription_Teddiursa_2,
+ .pokemonScale = 455,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ursaring
+ .categoryName = _("HIBERNATOR"),
+ .height = 18,
+ .weight = 1258,
+ .descriptionPage1 = DexDescription_Ursaring_1,
+ .descriptionPage2 = DexDescription_Ursaring_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Slugma
+ .categoryName = _("LAVA"),
+ .height = 7,
+ .weight = 350,
+ .descriptionPage1 = DexDescription_Slugma_1,
+ .descriptionPage2 = DexDescription_Slugma_2,
+ .pokemonScale = 329,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Magcargo
+ .categoryName = _("LAVA"),
+ .height = 8,
+ .weight = 550,
+ .descriptionPage1 = DexDescription_Magcargo_1,
+ .descriptionPage2 = DexDescription_Magcargo_2,
+ .pokemonScale = 332,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Swinub
+ .categoryName = _("PIG"),
+ .height = 4,
+ .weight = 65,
+ .descriptionPage1 = DexDescription_Swinub_1,
+ .descriptionPage2 = DexDescription_Swinub_2,
+ .pokemonScale = 324,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Piloswine
+ .categoryName = _("SWINE"),
+ .height = 11,
+ .weight = 558,
+ .descriptionPage1 = DexDescription_Piloswine_1,
+ .descriptionPage2 = DexDescription_Piloswine_2,
+ .pokemonScale = 306,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Corsola
+ .categoryName = _("CORAL"),
+ .height = 6,
+ .weight = 50,
+ .descriptionPage1 = DexDescription_Corsola_1,
+ .descriptionPage2 = DexDescription_Corsola_2,
+ .pokemonScale = 410,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Remoraid
+ .categoryName = _("JET"),
+ .height = 6,
+ .weight = 120,
+ .descriptionPage1 = DexDescription_Remoraid_1,
+ .descriptionPage2 = DexDescription_Remoraid_2,
+ .pokemonScale = 316,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Octillery
+ .categoryName = _("JET"),
+ .height = 9,
+ .weight = 285,
+ .descriptionPage1 = DexDescription_Octillery_1,
+ .descriptionPage2 = DexDescription_Octillery_2,
+ .pokemonScale = 296,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Delibird
+ .categoryName = _("DELIVERY"),
+ .height = 9,
+ .weight = 160,
+ .descriptionPage1 = DexDescription_Delibird_1,
+ .descriptionPage2 = DexDescription_Delibird_2,
+ .pokemonScale = 293,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Mantine
+ .categoryName = _("KITE"),
+ .height = 21,
+ .weight = 2200,
+ .descriptionPage1 = DexDescription_Mantine_1,
+ .descriptionPage2 = DexDescription_Mantine_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 342,
+ .trainerOffset = 7,
+ },
+ { //Skarmory
+ .categoryName = _("ARMOR BIRD"),
+ .height = 17,
+ .weight = 505,
+ .descriptionPage1 = DexDescription_Skarmory_1,
+ .descriptionPage2 = DexDescription_Skarmory_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 271,
+ .trainerOffset = 1,
+ },
+ { //Houndour
+ .categoryName = _("DARK"),
+ .height = 6,
+ .weight = 108,
+ .descriptionPage1 = DexDescription_Houndour_1,
+ .descriptionPage2 = DexDescription_Houndour_2,
+ .pokemonScale = 393,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Houndoom
+ .categoryName = _("DARK"),
+ .height = 14,
+ .weight = 350,
+ .descriptionPage1 = DexDescription_Houndoom_1,
+ .descriptionPage2 = DexDescription_Houndoom_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kingdra
+ .categoryName = _("DRAGON"),
+ .height = 18,
+ .weight = 1520,
+ .descriptionPage1 = DexDescription_Kingdra_1,
+ .descriptionPage2 = DexDescription_Kingdra_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 287,
+ .trainerOffset = 0,
+ },
+ { //Phanpy
+ .categoryName = _("LONG NOSE"),
+ .height = 5,
+ .weight = 335,
+ .descriptionPage1 = DexDescription_Phanpy_1,
+ .descriptionPage2 = DexDescription_Phanpy_2,
+ .pokemonScale = 465,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Donphan
+ .categoryName = _("ARMOR"),
+ .height = 11,
+ .weight = 1200,
+ .descriptionPage1 = DexDescription_Donphan_1,
+ .descriptionPage2 = DexDescription_Donphan_2,
+ .pokemonScale = 313,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Porygon2
+ .categoryName = _("VIRTUAL"),
+ .height = 6,
+ .weight = 325,
+ .descriptionPage1 = DexDescription_Porygon2_1,
+ .descriptionPage2 = DexDescription_Porygon2_2,
+ .pokemonScale = 320,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Stantler
+ .categoryName = _("BIG HORN"),
+ .height = 14,
+ .weight = 712,
+ .descriptionPage1 = DexDescription_Stantler_1,
+ .descriptionPage2 = DexDescription_Stantler_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Smeargle
+ .categoryName = _("PAINTER"),
+ .height = 12,
+ .weight = 580,
+ .descriptionPage1 = DexDescription_Smeargle_1,
+ .descriptionPage2 = DexDescription_Smeargle_2,
+ .pokemonScale = 287,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Tyrogue
+ .categoryName = _("SCUFFLE"),
+ .height = 7,
+ .weight = 210,
+ .descriptionPage1 = DexDescription_Tyrogue_1,
+ .descriptionPage2 = DexDescription_Tyrogue_2,
+ .pokemonScale = 292,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Hitmontop
+ .categoryName = _("HANDSTAND"),
+ .height = 14,
+ .weight = 480,
+ .descriptionPage1 = DexDescription_Hitmontop_1,
+ .descriptionPage2 = DexDescription_Hitmontop_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 257,
+ .trainerOffset = 0,
+ },
+ { //Smoochum
+ .categoryName = _("KISS"),
+ .height = 4,
+ .weight = 60,
+ .descriptionPage1 = DexDescription_Smoochum_1,
+ .descriptionPage2 = DexDescription_Smoochum_2,
+ .pokemonScale = 440,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Elekid
+ .categoryName = _("ELECTRIC"),
+ .height = 6,
+ .weight = 235,
+ .descriptionPage1 = DexDescription_Elekid_1,
+ .descriptionPage2 = DexDescription_Elekid_2,
+ .pokemonScale = 363,
+ .pokemonOffset = 14,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Magby
+ .categoryName = _("LIVE COAL"),
+ .height = 7,
+ .weight = 214,
+ .descriptionPage1 = DexDescription_Magby_1,
+ .descriptionPage2 = DexDescription_Magby_2,
+ .pokemonScale = 284,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Miltank
+ .categoryName = _("MILK COW"),
+ .height = 12,
+ .weight = 755,
+ .descriptionPage1 = DexDescription_Miltank_1,
+ .descriptionPage2 = DexDescription_Miltank_2,
+ .pokemonScale = 280,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Blissey
+ .categoryName = _("HAPPINESS"),
+ .height = 15,
+ .weight = 468,
+ .descriptionPage1 = DexDescription_Blissey_1,
+ .descriptionPage2 = DexDescription_Blissey_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 310,
+ .trainerOffset = 3,
+ },
+ { //Raikou
+ .categoryName = _("THUNDER"),
+ .height = 19,
+ .weight = 1780,
+ .descriptionPage1 = DexDescription_Raikou_1,
+ .descriptionPage2 = DexDescription_Raikou_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 345,
+ .trainerOffset = 7,
+ },
+ { //Entei
+ .categoryName = _("VOLCANO"),
+ .height = 21,
+ .weight = 1980,
+ .descriptionPage1 = DexDescription_Entei_1,
+ .descriptionPage2 = DexDescription_Entei_2,
+ .pokemonScale = 259,
+ .pokemonOffset = 0,
+ .trainerScale = 345,
+ .trainerOffset = 7,
+ },
+ { //Suicune
+ .categoryName = _("AURORA"),
+ .height = 20,
+ .weight = 1870,
+ .descriptionPage1 = DexDescription_Suicune_1,
+ .descriptionPage2 = DexDescription_Suicune_2,
+ .pokemonScale = 269,
+ .pokemonOffset = 0,
+ .trainerScale = 345,
+ .trainerOffset = 7,
+ },
+ { //Larvitar
+ .categoryName = _("ROCK SKIN"),
+ .height = 6,
+ .weight = 720,
+ .descriptionPage1 = DexDescription_Larvitar_1,
+ .descriptionPage2 = DexDescription_Larvitar_2,
+ .pokemonScale = 472,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pupitar
+ .categoryName = _("HARD SHELL"),
+ .height = 12,
+ .weight = 1520,
+ .descriptionPage1 = DexDescription_Pupitar_1,
+ .descriptionPage2 = DexDescription_Pupitar_2,
+ .pokemonScale = 292,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Tyranitar
+ .categoryName = _("ARMOR"),
+ .height = 20,
+ .weight = 2020,
+ .descriptionPage1 = DexDescription_Tyranitar_1,
+ .descriptionPage2 = DexDescription_Tyranitar_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 345,
+ .trainerOffset = 7,
+ },
+ { //Lugia
+ .categoryName = _("DIVING"),
+ .height = 52,
+ .weight = 2160,
+ .descriptionPage1 = DexDescription_Lugia_1,
+ .descriptionPage2 = DexDescription_Lugia_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 721,
+ .trainerOffset = 19,
+ },
+ { //HoOh
+ .categoryName = _("RAINBOW"),
+ .height = 38,
+ .weight = 1990,
+ .descriptionPage1 = DexDescription_HoOh_1,
+ .descriptionPage2 = DexDescription_HoOh_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 610,
+ .trainerOffset = 17,
+ },
+ { //Celebi
+ .categoryName = _("TIME TRAVEL"),
+ .height = 6,
+ .weight = 50,
+ .descriptionPage1 = DexDescription_Celebi_1,
+ .descriptionPage2 = DexDescription_Celebi_2,
+ .pokemonScale = 393,
+ .pokemonOffset = -10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Treecko
+ .categoryName = _("WOOD GECKO"),
+ .height = 5,
+ .weight = 50,
+ .descriptionPage1 = DexDescription_Treecko_1,
+ .descriptionPage2 = DexDescription_Treecko_2,
+ .pokemonScale = 541,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Grovyle
+ .categoryName = _("WOOD GECKO"),
+ .height = 9,
+ .weight = 216,
+ .descriptionPage1 = DexDescription_Grovyle_1,
+ .descriptionPage2 = DexDescription_Grovyle_2,
+ .pokemonScale = 360,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sceptile
+ .categoryName = _("FOREST"),
+ .height = 17,
+ .weight = 522,
+ .descriptionPage1 = DexDescription_Sceptile_1,
+ .descriptionPage2 = DexDescription_Sceptile_2,
+ .pokemonScale = 256,
+ .pokemonOffset = -1,
+ .trainerScale = 275,
+ .trainerOffset = 2,
+ },
+ { //Torchic
+ .categoryName = _("CHICK"),
+ .height = 4,
+ .weight = 25,
+ .descriptionPage1 = DexDescription_Torchic_1,
+ .descriptionPage2 = DexDescription_Torchic_2,
+ .pokemonScale = 566,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Combusken
+ .categoryName = _("YOUNG FOWL"),
+ .height = 9,
+ .weight = 195,
+ .descriptionPage1 = DexDescription_Combusken_1,
+ .descriptionPage2 = DexDescription_Combusken_2,
+ .pokemonScale = 343,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Blaziken
+ .categoryName = _("BLAZE"),
+ .height = 19,
+ .weight = 520,
+ .descriptionPage1 = DexDescription_Blaziken_1,
+ .descriptionPage2 = DexDescription_Blaziken_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 301,
+ .trainerOffset = 4,
+ },
+ { //Mudkip
+ .categoryName = _("MUD FISH"),
+ .height = 4,
+ .weight = 76,
+ .descriptionPage1 = DexDescription_Mudkip_1,
+ .descriptionPage2 = DexDescription_Mudkip_2,
+ .pokemonScale = 535,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Marshtomp
+ .categoryName = _("MUD FISH"),
+ .height = 7,
+ .weight = 280,
+ .descriptionPage1 = DexDescription_Marshtomp_1,
+ .descriptionPage2 = DexDescription_Marshtomp_2,
+ .pokemonScale = 340,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Swampert
+ .categoryName = _("MUD FISH"),
+ .height = 15,
+ .weight = 819,
+ .descriptionPage1 = DexDescription_Swampert_1,
+ .descriptionPage2 = DexDescription_Swampert_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Poochyena
+ .categoryName = _("BITE"),
+ .height = 5,
+ .weight = 136,
+ .descriptionPage1 = DexDescription_Poochyena_1,
+ .descriptionPage2 = DexDescription_Poochyena_2,
+ .pokemonScale = 481,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Mightyena
+ .categoryName = _("BITE"),
+ .height = 10,
+ .weight = 370,
+ .descriptionPage1 = DexDescription_Mightyena_1,
+ .descriptionPage2 = DexDescription_Mightyena_2,
+ .pokemonScale = 362,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Zigzagoon
+ .categoryName = _("TINYRACCOON"),
+ .height = 4,
+ .weight = 175,
+ .descriptionPage1 = DexDescription_Zigzagoon_1,
+ .descriptionPage2 = DexDescription_Zigzagoon_2,
+ .pokemonScale = 560,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Linoone
+ .categoryName = _("RUSHING"),
+ .height = 5,
+ .weight = 325,
+ .descriptionPage1 = DexDescription_Linoone_1,
+ .descriptionPage2 = DexDescription_Linoone_2,
+ .pokemonScale = 321,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Wurmple
+ .categoryName = _("WORM"),
+ .height = 3,
+ .weight = 36,
+ .descriptionPage1 = DexDescription_Wurmple_1,
+ .descriptionPage2 = DexDescription_Wurmple_2,
+ .pokemonScale = 711,
+ .pokemonOffset = 24,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Silcoon
+ .categoryName = _("COCOON"),
+ .height = 6,
+ .weight = 100,
+ .descriptionPage1 = DexDescription_Silcoon_1,
+ .descriptionPage2 = DexDescription_Silcoon_2,
+ .pokemonScale = 431,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Beautifly
+ .categoryName = _("BUTTERFLY"),
+ .height = 10,
+ .weight = 284,
+ .descriptionPage1 = DexDescription_Beautifly_1,
+ .descriptionPage2 = DexDescription_Beautifly_2,
+ .pokemonScale = 298,
+ .pokemonOffset = -1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Cascoon
+ .categoryName = _("COCOON"),
+ .height = 7,
+ .weight = 115,
+ .descriptionPage1 = DexDescription_Cascoon_1,
+ .descriptionPage2 = DexDescription_Cascoon_2,
+ .pokemonScale = 391,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Dustox
+ .categoryName = _("POISON MOTH"),
+ .height = 12,
+ .weight = 316,
+ .descriptionPage1 = DexDescription_Dustox_1,
+ .descriptionPage2 = DexDescription_Dustox_2,
+ .pokemonScale = 269,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Lotad
+ .categoryName = _("WATER WEED"),
+ .height = 5,
+ .weight = 26,
+ .descriptionPage1 = DexDescription_Lotad_1,
+ .descriptionPage2 = DexDescription_Lotad_2,
+ .pokemonScale = 406,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Lombre
+ .categoryName = _("JOLLY"),
+ .height = 12,
+ .weight = 325,
+ .descriptionPage1 = DexDescription_Lombre_1,
+ .descriptionPage2 = DexDescription_Lombre_2,
+ .pokemonScale = 277,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ludicolo
+ .categoryName = _("CAREFREE"),
+ .height = 15,
+ .weight = 550,
+ .descriptionPage1 = DexDescription_Ludicolo_1,
+ .descriptionPage2 = DexDescription_Ludicolo_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 268,
+ .trainerOffset = -1,
+ },
+ { //Seedot
+ .categoryName = _("ACORN"),
+ .height = 5,
+ .weight = 40,
+ .descriptionPage1 = DexDescription_Seedot_1,
+ .descriptionPage2 = DexDescription_Seedot_2,
+ .pokemonScale = 472,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Nuzleaf
+ .categoryName = _("WILY"),
+ .height = 10,
+ .weight = 280,
+ .descriptionPage1 = DexDescription_Nuzleaf_1,
+ .descriptionPage2 = DexDescription_Nuzleaf_2,
+ .pokemonScale = 299,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Shiftry
+ .categoryName = _("WICKED"),
+ .height = 13,
+ .weight = 596,
+ .descriptionPage1 = DexDescription_Shiftry_1,
+ .descriptionPage2 = DexDescription_Shiftry_2,
+ .pokemonScale = 290,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Taillow
+ .categoryName = _("TINYSWALLOW"),
+ .height = 3,
+ .weight = 23,
+ .descriptionPage1 = DexDescription_Taillow_1,
+ .descriptionPage2 = DexDescription_Taillow_2,
+ .pokemonScale = 465,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Swellow
+ .categoryName = _("SWALLOW"),
+ .height = 7,
+ .weight = 198,
+ .descriptionPage1 = DexDescription_Swellow_1,
+ .descriptionPage2 = DexDescription_Swellow_2,
+ .pokemonScale = 428,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Wingull
+ .categoryName = _("SEAGULL"),
+ .height = 6,
+ .weight = 95,
+ .descriptionPage1 = DexDescription_Wingull_1,
+ .descriptionPage2 = DexDescription_Wingull_2,
+ .pokemonScale = 295,
+ .pokemonOffset = -2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pelipper
+ .categoryName = _("WATER BIRD"),
+ .height = 12,
+ .weight = 280,
+ .descriptionPage1 = DexDescription_Pelipper_1,
+ .descriptionPage2 = DexDescription_Pelipper_2,
+ .pokemonScale = 288,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ralts
+ .categoryName = _("FEELING"),
+ .height = 4,
+ .weight = 66,
+ .descriptionPage1 = DexDescription_Ralts_1,
+ .descriptionPage2 = DexDescription_Ralts_2,
+ .pokemonScale = 457,
+ .pokemonOffset = -3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kirlia
+ .categoryName = _("EMOTION"),
+ .height = 8,
+ .weight = 202,
+ .descriptionPage1 = DexDescription_Kirlia_1,
+ .descriptionPage2 = DexDescription_Kirlia_2,
+ .pokemonScale = 354,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Gardevoir
+ .categoryName = _("EMBRACE"),
+ .height = 16,
+ .weight = 484,
+ .descriptionPage1 = DexDescription_Gardevoir_1,
+ .descriptionPage2 = DexDescription_Gardevoir_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Surskit
+ .categoryName = _("POND SKATER"),
+ .height = 5,
+ .weight = 17,
+ .descriptionPage1 = DexDescription_Surskit_1,
+ .descriptionPage2 = DexDescription_Surskit_2,
+ .pokemonScale = 375,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Masquerain
+ .categoryName = _("EYEBALL"),
+ .height = 8,
+ .weight = 36,
+ .descriptionPage1 = DexDescription_Masquerain_1,
+ .descriptionPage2 = DexDescription_Masquerain_2,
+ .pokemonScale = 378,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Shroomish
+ .categoryName = _("MUSHROOM"),
+ .height = 4,
+ .weight = 45,
+ .descriptionPage1 = DexDescription_Shroomish_1,
+ .descriptionPage2 = DexDescription_Shroomish_2,
+ .pokemonScale = 513,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Breloom
+ .categoryName = _("MUSHROOM"),
+ .height = 12,
+ .weight = 392,
+ .descriptionPage1 = DexDescription_Breloom_1,
+ .descriptionPage2 = DexDescription_Breloom_2,
+ .pokemonScale = 324,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Slakoth
+ .categoryName = _("SLACKER"),
+ .height = 8,
+ .weight = 240,
+ .descriptionPage1 = DexDescription_Slakoth_1,
+ .descriptionPage2 = DexDescription_Slakoth_2,
+ .pokemonScale = 291,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Vigoroth
+ .categoryName = _("WILD MONKEY"),
+ .height = 14,
+ .weight = 465,
+ .descriptionPage1 = DexDescription_Vigoroth_1,
+ .descriptionPage2 = DexDescription_Vigoroth_2,
+ .pokemonScale = 301,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Slaking
+ .categoryName = _("LAZY"),
+ .height = 20,
+ .weight = 1305,
+ .descriptionPage1 = DexDescription_Slaking_1,
+ .descriptionPage2 = DexDescription_Slaking_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 300,
+ .trainerOffset = 1,
+ },
+ { //Nincada
+ .categoryName = _("TRAINEE"),
+ .height = 5,
+ .weight = 55,
+ .descriptionPage1 = DexDescription_Nincada_1,
+ .descriptionPage2 = DexDescription_Nincada_2,
+ .pokemonScale = 405,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ninjask
+ .categoryName = _("NINJA"),
+ .height = 8,
+ .weight = 120,
+ .descriptionPage1 = DexDescription_Ninjask_1,
+ .descriptionPage2 = DexDescription_Ninjask_2,
+ .pokemonScale = 383,
+ .pokemonOffset = -9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Shedinja
+ .categoryName = _("SHED"),
+ .height = 8,
+ .weight = 12,
+ .descriptionPage1 = DexDescription_Shedinja_1,
+ .descriptionPage2 = DexDescription_Shedinja_2,
+ .pokemonScale = 372,
+ .pokemonOffset = -8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Whismur
+ .categoryName = _("WHISPER"),
+ .height = 6,
+ .weight = 163,
+ .descriptionPage1 = DexDescription_Whismur_1,
+ .descriptionPage2 = DexDescription_Whismur_2,
+ .pokemonScale = 373,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Loudred
+ .categoryName = _("BIG VOICE"),
+ .height = 10,
+ .weight = 405,
+ .descriptionPage1 = DexDescription_Loudred_1,
+ .descriptionPage2 = DexDescription_Loudred_2,
+ .pokemonScale = 356,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Exploud
+ .categoryName = _("LOUD NOISE"),
+ .height = 15,
+ .weight = 840,
+ .descriptionPage1 = DexDescription_Exploud_1,
+ .descriptionPage2 = DexDescription_Exploud_2,
+ .pokemonScale = 284,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Makuhita
+ .categoryName = _("GUTS"),
+ .height = 10,
+ .weight = 864,
+ .descriptionPage1 = DexDescription_Makuhita_1,
+ .descriptionPage2 = DexDescription_Makuhita_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Hariyama
+ .categoryName = _("ARM THRUST"),
+ .height = 23,
+ .weight = 2538,
+ .descriptionPage1 = DexDescription_Hariyama_1,
+ .descriptionPage2 = DexDescription_Hariyama_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 343,
+ .trainerOffset = 7,
+ },
+ { //Azurill
+ .categoryName = _("POLKA DOT"),
+ .height = 2,
+ .weight = 20,
+ .descriptionPage1 = DexDescription_Azurill_1,
+ .descriptionPage2 = DexDescription_Azurill_2,
+ .pokemonScale = 603,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Nosepass
+ .categoryName = _("COMPASS"),
+ .height = 10,
+ .weight = 970,
+ .descriptionPage1 = DexDescription_Nosepass_1,
+ .descriptionPage2 = DexDescription_Nosepass_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 9,
+ .trainerScale = 289,
+ .trainerOffset = 3,
+ },
+ { //Skitty
+ .categoryName = _("KITTEN"),
+ .height = 6,
+ .weight = 110,
+ .descriptionPage1 = DexDescription_Skitty_1,
+ .descriptionPage2 = DexDescription_Skitty_2,
+ .pokemonScale = 492,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Delcatty
+ .categoryName = _("PRIM"),
+ .height = 11,
+ .weight = 326,
+ .descriptionPage1 = DexDescription_Delcatty_1,
+ .descriptionPage2 = DexDescription_Delcatty_2,
+ .pokemonScale = 322,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sableye
+ .categoryName = _("DARKNESS"),
+ .height = 5,
+ .weight = 110,
+ .descriptionPage1 = DexDescription_Sableye_1,
+ .descriptionPage2 = DexDescription_Sableye_2,
+ .pokemonScale = 451,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Mawile
+ .categoryName = _("DECEIVER"),
+ .height = 6,
+ .weight = 115,
+ .descriptionPage1 = DexDescription_Mawile_1,
+ .descriptionPage2 = DexDescription_Mawile_2,
+ .pokemonScale = 466,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Aron
+ .categoryName = _("IRON ARMOR"),
+ .height = 4,
+ .weight = 600,
+ .descriptionPage1 = DexDescription_Aron_1,
+ .descriptionPage2 = DexDescription_Aron_2,
+ .pokemonScale = 419,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Lairon
+ .categoryName = _("IRON ARMOR"),
+ .height = 9,
+ .weight = 1200,
+ .descriptionPage1 = DexDescription_Lairon_1,
+ .descriptionPage2 = DexDescription_Lairon_2,
+ .pokemonScale = 275,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Aggron
+ .categoryName = _("IRON ARMOR"),
+ .height = 21,
+ .weight = 3600,
+ .descriptionPage1 = DexDescription_Aggron_1,
+ .descriptionPage2 = DexDescription_Aggron_2,
+ .pokemonScale = 256,
+ .pokemonOffset = -1,
+ .trainerScale = 350,
+ .trainerOffset = 6,
+ },
+ { //Meditite
+ .categoryName = _("MEDITATE"),
+ .height = 6,
+ .weight = 112,
+ .descriptionPage1 = DexDescription_Meditite_1,
+ .descriptionPage2 = DexDescription_Meditite_2,
+ .pokemonScale = 465,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Medicham
+ .categoryName = _("MEDITATE"),
+ .height = 13,
+ .weight = 315,
+ .descriptionPage1 = DexDescription_Medicham_1,
+ .descriptionPage2 = DexDescription_Medicham_2,
+ .pokemonScale = 298,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Electrike
+ .categoryName = _("LIGHTNING"),
+ .height = 6,
+ .weight = 152,
+ .descriptionPage1 = DexDescription_Electrike_1,
+ .descriptionPage2 = DexDescription_Electrike_2,
+ .pokemonScale = 290,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Manectric
+ .categoryName = _("DISCHARGE"),
+ .height = 15,
+ .weight = 402,
+ .descriptionPage1 = DexDescription_Manectric_1,
+ .descriptionPage2 = DexDescription_Manectric_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 257,
+ .trainerOffset = 0,
+ },
+ { //Plusle
+ .categoryName = _("CHEERING"),
+ .height = 4,
+ .weight = 42,
+ .descriptionPage1 = DexDescription_Plusle_1,
+ .descriptionPage2 = DexDescription_Plusle_2,
+ .pokemonScale = 515,
+ .pokemonOffset = -9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Minun
+ .categoryName = _("CHEERING"),
+ .height = 4,
+ .weight = 42,
+ .descriptionPage1 = DexDescription_Minun_1,
+ .descriptionPage2 = DexDescription_Minun_2,
+ .pokemonScale = 512,
+ .pokemonOffset = -7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Volbeat
+ .categoryName = _("FIREFLY"),
+ .height = 7,
+ .weight = 177,
+ .descriptionPage1 = DexDescription_Volbeat_1,
+ .descriptionPage2 = DexDescription_Volbeat_2,
+ .pokemonScale = 442,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Illumise
+ .categoryName = _("FIREFLY"),
+ .height = 6,
+ .weight = 177,
+ .descriptionPage1 = DexDescription_Illumise_1,
+ .descriptionPage2 = DexDescription_Illumise_2,
+ .pokemonScale = 572,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Roselia
+ .categoryName = _("THORN"),
+ .height = 3,
+ .weight = 20,
+ .descriptionPage1 = DexDescription_Roselia_1,
+ .descriptionPage2 = DexDescription_Roselia_2,
+ .pokemonScale = 677,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Gulpin
+ .categoryName = _("STOMACH"),
+ .height = 4,
+ .weight = 103,
+ .descriptionPage1 = DexDescription_Gulpin_1,
+ .descriptionPage2 = DexDescription_Gulpin_2,
+ .pokemonScale = 593,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Swalot
+ .categoryName = _("POISON BAG"),
+ .height = 17,
+ .weight = 800,
+ .descriptionPage1 = DexDescription_Swalot_1,
+ .descriptionPage2 = DexDescription_Swalot_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 345,
+ .trainerOffset = 3,
+ },
+ { //Carvanha
+ .categoryName = _("SAVAGE"),
+ .height = 8,
+ .weight = 208,
+ .descriptionPage1 = DexDescription_Carvanha_1,
+ .descriptionPage2 = DexDescription_Carvanha_2,
+ .pokemonScale = 362,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sharpedo
+ .categoryName = _("BRUTAL"),
+ .height = 18,
+ .weight = 888,
+ .descriptionPage1 = DexDescription_Sharpedo_1,
+ .descriptionPage2 = DexDescription_Sharpedo_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 317,
+ .trainerOffset = 3,
+ },
+ { //Wailmer
+ .categoryName = _("BALL WHALE"),
+ .height = 20,
+ .weight = 1300,
+ .descriptionPage1 = DexDescription_Wailmer_1,
+ .descriptionPage2 = DexDescription_Wailmer_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 493,
+ .trainerOffset = 0,
+ },
+ { //Wailord
+ .categoryName = _("FLOAT WHALE"),
+ .height = 145,
+ .weight = 3980,
+ .descriptionPage1 = DexDescription_Wailord_1,
+ .descriptionPage2 = DexDescription_Wailord_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 1352,
+ .trainerOffset = 18,
+ },
+ { //Numel
+ .categoryName = _("NUMB"),
+ .height = 7,
+ .weight = 240,
+ .descriptionPage1 = DexDescription_Numel_1,
+ .descriptionPage2 = DexDescription_Numel_2,
+ .pokemonScale = 342,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Camerupt
+ .categoryName = _("ERUPTION"),
+ .height = 19,
+ .weight = 2200,
+ .descriptionPage1 = DexDescription_Camerupt_1,
+ .descriptionPage2 = DexDescription_Camerupt_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 7,
+ .trainerScale = 345,
+ .trainerOffset = 6,
+ },
+ { //Torkoal
+ .categoryName = _("COAL"),
+ .height = 5,
+ .weight = 804,
+ .descriptionPage1 = DexDescription_Torkoal_1,
+ .descriptionPage2 = DexDescription_Torkoal_2,
+ .pokemonScale = 390,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Spoink
+ .categoryName = _("BOUNCE"),
+ .height = 7,
+ .weight = 306,
+ .descriptionPage1 = DexDescription_Spoink_1,
+ .descriptionPage2 = DexDescription_Spoink_2,
+ .pokemonScale = 423,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Grumpig
+ .categoryName = _("MANIPULATE"),
+ .height = 9,
+ .weight = 715,
+ .descriptionPage1 = DexDescription_Grumpig_1,
+ .descriptionPage2 = DexDescription_Grumpig_2,
+ .pokemonScale = 358,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Spinda
+ .categoryName = _("SPOT PANDA"),
+ .height = 11,
+ .weight = 50,
+ .descriptionPage1 = DexDescription_Spinda_1,
+ .descriptionPage2 = DexDescription_Spinda_2,
+ .pokemonScale = 321,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Trapinch
+ .categoryName = _("ANT PIT"),
+ .height = 7,
+ .weight = 150,
+ .descriptionPage1 = DexDescription_Trapinch_1,
+ .descriptionPage2 = DexDescription_Trapinch_2,
+ .pokemonScale = 298,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Vibrava
+ .categoryName = _("VIBRATION"),
+ .height = 11,
+ .weight = 153,
+ .descriptionPage1 = DexDescription_Vibrava_1,
+ .descriptionPage2 = DexDescription_Vibrava_2,
+ .pokemonScale = 370,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Flygon
+ .categoryName = _("MYSTIC"),
+ .height = 20,
+ .weight = 820,
+ .descriptionPage1 = DexDescription_Flygon_1,
+ .descriptionPage2 = DexDescription_Flygon_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 268,
+ .trainerOffset = 1,
+ },
+ { //Cacnea
+ .categoryName = _("CACTUS"),
+ .height = 4,
+ .weight = 513,
+ .descriptionPage1 = DexDescription_Cacnea_1,
+ .descriptionPage2 = DexDescription_Cacnea_2,
+ .pokemonScale = 455,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Cacturne
+ .categoryName = _("SCARECROW"),
+ .height = 13,
+ .weight = 774,
+ .descriptionPage1 = DexDescription_Cacturne_1,
+ .descriptionPage2 = DexDescription_Cacturne_2,
+ .pokemonScale = 327,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Swablu
+ .categoryName = _("COTTON BIRD"),
+ .height = 4,
+ .weight = 12,
+ .descriptionPage1 = DexDescription_Swablu_1,
+ .descriptionPage2 = DexDescription_Swablu_2,
+ .pokemonScale = 422,
+ .pokemonOffset = -8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Altaria
+ .categoryName = _("HUMMING"),
+ .height = 11,
+ .weight = 206,
+ .descriptionPage1 = DexDescription_Altaria_1,
+ .descriptionPage2 = DexDescription_Altaria_2,
+ .pokemonScale = 327,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Zangoose
+ .categoryName = _("CAT FERRET"),
+ .height = 13,
+ .weight = 403,
+ .descriptionPage1 = DexDescription_Zangoose_1,
+ .descriptionPage2 = DexDescription_Zangoose_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Seviper
+ .categoryName = _("FANG SNAKE"),
+ .height = 27,
+ .weight = 525,
+ .descriptionPage1 = DexDescription_Seviper_1,
+ .descriptionPage2 = DexDescription_Seviper_2,
+ .pokemonScale = 275,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Lunatone
+ .categoryName = _("METEORITE"),
+ .height = 10,
+ .weight = 1680,
+ .descriptionPage1 = DexDescription_Lunatone_1,
+ .descriptionPage2 = DexDescription_Lunatone_2,
+ .pokemonScale = 300,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Solrock
+ .categoryName = _("METEORITE"),
+ .height = 12,
+ .weight = 1540,
+ .descriptionPage1 = DexDescription_Solrock_1,
+ .descriptionPage2 = DexDescription_Solrock_2,
+ .pokemonScale = 328,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Barboach
+ .categoryName = _("WHISKERS"),
+ .height = 4,
+ .weight = 19,
+ .descriptionPage1 = DexDescription_Barboach_1,
+ .descriptionPage2 = DexDescription_Barboach_2,
+ .pokemonScale = 581,
+ .pokemonOffset = -3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Whiscash
+ .categoryName = _("WHISKERS"),
+ .height = 9,
+ .weight = 236,
+ .descriptionPage1 = DexDescription_Whiscash_1,
+ .descriptionPage2 = DexDescription_Whiscash_2,
+ .pokemonScale = 317,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Corphish
+ .categoryName = _("RUFFIAN"),
+ .height = 6,
+ .weight = 115,
+ .descriptionPage1 = DexDescription_Corphish_1,
+ .descriptionPage2 = DexDescription_Corphish_2,
+ .pokemonScale = 484,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Crawdaunt
+ .categoryName = _("ROGUE"),
+ .height = 11,
+ .weight = 328,
+ .descriptionPage1 = DexDescription_Crawdaunt_1,
+ .descriptionPage2 = DexDescription_Crawdaunt_2,
+ .pokemonScale = 365,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Baltoy
+ .categoryName = _("CLAY DOLL"),
+ .height = 5,
+ .weight = 215,
+ .descriptionPage1 = DexDescription_Baltoy_1,
+ .descriptionPage2 = DexDescription_Baltoy_2,
+ .pokemonScale = 457,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Claydol
+ .categoryName = _("CLAY DOLL"),
+ .height = 15,
+ .weight = 1080,
+ .descriptionPage1 = DexDescription_Claydol_1,
+ .descriptionPage2 = DexDescription_Claydol_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 280,
+ .trainerOffset = 1,
+ },
+ { //Lileep
+ .categoryName = _("SEA LILY"),
+ .height = 10,
+ .weight = 238,
+ .descriptionPage1 = DexDescription_Lileep_1,
+ .descriptionPage2 = DexDescription_Lileep_2,
+ .pokemonScale = 305,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Cradily
+ .categoryName = _("BARNACLE"),
+ .height = 15,
+ .weight = 604,
+ .descriptionPage1 = DexDescription_Cradily_1,
+ .descriptionPage2 = DexDescription_Cradily_2,
+ .pokemonScale = 267,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Anorith
+ .categoryName = _("OLD SHRIMP"),
+ .height = 7,
+ .weight = 125,
+ .descriptionPage1 = DexDescription_Anorith_1,
+ .descriptionPage2 = DexDescription_Anorith_2,
+ .pokemonScale = 296,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Armaldo
+ .categoryName = _("PLATE"),
+ .height = 15,
+ .weight = 682,
+ .descriptionPage1 = DexDescription_Armaldo_1,
+ .descriptionPage2 = DexDescription_Armaldo_2,
+ .pokemonScale = 312,
+ .pokemonOffset = 3,
+ .trainerScale = 271,
+ .trainerOffset = 0,
+ },
+ { //Feebas
+ .categoryName = _("FISH"),
+ .height = 6,
+ .weight = 74,
+ .descriptionPage1 = DexDescription_Feebas_1,
+ .descriptionPage2 = DexDescription_Feebas_2,
+ .pokemonScale = 423,
+ .pokemonOffset = -4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Milotic
+ .categoryName = _("TENDER"),
+ .height = 62,
+ .weight = 1620,
+ .descriptionPage1 = DexDescription_Milotic_1,
+ .descriptionPage2 = DexDescription_Milotic_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 360,
+ .trainerOffset = 7,
+ },
+ { //Castform
+ .categoryName = _("WEATHER"),
+ .height = 3,
+ .weight = 8,
+ .descriptionPage1 = DexDescription_Castform_1,
+ .descriptionPage2 = DexDescription_Castform_2,
+ .pokemonScale = 435,
+ .pokemonOffset = -5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kecleon
+ .categoryName = _("COLOR SWAP"),
+ .height = 10,
+ .weight = 220,
+ .descriptionPage1 = DexDescription_Kecleon_1,
+ .descriptionPage2 = DexDescription_Kecleon_2,
+ .pokemonScale = 316,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Shuppet
+ .categoryName = _("PUPPET"),
+ .height = 6,
+ .weight = 23,
+ .descriptionPage1 = DexDescription_Shuppet_1,
+ .descriptionPage2 = DexDescription_Shuppet_2,
+ .pokemonScale = 440,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Banette
+ .categoryName = _("MARIONETTE"),
+ .height = 11,
+ .weight = 125,
+ .descriptionPage1 = DexDescription_Banette_1,
+ .descriptionPage2 = DexDescription_Banette_2,
+ .pokemonScale = 262,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Duskull
+ .categoryName = _("REQUIEM"),
+ .height = 8,
+ .weight = 150,
+ .descriptionPage1 = DexDescription_Duskull_1,
+ .descriptionPage2 = DexDescription_Duskull_2,
+ .pokemonScale = 406,
+ .pokemonOffset = -4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Dusclops
+ .categoryName = _("BECKON"),
+ .height = 16,
+ .weight = 306,
+ .descriptionPage1 = DexDescription_Dusclops_1,
+ .descriptionPage2 = DexDescription_Dusclops_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 299,
+ .trainerOffset = 1,
+ },
+ { //Tropius
+ .categoryName = _("FRUIT"),
+ .height = 20,
+ .weight = 1000,
+ .descriptionPage1 = DexDescription_Tropius_1,
+ .descriptionPage2 = DexDescription_Tropius_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 344,
+ .trainerOffset = 7,
+ },
+ { //Chimecho
+ .categoryName = _("WIND CHIME"),
+ .height = 6,
+ .weight = 10,
+ .descriptionPage1 = DexDescription_Chimecho_1,
+ .descriptionPage2 = DexDescription_Chimecho_2,
+ .pokemonScale = 505,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Absol
+ .categoryName = _("DISASTER"),
+ .height = 12,
+ .weight = 470,
+ .descriptionPage1 = DexDescription_Absol_1,
+ .descriptionPage2 = DexDescription_Absol_2,
+ .pokemonScale = 301,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Wynaut
+ .categoryName = _("BRIGHT"),
+ .height = 6,
+ .weight = 140,
+ .descriptionPage1 = DexDescription_Wynaut_1,
+ .descriptionPage2 = DexDescription_Wynaut_2,
+ .pokemonScale = 484,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Snorunt
+ .categoryName = _("SNOW HAT"),
+ .height = 7,
+ .weight = 168,
+ .descriptionPage1 = DexDescription_Snorunt_1,
+ .descriptionPage2 = DexDescription_Snorunt_2,
+ .pokemonScale = 380,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Glalie
+ .categoryName = _("FACE"),
+ .height = 15,
+ .weight = 2565,
+ .descriptionPage1 = DexDescription_Glalie_1,
+ .descriptionPage2 = DexDescription_Glalie_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 344,
+ .trainerOffset = 0,
+ },
+ { //Spheal
+ .categoryName = _("CLAP"),
+ .height = 8,
+ .weight = 395,
+ .descriptionPage1 = DexDescription_Spheal_1,
+ .descriptionPage2 = DexDescription_Spheal_2,
+ .pokemonScale = 315,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sealeo
+ .categoryName = _("BALL ROLL"),
+ .height = 11,
+ .weight = 876,
+ .descriptionPage1 = DexDescription_Sealeo_1,
+ .descriptionPage2 = DexDescription_Sealeo_2,
+ .pokemonScale = 338,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Walrein
+ .categoryName = _("ICE BREAK"),
+ .height = 14,
+ .weight = 1506,
+ .descriptionPage1 = DexDescription_Walrein_1,
+ .descriptionPage2 = DexDescription_Walrein_2,
+ .pokemonScale = 316,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Clamperl
+ .categoryName = _("BIVALVE"),
+ .height = 4,
+ .weight = 525,
+ .descriptionPage1 = DexDescription_Clamperl_1,
+ .descriptionPage2 = DexDescription_Clamperl_2,
+ .pokemonScale = 691,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Huntail
+ .categoryName = _("DEEP SEA"),
+ .height = 17,
+ .weight = 270,
+ .descriptionPage1 = DexDescription_Huntail_1,
+ .descriptionPage2 = DexDescription_Huntail_2,
+ .pokemonScale = 307,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Gorebyss
+ .categoryName = _("SOUTH SEA"),
+ .height = 18,
+ .weight = 226,
+ .descriptionPage1 = DexDescription_Gorebyss_1,
+ .descriptionPage2 = DexDescription_Gorebyss_2,
+ .pokemonScale = 278,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Relicanth
+ .categoryName = _("LONGEVITY"),
+ .height = 10,
+ .weight = 234,
+ .descriptionPage1 = DexDescription_Relicanth_1,
+ .descriptionPage2 = DexDescription_Relicanth_2,
+ .pokemonScale = 316,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Luvdisc
+ .categoryName = _("RENDEZVOUS"),
+ .height = 6,
+ .weight = 87,
+ .descriptionPage1 = DexDescription_Luvdisc_1,
+ .descriptionPage2 = DexDescription_Luvdisc_2,
+ .pokemonScale = 371,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Bagon
+ .categoryName = _("ROCK HEAD"),
+ .height = 6,
+ .weight = 421,
+ .descriptionPage1 = DexDescription_Bagon_1,
+ .descriptionPage2 = DexDescription_Bagon_2,
+ .pokemonScale = 448,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Shelgon
+ .categoryName = _("ENDURANCE"),
+ .height = 11,
+ .weight = 1105,
+ .descriptionPage1 = DexDescription_Shelgon_1,
+ .descriptionPage2 = DexDescription_Shelgon_2,
+ .pokemonScale = 311,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Salamence
+ .categoryName = _("DRAGON"),
+ .height = 15,
+ .weight = 1026,
+ .descriptionPage1 = DexDescription_Salamence_1,
+ .descriptionPage2 = DexDescription_Salamence_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Beldum
+ .categoryName = _("IRON BALL"),
+ .height = 6,
+ .weight = 952,
+ .descriptionPage1 = DexDescription_Beldum_1,
+ .descriptionPage2 = DexDescription_Beldum_2,
+ .pokemonScale = 414,
+ .pokemonOffset = -1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Metang
+ .categoryName = _("IRON CLAW"),
+ .height = 12,
+ .weight = 2025,
+ .descriptionPage1 = DexDescription_Metang_1,
+ .descriptionPage2 = DexDescription_Metang_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Metagross
+ .categoryName = _("IRON LEG"),
+ .height = 16,
+ .weight = 5500,
+ .descriptionPage1 = DexDescription_Metagross_1,
+ .descriptionPage2 = DexDescription_Metagross_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 447,
+ .trainerOffset = 9,
+ },
+ { //Regirock
+ .categoryName = _("ROCK PEAK"),
+ .height = 17,
+ .weight = 2300,
+ .descriptionPage1 = DexDescription_Regirock_1,
+ .descriptionPage2 = DexDescription_Regirock_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 309,
+ .trainerOffset = 1,
+ },
+ { //Regice
+ .categoryName = _("ICEBERG"),
+ .height = 18,
+ .weight = 1750,
+ .descriptionPage1 = DexDescription_Regice_1,
+ .descriptionPage2 = DexDescription_Regice_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 301,
+ .trainerOffset = 2,
+ },
+ { //Registeel
+ .categoryName = _("IRON"),
+ .height = 19,
+ .weight = 2050,
+ .descriptionPage1 = DexDescription_Registeel_1,
+ .descriptionPage2 = DexDescription_Registeel_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 359,
+ .trainerOffset = 6,
+ },
+ { //Latias
+ .categoryName = _("EON"),
+ .height = 14,
+ .weight = 400,
+ .descriptionPage1 = DexDescription_Latias_1,
+ .descriptionPage2 = DexDescription_Latias_2,
+ .pokemonScale = 304,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Latios
+ .categoryName = _("EON"),
+ .height = 20,
+ .weight = 600,
+ .descriptionPage1 = DexDescription_Latios_1,
+ .descriptionPage2 = DexDescription_Latios_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 294,
+ .trainerOffset = 3,
+ },
+ { //Kyogre
+ .categoryName = _("SEA BASIN"),
+ .height = 45,
+ .weight = 3520,
+ .descriptionPage1 = DexDescription_Kyogre_1,
+ .descriptionPage2 = DexDescription_Kyogre_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 614,
+ .trainerOffset = 13,
+ },
+ { //Groudon
+ .categoryName = _("CONTINENT"),
+ .height = 35,
+ .weight = 9500,
+ .descriptionPage1 = DexDescription_Groudon_1,
+ .descriptionPage2 = DexDescription_Groudon_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 515,
+ .trainerOffset = 14,
+ },
+ { //Rayquaza
+ .categoryName = _("SKY HIGH"),
+ .height = 70,
+ .weight = 2065,
+ .descriptionPage1 = DexDescription_Rayquaza_1,
+ .descriptionPage2 = DexDescription_Rayquaza_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 448,
+ .trainerOffset = 12,
+ },
+ { //Jirachi
+ .categoryName = _("WISH"),
+ .height = 3,
+ .weight = 11,
+ .descriptionPage1 = DexDescription_Jirachi_1,
+ .descriptionPage2 = DexDescription_Jirachi_2,
+ .pokemonScale = 608,
+ .pokemonOffset = -8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Deoxys
+ .categoryName = _("DNA"),
+ .height = 17,
+ .weight = 608,
+ .descriptionPage1 = DexDescription_Deoxys_1,
+ .descriptionPage2 = DexDescription_Deoxys_2,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 290,
+ .trainerOffset = 2,
+ },
+};
diff --git a/src/data/pokedex_orders.h b/src/data/pokedex_orders.h
new file mode 100644
index 000000000..3577e6793
--- /dev/null
+++ b/src/data/pokedex_orders.h
@@ -0,0 +1,1192 @@
+static const u16 gPokedexOrder_Alphabetical[] =
+{
+ 387,
+ 388,
+ 389,
+ 390,
+ 391,
+ 392,
+ 393,
+ 394,
+ 395,
+ 396,
+ 397,
+ 398,
+ 399,
+ 400,
+ 401,
+ 402,
+ 403,
+ 404,
+ 405,
+ 406,
+ 407,
+ 408,
+ 409,
+ 410,
+ 411,
+ 63, // Abra
+ 359, // Absol
+ 142, // Aerodactyl
+ 306, // Aggron
+ 190, // Aipom
+ 65, // Alakazam
+ 334, // Altaria
+ 181, // Ampharos
+ 347, // Anorith
+ 24, // Arbok
+ 59, // Arcanine
+ 168, // Ariados
+ 348, // Armaldo
+ 304, // Aron
+ 144, // Articuno
+ 184, // Azumarill
+ 298, // Azurill
+ 371, // Bagon
+ 343, // Baltoy
+ 354, // Banette
+ 339, // Barboach
+ 153, // Bayleef
+ 267, // Beautifly
+ 15, // Beedrill
+ 374, // Beldum
+ 182, // Bellossom
+ 69, // Bellsprout
+ 9, // Blastoise
+ 257, // Blaziken
+ 242, // Blissey
+ 286, // Breloom
+ 1, // Bulbasaur
+ 12, // Butterfree
+ 331, // Cacnea
+ 332, // Cacturne
+ 323, // Camerupt
+ 318, // Carvanha
+ 268, // Cascoon
+ 351, // Castform
+ 10, // Caterpie
+ 251, // Celebi
+ 113, // Chansey
+ 6, // Charizard
+ 4, // Charmander
+ 5, // Charmeleon
+ 152, // Chikorita
+ 358, // Chimecho
+ 170, // Chinchou
+ 366, // Clamperl
+ 344, // Claydol
+ 36, // Clefable
+ 35, // Clefairy
+ 173, // Cleffa
+ 91, // Cloyster
+ 256, // Combusken
+ 341, // Corphish
+ 222, // Corsola
+ 346, // Cradily
+ 342, // Crawdaunt
+ 169, // Crobat
+ 159, // Croconaw
+ 104, // Cubone
+ 155, // Cyndaquil
+ 301, // Delcatty
+ 225, // Delibird
+ 386, // Deoxys
+ 87, // Dewgong
+ 50, // Diglett
+ 132, // Ditto
+ 85, // Dodrio
+ 84, // Doduo
+ 232, // Donphan
+ 148, // Dragonair
+ 149, // Dragonite
+ 147, // Dratini
+ 96, // Drowzee
+ 51, // Dugtrio
+ 206, // Dunsparce
+ 356, // Dusclops
+ 355, // Duskull
+ 269, // Dustox
+ 133, // Eevee
+ 23, // Ekans
+ 125, // Electabuzz
+ 309, // Electrike
+ 101, // Electrode
+ 239, // Elekid
+ 244, // Entei
+ 196, // Espeon
+ 102, // Exeggcute
+ 103, // Exeggutor
+ 295, // Exploud
+ 83, // Farfetchd
+ 22, // Fearow
+ 349, // Feebas
+ 160, // Feraligatr
+ 180, // Flaaffy
+ 136, // Flareon
+ 330, // Flygon
+ 205, // Forretress
+ 162, // Furret
+ 282, // Gardevoir
+ 92, // Gastly
+ 94, // Gengar
+ 74, // Geodude
+ 203, // Girafarig
+ 362, // Glalie
+ 207, // Gligar
+ 44, // Gloom
+ 42, // Golbat
+ 118, // Goldeen
+ 55, // Golduck
+ 76, // Golem
+ 368, // Gorebyss
+ 210, // Granbull
+ 75, // Graveler
+ 88, // Grimer
+ 383, // Groudon
+ 253, // Grovyle
+ 58, // Growlithe
+ 326, // Grumpig
+ 316, // Gulpin
+ 130, // Gyarados
+ 297, // Hariyama
+ 93, // Haunter
+ 214, // Heracross
+ 107, // Hitmonchan
+ 106, // Hitmonlee
+ 237, // Hitmontop
+ 250, // Ho-Oh
+ 163, // Hoothoot
+ 187, // Hoppip
+ 116, // Horsea
+ 229, // Houndoom
+ 228, // Houndour
+ 367, // Huntail
+ 97, // Hypno
+ 174, // Igglybuff
+ 314, // Illumise
+ 2, // Ivysaur
+ 39, // Jigglypuff
+ 385, // Jirachi
+ 135, // Jolteon
+ 189, // Jumpluff
+ 124, // Jynx
+ 140, // Kabuto
+ 141, // Kabutops
+ 64, // Kadabra
+ 14, // Kakuna
+ 115, // Kangaskhan
+ 352, // Kecleon
+ 230, // Kingdra
+ 99, // Kingler
+ 281, // Kirlia
+ 109, // Koffing
+ 98, // Krabby
+ 382, // Kyogre
+ 305, // Lairon
+ 171, // Lanturn
+ 131, // Lapras
+ 246, // Larvitar
+ 380, // Latias
+ 381, // Latios
+ 166, // Ledian
+ 165, // Ledyba
+ 108, // Lickitung
+ 345, // Lileep
+ 264, // Linoone
+ 271, // Lombre
+ 270, // Lotad
+ 294, // Loudred
+ 272, // Ludicolo
+ 249, // Lugia
+ 337, // Lunatone
+ 370, // Luvdisc
+ 68, // Machamp
+ 67, // Machoke
+ 66, // Machop
+ 240, // Magby
+ 219, // Magcargo
+ 129, // Magikarp
+ 126, // Magmar
+ 81, // Magnemite
+ 82, // Magneton
+ 296, // Makuhita
+ 310, // Manectric
+ 56, // Mankey
+ 226, // Mantine
+ 179, // Mareep
+ 183, // Marill
+ 105, // Marowak
+ 259, // Marshtomp
+ 284, // Masquerain
+ 303, // Mawile
+ 308, // Medicham
+ 307, // Meditite
+ 154, // Meganium
+ 52, // Meowth
+ 376, // Metagross
+ 375, // Metang
+ 11, // Metapod
+ 151, // Mew
+ 150, // Mewtwo
+ 262, // Mightyena
+ 350, // Milotic
+ 241, // Miltank
+ 312, // Minun
+ 200, // Misdreavus
+ 146, // Moltres
+ 122, // Mr. mime
+ 258, // Mudkip
+ 89, // Muk
+ 198, // Murkrow
+ 177, // Natu
+ 34, // Nidoking
+ 31, // Nidoqueen
+ 29, // Nidoran?
+ 32, // Nidoran?
+ 30, // Nidorina
+ 33, // Nidorino
+ 290, // Nincada
+ 38, // Ninetales
+ 291, // Ninjask
+ 164, // Noctowl
+ 299, // Nosepass
+ 322, // Numel
+ 274, // Nuzleaf
+ 224, // Octillery
+ 43, // Oddish
+ 138, // Omanyte
+ 139, // Omastar
+ 95, // Onix
+ 46, // Paras
+ 47, // Parasect
+ 279, // Pelipper
+ 53, // Persian
+ 231, // Phanpy
+ 172, // Pichu
+ 18, // Pidgeot
+ 17, // Pidgeotto
+ 16, // Pidgey
+ 25, // Pikachu
+ 221, // Piloswine
+ 204, // Pineco
+ 127, // Pinsir
+ 311, // Plusle
+ 186, // Politoed
+ 60, // Poliwag
+ 61, // Poliwhirl
+ 62, // Poliwrath
+ 77, // Ponyta
+ 261, // Poochyena
+ 137, // Porygon
+ 233, // Porygon2
+ 57, // Primeape
+ 54, // Psyduck
+ 247, // Pupitar
+ 195, // Quagsire
+ 156, // Quilava
+ 211, // Qwilfish
+ 26, // Raichu
+ 243, // Raikou
+ 280, // Ralts
+ 78, // Rapidash
+ 20, // Raticate
+ 19, // Rattata
+ 384, // Rayquaza
+ 378, // Regice
+ 377, // Regirock
+ 379, // Registeel
+ 369, // Relicanth
+ 223, // Remoraid
+ 112, // Rhydon
+ 111, // Rhyhorn
+ 315, // Roselia
+ 302, // Sableye
+ 373, // Salamence
+ 27, // Sandshrew
+ 28, // Sandslash
+ 254, // Sceptile
+ 212, // Scizor
+ 123, // Scyther
+ 117, // Seadra
+ 119, // Seaking
+ 364, // Sealeo
+ 273, // Seedot
+ 86, // Seel
+ 161, // Sentret
+ 336, // Seviper
+ 319, // Sharpedo
+ 292, // Shedinja
+ 372, // Shelgon
+ 90, // Shellder
+ 275, // Shiftry
+ 285, // Shroomish
+ 213, // Shuckle
+ 353, // Shuppet
+ 266, // Silcoon
+ 227, // Skarmory
+ 188, // Skiploom
+ 300, // Skitty
+ 289, // Slaking
+ 287, // Slakoth
+ 80, // Slowbro
+ 199, // Slowking
+ 79, // Slowpoke
+ 218, // Slugma
+ 235, // Smeargle
+ 238, // Smoochum
+ 215, // Sneasel
+ 143, // Snorlax
+ 361, // Snorunt
+ 209, // Snubbull
+ 338, // Solrock
+ 21, // Spearow
+ 363, // Spheal
+ 167, // Spinarak
+ 327, // Spinda
+ 325, // Spoink
+ 7, // Squirtle
+ 234, // Stantler
+ 121, // Starmie
+ 120, // Staryu
+ 208, // Steelix
+ 185, // Sudowoodo
+ 245, // Suicune
+ 192, // Sunflora
+ 191, // Sunkern
+ 283, // Surskit
+ 333, // Swablu
+ 317, // Swalot
+ 260, // Swampert
+ 277, // Swellow
+ 220, // Swinub
+ 276, // Taillow
+ 114, // Tangela
+ 128, // Tauros
+ 216, // Teddiursa
+ 72, // Tentacool
+ 73, // Tentacruel
+ 175, // Togepi
+ 176, // Togetic
+ 255, // Torchic
+ 324, // Torkoal
+ 158, // Totodile
+ 328, // Trapinch
+ 252, // Treecko
+ 357, // Tropius
+ 157, // Typhlosion
+ 248, // Tyranitar
+ 236, // Tyrogue
+ 197, // Umbreon
+ 201, // Unown
+ 217, // Ursaring
+ 134, // Vaporeon
+ 49, // Venomoth
+ 48, // Venonat
+ 3, // Venusaur
+ 329, // Vibrava
+ 71, // Victreebel
+ 288, // Vigoroth
+ 45, // Vileplume
+ 313, // Volbeat
+ 100, // Voltorb
+ 37, // Vulpix
+ 320, // Wailmer
+ 321, // Wailord
+ 365, // Walrein
+ 8, // Wartortle
+ 13, // Weedle
+ 70, // Weepinbell
+ 110, // Weezing
+ 340, // Whiscash
+ 293, // Whismur
+ 40, // Wigglytuff
+ 278, // Wingull
+ 202, // Wobbuffet
+ 194, // Wooper
+ 265, // Wurmple
+ 360, // Wynaut
+ 178, // Xatu
+ 193, // Yanma
+ 335, // Zangoose
+ 145, // Zapdos
+ 263, // Zigzagoon
+ 41, // Zubat
+};
+static const u16 gPokedexOrder_Weight[] =
+{
+ 92, // Gastly
+ 93, // Haunter
+ 187, // Hoppip
+ 50, // Diglett
+ 351, // Castform
+ 109, // Koffing
+ 174, // Igglybuff
+ 200, // Misdreavus
+ 358, // Chimecho
+ 188, // Skiploom
+ 385, // Jirachi
+ 333, // Swablu
+ 292, // Shedinja
+ 175, // Togepi
+ 283, // Surskit
+ 16, // Pidgey
+ 191, // Sunkern
+ 339, // Barboach
+ 172, // Pichu
+ 298, // Azurill
+ 315, // Roselia
+ 177, // Natu
+ 21, // Spearow
+ 198, // Murkrow
+ 353, // Shuppet
+ 276, // Taillow
+ 102, // Exeggcute
+ 255, // Torchic
+ 270, // Lotad
+ 10, // Caterpie
+ 189, // Jumpluff
+ 173, // Cleffa
+ 13, // Weedle
+ 176, // Togetic
+ 147, // Dratini
+ 19, // Rattata
+ 284, // Masquerain
+ 265, // Wurmple
+ 211, // Qwilfish
+ 151, // Mew
+ 90, // Shellder
+ 273, // Seedot
+ 132, // Ditto
+ 69, // Bellsprout
+ 311, // Plusle
+ 52, // Meowth
+ 312, // Minun
+ 285, // Shroomish
+ 251, // Celebi
+ 222, // Corsola
+ 252, // Treecko
+ 327, // Spinda
+ 201, // Unown
+ 46, // Paras
+ 43, // Oddish
+ 39, // Jigglypuff
+ 290, // Nincada
+ 182, // Bellossom
+ 81, // Magnemite
+ 25, // Pikachu
+ 238, // Smoochum
+ 161, // Sentret
+ 70, // Weepinbell
+ 152, // Chikorita
+ 220, // Swinub
+ 133, // Eevee
+ 98, // Krabby
+ 104, // Cubone
+ 280, // Ralts
+ 1, // Bulbasaur
+ 23, // Ekans
+ 29, // Nidoran?
+ 204, // Pineco
+ 349, // Feebas
+ 138, // Omanyte
+ 41, // Zubat
+ 35, // Clefairy
+ 258, // Mudkip
+ 209, // Snubbull
+ 179, // Mareep
+ 155, // Cyndaquil
+ 116, // Horsea
+ 4, // Charmander
+ 192, // Sunflora
+ 183, // Marill
+ 194, // Wooper
+ 167, // Spinarak
+ 44, // Gloom
+ 370, // Luvdisc
+ 216, // Teddiursa
+ 32, // Nidoran?
+ 7, // Squirtle
+ 278, // Wingull
+ 158, // Totodile
+ 110, // Weezing
+ 37, // Vulpix
+ 11, // Metapod
+ 266, // Silcoon
+ 129, // Magikarp
+ 14, // Kakuna
+ 316, // Gulpin
+ 100, // Voltorb
+ 165, // Ledyba
+ 228, // Houndour
+ 300, // Skitty
+ 302, // Sableye
+ 307, // Meditite
+ 341, // Corphish
+ 190, // Aipom
+ 268, // Cascoon
+ 303, // Mawile
+ 140, // Kabuto
+ 40, // Wigglytuff
+ 27, // Sandshrew
+ 223, // Remoraid
+ 291, // Ninjask
+ 170, // Chinchou
+ 60, // Poliwag
+ 347, // Anorith
+ 49, // Venomoth
+ 354, // Banette
+ 2, // Ivysaur
+ 180, // Flaaffy
+ 261, // Poochyena
+ 360, // Wynaut
+ 206, // Dunsparce
+ 178, // Xatu
+ 355, // Duskull
+ 83, // Farfetchd
+ 328, // Trapinch
+ 118, // Goldeen
+ 309, // Electrike
+ 329, // Vibrava
+ 71, // Victreebel
+ 153, // Bayleef
+ 225, // Delibird
+ 293, // Whismur
+ 148, // Dragonair
+ 361, // Snorunt
+ 263, // Zigzagoon
+ 314, // Illumise
+ 313, // Volbeat
+ 20, // Raticate
+ 45, // Vileplume
+ 156, // Quilava
+ 5, // Charmeleon
+ 58, // Growlithe
+ 256, // Combusken
+ 66, // Machop
+ 63, // Abra
+ 33, // Nidorino
+ 54, // Psyduck
+ 277, // Swellow
+ 38, // Ninetales
+ 30, // Nidorina
+ 61, // Poliwhirl
+ 74, // Geodude
+ 281, // Kirlia
+ 213, // Shuckle
+ 334, // Altaria
+ 318, // Carvanha
+ 236, // Tyrogue
+ 163, // Hoothoot
+ 240, // Magby
+ 343, // Baltoy
+ 253, // Grovyle
+ 352, // Kecleon
+ 171, // Lanturn
+ 8, // Wartortle
+ 368, // Gorebyss
+ 369, // Relicanth
+ 239, // Elekid
+ 340, // Whiscash
+ 345, // Lileep
+ 322, // Numel
+ 287, // Slakoth
+ 135, // Jolteon
+ 159, // Croconaw
+ 136, // Flareon
+ 117, // Seadra
+ 196, // Espeon
+ 367, // Huntail
+ 197, // Umbreon
+ 259, // Marshtomp
+ 274, // Nuzleaf
+ 215, // Sneasel
+ 56, // Mankey
+ 279, // Pelipper
+ 267, // Beautifly
+ 224, // Octillery
+ 184, // Azumarill
+ 202, // Wobbuffet
+ 134, // Vaporeon
+ 28, // Sandslash
+ 47, // Parasect
+ 15, // Beedrill
+ 89, // Muk
+ 17, // Pidgeotto
+ 88, // Grimer
+ 26, // Raichu
+ 77, // Ponyta
+ 125, // Electabuzz
+ 48, // Venonat
+ 325, // Spoink
+ 356, // Dusclops
+ 308, // Medicham
+ 269, // Dustox
+ 53, // Persian
+ 12, // Butterfree
+ 57, // Primeape
+ 96, // Drowzee
+ 162, // Furret
+ 233, // Porygon2
+ 271, // Lombre
+ 264, // Linoone
+ 301, // Delcatty
+ 342, // Crawdaunt
+ 51, // Dugtrio
+ 168, // Ariados
+ 231, // Phanpy
+ 186, // Politoed
+ 120, // Staryu
+ 113, // Chansey
+ 139, // Omastar
+ 114, // Tangela
+ 218, // Slugma
+ 229, // Houndoom
+ 166, // Ledian
+ 79, // Slowpoke
+ 137, // Porygon
+ 262, // Mightyena
+ 193, // Yanma
+ 22, // Fearow
+ 185, // Sudowoodo
+ 119, // Seaking
+ 286, // Breloom
+ 84, // Doduo
+ 18, // Pidgeot
+ 363, // Spheal
+ 36, // Clefable
+ 380, // Latias
+ 310, // Manectric
+ 335, // Zangoose
+ 141, // Kabutops
+ 94, // Gengar
+ 294, // Loudred
+ 124, // Jynx
+ 164, // Noctowl
+ 203, // Girafarig
+ 371, // Bagon
+ 126, // Magmar
+ 105, // Marowak
+ 72, // Tentacool
+ 288, // Vigoroth
+ 242, // Blissey
+ 359, // Absol
+ 65, // Alakazam
+ 237, // Hitmontop
+ 282, // Gardevoir
+ 210, // Granbull
+ 106, // Hitmonlee
+ 107, // Hitmonchan
+ 227, // Skarmory
+ 331, // Cacnea
+ 257, // Blaziken
+ 254, // Sceptile
+ 336, // Seviper
+ 366, // Clamperl
+ 145, // Zapdos
+ 214, // Heracross
+ 62, // Poliwrath
+ 122, // Mr. mime
+ 127, // Pinsir
+ 272, // Ludicolo
+ 73, // Tentacruel
+ 42, // Golbat
+ 219, // Magcargo
+ 144, // Articuno
+ 221, // Piloswine
+ 123, // Scyther
+ 64, // Kadabra
+ 235, // Smeargle
+ 142, // Aerodactyl
+ 275, // Shiftry
+ 99, // Kingler
+ 31, // Nidoqueen
+ 82, // Magneton
+ 304, // Aron
+ 381, // Latios
+ 146, // Moltres
+ 346, // Cradily
+ 386, // Deoxys
+ 181, // Ampharos
+ 34, // Nidoking
+ 207, // Gligar
+ 24, // Arbok
+ 108, // Lickitung
+ 101, // Electrode
+ 348, // Armaldo
+ 67, // Machoke
+ 234, // Stantler
+ 326, // Grumpig
+ 246, // Larvitar
+ 169, // Crobat
+ 195, // Quagsire
+ 241, // Miltank
+ 97, // Hypno
+ 55, // Golduck
+ 332, // Cacturne
+ 80, // Slowbro
+ 157, // Typhlosion
+ 199, // Slowking
+ 115, // Kangaskhan
+ 121, // Starmie
+ 317, // Swalot
+ 324, // Torkoal
+ 260, // Swampert
+ 330, // Flygon
+ 295, // Exploud
+ 85, // Dodrio
+ 9, // Blastoise
+ 296, // Makuhita
+ 364, // Sealeo
+ 128, // Tauros
+ 319, // Sharpedo
+ 160, // Feraligatr
+ 86, // Seel
+ 6, // Charizard
+ 78, // Rapidash
+ 374, // Beldum
+ 299, // Nosepass
+ 3, // Venusaur
+ 357, // Tropius
+ 154, // Meganium
+ 373, // Salamence
+ 75, // Graveler
+ 344, // Claydol
+ 372, // Shelgon
+ 111, // Rhyhorn
+ 212, // Scizor
+ 87, // Dewgong
+ 112, // Rhydon
+ 232, // Donphan
+ 103, // Exeggutor
+ 305, // Lairon
+ 150, // Mewtwo
+ 217, // Ursaring
+ 205, // Forretress
+ 68, // Machamp
+ 320, // Wailmer
+ 289, // Slaking
+ 91, // Cloyster
+ 365, // Walrein
+ 247, // Pupitar
+ 230, // Kingdra
+ 338, // Solrock
+ 59, // Arcanine
+ 350, // Milotic
+ 337, // Lunatone
+ 378, // Regice
+ 243, // Raikou
+ 245, // Suicune
+ 244, // Entei
+ 250, // Ho-Oh
+ 248, // Tyranitar
+ 375, // Metang
+ 379, // Registeel
+ 384, // Rayquaza
+ 95, // Onix
+ 149, // Dragonite
+ 249, // Lugia
+ 131, // Lapras
+ 323, // Camerupt
+ 226, // Mantine
+ 377, // Regirock
+ 130, // Gyarados
+ 297, // Hariyama
+ 362, // Glalie
+ 76, // Golem
+ 382, // Kyogre
+ 306, // Aggron
+ 321, // Wailord
+ 208, // Steelix
+ 143, // Snorlax
+ 376, // Metagross
+ 383, // Groudon
+};
+static const u16 gPokedexOrder_Height[] =
+{
+ 50, // Diglett
+ 298, // Azurill
+ 177, // Natu
+ 13, // Weedle
+ 172, // Pichu
+ 173, // Cleffa
+ 175, // Togepi
+ 351, // Castform
+ 174, // Igglybuff
+ 10, // Caterpie
+ 276, // Taillow
+ 132, // Ditto
+ 133, // Eevee
+ 315, // Roselia
+ 21, // Spearow
+ 16, // Pidgey
+ 191, // Sunkern
+ 90, // Shellder
+ 19, // Rattata
+ 81, // Magnemite
+ 46, // Paras
+ 265, // Wurmple
+ 385, // Jirachi
+ 104, // Cubone
+ 258, // Mudkip
+ 194, // Wooper
+ 116, // Horsea
+ 52, // Meowth
+ 29, // Nidoran?
+ 220, // Swinub
+ 151, // Mew
+ 333, // Swablu
+ 304, // Aron
+ 311, // Plusle
+ 312, // Minun
+ 102, // Exeggcute
+ 25, // Pikachu
+ 182, // Bellossom
+ 316, // Gulpin
+ 263, // Zigzagoon
+ 285, // Shroomish
+ 138, // Omanyte
+ 331, // Cacnea
+ 98, // Krabby
+ 280, // Ralts
+ 187, // Hoppip
+ 255, // Torchic
+ 366, // Clamperl
+ 74, // Geodude
+ 183, // Marill
+ 339, // Barboach
+ 238, // Smoochum
+ 100, // Voltorb
+ 290, // Nincada
+ 302, // Sableye
+ 198, // Murkrow
+ 211, // Qwilfish
+ 7, // Squirtle
+ 252, // Treecko
+ 343, // Baltoy
+ 43, // Oddish
+ 270, // Lotad
+ 39, // Jigglypuff
+ 283, // Surskit
+ 155, // Cyndaquil
+ 140, // Kabuto
+ 264, // Linoone
+ 324, // Torkoal
+ 32, // Nidoran?
+ 167, // Spinarak
+ 56, // Mankey
+ 273, // Seedot
+ 261, // Poochyena
+ 231, // Phanpy
+ 201, // Unown
+ 170, // Chinchou
+ 233, // Porygon2
+ 60, // Poliwag
+ 371, // Bagon
+ 349, // Feebas
+ 353, // Shuppet
+ 158, // Totodile
+ 251, // Celebi
+ 360, // Wynaut
+ 27, // Sandshrew
+ 358, // Chimecho
+ 370, // Luvdisc
+ 228, // Houndour
+ 266, // Silcoon
+ 309, // Electrike
+ 4, // Charmander
+ 307, // Meditite
+ 278, // Wingull
+ 223, // Remoraid
+ 341, // Corphish
+ 222, // Corsola
+ 314, // Illumise
+ 209, // Snubbull
+ 37, // Vulpix
+ 246, // Larvitar
+ 374, // Beldum
+ 293, // Whismur
+ 204, // Pineco
+ 239, // Elekid
+ 35, // Clefairy
+ 213, // Shuckle
+ 216, // Teddiursa
+ 14, // Kakuna
+ 300, // Skitty
+ 176, // Togetic
+ 118, // Goldeen
+ 303, // Mawile
+ 179, // Mareep
+ 188, // Skiploom
+ 109, // Koffing
+ 51, // Dugtrio
+ 268, // Cascoon
+ 322, // Numel
+ 347, // Anorith
+ 313, // Volbeat
+ 163, // Hoothoot
+ 328, // Trapinch
+ 325, // Spoink
+ 11, // Metapod
+ 69, // Bellsprout
+ 361, // Snorunt
+ 20, // Raticate
+ 259, // Marshtomp
+ 277, // Swellow
+ 240, // Magby
+ 58, // Growlithe
+ 200, // Misdreavus
+ 1, // Bulbasaur
+ 236, // Tyrogue
+ 218, // Slugma
+ 287, // Slakoth
+ 281, // Kirlia
+ 190, // Aipom
+ 135, // Jolteon
+ 30, // Nidorina
+ 184, // Azumarill
+ 292, // Shedinja
+ 66, // Machop
+ 291, // Ninjask
+ 284, // Masquerain
+ 355, // Duskull
+ 192, // Sunflora
+ 189, // Jumpluff
+ 120, // Staryu
+ 180, // Flaaffy
+ 363, // Spheal
+ 54, // Psyduck
+ 219, // Magcargo
+ 83, // Farfetchd
+ 41, // Zubat
+ 137, // Porygon
+ 161, // Sentret
+ 318, // Carvanha
+ 44, // Gloom
+ 26, // Raichu
+ 129, // Magikarp
+ 215, // Sneasel
+ 305, // Lairon
+ 256, // Combusken
+ 224, // Octillery
+ 33, // Nidorino
+ 136, // Flareon
+ 225, // Delibird
+ 72, // Tentacool
+ 63, // Abra
+ 253, // Grovyle
+ 340, // Whiscash
+ 156, // Quilava
+ 196, // Espeon
+ 88, // Grimer
+ 152, // Chikorita
+ 326, // Grumpig
+ 299, // Nosepass
+ 53, // Persian
+ 262, // Mightyena
+ 48, // Venonat
+ 82, // Magneton
+ 77, // Ponyta
+ 296, // Makuhita
+ 337, // Lunatone
+ 28, // Sandslash
+ 96, // Drowzee
+ 114, // Tangela
+ 57, // Primeape
+ 165, // Ledyba
+ 40, // Wigglytuff
+ 47, // Parasect
+ 139, // Omastar
+ 294, // Loudred
+ 8, // Wartortle
+ 75, // Graveler
+ 197, // Umbreon
+ 345, // Lileep
+ 61, // Poliwhirl
+ 134, // Vaporeon
+ 15, // Beedrill
+ 105, // Marowak
+ 70, // Weepinbell
+ 369, // Relicanth
+ 111, // Rhyhorn
+ 2, // Ivysaur
+ 352, // Kecleon
+ 274, // Nuzleaf
+ 267, // Beautifly
+ 17, // Pidgeotto
+ 168, // Ariados
+ 86, // Seel
+ 186, // Politoed
+ 159, // Croconaw
+ 113, // Chansey
+ 354, // Banette
+ 232, // Donphan
+ 121, // Starmie
+ 5, // Charmeleon
+ 221, // Piloswine
+ 12, // Butterfree
+ 329, // Vibrava
+ 125, // Electabuzz
+ 342, // Crawdaunt
+ 301, // Delcatty
+ 334, // Altaria
+ 372, // Shelgon
+ 38, // Ninetales
+ 207, // Gligar
+ 364, // Sealeo
+ 327, // Spinda
+ 247, // Pupitar
+ 79, // Slowpoke
+ 338, // Solrock
+ 241, // Miltank
+ 22, // Fearow
+ 45, // Vileplume
+ 89, // Muk
+ 205, // Forretress
+ 185, // Sudowoodo
+ 359, // Absol
+ 193, // Yanma
+ 269, // Dustox
+ 108, // Lickitung
+ 235, // Smeargle
+ 171, // Lanturn
+ 101, // Electrode
+ 271, // Lombre
+ 286, // Breloom
+ 153, // Bayleef
+ 117, // Seadra
+ 110, // Weezing
+ 279, // Pelipper
+ 375, // Metang
+ 31, // Nidoqueen
+ 332, // Cacturne
+ 275, // Shiftry
+ 308, // Medicham
+ 335, // Zangoose
+ 141, // Kabutops
+ 99, // Kingler
+ 64, // Kadabra
+ 119, // Seaking
+ 36, // Clefable
+ 126, // Magmar
+ 202, // Wobbuffet
+ 92, // Gastly
+ 122, // Mr. mime
+ 62, // Poliwrath
+ 128, // Tauros
+ 380, // Latias
+ 181, // Ampharos
+ 288, // Vigoroth
+ 166, // Ledian
+ 76, // Golem
+ 365, // Walrein
+ 84, // Doduo
+ 229, // Houndoom
+ 34, // Nidoking
+ 124, // Jynx
+ 107, // Hitmonchan
+ 234, // Stantler
+ 210, // Granbull
+ 237, // Hitmontop
+ 195, // Quagsire
+ 344, // Claydol
+ 260, // Swampert
+ 242, // Blissey
+ 272, // Ludicolo
+ 295, // Exploud
+ 206, // Dunsparce
+ 127, // Pinsir
+ 91, // Cloyster
+ 67, // Machoke
+ 203, // Girafarig
+ 18, // Pidgeot
+ 178, // Xatu
+ 346, // Cradily
+ 106, // Hitmonlee
+ 49, // Venomoth
+ 94, // Gengar
+ 214, // Heracross
+ 362, // Glalie
+ 123, // Scyther
+ 373, // Salamence
+ 310, // Manectric
+ 348, // Armaldo
+ 65, // Alakazam
+ 97, // Hypno
+ 164, // Noctowl
+ 73, // Tentacruel
+ 356, // Dusclops
+ 145, // Zapdos
+ 42, // Golbat
+ 376, // Metagross
+ 282, // Gardevoir
+ 9, // Blastoise
+ 80, // Slowbro
+ 93, // Haunter
+ 68, // Machamp
+ 377, // Regirock
+ 317, // Swalot
+ 254, // Sceptile
+ 227, // Skarmory
+ 55, // Golduck
+ 386, // Deoxys
+ 71, // Victreebel
+ 78, // Rapidash
+ 6, // Charizard
+ 367, // Huntail
+ 87, // Dewgong
+ 144, // Articuno
+ 157, // Typhlosion
+ 142, // Aerodactyl
+ 368, // Gorebyss
+ 217, // Ursaring
+ 154, // Meganium
+ 378, // Regice
+ 212, // Scizor
+ 230, // Kingdra
+ 147, // Dratini
+ 85, // Dodrio
+ 319, // Sharpedo
+ 169, // Crobat
+ 162, // Furret
+ 59, // Arcanine
+ 243, // Raikou
+ 257, // Blaziken
+ 323, // Camerupt
+ 112, // Rhydon
+ 379, // Registeel
+ 23, // Ekans
+ 330, // Flygon
+ 357, // Tropius
+ 381, // Latios
+ 245, // Suicune
+ 146, // Moltres
+ 3, // Venusaur
+ 103, // Exeggutor
+ 199, // Slowking
+ 248, // Tyranitar
+ 289, // Slaking
+ 320, // Wailmer
+ 150, // Mewtwo
+ 306, // Aggron
+ 143, // Snorlax
+ 226, // Mantine
+ 244, // Entei
+ 149, // Dragonite
+ 115, // Kangaskhan
+ 297, // Hariyama
+ 160, // Feraligatr
+ 131, // Lapras
+ 336, // Seviper
+ 24, // Arbok
+ 383, // Groudon
+ 250, // Ho-Oh
+ 148, // Dragonair
+ 382, // Kyogre
+ 249, // Lugia
+ 350, // Milotic
+ 130, // Gyarados
+ 384, // Rayquaza
+ 95, // Onix
+ 208, // Steelix
+ 321, // Wailord
+};
diff --git a/src/menu.c b/src/menu.c
index 0d5c0b7d2..d84a4c3c5 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -629,7 +629,7 @@ void MenuPrint_RightAligned(u8 *str, u8 left, u8 top)
sub_8004D38(gMenuWindowPtr, str, gMenuTextTileOffset, left, top);
}
-void sub_8072B80(u8 *a1, u8 a2, u8 a3, u8 *a4)
+void sub_8072B80(const u8 *a1, u8 a2, u8 a3, const u8 *a4)
{
u8 buffer[64];
u8 width = GetStringWidth(gMenuWindowPtr, a4);
diff --git a/src/pokedex.c b/src/pokedex.c
index 3d8b152ae..be6ef03a9 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -2,28 +2,77 @@
#include "gba/m4a_internal.h"
#include "pokedex.h"
#include "asm.h"
+#include "data2.h"
#include "decompress.h"
#include "event_data.h"
+#include "graphics.h"
#include "m4a.h"
#include "main.h"
#include "menu.h"
+#include "menu_cursor.h"
#include "palette.h"
#include "rng.h"
#include "songs.h"
#include "sound.h"
+#include "species.h"
#include "string_util.h"
#include "strings.h"
#include "task.h"
#include "trig.h"
-// I'm #define-ing these just for now so I can keep using the old unkXXX member names
-#define unk60E selectedPokemon
-#define unk612 dexMode
-#define unk616 dexOrder
-#define unk64D selectedScreen
-#define unk650 menuIsOpen
-#define unk652 menuCursorPos
-#define unk654 menuY
+#define NATIONAL_DEX_COUNT 386
+
+struct PokedexListItem
+{
+ u16 dexNum;
+ u16 seen:1;
+ u16 owned:1;
+};
+
+struct PokedexView
+{
+ struct PokedexListItem unk0[NATIONAL_DEX_COUNT];
+ u16 unk608;
+ u8 unk60A_1:1;
+ u8 unk60A_2:1;
+ u8 unk60B;
+ u16 pokemonListCount;
+ u16 selectedPokemon;
+ u16 unk610;
+ u16 dexMode;
+ u16 unk614;
+ u16 dexOrder;
+ u16 unk618;
+ u16 unk61A;
+ u16 unk61C;
+ u16 unk61E[4];
+ u16 selectedMonSpriteId;
+ u16 unk628;
+ u16 unk62A;
+ u8 unk62C;
+ u8 unk62D;
+ u8 unk62E;
+ u8 unk62F;
+ s16 unk630;
+ s16 unk632;
+ u16 unk634;
+ u16 unk636;
+ u16 unk638;
+ u16 unk63A[4];
+ u8 filler642[8];
+ u8 unk64A;
+ u8 unk64B;
+ u8 unk64C_1:1;
+ u8 selectedScreen;
+ u8 descriptionPageNum;
+ u8 unk64F;
+ u8 menuIsOpen; //menuIsOpen
+ u8 unk651;
+ u16 menuCursorPos; //Menu cursor position
+ s16 menuY; //Menu Y position (inverted because we use REG_BG0VOFS for this)
+ u8 unk656[8];
+ u8 unk65E[8];
+};
enum
{
@@ -44,8 +93,8 @@ struct PokedexEntry
/*0x00*/ u8 categoryName[12];
/*0x0C*/ u16 height; //in decimeters
/*0x0E*/ u16 weight; //in hectograms
- /*0x10*/ u8 *descriptionPage1;
- /*0x14*/ u8 *descriptionPage2;
+ /*0x10*/ const u8 *descriptionPage1;
+ /*0x14*/ const u8 *descriptionPage2;
/*0x18*/ u16 unused;
/*0x1A*/ u16 pokemonScale;
/*0x1C*/ u16 pokemonOffset;
@@ -53,45 +102,75 @@ struct PokedexEntry
/*0x20*/ u16 trainerOffset;
}; /*size = 0x24*/
+struct UnknownStruct2
+{
+ const u8 *text1;
+ const u8 *text2;
+};
+
+struct UnknownStruct1
+{
+ const struct UnknownStruct2 *unk0;
+ u8 unk4;
+ u8 unk5;
+ u16 unk6;
+};
+
+struct UnknownStruct3
+{
+ const u8 *text;
+ u8 unk4;
+ u8 unk5;
+ u8 unk6;
+};
+
+struct UnknownStruct4
+{
+ const u8 *text;
+ u8 unk4;
+ u8 unk5;
+ u8 unk6;
+ u8 unk7;
+ u8 unk8;
+ u8 unk9;
+};
+
extern struct MusicPlayerInfo gMPlay_BGM;
extern u8 gReservedSpritePaletteCount;
extern struct PokedexView *gPokedexView;
+extern struct SpriteTemplate gUnknown_02024E8C;
extern u16 gUnknown_0202FFB8;
extern u8 gUnknown_0202FFBA;
-extern u8 gUnknown_03005CE8;
-extern u8 gPokedexMenu_Gfx[];
-extern u8 gUnknown_08E96738[];
-extern u8 gUnknown_08E9C6DC[];
-extern u8 gUnknown_08E96888[];
-extern u8 gUnknown_08E96994[];
-extern struct SpriteSheet gUnknown_083A05CC;
-extern struct SpritePalette gUnknown_083A05DC[];
-extern u8 gUnknown_0839FA7C[];
-extern u8 gUnknown_0839F67C[];
-extern u8 gPokedexMenu_Pal[];
-extern u8 gUnknown_0839F73C[];
-extern u8 gUnknown_083A05EC[];
-extern u8 gUnknown_083A05F1[];
-extern struct SpriteTemplate gSpriteTemplate_83A053C;
-extern struct SpriteTemplate gSpriteTemplate_83A0524;
-extern struct SpriteTemplate gSpriteTemplate_83A0554;
-extern struct SpriteTemplate gSpriteTemplate_83A056C;
-extern struct SpriteTemplate gSpriteTemplate_83A0584;
-extern struct SpriteTemplate gSpriteTemplate_83A059C;
-extern struct SpriteTemplate gSpriteTemplate_83A05B4;
extern struct PokedexListItem *gUnknown_0202FFBC;
+extern u8 gUnknown_03005CE8;
extern IntrCallback gUnknown_03005CEC;
-extern u8 gUnknown_08E96BD4[];
-extern u8 gUnknown_083A05F8[];
-extern u8 gUnknown_0839F8A0[];
-extern u8 gUnknown_0839F988[];
extern u8 gUnknown_03005E98;
-extern u8 gUnknown_083B4EC4[];
-extern u8 gUnknown_08E96ACC[];
-extern u8 gUnknown_08E96B58[];
-
-extern struct PokedexEntry gPokedexEntries[];
-
+extern const u8 gPokedexMenu_Gfx[];
+extern const u8 gUnknown_08E96738[];
+extern const u8 gUnknown_08E96888[];
+extern const u8 gUnknown_08E96994[];
+extern const u8 gUnknown_08E9C6DC[];
+extern const u8 gUnknown_08D00524[];
+extern const u8 gUnknown_08E96BD4[];
+extern const u8 gUnknown_08E96ACC[];
+extern const u8 gUnknown_08E96B58[];
+extern const u16 gPokedexMenu_Pal[];
+extern const u16 gPokedexMenu2_Pal[];
+extern const struct SpriteSheet gTrainerFrontPicTable[];
+extern const struct MonCoords gTrainerFrontPicCoords[];
+extern const struct PokedexEntry gPokedexEntries[];
+extern const struct BaseStats gBaseStats[];
+extern const u8 gPokedexMenuSearch_Gfx[];
+extern const u8 gUnknown_08E96D2C[];
+extern const u16 gPokedexMenuSearch_Pal[];
+extern const u8 gTypeNames[][7];
+extern const u8 gPokedexMenu2_Gfx[];
+
+extern u16 NationalPokedexNumToSpecies(u16);
+extern void ShowPokedexAreaScreen(u16 species, u8 *string);
+extern void sub_814AD7C(u8, u8);
+extern void sub_800D74C();
+extern const u16 *species_and_otid_get_pal(u16, u32, u32);
extern void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume);
extern bool8 BeginNormalPaletteFade(u32, s8, u8, u8, u16);
extern void remove_some_task(void);
@@ -100,14 +179,1123 @@ extern void DisableNationalPokedex(void);
extern void sub_805469C(void);
extern u16 HoennToNationalOrder(u16);
extern u16 NationalToHoennOrder(u16);
-extern u16 gPokedexOrder_Alphabetical[];
-extern u16 gPokedexOrder_Weight[];
-extern u16 gPokedexOrder_Height[];
-u16 NationalPokedexNumToSpecies(u16);
-
-// asm/pokedex_area_screen
-void ShowPokedexAreaScreen(u16 species, u8 *string);
+static const u16 sPokedexSearchPalette[] = INCBIN_U16("graphics/pokedex/search.gbapal");
+static const u16 sNationalPokedexPalette[] = INCBIN_U16("graphics/pokedex/national.gbapal");
+const u8 gEmptySpacce_839F7FC[0xA4] = {0};
+static const u8 gUnknown_0839F8A0[] = INCBIN_U8("graphics/pokedex/pokedex_cry_layout.bin.lz");
+static const u8 gUnknown_0839F988[] = INCBIN_U8("graphics/pokedex/pokedex_size_layout.bin.lz");
+static const u8 gUnknown_0839FA7C[] = INCBIN_U8("graphics/pokedex/noball.4bpp.lz");
+#include "data/pokedex_orders.h"
+static const struct OamData gOamData_83A0404 =
+{
+ .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,
+};
+static const struct OamData gOamData_83A040C =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 1,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const struct OamData gOamData_83A0414 =
+{
+ .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,
+};
+static const struct OamData gOamData_83A041C =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 2,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const struct OamData gOamData_83A0424 =
+{
+ .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,
+};
+static const struct OamData gOamData_83A042C =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 2,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd gSpriteAnim_83A0434[] =
+{
+ ANIMCMD_FRAME(3, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A043C[] =
+{
+ ANIMCMD_FRAME(1, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A0444[] =
+{
+ ANIMCMD_FRAME(16, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A044C[] =
+{
+ ANIMCMD_FRAME(32, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A0454[] =
+{
+ ANIMCMD_FRAME(64, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A045C[] =
+{
+ ANIMCMD_FRAME(96, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A0464[] =
+{
+ ANIMCMD_FRAME(128, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A046C[] =
+{
+ ANIMCMD_FRAME(160, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A0474[] =
+{
+ ANIMCMD_FRAME(192, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A047C[] =
+{
+ ANIMCMD_FRAME(224, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A0484[] =
+{
+ ANIMCMD_FRAME(226, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A048C[] =
+{
+ ANIMCMD_FRAME(228, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A0494[] =
+{
+ ANIMCMD_FRAME(230, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A049C[] =
+{
+ ANIMCMD_FRAME(232, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A04A4[] =
+{
+ ANIMCMD_FRAME(234, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A04AC[] =
+{
+ ANIMCMD_FRAME(236, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A04B4[] =
+{
+ ANIMCMD_FRAME(238, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A04BC[] =
+{
+ ANIMCMD_FRAME(240, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A04C4[] =
+{
+ ANIMCMD_FRAME(242, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_83A04CC[] =
+{
+ ANIMCMD_FRAME(4, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const gSpriteAnimTable_83A04D4[] =
+{
+ gSpriteAnim_83A0434,
+};
+static const union AnimCmd *const gSpriteAnimTable_83A04D8[] =
+{
+ gSpriteAnim_83A043C,
+};
+static const union AnimCmd *const gSpriteAnimTable_83A04DC[] =
+{
+ gSpriteAnim_83A0444,
+};
+static const union AnimCmd *const gSpriteAnimTable_83A04E0[] =
+{
+ gSpriteAnim_83A044C,
+ gSpriteAnim_83A0454,
+ gSpriteAnim_83A045C,
+ gSpriteAnim_83A0464,
+};
+static const union AnimCmd *const gSpriteAnimTable_83A04F0[] =
+{
+ gSpriteAnim_83A046C,
+ gSpriteAnim_83A0474,
+};
+static const union AnimCmd *const gSpriteAnimTable_83A04F8[] =
+{
+ gSpriteAnim_83A047C,
+ gSpriteAnim_83A0484,
+ gSpriteAnim_83A048C,
+ gSpriteAnim_83A0494,
+ gSpriteAnim_83A049C,
+ gSpriteAnim_83A04A4,
+ gSpriteAnim_83A04AC,
+ gSpriteAnim_83A04B4,
+ gSpriteAnim_83A04BC,
+ gSpriteAnim_83A04C4,
+};
+static const union AnimCmd *const gSpriteAnimTable_83A0520[] =
+{
+ gSpriteAnim_83A04CC,
+};
+static void sub_808EF38(struct Sprite *);
+static const struct SpriteTemplate gSpriteTemplate_83A0524 =
+{
+ .tileTag = 4096,
+ .paletteTag = 4096,
+ .oam = &gOamData_83A0404,
+ .anims = gSpriteAnimTable_83A04D4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_808EF38,
+};
+static void sub_808EF8C(struct Sprite *);
+static const struct SpriteTemplate gSpriteTemplate_83A053C =
+{
+ .tileTag = 4096,
+ .paletteTag = 4096,
+ .oam = &gOamData_83A040C,
+ .anims = gSpriteAnimTable_83A04D8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_808EF8C,
+};
+static void sub_808F08C(struct Sprite *);
+static const struct SpriteTemplate gSpriteTemplate_83A0554 =
+{
+ .tileTag = 4096,
+ .paletteTag = 4096,
+ .oam = &gOamData_83A0414,
+ .anims = gSpriteAnimTable_83A04E0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_808F08C,
+};
+static void sub_808F0B4(struct Sprite *);
+static const struct SpriteTemplate gSpriteTemplate_83A056C =
+{
+ .tileTag = 4096,
+ .paletteTag = 4096,
+ .oam = &gOamData_83A041C,
+ .anims = gSpriteAnimTable_83A04DC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_808F0B4,
+};
+static void sub_808ED94(struct Sprite *);
+static const struct SpriteTemplate gSpriteTemplate_83A0584 =
+{
+ .tileTag = 4096,
+ .paletteTag = 4096,
+ .oam = &gOamData_83A0424,
+ .anims = gSpriteAnimTable_83A04F0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_808ED94,
+};
+static const struct SpriteTemplate gSpriteTemplate_83A059C =
+{
+ .tileTag = 4096,
+ .paletteTag = 4096,
+ .oam = &gOamData_83A042C,
+ .anims = gSpriteAnimTable_83A04F8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_808ED94,
+};
+static void sub_808F168(struct Sprite *);
+static const struct SpriteTemplate gSpriteTemplate_83A05B4 =
+{
+ .tileTag = 4096,
+ .paletteTag = 4096,
+ .oam = &gOamData_83A042C,
+ .anims = gSpriteAnimTable_83A0520,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_808F168,
+};
+static const struct SpriteSheet gUnknown_083A05CC[] =
+{
+ {gPokedexMenu2_Gfx, 0x1F00, 0x1000},
+ {NULL, 0, 0},
+};
+static const struct SpritePalette gUnknown_083A05DC[] =
+{
+ {gPokedexMenu_Pal, 0x1000},
+ {NULL, 0},
+};
+static const u8 gUnknown_083A05EC[] = {2, 4, 8, 16, 32};
+static const u8 gUnknown_083A05F1[] = {16, 8, 4, 2, 1};
+const u8 gEmptySpacce_83A05F6[] = {0, 0}; // Padding, maybe?
+static const u8 gUnknown_083A05F8[] = _("");
+// TODO: include German entries
+#include "data/pokedex_entries_en.h"
+static const u16 gUnknown_083B4EC4[16] = {0};
+static const u8 *const sMonFootprintTable[] =
+{
+ gMonFootprint_Bulbasaur,
+ gMonFootprint_Bulbasaur,
+ gMonFootprint_Ivysaur,
+ gMonFootprint_Venusaur,
+ gMonFootprint_Charmander,
+ gMonFootprint_Charmeleon,
+ gMonFootprint_Charizard,
+ gMonFootprint_Squirtle,
+ gMonFootprint_Wartortle,
+ gMonFootprint_Blastoise,
+ gMonFootprint_Caterpie,
+ gMonFootprint_Metapod,
+ gMonFootprint_Butterfree,
+ gMonFootprint_Weedle,
+ gMonFootprint_Kakuna,
+ gMonFootprint_Beedrill,
+ gMonFootprint_Pidgey,
+ gMonFootprint_Pidgeotto,
+ gMonFootprint_Pidgeot,
+ gMonFootprint_Rattata,
+ gMonFootprint_Raticate,
+ gMonFootprint_Spearow,
+ gMonFootprint_Fearow,
+ gMonFootprint_Ekans,
+ gMonFootprint_Arbok,
+ gMonFootprint_Pikachu,
+ gMonFootprint_Raichu,
+ gMonFootprint_Sandshrew,
+ gMonFootprint_Sandslash,
+ gMonFootprint_NidoranF,
+ gMonFootprint_Nidorina,
+ gMonFootprint_Nidoqueen,
+ gMonFootprint_NidoranM,
+ gMonFootprint_Nidorino,
+ gMonFootprint_Nidoking,
+ gMonFootprint_Clefairy,
+ gMonFootprint_Clefable,
+ gMonFootprint_Vulpix,
+ gMonFootprint_Ninetales,
+ gMonFootprint_Jigglypuff,
+ gMonFootprint_Wigglytuff,
+ gMonFootprint_Zubat,
+ gMonFootprint_Golbat,
+ gMonFootprint_Oddish,
+ gMonFootprint_Gloom,
+ gMonFootprint_Vileplume,
+ gMonFootprint_Paras,
+ gMonFootprint_Parasect,
+ gMonFootprint_Venonat,
+ gMonFootprint_Venomoth,
+ gMonFootprint_Diglett,
+ gMonFootprint_Dugtrio,
+ gMonFootprint_Meowth,
+ gMonFootprint_Persian,
+ gMonFootprint_Psyduck,
+ gMonFootprint_Golduck,
+ gMonFootprint_Mankey,
+ gMonFootprint_Primeape,
+ gMonFootprint_Growlithe,
+ gMonFootprint_Arcanine,
+ gMonFootprint_Poliwag,
+ gMonFootprint_Poliwhirl,
+ gMonFootprint_Poliwrath,
+ gMonFootprint_Abra,
+ gMonFootprint_Kadabra,
+ gMonFootprint_Alakazam,
+ gMonFootprint_Machop,
+ gMonFootprint_Machoke,
+ gMonFootprint_Machamp,
+ gMonFootprint_Bellsprout,
+ gMonFootprint_Weepinbell,
+ gMonFootprint_Victreebel,
+ gMonFootprint_Tentacool,
+ gMonFootprint_Tentacruel,
+ gMonFootprint_Geodude,
+ gMonFootprint_Graveler,
+ gMonFootprint_Golem,
+ gMonFootprint_Ponyta,
+ gMonFootprint_Rapidash,
+ gMonFootprint_Slowpoke,
+ gMonFootprint_Slowbro,
+ gMonFootprint_Magnemite,
+ gMonFootprint_Magneton,
+ gMonFootprint_Farfetchd,
+ gMonFootprint_Doduo,
+ gMonFootprint_Dodrio,
+ gMonFootprint_Seel,
+ gMonFootprint_Dewgong,
+ gMonFootprint_Grimer,
+ gMonFootprint_Muk,
+ gMonFootprint_Shellder,
+ gMonFootprint_Cloyster,
+ gMonFootprint_Gastly,
+ gMonFootprint_Haunter,
+ gMonFootprint_Gengar,
+ gMonFootprint_Onix,
+ gMonFootprint_Drowzee,
+ gMonFootprint_Hypno,
+ gMonFootprint_Krabby,
+ gMonFootprint_Kingler,
+ gMonFootprint_Voltorb,
+ gMonFootprint_Electrode,
+ gMonFootprint_Exeggcute,
+ gMonFootprint_Exeggutor,
+ gMonFootprint_Cubone,
+ gMonFootprint_Marowak,
+ gMonFootprint_Hitmonlee,
+ gMonFootprint_Hitmonchan,
+ gMonFootprint_Lickitung,
+ gMonFootprint_Koffing,
+ gMonFootprint_Weezing,
+ gMonFootprint_Rhyhorn,
+ gMonFootprint_Rhydon,
+ gMonFootprint_Chansey,
+ gMonFootprint_Tangela,
+ gMonFootprint_Kangaskhan,
+ gMonFootprint_Horsea,
+ gMonFootprint_Seadra,
+ gMonFootprint_Goldeen,
+ gMonFootprint_Seaking,
+ gMonFootprint_Staryu,
+ gMonFootprint_Starmie,
+ gMonFootprint_Mrmime,
+ gMonFootprint_Scyther,
+ gMonFootprint_Jynx,
+ gMonFootprint_Electabuzz,
+ gMonFootprint_Magmar,
+ gMonFootprint_Pinsir,
+ gMonFootprint_Tauros,
+ gMonFootprint_Magikarp,
+ gMonFootprint_Gyarados,
+ gMonFootprint_Lapras,
+ gMonFootprint_Ditto,
+ gMonFootprint_Eevee,
+ gMonFootprint_Vaporeon,
+ gMonFootprint_Jolteon,
+ gMonFootprint_Flareon,
+ gMonFootprint_Porygon,
+ gMonFootprint_Omanyte,
+ gMonFootprint_Omastar,
+ gMonFootprint_Kabuto,
+ gMonFootprint_Kabutops,
+ gMonFootprint_Aerodactyl,
+ gMonFootprint_Snorlax,
+ gMonFootprint_Articuno,
+ gMonFootprint_Zapdos,
+ gMonFootprint_Moltres,
+ gMonFootprint_Dratini,
+ gMonFootprint_Dragonair,
+ gMonFootprint_Dragonite,
+ gMonFootprint_Mewtwo,
+ gMonFootprint_Mew,
+ gMonFootprint_Chikorita,
+ gMonFootprint_Bayleef,
+ gMonFootprint_Meganium,
+ gMonFootprint_Cyndaquil,
+ gMonFootprint_Quilava,
+ gMonFootprint_Typhlosion,
+ gMonFootprint_Totodile,
+ gMonFootprint_Croconaw,
+ gMonFootprint_Feraligatr,
+ gMonFootprint_Sentret,
+ gMonFootprint_Furret,
+ gMonFootprint_Hoothoot,
+ gMonFootprint_Noctowl,
+ gMonFootprint_Ledyba,
+ gMonFootprint_Ledian,
+ gMonFootprint_Spinarak,
+ gMonFootprint_Ariados,
+ gMonFootprint_Crobat,
+ gMonFootprint_Chinchou,
+ gMonFootprint_Lanturn,
+ gMonFootprint_Pichu,
+ gMonFootprint_Cleffa,
+ gMonFootprint_Igglybuff,
+ gMonFootprint_Togepi,
+ gMonFootprint_Togetic,
+ gMonFootprint_Natu,
+ gMonFootprint_Xatu,
+ gMonFootprint_Mareep,
+ gMonFootprint_Flaaffy,
+ gMonFootprint_Ampharos,
+ gMonFootprint_Bellossom,
+ gMonFootprint_Marill,
+ gMonFootprint_Azumarill,
+ gMonFootprint_Sudowoodo,
+ gMonFootprint_Politoed,
+ gMonFootprint_Hoppip,
+ gMonFootprint_Skiploom,
+ gMonFootprint_Jumpluff,
+ gMonFootprint_Aipom,
+ gMonFootprint_Sunkern,
+ gMonFootprint_Sunflora,
+ gMonFootprint_Yanma,
+ gMonFootprint_Wooper,
+ gMonFootprint_Quagsire,
+ gMonFootprint_Espeon,
+ gMonFootprint_Umbreon,
+ gMonFootprint_Murkrow,
+ gMonFootprint_Slowking,
+ gMonFootprint_Misdreavus,
+ gMonFootprint_Unown,
+ gMonFootprint_Wobbuffet,
+ gMonFootprint_Girafarig,
+ gMonFootprint_Pineco,
+ gMonFootprint_Forretress,
+ gMonFootprint_Dunsparce,
+ gMonFootprint_Gligar,
+ gMonFootprint_Steelix,
+ gMonFootprint_Snubbull,
+ gMonFootprint_Granbull,
+ gMonFootprint_Qwilfish,
+ gMonFootprint_Scizor,
+ gMonFootprint_Shuckle,
+ gMonFootprint_Heracross,
+ gMonFootprint_Sneasel,
+ gMonFootprint_Teddiursa,
+ gMonFootprint_Ursaring,
+ gMonFootprint_Slugma,
+ gMonFootprint_Magcargo,
+ gMonFootprint_Swinub,
+ gMonFootprint_Piloswine,
+ gMonFootprint_Corsola,
+ gMonFootprint_Remoraid,
+ gMonFootprint_Octillery,
+ gMonFootprint_Delibird,
+ gMonFootprint_Mantine,
+ gMonFootprint_Skarmory,
+ gMonFootprint_Houndour,
+ gMonFootprint_Houndoom,
+ gMonFootprint_Kingdra,
+ gMonFootprint_Phanpy,
+ gMonFootprint_Donphan,
+ gMonFootprint_Porygon2,
+ gMonFootprint_Stantler,
+ gMonFootprint_Smeargle,
+ gMonFootprint_Tyrogue,
+ gMonFootprint_Hitmontop,
+ gMonFootprint_Smoochum,
+ gMonFootprint_Elekid,
+ gMonFootprint_Magby,
+ gMonFootprint_Miltank,
+ gMonFootprint_Blissey,
+ gMonFootprint_Raikou,
+ gMonFootprint_Entei,
+ gMonFootprint_Suicune,
+ gMonFootprint_Larvitar,
+ gMonFootprint_Pupitar,
+ gMonFootprint_Tyranitar,
+ gMonFootprint_Lugia,
+ gMonFootprint_HoOh,
+ gMonFootprint_Celebi,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_Treecko,
+ gMonFootprint_Grovyle,
+ gMonFootprint_Sceptile,
+ gMonFootprint_Torchic,
+ gMonFootprint_Combusken,
+ gMonFootprint_Blaziken,
+ gMonFootprint_Mudkip,
+ gMonFootprint_Marshtomp,
+ gMonFootprint_Swampert,
+ gMonFootprint_Poochyena,
+ gMonFootprint_Mightyena,
+ gMonFootprint_Zigzagoon,
+ gMonFootprint_Linoone,
+ gMonFootprint_Wurmple,
+ gMonFootprint_Silcoon,
+ gMonFootprint_Beautifly,
+ gMonFootprint_Cascoon,
+ gMonFootprint_Dustox,
+ gMonFootprint_Lotad,
+ gMonFootprint_Lombre,
+ gMonFootprint_Ludicolo,
+ gMonFootprint_Seedot,
+ gMonFootprint_Nuzleaf,
+ gMonFootprint_Shiftry,
+ gMonFootprint_Nincada,
+ gMonFootprint_Ninjask,
+ gMonFootprint_Shedinja,
+ gMonFootprint_Taillow,
+ gMonFootprint_Swellow,
+ gMonFootprint_Shroomish,
+ gMonFootprint_Breloom,
+ gMonFootprint_Spinda,
+ gMonFootprint_Wingull,
+ gMonFootprint_Pelipper,
+ gMonFootprint_Surskit,
+ gMonFootprint_Masquerain,
+ gMonFootprint_Wailmer,
+ gMonFootprint_Wailord,
+ gMonFootprint_Skitty,
+ gMonFootprint_Delcatty,
+ gMonFootprint_Kecleon,
+ gMonFootprint_Baltoy,
+ gMonFootprint_Claydol,
+ gMonFootprint_Nosepass,
+ gMonFootprint_Torkoal,
+ gMonFootprint_Sableye,
+ gMonFootprint_Barboach,
+ gMonFootprint_Whiscash,
+ gMonFootprint_Luvdisc,
+ gMonFootprint_Corphish,
+ gMonFootprint_Crawdaunt,
+ gMonFootprint_Feebas,
+ gMonFootprint_Milotic,
+ gMonFootprint_Carvanha,
+ gMonFootprint_Sharpedo,
+ gMonFootprint_Trapinch,
+ gMonFootprint_Vibrava,
+ gMonFootprint_Flygon,
+ gMonFootprint_Makuhita,
+ gMonFootprint_Hariyama,
+ gMonFootprint_Electrike,
+ gMonFootprint_Manectric,
+ gMonFootprint_Numel,
+ gMonFootprint_Camerupt,
+ gMonFootprint_Spheal,
+ gMonFootprint_Sealeo,
+ gMonFootprint_Walrein,
+ gMonFootprint_Cacnea,
+ gMonFootprint_Cacturne,
+ gMonFootprint_Snorunt,
+ gMonFootprint_Glalie,
+ gMonFootprint_Lunatone,
+ gMonFootprint_Solrock,
+ gMonFootprint_Azurill,
+ gMonFootprint_Spoink,
+ gMonFootprint_Grumpig,
+ gMonFootprint_Plusle,
+ gMonFootprint_Minun,
+ gMonFootprint_Mawile,
+ gMonFootprint_Meditite,
+ gMonFootprint_Medicham,
+ gMonFootprint_Swablu,
+ gMonFootprint_Altaria,
+ gMonFootprint_Wynaut,
+ gMonFootprint_Duskull,
+ gMonFootprint_Dusclops,
+ gMonFootprint_Roselia,
+ gMonFootprint_Slakoth,
+ gMonFootprint_Vigoroth,
+ gMonFootprint_Slaking,
+ gMonFootprint_Gulpin,
+ gMonFootprint_Swalot,
+ gMonFootprint_Tropius,
+ gMonFootprint_Whismur,
+ gMonFootprint_Loudred,
+ gMonFootprint_Exploud,
+ gMonFootprint_Clamperl,
+ gMonFootprint_Huntail,
+ gMonFootprint_Gorebyss,
+ gMonFootprint_Absol,
+ gMonFootprint_Shuppet,
+ gMonFootprint_Banette,
+ gMonFootprint_Seviper,
+ gMonFootprint_Zangoose,
+ gMonFootprint_Relicanth,
+ gMonFootprint_Aron,
+ gMonFootprint_Lairon,
+ gMonFootprint_Aggron,
+ gMonFootprint_Castform,
+ gMonFootprint_Volbeat,
+ gMonFootprint_Illumise,
+ gMonFootprint_Lileep,
+ gMonFootprint_Cradily,
+ gMonFootprint_Anorith,
+ gMonFootprint_Armaldo,
+ gMonFootprint_Ralts,
+ gMonFootprint_Kirlia,
+ gMonFootprint_Gardevoir,
+ gMonFootprint_Bagon,
+ gMonFootprint_Shelgon,
+ gMonFootprint_Salamence,
+ gMonFootprint_Beldum,
+ gMonFootprint_Metang,
+ gMonFootprint_Metagross,
+ gMonFootprint_Regirock,
+ gMonFootprint_Regice,
+ gMonFootprint_Registeel,
+ gMonFootprint_Kyogre,
+ gMonFootprint_Groudon,
+ gMonFootprint_Rayquaza,
+ gMonFootprint_Latias,
+ gMonFootprint_Latios,
+ gMonFootprint_Jirachi,
+ gMonFootprint_Deoxys,
+ gMonFootprint_Chimecho,
+ gMonFootprint_Bulbasaur,
+};
+static const u8 gUnknown_083B5558[] = _("{CLEAR_TO 0}");
+const u8 gUnknown_083B555C[] = INCBIN_U8("graphics/unknown/unknown_3B555C.bin");
+static const struct OamData gOamData_83B557C =
+{
+ .y = 0,
+ .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 void *const gUnknown_083B5584[] =
+{
+ (void *)0x02008000,
+ (void *)0x0200C000,
+ (void *)0x02010000,
+ (void *)0x02014000,
+};
+static const struct SpriteFrameImage gSpriteImageTable_83B5594[] =
+{
+ {(u8 *)0x02008000, 0x800},
+ {(u8 *)0x02008800, 0x800},
+ {(u8 *)0x02009000, 0x800},
+ {(u8 *)0x02009800, 0x800},
+ {(u8 *)0x0200A000, 0x800},
+ {(u8 *)0x0200A800, 0x800},
+ {(u8 *)0x0200B000, 0x800},
+ {(u8 *)0x0200B800, 0x800},
+ {(u8 *)0x0200C000, 0x800},
+ {(u8 *)0x0200C800, 0x800},
+ {(u8 *)0x0200D000, 0x800},
+ {(u8 *)0x0200D800, 0x800},
+ {(u8 *)0x0200E000, 0x800},
+ {(u8 *)0x0200E800, 0x800},
+ {(u8 *)0x0200F000, 0x800},
+ {(u8 *)0x0200F800, 0x800},
+};
+static const struct SpriteFrameImage gSpriteImageTable_83B5614[] =
+{
+ {(u8 *)0x0200C000, 0x800},
+ {(u8 *)0x0200C800, 0x800},
+ {(u8 *)0x0200D000, 0x800},
+ {(u8 *)0x0200D800, 0x800},
+ {(u8 *)0x0200E000, 0x800},
+ {(u8 *)0x0200E800, 0x800},
+ {(u8 *)0x0200F000, 0x800},
+ {(u8 *)0x0200F800, 0x800},
+ {(u8 *)0x02010000, 0x800},
+ {(u8 *)0x02010800, 0x800},
+ {(u8 *)0x02011000, 0x800},
+ {(u8 *)0x02011800, 0x800},
+ {(u8 *)0x02012000, 0x800},
+ {(u8 *)0x02012800, 0x800},
+ {(u8 *)0x02013000, 0x800},
+ {(u8 *)0x02013800, 0x800},
+};
+static const struct SpriteFrameImage gSpriteImageTable_83B5694[] =
+{
+ {(u8 *)0x02010000, 0x800},
+ {(u8 *)0x02010800, 0x800},
+ {(u8 *)0x02011000, 0x800},
+ {(u8 *)0x02011800, 0x800},
+ {(u8 *)0x02012000, 0x800},
+ {(u8 *)0x02012800, 0x800},
+ {(u8 *)0x02013000, 0x800},
+ {(u8 *)0x02013800, 0x800},
+ {(u8 *)0x02014000, 0x800},
+ {(u8 *)0x02014800, 0x800},
+ {(u8 *)0x02015000, 0x800},
+ {(u8 *)0x02015800, 0x800},
+ {(u8 *)0x02016000, 0x800},
+ {(u8 *)0x02016800, 0x800},
+ {(u8 *)0x02017000, 0x800},
+ {(u8 *)0x02017800, 0x800},
+};
+static const struct SpriteFrameImage gSpriteImageTable_83B5714[] =
+{
+ {(u8 *)0x02014000, 0x800},
+ {(u8 *)0x02014800, 0x800},
+ {(u8 *)0x02015000, 0x800},
+ {(u8 *)0x02015800, 0x800},
+ {(u8 *)0x02016000, 0x800},
+ {(u8 *)0x02016800, 0x800},
+ {(u8 *)0x02017000, 0x800},
+ {(u8 *)0x02017800, 0x800},
+ {(u8 *)0x02018000, 0x800},
+ {(u8 *)0x02018800, 0x800},
+ {(u8 *)0x02019000, 0x800},
+ {(u8 *)0x02019800, 0x800},
+ {(u8 *)0x0201A000, 0x800},
+ {(u8 *)0x0201A800, 0x800},
+ {(u8 *)0x0201B000, 0x800},
+ {(u8 *)0x0201B800, 0x800},
+};
+static const struct SpriteFrameImage *const gUnknown_083B5794[] =
+{
+ gSpriteImageTable_83B5594,
+ gSpriteImageTable_83B5614,
+ gSpriteImageTable_83B5694,
+ gSpriteImageTable_83B5714,
+};
+static void nullsub_59(struct Sprite *);
+static const struct SpriteTemplate gUnknown_083B57A4 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0,
+ .oam = &gOamData_83B557C,
+ .anims = NULL,
+ .images = gSpriteImageTable_83B5594,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = nullsub_59,
+};
+static const u8 gUnknown_083B57BC[][4] =
+{
+ {0, 0, 0, 0},
+ {CHAR_A, 3, CHAR_a, 3},
+ {CHAR_D, 3, CHAR_d, 3},
+ {CHAR_G, 3, CHAR_g, 3},
+ {CHAR_J, 3, CHAR_j, 3},
+ {CHAR_M, 3, CHAR_m, 3},
+ {CHAR_P, 3, CHAR_p, 3},
+ {CHAR_S, 3, CHAR_s, 3},
+ {CHAR_V, 3, CHAR_v, 3},
+ {CHAR_Y, 2, CHAR_y, 2},
+};
+static const struct UnknownStruct3 gUnknown_083B57E4[] =
+{
+ {DexText_SearchForPoke, 0, 0, 5},
+ {DexText_SwitchDex, 6, 0, 5},
+ {DexText_ReturnToDex, 12, 0, 5},
+};
+static const struct UnknownStruct4 gUnknown_083B57FC[] =
+{
+ {DexText_ListByABC, 0, 2, 5, 5, 2, 12},
+ {DexText_ListByColor, 0, 4, 5, 5, 4, 12},
+ {DexText_ListByType, 0, 6, 5, 5, 6, 6},
+ {DexText_ListByType, 0, 6, 5, 11, 6, 6},
+ {DexText_SelectDexList, 0, 8, 5, 5, 8, 12},
+ {DexText_SelectDexMode, 0, 10, 5, 5, 10, 12},
+ {DexText_ExecuteSearchSwitch, 0, 12, 5, 0, 0, 0},
+};
+static const u8 gUnknown_083B5850[][4] =
+{
+ {0xFF, 0xFF, 0xFF, 1},
+ {0xFF, 0xFF, 0, 2},
+ {0xFF, 3, 1, 4},
+ { 2, 0xFF, 1, 4},
+ {0xFF, 0xFF, 2, 5},
+ {0xFF, 0xFF, 4, 6},
+ {0xFF, 0xFF, 5, 0xFF},
+};
+static const u8 gUnknown_083B586C[][4] =
+{
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 5},
+ {0xFF, 0xFF, 4, 6},
+ {0xFF, 0xFF, 5, 0xFF},
+};
+static const u8 gUnknown_083B5888[][4] =
+{
+ {0xFF, 0xFF, 0xFF, 1},
+ {0xFF, 0xFF, 0, 2},
+ {0xFF, 3, 1, 4},
+ { 2, 0xFF, 1, 4},
+ {0xFF, 0xFF, 2, 6},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 4, 0xFF},
+};
+static const u8 gUnknown_083B58A4[][4] =
+{
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 6},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 4, 0xFF},
+};
+static const struct UnknownStruct2 gUnknown_083B58C0[] =
+{
+ {DexText_HoennDex2, DexText_HoennDex},
+ {DexText_NationalDex2, DexText_NationalDex},
+ {NULL, NULL},
+};
+static const struct UnknownStruct2 gUnknown_083B58D8[] =
+{
+ {DexText_ListByNumber, DexText_NumericalMode},
+ {DexText_ListByABC2, DexText_ABCMode},
+ {DexText_ListByHeavyToLightest, DexText_HeaviestMode},
+ {DexText_ListByLightToHeaviest, DexText_LightestMode},
+ {DexText_ListByTallToSmallest, DexText_TallestMode},
+ {DexText_ListBySmallToTallest, DexText_SmallestMode},
+ {NULL, NULL},
+};
+static const struct UnknownStruct2 gUnknown_083B5910[] =
+{
+ {DexText_Terminator5, DexText_DontSpecify},
+ {DexText_Terminator5, DexText_ABC},
+ {DexText_Terminator5, DexText_DEF},
+ {DexText_Terminator5, DexText_GHI},
+ {DexText_Terminator5, DexText_JKL},
+ {DexText_Terminator5, DexText_MNO},
+ {DexText_Terminator5, DexText_PQR},
+ {DexText_Terminator5, DexText_STU},
+ {DexText_Terminator5, DexText_VWX},
+ {DexText_Terminator5, DexText_YZ},
+ {NULL, NULL},
+};
+static const struct UnknownStruct2 gUnknown_083B5968[] =
+{
+ {DexText_Terminator5, DexText_DontSpecify},
+ {DexText_Terminator5, DexText_Red},
+ {DexText_Terminator5, DexText_Blue},
+ {DexText_Terminator5, DexText_Yellow},
+ {DexText_Terminator5, DexText_Green},
+ {DexText_Terminator5, DexText_Black},
+ {DexText_Terminator5, DexText_Brown},
+ {DexText_Terminator5, DexText_Purple},
+ {DexText_Terminator5, DexText_Gray},
+ {DexText_Terminator5, DexText_White},
+ {DexText_Terminator5, DexText_Pink},
+ {NULL, NULL},
+};
+static const struct UnknownStruct2 gUnknown_083B59C8[] =
+{
+ {DexText_Terminator5, DexText_None},
+ {DexText_Terminator5, gTypeNames[TYPE_NORMAL]},
+ {DexText_Terminator5, gTypeNames[TYPE_FIGHTING]},
+ {DexText_Terminator5, gTypeNames[TYPE_FLYING]},
+ {DexText_Terminator5, gTypeNames[TYPE_POISON]},
+ {DexText_Terminator5, gTypeNames[TYPE_GROUND]},
+ {DexText_Terminator5, gTypeNames[TYPE_ROCK]},
+ {DexText_Terminator5, gTypeNames[TYPE_BUG]},
+ {DexText_Terminator5, gTypeNames[TYPE_GHOST]},
+ {DexText_Terminator5, gTypeNames[TYPE_STEEL]},
+ {DexText_Terminator5, gTypeNames[TYPE_FIRE]},
+ {DexText_Terminator5, gTypeNames[TYPE_WATER]},
+ {DexText_Terminator5, gTypeNames[TYPE_GRASS]},
+ {DexText_Terminator5, gTypeNames[TYPE_ELECTRIC]},
+ {DexText_Terminator5, gTypeNames[TYPE_PSYCHIC]},
+ {DexText_Terminator5, gTypeNames[TYPE_ICE]},
+ {DexText_Terminator5, gTypeNames[TYPE_DRAGON]},
+ {DexText_Terminator5, gTypeNames[TYPE_DARK]},
+ {NULL, NULL},
+};
+static const u8 gUnknown_083B5A60[] = {0, 1};
+static const u8 gUnknown_083B5A62[] = {0, 1, 2, 3, 4, 5};
+static const u8 gUnknown_083B5A68[] = {0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17};
+static const struct UnknownStruct1 gUnknown_083B5A7C[] =
+{
+ {gUnknown_083B5910, 6, 7, 10},
+ {gUnknown_083B5968, 8, 9, 11},
+ {gUnknown_083B59C8, 10, 11, 18},
+ {gUnknown_083B59C8, 12, 13, 18},
+ {gUnknown_083B58D8, 4, 5, 6},
+ {gUnknown_083B58C0, 2, 3, 2},
+};
+static const u8 gUnknown_083B5AAC[] = _("{STR_VAR_1}{CLEAR_TO 43}");
+static const u8 gUnknown_083B5AB2[] = _("{STR_VAR_1}{CLEAR_TO 96}");
+
+static void MainCB(void);
+static void Task_PokedexShowMainScreen(u8 taskId);
+static void Task_PokedexMainScreen(u8 taskId);
+static void sub_808C898(u8 taskId);
+static void Task_PokedexMainScreenMenu(u8 taskId);
+static void sub_808CA64(u8 taskId);
+static void sub_808CAE4(u8 taskId);
+static void sub_808CB8C(u8 taskId);
+static void Task_ClosePokedex(u8 taskId);
+static void sub_808CCC4(u8 taskId);
+static void Task_PokedexResultsScreen(u8 taskId);
+static void sub_808CEF8(u8 taskId);
+static void Task_PokedexResultsScreenMenu(u8 taskId);
+static void sub_808D118(u8 taskId);
+static void sub_808D198(u8 taskId);
+static void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId);
+static void Task_PokedexResultsScreenExitPokedex(u8 taskId);
+static bool8 sub_808D344(u8 a);
+static void sub_808D640(void);
+static void SortPokedex(u8 dexMode, u8 sortMode);
+static void sub_808DEB0(u16 a, u8 b, u8 c, u16 d);
+static void sub_808DF88(u16 a, u8 b, u8 c, u16 d);
+static u8 sub_808DFE4(u16 num, u8 b, u8 c);
+static void sub_808E090(u8 a, u8 b, u16 c);
+static void sub_808E0CC(u16 a, u16 b);
+static bool8 sub_808E208(u8 a, u8 b, u8 c);
+static u16 sub_808E48C(u16 a, u16 b);
+static void sub_808E6BC(void);
+static u8 sub_808E71C(void);
+static u8 sub_808E82C(void);
+static u16 sub_808E888(u16 a1);
+static u32 sub_808E8C8(u16 a, s16 b, s16 c);
+static void sub_808E978(u8 a);
+static void sub_808EDB8(struct Sprite *sprite);
+static void sub_808EE28(struct Sprite *sprite);
+static u8 sub_808F210(struct PokedexListItem *, u8);
+static bool8 sub_808F250(u8 taskId);
+static u8 sub_808F284(struct PokedexListItem *, u8);
+static void Task_InitPageScreenMultistep(u8 taskId);
+static void Task_PageScreenProcessInput(u8 taskId);
+static void sub_808F888(u8 taskId);
+static void Task_ClosePageScreen(u8 taskId);
+static void Task_InitAreaScreenMultistep(u8 taskId);
+static void Task_AreaScreenProcessInput(u8 taskId);
+static void sub_808FA00(u8 taskId);
+static void Task_InitCryScreenMultistep(u8 taskId);
+static void Task_CryScreenProcessInput(u8 taskId);
+static void sub_808FFBC(u8 taskId);
+static void sub_8090040(u8 a);
+static void Task_InitSizeScreenMultistep(u8 taskId);
+static void Task_SizeScreenProcessInput(u8 taskId);
+static void sub_8090498(u8 taskId);
+static void sub_80904FC(u16 a);
+static void sub_8090540(u16 a);
+static void sub_8090584(u8 a, u16 b);
+static void sub_8090644(u8 a, u16 b);
+static void sub_8090750(u8);
+static void sub_8090A3C(u8);
+static void sub_8090B8C(u8);
+static void sub_8090C28(struct Sprite *);
+static void sub_8090C68(void);
+static void sub_8091060(u16);
+static void sub_8091154(u16 order, u8, u8);
+static u8 sub_80911C8(u16 num, u8, u8);
+static u8 sub_8091260(u16 num, u8, u8, u8);
+static void sub_8091304(const u8 *name, u8, u8);
+static void sub_8091458(u16 height, u8 i, u8 i1);
+static void sub_8091564(u16 weight, u8 i, u8 i1);
+static void sub_8091738(u16, u16, u16);
+static void sub_80917CC(u16 i, u16 i1);
+static u16 sub_8091818(u8, u16, u16, u16);
+static u16 sub_80918EC(u16 a, s16 b, s16 c, u16 d);
+static u8 sub_8091A4C(u16 gender, s16, s16, u16);
+static void sub_8091E54(u8);
+static void sub_809204C(u8);
+static void sub_809207C(u8);
+static void sub_809217C(u8);
+static void sub_80921B0(u8);
+static void sub_80923FC(u8);
+static void sub_80924A4(u8);
+static void sub_8092508(u8);
+static void sub_80925CC(u8);
+static void sub_8092644(u8);
+static void sub_80927B8(u8);
+static void sub_80927F0(u8);
+static void sub_8092AB0(u8);
+static void sub_8092AD4(u8, u8);
+static void sub_8092B68(u8);
+static void sub_8092C8C(u8);
+static void sub_8092D78(u8);
+static u8 sub_8092E10(u8, u8);
+static void sub_8092EB0(u8);
+static void sub_809308C(u8);
void ResetPokedex(void)
{
@@ -139,18 +1327,18 @@ void sub_808C0A0(void)
gUnknown_0202FFBA = 0x40;
}
-void sub_808C0B8(void)
+static void sub_808C0B8(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-void ClearPokedexView(struct PokedexView *pokedexView)
+static void ClearPokedexView(struct PokedexView *pokedexView)
{
u16 i;
- for (i = 0; i <= 385; i++)
+ for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{
pokedexView->unk0[i].dexNum |= 0xFFFF;
pokedexView->unk0[i].seen = 0;
@@ -159,7 +1347,7 @@ void ClearPokedexView(struct PokedexView *pokedexView)
pokedexView->unk608 = 0;
pokedexView->unk60A_1 = 0;
pokedexView->unk60A_2 = 0;
- pokedexView->unk60C = 0;
+ pokedexView->pokemonListCount = 0;
pokedexView->selectedPokemon = 0;
pokedexView->unk610 = 0;
pokedexView->dexMode = 0;
@@ -203,30 +1391,30 @@ void CB2_InitPokedex(void)
{
case 0:
default:
- {
- u8 *addr;
- u32 size;
+ {
+ u8 *addr;
+ u32 size;
- SetVBlankCallback(NULL);
- sub_8091060(0);
- addr = (u8 *)VRAM;
- size = VRAM_SIZE;
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
+ SetVBlankCallback(NULL);
+ sub_8091060(0);
+ addr = (u8 *)VRAM;
+ size = VRAM_SIZE;
+ while (1)
{
- DmaFill16(3, 0, addr, size);
- break;
+ DmaFill16(3, 0, addr, 0x1000);
+ addr += 0x1000;
+ size -= 0x1000;
+ if (size <= 0x1000)
+ {
+ DmaFill16(3, 0, addr, size);
+ break;
+ }
}
+ DmaClear32(3, OAM, OAM_SIZE);
+ DmaClear16(3, PLTT, PLTT_SIZE);
+ gMain.state = 1;
}
- DmaClear32(3, OAM, OAM_SIZE);
- DmaClear16(3, PLTT, PLTT_SIZE);
- gMain.state = 1;
break;
- }
case 1:
remove_some_task();
ResetTasks();
@@ -264,7 +1452,7 @@ void CB2_InitPokedex(void)
gPokedexView->selectedPokemon = gUnknown_0202FFB8;
gPokedexView->unk62C = gUnknown_0202FFBA;
gPokedexView->selectedScreen = PAGE_SCREEN;
- gPokedexView->unk64E = 0;
+ gPokedexView->descriptionPageNum = 0;
if (!IsNationalPokedexEnabled())
{
gPokedexView->unk61A = GetHoennPokedexCount(0);
@@ -279,19 +1467,20 @@ void CB2_InitPokedex(void)
gMain.state++;
break;
case 3:
- {
- u16 savedIme;
-
- savedIme = REG_IME;
- REG_IME = 0;
- REG_IE |= 1;
- REG_IME = savedIme;
- REG_DISPSTAT |= 8;
- SetVBlankCallback(sub_808C0B8);
- SetMainCallback2(MainCB);
- SortPokedex(gPokedexView->dexMode, gPokedexView->dexOrder);
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x80);
- }
+ {
+ u16 savedIme;
+
+ savedIme = REG_IME;
+ REG_IME = 0;
+ REG_IE |= 1;
+ REG_IME = savedIme;
+ REG_DISPSTAT |= 8;
+ SetVBlankCallback(sub_808C0B8);
+ SetMainCallback2(MainCB);
+ SortPokedex(gPokedexView->dexMode, gPokedexView->dexOrder);
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x80);
+ }
+ break;
}
}
@@ -320,7 +1509,7 @@ u8 unref_sub_808C540(void (*func)(u8))
return gTasks[taskId].data[0];
}
-void MainCB(void)
+static void MainCB(void)
{
RunTasks();
AnimateSprites();
@@ -328,13 +1517,11 @@ void MainCB(void)
UpdatePaletteFade();
}
-void Task_PokedexShowMainScreen(u8 taskId)
+static void Task_PokedexShowMainScreen(u8 taskId)
{
gPokedexView->unk64C_1 = 0;
if (sub_808D344(0))
- {
gTasks[taskId].func = Task_PokedexMainScreen;
- }
}
//Hide menu and process input on main screen
@@ -351,9 +1538,9 @@ void Task_PokedexMainScreen(u8 taskId)
{
sub_808E6BC();
BeginNormalPaletteFade(
- ~(1 << (gSprites[gPokedexView->unk626].oam.paletteNum + 16)),
+ ~(1 << (gSprites[gPokedexView->selectedMonSpriteId].oam.paletteNum + 16)),
0, 0, 0x10, 0);
- gSprites[gPokedexView->unk626].callback = sub_808EDB8;
+ gSprites[gPokedexView->selectedMonSpriteId].callback = sub_808EDB8;
gTasks[taskId].func = sub_808CA64;
PlaySE(SE_PIN);
}
@@ -395,16 +1582,14 @@ void Task_PokedexMainScreen(u8 taskId)
}
}
-void sub_808C898(u8 taskId)
+static void sub_808C898(u8 taskId)
{
if (sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636))
- {
gTasks[taskId].func = Task_PokedexMainScreen;
- }
}
//Bring up menu and process menu input
-void Task_PokedexMainScreenMenu(u8 taskId)
+static void Task_PokedexMainScreenMenu(u8 taskId)
{
REG_BG0VOFS = gPokedexView->menuY;
@@ -429,8 +1614,8 @@ void Task_PokedexMainScreenMenu(u8 taskId)
gMain.newKeys |= START_BUTTON; //Exit menu
break;
case 2: //LIST BOTTOM
- gPokedexView->selectedPokemon = gPokedexView->unk60C - 1;
- gPokedexView->unk62C = gPokedexView->unk60C * 16 + 0x30;
+ gPokedexView->selectedPokemon = gPokedexView->pokemonListCount - 1;
+ gPokedexView->unk62C = gPokedexView->pokemonListCount * 16 + 0x30;
sub_808E82C();
sub_808E0CC(gPokedexView->selectedPokemon, 0xE);
gMain.newKeys |= START_BUTTON; //Exit menu
@@ -463,27 +1648,23 @@ void Task_PokedexMainScreenMenu(u8 taskId)
}
}
-void sub_808CA64(u8 taskId)
+static void sub_808CA64(u8 taskId)
{
- if (gSprites[gPokedexView->unk626].pos1.x == 0x30 &&
- gSprites[gPokedexView->unk626].pos1.y == 0x38)
+ if (gSprites[gPokedexView->selectedMonSpriteId].pos1.x == 48
+ && gSprites[gPokedexView->selectedMonSpriteId].pos1.y == 56)
{
gPokedexView->unk64B = gPokedexView->unk64A;
- gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->unk626);
+ gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId);
gTasks[taskId].func = sub_808CAE4;
}
}
-void sub_808CAE4(u8 taskId)
+static void sub_808CAE4(u8 taskId)
{
if (gTasks[gTasks[taskId].data[0]].isActive)
{
- if (gPokedexView->unk64A == 1 &&
- !sub_808F250(gTasks[taskId].data[0]) &&
- sub_808E71C())
- {
+ if (gPokedexView->unk64A == 1 && !sub_808F250(gTasks[taskId].data[0]) && sub_808E71C())
sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]);
- }
}
else
{
@@ -493,13 +1674,13 @@ void sub_808CAE4(u8 taskId)
}
}
-void sub_808CB8C(u8 taskId)
+static void sub_808CB8C(u8 taskId)
{
bool8 isActive = gTasks[gTasks[taskId].data[0]].isActive;
if (!isActive)
{
- if (gPokedexView->unk64F)
+ if (gPokedexView->unk64F != 0)
{
gPokedexView->selectedPokemon = isActive;
gPokedexView->unk62C = 0x40;
@@ -518,7 +1699,7 @@ void sub_808CB8C(u8 taskId)
}
}
-void Task_ClosePokedex(u8 taskId)
+static void Task_ClosePokedex(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -532,19 +1713,21 @@ void Task_ClosePokedex(u8 taskId)
}
}
-void sub_808CCC4(u8 taskId)
+static void sub_808CCC4(u8 taskId)
{
gPokedexView->unk64C_1 = 1;
if (sub_808D344(3))
gTasks[taskId].func = Task_PokedexResultsScreen;
}
-void Task_PokedexResultsScreen(u8 taskId)
+static void Task_PokedexResultsScreen(u8 taskId)
{
REG_BG0VOFS = gPokedexView->menuY;
if (gPokedexView->menuY)
+ {
gPokedexView->menuY -= 8;
+ }
else
{
if ((gMain.newKeys & A_BUTTON) && gPokedexView->unk0[gPokedexView->selectedPokemon].seen)
@@ -552,8 +1735,8 @@ void Task_PokedexResultsScreen(u8 taskId)
u32 a;
sub_808E6BC();
- a = (1 << (gSprites[gPokedexView->unk626].oam.paletteNum + 16));
- gSprites[gPokedexView->unk626].callback = sub_808EDB8;
+ a = (1 << (gSprites[gPokedexView->selectedMonSpriteId].oam.paletteNum + 16));
+ gSprites[gPokedexView->selectedMonSpriteId].callback = sub_808EDB8;
BeginNormalPaletteFade(~a, 0, 0, 0x10, 0);
gTasks[taskId].func = sub_808D118;
PlaySE(SE_PIN);
@@ -590,18 +1773,20 @@ void Task_PokedexResultsScreen(u8 taskId)
}
}
-void sub_808CEF8(u8 taskId)
+static void sub_808CEF8(u8 taskId)
{
if (sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636))
gTasks[taskId].func = Task_PokedexResultsScreen;
}
-void Task_PokedexResultsScreenMenu(u8 taskId)
+static void Task_PokedexResultsScreenMenu(u8 taskId)
{
REG_BG0VOFS = gPokedexView->menuY;
- if (gPokedexView->menuY != 0x60)
+ if (gPokedexView->menuY != 96)
+ {
gPokedexView->menuY += 8;
+ }
else
{
if (gMain.newKeys & A_BUTTON)
@@ -620,8 +1805,8 @@ void Task_PokedexResultsScreenMenu(u8 taskId)
gMain.newKeys |= START_BUTTON;
break;
case 2: //LIST BOTTOM
- gPokedexView->selectedPokemon = gPokedexView->unk60C - 1;
- gPokedexView->unk62C = gPokedexView->unk60C * 16 + 0x30;
+ gPokedexView->selectedPokemon = gPokedexView->pokemonListCount - 1;
+ gPokedexView->unk62C = gPokedexView->pokemonListCount * 16 + 0x30;
sub_808E82C();
sub_808E0CC(gPokedexView->selectedPokemon, 0xE);
gMain.newKeys |= START_BUTTON;
@@ -659,27 +1844,23 @@ void Task_PokedexResultsScreenMenu(u8 taskId)
}
}
-void sub_808D118(u8 taskId)
+static void sub_808D118(u8 taskId)
{
- if (gSprites[gPokedexView->unk626].pos1.x == 0x30 &&
- gSprites[gPokedexView->unk626].pos1.y == 0x38)
+ if (gSprites[gPokedexView->selectedMonSpriteId].pos1.x == 48
+ && gSprites[gPokedexView->selectedMonSpriteId].pos1.y == 56)
{
gPokedexView->unk64B = gPokedexView->unk64A;
- gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->unk626);
+ gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId);
gTasks[taskId].func = sub_808D198;
}
}
-void sub_808D198(u8 taskId)
+static void sub_808D198(u8 taskId)
{
if (gTasks[gTasks[taskId].data[0]].isActive)
{
- if (gPokedexView->unk64A == 1 &&
- !sub_808F250(gTasks[taskId].data[0]) &&
- sub_808E71C())
- {
+ if (gPokedexView->unk64A == 1 && !sub_808F250(gTasks[taskId].data[0]) && sub_808E71C())
sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]);
- }
}
else
{
@@ -687,7 +1868,7 @@ void sub_808D198(u8 taskId)
}
}
-void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId)
+static void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -701,7 +1882,7 @@ void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId)
}
}
-void Task_PokedexResultsScreenExitPokedex(u8 taskId)
+static void Task_PokedexResultsScreenExitPokedex(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -715,8 +1896,7 @@ void Task_PokedexResultsScreenExitPokedex(u8 taskId)
}
}
-
-bool8 sub_808D344(u8 a)
+static bool8 sub_808D344(u8 a)
{
switch (gMain.state)
{
@@ -724,7 +1904,6 @@ bool8 sub_808D344(u8 a)
default:
if (gPaletteFade.active)
return 0;
- //_0808D39E
SetVBlankCallback(NULL);
gPokedexView->unk64A = a;
sub_8091060(0);
@@ -749,7 +1928,7 @@ bool8 sub_808D344(u8 a)
ResetSpriteData();
FreeAllSpritePalettes();
gReservedSpritePaletteCount = 8;
- LoadCompressedObjectPic(&gUnknown_083A05CC);
+ LoadCompressedObjectPic(&gUnknown_083A05CC[0]);
LoadSpritePalettes(gUnknown_083A05DC);
sub_808E978(a);
gMain.state++;
@@ -793,30 +1972,29 @@ bool8 sub_808D344(u8 a)
if (!gPaletteFade.active)
{
gMain.state = 0;
- return 1;
+ return TRUE;
}
- else
- return 0;
+ break;
}
- return 0;
+ return FALSE;
}
-void sub_808D640(void)
+static void sub_808D640(void)
{
if (gPokedexView->unk64C_1)
- LoadPalette(gUnknown_0839F67C + 0x2, 1, 0xBE);
+ LoadPalette(sPokedexSearchPalette + 1, 1, sizeof(sPokedexSearchPalette) - sizeof(u16));
else if (!IsNationalPokedexEnabled())
- LoadPalette(gPokedexMenu_Pal + 0x2, 1, 0xBE);
+ LoadPalette(gPokedexMenu_Pal + 1, 1, 0xBE);
else
- LoadPalette(gUnknown_0839F73C + 0x2, 1, 0xBE);
+ LoadPalette(sNationalPokedexPalette + 1, 1, sizeof(sNationalPokedexPalette) - sizeof(u16));
}
-void SortPokedex(u8 dexMode, u8 sortMode)
+static void SortPokedex(u8 dexMode, u8 sortMode)
{
u16 vars[3]; //I have no idea why three regular variables are stored in an array, but whatever.
s16 i;
- gPokedexView->unk60C = 0;
+ gPokedexView->pokemonListCount = 0;
switch (dexMode)
{
@@ -828,7 +2006,7 @@ void SortPokedex(u8 dexMode, u8 sortMode)
case DEX_MODE_NATIONAL:
if (IsNationalPokedexEnabled())
{
- vars[0] = 386;
+ vars[0] = NATIONAL_DEX_COUNT;
vars[1] = 0;
}
else
@@ -842,7 +2020,6 @@ void SortPokedex(u8 dexMode, u8 sortMode)
switch (sortMode)
{
case 0:
- {
if (vars[1])
{
for (i = 0; i < vars[0]; i++)
@@ -852,7 +2029,7 @@ void SortPokedex(u8 dexMode, u8 sortMode)
gPokedexView->unk0[i].seen = GetNationalPokedexFlag(vars[2], 0);
gPokedexView->unk0[i].owned = GetNationalPokedexFlag(vars[2], 1);
if (gPokedexView->unk0[i].seen)
- gPokedexView->unk60C = i + 1;
+ gPokedexView->pokemonListCount = i + 1;
}
}
else
@@ -873,13 +2050,12 @@ void SortPokedex(u8 dexMode, u8 sortMode)
gPokedexView->unk0[r5].seen = GetNationalPokedexFlag(vars[2], 0);
gPokedexView->unk0[r5].owned = GetNationalPokedexFlag(vars[2], 1);
if (gPokedexView->unk0[r5].seen)
- gPokedexView->unk60C = r5 + 1;
+ gPokedexView->pokemonListCount = r5 + 1;
r5++;
}
}
}
break;
- }
case 1:
for (i = 0; i < 411; i++)
{
@@ -887,71 +2063,72 @@ void SortPokedex(u8 dexMode, u8 sortMode)
if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 0))
{
- gPokedexView->unk0[gPokedexView->unk60C].dexNum = vars[2];
- gPokedexView->unk0[gPokedexView->unk60C].seen = 1;
- gPokedexView->unk0[gPokedexView->unk60C].owned = GetNationalPokedexFlag(vars[2], 1);
- gPokedexView->unk60C++;
+ gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2];
+ gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1;
+ gPokedexView->unk0[gPokedexView->pokemonListCount].owned = GetNationalPokedexFlag(vars[2], 1);
+ gPokedexView->pokemonListCount++;
}
}
break;
case 2:
- for (i = 385; i >= 0; i--)
+ for (i = NATIONAL_DEX_COUNT - 1; i >= 0; i--)
{
vars[2] = gPokedexOrder_Weight[i];
if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1))
{
- gPokedexView->unk0[gPokedexView->unk60C].dexNum = vars[2];
- gPokedexView->unk0[gPokedexView->unk60C].seen = 1;
- gPokedexView->unk0[gPokedexView->unk60C].owned = 1;
- gPokedexView->unk60C++;
+ gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2];
+ gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1;
+ gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1;
+ gPokedexView->pokemonListCount++;
}
}
break;
case 3:
- for (i = 0; i < 386; i++)
+ for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{
vars[2] = gPokedexOrder_Weight[i];
if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1))
{
- gPokedexView->unk0[gPokedexView->unk60C].dexNum = vars[2];
- gPokedexView->unk0[gPokedexView->unk60C].seen = 1;
- gPokedexView->unk0[gPokedexView->unk60C].owned = 1;
- gPokedexView->unk60C++;
+ gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2];
+ gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1;
+ gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1;
+ gPokedexView->pokemonListCount++;
}
}
break;
case 4:
- for (i = 385; i >=0; i--)
+ for (i = NATIONAL_DEX_COUNT - 1; i >=0; i--)
{
vars[2] = gPokedexOrder_Height[i];
if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1))
{
- gPokedexView->unk0[gPokedexView->unk60C].dexNum = vars[2];
- gPokedexView->unk0[gPokedexView->unk60C].seen = 1;
- gPokedexView->unk0[gPokedexView->unk60C].owned = 1;
- gPokedexView->unk60C++;
+ gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2];
+ gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1;
+ gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1;
+ gPokedexView->pokemonListCount++;
}
}
break;
case 5:
- for (i = 0; i < 386; i++)
+ for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{
vars[2] = gPokedexOrder_Height[i];
if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1))
{
- gPokedexView->unk0[gPokedexView->unk60C].dexNum = vars[2];
- gPokedexView->unk0[gPokedexView->unk60C].seen = 1;
- gPokedexView->unk0[gPokedexView->unk60C].owned = 1;
- gPokedexView->unk60C++;
+ gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2];
+ gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1;
+ gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1;
+ gPokedexView->pokemonListCount++;
}
}
break;
}
- for (i = gPokedexView->unk60C; i < 386; i++)
+
+ for (i = gPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++)
{
gPokedexView->unk0[i].dexNum |= 0xFFFF;
gPokedexView->unk0[i].seen = 0;
@@ -959,20 +2136,23 @@ void SortPokedex(u8 dexMode, u8 sortMode)
}
}
-void sub_808DBE8(u8 a, u16 b, u16 c)
+static void sub_808DBE8(u8 a, u16 b, u16 c)
{
+ s16 _b;
+ u16 i;
+ u16 r2;
+
switch (a)
{
case 0:
default:
- {
- u16 i;
- s16 _b = b - 5;
-
+ _b = b - 5;
for (i = 0; i <= 10; i++)
{
- if ((u16)_b > 385 || gPokedexView->unk0[_b].dexNum == 0xFFFF)
+ if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF)
+ {
sub_808E090(0x11, i * 2, c);
+ }
else
{
sub_808E090(0x11, i * 2, c);
@@ -992,13 +2172,12 @@ void sub_808DBE8(u8 a, u16 b, u16 c)
_b++;
}
break;
- }
case 1:
- {
- s16 _b = b - 5;
-
- if ((u16)_b > 385 || gPokedexView->unk0[_b].dexNum == 0xFFFF)
+ _b = b - 5;
+ if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF)
+ {
sub_808E090(0x11, gPokedexView->unk630 * 2, c);
+ }
else
{
sub_808E090(0x11, gPokedexView->unk630 * 2, c);
@@ -1016,15 +2195,12 @@ void sub_808DBE8(u8 a, u16 b, u16 c)
}
}
break;
- }
case 2:
- {
- s16 _b = b + 5;
- u16 r2 = gPokedexView->unk630 + 10;
-
+ _b = b + 5;
+ r2 = gPokedexView->unk630 + 10;
if (r2 > 15)
r2 -= 16;
- if ((u16)_b > 385 || gPokedexView->unk0[_b].dexNum == 0xFFFF)
+ if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF)
sub_808E090(0x11, r2 * 2, c);
else
{
@@ -1044,10 +2220,9 @@ void sub_808DBE8(u8 a, u16 b, u16 c)
}
break;
}
- }
}
-void sub_808DEB0(u16 a, u8 b, u8 c, u16 d)
+static void sub_808DEB0(u16 a, u8 b, u8 c, u16 d)
{
u8 text[4];
u16 unk[2];
@@ -1057,16 +2232,16 @@ void sub_808DEB0(u16 a, u8 b, u8 c, u16 d)
r7 = NationalToHoennOrder(r7);
unk[0] = 0x3FC;
unk[1] = 0x3FD;
- text[0] = r7 / 100 + 0xA1;
- text[1] = (r7 % 100) / 10 + 0xA1;
- text[2] = (r7 % 100) % 10 + 0xA1;
- text[3] = 0xFF;
+ text[0] = CHAR_0 + r7 / 100;
+ text[1] = CHAR_0 + (r7 % 100) / 10;
+ text[2] = CHAR_0 + (r7 % 100) % 10;
+ text[3] = EOS;
*(u16 *)(VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0];
- *(u16 *)(VRAM + 0x40 + d * 0x800 + c * 0x40 + b * 2) = unk[1];
+ *(u16 *)(VRAM + d * 0x800 + (c + 1) * 0x40 + b * 2) = unk[1];
MenuPrint(text, b - 15, c);
}
-void sub_808DF88(u16 a, u8 b, u8 c, u16 d)
+static void sub_808DF88(u16 a, u8 b, u8 c, u16 d)
{
u16 unk[2];
@@ -1081,152 +2256,57 @@ void sub_808DF88(u16 a, u8 b, u8 c, u16 d)
unk[1] = 0;
}
*(u16 *)(VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0];
- *(u16 *)(VRAM + 0x40 + d * 0x800 + c * 0x40 + b * 2) = unk[1];
+ *(u16 *)(VRAM + d * 0x800 + (c + 1) * 0x40 + b * 2) = unk[1];
}
-#ifdef NONMATCHING
-//FixMe
-u8 sub_808DFE4(u16 a, u8 b, u8 c)
+static u8 sub_808DFE4(u16 num, u8 b, u8 c)
{
u8 text[10];
u8 i;
- u32 species;
for (i = 0; i < 10; i++)
- text[i] = 0;
+ text[i] = CHAR_SPACE;
text[i] = EOS;
- species = NationalPokedexNumToSpecies(a);
- if (species)
- {
- for (i = 0; gSpeciesNames[species][i] != EOS && i < 10; i++)
- text[i] = gSpeciesNames[species][i];
- }
- else
+
+ num = NationalPokedexNumToSpecies(num);
+ switch (num)
{
+ default:
+ for (i = 0; gSpeciesNames[num][i] != EOS && i < 10; i++)
+ text[i] = gSpeciesNames[num][i];
+ break;
+ case 0:
for (i = 0; i < 10; i++)
- text[i] = 0xAE;
+ text[i] = CHAR_HYPHEN;
+ break;
}
MenuPrint_PixelCoords(text, (b - 0x11) * 8 + 0xFC, c * 8, 0);
+ return i;
}
-#else
-__attribute__((naked))
-u8 sub_808DFE4(u16 a, u8 b, u8 c)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- sub sp, 0xC\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- lsls r1, 24\n\
- lsrs r5, r1, 24\n\
- lsls r2, 24\n\
- lsrs r6, r2, 24\n\
- movs r4, 0\n\
- movs r1, 0\n\
-_0808DFF8:\n\
- mov r2, sp\n\
- adds r0, r2, r4\n\
- strb r1, [r0]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0x9\n\
- bls _0808DFF8\n\
- adds r0, r2, r4\n\
- movs r1, 0xFF\n\
- strb r1, [r0]\n\
- adds r0, r3, 0\n\
- bl NationalPokedexNumToSpecies\n\
- adds r3, r0, 0\n\
- cmp r3, 0\n\
- beq _0808E058\n\
- movs r4, 0\n\
- ldr r2, _0808E054\n\
- movs r0, 0xB\n\
- adds r1, r3, 0\n\
- muls r1, r0\n\
- adds r0, r1, r2\n\
- ldrb r0, [r0]\n\
- subs r5, 0x11\n\
- lsls r6, 19\n\
- cmp r0, 0xFF\n\
- beq _0808E070\n\
- adds r3, r1, 0\n\
-_0808E032:\n\
- mov r0, sp\n\
- adds r1, r0, r4\n\
- adds r0, r4, r3\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- adds r0, r4, r3\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
- cmp r0, 0xFF\n\
- beq _0808E070\n\
- cmp r4, 0x9\n\
- bls _0808E032\n\
- b _0808E070\n\
- .align 2, 0\n\
-_0808E054: .4byte gSpeciesNames\n\
-_0808E058:\n\
- movs r4, 0\n\
- subs r5, 0x11\n\
- lsls r6, 19\n\
- movs r1, 0xAE\n\
-_0808E060:\n\
- mov r2, sp\n\
- adds r0, r2, r4\n\
- strb r1, [r0]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0x9\n\
- bls _0808E060\n\
-_0808E070:\n\
- lsls r1, r5, 27\n\
- movs r0, 0xFC\n\
- lsls r0, 24\n\
- adds r1, r0\n\
- lsrs r1, 24\n\
- lsrs r2, r6, 16\n\
- mov r0, sp\n\
- movs r3, 0\n\
- bl MenuPrint_PixelCoords\n\
- adds r0, r4, 0\n\
- add sp, 0xC\n\
- pop {r4-r6}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided\n");
-}
-#endif
-void sub_808E090(u8 a, u8 b, u16 c)
+static void sub_808E090(u8 a, u8 b, u16 c)
{
u8 i;
for (i = 0; i < 12; i++)
{
*(u16 *)(VRAM + c * 0x800 + b * 64 + (a + i) * 2) = 0;
- *(u16 *)(VRAM + 0x40 + c * 0x800 + b * 64 + (a + i) * 2) = 0;
+ *(u16 *)(VRAM + c * 0x800 + (b + 1) * 64 + (a + i) * 2) = 0;
}
}
-void sub_808E0CC(u16 a, u16 b)
+static void sub_808E0CC(u16 a, u16 b)
{
u8 i;
u16 unk;
u8 spriteId;
for (i = 0; i < 4; i++)
- gPokedexView->unk61E[i] |= 0xFFFF;
- gPokedexView->unk626 = 0xFFFF;
+ gPokedexView->unk61E[i] = 0xFFFF;
+ gPokedexView->selectedMonSpriteId = 0xFFFF;
sub_808DBE8(0, a, b);
REG_BG2VOFS = gPokedexView->unk62D;
+
unk = sub_808E888(a - 1);
if (unk != 0xFFFF)
{
@@ -1234,6 +2314,7 @@ void sub_808E0CC(u16 a, u16 b)
gSprites[spriteId].callback = sub_808EE28;
gSprites[spriteId].data5 = -32;
}
+
unk = sub_808E888(a);
if (unk != 0xFFFF)
{
@@ -1241,6 +2322,7 @@ void sub_808E0CC(u16 a, u16 b)
gSprites[spriteId].callback = sub_808EE28;
gSprites[spriteId].data5 = 0;
}
+
unk = sub_808E888(a + 1);
if (unk != 0xFFFF)
{
@@ -1248,11 +2330,12 @@ void sub_808E0CC(u16 a, u16 b)
gSprites[spriteId].callback = sub_808EE28;
gSprites[spriteId].data5 = 32;
}
+
gPokedexView->unk630 = 0;
gPokedexView->unk632 = 0;
}
-bool8 sub_808E208(u8 a, u8 b, u8 c)
+static bool8 sub_808E208(u8 a, u8 b, u8 c)
{
u16 i;
u8 foo;
@@ -1283,17 +2366,16 @@ bool8 sub_808E208(u8 a, u8 b, u8 c)
gPokedexView->unk62C += gPokedexView->unk628;
break;
}
- return 0;
+ return FALSE;
}
- //_0808E36C
else
{
REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk630 * 16;
- return 1;
+ return TRUE;
}
}
-void sub_808E398(u8 a, u16 b)
+static void sub_808E398(u8 a, u16 b)
{
u16 unk;
u8 spriteId;
@@ -1302,22 +2384,19 @@ void sub_808E398(u8 a, u16 b)
switch (a)
{
case 1:
- {
unk = sub_808E888(b - 1);
if (unk != 0xFFFF)
{
spriteId = sub_808E8C8(unk, 0x60, 0x50);
gSprites[spriteId].callback = sub_808EE28;
- gSprites[spriteId].data5 = 0xFFC0;
+ gSprites[spriteId].data5 = -64;
}
if (gPokedexView->unk630 > 0)
gPokedexView->unk630--;
else
- gPokedexView->unk630 = 0xF;
+ gPokedexView->unk630 = 15;
break;
- }
case 2:
- {
unk = sub_808E888(b + 1);
if (unk != 0xFFFF)
{
@@ -1331,370 +2410,90 @@ void sub_808E398(u8 a, u16 b)
gPokedexView->unk630 = 0;
break;
}
- }
}
-#ifdef NONMATCHING
-//This one's ridiculous. Fix later
-u16 sub_808E48C(u16 a, u16 b)
+
+// Ugly, ugly, ugly. I couldn't get it to match otherwise.
+static u16 sub_808E48C(u16 a, u16 b)
{
u8 r3;
u8 r5;
- u32 r10 = 0;
- if (!(gMain.heldKeys & 0x40) || a == 0)
- {
- u8 i;
- u16 r6;
+ u8 i;
+ u16 r6;
+ u8 r10 = 0;
+ if (!((gMain.heldKeys & 0x40) && (a > 0)))
+ {
//_0808E4B6
- if (gMain.heldKeys & 0x80)
- {
- if (a < gPokedexView->unk60C - 1)
- goto _0808E5C4;
- }
+ if (!((gMain.heldKeys & 0x80) && (a < gPokedexView->pokemonListCount - 1)))
//_0808E4CE
-
- if ((gMain.newKeys & 0x20) && a != 0)
{
- r6 = a;
- //_0808E4E0
- for (i = 0; i < 7; i++)
+ if ((gMain.newKeys & 0x20) && (a > 0))
{
- a = sub_8091818(1, a, 0, gPokedexView->unk60C - 1);
+ r6 = a;
+ //_0808E4E0
+ for (i = 0; i < 7; i++)
+ a = sub_8091818(1, a, 0, gPokedexView->pokemonListCount - 1);
+ gPokedexView->unk62C += 16 * (a - r6);
+ sub_808E82C();
+ sub_808E0CC(a, 0xE);
+ PlaySE(0x6D);
+ }
+ //_0808E53C
+ else if ((gMain.newKeys & 0x10) && (a < gPokedexView->pokemonListCount - 1))
+ {
+ r6 = a;
+ for (i = 0; i < 7; i++)
+ a = sub_8091818(0, a, 0, gPokedexView->pokemonListCount - 1);
+ gPokedexView->unk62C += (a - r6) * 16;
+ sub_808E82C();
+ sub_808E0CC(a, 0xE);
+ PlaySE(0x6D);
+ }
+ _0808E5A2:
+ if (r10 == 0)
+ {
+ gPokedexView->unk638 = 0;
+ return a;
}
-
- gPokedexView->unk62C += (a - r6) * 16;
- sub_808E82C();
- sub_808E0CC(a, 0xE);
- PlaySE(SE_Z_PAGE);
- goto _0808E5A2;
}
- //_0808E53C
- if (!(gMain.newKeys & 0x10) || a >= gPokedexView->unk60C - 1)
- goto _0808E5A2;
-
- r6 = a;
- for (i = 0; i < 7; i++)
+ else
{
- a = sub_8091818(0, a, 0, gPokedexView->unk60C - 1);
+ // to _0808E5C4
+ r10 = 2;
+ a = sub_8091818(0, a, 0, gPokedexView->pokemonListCount - 1);
+ sub_808E398(2, a);
+ //goto _0808E60E
+ sub_808DBE8(2, a, b);
+ PlaySE(0x6C);
+ goto _0808E5A2;
}
-
- gPokedexView->unk62C += (a - r6) * 16;
- sub_808E82C();
- sub_808E0CC(a, 0xE);
- PlaySE(SE_Z_PAGE);
- goto _0808E5A2;
-
- _0808E5A2:
- if (r10 != 0)
- goto _0808E628;
- gPokedexView->unk638 = r10;
- return a;
-
- _0808E5C4:
- r10 = 2;
- a = sub_8091818(0, a, 0, gPokedexView->unk60C - 1);
- sub_808E398(2, a);
- //goto _0808E60E
- sub_808DBE8(2, a, b);
- PlaySE(SE_Z_SCROLL);
}
- //_0808E5E4
else
{
+ //to _0808E5E4
r10 = 1;
- a = sub_8091818(1, a, 0, gPokedexView->unk60C - 1);
+ a = sub_8091818(1, a, 0, gPokedexView->pokemonListCount - 1);
sub_808E398(1, a);
//_0808E60E
sub_808DBE8(1, a, b);
- PlaySE(SE_Z_SCROLL);
+ PlaySE(0x6C);
+ goto _0808E5A2;
}
- //_0808E60E
- goto _0808E5A2;
-
- _0808E628:
+ //_0808E628
r5 = gUnknown_083A05EC[gPokedexView->unk638 / 4];
r3 = gUnknown_083A05F1[gPokedexView->unk638 / 4];
gPokedexView->unk62E = r3;
gPokedexView->unk636 = r3;
gPokedexView->unk634 = r5;
gPokedexView->unk62F = r10;
- gPokedexView->unk628 = r5;
+ gPokedexView->unk628 = r5 / 2;
sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636);
if (gPokedexView->unk638 <= 0xB)
gPokedexView->unk638++;
return a;
}
-#else
-__attribute__((naked))
-u16 sub_808E48C(u16 a, u16 b)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- lsls r0, 16\n\
- lsrs r7, r0, 16\n\
- lsls r1, 16\n\
- lsrs r4, r1, 16\n\
- movs r0, 0\n\
- mov r10, r0\n\
- ldr r1, _0808E52C\n\
- ldrh r2, [r1, 0x2C]\n\
- movs r0, 0x40\n\
- ands r0, r2\n\
- adds r3, r1, 0\n\
- cmp r0, 0\n\
- beq _0808E4B6\n\
- cmp r7, 0\n\
- beq _0808E4B6\n\
- b _0808E5E4\n\
-_0808E4B6:\n\
- movs r0, 0x80\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0808E4CE\n\
- ldr r0, _0808E530\n\
- ldr r0, [r0]\n\
- ldr r1, _0808E534\n\
- adds r0, r1\n\
- ldrh r0, [r0]\n\
- subs r0, 0x1\n\
- cmp r7, r0\n\
- blt _0808E5C4\n\
-_0808E4CE:\n\
- ldrh r1, [r3, 0x2E]\n\
- movs r0, 0x20\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0808E53C\n\
- cmp r7, 0\n\
- beq _0808E53C\n\
- adds r6, r7, 0\n\
- movs r4, 0\n\
-_0808E4E0:\n\
- ldr r5, _0808E530\n\
- ldr r0, [r5]\n\
- ldr r2, _0808E534\n\
- adds r0, r2\n\
- ldrh r3, [r0]\n\
- subs r3, 0x1\n\
- lsls r3, 16\n\
- lsrs r3, 16\n\
- movs r0, 0x1\n\
- adds r1, r7, 0\n\
- movs r2, 0\n\
- bl sub_8091818\n\
- adds r7, r0, 0\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0x6\n\
- bls _0808E4E0\n\
- ldr r1, [r5]\n\
- ldr r3, _0808E538\n\
- adds r1, r3\n\
- subs r0, r7, r6\n\
- lsls r0, 4\n\
- ldrb r2, [r1]\n\
- adds r0, r2\n\
- strb r0, [r1]\n\
- bl sub_808E82C\n\
- adds r0, r7, 0\n\
- movs r1, 0xE\n\
- bl sub_808E0CC\n\
- movs r0, 0x6D\n\
- bl PlaySE\n\
- b _0808E5A2\n\
- .align 2, 0\n\
-_0808E52C: .4byte gMain\n\
-_0808E530: .4byte gPokedexView\n\
-_0808E534: .4byte 0x0000060c\n\
-_0808E538: .4byte 0x0000062c\n\
-_0808E53C:\n\
- ldrh r1, [r3, 0x2E]\n\
- movs r0, 0x10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0808E5A2\n\
- ldr r0, _0808E5B8\n\
- ldr r0, [r0]\n\
- ldr r3, _0808E5BC\n\
- adds r0, r3\n\
- ldrh r0, [r0]\n\
- subs r0, 0x1\n\
- cmp r7, r0\n\
- bge _0808E5A2\n\
- adds r6, r7, 0\n\
- movs r4, 0\n\
-_0808E55A:\n\
- ldr r5, _0808E5B8\n\
- ldr r0, [r5]\n\
- ldr r1, _0808E5BC\n\
- adds r0, r1\n\
- ldrh r3, [r0]\n\
- subs r3, 0x1\n\
- lsls r3, 16\n\
- lsrs r3, 16\n\
- movs r0, 0\n\
- adds r1, r7, 0\n\
- movs r2, 0\n\
- bl sub_8091818\n\
- adds r7, r0, 0\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0x6\n\
- bls _0808E55A\n\
- ldr r1, [r5]\n\
- ldr r2, _0808E5C0\n\
- adds r1, r2\n\
- subs r0, r7, r6\n\
- lsls r0, 4\n\
- ldrb r3, [r1]\n\
- adds r0, r3\n\
- strb r0, [r1]\n\
- bl sub_808E82C\n\
- adds r0, r7, 0\n\
- movs r1, 0xE\n\
- bl sub_808E0CC\n\
- movs r0, 0x6D\n\
- bl PlaySE\n\
-_0808E5A2:\n\
- mov r0, r10\n\
- cmp r0, 0\n\
- bne _0808E628\n\
- ldr r0, _0808E5B8\n\
- ldr r0, [r0]\n\
- movs r1, 0xC7\n\
- lsls r1, 3\n\
- adds r0, r1\n\
- mov r2, r10\n\
- strh r2, [r0]\n\
- b _0808E68E\n\
- .align 2, 0\n\
-_0808E5B8: .4byte gPokedexView\n\
-_0808E5BC: .4byte 0x0000060c\n\
-_0808E5C0: .4byte 0x0000062c\n\
-_0808E5C4:\n\
- movs r3, 0x2\n\
- mov r10, r3\n\
- lsls r3, r0, 16\n\
- lsrs r3, 16\n\
- movs r0, 0\n\
- adds r1, r7, 0\n\
- movs r2, 0\n\
- bl sub_8091818\n\
- adds r7, r0, 0\n\
- movs r0, 0x2\n\
- adds r1, r7, 0\n\
- bl sub_808E398\n\
- movs r0, 0x2\n\
- b _0808E60E\n\
-_0808E5E4:\n\
- movs r0, 0x1\n\
- mov r10, r0\n\
- ldr r0, _0808E620\n\
- ldr r0, [r0]\n\
- ldr r1, _0808E624\n\
- adds r0, r1\n\
- ldrh r3, [r0]\n\
- subs r3, 0x1\n\
- lsls r3, 16\n\
- lsrs r3, 16\n\
- movs r0, 0x1\n\
- adds r1, r7, 0\n\
- movs r2, 0\n\
- bl sub_8091818\n\
- adds r7, r0, 0\n\
- movs r0, 0x1\n\
- adds r1, r7, 0\n\
- bl sub_808E398\n\
- movs r0, 0x1\n\
-_0808E60E:\n\
- adds r1, r7, 0\n\
- adds r2, r4, 0\n\
- bl sub_808DBE8\n\
- movs r0, 0x6C\n\
- bl PlaySE\n\
- b _0808E5A2\n\
- .align 2, 0\n\
-_0808E620: .4byte gPokedexView\n\
-_0808E624: .4byte 0x0000060c\n\
-_0808E628:\n\
- ldr r1, _0808E6A0\n\
- ldr r6, _0808E6A4\n\
- ldr r2, [r6]\n\
- movs r3, 0xC7\n\
- lsls r3, 3\n\
- mov r9, r3\n\
- adds r0, r2, r3\n\
- ldrh r0, [r0]\n\
- lsrs r0, 2\n\
- adds r1, r0, r1\n\
- ldrb r5, [r1]\n\
- ldr r1, _0808E6A8\n\
- adds r0, r1\n\
- ldrb r3, [r0]\n\
- ldr r0, _0808E6AC\n\
- adds r2, r0\n\
- strb r3, [r2]\n\
- ldr r1, [r6]\n\
- ldr r2, _0808E6B0\n\
- mov r8, r2\n\
- adds r0, r1, r2\n\
- strh r3, [r0]\n\
- ldr r4, _0808E6B4\n\
- adds r0, r1, r4\n\
- strh r5, [r0]\n\
- ldr r3, _0808E6B8\n\
- adds r1, r3\n\
- mov r0, r10\n\
- strb r0, [r1]\n\
- ldr r2, [r6]\n\
- lsrs r5, 1\n\
- movs r1, 0xC5\n\
- lsls r1, 3\n\
- adds r0, r2, r1\n\
- strh r5, [r0]\n\
- adds r3, r2, r3\n\
- ldrb r0, [r3]\n\
- adds r4, r2, r4\n\
- ldrb r1, [r4]\n\
- add r2, r8\n\
- ldrb r2, [r2]\n\
- bl sub_808E208\n\
- ldr r0, [r6]\n\
- mov r2, r9\n\
- adds r1, r0, r2\n\
- ldrh r0, [r1]\n\
- cmp r0, 0xB\n\
- bhi _0808E68E\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
-_0808E68E:\n\
- adds r0, r7, 0\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_0808E6A0: .4byte gUnknown_083A05EC\n\
-_0808E6A4: .4byte gPokedexView\n\
-_0808E6A8: .4byte gUnknown_083A05F1\n\
-_0808E6AC: .4byte 0x0000062e\n\
-_0808E6B0: .4byte 0x00000636\n\
-_0808E6B4: .4byte 0x00000634\n\
-_0808E6B8: .4byte 0x0000062f\n\
- .syntax divided\n");
-}
-#endif
-void sub_808E6BC(void)
+static void sub_808E6BC(void)
{
u16 i;
@@ -1703,11 +2502,11 @@ void sub_808E6BC(void)
u16 spriteId = gPokedexView->unk61E[i];
if (gSprites[spriteId].pos2.x == 0 && gSprites[spriteId].pos2.y == 0 && spriteId != 0xFFFF)
- gPokedexView->unk626 = spriteId;
+ gPokedexView->selectedMonSpriteId = spriteId;
}
}
-u8 sub_808E71C(void)
+static u8 sub_808E71C(void)
{
u16 r2;
u16 r4 = gPokedexView->selectedPokemon;
@@ -1717,7 +2516,7 @@ u8 sub_808E71C(void)
r2 = r4;
while (r2 != 0)
{
- r2 = sub_8091818(1, r2, 0, gPokedexView->unk60C - 1);
+ r2 = sub_8091818(1, r2, 0, gPokedexView->pokemonListCount - 1);
if (gPokedexView->unk0[r2].seen)
{
@@ -1735,12 +2534,12 @@ u8 sub_808E71C(void)
return 1;
}
}
- else if ((gMain.newKeys & DPAD_DOWN) && r4 < gPokedexView->unk60C - 1)
+ else if ((gMain.newKeys & DPAD_DOWN) && r4 < gPokedexView->pokemonListCount - 1)
{
r2 = r4;
- while (r2 < gPokedexView->unk60C - 1)
+ while (r2 < gPokedexView->pokemonListCount - 1)
{
- r2 = sub_8091818(0, r2, 0, gPokedexView->unk60C - 1);
+ r2 = sub_8091818(0, r2, 0, gPokedexView->pokemonListCount - 1);
if (gPokedexView->unk0[r2].seen)
{
@@ -1761,7 +2560,7 @@ u8 sub_808E71C(void)
return 0;
}
-u8 sub_808E82C(void)
+static u8 sub_808E82C(void)
{
u16 i;
@@ -1776,9 +2575,9 @@ u8 sub_808E82C(void)
return 0;
}
-u16 sub_808E888(u16 a1)
+static u16 sub_808E888(u16 a1)
{
- if (a1 > 385 || gPokedexView->unk0[a1].dexNum == 0xFFFF)
+ if (a1 >= NATIONAL_DEX_COUNT || gPokedexView->unk0[a1].dexNum == 0xFFFF)
return 0xFFFF;
else if (gPokedexView->unk0[a1].seen)
return gPokedexView->unk0[a1].dexNum;
@@ -1786,7 +2585,7 @@ u16 sub_808E888(u16 a1)
return 0;
}
-u32 sub_808E8C8(u16 a, u16 b, u16 c)
+static u32 sub_808E8C8(u16 a, s16 b, s16 c)
{
u8 i;
@@ -1794,7 +2593,7 @@ u32 sub_808E8C8(u16 a, u16 b, u16 c)
{
if (gPokedexView->unk61E[i] == 0xFFFF)
{
- u8 spriteId = sub_80918EC(a, (s16)b, (s16)c, i);
+ u8 spriteId = sub_80918EC(a, b, c, i);
gSprites[spriteId].oam.affineMode = 1;
gSprites[spriteId].oam.priority = 3;
@@ -1808,38 +2607,38 @@ u32 sub_808E8C8(u16 a, u16 b, u16 c)
return 0xFFFF;
}
-void sub_808E978(u8 a)
+static void sub_808E978(u8 a)
{
u8 spriteId;
u16 r5;
- spriteId = CreateSprite(&gSpriteTemplate_83A053C, 0xB8, 4, 0);
+ spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 4, 0);
gSprites[spriteId].data1 = 0;
- spriteId = CreateSprite(&gSpriteTemplate_83A053C, 0xB8, 0x9C, 0);
+ spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 156, 0);
gSprites[spriteId].data1 = 1;
- gSprites[spriteId].vFlip = 1;
+ gSprites[spriteId].vFlip = TRUE;
- CreateSprite(&gSpriteTemplate_83A0524, 0xEA, 0x14, 0);
- CreateSprite(&gSpriteTemplate_83A0554, 0x10, 0x8A, 0);
+ CreateSprite(&gSpriteTemplate_83A0524, 234, 20, 0);
+ CreateSprite(&gSpriteTemplate_83A0554, 16, 138, 0);
- spriteId = CreateSprite(&gSpriteTemplate_83A0554, 0x30, 0x8A, 0);
+ spriteId = CreateSprite(&gSpriteTemplate_83A0554, 48, 138, 0);
StartSpriteAnim(&gSprites[spriteId], 3);
- spriteId = CreateSprite(&gSpriteTemplate_83A0554, 0x10, 0x9E, 0);
+ spriteId = CreateSprite(&gSpriteTemplate_83A0554, 16, 158, 0);
StartSpriteAnim(&gSprites[spriteId], 2);
gSprites[spriteId].data2 = 0x80;
- spriteId = CreateSprite(&gSpriteTemplate_83A0554, 0x30, 0x9E, 0);
+ spriteId = CreateSprite(&gSpriteTemplate_83A0554, 48, 158, 0);
StartSpriteAnim(&gSprites[spriteId], 1);
- spriteId = CreateSprite(&gSpriteTemplate_83A056C, 0, 0x50, 2);
+ spriteId = CreateSprite(&gSpriteTemplate_83A056C, 0, 80, 2);
gSprites[spriteId].oam.affineMode = 1;
gSprites[spriteId].oam.matrixNum = 30;
gSprites[spriteId].data0 = 0x1E;
gSprites[spriteId].data1 = 0;
- spriteId = CreateSprite(&gSpriteTemplate_83A056C, 0, 0x50, 2);
+ spriteId = CreateSprite(&gSpriteTemplate_83A056C, 0, 80, 2);
gSprites[spriteId].oam.affineMode = 1;
gSprites[spriteId].oam.matrixNum = 31;
gSprites[spriteId].data0 = 0x1F;
@@ -1849,95 +2648,97 @@ void sub_808E978(u8 a)
{
u32 _a;
- CreateSprite(&gSpriteTemplate_83A0584, 0x20, 0x28, 1);
+ CreateSprite(&gSpriteTemplate_83A0584, 32, 40, 1);
- spriteId = CreateSprite(&gSpriteTemplate_83A0584, 0x20, 0x48, 1);
+ spriteId = CreateSprite(&gSpriteTemplate_83A0584, 32, 72, 1);
StartSpriteAnim(&gSprites[spriteId], 1);
_a = 0;
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x1C, 0x30, 1);
+ spriteId = CreateSprite(&gSpriteTemplate_83A059C, 28, 48, 1);
r5 = gPokedexView->unk61A / 100;
StartSpriteAnim(&gSprites[spriteId], r5);
if (r5 != 0)
_a = 1;
else
- gSprites[spriteId].invisible = 1;
+ gSprites[spriteId].invisible = TRUE;
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x22, 0x30, 1);
+ spriteId = CreateSprite(&gSpriteTemplate_83A059C, 34, 48, 1);
r5 = (gPokedexView->unk61A % 100) / 10;
if (r5 != 0 || _a != 0)
StartSpriteAnim(&gSprites[spriteId], r5);
else
- gSprites[spriteId].invisible = 1;
+ gSprites[spriteId].invisible = TRUE;
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x28, 0x30, 1);
+ spriteId = CreateSprite(&gSpriteTemplate_83A059C, 40, 48, 1);
r5 = (gPokedexView->unk61A % 100) % 10;
StartSpriteAnim(&gSprites[spriteId], r5);
_a = 0;
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x1C, 0x50, 1);
+ spriteId = CreateSprite(&gSpriteTemplate_83A059C, 28, 80, 1);
r5 = gPokedexView->unk61C / 100;
StartSpriteAnim(&gSprites[spriteId], r5);
if (r5 != 0)
_a = 1;
else
- gSprites[spriteId].invisible = 1;
+ gSprites[spriteId].invisible = TRUE;
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x22, 0x50, 1);
+ spriteId = CreateSprite(&gSpriteTemplate_83A059C, 34, 80, 1);
r5 = (gPokedexView->unk61C % 100) / 10;
if (r5 != 0 || _a != 0)
StartSpriteAnim(&gSprites[spriteId], r5);
else
- gSprites[spriteId].invisible = 1;
+ gSprites[spriteId].invisible = TRUE;
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x28, 0x50, 1);
+ spriteId = CreateSprite(&gSpriteTemplate_83A059C, 40, 80, 1);
r5 = (gPokedexView->unk61C % 100) % 10;
StartSpriteAnim(&gSprites[spriteId], r5);
- spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 0x8C, 0x60, 1);
- gSprites[spriteId].invisible = 1;
+ spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 140, 96, 1);
+ gSprites[spriteId].invisible = TRUE;
}
else
{
- spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 0x8C, 0x50, 1);
- gSprites[spriteId].invisible = 1;
+ spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 140, 80, 1);
+ gSprites[spriteId].invisible = TRUE;
}
}
-void nullsub_58(struct Sprite *sprite)
+static void nullsub_58(struct Sprite *sprite)
{
}
-void sub_808ED94(struct Sprite *sprite)
+static void sub_808ED94(struct Sprite *sprite)
{
if (gPokedexView->unk64A != 0)
DestroySprite(sprite);
}
//Move Pokemon into position for description page
-void sub_808EDB8(struct Sprite *sprite)
+static void sub_808EDB8(struct Sprite *sprite)
{
sprite->oam.priority = 0;
sprite->oam.affineMode = 0;
sprite->pos2.x = 0;
sprite->pos2.y = 0;
- if (sprite->pos1.x != 0x30 || sprite->pos1.y != 0x38)
+ if (sprite->pos1.x != 48 || sprite->pos1.y != 56)
{
- if (sprite->pos1.x > 0x30)
+ if (sprite->pos1.x > 48)
sprite->pos1.x--;
- if (sprite->pos1.x < 0x30)
+ if (sprite->pos1.x < 48)
sprite->pos1.x++;
- if (sprite->pos1.y > 0x38)
+
+ if (sprite->pos1.y > 56)
sprite->pos1.y--;
- if (sprite->pos1.y <0x38)
+ if (sprite->pos1.y < 56)
sprite->pos1.y++;
}
- //_0808EE1C
else
+ {
sprite->callback = nullsub_58;
+ }
}
-void sub_808EE28(struct Sprite *sprite)
+static void sub_808EE28(struct Sprite *sprite)
{
u8 data1 = sprite->data1;
@@ -1948,223 +2749,132 @@ void sub_808EE28(struct Sprite *sprite)
}
else
{
- //_0808EE58
- s32 var;
+ u32 var;
sprite->pos2.y = gSineTable[(u8)sprite->data5] * 76 / 256;
var = 0x10000 / gSineTable[sprite->data5 + 0x40];
- if ((u32)var > 0xFFFF)
+ if (var > 0xFFFF)
var = 0xFFFF;
SetOamMatrix(sprite->data1 + 1, 0x100, 0, 0, var);
sprite->oam.matrixNum = data1 + 1;
- //ToDo: clean up these inequalities
- if ((u16)(sprite->data5 + 0x3F) <= 0x7E)
+ if (sprite->data5 > -64 && sprite->data5 < 64)
{
- sprite->invisible = 0;
+ sprite->invisible = FALSE;
sprite->data0 = 1;
}
else
{
- sprite->invisible = 1;
+ sprite->invisible = TRUE;
}
- //_0808EEF8
- if ((u16)(sprite->data5 + 0x3F) > 0x7E && sprite->data0 != 0)
+
+ if ((sprite->data5 <= -64 || sprite->data5 >= 64) && sprite->data0 != 0)
{
DestroySprite(sprite);
gPokedexView->unk61E[data1] = 0xFFFF;
}
}
- //_0808EF16
}
-void sub_808EF38(struct Sprite *sprite)
+static void sub_808EF38(struct Sprite *sprite)
{
if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
DestroySprite(sprite);
else
- sprite->pos2.y = gPokedexView->selectedPokemon * 120 / (gPokedexView->unk60C - 1);
+ sprite->pos2.y = gPokedexView->selectedPokemon * 120 / (gPokedexView->pokemonListCount - 1);
}
-void sub_808EF8C(struct Sprite *sprite)
+static void sub_808EF8C(struct Sprite *sprite)
{
if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
+ {
DestroySprite(sprite);
+ }
else
{
u8 r0;
if (sprite->data1 != 0)
{
- if (gPokedexView->selectedPokemon == gPokedexView->unk60C - 1)
- sprite->invisible = 1;
+ if (gPokedexView->selectedPokemon == gPokedexView->pokemonListCount - 1)
+ sprite->invisible = TRUE;
else
- sprite->invisible = 0;
+ sprite->invisible = FALSE;
r0 = sprite->data2;
}
else
{
if (gPokedexView->selectedPokemon == 0)
- sprite->invisible = 1;
+ sprite->invisible = TRUE;
else
- sprite->invisible = 0;
- r0 = sprite->data2 - 0x80;
+ sprite->invisible = FALSE;
+ r0 = sprite->data2 - 128;
}
sprite->pos2.y = gSineTable[r0] / 64;
sprite->data2 = sprite->data2 + 8;
if (gPokedexView->menuIsOpen == 0 && gPokedexView->menuY == 0 && sprite->invisible == 0)
- sprite->invisible = 0;
+ sprite->invisible = FALSE;
else
- sprite->invisible = 1;
+ sprite->invisible = TRUE;
}
}
-void sub_808F08C(struct Sprite *sprite)
+static void sub_808F08C(struct Sprite *sprite)
{
if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
DestroySprite(sprite);
}
-#ifdef NONMATCHING
-void sub_808F0B4(struct Sprite *sprite)
+static void sub_808F0B4(struct Sprite *sprite)
{
if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
+ {
DestroySprite(sprite);
+ }
else
{
+ u8 val;
s16 r3;
+ s16 r0;
- u8 unk = gPokedexView->unk62C + sprite->data1;
- u16 foo = gSineTable[unk];
- //u8 unk2 = sprite->data0;
- //u16 bar = gSineTable[unk + 0x40];
+ val = gPokedexView->unk62C + sprite->data1;
+ r3 = gSineTable[val];
+ r0 = gSineTable[val + 0x40];
+ SetOamMatrix(sprite->data0, r0, r3, -r3, r0);
- SetOamMatrix(sprite->data0, foo, gSineTable[unk + 0x40], (-(u16)foo) >> 16, gSineTable[unk + 0x40]);
-
- r3 = gSineTable[sprite->data1 + gPokedexView->unk62C];
- sprite->pos2.x = gSineTable[sprite->data1 + gPokedexView->unk62C + 0x40] * 5 / 256;
+ val = gPokedexView->unk62C + (sprite->data1 + 0x40);
+ r3 = gSineTable[val];
+ r0 = gSineTable[val + 0x40];
+ sprite->pos2.x = r0 * 40 / 256;
sprite->pos2.y = r3 * 40 / 256;
}
}
-#else
-__attribute__((naked))
-void sub_808F0B4(struct Sprite *sprite)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- sub sp, 0x4\n\
- adds r6, r0, 0\n\
- ldr r1, _0808F0D8 @ =gPokedexView\n\
- ldr r0, [r1]\n\
- ldr r2, _0808F0DC @ =0x0000064a\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
- adds r7, r1, 0\n\
- cmp r0, 0\n\
- beq _0808F0E0\n\
- cmp r0, 0x3\n\
- beq _0808F0E0\n\
- adds r0, r6, 0\n\
- bl DestroySprite\n\
- b _0808F158\n\
- .align 2, 0\n\
-_0808F0D8: .4byte gPokedexView\n\
-_0808F0DC: .4byte 0x0000064a\n\
-_0808F0E0:\n\
- ldr r0, [r7]\n\
- ldr r5, _0808F160 @ =0x0000062c\n\
- adds r0, r5\n\
- ldrb r1, [r0]\n\
- ldrh r0, [r6, 0x30]\n\
- adds r1, r0\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- ldr r4, _0808F164 @ =gSineTable\n\
- lsls r0, r1, 1\n\
- adds r0, r4\n\
- ldrh r3, [r0]\n\
- adds r1, 0x40\n\
- lsls r1, 1\n\
- adds r1, r4\n\
- ldrh r0, [r6, 0x2E]\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- ldrh r1, [r1]\n\
- lsls r3, 16\n\
- lsrs r2, r3, 16\n\
- negs r3, r3\n\
- lsrs r3, 16\n\
- str r1, [sp]\n\
- bl SetOamMatrix\n\
- ldr r1, [r7]\n\
- adds r1, r5\n\
- ldrh r0, [r6, 0x30]\n\
- adds r0, 0x40\n\
- ldrb r1, [r1]\n\
- adds r0, r1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- lsls r1, r0, 1\n\
- adds r1, r4\n\
- ldrh r3, [r1]\n\
- adds r0, 0x40\n\
- lsls r0, 1\n\
- adds r0, r4\n\
- movs r2, 0\n\
- ldrsh r1, [r0, r2]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r0, 3\n\
- cmp r0, 0\n\
- bge _0808F140\n\
- adds r0, 0xFF\n\
-_0808F140:\n\
- asrs r0, 8\n\
- strh r0, [r6, 0x24]\n\
- lsls r1, r3, 16\n\
- asrs r1, 16\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r0, 3\n\
- cmp r0, 0\n\
- bge _0808F154\n\
- adds r0, 0xFF\n\
-_0808F154:\n\
- asrs r0, 8\n\
- strh r0, [r6, 0x26]\n\
-_0808F158:\n\
- add sp, 0x4\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0808F160: .4byte 0x0000062c\n\
-_0808F164: .4byte gSineTable\n\
- .syntax divided\n");
-}
-#endif
-void sub_808F168(struct Sprite *sprite)
+static void sub_808F168(struct Sprite *sprite)
{
if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
+ {
DestroySprite(sprite);
+ }
else
{
- u16 r1 = gPokedexView->unk64A == 0 ? 0x50 : 0x60;
+ u16 r1 = gPokedexView->unk64A == 0 ? 80 : 96;
if (gPokedexView->menuIsOpen != 0 && gPokedexView->menuY == r1)
{
- sprite->invisible = 0;
+ sprite->invisible = FALSE;
sprite->pos2.y = gPokedexView->menuCursorPos * 16;
sprite->pos2.x = gSineTable[(u8)sprite->data2] / 64;
sprite->data2 += 8;
}
else
- sprite->invisible = 1;
+ {
+ sprite->invisible = TRUE;
+ }
}
}
-u8 sub_808F210(struct PokedexListItem *item, u8 b)
+static u8 sub_808F210(struct PokedexListItem *item, u8 b)
{
u8 taskId;
@@ -2178,15 +2888,15 @@ u8 sub_808F210(struct PokedexListItem *item, u8 b)
return taskId;
}
-bool8 sub_808F250(u8 taskId)
+static bool8 sub_808F250(u8 taskId)
{
if (gTasks[taskId].data[0] == 0 && gTasks[taskId].func == Task_PageScreenProcessInput)
- return 0;
+ return FALSE;
else
- return 1;
+ return TRUE;
}
-u8 sub_808F284(struct PokedexListItem *item, u8 b)
+static u8 sub_808F284(struct PokedexListItem *item, u8 b)
{
gUnknown_0202FFBC = item;
gTasks[b].data[0] = 1;
@@ -2196,7 +2906,7 @@ u8 sub_808F284(struct PokedexListItem *item, u8 b)
return b;
}
-void Task_InitPageScreenMultistep(u8 taskId)
+static void Task_InitPageScreenMultistep(u8 taskId)
{
switch (gMain.state)
{
@@ -2207,7 +2917,7 @@ void Task_InitPageScreenMultistep(u8 taskId)
u16 r2;
gPokedexView->unk64A = 1;
- gPokedexView->unk64E = 0;
+ gPokedexView->descriptionPageNum = 0;
gUnknown_03005CEC = gMain.vblankCallback;
SetVBlankCallback(NULL);
r2 = 0;
@@ -2241,7 +2951,6 @@ void Task_InitPageScreenMultistep(u8 taskId)
sub_8091154(NationalToHoennOrder(gUnknown_0202FFBC->dexNum), 0xD, 3);
else
sub_8091154(gUnknown_0202FFBC->dexNum, 0xD, 3);
- //_0808F45A
sub_80911C8(gUnknown_0202FFBC->dexNum, 0x10, 3);
MenuPrint(gDexText_UnknownPoke, 11, 5);
MenuPrint(gDexText_UnknownHeight, 16, 7);
@@ -2254,7 +2963,6 @@ void Task_InitPageScreenMultistep(u8 taskId)
MenuPrint(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13);
sub_80917CC(14, 0x3FC);
}
- //_0808F50C
else
{
MenuPrint(gUnknown_083A05F8, 2, 13);
@@ -2265,27 +2973,24 @@ void Task_InitPageScreenMultistep(u8 taskId)
case 5:
if (gTasks[taskId].data[1] == 0)
{
- //_0808F540
gTasks[taskId].data[4] = (u16)sub_80918EC(gUnknown_0202FFBC->dexNum, 0x30, 0x38, 0);
gSprites[gTasks[taskId].data[4]].oam.priority = 0;
}
gMain.state++;
break;
case 6:
- {
- u32 r3 = 0;
-
- if (gTasks[taskId].data[2] != 0)
- r3 = 0x14;
- if (gTasks[taskId].data[1] != 0)
{
- r3 |= (1 << (gSprites[gTasks[taskId].data[4]].oam.paletteNum + 0x10));
+ u32 r3 = 0;
+
+ if (gTasks[taskId].data[2] != 0)
+ r3 = 0x14;
+ if (gTasks[taskId].data[1] != 0)
+ r3 |= (1 << (gSprites[gTasks[taskId].data[4]].oam.paletteNum + 16));
+ BeginNormalPaletteFade(~r3, 0, 16, 0, 0);
+ SetVBlankCallback(gUnknown_03005CEC);
+ gMain.state++;
}
- BeginNormalPaletteFade(~r3, 0, 0x10, 0, 0);
- SetVBlankCallback(gUnknown_03005CEC);
- gMain.state++;
break;
- }
case 7:
REG_BLDCNT = 0;
REG_BLDALPHA = 0;
@@ -2305,7 +3010,9 @@ void Task_InitPageScreenMultistep(u8 taskId)
PlayCry2(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum), 0, 0x7D, 0xA);
}
else
+ {
gMain.state++;
+ }
}
break;
case 9:
@@ -2323,21 +3030,23 @@ void Task_InitPageScreenMultistep(u8 taskId)
}
}
-void Task_PageScreenProcessInput(u8 taskId)
+static void Task_PageScreenProcessInput(u8 taskId)
{
if (gTasks[taskId].data[0] != 0)
{
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
gTasks[taskId].func = sub_808F888;
PlaySE(SE_Z_SCROLL);
+ return;
}
- else if (gMain.newKeys & B_BUTTON)
+ if (gMain.newKeys & B_BUTTON)
{
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
gTasks[taskId].func = Task_ClosePageScreen;
PlaySE(SE_PC_OFF);
+ return;
}
- else if (gMain.newKeys & A_BUTTON)
+ if (gMain.newKeys & A_BUTTON)
{
switch (gPokedexView->selectedScreen)
{
@@ -2356,7 +3065,9 @@ void Task_PageScreenProcessInput(u8 taskId)
break;
case SIZE_SCREEN:
if (!gUnknown_0202FFBC->owned)
+ {
PlaySE(SE_HAZURE);
+ }
else
{
BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
@@ -2365,38 +3076,41 @@ void Task_PageScreenProcessInput(u8 taskId)
}
break;
}
+ return;
}
- else if (((gMain.newKeys & DPAD_LEFT)
+ if (((gMain.newKeys & DPAD_LEFT)
|| ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
&& gPokedexView->selectedScreen > 0)
{
gPokedexView->selectedScreen--;
sub_8090584(gPokedexView->selectedScreen, 0xD);
PlaySE(SE_Z_PAGE);
+ return;
}
- else if (((gMain.newKeys & DPAD_RIGHT)
+ if (((gMain.newKeys & DPAD_RIGHT)
|| ((gMain.newKeys & R_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
&& gPokedexView->selectedScreen < 3)
{
gPokedexView->selectedScreen++;
sub_8090584(gPokedexView->selectedScreen, 0xD);
PlaySE(SE_Z_PAGE);
+ return;
}
}
-void sub_808F888(u8 taskId)
+static void sub_808F888(u8 taskId)
{
if (!gPaletteFade.active)
gTasks[taskId].func = Task_InitPageScreenMultistep;
}
-void Task_ClosePageScreen(u8 taskId)
+static void Task_ClosePageScreen(u8 taskId)
{
if (!gPaletteFade.active)
DestroyTask(taskId);
}
-void Task_InitAreaScreenMultistep(u8 taskId)
+static void Task_InitAreaScreenMultistep(u8 taskId)
{
switch (gMain.state)
{
@@ -2429,13 +3143,13 @@ void Task_InitAreaScreenMultistep(u8 taskId)
}
}
-void Task_AreaScreenProcessInput(u8 taskId)
+static void Task_AreaScreenProcessInput(u8 taskId)
{
if (gPokedexView->unk64F != 0)
gTasks[taskId].func = sub_808FA00;
}
-void sub_808FA00(u8 taskId)
+static void sub_808FA00(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -2452,7 +3166,7 @@ void sub_808FA00(u8 taskId)
}
}
-void Task_InitCryScreenMultistep(u8 taskId)
+static void Task_InitCryScreenMultistep(u8 taskId)
{
switch (gMain.state)
{
@@ -2499,36 +3213,34 @@ void Task_InitCryScreenMultistep(u8 taskId)
gMain.state++;
break;
case 6:
- {
- struct CryRelatedStruct sp8;
-
- sp8.unk0 = 0x4020;
- sp8.unk2 = 0x1F;
- sp8.paletteNo = 8;
- sp8.yPos = 0x1E;
- sp8.xPos = 0xC;
- if (sub_8119E3C(&sp8, 0) != 0)
{
- gMain.state++;
- gUnknown_03005E98 = 0;
+ struct CryRelatedStruct sp8;
+
+ sp8.unk0 = 0x4020;
+ sp8.unk2 = 0x1F;
+ sp8.paletteNo = 8;
+ sp8.yPos = 0x1E;
+ sp8.xPos = 0xC;
+ if (sub_8119E3C(&sp8, 0) != 0)
+ {
+ gMain.state++;
+ gUnknown_03005E98 = 0;
+ }
}
break;
- }
case 7:
- {
- struct CryRelatedStruct sp10;
-
- sp10.unk0 = 0x3000;
- sp10.unk2 = 0xE;
- sp10.paletteNo = 9;
- sp10.xPos = 0x12;
- sp10.yPos = 3;
- if (ShowPokedexCryScreen(&sp10, 1) != 0)
{
- gMain.state++;
+ struct CryRelatedStruct sp10;
+
+ sp10.unk0 = 0x3000;
+ sp10.unk2 = 0xE;
+ sp10.paletteNo = 9;
+ sp10.xPos = 0x12;
+ sp10.yPos = 3;
+ if (ShowPokedexCryScreen(&sp10, 1) != 0)
+ gMain.state++;
}
break;
- }
case 8:
BeginNormalPaletteFade(-0x15, 0, 0x10, 0, 0);
SetVBlankCallback(gUnknown_03005CEC);
@@ -2552,7 +3264,7 @@ void Task_InitCryScreenMultistep(u8 taskId)
}
}
-void Task_CryScreenProcessInput(u8 taskId)
+static void Task_CryScreenProcessInput(u8 taskId)
{
sub_8119F88(0);
@@ -2576,8 +3288,9 @@ void Task_CryScreenProcessInput(u8 taskId)
gPokedexView->unk64F = 1;
gTasks[taskId].func = sub_808FFBC;
PlaySE(SE_PC_OFF);
+ return;
}
- else if ((gMain.newKeys & DPAD_LEFT)
+ if ((gMain.newKeys & DPAD_LEFT)
|| ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
{
BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
@@ -2585,12 +3298,15 @@ void Task_CryScreenProcessInput(u8 taskId)
gPokedexView->unk64F = 2;
gTasks[taskId].func = sub_808FFBC;
PlaySE(SE_Z_PAGE);
+ return;
}
- else if ((gMain.newKeys & DPAD_RIGHT)
+ if ((gMain.newKeys & DPAD_RIGHT)
|| ((gMain.newKeys & R_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
{
if (!gUnknown_0202FFBC->owned)
+ {
PlaySE(SE_HAZURE);
+ }
else
{
BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
@@ -2599,11 +3315,12 @@ void Task_CryScreenProcessInput(u8 taskId)
gTasks[taskId].func = sub_808FFBC;
PlaySE(SE_Z_PAGE);
}
+ return;
}
}
}
-void sub_808FFBC(u8 taskId)
+static void sub_808FFBC(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -2619,11 +3336,12 @@ void sub_808FFBC(u8 taskId)
break;
case 3:
gTasks[taskId].func = Task_InitSizeScreenMultistep;
+ break;
}
}
}
-void sub_8090040(u8 a)
+static void sub_8090040(u8 a)
{
u16 unk;
@@ -2634,7 +3352,7 @@ void sub_8090040(u8 a)
LoadPalette(&unk, 0x5D, 2);
}
-void Task_InitSizeScreenMultistep(u8 taskId)
+static void Task_InitSizeScreenMultistep(u8 taskId)
{
u8 spriteId;
@@ -2664,40 +3382,40 @@ void Task_InitSizeScreenMultistep(u8 taskId)
gMain.state++;
break;
case 3:
- {
- u8 string[40]; //I hope this is the correct size
-
- SetUpWindowConfig(&gWindowConfig_81E702C);
- InitMenuWindow(&gWindowConfig_81E702C);
- string[0] = EOS;
- StringAppend(string, gDexText_SizeComparedTo);
- StringAppend(string, gSaveBlock2.playerName);
- sub_8072BD8(string, 3, 15, 0xC0);
- gMain.state++;
+ {
+ u8 string[40]; //I hope this is the correct size
+
+ SetUpWindowConfig(&gWindowConfig_81E702C);
+ InitMenuWindow(&gWindowConfig_81E702C);
+ string[0] = EOS;
+ StringAppend(string, gDexText_SizeComparedTo);
+ StringAppend(string, gSaveBlock2.playerName);
+ sub_8072BD8(string, 3, 15, 0xC0);
+ gMain.state++;
+ }
break;
- }
case 4:
ResetPaletteFade();
gMain.state++;
break;
case 5:
- spriteId = sub_8091A4C(gSaveBlock2.playerGender, 0x98, 0x38, 0);
+ spriteId = sub_8091A4C(gSaveBlock2.playerGender, 152, 56, 0);
gSprites[spriteId].oam.affineMode = 1;
gSprites[spriteId].oam.matrixNum = 1;
gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerOffset;
SetOamMatrix(1, gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerScale);
- LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, 0x20);
+ LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(gUnknown_083B4EC4));
gMain.state++;
break;
case 6:
- spriteId = sub_80918EC(gUnknown_0202FFBC->dexNum, 0x58, 0x38, 1);
+ spriteId = sub_80918EC(gUnknown_0202FFBC->dexNum, 88, 56, 1);
gSprites[spriteId].oam.affineMode = 1;
gSprites[spriteId].oam.matrixNum = 2;
gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonOffset;
SetOamMatrix(2, gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonScale);
- LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, 0x20);
+ LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(gUnknown_083B4EC4));
gMain.state++;
break;
case 7:
@@ -2724,7 +3442,7 @@ void Task_InitSizeScreenMultistep(u8 taskId)
}
}
-void Task_SizeScreenProcessInput(u8 taskId)
+static void Task_SizeScreenProcessInput(u8 taskId)
{
if (gMain.newKeys & B_BUTTON)
{
@@ -2733,7 +3451,6 @@ void Task_SizeScreenProcessInput(u8 taskId)
gTasks[taskId].func = sub_8090498;
PlaySE(SE_PC_OFF);
}
- //_08090430
else if ((gMain.newKeys & DPAD_LEFT)
|| ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
{
@@ -2744,7 +3461,7 @@ void Task_SizeScreenProcessInput(u8 taskId)
}
}
-void sub_8090498(u8 taskId)
+static void sub_8090498(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -2761,20 +3478,20 @@ void sub_8090498(u8 taskId)
}
}
-void sub_80904FC(u16 a)
+static void sub_80904FC(u16 a)
{
LZ77UnCompVram(gUnknown_08E96ACC, (void *)(VRAM + a * 0x800));
DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440);
}
-void sub_8090540(u16 a)
+static void sub_8090540(u16 a)
{
LZ77UnCompVram(gUnknown_08E96B58, (void *)(VRAM + a * 0x800));
DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440);
}
#ifdef NONMATCHING
-void sub_8090584(u8 a, u16 b)
+static void sub_8090584(u8 a, u16 b)
{
u8 i; //r1
u8 j; //r3
@@ -2814,7 +3531,7 @@ void sub_8090584(u8 a, u16 b)
}
#else
__attribute__((naked))
-void sub_8090584(u8 a, u16 b)
+static void sub_8090584(u8 a, u16 b)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -2920,7 +3637,7 @@ _08090640: .4byte 0x06000072\n\
//Nope, can't get this one to match, either.
#ifdef NONMATCHING
-void sub_8090644(u8 a, u16 b)
+static void sub_8090644(u8 a, u16 b)
{
u8 i;
u8 j;
@@ -2958,7 +3675,7 @@ void sub_8090644(u8 a, u16 b)
}
#else
__attribute__((naked))
-void sub_8090644(u8 a, u16 b)
+static void sub_8090644(u8 a, u16 b)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -3081,15 +3798,16 @@ u8 sub_809070C(u16 dexNum, u32 b, u32 c)
return taskId;
}
-/*
-void sub_8090750(u8 taskId)
+static void sub_8090750(u8 taskId)
{
+ u8 spriteId;
u16 dexNum = gTasks[taskId].data[1];
+ u16 i;
switch (gTasks[taskId].data[0])
{
- default:
case 0:
+ default:
if (!gPaletteFade.active)
{
gUnknown_03005CEC = gMain.vblankCallback;
@@ -3099,19 +3817,20 @@ void sub_8090750(u8 taskId)
}
break;
case 1:
- {
- u16 i;
-
LZ77UnCompVram(gPokedexMenu_Gfx, (void *)(VRAM + 0x4000));
LZ77UnCompVram(gUnknown_08E96BD4, (void *)(VRAM + 0x7800));
for (i = 0; i < 0x280; i++)
- ((u16 *)(VRAM + 0x7800))[i] += 0x2000;
+ {
+#ifndef NONMATCHING
+ asm("");
+#endif
+ *(u16 *)(VRAM + 0x7800 + 2 * i) += 0x2000;
+ }
sub_8091738(gTasks[taskId].data[1], 2, 0x3FC);
ResetPaletteFade();
- LoadPalette(gPokedexMenu_Pal + 2, 0x21, 0x9E);
+ LoadPalette(gPokedexMenu_Pal + 1, 0x21, 0x9E);
gTasks[taskId].data[0]++;
break;
- }
case 2:
SetUpWindowConfig(&gWindowConfig_81E7064);
InitMenuWindow(&gWindowConfig_81E7064);
@@ -3128,7 +3847,7 @@ void sub_8090750(u8 taskId)
MenuPrint(gDexText_UnknownPoke, 11, 5);
MenuPrint(gDexText_UnknownHeight, 16, 7);
MenuPrint(gDexText_UnknownWeight, 16, 9);
- sub_8091304(&gPokedexEntries[dexNum], 11, 5);
+ sub_8091304(gPokedexEntries[dexNum].categoryName, 11, 5);
sub_8091458(gPokedexEntries[dexNum].height, 16, 7);
sub_8091564(gPokedexEntries[dexNum].weight, 16, 9);
MenuPrint(gPokedexEntries[dexNum].descriptionPage1, 2, 13);
@@ -3136,16 +3855,13 @@ void sub_8090750(u8 taskId)
gTasks[taskId].data[0]++;
break;
case 4:
- {
- u8 spriteId = sub_80918EC(dexNum, 0x30, 0x38, 0);
-
+ spriteId = sub_80918EC(dexNum, 0x30, 0x38, 0);
gSprites[spriteId].oam.priority = 0;
BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
SetVBlankCallback(gUnknown_03005CEC);
gTasks[taskId].data[3] = spriteId;
gTasks[taskId].data[0]++;
break;
- }
case 5:
REG_BLDCNT = 0;
REG_BLDALPHA = 0;
@@ -3165,4 +3881,1586 @@ void sub_8090750(u8 taskId)
break;
}
}
-*/
+
+static void sub_8090A3C(u8 taskId)
+{
+ if (gMain.newKeys & B_BUTTON)
+ {
+ BeginNormalPaletteFade(0x0000FFFC, 0, 0, 16, 0);
+ gSprites[gTasks[taskId].data[3]].callback = sub_8090C28;
+ gTasks[taskId].func = sub_8090B8C;
+ return;
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ if (gTasks[taskId].data[4] == 0)
+ {
+ u16 r4 = gTasks[taskId].data[1];
+
+ MenuZeroFillWindowRect(2, 13, 27, 19);
+ MenuPrint(gPokedexEntries[r4].descriptionPage2, 2, 13);
+ (*(u16 *)(VRAM + 0x7ACA))++;
+ (*(u16 *)(VRAM + 0x7B0A))++;
+ gTasks[taskId].data[4] = 1;
+ PlaySE(SE_PIN);
+ }
+ else
+ {
+ BeginNormalPaletteFade(0x0000FFFC, 0, 0, 16, 0);
+ gSprites[gTasks[taskId].data[3]].callback = sub_8090C28;
+ gTasks[taskId].func = sub_8090B8C;
+ return;
+ }
+ }
+ gTasks[taskId].data[2]++;
+ if (gTasks[taskId].data[2] & 0x10)
+ LoadPalette(gPokedexMenu_Pal + 1, 0x51, 14);
+ else
+ LoadPalette(gPokedexMenu2_Pal + 1, 0x51, 14);
+}
+
+static void sub_8090B8C(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ u16 species;
+ u32 otId;
+ u32 personality;
+ u8 paletteNum;
+ const u16 *palette;
+
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON;
+ CpuCopy16(gUnknown_08D00524, (void *)(VRAM + 0xC000), 0x1000);
+ sub_800D74C();
+ species = NationalPokedexNumToSpecies(gTasks[taskId].data[1]);
+ otId = ((u16)gTasks[taskId].data[13] << 16) | (u16)gTasks[taskId].data[12];
+ personality = ((u16)gTasks[taskId].data[15] << 16) | (u16)gTasks[taskId].data[14];
+ paletteNum = gSprites[gTasks[taskId].data[3]].oam.paletteNum;
+ palette = species_and_otid_get_pal(species, otId, personality);
+ LoadCompressedPalette(palette, 0x100 | paletteNum * 16, 32);
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_8090C28(struct Sprite *sprite)
+{
+ if (sprite->pos1.x < 0x78)
+ sprite->pos1.x += 2;
+ if (sprite->pos1.x > 0x78)
+ sprite->pos1.x -= 2;
+
+ if (sprite->pos1.y < 0x50)
+ sprite->pos1.y += 1;
+ if (sprite->pos1.y > 0x50)
+ sprite->pos1.y -= 1;
+}
+
+static void sub_8090C68(void)
+{
+ if (gUnknown_0202FFBC->owned)
+ {
+ if (gPokedexView->descriptionPageNum == 0)
+ {
+ MenuZeroFillWindowRect(2, 13, 27, 19);
+ MenuPrint(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage2, 2, 13);
+ gPokedexView->descriptionPageNum = 1;
+ (*(u16 *)(VRAM + 0x7ACA))++;
+ (*(u16 *)(VRAM + 0x7B0A))++;
+ PlaySE(SE_PIN);
+ }
+ else
+ {
+ MenuZeroFillWindowRect(2, 13, 27, 19);
+ MenuPrint(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13);
+ gPokedexView->descriptionPageNum = 0;
+ (*(u16 *)(VRAM + 0x7ACA))--;
+ (*(u16 *)(VRAM + 0x7B0A))--;
+ PlaySE(SE_PIN);
+ }
+ }
+}
+
+const u8 *GetPokemonCategory(u16 dexNum)
+{
+ return gPokedexEntries[dexNum].categoryName;
+}
+
+u16 GetPokedexHeightWeight(u16 dexNum, u8 data)
+{
+ switch (data)
+ {
+ case 0: // height
+ return gPokedexEntries[dexNum].height;
+ case 1: // weight
+ return gPokedexEntries[dexNum].weight;
+ default:
+ return 1;
+ }
+}
+
+s8 GetNationalPokedexFlag(u16 a, u8 b)
+{
+ u8 index;
+ u8 bit;
+ u8 mask;
+ s8 retVal;
+
+ a--;
+ index = a / 8;
+ bit = a % 8;
+ mask = 1 << bit;
+ retVal = 0;
+ switch (b)
+ {
+ case 0:
+ if (gSaveBlock2.pokedex.seen[index] & mask)
+ {
+ if ((gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.unk938[index] & mask)
+ && (gSaveBlock2.pokedex.seen[index] & mask) == (gSaveBlock1.unk3A8C[index] & mask))
+ retVal = 1;
+ else
+ {
+ gSaveBlock2.pokedex.seen[index] &= ~mask;
+ gSaveBlock1.unk938[index] &= ~mask;
+ gSaveBlock1.unk3A8C[index] &= ~mask;
+ retVal = 0;
+ }
+ }
+ break;
+ case 1:
+ if (gSaveBlock2.pokedex.owned[index] & mask)
+ {
+ if ((gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock2.pokedex.seen[index] & mask)
+ && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.unk938[index] & mask)
+ && (gSaveBlock2.pokedex.owned[index] & mask) == (gSaveBlock1.unk3A8C[index] & mask))
+ retVal = 1;
+ else
+ {
+ gSaveBlock2.pokedex.owned[index] &= ~mask;
+ gSaveBlock2.pokedex.seen[index] &= ~mask;
+ gSaveBlock1.unk938[index] &= ~mask;
+ gSaveBlock1.unk3A8C[index] &= ~mask;
+ retVal = 0;
+ }
+ }
+ break;
+ case 2:
+ gSaveBlock2.pokedex.seen[index] |= mask;
+ gSaveBlock1.unk938[index] |= mask;
+ gSaveBlock1.unk3A8C[index] |= mask;
+ break;
+ case 3:
+ gSaveBlock2.pokedex.owned[index] |= mask;
+ break;
+ }
+ return retVal;
+}
+
+u16 GetNationalPokedexCount(u8 a)
+{
+ u16 count = 0;
+ u16 i;
+
+ for (i = 0; i < NATIONAL_DEX_COUNT; i++)
+ {
+ switch (a)
+ {
+ case 0:
+ if (GetNationalPokedexFlag(i + 1, 0) != 0)
+ count++;
+ break;
+ case 1:
+ if (GetNationalPokedexFlag(i + 1, 1) != 0)
+ count++;
+ break;
+ }
+ }
+ return count;
+}
+
+u16 GetHoennPokedexCount(u8 a)
+{
+ u16 count = 0;
+ u16 i;
+
+ for (i = 0; i < 202; i++)
+ {
+ switch (a)
+ {
+ case 0:
+ if (GetNationalPokedexFlag(HoennToNationalOrder(i + 1), 0) != 0)
+ count++;
+ break;
+ case 1:
+ if (GetNationalPokedexFlag(HoennToNationalOrder(i + 1), 1) != 0)
+ count++;
+ break;
+ }
+ }
+ return count;
+}
+
+bool8 sub_8090FC0(void)
+{
+ u16 i;
+
+ for (i = 0; i < 200; i++)
+ {
+ if (GetNationalPokedexFlag(HoennToNationalOrder(i + 1), 1) == 0)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+u16 sub_8090FF4(void)
+{
+ u16 i;
+
+ for (i = 0; i < 150; i++)
+ {
+ if (GetNationalPokedexFlag(i + 1, 1) == 0)
+ return 0;
+ }
+ for (i = 152; i < 250; i++)
+ {
+ if (GetNationalPokedexFlag(i + 1, 1) == 0)
+ return 0;
+ }
+ for (i = 252; i < 384; i++)
+ {
+ if (GetNationalPokedexFlag(i + 1, 1) == 0)
+ return 0;
+ }
+ return 1;
+}
+
+static void sub_8091060(u16 a)
+{
+ if (!(a & 0x100))
+ {
+ REG_DISPCNT &= 0xFEFF;
+ REG_BG0CNT = 0;
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ }
+ if (!(a & 0x200))
+ {
+ REG_DISPCNT &= 0xFDFF;
+ REG_BG1CNT = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ }
+ if (!(a & 0x400))
+ {
+ REG_DISPCNT &= 0xFBFF;
+ REG_BG2CNT = 0;
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+ }
+ if (!(a & 0x800))
+ {
+ REG_DISPCNT &= 0xF7FF;
+ REG_BG3CNT = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
+ }
+ if (!(a & 0x1000))
+ {
+ REG_DISPCNT &= 0xEFFF;
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 8;
+ }
+}
+
+static void sub_8091154(u16 order, u8 b, u8 c)
+{
+ u8 str[4];
+
+ str[0] = CHAR_0 + order / 100;
+ str[1] = CHAR_0 + (order % 100) / 10;
+ str[2] = CHAR_0 + (order % 100) % 10;
+ str[3] = EOS;
+ MenuPrint(str, b, c);
+}
+
+static u8 sub_80911C8(u16 num, u8 b, u8 c)
+{
+ u8 str[11];
+ u8 i;
+
+ for (i = 0; i < 11; i++)
+ str[i] = EOS;
+ num = NationalPokedexNumToSpecies(num);
+ switch (num)
+ {
+ default:
+ for (i = 0; gSpeciesNames[num][i] != EOS && i < 10; i++)
+ str[i] = gSpeciesNames[num][i];
+ break;
+ case 0:
+ for (i = 0; i < 10; i++)
+ str[i] = 0xAE;
+ break;
+ }
+ MenuPrint(str, b, c);
+ return i;
+}
+
+static u8 sub_8091260(u16 num, u8 b, u8 c, u8 d)
+{
+ u8 str[40];
+ u8 *end;
+ u8 i;
+
+ end = StringCopy(str, gUnknown_083B5558);
+ str[2] = d;
+ num = NationalPokedexNumToSpecies(num);
+ switch (num)
+ {
+ default:
+ for (i = 0; gSpeciesNames[num][i] != EOS && i < 10; i++)
+ end[i] = gSpeciesNames[num][i];
+ break;
+ case 0:
+ for (i = 0; i < 10; i++)
+ end[i] = 0xAE;
+ break;
+ }
+ end[i] = EOS;
+ MenuPrint(str, b, c);
+ return i;
+}
+
+static void sub_8091304(const u8 *name, u8 left, u8 top)
+{
+ u8 str[32];
+ u8 i;
+#if ENGLISH
+ u8 j;
+#endif
+
+ for (i = 0; name[i] != EOS && i < 11; i++)
+ str[i] = name[i];
+#if ENGLISH
+ for (j = 0; gDexText_UnknownPoke[j] == 0xAC || gDexText_UnknownPoke[j] == 0; j++)
+ ;
+ j--;
+ while (gDexText_UnknownPoke[j] != EOS)
+ str[i++] = gDexText_UnknownPoke[j++];
+#endif
+ str[i] = EOS;
+ sub_8072B80(str, left, top, gDexText_UnknownPoke);
+}
+
+void unref_sub_80913A4(u16 a, u8 left, u8 top)
+{
+ u8 str[6];
+ bool8 outputted = FALSE;
+ u8 result;
+
+ result = a / 1000;
+ if (result == 0)
+ {
+ str[0] = CHAR_SPACE;
+ outputted = FALSE;
+ }
+ else
+ {
+ str[0] = CHAR_0 + result;
+ outputted = TRUE;
+ }
+
+ result = (a % 1000) / 100;
+ if (result == 0 && !outputted)
+ {
+ str[1] = CHAR_SPACE;
+ outputted = FALSE;
+ }
+ else
+ {
+ str[1] = CHAR_0 + result;
+ outputted = TRUE;
+ }
+
+ str[2] = CHAR_0 + ((a % 1000) % 100) / 10;
+ str[3] = CHAR_PERIOD;
+ str[4] = CHAR_0 + ((a % 1000) % 100) % 10;
+ str[5] = EOS;
+ MenuPrint(str, left, top);
+}
+
+#ifdef UNITS_IMPERIAL
+#define CHAR_PRIME (0xB4)
+#define CHAR_DOUBLE_PRIME (0xB2)
+static void sub_8091458(u16 height, u8 left, u8 top)
+{
+ u8 buffer[16];
+ u32 inches, feet;
+ u8 i = 0;
+
+ inches = (height * 10000) / 254;
+ if (inches % 10 >= 5)
+ inches += 10;
+ feet = inches / 120;
+ inches = (inches - (feet * 120)) / 10;
+
+ buffer[i++] = EXT_CTRL_CODE_BEGIN;
+ buffer[i++] = 0x13;
+ if (feet / 10 == 0)
+ {
+ buffer[i++] = 18;
+ buffer[i++] = feet + CHAR_0;
+ }
+ else
+ {
+ buffer[i++] = 12;
+ buffer[i++] = feet / 10 + CHAR_0;
+ buffer[i++] = (feet % 10) + CHAR_0;
+ }
+ buffer[i++] = CHAR_PRIME;
+ buffer[i++] = (inches / 10) + CHAR_0;
+ buffer[i++] = (inches % 10) + CHAR_0;
+ buffer[i++] = CHAR_DOUBLE_PRIME;
+ buffer[i++] = EOS;
+ MenuPrint(buffer, left, top);
+}
+#else
+static void sub_8091458(u16 height, u8 left, u8 top)
+{
+ unref_sub_80913A4(height, left, top);
+}
+#endif
+
+#ifdef UNITS_IMPERIAL
+static void sub_8091564(u16 weight, u8 left, u8 top)
+{
+ u8 buffer[16];
+ u32 lbs;
+ u8 i = 0;
+ bool8 output;
+
+ lbs = (weight * 100000) / 4536;
+ if (lbs % 10 >= 5)
+ lbs += 10;
+ output = FALSE;
+
+ buffer[i] = (lbs / 100000) + CHAR_0;
+ if (buffer[i] == CHAR_0 && output == FALSE)
+ {
+ buffer[i++] = CHAR_SPACE;
+ buffer[i++] = CHAR_SPACE;
+ }
+ else
+ {
+ output = TRUE;
+ i++;
+ }
+
+ lbs = (lbs % 100000);
+ buffer[i] = (lbs / 10000) + CHAR_0;
+ if (buffer[i] == CHAR_0 && output == FALSE)
+ {
+ buffer[i++] = CHAR_SPACE;
+ buffer[i++] = CHAR_SPACE;
+ }
+ else
+ {
+ output = TRUE;
+ i++;
+ }
+
+ lbs = (lbs % 10000);
+ buffer[i] = (lbs / 1000) + CHAR_0;
+ if (buffer[i] == CHAR_0 && output == FALSE)
+ {
+ buffer[i++] = CHAR_SPACE;
+ buffer[i++] = CHAR_SPACE;
+ }
+ else
+ {
+ output = TRUE;
+ i++;
+ }
+ lbs = (lbs % 1000);
+ buffer[i++] = (lbs / 100) + CHAR_0;
+ lbs = (lbs % 100);
+ buffer[i++] = CHAR_PERIOD;
+ buffer[i++] = (lbs / 10) + CHAR_0;
+ buffer[i++] = CHAR_SPACE;
+ buffer[i++] = CHAR_l;
+ buffer[i++] = CHAR_b;
+ buffer[i++] = CHAR_s;
+ buffer[i++] = CHAR_PERIOD;
+ buffer[i++] = EOS;
+ MenuPrint(buffer, left, top);
+}
+#else
+static void sub_8091564(u16 arg0, u8 left, u8 top)
+{
+ unref_sub_80913A4(arg0, left, top);
+}
+#endif
+
+static void sub_8091738(u16 num, u16 b, u16 c)
+{
+ u8 arr[0x80];
+ u16 i;
+ u16 j;
+ const u8 *r12;
+ u16 r7;
+ u8 r3;
+
+ r12 = sMonFootprintTable[NationalPokedexNumToSpecies(num)];
+ for (r7 = 0, i = 0; i < 32; i++)
+ {
+ r3 = r12[i];
+ for (j = 0; j < 4; j++)
+ {
+ u32 r1 = j * 2;
+ s32 r2 = (r3 >> r1) & 1;
+
+ if (r3 & (2 << r1))
+ r2 |= 0x10;
+
+// Needed to match
+#ifndef NONMATCHING
+ asm("");asm("");asm("");asm("");asm("");
+#endif
+
+ arr[r7] = r2;
+ r7++;
+ }
+ }
+ CpuCopy16(arr, (u16 *)(VRAM + b * 0x4000 + c * 0x20), 0x80);
+}
+
+static void sub_80917CC(u16 a, u16 b)
+{
+ *(u16 *)(VRAM + a * 0x800 + 0x232) = 0xF000 + b + 0;
+ *(u16 *)(VRAM + a * 0x800 + 0x234) = 0xF000 + b + 1;
+ *(u16 *)(VRAM + a * 0x800 + 0x272) = 0xF000 + b + 2;
+ *(u16 *)(VRAM + a * 0x800 + 0x274) = 0xF000 + b + 3;
+}
+
+static u16 sub_8091818(u8 a, u16 b, u16 c, u16 d)
+{
+ switch (a)
+ {
+ case 1:
+ if (b > c)
+ b--;
+ break;
+ case 0:
+ if (b < d)
+ b++;
+ break;
+ case 3:
+ if (b > c)
+ b--;
+ else
+ b = d;
+ break;
+ case 2:
+ if (b < d)
+ b++;
+ else
+ b = c;
+ break;
+ }
+ return b;
+}
+
+static void nullsub_59(struct Sprite *sprite)
+{
+}
+
+static void sub_8091878(u16 a, u8 b)
+{
+ gUnknown_02024E8C = gUnknown_083B57A4;
+ gUnknown_02024E8C.paletteTag = a;
+ gUnknown_02024E8C.images = gUnknown_083B5794[b];
+ gUnknown_02024E8C.anims = gSpriteAnimTable_81E7C64;
+}
+
+static void sub_80918B0(u16 a, u8 b)
+{
+ gUnknown_02024E8C = gUnknown_083B57A4;
+ gUnknown_02024E8C.paletteTag = a;
+ gUnknown_02024E8C.images = gUnknown_083B5794[b];
+ gUnknown_02024E8C.anims = gUnknown_081EC2A4[0];
+}
+
+u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum)
+{
+ u8 spriteId;
+
+ num = NationalPokedexNumToSpecies(num);
+ switch (num)
+ {
+ default:
+ DecompressPicFromTable_2(
+ &gMonFrontPicTable[num],
+ gMonFrontPicCoords[num].coords,
+ gMonFrontPicCoords[num].y_offset,
+ (void *)0x02000000,
+ gUnknown_083B5584[paletteNum],
+ num);
+ break;
+ case SPECIES_SPINDA:
+ LoadSpecialPokePic(
+ &gMonFrontPicTable[num],
+ gMonFrontPicCoords[num].coords,
+ gMonFrontPicCoords[num].y_offset,
+ 0x02000000,
+ gUnknown_083B5584[paletteNum],
+ num,
+ gSaveBlock2.pokedex.spindaPersonality,
+ 1);
+ break;
+ case SPECIES_UNOWN:
+ LoadSpecialPokePic(
+ &gMonFrontPicTable[num],
+ gMonFrontPicCoords[num].coords,
+ gMonFrontPicCoords[num].y_offset,
+ 0x02000000,
+ gUnknown_083B5584[paletteNum],
+ num,
+ gSaveBlock2.pokedex.unownPersonality,
+ 1);
+ break;
+ }
+ LoadCompressedPalette(gMonPaletteTable[num].data, 0x100 + paletteNum * 16, 32);
+ sub_8091878(paletteNum, paletteNum);
+ spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0);
+ gSprites[spriteId].oam.paletteNum = paletteNum;
+ return spriteId;
+}
+
+static u8 sub_8091A4C(u16 gender, s16 x, s16 y, u16 paletteNum)
+{
+ u8 spriteId;
+
+ DecompressPicFromTable_2(
+ &gTrainerFrontPicTable[gender],
+ gTrainerFrontPicCoords[gender].coords,
+ gTrainerFrontPicCoords[gender].y_offset,
+ (void *)0x02000000,
+ gUnknown_083B5584[0],
+ gender);
+ sub_80918B0(gender, 0);
+ spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0);
+ gSprites[spriteId].oam.paletteNum = paletteNum;
+ return spriteId;
+}
+
+int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2)
+{
+ u16 species;
+ u16 i;
+ u16 resultsCount;
+ u8 types[2];
+
+ SortPokedex(a, b);
+
+ for (i = 0, resultsCount = 0; i < NATIONAL_DEX_COUNT; i++)
+ {
+ if (gPokedexView->unk0[i].seen)
+ {
+ gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i];
+ resultsCount++;
+ }
+ }
+ gPokedexView->pokemonListCount = resultsCount;
+
+ // Search by name
+ if (abcGroup != 0xFF)
+ {
+ for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++)
+ {
+ u8 r3;
+
+ species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum);
+ r3 = gSpeciesNames[species][0];
+ if ((r3 >= gUnknown_083B57BC[abcGroup][0] && r3 < gUnknown_083B57BC[abcGroup][0] + gUnknown_083B57BC[abcGroup][1])
+ || (r3 >= gUnknown_083B57BC[abcGroup][2] && r3 < gUnknown_083B57BC[abcGroup][2] + gUnknown_083B57BC[abcGroup][3]))
+ {
+ gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i];
+ resultsCount++;
+ }
+ }
+ gPokedexView->pokemonListCount = resultsCount;
+ }
+
+ // Search by body color
+ if (bodyColor != 0xFF)
+ {
+ for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++)
+ {
+ species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum);
+
+ if (bodyColor == gBaseStats[species].bodyColor)
+ {
+ gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i];
+ resultsCount++;
+ }
+ }
+ gPokedexView->pokemonListCount = resultsCount;
+ }
+
+ // Search by type
+ if (type1 != 0xFF || type2 != 0xFF)
+ {
+ if (type1 == 0xFF)
+ {
+ type1 = type2;
+ type2 = 0xFF;
+ }
+
+ if (type2 == 0xFF)
+ {
+ for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++)
+ {
+ if (gPokedexView->unk0[i].owned)
+ {
+ species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum);
+
+ types[0] = gBaseStats[species].type1;
+ types[1] = gBaseStats[species].type2;
+ if (types[0] == type1 || types[1] == type1)
+ {
+ gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i];
+ resultsCount++;
+ }
+ }
+ }
+ }
+ else
+ {
+ for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++)
+ {
+ if (gPokedexView->unk0[i].owned)
+ {
+ species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum);
+
+ types[0] = gBaseStats[species].type1;
+ types[1] = gBaseStats[species].type2;
+ if ((types[0] == type1 && types[1] == type2) || (types[0] == type2 && types[1] == type1))
+ {
+ gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i];
+ resultsCount++;
+ }
+ }
+ }
+ }
+ gPokedexView->pokemonListCount = resultsCount;
+ }
+
+ if (gPokedexView->pokemonListCount != 0)
+ {
+ for (i = gPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++)
+ {
+ gPokedexView->unk0[i].dexNum = 0xFFFF;
+ gPokedexView->unk0[i].seen = FALSE;
+ gPokedexView->unk0[i].owned = FALSE;
+
+ }
+ }
+
+ return resultsCount;
+}
+
+void sub_8091E20(const u8 *str)
+{
+ sub_8072AB0(str, 9, 120, 208, 32, 1);
+}
+
+u8 sub_8091E3C(void)
+{
+ return CreateTask(sub_8091E54, 0);
+}
+
+static void sub_8091E54(u8 taskId)
+{
+ u16 i;
+
+ switch (gMain.state)
+ {
+ default:
+ case 0:
+ if (!gPaletteFade.active)
+ {
+ gPokedexView->unk64A = 2;
+ sub_8091060(0);
+ LZ77UnCompVram(gPokedexMenuSearch_Gfx, (void *)VRAM);
+ LZ77UnCompVram(gUnknown_08E96D2C, (void *)(VRAM + 0x7800));
+ LoadPalette(gPokedexMenuSearch_Pal + 1, 1, 0x7E);
+ if (!IsNationalPokedexEnabled())
+ {
+ for (i = 0; i < 17; i++)
+ {
+ ((u16 *)(VRAM + 0x7A80))[i] = ((u16 *)(VRAM + 0x7B00))[i];
+ ((u16 *)(VRAM + 0x7AC0))[i] = ((u16 *)(VRAM + 0x7B40))[i];
+ ((u16 *)(VRAM + 0x7B00))[i] = 1;
+ ((u16 *)(VRAM + 0x7B40))[i] = 1;
+ }
+ }
+ gMain.state = 1;
+ }
+ break;
+ case 1:
+ SetUpWindowConfig(&gWindowConfig_81E7064);
+ InitMenuWindow(&gWindowConfig_81E7064);
+ LoadCompressedObjectPic(&gUnknown_083A05CC[0]);
+ LoadSpritePalettes(gUnknown_083A05DC);
+ sub_809308C(taskId);
+ for (i = 0; i < 16; i++)
+ gTasks[taskId].data[i] = 0;
+ sub_8092EB0(taskId);
+ sub_8092AB0(0);
+ sub_8092B68(taskId);
+ gMain.state++;
+ break;
+ case 2:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
+ gMain.state++;
+ break;
+ case 3:
+ REG_BG3CNT = 0x0F03;
+ REG_DISPCNT = 0x1C40;
+ gMain.state++;
+ break;
+ case 4:
+ if (!gPaletteFade.active)
+ {
+ gTasks[taskId].func = sub_809204C;
+ gMain.state = 0;
+ }
+ break;
+ }
+}
+
+static void sub_809204C(u8 taskId)
+{
+ sub_8092AB0(gTasks[taskId].data[0]);
+ sub_8092B68(taskId);
+ gTasks[taskId].func = sub_809207C;
+}
+
+static void sub_809207C(u8 taskId)
+{
+ if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_PC_OFF);
+ gTasks[taskId].func = sub_80927B8;
+ return;
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ PlaySE(SE_PIN);
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].func = sub_809217C;
+ break;
+ case 1:
+ PlaySE(SE_PIN);
+ gTasks[taskId].data[1] = 4;
+ gTasks[taskId].func = sub_809217C;
+ break;
+ case 2:
+ PlaySE(SE_PC_OFF);
+ gTasks[taskId].func = sub_80927B8;
+ break;
+ }
+ return;
+ }
+ if ((gMain.newKeys & DPAD_LEFT) && gTasks[taskId].data[0] > 0)
+ {
+ PlaySE(SE_Z_PAGE);
+ gTasks[taskId].data[0]--;
+ sub_8092AB0(gTasks[taskId].data[0]);
+ }
+ if ((gMain.newKeys & DPAD_RIGHT) && gTasks[taskId].data[0] < 2)
+ {
+ PlaySE(SE_Z_PAGE);
+ gTasks[taskId].data[0]++;
+ sub_8092AB0(gTasks[taskId].data[0]);
+ }
+}
+
+static void sub_809217C(u8 taskId)
+{
+ sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]);
+ sub_8092B68(taskId);
+ gTasks[taskId].func = sub_80921B0;
+}
+
+static void sub_80921B0(u8 taskId)
+{
+ const u8 (*r6)[4];
+
+ if (gTasks[taskId].data[0] != 0)
+ {
+ if (!IsNationalPokedexEnabled())
+ r6 = gUnknown_083B58A4;
+ else
+ r6 = gUnknown_083B586C;
+ }
+ else
+ {
+ if (!IsNationalPokedexEnabled())
+ r6 = gUnknown_083B5888;
+ else
+ r6 = gUnknown_083B5850;
+ }
+
+ if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_BOWA);
+ sub_8092EB0(taskId);
+ gTasks[taskId].func = sub_809204C;
+ return;
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ if (gTasks[taskId].data[1] == 6)
+ {
+ if (gTasks[taskId].data[0] != 0)
+ {
+ gUnknown_0202FFBA = 0x40;
+ gPokedexView->unk62A = 0x40;
+ gUnknown_0202FFB8 = 0;
+ gPokedexView->unk610 = 0;
+ gSaveBlock2.pokedex.unknown1 = sub_8092E10(taskId, 5);
+ if (!IsNationalPokedexEnabled())
+ gSaveBlock2.pokedex.unknown1 = 0;
+ gPokedexView->unk614 = gSaveBlock2.pokedex.unknown1;
+ gSaveBlock2.pokedex.order = sub_8092E10(taskId, 4);
+ gPokedexView->unk618 = gSaveBlock2.pokedex.order;
+ PlaySE(SE_PC_OFF);
+ gTasks[taskId].func = sub_80927B8;
+ }
+ else
+ {
+ sub_8091E20(gDexText_Searching);
+ gTasks[taskId].func = sub_80923FC;
+ PlaySE(SE_Z_SEARCH);
+ }
+ }
+ else
+ {
+ PlaySE(SE_PIN);
+ gTasks[taskId].func = sub_80925CC;
+ }
+ return;
+ }
+
+ if ((gMain.newKeys & DPAD_LEFT) && r6[gTasks[taskId].data[1]][0] != 0xFF)
+ {
+ PlaySE(SE_SELECT);
+ gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][0];
+ sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]);
+ }
+ if ((gMain.newKeys & DPAD_RIGHT) && r6[gTasks[taskId].data[1]][1] != 0xFF)
+ {
+ PlaySE(SE_SELECT);
+ gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][1];
+ sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]);
+ }
+ if ((gMain.newKeys & DPAD_UP) && r6[gTasks[taskId].data[1]][2] != 0xFF)
+ {
+ PlaySE(SE_SELECT);
+ gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][2];
+ sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]);
+ }
+ if ((gMain.newKeys & DPAD_DOWN) && r6[gTasks[taskId].data[1]][3] != 0xFF)
+ {
+ PlaySE(SE_SELECT);
+ gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][3];
+ sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]);
+ }
+}
+
+static void sub_80923FC(u8 taskId)
+{
+ u8 r10 = sub_8092E10(taskId, 5);
+ u8 r9 = sub_8092E10(taskId, 4);
+ u8 r8 = sub_8092E10(taskId, 0);
+ u8 r6 = sub_8092E10(taskId, 1);
+ u8 r4 = sub_8092E10(taskId, 2);
+ u8 r0 = sub_8092E10(taskId, 3);
+
+ sub_8091AF8(r10, r9, r8, r6, r4, r0);
+ gTasks[taskId].func = sub_80924A4;
+}
+
+static void sub_80924A4(u8 taskId)
+{
+ if (!IsSEPlaying())
+ {
+ if (gPokedexView->pokemonListCount != 0)
+ {
+ PlaySE(SE_SEIKAI);
+ sub_8091E20(gDexText_SearchComplete);
+ }
+ else
+ {
+ PlaySE(SE_HAZURE);
+ sub_8091E20(gDexText_NoMatching);
+ }
+ gTasks[taskId].func = sub_8092508;
+ }
+}
+
+static void sub_8092508(u8 taskId)
+{
+ if (gMain.newKeys & A_BUTTON)
+ {
+ if (gPokedexView->pokemonListCount != 0)
+ {
+ gPokedexView->unk64F = 1;
+ gPokedexView->dexMode = sub_8092E10(taskId, 5);
+ gPokedexView->dexOrder = sub_8092E10(taskId, 4);
+ gTasks[taskId].func = sub_80927B8;
+ PlaySE(SE_PC_OFF);
+ }
+ else
+ {
+ gTasks[taskId].func = sub_809217C;
+ PlaySE(SE_BOWA);
+ }
+ }
+}
+
+static void sub_80925B4(u16 a, int unused)
+{
+ sub_814AD7C(0x90, (a * 2 + 1) * 8);
+}
+
+static void sub_80925CC(u8 taskId)
+{
+ u8 r0;
+ u16 *p1;
+ u16 *p2;
+
+ sub_8092C8C(0);
+ r0 = gTasks[taskId].data[1];
+ p1 = &gTasks[taskId].data[gUnknown_083B5A7C[r0].unk4];
+ p2 = &gTasks[taskId].data[gUnknown_083B5A7C[r0].unk5];
+ gTasks[taskId].data[14] = *p1;
+ gTasks[taskId].data[15] = *p2;
+ sub_8092D78(taskId);
+ CreateBlendedOutlineCursor(16, 0xFFFF, 12, 0x2D9F, 11);
+ sub_80925B4(*p1, 1);
+ gTasks[taskId].func = sub_8092644;
+}
+
+static void sub_8092644(u8 taskId)
+{
+ u8 r1;
+ const struct UnknownStruct2 *r8;
+ u16 *p1;
+ u16 *p2;
+ u16 r2;
+ bool8 r3;
+
+ r1 = gTasks[taskId].data[1];
+ r8 = gUnknown_083B5A7C[r1].unk0;
+ p1 = &gTasks[taskId].data[gUnknown_083B5A7C[r1].unk4];
+ p2 = &gTasks[taskId].data[gUnknown_083B5A7C[r1].unk5];
+ r2 = gUnknown_083B5A7C[r1].unk6 - 1;
+ if (gMain.newKeys & A_BUTTON)
+ {
+ sub_814ADC8();
+ PlaySE(SE_PIN);
+ MenuZeroFillWindowRect(18, 1, 28, 12);
+ sub_8092C8C(1);
+ gTasks[taskId].func = sub_809217C;
+ return;
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ sub_814ADC8();
+ PlaySE(SE_BOWA);
+ MenuZeroFillWindowRect(18, 1, 28, 12);
+ sub_8092C8C(1);
+ *p1 = gTasks[taskId].data[14];
+ *p2 = gTasks[taskId].data[15];
+ gTasks[taskId].func = sub_809217C;
+ return;
+ }
+ r3 = FALSE;
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ if (*p1 != 0)
+ {
+ sub_80925B4(*p1, 0);
+ (*p1)--;
+ sub_80925B4(*p1, 1);
+ r3 = TRUE;
+ }
+ else if (*p2 != 0)
+ {
+ (*p2)--;
+ sub_8092D78(taskId);
+ sub_80925B4(*p1, 1);
+ r3 = TRUE;
+ }
+ if (r3)
+ {
+ PlaySE(SE_SELECT);
+ sub_8091E20(r8[*p1 + *p2].text1);
+ }
+ return;
+ }
+ if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ if (*p1 < 5 && *p1 < r2)
+ {
+ sub_80925B4(*p1, 0);
+ (*p1)++;
+ sub_80925B4(*p1, 1);
+ r3 = TRUE;
+ }
+ else if (r2 > 5 && *p2 < r2 - 5)
+ {
+ (*p2)++;
+ sub_8092D78(taskId);
+ sub_80925B4(5, 1);
+ r3 = TRUE;
+ }
+ if (r3)
+ {
+ PlaySE(SE_SELECT);
+ sub_8091E20(r8[*p1 + *p2].text1);
+ }
+ return;
+ }
+}
+
+static void sub_80927B8(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_80927F0;
+}
+
+static void sub_80927F0(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ DestroyTask(taskId);
+}
+
+#ifdef NONMATCHING
+void sub_8092810(u8 a, u8 b, u8 c, u8 d)
+{
+ u16 i;
+
+ for (i = 0; i < d; i++)
+ {
+ ((u16 *)VRAM)[15 * 0x400 + c * 32 + i + b] &= 0xFFF;
+ ((u16 *)VRAM)[15 * 0x400 + c * 32 + i + b] |= a << 12;
+
+ ((u16 *)VRAM)[15 * 0x400 + (c + 1) * 32 + i + b] &= 0xFFF;
+ ((u16 *)VRAM)[15 * 0x400 + (c + 1) * 32 + i + b] |= a << 12;
+ }
+}
+#else
+__attribute__((naked))
+void sub_8092810(u8 a, u8 b, u8 c, u8 d)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ mov r12, r1\n\
+ lsls r2, 24\n\
+ lsrs r1, r2, 24\n\
+ lsls r3, 24\n\
+ lsrs r5, r3, 8\n\
+ movs r3, 0\n\
+ cmp r5, 0\n\
+ beq _0809285A\n\
+ lsls r7, r1, 6\n\
+ ldr r6, _08092860 @ =0x00000fff\n\
+ lsls r4, r0, 12\n\
+_08092830:\n\
+ mov r0, r12\n\
+ adds r1, r0, r3\n\
+ lsls r1, 1\n\
+ adds r1, r7, r1\n\
+ ldr r0, _08092864 @ =0x06007800\n\
+ adds r2, r1, r0\n\
+ ldrh r0, [r2]\n\
+ ands r0, r6\n\
+ orrs r0, r4\n\
+ strh r0, [r2]\n\
+ ldr r0, _08092868 @ =0x06007840\n\
+ adds r1, r0\n\
+ ldrh r0, [r1]\n\
+ ands r0, r6\n\
+ orrs r0, r4\n\
+ strh r0, [r1]\n\
+ adds r0, r3, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ cmp r0, r5\n\
+ bcc _08092830\n\
+_0809285A:\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08092860: .4byte 0x00000fff\n\
+_08092864: .4byte 0x06007800\n\
+_08092868: .4byte 0x06007840\n\
+ .syntax divided\n");
+}
+#endif
+
+static void sub_809286C(u8 a, u8 b, u8 c)
+{
+ u8 r5 = (b & 1) | ((c & 1) << 1);
+
+ switch (a)
+ {
+ case 0:
+ case 1:
+ case 2:
+ sub_8092810(r5, gUnknown_083B57E4[a].unk4, gUnknown_083B57E4[a].unk5, gUnknown_083B57E4[a].unk6);
+ break;
+ case 3:
+ case 4:
+ case 7:
+ case 8:
+ sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5, gUnknown_083B57FC[a - 3].unk6);
+ // fall through
+ case 5:
+ case 6:
+ sub_8092810(r5, gUnknown_083B57FC[a - 3].unk7, gUnknown_083B57FC[a - 3].unk8, gUnknown_083B57FC[a - 3].unk9);
+ break;
+ case 10:
+ sub_8092810(r5, gUnknown_083B57FC[2].unk4, gUnknown_083B57FC[2].unk5, gUnknown_083B57FC[2].unk6);
+ break;
+ case 9:
+ if (!IsNationalPokedexEnabled())
+ sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5 - 2, gUnknown_083B57FC[a - 3].unk6);
+ else
+ sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5, gUnknown_083B57FC[a - 3].unk6);
+ break;
+ }
+}
+
+static void sub_8092964(u8 a)
+{
+ switch (a)
+ {
+ case 0:
+ sub_809286C(0, 0, 0);
+ sub_809286C(1, 1, 0);
+ sub_809286C(2, 1, 0);
+ sub_809286C(3, 1, 0);
+ sub_809286C(4, 1, 0);
+ sub_809286C(10, 1, 0);
+ sub_809286C(5, 1, 0);
+ sub_809286C(6, 1, 0);
+ sub_809286C(7, 1, 0);
+ sub_809286C(8, 1, 0);
+ sub_809286C(9, 1, 0);
+ break;
+ case 1:
+ sub_809286C(0, 1, 0);
+ sub_809286C(1, 0, 0);
+ sub_809286C(2, 1, 0);
+ sub_809286C(3, 1, 1);
+ sub_809286C(4, 1, 1);
+ sub_809286C(10, 1, 1);
+ sub_809286C(5, 1, 1);
+ sub_809286C(6, 1, 1);
+ sub_809286C(7, 1, 0);
+ sub_809286C(8, 1, 0);
+ sub_809286C(9, 1, 0);
+ break;
+ case 2:
+ sub_809286C(0, 1, 0);
+ sub_809286C(1, 1, 0);
+ sub_809286C(2, 0, 0);
+ sub_809286C(3, 1, 1);
+ sub_809286C(4, 1, 1);
+ sub_809286C(10, 1, 1);
+ sub_809286C(5, 1, 1);
+ sub_809286C(6, 1, 1);
+ sub_809286C(7, 1, 1);
+ sub_809286C(8, 1, 1);
+ sub_809286C(9, 1, 1);
+ break;
+ }
+}
+
+static void sub_8092AB0(u8 a)
+{
+ sub_8092964(a);
+ sub_8091E20(gUnknown_083B57E4[a].text);
+}
+
+static void sub_8092AD4(u8 a, u8 b)
+{
+ sub_8092964(a);
+ switch (b)
+ {
+ case 0:
+ sub_809286C(3, 0, 0);
+ break;
+ case 1:
+ sub_809286C(4, 0, 0);
+ break;
+ case 2:
+ sub_809286C(10, 0, 0);
+ sub_809286C(5, 0, 0);
+ break;
+ case 3:
+ sub_809286C(10, 0, 0);
+ sub_809286C(6, 0, 0);
+ break;
+ case 4:
+ sub_809286C(7, 0, 0);
+ break;
+ case 5:
+ sub_809286C(8, 0, 0);
+ break;
+ case 6:
+ sub_809286C(9, 0, 0);
+ break;
+ }
+ sub_8091E20(gUnknown_083B57FC[b].text);
+}
+
+static void sub_8092B68(u8 taskId)
+{
+ u16 var;
+
+ var = gTasks[taskId].data[6] + gTasks[taskId].data[7];
+ StringCopy(gStringVar1, gUnknown_083B5910[var].text2);
+ MenuPrint_PixelCoords(gUnknown_083B5AB2, 45, 16, 1);
+
+ var = gTasks[taskId].data[8] + gTasks[taskId].data[9];
+ StringCopy(gStringVar1, gUnknown_083B5968[var].text2);
+ MenuPrint_PixelCoords(gUnknown_083B5AB2, 45, 32, 1);
+
+ var = gTasks[taskId].data[10] + gTasks[taskId].data[11];
+ StringCopy(gStringVar1, gUnknown_083B59C8[var].text2);
+ MenuPrint_PixelCoords(gUnknown_083B5AAC, 45, 48, 1);
+
+ var = gTasks[taskId].data[12] + gTasks[taskId].data[13];
+ StringCopy(gStringVar1, gUnknown_083B59C8[var].text2);
+ MenuPrint_PixelCoords(gUnknown_083B5AAC, 93, 48, 1);
+
+ var = gTasks[taskId].data[4] + gTasks[taskId].data[5];
+ StringCopy(gStringVar1, gUnknown_083B58D8[var].text2);
+ MenuPrint_PixelCoords(gUnknown_083B5AB2, 45, 64, 1);
+
+ if (IsNationalPokedexEnabled())
+ {
+ var = gTasks[taskId].data[2] + gTasks[taskId].data[3];
+ StringCopy(gStringVar1, gUnknown_083B58C0[var].text2);
+ MenuPrint_PixelCoords(gUnknown_083B5AB2, 45, 80, 1);
+ }
+}
+
+static void sub_8092C8C(u8 a)
+{
+ u16 i;
+ u16 j;
+
+ if (a == 0)
+ {
+ *((u16 *)(VRAM + 0x7800 + 0x22)) = 0xC0B;
+ for (i = 0x12; i < 0x1D; i++)
+ *((u16 *)(VRAM + 0x7800 + i * 2)) = 0x80D;
+ *((u16 *)(VRAM + 0x7800 + 0x3A)) = 0x80B;
+ for (j = 1; j < 13; j++)
+ {
+ *((u16 *)(VRAM + 0x7800 + 0x22 + j * 64)) = 0x40A;
+ for (i = 0x12; i < 0x1D; i++)
+ *((u16 *)(VRAM + 0x7800 + j * 64 + i * 2)) = 2;
+ *((u16 *)(VRAM + 0x7800 + 0x3A + j * 64)) = 0xA;
+ }
+ *((u16 *)(VRAM + 0x7800 + 0x362)) = 0x40B;
+ for (i = 0x12; i < 0x1D; i++)
+ *((u16 *)(VRAM + 0x7800 + 0x340 + i * 2)) = 0xD;
+ *((u16 *)(VRAM + 0x7800 + 0x37A)) = 0xB;
+ }
+ else
+ {
+ for (j = 0; j < 14; j++)
+ {
+ for (i = 0x11; i < 0x1E; i++)
+ {
+ *((u16 *)(VRAM + 0x7800 + j * 64 + i * 2)) = 0x4F;
+ }
+ }
+ }
+}
+
+static void sub_8092D78(u8 taskId)
+{
+ const struct UnknownStruct2 *r6 = gUnknown_083B5A7C[gTasks[taskId].data[1]].unk0;
+ const u16 *r8 = &gTasks[taskId].data[gUnknown_083B5A7C[gTasks[taskId].data[1]].unk4];
+ const u16 *r7 = &gTasks[taskId].data[gUnknown_083B5A7C[gTasks[taskId].data[1]].unk5];
+ u16 i;
+ u16 j;
+
+ MenuZeroFillWindowRect(18, 1, 28, 12);
+ for (i = 0, j = *r7; i < 6 && r6[j].text2 != NULL; i++, j++)
+ {
+#ifndef NONMATCHING
+ j += 0; // Useless statement needed to match
+#endif
+ MenuPrint(r6[j].text2, 18, i * 2 + 1);
+ }
+ sub_8091E20(r6[*r8 + *r7].text1);
+}
+
+static u8 sub_8092E10(u8 taskId, u8 b)
+{
+ const u16 *ptr1 = &gTasks[taskId].data[gUnknown_083B5A7C[b].unk4];
+ const u16 *ptr2 = &gTasks[taskId].data[gUnknown_083B5A7C[b].unk5];
+ u16 r2 = *ptr1 + *ptr2;
+
+ switch (b)
+ {
+ default:
+ return 0;
+ case 5:
+ return gUnknown_083B5A60[r2];
+ case 4:
+ return gUnknown_083B5A62[r2];
+ case 0:
+ if (r2 == 0)
+ return 0xFF;
+ else
+ return r2;
+ case 1:
+ if (r2 == 0)
+ return 0xFF;
+ else
+ return r2 - 1;
+ case 2:
+ case 3:
+ return gUnknown_083B5A68[r2];
+ }
+}
+
+static void sub_8092EB0(u8 taskId)
+{
+ u16 r3;
+
+ switch (gPokedexView->unk614)
+ {
+ default:
+ case 0:
+ r3 = 0;
+ break;
+ case 1:
+ r3 = 1;
+ break;
+ }
+ gTasks[taskId].data[2] = r3;
+
+ switch (gPokedexView->unk618)
+ {
+ default:
+ case 0:
+ r3 = 0;
+ break;
+ case 1:
+ r3 = 1;
+ break;
+ case 2:
+ r3 = 2;
+ break;
+ case 3:
+ r3 = 3;
+ break;
+ case 4:
+ r3 = 4;
+ break;
+ case 5:
+ r3 = 5;
+ break;
+ }
+ gTasks[taskId].data[4] = r3;
+}
+
+static bool8 sub_8092F44(u8 taskId)
+{
+ u8 val1 = gTasks[taskId].data[1];
+ const u16 *ptr = &gTasks[taskId].data[gUnknown_083B5A7C[val1].unk5];
+ u16 val2 = gUnknown_083B5A7C[val1].unk6 - 1;
+
+ if (val2 > 5 && *ptr != 0)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static bool8 sub_8092F8C(u8 taskId)
+{
+ u8 val1 = gTasks[taskId].data[1];
+ const u16 *ptr = &gTasks[taskId].data[gUnknown_083B5A7C[val1].unk5];
+ u16 val2 = gUnknown_083B5A7C[val1].unk6 - 1;
+
+ if (val2 > 5 && *ptr < val2 - 5)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static void sub_8092FD8(struct Sprite *sprite)
+{
+ if (gTasks[sprite->data0].func == sub_8092644)
+ {
+ u8 val;
+
+ if (sprite->data1 != 0)
+ {
+ if (sub_8092F8C(sprite->data0))
+ sprite->invisible = TRUE;
+ else
+ sprite->invisible = FALSE;
+ }
+ else
+ {
+ if (sub_8092F44(sprite->data0))
+ sprite->invisible = TRUE;
+ else
+ sprite->invisible = FALSE;
+ }
+ val = sprite->data2 + sprite->data1 * 128;
+ sprite->pos2.y = gSineTable[val] / 128;
+ sprite->data2 += 8;
+ }
+ else
+ {
+ sprite->invisible = TRUE;
+ }
+}
+
+static void sub_809308C(u8 taskId)
+{
+ u8 spriteId;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 4, 0);
+ gSprites[spriteId].data0 = taskId;
+ gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].callback = sub_8092FD8;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 108, 0);
+ gSprites[spriteId].data0 = taskId;
+ gSprites[spriteId].data1 = 1;
+ gSprites[spriteId].vFlip = TRUE;
+ gSprites[spriteId].callback = sub_8092FD8;
+}
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
index f9eb3a7e9..f4eac79a7 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon_3.c
@@ -1255,7 +1255,7 @@ bool8 IsHMMove2(u16 move)
bool8 sub_8040A3C(u16 species)
{
- return gBaseStats[species].bodyColor >> 7; // XXX: should this be a bitfield instead?
+ return gBaseStats[species].unk19_7;
}
s8 sub_8040A54(struct Pokemon *mon, u8 a2)
diff --git a/src/starter_choose.c b/src/starter_choose.c
index 32b6adf36..0ed8315fc 100644
--- a/src/starter_choose.c
+++ b/src/starter_choose.c
@@ -483,7 +483,7 @@ static void AddTextColorCtrlCode(u8 *string, u8 bgColor, u8 textColor, u8 shadow
static void CreateStarterPokemonLabel(u8 prevSelection, u8 selection)
{
u8 labelText[72];
- u8 *category;
+ const u8 *category;
u8 srcIndex;
u8 dstIndex;
u16 species;