summaryrefslogtreecommitdiff
path: root/src/pokedex.c
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2017-08-12 01:26:29 -0400
committerProjectRevoTPP <projectrevotpp@hotmail.com>2017-08-12 01:26:29 -0400
commit1a8fe435e7deabf06029c8e50201136518e3af73 (patch)
tree9746f2f4f4901e81496465da485d0f5c8a647586 /src/pokedex.c
parentbb0cad7c072703f5a540e8c22c8e137267331f4d (diff)
split out src/ directory into categorized subdirectories.
Diffstat (limited to 'src/pokedex.c')
-rw-r--r--src/pokedex.c5528
1 files changed, 0 insertions, 5528 deletions
diff --git a/src/pokedex.c b/src/pokedex.c
deleted file mode 100644
index c132635cb..000000000
--- a/src/pokedex.c
+++ /dev/null
@@ -1,5528 +0,0 @@
-
-#include "global.h"
-#include "gba/m4a_internal.h"
-#include "pokedex.h"
-#include "battle.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 "pokedex_area_screen.h"
-#include "pokedex_cry_screen.h"
-#include "pokemon.h"
-#include "rng.h"
-#include "rom4.h"
-#include "songs.h"
-#include "sound.h"
-#include "species.h"
-#include "string_util.h"
-#include "strings.h"
-#include "task.h"
-#include "trig.h"
-#include "unknown_task.h"
-
-#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
-{
- DEX_MODE_HOENN,
- DEX_MODE_NATIONAL
-};
-
-enum
-{
- PAGE_SCREEN,
- AREA_SCREEN,
- CRY_SCREEN,
- SIZE_SCREEN
-};
-
-struct PokedexEntry
-{
- /*0x00*/ u8 categoryName[12];
- /*0x0C*/ u16 height; //in decimeters
- /*0x0E*/ u16 weight; //in hectograms
- /*0x10*/ const u8 *descriptionPage1;
- /*0x14*/ const u8 *descriptionPage2;
- /*0x18*/ u16 unused;
- /*0x1A*/ u16 pokemonScale;
- /*0x1C*/ u16 pokemonOffset;
- /*0x1E*/ u16 trainerScale;
- /*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 SpriteTemplate gUnknown_02024E8C;
-extern u8 gUnknown_03005E98;
-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 CompressedSpriteSheet gTrainerFrontPicTable[];
-extern const struct MonCoords gTrainerFrontPicCoords[];
-extern const struct PokedexEntry gPokedexEntries[];
-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[];
-
-static EWRAM_DATA struct PokedexView *gPokedexView = NULL;
-static EWRAM_DATA u16 gUnknown_0202FFB8 = 0;
-static EWRAM_DATA u8 gUnknown_0202FFBA = 0;
-static EWRAM_DATA struct PokedexListItem *gUnknown_0202FFBC = NULL;
-
-u8 gUnknown_03005CE8;
-IntrCallback gUnknown_03005CEC;
-
-static u8 sub_8091E3C(void);
-
-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");
-#if ENGLISH
-static const u8 gUnknown_0839FA7C[] = INCBIN_U8("graphics/pokedex/noball.4bpp.lz");
-#elif GERMAN
-extern const u8 gUnknown_0839FA7C[];
-#endif
-
-#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 CompressedSpriteSheet 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[] = _("");
-#if ENGLISH
-#include "data/pokedex_entries_en.h"
-#elif GERMAN
-#include "data/pokedex_entries_de.h"
-#endif
-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)
-{
- u16 i;
-
- gUnknown_0202FFB8 = 0;
- gUnknown_0202FFBA = 0x40;
- gUnknown_03005CE8 = 0;
- gSaveBlock2.pokedex.unknown1 = 0;
- gSaveBlock2.pokedex.order = 0;
- gSaveBlock2.pokedex.nationalMagic = 0;
- gSaveBlock2.pokedex.unknown2 = 0;
- gSaveBlock2.pokedex.unownPersonality = 0;
- gSaveBlock2.pokedex.spindaPersonality = 0;
- gSaveBlock2.pokedex.unknown3 = 0;
- DisableNationalPokedex();
- for (i = 0; i <= 51; i++)
- {
- gSaveBlock2.pokedex.owned[i] = 0;
- gSaveBlock2.pokedex.seen[i] = 0;
- gSaveBlock1.unk938[i] = 0;
- gSaveBlock1.unk3A8C[i] = 0;
- }
-}
-
-void sub_808C0A0(void)
-{
- gUnknown_0202FFB8 = 0;
- gUnknown_0202FFBA = 0x40;
-}
-
-static void sub_808C0B8(void)
-{
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-static void ClearPokedexView(struct PokedexView *pokedexView)
-{
- u16 i;
-
- for (i = 0; i < NATIONAL_DEX_COUNT; i++)
- {
- pokedexView->unk0[i].dexNum |= 0xFFFF;
- pokedexView->unk0[i].seen = 0;
- pokedexView->unk0[i].owned = 0;
- }
- pokedexView->unk608 = 0;
- pokedexView->unk60A_1 = 0;
- pokedexView->unk60A_2 = 0;
- pokedexView->pokemonListCount = 0;
- pokedexView->selectedPokemon = 0;
- pokedexView->unk610 = 0;
- pokedexView->dexMode = 0;
- pokedexView->unk614 = 0;
- pokedexView->dexOrder = 0;
- pokedexView->unk618 = 0;
- pokedexView->unk61A = 0;
- pokedexView->unk61C = 0;
- for (i = 0; i <= 3; i++)
- pokedexView->unk61E[i] |= 0xFFFF;
- pokedexView->unk628 = 0;
- pokedexView->unk62A = 0;
- pokedexView->unk62C = 0;
- pokedexView->unk62D = 0;
- pokedexView->unk62E = 0;
- pokedexView->unk62F = 0;
- pokedexView->unk630 = 0;
- pokedexView->unk632 = 0;
- pokedexView->unk634 = 0;
- pokedexView->unk636 = 0;
- pokedexView->unk638 = 0;
- for (i = 0; i <= 3; i++)
- pokedexView->unk63A[i] = 0;
- pokedexView->unk64A = 0;
- pokedexView->unk64B = 0;
- pokedexView->unk64C_1 = 0;
- pokedexView->selectedScreen = 0;
- pokedexView->unk64F = 0;
- pokedexView->menuIsOpen = 0;
- pokedexView->menuCursorPos = 0;
- pokedexView->menuY = 0;
- for (i = 0; i <= 7; i++)
- pokedexView->unk656[i] = 0;
- for (i = 0; i <= 7; i++)
- pokedexView->unk65E[i] = 0;
-}
-
-void CB2_InitPokedex(void)
-{
- switch (gMain.state)
- {
- case 0:
- default:
- {
- 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)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
- DmaClear32(3, OAM, OAM_SIZE);
- DmaClear16(3, PLTT, PLTT_SIZE);
- gMain.state = 1;
- }
- break;
- case 1:
- remove_some_task();
- ResetTasks();
- ResetSpriteData();
- ResetPaletteFade();
- FreeAllSpritePalettes();
- gReservedSpritePaletteCount = 8;
- SetUpWindowConfig(&gWindowConfig_81E7048);
- InitMenuWindow(&gWindowConfig_81E7048);
- gMain.state++;
- break;
- case 2:
- switch (Random() & 3)
- {
- case 0:
- default:
- gPokedexView = (struct PokedexView *)0x02018000;
- break;
- case 1:
- gPokedexView = (struct PokedexView *)0x02018800;
- break;
- case 2:
- gPokedexView = (struct PokedexView *)0x02019000;
- break;
- case 3:
- gPokedexView = (struct PokedexView *)0x02019800;
- break;
- }
- ClearPokedexView(gPokedexView);
- CreateTask(Task_PokedexShowMainScreen, 0);
- gPokedexView->dexMode = gSaveBlock2.pokedex.unknown1;
- if (!IsNationalPokedexEnabled())
- gPokedexView->dexMode = DEX_MODE_HOENN;
- gPokedexView->dexOrder = gSaveBlock2.pokedex.order;
- gPokedexView->selectedPokemon = gUnknown_0202FFB8;
- gPokedexView->unk62C = gUnknown_0202FFBA;
- gPokedexView->selectedScreen = PAGE_SCREEN;
- gPokedexView->descriptionPageNum = 0;
- if (!IsNationalPokedexEnabled())
- {
- gPokedexView->unk61A = GetHoennPokedexCount(0);
- gPokedexView->unk61C = GetHoennPokedexCount(1);
- }
- else
- {
- gPokedexView->unk61A = GetNationalPokedexCount(0);
- gPokedexView->unk61C = GetNationalPokedexCount(1);
- }
- gPokedexView->unk62D = 8;
- 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);
- }
- break;
- }
-}
-
-u8 unref_sub_808C540(void (*func)(u8))
-{
- u16 savedIme;
- u8 taskId;
-
- SetVBlankCallback(NULL);
- sub_8091060(0x200);
- remove_some_task();
- ResetTasks();
- ResetPaletteFade();
- savedIme = REG_IME;
- REG_IME = 0;
- REG_IE |= 1;
- REG_IME = savedIme;
- REG_DISPSTAT |= 0x8;
- SetVBlankCallback(sub_808C0B8);
- SetMainCallback2(MainCB);
- if (!gPokedexView->unk64B)
- taskId = CreateTask(sub_808CAE4, 0);
- else
- taskId = CreateTask(sub_808D198, 0);
- gTasks[taskId].data[0] = CreateTask(func, 0);
- return gTasks[taskId].data[0];
-}
-
-static void MainCB(void)
-{
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-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
-void Task_PokedexMainScreen(u8 taskId)
-{
- REG_BG0VOFS = gPokedexView->menuY;
-
- //If menu is open, slide it down, off screen
- if (gPokedexView->menuY)
- gPokedexView->menuY -= 8;
- else
- {
- if ((gMain.newKeys & A_BUTTON) && gPokedexView->unk0[gPokedexView->selectedPokemon].seen)
- {
- sub_808E6BC();
- BeginNormalPaletteFade(
- ~(1 << (gSprites[gPokedexView->selectedMonSpriteId].oam.paletteNum + 16)),
- 0, 0, 0x10, 0);
- gSprites[gPokedexView->selectedMonSpriteId].callback = sub_808EDB8;
- gTasks[taskId].func = sub_808CA64;
- PlaySE(SE_PIN);
- }
- else if (gMain.newKeys & START_BUTTON)
- {
- //Open menu
- gPokedexView->menuY = 0;
- gPokedexView->menuIsOpen = 1;
- gPokedexView->menuCursorPos = 0;
- gTasks[taskId].func = Task_PokedexMainScreenMenu;
- PlaySE(SE_SELECT);
- }
- else if (gMain.newKeys & SELECT_BUTTON)
- {
- PlaySE(SE_SELECT);
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].data[0] = sub_8091E3C();
- gPokedexView->unk64F = 0;
- gPokedexView->unk62A = gPokedexView->unk62C;
- gPokedexView->unk610 = gPokedexView->selectedPokemon;
- gPokedexView->unk614 = gPokedexView->dexMode;
- gPokedexView->unk618 = gPokedexView->dexOrder;
- gTasks[taskId].func = sub_808CB8C;
- PlaySE(SE_PC_LOGON);
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_ClosePokedex;
- PlaySE(SE_PC_OFF);
- }
- else
- {
- //Handle D-pad
- gPokedexView->selectedPokemon = sub_808E48C(gPokedexView->selectedPokemon, 0xE);
- if (gPokedexView->unk62E)
- gTasks[taskId].func = sub_808C898;
- }
- }
-}
-
-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
-static void Task_PokedexMainScreenMenu(u8 taskId)
-{
- REG_BG0VOFS = gPokedexView->menuY;
-
- //If menu is not open, slide it up, on screen
- if (gPokedexView->menuY != 80)
- gPokedexView->menuY += 8;
- else
- {
- if (gMain.newKeys & A_BUTTON)
- {
- switch (gPokedexView->menuCursorPos)
- {
- case 0: //BACK TO LIST
- default:
- gMain.newKeys |= START_BUTTON; //Exit menu
- break;
- case 1: //LIST TOP
- gPokedexView->selectedPokemon = 0;
- gPokedexView->unk62C = 0x40;
- sub_808E82C();
- sub_808E0CC(gPokedexView->selectedPokemon, 0xE);
- gMain.newKeys |= START_BUTTON; //Exit menu
- break;
- case 2: //LIST BOTTOM
- gPokedexView->selectedPokemon = gPokedexView->pokemonListCount - 1;
- gPokedexView->unk62C = gPokedexView->pokemonListCount * 16 + 0x30;
- sub_808E82C();
- sub_808E0CC(gPokedexView->selectedPokemon, 0xE);
- gMain.newKeys |= START_BUTTON; //Exit menu
- break;
- case 3: //CLOSE POKEDEX
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_ClosePokedex;
- PlaySE(SE_PC_OFF);
- break;
- }
- }
-
- //Exit menu when Start or B is pressed
- if (gMain.newKeys & (START_BUTTON | B_BUTTON))
- {
- gPokedexView->menuIsOpen = 0;
- gTasks[taskId].func = Task_PokedexMainScreen;
- PlaySE(SE_SELECT);
- }
- else if ((gMain.newAndRepeatedKeys & DPAD_UP) && gPokedexView->menuCursorPos != 0)
- {
- gPokedexView->menuCursorPos--;
- PlaySE(SE_SELECT);
- }
- else if ((gMain.newAndRepeatedKeys & DPAD_DOWN) && gPokedexView->menuCursorPos <= 2)
- {
- gPokedexView->menuCursorPos++;
- PlaySE(SE_SELECT);
- }
- }
-}
-
-static void sub_808CA64(u8 taskId)
-{
- 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->selectedMonSpriteId);
- gTasks[taskId].func = sub_808CAE4;
- }
-}
-
-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())
- sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]);
- }
- else
- {
- gUnknown_0202FFB8 = gPokedexView->selectedPokemon;
- gUnknown_0202FFBA = gPokedexView->unk62C;
- gTasks[taskId].func = Task_PokedexShowMainScreen;
- }
-}
-
-static void sub_808CB8C(u8 taskId)
-{
- bool8 isActive = gTasks[gTasks[taskId].data[0]].isActive;
-
- if (!isActive)
- {
- if (gPokedexView->unk64F != 0)
- {
- gPokedexView->selectedPokemon = isActive;
- gPokedexView->unk62C = 0x40;
- gTasks[taskId].func = sub_808CCC4;
- }
- else
- {
- gPokedexView->unk62C = gPokedexView->unk62A;
- gPokedexView->selectedPokemon = gPokedexView->unk610;
- gPokedexView->dexMode = gPokedexView->unk614;
- if (!IsNationalPokedexEnabled())
- gPokedexView->dexMode = DEX_MODE_HOENN;
- gPokedexView->dexOrder = gPokedexView->unk618;
- gTasks[taskId].func = Task_PokedexShowMainScreen;
- }
- }
-}
-
-static void Task_ClosePokedex(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- gSaveBlock2.pokedex.unknown1 = gPokedexView->dexMode;
- if (!IsNationalPokedexEnabled())
- gSaveBlock2.pokedex.unknown1 = 0;
- gSaveBlock2.pokedex.order = gPokedexView->dexOrder;
- DestroyTask(taskId);
- SetMainCallback2(sub_805469C);
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
- }
-}
-
-static void sub_808CCC4(u8 taskId)
-{
- gPokedexView->unk64C_1 = 1;
- if (sub_808D344(3))
- gTasks[taskId].func = Task_PokedexResultsScreen;
-}
-
-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)
- {
- u32 a;
-
- sub_808E6BC();
- 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);
- }
- else if (gMain.newKeys & START_BUTTON)
- {
- gPokedexView->menuY = 0;
- gPokedexView->menuIsOpen = 1;
- gPokedexView->menuCursorPos = 0;
- gTasks[taskId].func = Task_PokedexResultsScreenMenu;
- PlaySE(SE_SELECT);
- }
- else if (gMain.newKeys & SELECT_BUTTON)
- {
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].data[0] = sub_8091E3C();
- gPokedexView->unk64F = 0;
- gTasks[taskId].func = sub_808CB8C;
- PlaySE(SE_PC_LOGON);
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_PokedexResultsScreenReturnToMainScreen;
- PlaySE(SE_PC_OFF);
- }
- else
- {
- //Handle D-pad
- gPokedexView->selectedPokemon = sub_808E48C(gPokedexView->selectedPokemon, 0xE);
- if (gPokedexView->unk62E)
- gTasks[taskId].func = sub_808CEF8;
- }
- }
-}
-
-static void sub_808CEF8(u8 taskId)
-{
- if (sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636))
- gTasks[taskId].func = Task_PokedexResultsScreen;
-}
-
-static void Task_PokedexResultsScreenMenu(u8 taskId)
-{
- REG_BG0VOFS = gPokedexView->menuY;
-
- if (gPokedexView->menuY != 96)
- {
- gPokedexView->menuY += 8;
- }
- else
- {
- if (gMain.newKeys & A_BUTTON)
- {
- switch (gPokedexView->menuCursorPos)
- {
- case 0: //BACK TO LIST
- default:
- gMain.newKeys |= START_BUTTON;
- break;
- case 1: //LIST TOP
- gPokedexView->selectedPokemon = 0;
- gPokedexView->unk62C = 0x40;
- sub_808E82C();
- sub_808E0CC(gPokedexView->selectedPokemon, 0xE);
- gMain.newKeys |= START_BUTTON;
- break;
- case 2: //LIST BOTTOM
- gPokedexView->selectedPokemon = gPokedexView->pokemonListCount - 1;
- gPokedexView->unk62C = gPokedexView->pokemonListCount * 16 + 0x30;
- sub_808E82C();
- sub_808E0CC(gPokedexView->selectedPokemon, 0xE);
- gMain.newKeys |= START_BUTTON;
- break;
- case 3: //BACK TO POKEDEX
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_PokedexResultsScreenReturnToMainScreen;
- PlaySE(SE_TRACK_DOOR);
- break;
- case 4: //CLOSE POKEDEX
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_PokedexResultsScreenExitPokedex;
- PlaySE(SE_PC_OFF);
- break;
- }
- }
-
- //Exit menu when Start or B is pressed
- if (gMain.newKeys & (START_BUTTON | B_BUTTON))
- {
- gPokedexView->menuIsOpen = 0;
- gTasks[taskId].func = Task_PokedexResultsScreen;
- PlaySE(SE_SELECT);
- }
- else if ((gMain.newAndRepeatedKeys & DPAD_UP) && gPokedexView->menuCursorPos)
- {
- gPokedexView->menuCursorPos--;
- PlaySE(SE_SELECT);
- }
- else if ((gMain.newAndRepeatedKeys & DPAD_DOWN) && gPokedexView->menuCursorPos <= 3)
- {
- gPokedexView->menuCursorPos++;
- PlaySE(SE_SELECT);
- }
- }
-}
-
-static void sub_808D118(u8 taskId)
-{
- 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->selectedMonSpriteId);
- gTasks[taskId].func = sub_808D198;
- }
-}
-
-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())
- sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]);
- }
- else
- {
- gTasks[taskId].func = sub_808CCC4;
- }
-}
-
-static void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- gPokedexView->unk62C = gPokedexView->unk62A;
- gPokedexView->selectedPokemon = gPokedexView->unk610;
- gPokedexView->dexMode = gPokedexView->unk614;
- if (!IsNationalPokedexEnabled())
- gPokedexView->dexMode = DEX_MODE_HOENN;
- gPokedexView->dexOrder = gPokedexView->unk618;
- gTasks[taskId].func = Task_PokedexShowMainScreen;
- }
-}
-
-static void Task_PokedexResultsScreenExitPokedex(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- gPokedexView->unk62C = gPokedexView->unk62A;
- gPokedexView->selectedPokemon = gPokedexView->unk610;
- gPokedexView->dexMode = gPokedexView->unk614;
- if (!IsNationalPokedexEnabled())
- gPokedexView->dexMode = DEX_MODE_HOENN;
- gPokedexView->dexOrder = gPokedexView->unk618;
- gTasks[taskId].func = Task_ClosePokedex;
- }
-}
-
-static bool8 sub_808D344(u8 a)
-{
- switch (gMain.state)
- {
- case 0:
- default:
- if (gPaletteFade.active)
- return 0;
- SetVBlankCallback(NULL);
- gPokedexView->unk64A = a;
- sub_8091060(0);
- REG_BG2VOFS = gPokedexView->unk62D;
- LZ77UnCompVram(gPokedexMenu_Gfx, (void *)(VRAM));
- LZ77UnCompVram(gUnknown_08E96738, (void *)(VRAM + 0x6800));
- LZ77UnCompVram(gUnknown_08E9C6DC, (void *)(VRAM + 0x7800));
- DmaClear16(3, VRAM + 0x6000, 0x500);
- if (a == 0)
- LZ77UnCompVram(gUnknown_08E96888, (void *)(VRAM + 0x6500));
- else
- LZ77UnCompVram(gUnknown_08E96994, (void *)(VRAM + 0x6500));
- ResetPaletteFade();
- if (a == 0)
- gPokedexView->unk64C_1 = 0;
- else
- gPokedexView->unk64C_1 = 1;
- sub_808D640();
- gMain.state = 1;
- break;
- case 1:
- ResetSpriteData();
- FreeAllSpritePalettes();
- gReservedSpritePaletteCount = 8;
- LoadCompressedObjectPic(&gUnknown_083A05CC[0]);
- LoadSpritePalettes(gUnknown_083A05DC);
- sub_808E978(a);
- gMain.state++;
- break;
- case 2:
- SetUpWindowConfig(&gWindowConfig_81E7048);
- InitMenuWindow(&gWindowConfig_81E7048);
- LZ77UnCompVram(gUnknown_0839FA7C, (void *)(VRAM + 0xFF80));
- gMain.state++;
- break;
- case 3:
- if (a == 0)
- SortPokedex(gPokedexView->dexMode, gPokedexView->dexOrder);
- sub_808E0CC(gPokedexView->selectedPokemon, 0xE);
- gPokedexView->menuIsOpen = 0;
- gPokedexView->menuY = 0;
- gMain.state++;
- break;
- case 4:
- BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
- SetVBlankCallback(sub_808C0B8);
- gMain.state++;
- break;
- case 5:
- REG_WININ = 0x3F3F;
- REG_WINOUT = 0x1D3F;
- REG_WIN0H = 0;
- REG_WIN0V = 0;
- REG_WIN1H = 0;
- REG_WIN1V = 0;
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- REG_BLDY = 0;
- REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(15) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(12) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_OBJWIN_ON;
- gMain.state++;
- break;
- case 6:
- if (!gPaletteFade.active)
- {
- gMain.state = 0;
- return TRUE;
- }
- break;
- }
- return FALSE;
-}
-
-static void sub_808D640(void)
-{
- if (gPokedexView->unk64C_1)
- LoadPalette(sPokedexSearchPalette + 1, 1, sizeof(sPokedexSearchPalette) - sizeof(u16));
- else if (!IsNationalPokedexEnabled())
- LoadPalette(gPokedexMenu_Pal + 1, 1, 0xBE);
- else
- LoadPalette(sNationalPokedexPalette + 1, 1, sizeof(sNationalPokedexPalette) - sizeof(u16));
-}
-
-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->pokemonListCount = 0;
-
- switch (dexMode)
- {
- default:
- case DEX_MODE_HOENN:
- vars[0] = 202;
- vars[1] = 1;
- break;
- case DEX_MODE_NATIONAL:
- if (IsNationalPokedexEnabled())
- {
- vars[0] = NATIONAL_DEX_COUNT;
- vars[1] = 0;
- }
- else
- {
- vars[0] = 202;
- vars[1] = 1;
- }
- break;
- }
-
- switch (sortMode)
- {
- case 0:
- if (vars[1])
- {
- for (i = 0; i < vars[0]; i++)
- {
- vars[2] = HoennToNationalOrder(i + 1);
- gPokedexView->unk0[i].dexNum = vars[2];
- gPokedexView->unk0[i].seen = GetNationalPokedexFlag(vars[2], 0);
- gPokedexView->unk0[i].owned = GetNationalPokedexFlag(vars[2], 1);
- if (gPokedexView->unk0[i].seen)
- gPokedexView->pokemonListCount = i + 1;
- }
- }
- else
- {
- bool32 r10;
- s16 r5;
-
- r10 = r5 = i = 0;
- for (i = 0; i < vars[0]; i++)
- {
- vars[2] = i + 1;
- if (GetNationalPokedexFlag(vars[2], 0))
- r10 = 1;
- if (r10)
- {
- asm(""); //Needed to match for some reason
- gPokedexView->unk0[r5].dexNum = vars[2];
- gPokedexView->unk0[r5].seen = GetNationalPokedexFlag(vars[2], 0);
- gPokedexView->unk0[r5].owned = GetNationalPokedexFlag(vars[2], 1);
- if (gPokedexView->unk0[r5].seen)
- gPokedexView->pokemonListCount = r5 + 1;
- r5++;
- }
- }
- }
- break;
- case 1:
- for (i = 0; i < 411; i++)
- {
- vars[2] = gPokedexOrder_Alphabetical[i];
-
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 0))
- {
- 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 = 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->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 < NATIONAL_DEX_COUNT; i++)
- {
- vars[2] = gPokedexOrder_Weight[i];
-
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1))
- {
- 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 = 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->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 < NATIONAL_DEX_COUNT; i++)
- {
- vars[2] = gPokedexOrder_Height[i];
-
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetNationalPokedexFlag(vars[2], 1))
- {
- 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->pokemonListCount; i < NATIONAL_DEX_COUNT; i++)
- {
- gPokedexView->unk0[i].dexNum |= 0xFFFF;
- gPokedexView->unk0[i].seen = 0;
- gPokedexView->unk0[i].owned = 0;
- }
-}
-
-static void sub_808DBE8(u8 a, u16 b, u16 c)
-{
- s16 _b;
- u16 i;
- u16 r2;
-
- switch (a)
- {
- case 0:
- default:
- _b = b - 5;
- for (i = 0; i <= 10; i++)
- {
- 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);
- if (gPokedexView->unk0[_b].seen)
- {
- sub_808DEB0(_b, 0x12, i * 2, c);
- sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, i * 2, c);
- sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, i * 2);
- }
- else
- {
- sub_808DEB0(_b, 0x12, i * 2, c);
- sub_808DF88(0, 0x11, i * 2, c);
- sub_808DFE4(0, 0x17, i * 2);
- }
- }
- _b++;
- }
- break;
- case 1:
- _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);
- if (gPokedexView->unk0[_b].seen)
- {
- sub_808DEB0(_b, 0x12, gPokedexView->unk630 * 2, c);
- sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, gPokedexView->unk630 * 2, c);
- sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, gPokedexView->unk630 * 2);
- }
- else
- {
- sub_808DEB0(_b, 0x12, gPokedexView->unk630 * 2, c);
- sub_808DF88(0, 0x11, gPokedexView->unk630 * 2, c);
- sub_808DFE4(0, 0x17, gPokedexView->unk630 * 2);
- }
- }
- break;
- case 2:
- _b = b + 5;
- r2 = gPokedexView->unk630 + 10;
- if (r2 > 15)
- r2 -= 16;
- if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF)
- sub_808E090(0x11, r2 * 2, c);
- else
- {
- sub_808E090(0x11, r2 * 2, c);
- if (gPokedexView->unk0[_b].seen)
- {
- sub_808DEB0(_b, 0x12, r2 * 2, c);
- sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, r2 * 2, c);
- sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, r2 * 2);
- }
- else
- {
- sub_808DEB0(_b, 0x12, r2 * 2, c);
- sub_808DF88(0, 0x11, r2 * 2, c);
- sub_808DFE4(0, 0x17, r2 * 2);
- }
- }
- break;
- }
-}
-
-static void sub_808DEB0(u16 a, u8 b, u8 c, u16 d)
-{
- u8 text[4];
- u16 unk[2];
- u16 r7 = gPokedexView->unk0[a].dexNum;
-
- if (gPokedexView->dexMode == DEX_MODE_HOENN)
- r7 = NationalToHoennOrder(r7);
- unk[0] = 0x3FC;
- unk[1] = 0x3FD;
- 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 + d * 0x800 + (c + 1) * 0x40 + b * 2) = unk[1];
- MenuPrint(text, b - 15, c);
-}
-
-static void sub_808DF88(u16 a, u8 b, u8 c, u16 d)
-{
- u16 unk[2];
-
- if (a)
- {
- unk[0] = 0x3FE;
- unk[1] = 0x3FF;
- }
- else
- {
- unk[0] = 0;
- unk[1] = 0;
- }
- *(u16 *)(VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0];
- *(u16 *)(VRAM + d * 0x800 + (c + 1) * 0x40 + b * 2) = unk[1];
-}
-
-static u8 sub_808DFE4(u16 num, u8 b, u8 c)
-{
- u8 text[10];
- u8 i;
-
- for (i = 0; i < 10; i++)
- text[i] = CHAR_SPACE;
- text[i] = EOS;
-
- 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] = CHAR_HYPHEN;
- break;
- }
- MenuPrint_PixelCoords(text, (b - 0x11) * 8 + 0xFC, c * 8, 0);
- return i;
-}
-
-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 + c * 0x800 + (b + 1) * 64 + (a + i) * 2) = 0;
- }
-}
-
-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->selectedMonSpriteId = 0xFFFF;
- sub_808DBE8(0, a, b);
- REG_BG2VOFS = gPokedexView->unk62D;
-
- unk = sub_808E888(a - 1);
- if (unk != 0xFFFF)
- {
- spriteId = sub_808E8C8(unk, 0x60, 0x50);
- gSprites[spriteId].callback = sub_808EE28;
- gSprites[spriteId].data5 = -32;
- }
-
- unk = sub_808E888(a);
- if (unk != 0xFFFF)
- {
- spriteId = sub_808E8C8(unk, 0x60, 0x50);
- gSprites[spriteId].callback = sub_808EE28;
- gSprites[spriteId].data5 = 0;
- }
-
- unk = sub_808E888(a + 1);
- if (unk != 0xFFFF)
- {
- spriteId = sub_808E8C8(unk, 0x60, 0x50);
- gSprites[spriteId].callback = sub_808EE28;
- gSprites[spriteId].data5 = 32;
- }
-
- gPokedexView->unk630 = 0;
- gPokedexView->unk632 = 0;
-}
-
-static bool8 sub_808E208(u8 a, u8 b, u8 c)
-{
- u16 i;
- u8 foo;
-
- if (gPokedexView->unk62E)
- {
- gPokedexView->unk62E--;
- switch (a)
- {
- case 1:
- for (i = 0; i < 4; i++)
- {
- if (gPokedexView->unk61E[i] != 0xFFFF)
- gSprites[gPokedexView->unk61E[i]].data5 += b;
- }
- foo = 16 * (c - gPokedexView->unk62E) / c;
- REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 - foo;
- gPokedexView->unk62C -= gPokedexView->unk628;
- break;
- case 2:
- for (i = 0; i < 4; i++)
- {
- if (gPokedexView->unk61E[i] != 0xFFFF)
- gSprites[gPokedexView->unk61E[i]].data5 -= b;
- }
- foo = 16 * (c - gPokedexView->unk62E) / c;
- REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 + foo;
- gPokedexView->unk62C += gPokedexView->unk628;
- break;
- }
- return FALSE;
- }
- else
- {
- REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk630 * 16;
- return TRUE;
- }
-}
-
-static void sub_808E398(u8 a, u16 b)
-{
- u16 unk;
- u8 spriteId;
-
- gPokedexView->unk632 = gPokedexView->unk630;
- 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 = -64;
- }
- if (gPokedexView->unk630 > 0)
- gPokedexView->unk630--;
- else
- gPokedexView->unk630 = 15;
- break;
- case 2:
- unk = sub_808E888(b + 1);
- if (unk != 0xFFFF)
- {
- spriteId = sub_808E8C8(unk, 0x60, 0x50);
- gSprites[spriteId].callback = sub_808EE28;
- gSprites[spriteId].data5 = 0x40;
- }
- if (gPokedexView->unk630 <= 0xE)
- gPokedexView->unk630++;
- else
- gPokedexView->unk630 = 0;
- break;
- }
-}
-
-// Ugly, ugly, ugly. I couldn't get it to match otherwise.
-static u16 sub_808E48C(u16 a, u16 b)
-{
- u8 r3;
- u8 r5;
- u8 i;
- u16 r6;
- u8 r10 = 0;
-
- if (!((gMain.heldKeys & 0x40) && (a > 0)))
- {
- //_0808E4B6
- if (!((gMain.heldKeys & 0x80) && (a < gPokedexView->pokemonListCount - 1)))
- //_0808E4CE
- {
- if ((gMain.newKeys & 0x20) && (a > 0))
- {
- 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;
- }
- }
- else
- {
- // 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;
- }
- }
- else
- {
- //to _0808E5E4
- r10 = 1;
- a = sub_8091818(1, a, 0, gPokedexView->pokemonListCount - 1);
- sub_808E398(1, a);
- //_0808E60E
- sub_808DBE8(1, a, b);
- PlaySE(0x6C);
- goto _0808E5A2;
- }
- //_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 / 2;
- sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636);
- if (gPokedexView->unk638 <= 0xB)
- gPokedexView->unk638++;
- return a;
-}
-
-static void sub_808E6BC(void)
-{
- u16 i;
-
- for (i = 0; i < 4; i++)
- {
- u16 spriteId = gPokedexView->unk61E[i];
-
- if (gSprites[spriteId].pos2.x == 0 && gSprites[spriteId].pos2.y == 0 && spriteId != 0xFFFF)
- gPokedexView->selectedMonSpriteId = spriteId;
- }
-}
-
-static u8 sub_808E71C(void)
-{
- u16 r2;
- u16 r4 = gPokedexView->selectedPokemon;
-
- if ((gMain.newKeys & DPAD_UP) && r4)
- {
- r2 = r4;
- while (r2 != 0)
- {
- r2 = sub_8091818(1, r2, 0, gPokedexView->pokemonListCount - 1);
-
- if (gPokedexView->unk0[r2].seen)
- {
- r4 = r2;
- break;
- }
- }
-
- if (gPokedexView->selectedPokemon == r4)
- return 0;
- else
- {
- gPokedexView->selectedPokemon = r4;
- gPokedexView->unk62C -= 16;
- return 1;
- }
- }
- else if ((gMain.newKeys & DPAD_DOWN) && r4 < gPokedexView->pokemonListCount - 1)
- {
- r2 = r4;
- while (r2 < gPokedexView->pokemonListCount - 1)
- {
- r2 = sub_8091818(0, r2, 0, gPokedexView->pokemonListCount - 1);
-
- if (gPokedexView->unk0[r2].seen)
- {
- r4 = r2;
- break;
- }
- }
-
- if (gPokedexView->selectedPokemon == r4)
- return 0;
- else
- {
- gPokedexView->selectedPokemon = r4;
- gPokedexView->unk62C += 16;
- return 1;
- }
- }
- return 0;
-}
-
-static u8 sub_808E82C(void)
-{
- u16 i;
-
- for (i = 0; i < 4; i++)
- {
- if (gPokedexView->unk61E[i] != 0xFFFF)
- {
- DestroySprite(&gSprites[gPokedexView->unk61E[i]]);
- gPokedexView->unk61E[i] |= 0xFFFF;
- }
- }
- return 0;
-}
-
-static u16 sub_808E888(u16 a1)
-{
- if (a1 >= NATIONAL_DEX_COUNT || gPokedexView->unk0[a1].dexNum == 0xFFFF)
- return 0xFFFF;
- else if (gPokedexView->unk0[a1].seen)
- return gPokedexView->unk0[a1].dexNum;
- else
- return 0;
-}
-
-static u32 sub_808E8C8(u16 a, s16 b, s16 c)
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- {
- if (gPokedexView->unk61E[i] == 0xFFFF)
- {
- u8 spriteId = sub_80918EC(a, b, c, i);
-
- gSprites[spriteId].oam.affineMode = 1;
- gSprites[spriteId].oam.priority = 3;
- gSprites[spriteId].data0 = 0;
- gSprites[spriteId].data1 = i;
- gSprites[spriteId].data2 = NationalPokedexNumToSpecies(a);
- gPokedexView->unk61E[i] = spriteId;
- return spriteId;
- }
- }
- return 0xFFFF;
-}
-
-static void sub_808E978(u8 a)
-{
- u8 spriteId;
- u16 r5;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 4, 0);
- gSprites[spriteId].data1 = 0;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 156, 0);
- gSprites[spriteId].data1 = 1;
- gSprites[spriteId].vFlip = TRUE;
-
- CreateSprite(&gSpriteTemplate_83A0524, 234, 20, 0);
- CreateSprite(&gSpriteTemplate_83A0554, 16, 138, 0);
-
- spriteId = CreateSprite(&gSpriteTemplate_83A0554, 48, 138, 0);
- StartSpriteAnim(&gSprites[spriteId], 3);
-
- spriteId = CreateSprite(&gSpriteTemplate_83A0554, 16, 158, 0);
- StartSpriteAnim(&gSprites[spriteId], 2);
- gSprites[spriteId].data2 = 0x80;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A0554, 48, 158, 0);
- StartSpriteAnim(&gSprites[spriteId], 1);
-
- 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, 80, 2);
- gSprites[spriteId].oam.affineMode = 1;
- gSprites[spriteId].oam.matrixNum = 31;
- gSprites[spriteId].data0 = 0x1F;
- gSprites[spriteId].data1 = 0x80;
-
- if (a == 0)
- {
- u32 _a;
-
- CreateSprite(&gSpriteTemplate_83A0584, 32, 40, 1);
-
- spriteId = CreateSprite(&gSpriteTemplate_83A0584, 32, 72, 1);
- StartSpriteAnim(&gSprites[spriteId], 1);
- _a = 0;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 28, 48, 1);
- r5 = gPokedexView->unk61A / 100;
- StartSpriteAnim(&gSprites[spriteId], r5);
- if (r5 != 0)
- _a = 1;
- else
- gSprites[spriteId].invisible = TRUE;
-
- 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 = TRUE;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 40, 48, 1);
- r5 = (gPokedexView->unk61A % 100) % 10;
- StartSpriteAnim(&gSprites[spriteId], r5);
- _a = 0;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 28, 80, 1);
- r5 = gPokedexView->unk61C / 100;
- StartSpriteAnim(&gSprites[spriteId], r5);
- if (r5 != 0)
- _a = 1;
- else
- gSprites[spriteId].invisible = TRUE;
-
- 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 = TRUE;
-
- spriteId = CreateSprite(&gSpriteTemplate_83A059C, 40, 80, 1);
- r5 = (gPokedexView->unk61C % 100) % 10;
- StartSpriteAnim(&gSprites[spriteId], r5);
-
- spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 140, 96, 1);
- gSprites[spriteId].invisible = TRUE;
- }
- else
- {
- spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 140, 80, 1);
- gSprites[spriteId].invisible = TRUE;
- }
-}
-
-static void nullsub_58(struct Sprite *sprite)
-{
-}
-
-static void sub_808ED94(struct Sprite *sprite)
-{
- if (gPokedexView->unk64A != 0)
- DestroySprite(sprite);
-}
-
-//Move Pokemon into position for description page
-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 != 48 || sprite->pos1.y != 56)
- {
- if (sprite->pos1.x > 48)
- sprite->pos1.x--;
- if (sprite->pos1.x < 48)
- sprite->pos1.x++;
-
- if (sprite->pos1.y > 56)
- sprite->pos1.y--;
- if (sprite->pos1.y < 56)
- sprite->pos1.y++;
- }
- else
- {
- sprite->callback = nullsub_58;
- }
-}
-
-static void sub_808EE28(struct Sprite *sprite)
-{
- u8 data1 = sprite->data1;
-
- if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
- {
- DestroySprite(sprite);
- gPokedexView->unk61E[data1] = 0xFFFF;
- }
- else
- {
- u32 var;
-
- sprite->pos2.y = gSineTable[(u8)sprite->data5] * 76 / 256;
- var = 0x10000 / gSineTable[sprite->data5 + 0x40];
- if (var > 0xFFFF)
- var = 0xFFFF;
- SetOamMatrix(sprite->data1 + 1, 0x100, 0, 0, var);
- sprite->oam.matrixNum = data1 + 1;
-
- if (sprite->data5 > -64 && sprite->data5 < 64)
- {
- sprite->invisible = FALSE;
- sprite->data0 = 1;
- }
- else
- {
- sprite->invisible = TRUE;
- }
-
- if ((sprite->data5 <= -64 || sprite->data5 >= 64) && sprite->data0 != 0)
- {
- DestroySprite(sprite);
- gPokedexView->unk61E[data1] = 0xFFFF;
- }
- }
-}
-
-static void sub_808EF38(struct Sprite *sprite)
-{
- if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
- DestroySprite(sprite);
- else
- sprite->pos2.y = gPokedexView->selectedPokemon * 120 / (gPokedexView->pokemonListCount - 1);
-}
-
-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->pokemonListCount - 1)
- sprite->invisible = TRUE;
- else
- sprite->invisible = FALSE;
- r0 = sprite->data2;
- }
- else
- {
- if (gPokedexView->selectedPokemon == 0)
- sprite->invisible = TRUE;
- else
- 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 = FALSE;
- else
- sprite->invisible = TRUE;
- }
-}
-
-static void sub_808F08C(struct Sprite *sprite)
-{
- if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
- DestroySprite(sprite);
-}
-
-static void sub_808F0B4(struct Sprite *sprite)
-{
- if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
- {
- DestroySprite(sprite);
- }
- else
- {
- u8 val;
- s16 r3;
- s16 r0;
-
- val = gPokedexView->unk62C + sprite->data1;
- r3 = gSineTable[val];
- r0 = gSineTable[val + 0x40];
- SetOamMatrix(sprite->data0, r0, r3, -r3, r0);
-
- 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;
- }
-}
-
-static void sub_808F168(struct Sprite *sprite)
-{
- if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3)
- {
- DestroySprite(sprite);
- }
- else
- {
- u16 r1 = gPokedexView->unk64A == 0 ? 80 : 96;
-
- if (gPokedexView->menuIsOpen != 0 && gPokedexView->menuY == r1)
- {
- sprite->invisible = FALSE;
- sprite->pos2.y = gPokedexView->menuCursorPos * 16;
- sprite->pos2.x = gSineTable[(u8)sprite->data2] / 64;
- sprite->data2 += 8;
- }
- else
- {
- sprite->invisible = TRUE;
- }
- }
-}
-
-static u8 sub_808F210(struct PokedexListItem *item, u8 b)
-{
- u8 taskId;
-
- gUnknown_0202FFBC = item;
- taskId = CreateTask(Task_InitPageScreenMultistep, 0);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = 1;
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].data[3] = 0;
- gTasks[taskId].data[4] = b;
- return taskId;
-}
-
-static bool8 sub_808F250(u8 taskId)
-{
- if (gTasks[taskId].data[0] == 0 && gTasks[taskId].func == Task_PageScreenProcessInput)
- return FALSE;
- else
- return TRUE;
-}
-
-static u8 sub_808F284(struct PokedexListItem *item, u8 b)
-{
- gUnknown_0202FFBC = item;
- gTasks[b].data[0] = 1;
- gTasks[b].data[1] = 0;
- gTasks[b].data[2] = 0;
- gTasks[b].data[3] = 0;
- return b;
-}
-
-#if ENGLISH
-#define CATEGORY_LEFT (11)
-#elif GERMAN
-#define CATEGORY_LEFT (16)
-#endif
-
-static void Task_InitPageScreenMultistep(u8 taskId)
-{
- switch (gMain.state)
- {
- case 0:
- default:
- if (!gPaletteFade.active)
- {
- u16 r2;
-
- gPokedexView->unk64A = 1;
- gPokedexView->descriptionPageNum = 0;
- gUnknown_03005CEC = gMain.vblankCallback;
- SetVBlankCallback(NULL);
- r2 = 0;
- if (gTasks[taskId].data[1] != 0)
- r2 += 0x1000;
- if (gTasks[taskId].data[2] != 0)
- r2 |= 0x200;
- sub_8091060(r2);
- gMain.state = 1;
- }
- break;
- case 1:
- LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM);
- LZ77UnCompVram(gUnknown_08E96BD4, (void *)(VRAM + 0x7800));
- sub_8091738(gUnknown_0202FFBC->dexNum, 2, 0x3FC);
- gMain.state++;
- break;
- case 2:
- sub_80904FC(0xD);
- sub_8090584(gPokedexView->selectedScreen, 0xD);
- sub_808D640();
- gMain.state++;
- break;
- case 3:
- SetUpWindowConfig(&gWindowConfig_81E7064);
- InitMenuWindow(&gWindowConfig_81E7064);
- gMain.state++;
- break;
- case 4:
- if (gPokedexView->dexMode == DEX_MODE_HOENN)
- sub_8091154(NationalToHoennOrder(gUnknown_0202FFBC->dexNum), 0xD, 3);
- else
- sub_8091154(gUnknown_0202FFBC->dexNum, 0xD, 3);
- sub_80911C8(gUnknown_0202FFBC->dexNum, 0x10, 3);
- MenuPrint(gDexText_UnknownPoke, CATEGORY_LEFT, 5);
- MenuPrint(gDexText_UnknownHeight, 16, 7);
- MenuPrint(gDexText_UnknownWeight, 16, 9);
- if (gUnknown_0202FFBC->owned)
- {
- sub_8091304(gPokedexEntries[gUnknown_0202FFBC->dexNum].categoryName, CATEGORY_LEFT, 5);
- sub_8091458(gPokedexEntries[gUnknown_0202FFBC->dexNum].height, 16, 7);
- sub_8091564(gPokedexEntries[gUnknown_0202FFBC->dexNum].weight, 16, 9);
- MenuPrint(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13);
- sub_80917CC(14, 0x3FC);
- }
- else
- {
- MenuPrint(gUnknown_083A05F8, 2, 13);
- LoadPalette(gPlttBufferUnfaded + 1, 0x31, 0x1E);
- }
- gMain.state++;
- break;
- case 5:
- if (gTasks[taskId].data[1] == 0)
- {
- 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 + 16));
- BeginNormalPaletteFade(~r3, 0, 16, 0, 0);
- SetVBlankCallback(gUnknown_03005CEC);
- gMain.state++;
- }
- break;
- case 7:
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- REG_BLDY = 0;
- REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(15) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON;
- gMain.state++;
- break;
- case 8:
- if (!gPaletteFade.active)
- {
- gMain.state++;
- if (gTasks[taskId].data[3] == 0)
- {
- StopCryAndClearCrySongs();
- PlayCry2(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum), 0, 0x7D, 0xA);
- }
- else
- {
- gMain.state++;
- }
- }
- break;
- case 9:
- if (!IsCryPlayingOrClearCrySongs())
- gMain.state++;
- break;
- case 10:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[2] = 1;
- gTasks[taskId].data[3] = 1;
- gTasks[taskId].func = Task_PageScreenProcessInput;
- gMain.state = 0;
- break;
- }
-}
-
-static void Task_PageScreenProcessInput(u8 taskId)
-{
- if (gTasks[taskId].data[0] != 0)
- {
- BeginNormalPaletteFade(-1, 0, 0, 16, 0);
- gTasks[taskId].func = sub_808F888;
- PlaySE(SE_Z_SCROLL);
- return;
- }
- if (gMain.newKeys & B_BUTTON)
- {
- BeginNormalPaletteFade(-1, 0, 0, 16, 0);
- gTasks[taskId].func = Task_ClosePageScreen;
- PlaySE(SE_PC_OFF);
- return;
- }
- if (gMain.newKeys & A_BUTTON)
- {
- switch (gPokedexView->selectedScreen)
- {
- case PAGE_SCREEN:
- sub_8090C68();
- break;
- case AREA_SCREEN:
- BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_InitAreaScreenMultistep;
- PlaySE(SE_PIN);
- break;
- case CRY_SCREEN:
- BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_InitCryScreenMultistep;
- PlaySE(SE_PIN);
- break;
- case SIZE_SCREEN:
- if (!gUnknown_0202FFBC->owned)
- {
- PlaySE(SE_HAZURE);
- }
- else
- {
- BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_InitSizeScreenMultistep;
- PlaySE(SE_PIN);
- }
- break;
- }
- return;
- }
- 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;
- }
- 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;
- }
-}
-
-static void sub_808F888(u8 taskId)
-{
- if (!gPaletteFade.active)
- gTasks[taskId].func = Task_InitPageScreenMultistep;
-}
-
-static void Task_ClosePageScreen(u8 taskId)
-{
- if (!gPaletteFade.active)
- DestroyTask(taskId);
-}
-
-static void Task_InitAreaScreenMultistep(u8 taskId)
-{
- switch (gMain.state)
- {
- case 0:
- default:
- if (!gPaletteFade.active)
- {
- gPokedexView->unk64A = 5;
- gUnknown_03005CEC = gMain.vblankCallback;
- SetVBlankCallback(NULL);
- sub_8091060(0x200);
- gPokedexView->selectedScreen = AREA_SCREEN;
- gMain.state = 1;
- }
- break;
- case 1:
- sub_8090540(0xD);
- sub_8090644(1, 0xD);
- sub_808D640();
- REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256;
- gMain.state++;
- break;
- case 2:
- ShowPokedexAreaScreen(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum), &gPokedexView->unk64F);
- SetVBlankCallback(gUnknown_03005CEC);
- gPokedexView->unk64F = 0;
- gMain.state = 0;
- gTasks[taskId].func = Task_AreaScreenProcessInput;
- break;
- }
-}
-
-static void Task_AreaScreenProcessInput(u8 taskId)
-{
- if (gPokedexView->unk64F != 0)
- gTasks[taskId].func = sub_808FA00;
-}
-
-static void sub_808FA00(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- switch (gPokedexView->unk64F)
- {
- case 1:
- default:
- gTasks[taskId].func = Task_InitPageScreenMultistep;
- break;
- case 2:
- gTasks[taskId].func = Task_InitCryScreenMultistep;
- break;
- }
- }
-}
-
-static void Task_InitCryScreenMultistep(u8 taskId)
-{
- switch (gMain.state)
- {
- case 0:
- default:
- if (!gPaletteFade.active)
- {
- m4aMPlayStop(&gMPlay_BGM);
- gPokedexView->unk64A = 6;
- gUnknown_03005CEC = gMain.vblankCallback;
- SetVBlankCallback(NULL);
- sub_8091060(0x200);
- gPokedexView->selectedScreen = CRY_SCREEN;
- gMain.state = 1;
- }
- break;
- case 1:
- LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM);
- LZ77UnCompVram(gUnknown_0839F8A0, (void *)(VRAM + 0x7000));
- gMain.state++;
- break;
- case 2:
- sub_8090540(0xD);
- sub_8090644(2, 0xD);
- sub_808D640();
- DmaClear16(3, (void *)(VRAM + 0xF800), 0x500);
- gMain.state++;
- break;
- case 3:
- SetUpWindowConfig(&gWindowConfig_81E702C);
- InitMenuWindow(&gWindowConfig_81E702C);
- ResetPaletteFade();
- gMain.state++;
- break;
- case 4:
- MenuPrint(gDexText_CryOf, 10, 4);
- sub_8091260(gUnknown_0202FFBC->dexNum, 10, 6, 2);
- gMain.state++;
- break;
- case 5:
- gTasks[taskId].data[4] = sub_80918EC(gUnknown_0202FFBC->dexNum, 0x30, 0x38, 0);
- gSprites[gTasks[taskId].data[4]].oam.priority = 0;
- gUnknown_03005E98 = 0;
- 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;
- }
- }
- 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++;
- }
- break;
- case 8:
- BeginNormalPaletteFade(-0x15, 0, 0x10, 0, 0);
- SetVBlankCallback(gUnknown_03005CEC);
- gMain.state++;
- break;
- case 9:
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- REG_BLDY = 0;
- REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(14) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BG0CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON;
- gMain.state++;
- break;
- case 10:
- gPokedexView->unk64F = 0;
- gMain.state = 0;
- gTasks[taskId].func = Task_CryScreenProcessInput;
- break;
- }
-}
-
-static void Task_CryScreenProcessInput(u8 taskId)
-{
- sub_8119F88(0);
-
- if (IsCryPlaying())
- sub_8090040(1);
- else
- sub_8090040(0);
-
- if (gMain.newKeys & A_BUTTON)
- {
- sub_8090040(1);
- sub_811A050(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum));
- return;
- }
- else if (!gPaletteFade.active)
- {
- if (gMain.newKeys & B_BUTTON)
- {
- BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
- m4aMPlayContinue(&gMPlay_BGM);
- gPokedexView->unk64F = 1;
- gTasks[taskId].func = sub_808FFBC;
- PlaySE(SE_PC_OFF);
- return;
- }
- if ((gMain.newKeys & DPAD_LEFT)
- || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
- {
- BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
- m4aMPlayContinue(&gMPlay_BGM);
- gPokedexView->unk64F = 2;
- gTasks[taskId].func = sub_808FFBC;
- PlaySE(SE_Z_PAGE);
- return;
- }
- 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);
- m4aMPlayContinue(&gMPlay_BGM);
- gPokedexView->unk64F = 3;
- gTasks[taskId].func = sub_808FFBC;
- PlaySE(SE_Z_PAGE);
- }
- return;
- }
- }
-}
-
-static void sub_808FFBC(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- DestroyCryMeterNeedleSprite();
- switch (gPokedexView->unk64F)
- {
- default:
- case 1:
- gTasks[taskId].func = Task_InitPageScreenMultistep;
- break;
- case 2:
- gTasks[taskId].func = Task_InitAreaScreenMultistep;
- break;
- case 3:
- gTasks[taskId].func = Task_InitSizeScreenMultistep;
- break;
- }
- }
-}
-
-static void sub_8090040(u8 a)
-{
- u16 unk;
-
- if (a != 0)
- unk = 0x392;
- else
- unk = 0x2AF;
- LoadPalette(&unk, 0x5D, 2);
-}
-
-static void Task_InitSizeScreenMultistep(u8 taskId)
-{
- u8 spriteId;
-
- switch (gMain.state)
- {
- default:
- case 0:
- if (!gPaletteFade.active)
- {
- gPokedexView->unk64A = 7;
- gUnknown_03005CEC = gMain.vblankCallback;
- SetVBlankCallback(NULL);
- sub_8091060(0x200);
- gPokedexView->selectedScreen = SIZE_SCREEN;
- gMain.state = 1;
- }
- break;
- case 1:
- LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM);
- LZ77UnCompVram(gUnknown_0839F988, (void *)(VRAM + 0x7000));
- gMain.state++;
- break;
- case 2:
- sub_8090540(0xD);
- sub_8090644(3, 0xD);
- sub_808D640();
- 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++;
- }
- break;
- case 4:
- ResetPaletteFade();
- gMain.state++;
- break;
- case 5:
- 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, sizeof(gUnknown_083B4EC4));
- gMain.state++;
- break;
- case 6:
- 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, sizeof(gUnknown_083B4EC4));
- gMain.state++;
- break;
- case 7:
- BeginNormalPaletteFade(-0x15, 0, 0x10, 0, 0);
- SetVBlankCallback(gUnknown_03005CEC);
- gMain.state++;
- break;
- case 8:
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- REG_BLDY = 0;
- REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(14) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON;
- gMain.state++;
- break;
- case 9:
- if (!gPaletteFade.active)
- {
- gPokedexView->unk64F = 0;
- gMain.state = 0;
- gTasks[taskId].func = Task_SizeScreenProcessInput;
- }
- break;
- }
-}
-
-static void Task_SizeScreenProcessInput(u8 taskId)
-{
- if (gMain.newKeys & B_BUTTON)
- {
- BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
- gPokedexView->unk64F = 1;
- gTasks[taskId].func = sub_8090498;
- PlaySE(SE_PC_OFF);
- }
- else if ((gMain.newKeys & DPAD_LEFT)
- || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR))
- {
- BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
- gPokedexView->unk64F = 2;
- gTasks[taskId].func = sub_8090498;
- PlaySE(SE_Z_PAGE);
- }
-}
-
-static void sub_8090498(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- switch (gPokedexView->unk64F)
- {
- default:
- case 1:
- gTasks[taskId].func = Task_InitPageScreenMultistep;
- break;
- case 2:
- gTasks[taskId].func = Task_InitCryScreenMultistep;
- break;
- }
- }
-}
-
-static void sub_80904FC(u16 a)
-{
- LZ77UnCompVram(gUnknown_08E96ACC, (void *)(VRAM + a * 0x800));
- DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440);
-}
-
-static void sub_8090540(u16 a)
-{
- LZ77UnCompVram(gUnknown_08E96B58, (void *)(VRAM + a * 0x800));
- DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440);
-}
-
-#ifdef NONMATCHING
-static void sub_8090584(u8 a, u16 b)
-{
- u8 i; //r1
- u8 j; //r3
- u32 r6;
- register u8 r7;
-
- for (i = 0; i < 4; i++)
- {
- r7 = i * 5 + 1;
- r6 = 0x4000;
-
- if (i == a)
- r6 = 0x2000;
-
- for (j = 0; j < 5; j++)
- {
- u32 r0 = b * 0x800 + (r7 + j) * 2;
- u8 *ptr;
-
- ptr = VRAM;
- *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6;
- ptr = VRAM + 0x40;
- *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6;
- }
- }
- r6 = 0x4000;
- for (j = 0; j < 5; j++)
- {
- u32 r0 = b * 0x800 + j * 2;
- u8 *ptr;
-
- ptr = VRAM + 0x32;
- *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6;
- ptr = VRAM + 0x72;
- *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6;
- }
-}
-#else
-__attribute__((naked))
-static void sub_8090584(u8 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, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- mov r9, r1\n\
- movs r1, 0\n\
-_0809059C:\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r7, r0, 24\n\
- movs r6, 0x80\n\
- lsls r6, 7\n\
- cmp r1, r10\n\
- bne _080905B2\n\
- movs r6, 0x80\n\
- lsls r6, 6\n\
-_080905B2:\n\
- movs r3, 0\n\
- mov r0, r9\n\
- lsls r0, 11\n\
- mov r12, r0\n\
- adds r1, 0x1\n\
- mov r8, r1\n\
- mov r5, r12\n\
- ldr r4, _08090634 @ =0x00000fff\n\
-_080905C2:\n\
- adds r0, r7, r3\n\
- lsls r0, 1\n\
- adds r0, r5, r0\n\
- movs r2, 0xC0\n\
- lsls r2, 19\n\
- adds r1, r0, r2\n\
- ldrh r2, [r1]\n\
- ands r2, r4\n\
- orrs r2, r6\n\
- strh r2, [r1]\n\
- ldr r1, _08090638 @ =0x06000040\n\
- adds r0, r1\n\
- ldrh r2, [r0]\n\
- ands r2, r4\n\
- orrs r2, r6\n\
- strh r2, [r0]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x4\n\
- bls _080905C2\n\
- mov r2, r8\n\
- lsls r0, r2, 24\n\
- lsrs r1, r0, 24\n\
- cmp r1, 0x3\n\
- bls _0809059C\n\
- movs r6, 0x80\n\
- lsls r6, 7\n\
- movs r3, 0\n\
- mov r5, r12\n\
- ldr r4, _08090634 @ =0x00000fff\n\
-_08090600:\n\
- lsls r0, r3, 1\n\
- adds r0, r5, r0\n\
- ldr r2, _0809063C @ =0x06000032\n\
- adds r1, r0, r2\n\
- ldrh r2, [r1]\n\
- ands r2, r4\n\
- orrs r2, r6\n\
- strh r2, [r1]\n\
- ldr r1, _08090640 @ =0x06000072\n\
- adds r0, r1\n\
- ldrh r2, [r0]\n\
- ands r2, r4\n\
- orrs r2, r6\n\
- strh r2, [r0]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x4\n\
- bls _08090600\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08090634: .4byte 0x00000fff\n\
-_08090638: .4byte 0x06000040\n\
-_0809063C: .4byte 0x06000032\n\
-_08090640: .4byte 0x06000072\n\
- .syntax divided\n");
-}
-#endif
-
-//Nope, can't get this one to match, either.
-#ifdef NONMATCHING
-static void sub_8090644(u8 a, u16 b)
-{
- u8 i;
- u8 j;
-
- for (i = 0; i < 4; i++)
- {
- u8 r8 = i * 5 + 1;
- u32 r5;
-
- if (i == a || i == 0)
- r5 = 0x2000;
- else if (a != 0)
- r5 = 0x4000;
-
- for (j = 0; j < 5; j++)
- {
- u16 (*vramData)[0x400];
-
- vramData = (u16 (*)[])VRAM;
- vramData[b][r8 + j] = vramData[b][r8 + j] & 0xFFF | r5;
- vramData = (u16 (*)[])(VRAM + 0x40);
- vramData[b][r8 + j] = vramData[b][r8 + j] & 0xFFF | r5;
- }
- }
-
- for (j = 0; j < 5; j++)
- {
- u16 (*vramData)[0x400];
-
- vramData = (u16 (*)[])(VRAM + 0x32);
- vramData[b][j] = vramData[b][j] & 0xFFF | 0x4000;
- vramData = (u16 (*)[])(VRAM + 0x72);
- vramData[b][j] = vramData[b][j] & 0xFFF | 0x4000;
- }
-}
-#else
-__attribute__((naked))
-static void sub_8090644(u8 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, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- mov r9, r1\n\
- movs r1, 0\n\
-_0809065C:\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- cmp r1, r10\n\
- beq _08090670\n\
- cmp r1, 0\n\
- bne _08090676\n\
-_08090670:\n\
- movs r5, 0x80\n\
- lsls r5, 6\n\
- b _0809067A\n\
-_08090676:\n\
- movs r5, 0x80\n\
- lsls r5, 7\n\
-_0809067A:\n\
- movs r3, 0\n\
- mov r0, r9\n\
- lsls r7, r0, 11\n\
- adds r1, 0x1\n\
- mov r12, r1\n\
- adds r6, r7, 0\n\
- ldr r4, _080906FC @ =0x00000fff\n\
-_08090688:\n\
- mov r1, r8\n\
- adds r0, r1, r3\n\
- lsls r0, 1\n\
- adds r0, r6, r0\n\
- movs r2, 0xC0\n\
- lsls r2, 19\n\
- adds r1, r0, r2\n\
- ldrh r2, [r1]\n\
- ands r2, r4\n\
- orrs r2, r5\n\
- strh r2, [r1]\n\
- ldr r1, _08090700 @ =0x06000040\n\
- adds r0, r1\n\
- ldrh r2, [r0]\n\
- ands r2, r4\n\
- orrs r2, r5\n\
- strh r2, [r0]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x4\n\
- bls _08090688\n\
- mov r2, r12\n\
- lsls r0, r2, 24\n\
- lsrs r1, r0, 24\n\
- cmp r1, 0x3\n\
- bls _0809065C\n\
- movs r5, 0x80\n\
- lsls r5, 7\n\
- movs r3, 0\n\
- adds r6, r7, 0\n\
- ldr r4, _080906FC @ =0x00000fff\n\
-_080906C8:\n\
- lsls r0, r3, 1\n\
- adds r0, r6, r0\n\
- ldr r2, _08090704 @ =0x06000032\n\
- adds r1, r0, r2\n\
- ldrh r2, [r1]\n\
- ands r2, r4\n\
- orrs r2, r5\n\
- strh r2, [r1]\n\
- ldr r1, _08090708 @ =0x06000072\n\
- adds r0, r1\n\
- ldrh r2, [r0]\n\
- ands r2, r4\n\
- orrs r2, r5\n\
- strh r2, [r0]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x4\n\
- bls _080906C8\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080906FC: .4byte 0x00000fff\n\
-_08090700: .4byte 0x06000040\n\
-_08090704: .4byte 0x06000032\n\
-_08090708: .4byte 0x06000072\n\
- .syntax divided\n");
-}
-#endif
-
-u8 sub_809070C(u16 dexNum, u32 b, u32 c)
-{
- u8 taskId = CreateTask(sub_8090750, 0);
-
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = dexNum;
- gTasks[taskId].data[12] = b;
- gTasks[taskId].data[13] = b >> 16;
- gTasks[taskId].data[14] = c;
- gTasks[taskId].data[15] = c >> 16;
- return taskId;
-}
-
-static void sub_8090750(u8 taskId)
-{
- u8 spriteId;
- u16 dexNum = gTasks[taskId].data[1];
- u16 i;
-
- switch (gTasks[taskId].data[0])
- {
- case 0:
- default:
- if (!gPaletteFade.active)
- {
- gUnknown_03005CEC = gMain.vblankCallback;
- SetVBlankCallback(NULL);
- sub_8091060(0x100);
- gTasks[taskId].data[0] = 1;
- }
- break;
- case 1:
- LZ77UnCompVram(gPokedexMenu_Gfx, (void *)(VRAM + 0x4000));
- LZ77UnCompVram(gUnknown_08E96BD4, (void *)(VRAM + 0x7800));
- for (i = 0; i < 0x280; i++)
- {
-#ifndef NONMATCHING
- asm("");
-#endif
- *(u16 *)(VRAM + 0x7800 + 2 * i) += 0x2000;
- }
- sub_8091738(gTasks[taskId].data[1], 2, 0x3FC);
- ResetPaletteFade();
- LoadPalette(gPokedexMenu_Pal + 1, 0x21, 0x9E);
- gTasks[taskId].data[0]++;
- break;
- case 2:
- SetUpWindowConfig(&gWindowConfig_81E7064);
- InitMenuWindow(&gWindowConfig_81E7064);
- DmaClear16(3, (void *)(VRAM + 0xC000), 0x200);
- gTasks[taskId].data[0]++;
- break;
- case 3:
- sub_8072BD8(gDexText_RegisterComplete, 2, 0, 0xD0);
- if (!IsNationalPokedexEnabled())
- sub_8091154(NationalToHoennOrder(dexNum), 13, 3);
- else
- sub_8091154(dexNum, 13, 3);
- sub_80911C8(dexNum, 16, 3);
- MenuPrint(gDexText_UnknownPoke, CATEGORY_LEFT, 5);
- MenuPrint(gDexText_UnknownHeight, 16, 7);
- MenuPrint(gDexText_UnknownWeight, 16, 9);
- sub_8091304(gPokedexEntries[dexNum].categoryName, CATEGORY_LEFT, 5);
- sub_8091458(gPokedexEntries[dexNum].height, 16, 7);
- sub_8091564(gPokedexEntries[dexNum].weight, 16, 9);
- MenuPrint(gPokedexEntries[dexNum].descriptionPage1, 2, 13);
- sub_80917CC(14, 0x3FC);
- gTasks[taskId].data[0]++;
- break;
- case 4:
- 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;
- REG_BLDY = 0;
- REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(15) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON;
- gTasks[taskId].data[0]++;
- break;
- case 6:
- if (!gPaletteFade.active)
- {
- PlayCry1(NationalPokedexNumToSpecies(dexNum), 0);
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].data[4] = 0;
- gTasks[taskId].func = sub_8090A3C;
- }
- 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 u8 *lzPaletteData;
-
- 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;
- lzPaletteData = species_and_otid_get_pal(species, otId, personality);
- LoadCompressedPalette(lzPaletteData, 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);
-}
-
-#if ENGLISH
-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);
-}
-#elif GERMAN
-void unref_sub_80913A4(u16 arg0, u8 left, u8 top) {
- u8 buffer[8];
- int offset;
- u8 result;
-
- u8 r6 = 0;
- offset = 0;
-
-
- buffer[r6++] = 0xFC;
- buffer[r6++] = 0x13;
- r6++;
-
- result = (arg0 / 1000);
- if (result == 0)
- {
- offset = 6;
- }
- else
- {
- buffer[r6++] = result + CHAR_0;
- }
-
-
- result = (arg0 % 1000) / 100;
-
- if (result == 0 && offset != 0)
- {
- offset += 6;
- }
- else
- {
- buffer[r6++] = result + CHAR_0;
- }
-
- buffer[r6++] = (((arg0 % 1000) % 100) / 10) + CHAR_0;
- buffer[r6++] = CHAR_COMMA;
- buffer[r6++] = (((arg0 % 1000) % 100) % 10) + CHAR_0;
-
- buffer[r6++] = EOS;
- buffer[2] = offset;
- MenuPrint(buffer, left, top);
-}
-#endif
-
-#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;
-}
-
-#if ENGLISH
-#define SUB_8091E20_WIDTH (208)
-#elif GERMAN
-#define SUB_8091E20_WIDTH (216)
-#endif
-
-void sub_8091E20(const u8 *str)
-{
- sub_8072AB0(str, 9, 120, SUB_8091E20_WIDTH, 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;
-}