summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCameron Hall <camthesaxman@users.noreply.github.com>2016-10-27 01:32:53 -0500
committerYamaArashi <YamaArashi@users.noreply.github.com>2016-10-26 23:32:53 -0700
commitc027821c09ca6cf3470f13d31eaea2548bec5672 (patch)
tree345fc9060b131d91411da3d17f1db77634b45448 /src
parent97aff6e40ee6ebcb0361933275de9bad403910e1 (diff)
decompile more pokedex functions (#72)
* 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
Diffstat (limited to 'src')
-rw-r--r--src/pokedex.c716
1 files changed, 710 insertions, 6 deletions
diff --git a/src/pokedex.c b/src/pokedex.c
index b45a123d5..b67deb84d 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -77,6 +77,16 @@ extern u8 gUnknown_0839FA7C[];
extern u8 gUnknown_0839F67C[];
extern u8 gPokedexMenu_Pal[];
extern u8 gUnknown_0839F73C[];
+extern u8 gUnknown_083A05EC[];
+extern u8 gUnknown_083A05F1[];
+extern struct SpriteTemplate gSpriteTemplate_83A053C;
+extern struct SpriteTemplate gSpriteTemplate_83A0524;
+extern struct SpriteTemplate gSpriteTemplate_83A0554;
+extern struct SpriteTemplate gSpriteTemplate_83A056C;
+extern struct SpriteTemplate gSpriteTemplate_83A0584;
+extern struct SpriteTemplate gSpriteTemplate_83A059C;
+extern struct SpriteTemplate gSpriteTemplate_83A05B4;
+extern s16 gSineTable[];
extern void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume);
extern bool8 BeginNormalPaletteFade(u32, s8, u8, u8, u16);
@@ -113,7 +123,7 @@ void sub_8091060(u16);
void sub_808CAE4(u8 taskId);
void sub_808D198(u8 taskId);
bool8 sub_808E208(u8, u8, u8);
-bool32 sub_808E82C(void); //Not sure about return type
+u8 sub_808E82C(void);
void sub_808E0CC(u16, u16);
u8 sub_808F210(struct PokedexListItem *, u8);
void sub_808F284(struct PokedexListItem *, u8);
@@ -139,6 +149,7 @@ 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);
void sub_808C02C(void)
{
@@ -1366,27 +1377,720 @@ void sub_808E398(u8 a, u16 b)
}
}
}
-
-/*
+#ifdef NONMATCHING
+//This one's ridiculous. Fix later
u16 sub_808E48C(u16 a, u16 b)
{
- if((gMain.heldKeys & 0x40) || a == 0)
+ u8 r3;
+ u8 r5;
+ u32 r10 = 0;
+ if(!(gMain.heldKeys & 0x40) || a == 0)
{
+ u8 i;
+ u16 r6;
+
//_0808E4B6
if(gMain.heldKeys & 0x80)
{
-
+ if(a < gUnknown_0202FFB4->unk60C - 1)
+ goto _0808E5C4;
}
//_0808E4CE
+
+ if((gMain.newKeys & 0x20) && a != 0)
+ {
+ r6 = a;
+ //_0808E4E0
+ for(i = 0; i < 7; i++)
+ {
+ a = sub_8091818(1, a, 0, gUnknown_0202FFB4->unk60C - 1);
+ }
+
+ gUnknown_0202FFB4->unk62C += (a - r6) * 16;
+ sub_808E82C();
+ sub_808E0CC(a, 0xE);
+ PlaySE(0x6D);
+ goto _0808E5A2;
+ }
+ //_0808E53C
+ if(!(gMain.newKeys & 0x10) || a >= gUnknown_0202FFB4->unk60C - 1)
+ goto _0808E5A2;
+
+ r6 = a;
+ for(i = 0; i < 7; i++)
+ {
+ a = sub_8091818(0, a, 0, gUnknown_0202FFB4->unk60C - 1);
+ }
+
+ gUnknown_0202FFB4->unk62C += (a - r6) * 16;
+ sub_808E82C();
+ sub_808E0CC(a, 0xE);
+ PlaySE(0x6D);
+ goto _0808E5A2;
+
+ _0808E5A2:
+ if(r10 != 0)
+ goto _0808E628;
+ gUnknown_0202FFB4->unk638 = r10;
+ return a;
+
+ _0808E5C4:
+ r10 = 2;
+ a = sub_8091818(0, a, 0, gUnknown_0202FFB4->unk60C - 1);
+ sub_808E398(2, a);
+ //goto _0808E60E
+ sub_808DBE8(2, a, b);
+ PlaySE(0x6C);
}
//_0808E5E4
else
{
- sub_8091818(1, a, 0, gUnknown_0202FFB4->unk60C - 1);
+ r10 = 1;
+ a = sub_8091818(1, a, 0, gUnknown_0202FFB4->unk60C - 1);
sub_808E398(1, a);
+ //_0808E60E
sub_808DBE8(1, a, b);
PlaySE(0x6C);
}
+ //_0808E60E
+ goto _0808E5A2;
+
+ _0808E628:
+ r5 = gUnknown_083A05EC[gUnknown_0202FFB4->unk638 / 4];
+ r3 = gUnknown_083A05F1[gUnknown_0202FFB4->unk638 / 4];
+ gUnknown_0202FFB4->unk62E = r3;
+ gUnknown_0202FFB4->unk636 = r3;
+ gUnknown_0202FFB4->unk634 = r5;
+ gUnknown_0202FFB4->unk62F = r10;
+ gUnknown_0202FFB4->unk628 = r5;
+ sub_808E208(gUnknown_0202FFB4->unk62F, gUnknown_0202FFB4->unk634, gUnknown_0202FFB4->unk636);
+ if(gUnknown_0202FFB4->unk638 <= 0xB)
+ gUnknown_0202FFB4->unk638++;
+ return a;
+}
+#else
+__attribute__((naked))
+u16 sub_808E48C(u16 a, u16 b)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ lsls r1, 16\n\
+ lsrs r4, r1, 16\n\
+ movs r0, 0\n\
+ mov r10, r0\n\
+ ldr r1, _0808E52C\n\
+ ldrh r2, [r1, 0x2C]\n\
+ movs r0, 0x40\n\
+ ands r0, r2\n\
+ adds r3, r1, 0\n\
+ cmp r0, 0\n\
+ beq _0808E4B6\n\
+ cmp r7, 0\n\
+ beq _0808E4B6\n\
+ b _0808E5E4\n\
+_0808E4B6:\n\
+ movs r0, 0x80\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _0808E4CE\n\
+ ldr r0, _0808E530\n\
+ ldr r0, [r0]\n\
+ ldr r1, _0808E534\n\
+ adds r0, r1\n\
+ ldrh r0, [r0]\n\
+ subs r0, 0x1\n\
+ cmp r7, r0\n\
+ blt _0808E5C4\n\
+_0808E4CE:\n\
+ ldrh r1, [r3, 0x2E]\n\
+ movs r0, 0x20\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0808E53C\n\
+ cmp r7, 0\n\
+ beq _0808E53C\n\
+ adds r6, r7, 0\n\
+ movs r4, 0\n\
+_0808E4E0:\n\
+ ldr r5, _0808E530\n\
+ ldr r0, [r5]\n\
+ ldr r2, _0808E534\n\
+ adds r0, r2\n\
+ ldrh r3, [r0]\n\
+ subs r3, 0x1\n\
+ lsls r3, 16\n\
+ lsrs r3, 16\n\
+ movs r0, 0x1\n\
+ adds r1, r7, 0\n\
+ movs r2, 0\n\
+ bl sub_8091818\n\
+ adds r7, r0, 0\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0x6\n\
+ bls _0808E4E0\n\
+ ldr r1, [r5]\n\
+ ldr r3, _0808E538\n\
+ adds r1, r3\n\
+ subs r0, r7, r6\n\
+ lsls r0, 4\n\
+ ldrb r2, [r1]\n\
+ adds r0, r2\n\
+ strb r0, [r1]\n\
+ bl sub_808E82C\n\
+ adds r0, r7, 0\n\
+ movs r1, 0xE\n\
+ bl sub_808E0CC\n\
+ movs r0, 0x6D\n\
+ bl PlaySE\n\
+ b _0808E5A2\n\
+ .align 2, 0\n\
+_0808E52C: .4byte gMain\n\
+_0808E530: .4byte 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\
+_0808E55A:\n\
+ ldr r5, _0808E5B8\n\
+ ldr r0, [r5]\n\
+ ldr r1, _0808E5BC\n\
+ adds r0, r1\n\
+ ldrh r3, [r0]\n\
+ subs r3, 0x1\n\
+ lsls r3, 16\n\
+ lsrs r3, 16\n\
+ movs r0, 0\n\
+ adds r1, r7, 0\n\
+ movs r2, 0\n\
+ bl sub_8091818\n\
+ adds r7, r0, 0\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0x6\n\
+ bls _0808E55A\n\
+ ldr r1, [r5]\n\
+ ldr r2, _0808E5C0\n\
+ adds r1, r2\n\
+ subs r0, r7, r6\n\
+ lsls r0, 4\n\
+ ldrb r3, [r1]\n\
+ adds r0, r3\n\
+ strb r0, [r1]\n\
+ bl sub_808E82C\n\
+ adds r0, r7, 0\n\
+ movs r1, 0xE\n\
+ bl sub_808E0CC\n\
+ movs r0, 0x6D\n\
+ bl PlaySE\n\
+_0808E5A2:\n\
+ mov r0, r10\n\
+ cmp r0, 0\n\
+ bne _0808E628\n\
+ ldr r0, _0808E5B8\n\
+ ldr r0, [r0]\n\
+ movs r1, 0xC7\n\
+ lsls r1, 3\n\
+ adds r0, r1\n\
+ mov r2, r10\n\
+ strh r2, [r0]\n\
+ b _0808E68E\n\
+ .align 2, 0\n\
+_0808E5B8: .4byte 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\
+_0808E5E4:\n\
+ movs r0, 0x1\n\
+ mov r10, r0\n\
+ ldr r0, _0808E620\n\
+ ldr r0, [r0]\n\
+ ldr r1, _0808E624\n\
+ adds r0, r1\n\
+ ldrh r3, [r0]\n\
+ subs r3, 0x1\n\
+ lsls r3, 16\n\
+ lsrs r3, 16\n\
+ movs r0, 0x1\n\
+ adds r1, r7, 0\n\
+ movs r2, 0\n\
+ bl sub_8091818\n\
+ adds r7, r0, 0\n\
+ movs r0, 0x1\n\
+ adds r1, r7, 0\n\
+ bl sub_808E398\n\
+ movs r0, 0x1\n\
+_0808E60E:\n\
+ adds r1, r7, 0\n\
+ adds r2, r4, 0\n\
+ bl sub_808DBE8\n\
+ movs r0, 0x6C\n\
+ bl PlaySE\n\
+ b _0808E5A2\n\
+ .align 2, 0\n\
+_0808E620: .4byte 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\
+_0808E68E:\n\
+ adds r0, r7, 0\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_0808E6A0: .4byte gUnknown_083A05EC\n\
+_0808E6A4: .4byte gUnknown_0202FFB4\n\
+_0808E6A8: .4byte gUnknown_083A05F1\n\
+_0808E6AC: .4byte 0x0000062e\n\
+_0808E6B0: .4byte 0x00000636\n\
+_0808E6B4: .4byte 0x00000634\n\
+_0808E6B8: .4byte 0x0000062f\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_808E6BC(void)
+{
+ u16 i;
+
+ for(i = 0; i < 4; i++)
+ {
+ u16 spriteId = gUnknown_0202FFB4->unk61E[i];
+
+ if(gSprites[spriteId].pos2.x == 0 && gSprites[spriteId].pos2.y == 0 && spriteId != 0xFFFF)
+ gUnknown_0202FFB4->unk626 = spriteId;
+ }
+}
+
+u8 sub_808E71C(void)
+{
+ u16 r2;
+ u16 r3;
+ u16 r4 = gUnknown_0202FFB4->unk60E;
+
+ if((gMain.newKeys & 0x40) && r4)
+ {
+ r2 = r4;
+ while(r2 != 0)
+ {
+ r2 = sub_8091818(1, r2, 0, gUnknown_0202FFB4->unk60C - 1);
+
+ if(gUnknown_0202FFB4->unk0[r2].seen)
+ {
+ //goto _0808E78C;
+ r4 = r2;
+ break;
+ }
+ }
+
+ if(gUnknown_0202FFB4->unk60E == r4)
+ return 0;
+ else
+ {
+ gUnknown_0202FFB4->unk60E = r4;
+ //goto _0808E80C
+ gUnknown_0202FFB4->unk62C -= 16;
+ return 1;
+ }
+ }
+ //_0808E7A4
+ else if((gMain.newKeys & 0x80) && r4 < gUnknown_0202FFB4->unk60C - 1)
+ {
+ r2 = r4;
+ while(r2 < gUnknown_0202FFB4->unk60C - 1)
+ {
+ r2 = sub_8091818(0, r2, 0, gUnknown_0202FFB4->unk60C - 1);
+
+ if(gUnknown_0202FFB4->unk0[r2].seen)
+ {
+ r4 = r2;
+ break;
+ }
+ }
+
+ if(gUnknown_0202FFB4->unk60E == r4)
+ return 0;
+ else
+ {
+ gUnknown_0202FFB4->unk60E = r4;
+ gUnknown_0202FFB4->unk62C += 16;
+ return 1;
+ }
+ }
+ return 0;
+}
+
+u8 sub_808E82C(void)
+{
+ u16 i;
+
+ for(i = 0; i < 4; i++)
+ {
+ if(gUnknown_0202FFB4->unk61E[i] != 0xFFFF)
+ {
+ DestroySprite(&gSprites[gUnknown_0202FFB4->unk61E[i]]);
+ gUnknown_0202FFB4->unk61E[i] |= 0xFFFF;
+ }
+ }
+ return 0;
+}
+
+u16 sub_808E888(u16 a1)
+{
+ if(a1 > 385 || gUnknown_0202FFB4->unk0[a1].a == 0xFFFF)
+ return 0xFFFF;
+ else if(gUnknown_0202FFB4->unk0[a1].seen)
+ return gUnknown_0202FFB4->unk0[a1].a;
+ else
+ return 0;
+}
+
+u32 sub_808E8C8(u16 a, u16 b, u16 c)
+{
+ u8 i;
+
+ for(i = 0; i < 4; i++)
+ {
+ if(gUnknown_0202FFB4->unk61E[i] == 0xFFFF)
+ {
+ u8 spriteId = sub_80918EC(a, (s16)b, (s16)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);
+ gUnknown_0202FFB4->unk61E[i] = spriteId;
+ return spriteId;
+ }
+ }
+ return 0xFFFF;
+}
+
+void sub_808E978(u8 a)
+{
+ u8 spriteId;
+ u16 r5;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A053C, 0xB8, 4, 0);
+ gSprites[spriteId].data1 = 0;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A053C, 0xB8, 0x9C, 0);
+ gSprites[spriteId].data1 = 1;
+ gSprites[spriteId].vFlip = 1;
+
+ CreateSprite(&gSpriteTemplate_83A0524, 0xEA, 0x14, 0);
+ CreateSprite(&gSpriteTemplate_83A0554, 0x10, 0x8A, 0);
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A0554, 0x30, 0x8A, 0);
+ StartSpriteAnim(&gSprites[spriteId], 3);
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A0554, 0x10, 0x9E, 0);
+ StartSpriteAnim(&gSprites[spriteId], 2);
+ gSprites[spriteId].data2 = 0x80;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A0554, 0x30, 0x9E, 0);
+ StartSpriteAnim(&gSprites[spriteId], 1);
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A056C, 0, 0x50, 2);
+ gSprites[spriteId].oam.affineMode = 1;
+ gSprites[spriteId].oam.matrixNum = 30;
+ gSprites[spriteId].data0 = 0x1E;
+ gSprites[spriteId].data1 = 0;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A056C, 0, 0x50, 2);
+ 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, 0x20, 0x28, 1);
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A0584, 0x20, 0x48, 1);
+ StartSpriteAnim(&gSprites[spriteId], 1);
+ _a = 0;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x1C, 0x30, 1);
+ r5 = gUnknown_0202FFB4->unk61A / 100;
+ StartSpriteAnim(&gSprites[spriteId], r5);
+ if(r5 != 0)
+ _a = 1;
+ else
+ gSprites[spriteId].invisible = 1;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x22, 0x30, 1);
+ r5 = (gUnknown_0202FFB4->unk61A % 100) / 10;
+ if(r5 != 0 || _a != 0)
+ StartSpriteAnim(&gSprites[spriteId], r5);
+ else
+ gSprites[spriteId].invisible = 1;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x28, 0x30, 1);
+ r5 = (gUnknown_0202FFB4->unk61A % 100) % 10;
+ StartSpriteAnim(&gSprites[spriteId], r5);
+ _a = 0;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x1C, 0x50, 1);
+ r5 = gUnknown_0202FFB4->unk61C / 100;
+ StartSpriteAnim(&gSprites[spriteId], r5);
+ if(r5 != 0)
+ _a = 1;
+ else
+ gSprites[spriteId].invisible = 1;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x22, 0x50, 1);
+ r5 = (gUnknown_0202FFB4->unk61C % 100) / 10;
+ if(r5 != 0 || _a != 0)
+ StartSpriteAnim(&gSprites[spriteId], r5);
+ else
+ gSprites[spriteId].invisible = 1;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x28, 0x50, 1);
+ r5 = (gUnknown_0202FFB4->unk61C % 100) % 10;
+ StartSpriteAnim(&gSprites[spriteId], r5);
+
+ spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 0x8C, 0x60, 1);
+ gSprites[spriteId].invisible = 1;
+ }
+ else
+ {
+ spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 0x8C, 0x50, 1);
+ gSprites[spriteId].invisible = 1;
+ }
+}
+
+void nullsub_58(struct Sprite *sprite)
+{
+}
+
+void sub_808ED94(struct Sprite *sprite)
+{
+ if(gUnknown_0202FFB4->unk64A != 0)
+ DestroySprite(sprite);
+}
+
+void sub_808EDB8(struct Sprite *sprite)
+{
+ sprite->oam.priority = 0;
+ sprite->oam.affineMode = 0;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ if(sprite->pos1.x != 0x30 || sprite->pos1.y != 0x38)
+ {
+ if(sprite->pos1.x > 0x30)
+ sprite->pos1.x--;
+ if(sprite->pos1.x < 0x30)
+ sprite->pos1.x++;
+ if(sprite->pos1.y > 0x38)
+ sprite->pos1.y--;
+ if(sprite->pos1.y <0x38)
+ sprite->pos1.y++;
+ }
+ //_0808EE1C
+ else
+ sprite->callback = nullsub_58;
+}
+
+void sub_808EE28(struct Sprite *sprite)
+{
+ u8 data1 = sprite->data1;
+ if(gUnknown_0202FFB4->unk64A != 0 && gUnknown_0202FFB4->unk64A != 3)
+ {
+ DestroySprite(sprite);
+ gUnknown_0202FFB4->unk61E[data1] = 0xFFFF;
+ }
+ else
+ {
+ //_0808EE58
+ s32 var;
+
+ sprite->pos2.y = gSineTable[(u8)sprite->data5] * 76 / 256;
+ var = 0x10000 / gSineTable[sprite->data5 + 0x40];
+ if((u32)var > 0xFFFF)
+ var = 0xFFFF;
+ SetOamMatrix(sprite->data1 + 1, 0x100, 0, 0, var);
+ sprite->oam.matrixNum = data1 + 1;
+
+ //ToDo: clean up these inequalities
+ if((u16)(sprite->data5 + 0x3F) <= 0x7E)
+ {
+ sprite->invisible = 0;
+ sprite->data0 = 1;
+ }
+ else
+ {
+ sprite->invisible = 1;
+ }
+ //_0808EEF8
+ if((u16)(sprite->data5 + 0x3F) > 0x7E && sprite->data0 != 0)
+ {
+ DestroySprite(sprite);
+ gUnknown_0202FFB4->unk61E[data1] = 0xFFFF;
+ }
+ }
+ //_0808EF16
+}
+
+void sub_808EF38(struct Sprite *sprite)
+{
+ if(gUnknown_0202FFB4->unk64A != 0 && gUnknown_0202FFB4->unk64A != 3)
+ DestroySprite(sprite);
+ else
+ sprite->pos2.y = gUnknown_0202FFB4->unk60E * 120 / (gUnknown_0202FFB4->unk60C - 1);
+}
+
+void sub_808EF8C(struct Sprite *sprite)
+{
+ if(gUnknown_0202FFB4->unk64A != 0 && gUnknown_0202FFB4->unk64A != 3)
+ DestroySprite(sprite);
+ else
+ {
+ u8 r0;
+
+ if(sprite->data1 != 0)
+ {
+ if(gUnknown_0202FFB4->unk60E == gUnknown_0202FFB4->unk60C - 1)
+ sprite->invisible = 1;
+ else
+ sprite->invisible = 0;
+ r0 = sprite->data2;
+ }
+ else
+ {
+ if(gUnknown_0202FFB4->unk60E == 0)
+ sprite->invisible = 1;
+ else
+ sprite->invisible = 0;
+ r0 = sprite->data2 - 0x80;
+ }
+ sprite->pos2.y = gSineTable[r0] / 64;
+ sprite->data2 = sprite->data2 + 8;
+ if(gUnknown_0202FFB4->unk650 == 0 && gUnknown_0202FFB4->unk654 == 0 && sprite->invisible == 0)
+ sprite->invisible = 0;
+ else
+ sprite->invisible = 1;
+ }
+}
+
+void sub_808F08C(struct Sprite *sprite)
+{
+ if(gUnknown_0202FFB4->unk64A != 0 && gUnknown_0202FFB4->unk64A != 3)
+ DestroySprite(sprite);
+}
+
+/*
+//FixMe
+void sub_808F0B4(struct Sprite *sprite)
+{
+ if(gUnknown_0202FFB4->unk64A != 0 && gUnknown_0202FFB4->unk64A != 3)
+ DestroySprite(sprite);
+ else
+ {
+ s16 r3;
+ u8 unk = gUnknown_0202FFB4->unk62C + sprite->data1;
+ u16 foo = gSineTable[unk];
+ u16 bar = gSineTable[unk + 0x40];
+ u8 unk2 = sprite->data0;
+
+ SetOamMatrix(unk2, foo, bar, -foo, bar);
+
+ r3 = gSineTable[sprite->data1 + gUnknown_0202FFB4->unk62C];
+ sprite->pos2.x = gSineTable[sprite->data1 + gUnknown_0202FFB4->unk62C + 0x40] * 5 / 256;
+ sprite->pos2.y = r3 / 8;
+ }
}
*/