summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2021-02-14 11:18:46 -0500
committerGitHub <noreply@github.com>2021-02-14 11:18:46 -0500
commitb422fd4a499e44889243dc5087b34fdd9f85c6aa (patch)
tree665651ae927895004e8cf368734679357a9a6fdd /src
parent43033ec97cfe3ea3128a93c079cf4a525ce3fbbf (diff)
parentccd75ad32e08465fb38773b2961433916c2ae96c (diff)
Merge pull request #389 from Kurausukun/dexmatching
[LEAK-INFORMED] match the rest of pokedex_screen
Diffstat (limited to 'src')
-rw-r--r--src/pokedex_screen.c837
1 files changed, 828 insertions, 9 deletions
diff --git a/src/pokedex_screen.c b/src/pokedex_screen.c
index e44cc6d50..b3f3d18ad 100644
--- a/src/pokedex_screen.c
+++ b/src/pokedex_screen.c
@@ -15,7 +15,10 @@
#include "data.h"
#include "pokedex.h"
#include "trainer_pokemon_sprites.h"
+#include "decompress.h"
#include "constants/songs.h"
+#include "pokedex_area_markers.h"
+#include "field_specials.h"
struct PokedexScreenData
{
@@ -107,14 +110,14 @@ void sub_8105058(u8 a0);
void sub_8105178(u8 a0, u8 a1, u8 a2);
static bool8 sub_81052D0(u8 a0);
void sub_8105594(u8 a0, u8 a1);
-void sub_8105E1C(u8 a0);
-void sub_8106014(void);
-void sub_810603C(void);
+u8 sub_8105E1C(u8 a0);
+u8 sub_8106014(void);
+u8 sub_810603C(void);
bool8 sub_8106838(u8 category, u8 a1);
u8 sub_81068A0(u8 a0);
-void sub_810699C(u8 category);
+u8 sub_810699C(u8 category);
bool8 sub_8106A20(u16 a0);
-void sub_81067C0(void);
+u8 sub_81067C0(void);
void sub_81068DC(u8 category, u8 a1);
u8 sub_8106AF8(u16 a0);
void sub_8106B34(void);
@@ -122,6 +125,8 @@ void sub_8106E78(const u8 *a0, s32 a1);
static void sub_8102EC0(s32 itemIndex, bool8 onInit, struct ListMenu *list);
static void sub_8102F48(u8 windowId, s32 itemId, u8 y);
static void sub_8103A40(u8 windowId, s32 itemId, u8 y);
+static void sub_8106BD8(u8 taskId);
+static void sub_8106BE8(u8 taskId);
#include "data/pokemon_graphics/footprint_table.h"
@@ -2069,10 +2074,10 @@ static bool32 sub_8104664(u8 a0)
}
else
{
- *r12 = 0;
- *r6 = r3;
- }
- return TRUE;
+ *r12 = 0;
+ *r6 = r3;
+ }
+ return TRUE;
}
void sub_81047B0(u8 *windowId_p)
@@ -2541,3 +2546,817 @@ static bool8 sub_81052D0(u8 a0)
}
return FALSE;
}
+
+void sub_8105594(u8 a0, u8 a1)
+{
+ u8 v0, v1, v2, v3;
+ s16 v4, v5, v6;
+
+ if (!gUnknown_203ACF0->field_2C)
+ {
+ v0 = gUnknown_8452334[0][0][2];
+ v1 = gUnknown_8452334[0][0][3];
+ }
+ else
+ {
+ v0 = gUnknown_8452334[gUnknown_203ACF0->field_2C - 1][gUnknown_203ACF0->field_2D][2];
+ v1 = gUnknown_8452334[gUnknown_203ACF0->field_2C - 1][gUnknown_203ACF0->field_2D][3];
+ }
+
+ v2 = 6 + (a1 * 4);
+ v3 = 3 + (a1 * 2);
+ if (v2 >= 28)
+ v2 = 28;
+ if (v3 >= 14)
+ v3 = 14;
+ v4 = v0 - ((a1 * 4) / 2);
+ v5 = v1 - ((a1 * 2) / 2);
+ if ((v4 + v2 + 2) >= 30)
+ v4 -= ((v4 + v2 + 2) - 30);
+ else if (v4 < 0)
+ v4 = 0;
+ if ((v5 + v3 + 2) >= 18)
+ v5 -= ((v5 + v3 + 2) - 18);
+ else if (v5 < 2)
+ v5 = 2;
+ v6 = (v5 + 1) + ((v3 / 2) + 1);
+
+ FillBgTilemapBufferRect_Palette0(a0, 4, v4, v5, 1, 1);
+ FillBgTilemapBufferRect_Palette0(a0, 5, v4 + 1, v5, v2, 1);
+ FillBgTilemapBufferRect_Palette0(a0, 1028, v4 + 1 + v2, v5, 1, 1);
+
+ FillBgTilemapBufferRect_Palette0(a0, 10, v4, v5 + 1 + v3, 1, 1);
+ FillBgTilemapBufferRect_Palette0(a0, 11, v4 + 1, v5 + 1 + v3, v2, 1);
+ FillBgTilemapBufferRect_Palette0(a0, 1034, v4 + 1 + v2, v5 + 1 + v3, 1, 1);
+
+ FillBgTilemapBufferRect_Palette0(a0, 6, v4, v5 + 1, 1, v6 - v5 - 1);
+ FillBgTilemapBufferRect_Palette0(a0, 7, v4, v6, 1, 1);
+ FillBgTilemapBufferRect_Palette0(a0, 9, v4, v6 + 1, 1, v5 + v3 - v6);
+
+ FillBgTilemapBufferRect_Palette0(a0, 1030, v4 + 1 + v2, v5 + 1, 1, v6 - v5 - 1);
+ FillBgTilemapBufferRect_Palette0(a0, 1031, v4 + 1 + v2, v6, 1, 1);
+ FillBgTilemapBufferRect_Palette0(a0, 1033, v4 + 1 + v2, v6 + 1, 1, v5 + v3 - v6);
+
+ FillBgTilemapBufferRect_Palette0(a0, 1, v4 + 1, v5 + 1, v2, v6 - v5 - 1);
+ FillBgTilemapBufferRect_Palette0(a0, 8, v4 + 1, v6, v2, 1);
+ FillBgTilemapBufferRect_Palette0(a0, 2, v4 + 1, v6 + 1, v2, v5 + v3 - v6);
+}
+
+void sub_8105800(u8 a0, u16 species, u8 a2, u8 a3)
+{
+ u8 * categoryName;
+ u8 index, categoryStr[12];
+
+ species = SpeciesToNationalPokedexNum(species);
+
+ categoryName = (u8 *)gPokedexEntries[species].categoryName;
+ index = 0;
+ if (sub_8104AB0(species, 1, 0))
+ {
+#if REVISION == 0
+ while ((categoryName[index] != CHAR_SPACE) && (index < 11))
+#else
+ while ((categoryName[index] != EOS) && (index < 11))
+#endif
+ {
+ categoryStr[index] = categoryName[index];
+ index++;
+ }
+ }
+ else
+ {
+ while (index < 11)
+ {
+ categoryStr[index] = CHAR_QUESTION_MARK;
+ index++;
+ }
+ }
+
+ categoryStr[index] = EOS;
+
+ sub_81047C8(a0, 0, categoryStr, a2, a3, 0);
+ a2 += GetStringWidth(0, categoryStr, 0);
+ sub_81047C8(a0, 0, gText_PokedexPokemon, a2, a3, 0);
+}
+
+void sub_81058C4(u8 windowId, u16 species, u8 x, u8 y)
+{
+ u16 height;
+ u32 inches, feet;
+ const u8 *labelText;
+ u8 buffer[32];
+ u8 i;
+
+ species = SpeciesToNationalPokedexNum(species);
+ height = gPokedexEntries[species].height;
+ labelText = gText_HT;
+
+ i = 0;
+ buffer[i++] = EXT_CTRL_CODE_BEGIN;
+ buffer[i++] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
+ buffer[i++] = 5;
+ buffer[i++] = CHAR_SPACE;
+
+ if (sub_8104AB0(species, FLAG_GET_CAUGHT, 0))
+ {
+ inches = 10000 * height / 254; // actually tenths of inches here
+ if (inches % 10 >= 5)
+ inches += 10;
+ feet = inches / 120;
+ inches = (inches - (feet * 120)) / 10;
+ if (feet / 10 == 0)
+ {
+ buffer[i++] = 0;
+ buffer[i++] = feet + CHAR_0;
+ }
+ else
+ {
+ buffer[i++] = feet / 10 + CHAR_0;
+ buffer[i++] = feet % 10 + CHAR_0;
+ }
+ buffer[i++] = CHAR_SGL_QUOT_RIGHT;
+ buffer[i++] = inches / 10 + CHAR_0;
+ buffer[i++] = inches % 10 + CHAR_0;
+ buffer[i++] = CHAR_DBL_QUOT_RIGHT;
+ buffer[i++] = EOS;
+ }
+ else
+ {
+ buffer[i++] = CHAR_QUESTION_MARK;
+ buffer[i++] = CHAR_QUESTION_MARK;
+ buffer[i++] = CHAR_SGL_QUOT_RIGHT;
+ buffer[i++] = CHAR_QUESTION_MARK;
+ buffer[i++] = CHAR_QUESTION_MARK;
+ buffer[i++] = CHAR_DBL_QUOT_RIGHT;
+ }
+
+ buffer[i++] = EOS;
+ sub_81047C8(windowId, 0, labelText, x, y, 0);
+ x += 30;
+ sub_81047C8(windowId, 0, buffer, x, y, 0);
+}
+
+void sub_8105A3C(u8 windowId, u16 species, u8 x, u8 y)
+{
+ u16 weight;
+ u32 lbs;
+ bool8 output;
+ const u8 * labelText;
+ const u8 * lbsText;
+ u8 buffer[32];
+ u8 i;
+ u32 j;
+
+ species = SpeciesToNationalPokedexNum(species);
+ weight = gPokedexEntries[species].weight;
+ labelText = gText_WT;
+ lbsText = gText_Lbs;
+
+ i = 0;
+ buffer[i++] = EXT_CTRL_CODE_BEGIN;
+ buffer[i++] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
+ buffer[i++] = 5;
+
+ if (sub_8104AB0(species, FLAG_GET_CAUGHT, 0))
+ {
+ lbs = (weight * 100000) / 4536;
+
+ if (lbs % 10 >= 5)
+ lbs += 10;
+
+ output = FALSE;
+
+ if ((buffer[i] = (lbs / 100000) + CHAR_0) == CHAR_0 && !output)
+ {
+ buffer[i++] = CHAR_SPACE;
+ }
+ else
+ {
+ output = TRUE;
+ i++;
+ }
+
+ lbs %= 100000;
+ if ((buffer[i] = (lbs / 10000) + CHAR_0) == CHAR_0 && !output)
+ {
+ buffer[i++] = CHAR_SPACE;
+ }
+ else
+ {
+ output = TRUE;
+ i++;
+ }
+
+ lbs %= 10000;
+ if ((buffer[i] = (lbs / 1000) + CHAR_0) == CHAR_0 && !output)
+ {
+ buffer[i++] = CHAR_SPACE;
+ }
+ else
+ {
+ output = TRUE;
+ i++;
+ }
+
+ lbs %= 1000;
+ buffer[i++] = (lbs / 100) + CHAR_0;
+ lbs %= 100;
+ buffer[i++] = CHAR_PERIOD;
+ buffer[i++] = (lbs / 10) + CHAR_0;
+ }
+ else
+ {
+ buffer[i++] = CHAR_QUESTION_MARK;
+ buffer[i++] = CHAR_QUESTION_MARK;
+ buffer[i++] = CHAR_QUESTION_MARK;
+ buffer[i++] = CHAR_QUESTION_MARK;
+ buffer[i++] = CHAR_PERIOD;
+ buffer[i++] = CHAR_QUESTION_MARK;
+ }
+ buffer[i++] = CHAR_SPACE;
+ buffer[i++] = EXT_CTRL_CODE_BEGIN;
+ buffer[i++] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
+ buffer[i++] = 0;
+
+ for (j = 0; j < 33 - i && lbsText[j] != EOS; j++)
+ buffer[i + j] = lbsText[j];
+
+ buffer[i + j] = EOS;
+ sub_81047C8(windowId, 0, labelText, x, y, 0);
+ x += 30;
+ sub_81047C8(windowId, 0, buffer, x, y, 0);
+}
+
+void sub_8105CB0(u8 a0, u16 species, u8 x, u8 y)
+{
+ struct TextPrinterTemplate printerTemplate;
+ u16 length;
+ s32 v1;
+
+ species = SpeciesToNationalPokedexNum(species);
+
+ if (sub_8104AB0(species, 1, 0))
+ {
+ printerTemplate.currentChar = gPokedexEntries[species].description;
+ printerTemplate.windowId = a0;
+ printerTemplate.fontId = 2;
+ printerTemplate.letterSpacing = 1;
+ printerTemplate.lineSpacing = 0;
+ printerTemplate.unk = 0;
+ printerTemplate.fgColor = 1;
+ printerTemplate.bgColor = 0;
+ printerTemplate.shadowColor = 2;
+
+ length = GetStringWidth(2, gPokedexEntries[species].description, 0);
+ v1 = x + (240 - length) / 2;
+
+ if (v1 > 0)
+ x = v1;
+ else
+ x = 0;
+
+ printerTemplate.x = x;
+ printerTemplate.y = y;
+ printerTemplate.currentX = x;
+ printerTemplate.currentY = y;
+
+ AddTextPrinter(&printerTemplate, TEXT_SPEED_FF, NULL);
+ }
+}
+
+void sub_8105D64(u8 a0, u16 species, u8 a2, u8 a3)
+{
+ u16 i, j, unused, v3;
+ u8 v4, v5;
+ u8 * buffer;
+ u8 * footprint;
+
+ if (!(sub_8104AB0(species, 1, 1)))
+ return;
+ footprint = (u8 *)(gMonFootprintTable[species]);
+ buffer = gDecompressionBuffer;
+ unused = 0;
+ v3 = 0;
+
+ for (i = 0; i < 32; i++)
+ {
+ v4 = footprint[i];
+ for (j = 0; j < 4; j++)
+ {
+ v5 = 0;
+ if (v4 & (1 << (j * 2)))
+ v5 |= 1;
+ if (v4 & (2 << (j * 2)))
+ v5 |= 16;
+ buffer[v3] = v5;
+ v3++;
+ }
+ }
+ BlitBitmapRectToWindow(a0, buffer, 0, 0, 16, 16, a2, a3, 16, 16);
+}
+
+u8 sub_8105E1C(bool8 a0)
+{
+ sub_8105594(3, 6);
+ FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 30, 20);
+ FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 30, 20);
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 2, 30, 16);
+
+ gUnknown_203ACF0->field_4A[0] = AddWindow(&gUnknown_84521D4);
+ gUnknown_203ACF0->field_4A[1] = AddWindow(&gUnknown_84521DC);
+ gUnknown_203ACF0->field_4A[2] = AddWindow(&gUnknown_84521E4);
+
+ FillWindowPixelBuffer(gUnknown_203ACF0->field_4A[0], 0);
+ sub_81049FC(gUnknown_203ACF0->field_4A[0], gUnknown_203ACF0->field_5A, 144);
+ PutWindowTilemap(gUnknown_203ACF0->field_4A[0]);
+ CopyWindowToVram(gUnknown_203ACF0->field_4A[0], 2);
+ FillWindowPixelBuffer(gUnknown_203ACF0->field_4A[1], 0);
+ sub_8104A34(gUnknown_203ACF0->field_4A[1], 0, gUnknown_203ACF0->field_5A, 0, 8);
+ sub_81047C8(gUnknown_203ACF0->field_4A[1], 2, gSpeciesNames[gUnknown_203ACF0->field_5A], 28, 8, 0);
+ sub_8105800(gUnknown_203ACF0->field_4A[1], gUnknown_203ACF0->field_5A, 0, 24);
+ sub_81058C4(gUnknown_203ACF0->field_4A[1], gUnknown_203ACF0->field_5A, 0, 36);
+ sub_8105A3C(gUnknown_203ACF0->field_4A[1], gUnknown_203ACF0->field_5A, 0, 48);
+ sub_8105D64(gUnknown_203ACF0->field_4A[1], gUnknown_203ACF0->field_5A, 88, 40);
+
+ PutWindowTilemap(gUnknown_203ACF0->field_4A[1]);
+ CopyWindowToVram(gUnknown_203ACF0->field_4A[1], 2);
+ FillWindowPixelBuffer(gUnknown_203ACF0->field_4A[2], 0);
+ sub_8105CB0(gUnknown_203ACF0->field_4A[2], gUnknown_203ACF0->field_5A, 0, 8);
+ PutWindowTilemap(gUnknown_203ACF0->field_4A[2]);
+ CopyWindowToVram(gUnknown_203ACF0->field_4A[2], 2);
+ FillWindowPixelBuffer(1, 255);
+ if (a0 == FALSE)
+ {
+ sub_81047C8(1, 0, gText_Cry, 8, 2, 4);
+ sub_8104C2C(gText_NextDataCancel);
+ }
+ else
+ sub_8104C2C(gText_Next);
+ PutWindowTilemap(1);
+ CopyWindowToVram(1, 2);
+
+ return 1;
+}
+
+u8 sub_8106014(void)
+{
+ sub_81047B0(&gUnknown_203ACF0->field_4A[0]);
+ sub_81047B0(&gUnknown_203ACF0->field_4A[1]);
+ sub_81047B0(&gUnknown_203ACF0->field_4A[2]);
+
+ return 0;
+}
+
+u8 sub_810603C(void)
+{
+ int i;
+ u8 v1, v2;
+ bool8 v3;
+ s16 v4, v5;
+ u16 speciesId, species;
+ u16 v8;
+
+ species = gUnknown_203ACF0->field_5A;
+ speciesId = SpeciesToNationalPokedexNum(species);
+ v3 = sub_8104AB0(species, 1, 1);
+ v1 = 28;
+ v2 = 14;
+ v4 = 0;
+ v5 = 2;
+
+ FillBgTilemapBufferRect_Palette0(3, 4, v4, v5, 1, 1);
+ FillBgTilemapBufferRect_Palette0(3, 1028, v4 + 1 + v1, v5, 1, 1);
+ FillBgTilemapBufferRect_Palette0(3, 2052, v4, v5 + 1 + v2, 1, 1);
+ FillBgTilemapBufferRect_Palette0(3, 3076, v4 + 1 + v1, v5 + 1 + v2, 1, 1);
+ FillBgTilemapBufferRect_Palette0(3, 5, v4 + 1, v5, v1, 1);
+ FillBgTilemapBufferRect_Palette0(3, 2053, v4 + 1, v5 + 1 + v2, v1, 1);
+ FillBgTilemapBufferRect_Palette0(3, 6, v4, v5 + 1, 1, v2);
+ FillBgTilemapBufferRect_Palette0(3, 1030, v4 + 1 + v1, v5 + 1, 1, v2);
+ FillBgTilemapBufferRect_Palette0(3, 1, v4 + 1, v5 + 1, v1, v2);
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 2, 30, 16);
+
+ v1 = 10;
+ v2 = 6;
+ v4 = 1;
+ v5 = 9;
+
+ FillBgTilemapBufferRect_Palette0(0, 29, v4, v5, 1, 1);
+ FillBgTilemapBufferRect_Palette0(0, 1053, v4 + 1 + v1, v5, 1, 1);
+ FillBgTilemapBufferRect_Palette0(0, 2077, v4, v5 + 1 + v2, 1, 1);
+ FillBgTilemapBufferRect_Palette0(0, 3101, v4 + 1 + v1, v5 + 1 + v2, 1, 1);
+ FillBgTilemapBufferRect_Palette0(0, 30, v4 + 1, v5, v1, 1);
+ FillBgTilemapBufferRect_Palette0(0, 2078, v4 + 1, v5 + 1 + v2, v1, 1);
+ FillBgTilemapBufferRect_Palette0(0, 31, v4, v5 + 1, 1, v2);
+ FillBgTilemapBufferRect_Palette0(0, 1055, v4 + 1 + v1, v5 + 1, 1, v2);
+ FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 30, 20);
+ FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 30, 20);
+
+ gUnknown_203ACF0->field_64 = GetUnlockedSeviiAreas();
+ v8 = 4;
+ for (i = 3; i < 7; i++)
+ if ((gUnknown_203ACF0->field_64 >> i) & 1)
+ v8 = 0;
+
+ gUnknown_203ACF0->field_4A[0] = AddWindow(&gUnknown_8452214);
+ CopyToWindowPixelBuffer(gUnknown_203ACF0->field_4A[0], (void *)gUnknown_8443620, 0, 0);
+ SetWindowAttribute(gUnknown_203ACF0->field_4A[0], 2,
+ GetWindowAttribute(gUnknown_203ACF0->field_4A[0], 2) + v8);
+ PutWindowTilemap(gUnknown_203ACF0->field_4A[0]);
+ for (i = 0; i < 7; i++)
+ if ((gUnknown_203ACF0->field_64 >> i) & 1)
+ {
+ gUnknown_203ACF0->field_4A[i + 1] = AddWindow(gUnknown_8452254[i].window);
+ CopyToWindowPixelBuffer(gUnknown_203ACF0->field_4A[i + 1], gUnknown_8452254[i].tilemap, 0, 0);
+ SetWindowAttribute(gUnknown_203ACF0->field_4A[i + 1], 2, GetWindowAttribute(gUnknown_203ACF0->field_4A[i + 1], 2) + v8);
+ PutWindowTilemap(gUnknown_203ACF0->field_4A[i + 1]);
+ CopyWindowToVram(gUnknown_203ACF0->field_4A[i + 1], 2);
+ }
+ gUnknown_203ACF0->field_4A[8] = AddWindow(&gUnknown_84521F4);
+ gUnknown_203ACF0->field_4A[9] = AddWindow(&gUnknown_84521FC);
+ gUnknown_203ACF0->field_4A[10] = AddWindow(&gUnknown_8452204);
+ gUnknown_203ACF0->field_4A[11] = AddWindow(&gUnknown_84521EC);
+ gUnknown_203ACF0->field_4A[12] = AddWindow(&gUnknown_845220C);
+ FillWindowPixelBuffer(gUnknown_203ACF0->field_4A[11], 0);
+ sub_8107CD8(160, species);
+ sub_8107CF8(gUnknown_203ACF0->field_4A[11], species, sub_81049CC(species), 0, 0);
+ PutWindowTilemap(gUnknown_203ACF0->field_4A[11]);
+ CopyWindowToVram(gUnknown_203ACF0->field_4A[11], 2);
+ FillWindowPixelBuffer(gUnknown_203ACF0->field_4A[9], 0);
+ {
+ s32 width = GetStringWidth(0, gText_Size, 0);
+ sub_81047C8(gUnknown_203ACF0->field_4A[9], 0, gText_Size, (gUnknown_84521FC.width * 8 - width) / 2, 4, 0);
+ }
+ PutWindowTilemap(gUnknown_203ACF0->field_4A[9]);
+ CopyWindowToVram(gUnknown_203ACF0->field_4A[9], 2);
+
+ FillWindowPixelBuffer(gUnknown_203ACF0->field_4A[10], 0);
+ {
+ s32 width = GetStringWidth(0, gText_Area, 0);
+ sub_81047C8(gUnknown_203ACF0->field_4A[10], 0, gText_Area, (gUnknown_8452204.width * 8 - width) / 2, 4, 0);
+ }
+ SetWindowAttribute(gUnknown_203ACF0->field_4A[10], 2, GetWindowAttribute(gUnknown_203ACF0->field_4A[10], 2) + v8);
+ PutWindowTilemap(gUnknown_203ACF0->field_4A[10]);
+ CopyWindowToVram(gUnknown_203ACF0->field_4A[10], 2);
+ FillWindowPixelBuffer(gUnknown_203ACF0->field_4A[8], 0);
+ sub_8104A34(gUnknown_203ACF0->field_4A[8], 0, species, 0, 0);
+ sub_81047C8(gUnknown_203ACF0->field_4A[8], 2, gSpeciesNames[species], 3, 12, 0);
+ PutWindowTilemap(gUnknown_203ACF0->field_4A[8]);
+ CopyWindowToVram(gUnknown_203ACF0->field_4A[8], 2);
+ FillWindowPixelBuffer(gUnknown_203ACF0->field_4A[12], 0);
+ ListMenuLoadStdPalAt(176, 1);
+
+ if (v3)
+ {
+ BlitMoveInfoIcon(gUnknown_203ACF0->field_4A[12], 1 + gBaseStats[species].type1, 0, 1);
+ if (gBaseStats[species].type1 != gBaseStats[species].type2)
+ BlitMoveInfoIcon(gUnknown_203ACF0->field_4A[12], 1 + gBaseStats[species].type2, 32, 1);
+ }
+ PutWindowTilemap(gUnknown_203ACF0->field_4A[12]);
+ CopyWindowToVram(gUnknown_203ACF0->field_4A[12], 2);
+ ResetAllPicSprites();
+ LoadPalette(gUnknown_8452368, 288, 32);
+
+ if (v3)
+ {
+ gUnknown_203ACF0->field_4A[14] = CreateMonPicSprite_HandleDeoxys(species, 8, sub_81049CC(species), 1, 40, 104, 0, 65535);
+ gSprites[gUnknown_203ACF0->field_4A[14]].oam.paletteNum = 2;
+ gSprites[gUnknown_203ACF0->field_4A[14]].oam.affineMode = 1;
+ gSprites[gUnknown_203ACF0->field_4A[14]].oam.matrixNum = 2;
+ gSprites[gUnknown_203ACF0->field_4A[14]].oam.priority = 1;
+ gSprites[gUnknown_203ACF0->field_4A[14]].pos2.y = gPokedexEntries[speciesId].pokemonOffset;
+ SetOamMatrix(2, gPokedexEntries[speciesId].pokemonScale, 0, 0, gPokedexEntries[speciesId].pokemonScale);
+ gUnknown_203ACF0->field_4A[15] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, 1), 1, 80, 104, 0, 65535);
+ gSprites[gUnknown_203ACF0->field_4A[15]].oam.paletteNum = 2;
+ gSprites[gUnknown_203ACF0->field_4A[15]].oam.affineMode = 1;
+ gSprites[gUnknown_203ACF0->field_4A[15]].oam.matrixNum = 1;
+ gSprites[gUnknown_203ACF0->field_4A[15]].oam.priority = 1;
+ gSprites[gUnknown_203ACF0->field_4A[15]].pos2.y = gPokedexEntries[speciesId].trainerOffset;
+ SetOamMatrix(1, gPokedexEntries[speciesId].trainerScale, 0, 0, gPokedexEntries[speciesId].trainerScale);
+ }
+ else
+ {
+ gUnknown_203ACF0->field_4A[14] = 0xff;
+ gUnknown_203ACF0->field_4A[15] = 0xff;
+ }
+
+ gUnknown_203ACF0->field_02[2] = sub_8134230(species, 2001, 3, v8 * 8);
+ if (!(sub_81344E0(gUnknown_203ACF0->field_02[2])))
+ {
+ BlitBitmapRectToWindow(gUnknown_203ACF0->field_4A[0], (void *)gUnknown_8443D00, 0, 0, 88, 16, 4, 28, 88, 16);
+ {
+ s32 width = GetStringWidth(0, gText_AreaUnknown, 0);
+ sub_81047C8(gUnknown_203ACF0->field_4A[0], 0, gText_AreaUnknown, (96 - width) / 2, 29, 0);
+ }
+ }
+ CopyWindowToVram(gUnknown_203ACF0->field_4A[0], 2);
+ FillWindowPixelBuffer(1, 255);
+ sub_81047C8(1, 0, gText_Cry, 8, 2, 4);
+ sub_8104C2C(gText_CancelPreviousData);
+ PutWindowTilemap(1);
+ CopyWindowToVram(1, 2);
+
+ return 1;
+}
+
+
+u8 sub_81067C0(void)
+{
+ int i;
+
+ sub_81343F4(gUnknown_203ACF0->field_02[2]);
+
+ for (i = 0; i < 13; i++)
+ sub_81047B0(&gUnknown_203ACF0->field_4A[i]);
+ if (gUnknown_203ACF0->field_4A[15] != 0xff)
+ FreeAndDestroyTrainerPicSprite(gUnknown_203ACF0->field_4A[15]);
+ if (gUnknown_203ACF0->field_4A[14] != 0xff)
+ FreeAndDestroyMonPicSprite(gUnknown_203ACF0->field_4A[14]);
+ return 0;
+}
+
+int sub_8106810(u16 species)
+{
+ if (IsNationalPokedexEnabled() == TRUE)
+ return TRUE;
+ if (SpeciesToNationalPokedexNum(species) <= KANTO_DEX_COUNT)
+ return TRUE;
+ return FALSE;
+}
+
+u8 sub_8106838(u8 categoryNum, u8 pageNum)
+{
+ int i, count;
+ u16 species;
+
+ count = gDexCategories[categoryNum].page[pageNum].count;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (i < count)
+ {
+ species = gDexCategories[categoryNum].page[pageNum].species[i];
+ if (sub_8106810(species) == TRUE && sub_8104AB0(species, 0, 1))
+ return 1;
+ }
+ }
+ return 0;
+}
+
+u8 sub_81068A0(u8 categoryNum)
+{
+ int i;
+ u8 count;
+
+ count = gDexCategories[categoryNum].count;
+
+ for (i = 0; i < count; i++)
+ if (sub_8106838(categoryNum, i))
+ return 1;
+
+ return 0;
+}
+
+void sub_81068DC(u8 categoryNum, u8 pageNum)
+{
+ int i, count;
+ u16 species;
+
+ count = gDexCategories[categoryNum].page[pageNum].count;
+ gUnknown_203ACF0->field_2C = 0;
+
+ for (i = 0; i < 4; i++)
+ gUnknown_203ACF0->field_18[i] = 0xffff;
+ for (i = 0; i < count; i++)
+ {
+ species = gDexCategories[categoryNum].page[pageNum].species[i];
+ if (sub_8106810(species) == TRUE && sub_8104AB0(species, 0, 1))
+ {
+ gUnknown_203ACF0->field_18[gUnknown_203ACF0->field_2C] = gDexCategories[categoryNum].page[pageNum].species[i];
+ gUnknown_203ACF0->field_2C++;
+ }
+ }
+}
+
+u8 sub_810699C(u8 category)
+{
+ int i;
+ u8 count, v2, v3;
+
+ count = gDexCategories[category].count;
+ v2 = 0xff;
+ v3 = 0xff;
+
+ for (i = 0; i < count; i++)
+ if (sub_8106838(category, i))
+ {
+ if (v2 == 0xff)
+ v2 = i;
+ v3 = i;
+ }
+ if (v3 != 0xff)
+ {
+ gUnknown_203ACF0->field_29 = v2;
+ gUnknown_203ACF0->field_2A = v3 + 1;
+ return 0;
+ }
+ else
+ {
+ gUnknown_203ACF0->field_29 = 0;
+ gUnknown_203ACF0->field_2A = 0;
+ return 1;
+ }
+}
+
+u8 sub_8106A20(u16 a0)
+{
+ int i, j, k, categoryCount, categoryPageCount, v5;
+ u16 species;
+
+ for (i = 0; i < NELEMS(gDexCategories); i++)
+ {
+ categoryCount = gDexCategories[i].count;
+ for (j = 0; j < categoryCount; j++)
+ {
+ categoryPageCount = gDexCategories[i].page[j].count;
+ for (k = 0, v5 = 0; k < categoryPageCount; k++)
+ {
+ species = gDexCategories[i].page[j].species[k];
+ if (a0 == species)
+ {
+ gUnknown_203ACF0->field_28 = i;
+ gUnknown_203ACF0->field_2B = j;
+ gUnknown_203ACF0->field_2D = v5;
+ return 0;
+ }
+ if (sub_8106810(species) == TRUE && sub_8104AB0(species, 0, 1))
+ v5++;
+ }
+ }
+ }
+ return 1;
+}
+
+u8 sub_8106AF8(u16 a0)
+{
+ int i, v1;
+
+ for (i = 0, v1 = 0; i < a0; i++)
+ if (sub_8106838(gUnknown_203ACF0->field_28, i))
+ v1++;
+
+ return v1 + 1;
+}
+
+void sub_8106B34(void)
+{
+ if (JOY_NEW(START_BUTTON))
+ PlayCry2(gUnknown_203ACF0->field_5A, 0, 125, 10);
+}
+
+u8 sub_8106B60(u16 species)
+{
+ sub_8104AB0(species, 2, 1);
+ sub_8104AB0(species, 3, 1);
+
+ if (!IsNationalPokedexEnabled() && SpeciesToNationalPokedexNum(species) > KANTO_DEX_COUNT)
+ return CreateTask(sub_8106BD8, 0);
+
+ sub_810250C();
+ gTasks[gUnknown_203ACF0->field_00].func = sub_8106BE8;
+ sub_8106A20(species);
+
+ return gUnknown_203ACF0->field_00;
+}
+
+static void sub_8106BD8(u8 taskId)
+{
+ DestroyTask(taskId);
+}
+
+static void sub_8106BE8(u8 taskId)
+{
+ switch (gUnknown_203ACF0->field_01)
+ {
+ case 0:
+ sub_810699C(gUnknown_203ACF0->field_28);
+ if (gUnknown_203ACF0->field_2B < gUnknown_203ACF0->field_29)
+ gUnknown_203ACF0->field_2B = gUnknown_203ACF0->field_29;
+ gUnknown_203ACF0->field_01 = 3;
+ break;
+ case 1:
+ sub_8106014();
+ sub_8104E90();
+
+ gMain.state = 0;
+ gUnknown_203ACF0->field_01 = 2;
+ break;
+ case 2:
+ if (sub_8102798())
+ DestroyTask(taskId);
+ break;
+ case 3:
+ sub_8104F0C(1);
+ PutWindowTilemap(0);
+ PutWindowTilemap(1);
+
+ CopyBgTilemapBufferToVram(3);
+ CopyBgTilemapBufferToVram(2);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(0);
+
+ sub_8105058(0xff);
+
+ gUnknown_203ACF0->field_01 = 4;
+ break;
+ case 4:
+ gPaletteFade.bufferTransferDisabled = 0;
+ BeginNormalPaletteFade(0xffffffff, 0, 16, 0, 0xffff);
+ ShowBg(3);
+ ShowBg(2);
+ ShowBg(1);
+ ShowBg(0);
+
+ gUnknown_203ACF0->field_01 = 5;
+ break;
+ case 5:
+ gTasks[taskId].data[0] = 30;
+ gUnknown_203ACF0->field_61 = ListMenuAddCursorObjectInternal(&gUnknown_84524C4, 0);
+ gUnknown_203ACF0->field_01 = 6;
+ break;
+ case 6:
+ sub_8105058(gUnknown_203ACF0->field_2D);
+ sub_8105178(gUnknown_203ACF0->field_61, gUnknown_203ACF0->field_2D, gUnknown_203ACF0->field_2C);
+
+ if (gTasks[taskId].data[0])
+ gTasks[taskId].data[0]--;
+ else
+ {
+ ListMenuRemoveCursorObject(gUnknown_203ACF0->field_61, 0);
+ gUnknown_203ACF0->field_01 = 7;
+ }
+ break;
+ case 7:
+ gUnknown_203ACF0->field_5A = gUnknown_203ACF0->field_18[gUnknown_203ACF0->field_2D];
+ gUnknown_203ACF0->field_01 = 8;
+ break;
+ case 8:
+ sub_8105E1C(1);
+ gUnknown_203ACF0->field_01 = 9;
+ break;
+ case 9:
+ gUnknown_203ACF0->field_02[0] = 0;
+ gUnknown_203ACF0->field_02[1] = 0;
+ gUnknown_203ACF0->field_01++;
+ case 10:
+ if (gUnknown_203ACF0->field_02[1] < 6)
+ {
+ if (gUnknown_203ACF0->field_02[0])
+ {
+ sub_8105594(0, gUnknown_203ACF0->field_02[1]);
+ CopyBgTilemapBufferToVram(0);
+ gUnknown_203ACF0->field_02[0] = 4;
+ gUnknown_203ACF0->field_02[1]++;
+ }
+ else
+ gUnknown_203ACF0->field_02[0]--;
+ }
+ else
+ {
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 2, 30, 16);
+ CopyBgTilemapBufferToVram(3);
+ CopyBgTilemapBufferToVram(2);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(0);
+
+ PlayCry2(gUnknown_203ACF0->field_5A, 0, 125, 10);
+ gUnknown_203ACF0->field_02[0] = 0;
+ gUnknown_203ACF0->field_01 = 11;
+ }
+ break;
+ case 11:
+ if (JOY_NEW(A_BUTTON | B_BUTTON))
+ gUnknown_203ACF0->field_01 = 2;
+ break;
+ }
+}
+
+void sub_8106E78(const u8 * str, s32 mode)
+{
+ u32 x;
+
+ switch (mode)
+ {
+ case 0:
+ x = 8;
+ break;
+ case 1:
+ x = (u32)(240 - GetStringWidth(2, str, 0)) / 2;
+ break;
+ case 2:
+ default:
+ x = 232 - GetStringWidth(2, str, 0);
+ break;
+ }
+
+ sub_81047C8(0, 2, str, x, 2, 4);
+}