summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCameron Hall <camthesaxman@users.noreply.github.com>2016-10-31 02:24:20 -0500
committerYamaArashi <YamaArashi@users.noreply.github.com>2016-10-31 00:24:20 -0700
commit447b23ff24a4011001a620199fb9ac790052681c (patch)
tree05c23cfce9797d030fb417f2a771d619b9a72137 /src
parent506cb08c794af5511026281a2b806ac351a59997 (diff)
decompile more pokedex functions (#80)
* decompile more pokedex functions * use spaces instead of tabs * mostly fix up sub_808D690 * fix sub_808DBE8 * decompile sub_808E398 * decompile more pokedex functions * decompile sub_808E978 * decompile more functions * decompile sub_808F2B0 * decompile sub_808F8B8
Diffstat (limited to 'src')
-rw-r--r--src/pokedex.c867
1 files changed, 624 insertions, 243 deletions
diff --git a/src/pokedex.c b/src/pokedex.c
index 2d7059395..bea845d91 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -87,6 +87,29 @@ extern struct SpriteTemplate gSpriteTemplate_83A0584;
extern struct SpriteTemplate gSpriteTemplate_83A059C;
extern struct SpriteTemplate gSpriteTemplate_83A05B4;
extern s16 gSineTable[];
+extern struct PokedexListItem *gUnknown_0202FFBC;
+extern IntrCallback gUnknown_03005CEC;
+extern u8 gUnknown_08E96BD4[];
+extern u8 gUnknown_083A05F8[];
+
+struct PokedexEntry
+{
+ /*0x00*/ u8 categoryName[12];
+ /*0x0C*/ u16 height; //in decimeters
+ /*0x0E*/ u16 weight; //int hectograms
+ /*0x10*/ u8 *descriptionPage1;
+ /*0x14*/ u8 *descriptionPage2;
+ /*0x18*/ u16 unused;
+ /*0x1A*/ u16 pokemonScale;
+ /*0x1C*/ u16 pokemonOffset;
+ /*0x1E*/ u16 trainerScale;
+ /*0x20*/ u16 trainerOffset;
+}; /*size = 0x24*/
+
+extern struct PokedexEntry gPokedexEntries[];
+extern u8 gDexText_UnknownPoke[];
+extern u8 gDexText_UnknownHeight[];
+extern u8 gDexText_UnknownWeight[];
extern void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume);
extern bool8 BeginNormalPaletteFade(u32, s8, u8, u8, u16);
@@ -126,7 +149,7 @@ bool8 sub_808E208(u8, u8, u8);
u8 sub_808E82C(void);
void sub_808E0CC(u16, u16);
u8 sub_808F210(struct PokedexListItem *, u8);
-void sub_808F284(struct PokedexListItem *, u8);
+u8 sub_808F284(struct PokedexListItem *, u8);
bool8 sub_808F250(u8);
bool8 sub_808E71C(void);
void sub_808CCC4(u8 taskId);
@@ -149,7 +172,14 @@ u16 sub_808E888(u16);
u32 sub_808E8C8(u16, u16, u16);
void sub_808EE28(struct Sprite *sprite);
u16 sub_8091818(u8, u16, u16, u16);
-u8 sub_80918EC(u16 a, s16 b, s16 c, u16 d);
+u16 sub_80918EC(u16 a, s16 b, s16 c, u16 d); //Not sure of return type
+void sub_808F2B0(u8 taskId);
+void sub_808F6CC(u8 taskId);
+void sub_808FA64(u8 taskId);
+void sub_808F8D8(u8 taskId);
+void sub_808F8B8(u8 taskId);
+void sub_808F888(u8 taskId);
+void sub_8090070(u8 taskId);
void sub_808C02C(void)
{
@@ -1473,260 +1503,260 @@ __attribute__((naked))
u16 sub_808E48C(u16 a, u16 b)
{
asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- lsls r0, 16\n\
- lsrs r7, r0, 16\n\
- lsls r1, 16\n\
- lsrs r4, r1, 16\n\
- movs r0, 0\n\
- mov r10, r0\n\
- ldr r1, _0808E52C\n\
- ldrh r2, [r1, 0x2C]\n\
- movs r0, 0x40\n\
- ands r0, r2\n\
- adds r3, r1, 0\n\
- cmp r0, 0\n\
- beq _0808E4B6\n\
- cmp r7, 0\n\
- beq _0808E4B6\n\
- b _0808E5E4\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ lsls r1, 16\n\
+ lsrs r4, r1, 16\n\
+ movs r0, 0\n\
+ mov r10, r0\n\
+ ldr r1, _0808E52C\n\
+ ldrh r2, [r1, 0x2C]\n\
+ movs r0, 0x40\n\
+ ands r0, r2\n\
+ adds r3, r1, 0\n\
+ cmp r0, 0\n\
+ beq _0808E4B6\n\
+ cmp r7, 0\n\
+ beq _0808E4B6\n\
+ b _0808E5E4\n\
_0808E4B6:\n\
- movs r0, 0x80\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0808E4CE\n\
- ldr r0, _0808E530\n\
- ldr r0, [r0]\n\
- ldr r1, _0808E534\n\
- adds r0, r1\n\
- ldrh r0, [r0]\n\
- subs r0, 0x1\n\
- cmp r7, r0\n\
- blt _0808E5C4\n\
+ movs r0, 0x80\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _0808E4CE\n\
+ ldr r0, _0808E530\n\
+ ldr r0, [r0]\n\
+ ldr r1, _0808E534\n\
+ adds r0, r1\n\
+ ldrh r0, [r0]\n\
+ subs r0, 0x1\n\
+ cmp r7, r0\n\
+ blt _0808E5C4\n\
_0808E4CE:\n\
- ldrh r1, [r3, 0x2E]\n\
- movs r0, 0x20\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0808E53C\n\
- cmp r7, 0\n\
- beq _0808E53C\n\
- adds r6, r7, 0\n\
- movs r4, 0\n\
+ ldrh r1, [r3, 0x2E]\n\
+ movs r0, 0x20\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0808E53C\n\
+ cmp r7, 0\n\
+ beq _0808E53C\n\
+ adds r6, r7, 0\n\
+ movs r4, 0\n\
_0808E4E0:\n\
- ldr r5, _0808E530\n\
- ldr r0, [r5]\n\
- ldr r2, _0808E534\n\
- adds r0, r2\n\
- ldrh r3, [r0]\n\
- subs r3, 0x1\n\
- lsls r3, 16\n\
- lsrs r3, 16\n\
- movs r0, 0x1\n\
- adds r1, r7, 0\n\
- movs r2, 0\n\
- bl sub_8091818\n\
- adds r7, r0, 0\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0x6\n\
- bls _0808E4E0\n\
- ldr r1, [r5]\n\
- ldr r3, _0808E538\n\
- adds r1, r3\n\
- subs r0, r7, r6\n\
- lsls r0, 4\n\
- ldrb r2, [r1]\n\
- adds r0, r2\n\
- strb r0, [r1]\n\
- bl sub_808E82C\n\
- adds r0, r7, 0\n\
- movs r1, 0xE\n\
- bl sub_808E0CC\n\
- movs r0, 0x6D\n\
- bl PlaySE\n\
- b _0808E5A2\n\
- .align 2, 0\n\
+ ldr r5, _0808E530\n\
+ ldr r0, [r5]\n\
+ ldr r2, _0808E534\n\
+ adds r0, r2\n\
+ ldrh r3, [r0]\n\
+ subs r3, 0x1\n\
+ lsls r3, 16\n\
+ lsrs r3, 16\n\
+ movs r0, 0x1\n\
+ adds r1, r7, 0\n\
+ movs r2, 0\n\
+ bl sub_8091818\n\
+ adds r7, r0, 0\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0x6\n\
+ bls _0808E4E0\n\
+ ldr r1, [r5]\n\
+ ldr r3, _0808E538\n\
+ adds r1, r3\n\
+ subs r0, r7, r6\n\
+ lsls r0, 4\n\
+ ldrb r2, [r1]\n\
+ adds r0, r2\n\
+ strb r0, [r1]\n\
+ bl sub_808E82C\n\
+ adds r0, r7, 0\n\
+ movs r1, 0xE\n\
+ bl sub_808E0CC\n\
+ movs r0, 0x6D\n\
+ bl PlaySE\n\
+ b _0808E5A2\n\
+ .align 2, 0\n\
_0808E52C: .4byte gMain\n\
_0808E530: .4byte gUnknown_0202FFB4\n\
_0808E534: .4byte 0x0000060c\n\
_0808E538: .4byte 0x0000062c\n\
_0808E53C:\n\
- ldrh r1, [r3, 0x2E]\n\
- movs r0, 0x10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0808E5A2\n\
- ldr r0, _0808E5B8\n\
- ldr r0, [r0]\n\
- ldr r3, _0808E5BC\n\
- adds r0, r3\n\
- ldrh r0, [r0]\n\
- subs r0, 0x1\n\
- cmp r7, r0\n\
- bge _0808E5A2\n\
- adds r6, r7, 0\n\
- movs r4, 0\n\
+ ldrh r1, [r3, 0x2E]\n\
+ movs r0, 0x10\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0808E5A2\n\
+ ldr r0, _0808E5B8\n\
+ ldr r0, [r0]\n\
+ ldr r3, _0808E5BC\n\
+ adds r0, r3\n\
+ ldrh r0, [r0]\n\
+ subs r0, 0x1\n\
+ cmp r7, r0\n\
+ bge _0808E5A2\n\
+ adds r6, r7, 0\n\
+ movs r4, 0\n\
_0808E55A:\n\
- ldr r5, _0808E5B8\n\
- ldr r0, [r5]\n\
- ldr r1, _0808E5BC\n\
- adds r0, r1\n\
- ldrh r3, [r0]\n\
- subs r3, 0x1\n\
- lsls r3, 16\n\
- lsrs r3, 16\n\
- movs r0, 0\n\
- adds r1, r7, 0\n\
- movs r2, 0\n\
- bl sub_8091818\n\
- adds r7, r0, 0\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0x6\n\
- bls _0808E55A\n\
- ldr r1, [r5]\n\
- ldr r2, _0808E5C0\n\
- adds r1, r2\n\
- subs r0, r7, r6\n\
- lsls r0, 4\n\
- ldrb r3, [r1]\n\
- adds r0, r3\n\
- strb r0, [r1]\n\
- bl sub_808E82C\n\
- adds r0, r7, 0\n\
- movs r1, 0xE\n\
- bl sub_808E0CC\n\
- movs r0, 0x6D\n\
- bl PlaySE\n\
+ ldr r5, _0808E5B8\n\
+ ldr r0, [r5]\n\
+ ldr r1, _0808E5BC\n\
+ adds r0, r1\n\
+ ldrh r3, [r0]\n\
+ subs r3, 0x1\n\
+ lsls r3, 16\n\
+ lsrs r3, 16\n\
+ movs r0, 0\n\
+ adds r1, r7, 0\n\
+ movs r2, 0\n\
+ bl sub_8091818\n\
+ adds r7, r0, 0\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0x6\n\
+ bls _0808E55A\n\
+ ldr r1, [r5]\n\
+ ldr r2, _0808E5C0\n\
+ adds r1, r2\n\
+ subs r0, r7, r6\n\
+ lsls r0, 4\n\
+ ldrb r3, [r1]\n\
+ adds r0, r3\n\
+ strb r0, [r1]\n\
+ bl sub_808E82C\n\
+ adds r0, r7, 0\n\
+ movs r1, 0xE\n\
+ bl sub_808E0CC\n\
+ movs r0, 0x6D\n\
+ bl PlaySE\n\
_0808E5A2:\n\
- mov r0, r10\n\
- cmp r0, 0\n\
- bne _0808E628\n\
- ldr r0, _0808E5B8\n\
- ldr r0, [r0]\n\
- movs r1, 0xC7\n\
- lsls r1, 3\n\
- adds r0, r1\n\
- mov r2, r10\n\
- strh r2, [r0]\n\
- b _0808E68E\n\
- .align 2, 0\n\
+ mov r0, r10\n\
+ cmp r0, 0\n\
+ bne _0808E628\n\
+ ldr r0, _0808E5B8\n\
+ ldr r0, [r0]\n\
+ movs r1, 0xC7\n\
+ lsls r1, 3\n\
+ adds r0, r1\n\
+ mov r2, r10\n\
+ strh r2, [r0]\n\
+ b _0808E68E\n\
+ .align 2, 0\n\
_0808E5B8: .4byte gUnknown_0202FFB4\n\
_0808E5BC: .4byte 0x0000060c\n\
_0808E5C0: .4byte 0x0000062c\n\
_0808E5C4:\n\
- movs r3, 0x2\n\
- mov r10, r3\n\
- lsls r3, r0, 16\n\
- lsrs r3, 16\n\
- movs r0, 0\n\
- adds r1, r7, 0\n\
- movs r2, 0\n\
- bl sub_8091818\n\
- adds r7, r0, 0\n\
- movs r0, 0x2\n\
- adds r1, r7, 0\n\
- bl sub_808E398\n\
- movs r0, 0x2\n\
- b _0808E60E\n\
+ movs r3, 0x2\n\
+ mov r10, r3\n\
+ lsls r3, r0, 16\n\
+ lsrs r3, 16\n\
+ movs r0, 0\n\
+ adds r1, r7, 0\n\
+ movs r2, 0\n\
+ bl sub_8091818\n\
+ adds r7, r0, 0\n\
+ movs r0, 0x2\n\
+ adds r1, r7, 0\n\
+ bl sub_808E398\n\
+ movs r0, 0x2\n\
+ b _0808E60E\n\
_0808E5E4:\n\
- movs r0, 0x1\n\
- mov r10, r0\n\
- ldr r0, _0808E620\n\
- ldr r0, [r0]\n\
- ldr r1, _0808E624\n\
- adds r0, r1\n\
- ldrh r3, [r0]\n\
- subs r3, 0x1\n\
- lsls r3, 16\n\
- lsrs r3, 16\n\
- movs r0, 0x1\n\
- adds r1, r7, 0\n\
- movs r2, 0\n\
- bl sub_8091818\n\
- adds r7, r0, 0\n\
- movs r0, 0x1\n\
- adds r1, r7, 0\n\
- bl sub_808E398\n\
- movs r0, 0x1\n\
+ movs r0, 0x1\n\
+ mov r10, r0\n\
+ ldr r0, _0808E620\n\
+ ldr r0, [r0]\n\
+ ldr r1, _0808E624\n\
+ adds r0, r1\n\
+ ldrh r3, [r0]\n\
+ subs r3, 0x1\n\
+ lsls r3, 16\n\
+ lsrs r3, 16\n\
+ movs r0, 0x1\n\
+ adds r1, r7, 0\n\
+ movs r2, 0\n\
+ bl sub_8091818\n\
+ adds r7, r0, 0\n\
+ movs r0, 0x1\n\
+ adds r1, r7, 0\n\
+ bl sub_808E398\n\
+ movs r0, 0x1\n\
_0808E60E:\n\
- adds r1, r7, 0\n\
- adds r2, r4, 0\n\
- bl sub_808DBE8\n\
- movs r0, 0x6C\n\
- bl PlaySE\n\
- b _0808E5A2\n\
- .align 2, 0\n\
+ adds r1, r7, 0\n\
+ adds r2, r4, 0\n\
+ bl sub_808DBE8\n\
+ movs r0, 0x6C\n\
+ bl PlaySE\n\
+ b _0808E5A2\n\
+ .align 2, 0\n\
_0808E620: .4byte gUnknown_0202FFB4\n\
_0808E624: .4byte 0x0000060c\n\
_0808E628:\n\
- ldr r1, _0808E6A0\n\
- ldr r6, _0808E6A4\n\
- ldr r2, [r6]\n\
- movs r3, 0xC7\n\
- lsls r3, 3\n\
- mov r9, r3\n\
- adds r0, r2, r3\n\
- ldrh r0, [r0]\n\
- lsrs r0, 2\n\
- adds r1, r0, r1\n\
- ldrb r5, [r1]\n\
- ldr r1, _0808E6A8\n\
- adds r0, r1\n\
- ldrb r3, [r0]\n\
- ldr r0, _0808E6AC\n\
- adds r2, r0\n\
- strb r3, [r2]\n\
- ldr r1, [r6]\n\
- ldr r2, _0808E6B0\n\
- mov r8, r2\n\
- adds r0, r1, r2\n\
- strh r3, [r0]\n\
- ldr r4, _0808E6B4\n\
- adds r0, r1, r4\n\
- strh r5, [r0]\n\
- ldr r3, _0808E6B8\n\
- adds r1, r3\n\
- mov r0, r10\n\
- strb r0, [r1]\n\
- ldr r2, [r6]\n\
- lsrs r5, 1\n\
- movs r1, 0xC5\n\
- lsls r1, 3\n\
- adds r0, r2, r1\n\
- strh r5, [r0]\n\
- adds r3, r2, r3\n\
- ldrb r0, [r3]\n\
- adds r4, r2, r4\n\
- ldrb r1, [r4]\n\
- add r2, r8\n\
- ldrb r2, [r2]\n\
- bl sub_808E208\n\
- ldr r0, [r6]\n\
- mov r2, r9\n\
- adds r1, r0, r2\n\
- ldrh r0, [r1]\n\
- cmp r0, 0xB\n\
- bhi _0808E68E\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
+ ldr r1, _0808E6A0\n\
+ ldr r6, _0808E6A4\n\
+ ldr r2, [r6]\n\
+ movs r3, 0xC7\n\
+ lsls r3, 3\n\
+ mov r9, r3\n\
+ adds r0, r2, r3\n\
+ ldrh r0, [r0]\n\
+ lsrs r0, 2\n\
+ adds r1, r0, r1\n\
+ ldrb r5, [r1]\n\
+ ldr r1, _0808E6A8\n\
+ adds r0, r1\n\
+ ldrb r3, [r0]\n\
+ ldr r0, _0808E6AC\n\
+ adds r2, r0\n\
+ strb r3, [r2]\n\
+ ldr r1, [r6]\n\
+ ldr r2, _0808E6B0\n\
+ mov r8, r2\n\
+ adds r0, r1, r2\n\
+ strh r3, [r0]\n\
+ ldr r4, _0808E6B4\n\
+ adds r0, r1, r4\n\
+ strh r5, [r0]\n\
+ ldr r3, _0808E6B8\n\
+ adds r1, r3\n\
+ mov r0, r10\n\
+ strb r0, [r1]\n\
+ ldr r2, [r6]\n\
+ lsrs r5, 1\n\
+ movs r1, 0xC5\n\
+ lsls r1, 3\n\
+ adds r0, r2, r1\n\
+ strh r5, [r0]\n\
+ adds r3, r2, r3\n\
+ ldrb r0, [r3]\n\
+ adds r4, r2, r4\n\
+ ldrb r1, [r4]\n\
+ add r2, r8\n\
+ ldrb r2, [r2]\n\
+ bl sub_808E208\n\
+ ldr r0, [r6]\n\
+ mov r2, r9\n\
+ adds r1, r0, r2\n\
+ ldrh r0, [r1]\n\
+ cmp r0, 0xB\n\
+ bhi _0808E68E\n\
+ adds r0, 0x1\n\
+ strh r0, [r1]\n\
_0808E68E:\n\
- adds r0, r7, 0\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
+ adds r0, r7, 0\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
_0808E6A0: .4byte gUnknown_083A05EC\n\
_0808E6A4: .4byte gUnknown_0202FFB4\n\
_0808E6A8: .4byte gUnknown_083A05F1\n\
@@ -2072,8 +2102,7 @@ void sub_808F08C(struct Sprite *sprite)
DestroySprite(sprite);
}
-/*
-//FixMe
+#ifdef NONMATCHING
void sub_808F0B4(struct Sprite *sprite)
{
if(gUnknown_0202FFB4->unk64A != 0 && gUnknown_0202FFB4->unk64A != 3)
@@ -2081,16 +2110,368 @@ void sub_808F0B4(struct Sprite *sprite)
else
{
s16 r3;
+
u8 unk = gUnknown_0202FFB4->unk62C + sprite->data1;
u16 foo = gSineTable[unk];
- u16 bar = gSineTable[unk + 0x40];
- u8 unk2 = sprite->data0;
+ //u8 unk2 = sprite->data0;
+ //u16 bar = gSineTable[unk + 0x40];
- SetOamMatrix(unk2, foo, bar, -foo, bar);
+ SetOamMatrix(sprite->data0, foo, gSineTable[unk + 0x40], (-(u16)foo) >> 16, gSineTable[unk + 0x40]);
r3 = gSineTable[sprite->data1 + gUnknown_0202FFB4->unk62C];
sprite->pos2.x = gSineTable[sprite->data1 + gUnknown_0202FFB4->unk62C + 0x40] * 5 / 256;
- sprite->pos2.y = r3 / 8;
+ sprite->pos2.y = r3 * 40 / 256;
+ }
+}
+#else
+__attribute__((naked))
+void sub_808F0B4(struct Sprite *sprite)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ sub sp, 0x4\n\
+ adds r6, r0, 0\n\
+ ldr r1, _0808F0D8 @ =gUnknown_0202FFB4\n\
+ ldr r0, [r1]\n\
+ ldr r2, _0808F0DC @ =0x0000064a\n\
+ adds r0, r2\n\
+ ldrb r0, [r0]\n\
+ adds r7, r1, 0\n\
+ cmp r0, 0\n\
+ beq _0808F0E0\n\
+ cmp r0, 0x3\n\
+ beq _0808F0E0\n\
+ adds r0, r6, 0\n\
+ bl DestroySprite\n\
+ b _0808F158\n\
+ .align 2, 0\n\
+_0808F0D8: .4byte gUnknown_0202FFB4\n\
+_0808F0DC: .4byte 0x0000064a\n\
+_0808F0E0:\n\
+ ldr r0, [r7]\n\
+ ldr r5, _0808F160 @ =0x0000062c\n\
+ adds r0, r5\n\
+ ldrb r1, [r0]\n\
+ ldrh r0, [r6, 0x30]\n\
+ adds r1, r0\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ ldr r4, _0808F164 @ =gSineTable\n\
+ lsls r0, r1, 1\n\
+ adds r0, r4\n\
+ ldrh r3, [r0]\n\
+ adds r1, 0x40\n\
+ lsls r1, 1\n\
+ adds r1, r4\n\
+ ldrh r0, [r6, 0x2E]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ ldrh r1, [r1]\n\
+ lsls r3, 16\n\
+ lsrs r2, r3, 16\n\
+ negs r3, r3\n\
+ lsrs r3, 16\n\
+ str r1, [sp]\n\
+ bl SetOamMatrix\n\
+ ldr r1, [r7]\n\
+ adds r1, r5\n\
+ ldrh r0, [r6, 0x30]\n\
+ adds r0, 0x40\n\
+ ldrb r1, [r1]\n\
+ adds r0, r1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r1, r0, 1\n\
+ adds r1, r4\n\
+ ldrh r3, [r1]\n\
+ adds r0, 0x40\n\
+ lsls r0, 1\n\
+ adds r0, r4\n\
+ movs r2, 0\n\
+ ldrsh r1, [r0, r2]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ cmp r0, 0\n\
+ bge _0808F140\n\
+ adds r0, 0xFF\n\
+_0808F140:\n\
+ asrs r0, 8\n\
+ strh r0, [r6, 0x24]\n\
+ lsls r1, r3, 16\n\
+ asrs r1, 16\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ cmp r0, 0\n\
+ bge _0808F154\n\
+ adds r0, 0xFF\n\
+_0808F154:\n\
+ asrs r0, 8\n\
+ strh r0, [r6, 0x26]\n\
+_0808F158:\n\
+ add sp, 0x4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0808F160: .4byte 0x0000062c\n\
+_0808F164: .4byte gSineTable\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_808F168(struct Sprite *sprite)
+{
+ if(gUnknown_0202FFB4->unk64A != 0 && gUnknown_0202FFB4->unk64A != 3)
+ DestroySprite(sprite);
+ else
+ {
+ u16 r1 = gUnknown_0202FFB4->unk64A == 0 ? 0x50 : 0x60;
+
+ if(gUnknown_0202FFB4->unk650 != 0 && gUnknown_0202FFB4->unk654 == r1)
+ {
+ u8 data2;
+
+ sprite->invisible = 0;
+ sprite->pos2.y = gUnknown_0202FFB4->unk652 * 16;
+ sprite->pos2.x = gSineTable[(u8)sprite->data2] / 64;
+ sprite->data2 += 8;
+ }
+ else
+ sprite->invisible = 1;
}
}
-*/
+
+u8 sub_808F210(struct PokedexListItem *item, u8 b)
+{
+ u8 taskId;
+
+ gUnknown_0202FFBC = item;
+ taskId = CreateTask(sub_808F2B0, 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;
+}
+
+bool8 sub_808F250(u8 taskId)
+{
+ if(gTasks[taskId].data[0] == 0 && gTasks[taskId].func == sub_808F6CC)
+ return 0;
+ else
+ return 1;
+}
+
+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;
+}
+
+void sub_808F2B0(u8 taskId)
+{
+ switch(gMain.state)
+ {
+ case 0:
+ default:
+ if(!gPaletteFade.active)
+ {
+ u16 r2;
+
+ gUnknown_0202FFB4->unk64A = 1;
+ gUnknown_0202FFB4->unk64E = 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->a, 2, 0x3FC);
+ gMain.state++;
+ break;
+ case 2:
+ sub_80904FC(0xD);
+ sub_8090584(gUnknown_0202FFB4->unk64D, 0xD);
+ sub_808D640();
+ gMain.state++;
+ break;
+ case 3:
+ SetUpWindowConfig(&gWindowConfig_81E7064);
+ InitMenuWindow(&gWindowConfig_81E7064);
+ gMain.state++;
+ break;
+ case 4:
+ if(gUnknown_0202FFB4->unk612 == 0)
+ sub_8091154(NationalToHoennOrder(gUnknown_0202FFBC->a), 0xD, 3);
+ else
+ sub_8091154(gUnknown_0202FFBC->a, 0xD, 3);
+ //_0808F45A
+ sub_80911C8(gUnknown_0202FFBC->a, 0x10, 3);
+ MenuPrint(gDexText_UnknownPoke, 11, 5);
+ MenuPrint(gDexText_UnknownHeight, 16, 7);
+ MenuPrint(gDexText_UnknownWeight, 16, 9);
+ if(gUnknown_0202FFBC->owned)
+ {
+ sub_8091304(gPokedexEntries[gUnknown_0202FFBC->a].categoryName, 11, 5);
+ sub_8091458(gPokedexEntries[gUnknown_0202FFBC->a].height, 16, 7);
+ sub_8091564(gPokedexEntries[gUnknown_0202FFBC->a].weight, 16, 9);
+ MenuPrint(gPokedexEntries[gUnknown_0202FFBC->a].descriptionPage1, 2, 13);
+ sub_80917CC(14, 0x3FC);
+ }
+ //_0808F50C
+ else
+ {
+ MenuPrint(gUnknown_083A05F8, 2, 13);
+ LoadPalette(gPlttBufferUnfaded + 1, 0x31, 0x1E);
+ }
+ gMain.state++;
+ break;
+ case 5:
+ if(gTasks[taskId].data[1] == 0)
+ {
+ //_0808F540
+ gTasks[taskId].data[4] = (u16)sub_80918EC(gUnknown_0202FFBC->a, 0x30, 0x38, 0);
+ gSprites[gTasks[taskId].data[4]].oam.priority = 0;
+ }
+ gMain.state++;
+ break;
+ case 6:
+ {
+ u32 r3 = 0;
+
+ if(gTasks[taskId].data[2] != 0)
+ r3 = 0x14;
+ if(gTasks[taskId].data[1] != 0)
+ {
+ r3 |= (1 << (gSprites[gTasks[taskId].data[4]].oam.paletteNum + 0x10));
+ }
+ BeginNormalPaletteFade(~r3, 0, 0x10, 0, 0);
+ SetVBlankCallback(gUnknown_03005CEC);
+ gMain.state++;
+ break;
+ }
+ case 7:
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ REG_BLDY = 0;
+ REG_BG3CNT = 0xF03;
+ REG_BG1CNT = 0xD00;
+ REG_DISPCNT = 0x1E40;
+ gMain.state++;
+ break;
+ case 8:
+ if(!gPaletteFade.active)
+ {
+ gMain.state++;
+ if(gTasks[taskId].data[3] == 0)
+ {
+ StopCryAndClearCrySongs();
+ PlayCry2(NationalPokedexNumToSpecies(gUnknown_0202FFBC->a), 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 = sub_808F6CC;
+ gMain.state = 0;
+ break;
+ }
+}
+
+void sub_808F6CC(u8 taskId)
+{
+ if(gTasks[taskId].data[0] != 0)
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskId].func = sub_808F888;
+ PlaySE(0x6C);
+ }
+ else if(gMain.newKeys & 2)
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskId].func = sub_808F8B8;
+ PlaySE(3);
+ }
+ else if(gMain.newKeys & 1)
+ {
+ switch(gUnknown_0202FFB4->unk64D)
+ {
+ case 0:
+ sub_8090C68();
+ break;
+ case 1:
+ BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
+ gTasks[taskId].func = sub_808F8D8;
+ PlaySE(0x15);
+ break;
+ case 2:
+ BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
+ gTasks[taskId].func = sub_808FA64;
+ PlaySE(0x15);
+ break;
+ case 3:
+ if(!gUnknown_0202FFBC->owned)
+ PlaySE(0x20);
+ else
+ {
+ BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0);
+ gTasks[taskId].func = sub_8090070;
+ PlaySE(0x15);
+ }
+ break;
+ }
+ }
+ else if (((gMain.newKeys & 0x20) || ((gMain.newKeys & 0x200) && gSaveBlock2.optionsButtonMode == 1))
+ && gUnknown_0202FFB4->unk64D != 0)
+ {
+ gUnknown_0202FFB4->unk64D--;
+ sub_8090584(gUnknown_0202FFB4->unk64D, 0xD);
+ PlaySE(0x6D);
+ }
+ else if(((gMain.newKeys & 0x10) || ((gMain.newKeys & 0x100) && gSaveBlock2.optionsButtonMode == 1))
+ && gUnknown_0202FFB4->unk64D <= 2)
+ {
+ gUnknown_0202FFB4->unk64D++;
+ sub_8090584(gUnknown_0202FFB4->unk64D, 0xD);
+ PlaySE(0x6D);
+ }
+}
+
+void sub_808F888(u8 taskId)
+{
+ if(!gPaletteFade.active)
+ gTasks[taskId].func = sub_808F2B0;
+}
+
+void sub_808F8B8(u8 taskId)
+{
+ if(!gPaletteFade.active)
+ DestroyTask(taskId);
+}