summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pokedex.c687
1 files changed, 681 insertions, 6 deletions
diff --git a/src/pokedex.c b/src/pokedex.c
index 3c7647be7..ded629987 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -1,5 +1,6 @@
#include "gba/gba.h"
#include "main.h"
+#include "menu.h"
#include "palette.h"
#include "rng.h"
#include "songs.h"
@@ -10,9 +11,9 @@
struct PokedexListItem {
u16 a;
- u8 seen:1;
- u8 owned:1;
- u8 c;
+ u16 seen:1;
+ u16 owned:1;
+ //u8 c;
};
struct PokedexView {
@@ -38,8 +39,8 @@ struct PokedexView {
u8 unk62D;
u8 unk62E;
u8 unk62F;
- u16 unk630;
- u16 unk632;
+ s16 unk630;
+ s16 unk632;
u16 unk634;
u16 unk636;
u16 unk638;
@@ -65,6 +66,17 @@ extern struct PokedexView *gUnknown_0202FFB4;
extern u16 gUnknown_0202FFB8;
extern u8 gUnknown_0202FFBA;
extern u8 gUnknown_03005CE8;
+extern u8 gPokedexMenu_Gfx[];
+extern u8 gUnknown_08E96738[];
+extern u8 gUnknown_08E9C6DC[];
+extern u8 gUnknown_08E96888[];
+extern u8 gUnknown_08E96994[];
+extern u8 gUnknown_083A05CC[];
+extern struct SpritePalette gUnknown_083A05DC[];
+extern u8 gUnknown_0839FA7C[];
+extern u8 gUnknown_0839F67C[];
+extern u8 gPokedexMenu_Pal[];
+extern u8 gUnknown_0839F73C[];
extern void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume);
extern bool8 BeginNormalPaletteFade(u32, s8, u8, u8, u16);
@@ -74,6 +86,14 @@ extern u16 pokedex_count(u8);
extern u8 sub_8091E3C(void);
extern void sub_80690C8(void);
extern void sub_805469C(void);
+extern void LoadCompressedObjectPic(void *);
+extern void LZ77UnCompVram(const void *, void *);
+extern u16 HoennToNationalOrder(u16);
+extern u16 NationalToHoennOrder(u16);
+extern u16 gPokedexOrder_Alphabetical[];
+extern u16 gPokedexOrder_Weight[];
+extern u16 gPokedexOrder_Height[];
+extern u8 gSpeciesNames[][11];
void ClearPokedexView(struct PokedexView *);
void Task_PokedexShowMainScreen(u8 taskId);
@@ -108,6 +128,17 @@ void Task_PokedexResultsScreenMenu(u8 taskId);
void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId);
void sub_808CEF8(u8 taskId);
void Task_PokedexResultsScreenExitPokedex(u8 taskId);
+void sub_808D640(void);
+void sub_808E978(u8);
+bool8 sub_8090D90(u16, u8);
+void sub_808E090(u8, u8, u16);
+void sub_808DEB0(u16, u8, u8, u16);
+void sub_808DF88(u16, u8, u8, u16);
+u8 sub_808DFE4(u16, u8, u8);
+u16 sub_808E888(u16);
+u32 sub_808E8C8(u16, u16, u16);
+void sub_808EE28(struct Sprite *sprite);
+u16 sub_8091818(u8, u16, u16, u16);
void sub_808C02C(void)
{
@@ -211,7 +242,7 @@ void CB2_InitPokedex(void)
SetVBlankCallback(NULL);
sub_8091060(0);
addr = (u8 *)VRAM;
- size = 0x18000;
+ size = VRAM_SIZE;
while(1)
{
DmaFill16(3, 0, addr, 0x1000);
@@ -715,3 +746,647 @@ void Task_PokedexResultsScreenExitPokedex(u8 taskId)
gTasks[taskId].func = Task_ClosePokedex;
}
}
+
+
+bool8 sub_808D344(u8 a)
+{
+ switch(gMain.state)
+ {
+ case 0:
+ default:
+ if(gPaletteFade.active)
+ return 0;
+ //_0808D39E
+ SetVBlankCallback(NULL);
+ gUnknown_0202FFB4->unk64A = a;
+ sub_8091060(0);
+ REG_BG2VOFS = gUnknown_0202FFB4->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)
+ gUnknown_0202FFB4->unk64C_1 = 0;
+ else
+ gUnknown_0202FFB4->unk64C_1 = 1;
+ sub_808D640();
+ gMain.state = 1;
+ break;
+ case 1:
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 8;
+ LoadCompressedObjectPic(gUnknown_083A05CC);
+ 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)
+ sub_808D690(gUnknown_0202FFB4->unk612, gUnknown_0202FFB4->unk616);
+ sub_808E0CC(gUnknown_0202FFB4->unk60E, 0xE);
+ gUnknown_0202FFB4->unk650 = 0;
+ gUnknown_0202FFB4->unk654 = 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 = 0xF03;
+ REG_BG1CNT = 0xD01;
+ REG_BG0CNT = 0xC00;
+ REG_DISPCNT = 0x9F40;
+ gMain.state++;
+ break;
+ case 6:
+ if(!gPaletteFade.active)
+ {
+ gMain.state = 0;
+ return 1;
+ }
+ else
+ return 0;
+ }
+ return 0;
+}
+
+void sub_808D640(void)
+{
+ if(gUnknown_0202FFB4->unk64C_1)
+ LoadPalette(gUnknown_0839F67C + 0x2, 1, 0xBE);
+ else if(!sub_806912C())
+ LoadPalette(gPokedexMenu_Pal + 0x2, 1, 0xBE);
+ else
+ LoadPalette(gUnknown_0839F73C + 0x2, 1, 0xBE);
+}
+
+//Pokedex sorting function
+void sub_808D690(u8 a, u8 mode)
+{
+ u16 vars[3]; //I have no idea why three regular variables are stored in an array, but whatever.
+ s16 i;
+
+ gUnknown_0202FFB4->unk60C = 0;
+
+ switch(a)
+ {
+ default:
+ case 0:
+ vars[0] = 202;
+ vars[1] = 1;
+ break;
+ case 1:
+ if(sub_806912C())
+ {
+ vars[0] = 386;
+ vars[1] = 0;
+ }
+ else
+ {
+ vars[0] = 202;
+ vars[1] = a;
+ }
+ break;
+ }
+
+ switch(mode)
+ {
+ case 0:
+ {
+ if(vars[1])
+ {
+ for(i = 0; i < vars[0]; i++)
+ {
+ vars[2] = HoennToNationalOrder(i + 1);
+ gUnknown_0202FFB4->unk0[i].a = vars[2];
+ gUnknown_0202FFB4->unk0[i].seen = sub_8090D90(vars[2], 0);
+ gUnknown_0202FFB4->unk0[i].owned = sub_8090D90(vars[2], 1);
+ if(gUnknown_0202FFB4->unk0[i].seen)
+ gUnknown_0202FFB4->unk60C = i + 1;
+ }
+ }
+ else
+ {
+ bool32 r10;
+ s16 r5;
+
+ r10 = r5 = i = 0;
+ for(i = 0; i < vars[0]; i++)
+ {
+ vars[2] = i + 1;
+ if(sub_8090D90(vars[2], 0))
+ r10 = 1;
+ if(r10)
+ {
+ asm(""); //Needed to match for some reason
+ gUnknown_0202FFB4->unk0[r5].a = vars[2];
+ gUnknown_0202FFB4->unk0[r5].seen = sub_8090D90(vars[2], 0);
+ gUnknown_0202FFB4->unk0[r5].owned = sub_8090D90(vars[2], 1);
+ if(gUnknown_0202FFB4->unk0[r5].seen)
+ gUnknown_0202FFB4->unk60C = r5 + 1;
+ r5++;
+ }
+ }
+ }
+ break;
+ }
+ case 1:
+ for(i = 0; i < 411; i++)
+ {
+ vars[2] = gPokedexOrder_Alphabetical[i];
+
+ if(NationalToHoennOrder(vars[2]) <= vars[0] && sub_8090D90(vars[2], 0))
+ {
+ gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].a = vars[2];
+ gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].seen = 1;
+ gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].owned = sub_8090D90(vars[2], 1);
+ gUnknown_0202FFB4->unk60C++;
+ }
+ }
+ break;
+ case 2:
+ for(i = 385; i >= 0; i--)
+ {
+ vars[2] = gPokedexOrder_Weight[i];
+
+ if(NationalToHoennOrder(vars[2]) <= vars[0] && sub_8090D90(vars[2], 1))
+ {
+ gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].a = vars[2];
+ gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].seen = 1;
+ gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].owned = 1;
+ gUnknown_0202FFB4->unk60C++;
+ }
+ }
+ break;
+ case 3:
+ for(i = 0; i < 386; i++)
+ {
+ vars[2] = gPokedexOrder_Weight[i];
+
+ if(NationalToHoennOrder(vars[2]) <= vars[0] && sub_8090D90(vars[2], 1))
+ {
+ gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].a = vars[2];
+ gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].seen = 1;
+ gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].owned = 1;
+ gUnknown_0202FFB4->unk60C++;
+ }
+ }
+ break;
+ case 4:
+ for(i = 385; i >=0; i--)
+ {
+ vars[2] = gPokedexOrder_Height[i];
+
+ if(NationalToHoennOrder(vars[2]) <= vars[0] && sub_8090D90(vars[2], 1))
+ {
+ gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].a = vars[2];
+ gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].seen = 1;
+ gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].owned = 1;
+ gUnknown_0202FFB4->unk60C++;
+ }
+ }
+ break;
+ case 5:
+ for(i = 0; i < 386; i++)
+ {
+ vars[2] = gPokedexOrder_Height[i];
+
+ if(NationalToHoennOrder(vars[2]) <= vars[0] && sub_8090D90(vars[2], 1))
+ {
+ gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].a = vars[2];
+ gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].seen = 1;
+ gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].owned = 1;
+ gUnknown_0202FFB4->unk60C++;
+ }
+ }
+ break;
+ }
+ for(i = gUnknown_0202FFB4->unk60C; i < 386; i++)
+ {
+ gUnknown_0202FFB4->unk0[i].a |= 0xFFFF;
+ gUnknown_0202FFB4->unk0[i].seen = 0;
+ gUnknown_0202FFB4->unk0[i].owned = 0;
+ }
+}
+
+void sub_808DBE8(u8 a, u16 b, u16 c)
+{
+ switch(a)
+ {
+ case 0:
+ default:
+ {
+ u16 i;
+ s16 _b = b - 5;
+
+ for(i = 0; i <= 10; i++)
+ {
+ if((u16)_b > 385 || gUnknown_0202FFB4->unk0[_b].a == 0xFFFF)
+ sub_808E090(0x11, i * 2, c);
+ else
+ {
+ sub_808E090(0x11, i * 2, c);
+ if(gUnknown_0202FFB4->unk0[_b].seen)
+ {
+ sub_808DEB0(_b, 0x12, i * 2, c);
+ sub_808DF88(gUnknown_0202FFB4->unk0[_b].owned, 0x11, i * 2, c);
+ sub_808DFE4(gUnknown_0202FFB4->unk0[_b].a, 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:
+ {
+ s16 _b = b - 5;
+
+ if((u16)_b > 385 || gUnknown_0202FFB4->unk0[_b].a == 0xFFFF)
+ sub_808E090(0x11, gUnknown_0202FFB4->unk630 * 2, c);
+ else
+ {
+ sub_808E090(0x11, gUnknown_0202FFB4->unk630 * 2, c);
+ if(gUnknown_0202FFB4->unk0[_b].seen)
+ {
+ sub_808DEB0(_b, 0x12, gUnknown_0202FFB4->unk630 * 2, c);
+ sub_808DF88(gUnknown_0202FFB4->unk0[_b].owned, 0x11, gUnknown_0202FFB4->unk630 * 2, c);
+ sub_808DFE4(gUnknown_0202FFB4->unk0[_b].a, 0x17, gUnknown_0202FFB4->unk630 * 2);
+ }
+ else
+ {
+ sub_808DEB0(_b, 0x12, gUnknown_0202FFB4->unk630 * 2, c);
+ sub_808DF88(0, 0x11, gUnknown_0202FFB4->unk630 * 2, c);
+ sub_808DFE4(0, 0x17, gUnknown_0202FFB4->unk630 * 2);
+ }
+ }
+ break;
+ }
+ case 2:
+ {
+ s16 _b = b + 5;
+ u16 r2 = gUnknown_0202FFB4->unk630 + 10;
+
+ if(r2 > 15)
+ r2 -= 16;
+ if((u16)_b > 385 || gUnknown_0202FFB4->unk0[_b].a == 0xFFFF)
+ sub_808E090(0x11, r2 * 2, c);
+ else
+ {
+ sub_808E090(0x11, r2 * 2, c);
+ if(gUnknown_0202FFB4->unk0[_b].seen)
+ {
+ sub_808DEB0(_b, 0x12, r2 * 2, c);
+ sub_808DF88(gUnknown_0202FFB4->unk0[_b].owned, 0x11, r2 * 2, c);
+ sub_808DFE4(gUnknown_0202FFB4->unk0[_b].a, 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;
+ }
+ }
+}
+
+void sub_808DEB0(u16 a, u8 b, u8 c, u16 d)
+{
+ u8 text[4];
+ u16 unk[2];
+ u16 r7 = gUnknown_0202FFB4->unk0[a].a;
+
+ if(gUnknown_0202FFB4->unk612 == 0)
+ r7 = NationalToHoennOrder(r7);
+ unk[0] = 0x3FC;
+ unk[1] = 0x3FD;
+ text[0] = r7 / 100 + 0xA1;
+ text[1] = (r7 % 100) / 10 + 0xA1;
+ text[2] = (r7 % 100) % 10 + 0xA1;
+ text[3] = 0xFF;
+ *(u16 *)(VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0];
+ *(u16 *)(VRAM + 0x40 + d * 0x800 + c * 0x40 + b * 2) = unk[1];
+ MenuPrint(text, b - 15, c);
+}
+
+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 + 0x40 + d * 0x800 + c * 0x40 + b * 2) = unk[1];
+}
+
+#ifdef NONMATCHING
+//FixMe
+u8 sub_808DFE4(u16 a, u8 b, u8 c)
+{
+ u8 text[10];
+ u8 i;
+ u32 species;
+
+ for(i = 0; i < 10; i++)
+ text[i] = 0;
+ text[i] = EOS;
+ species = NationalPokedexNumToSpecies(a);
+ if(species)
+ {
+ for(i = 0; gSpeciesNames[species][i] != EOS && i < 10; i++)
+ text[i] = gSpeciesNames[species][i];
+ }
+ else
+ {
+ for(i = 0; i < 10; i++)
+ text[i] = 0xAE;
+ }
+ sub_80729D8(text, (b - 0x11) * 8 + 0xFC, c * 8, 0);
+}
+#else
+__attribute__((naked))
+u8 sub_808DFE4(u16 a, u8 b, u8 c)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ sub sp, 0xC\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ lsls r1, 24\n\
+ lsrs r5, r1, 24\n\
+ lsls r2, 24\n\
+ lsrs r6, r2, 24\n\
+ movs r4, 0\n\
+ movs r1, 0\n\
+_0808DFF8:\n\
+ mov r2, sp\n\
+ adds r0, r2, r4\n\
+ strb r1, [r0]\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0x9\n\
+ bls _0808DFF8\n\
+ adds r0, r2, r4\n\
+ movs r1, 0xFF\n\
+ strb r1, [r0]\n\
+ adds r0, r3, 0\n\
+ bl NationalPokedexNumToSpecies\n\
+ adds r3, r0, 0\n\
+ cmp r3, 0\n\
+ beq _0808E058\n\
+ movs r4, 0\n\
+ ldr r2, _0808E054\n\
+ movs r0, 0xB\n\
+ adds r1, r3, 0\n\
+ muls r1, r0\n\
+ adds r0, r1, r2\n\
+ ldrb r0, [r0]\n\
+ subs r5, 0x11\n\
+ lsls r6, 19\n\
+ cmp r0, 0xFF\n\
+ beq _0808E070\n\
+ adds r3, r1, 0\n\
+_0808E032:\n\
+ mov r0, sp\n\
+ adds r1, r0, r4\n\
+ adds r0, r4, r3\n\
+ adds r0, r2\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1]\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ adds r0, r4, r3\n\
+ adds r0, r2\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0xFF\n\
+ beq _0808E070\n\
+ cmp r4, 0x9\n\
+ bls _0808E032\n\
+ b _0808E070\n\
+ .align 2, 0\n\
+_0808E054: .4byte gSpeciesNames\n\
+_0808E058:\n\
+ movs r4, 0\n\
+ subs r5, 0x11\n\
+ lsls r6, 19\n\
+ movs r1, 0xAE\n\
+_0808E060:\n\
+ mov r2, sp\n\
+ adds r0, r2, r4\n\
+ strb r1, [r0]\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0x9\n\
+ bls _0808E060\n\
+_0808E070:\n\
+ lsls r1, r5, 27\n\
+ movs r0, 0xFC\n\
+ lsls r0, 24\n\
+ adds r1, r0\n\
+ lsrs r1, 24\n\
+ lsrs r2, r6, 16\n\
+ mov r0, sp\n\
+ movs r3, 0\n\
+ bl sub_80729D8\n\
+ adds r0, r4, 0\n\
+ add sp, 0xC\n\
+ pop {r4-r6}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_808E090(u8 a, u8 b, u16 c)
+{
+ u8 i;
+
+ for(i = 0; i < 12; i++)
+ {
+ *(u16 *)(VRAM + c * 0x800 + b * 64 + (a + i) * 2) = 0;
+ *(u16 *)(VRAM + 0x40 + c * 0x800 + b * 64 + (a + i) * 2) = 0;
+ }
+}
+
+void sub_808E0CC(u16 a, u16 b)
+{
+ u8 i;
+ u16 unk;
+ u8 spriteId;
+
+ for(i = 0; i < 4; i++)
+ gUnknown_0202FFB4->unk61E[i] |= 0xFFFF;
+ gUnknown_0202FFB4->unk626 = 0xFFFF;
+ sub_808DBE8(0, a, b);
+ REG_BG2VOFS = gUnknown_0202FFB4->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;
+ }
+ gUnknown_0202FFB4->unk630 = 0;
+ gUnknown_0202FFB4->unk632 = 0;
+}
+
+bool8 sub_808E208(u8 a, u8 b, u8 c)
+{
+ u16 i;
+ u8 foo;
+
+ if(gUnknown_0202FFB4->unk62E)
+ {
+ gUnknown_0202FFB4->unk62E--;
+ switch(a)
+ {
+ case 1:
+ for(i = 0; i < 4; i++)
+ {
+ if(gUnknown_0202FFB4->unk61E[i] != 0xFFFF)
+ gSprites[gUnknown_0202FFB4->unk61E[i]].data5 += b;
+ }
+ foo = 16 * (c - gUnknown_0202FFB4->unk62E) / c;
+ REG_BG2VOFS = gUnknown_0202FFB4->unk62D + gUnknown_0202FFB4->unk632 * 16 - foo;
+ gUnknown_0202FFB4->unk62C -= gUnknown_0202FFB4->unk628;
+ break;
+ case 2:
+ for(i = 0; i < 4; i++)
+ {
+ if(gUnknown_0202FFB4->unk61E[i] != 0xFFFF)
+ gSprites[gUnknown_0202FFB4->unk61E[i]].data5 -= b;
+ }
+ foo = 16 * (c - gUnknown_0202FFB4->unk62E) / c;
+ REG_BG2VOFS = gUnknown_0202FFB4->unk62D + gUnknown_0202FFB4->unk632 * 16 + foo;
+ gUnknown_0202FFB4->unk62C += gUnknown_0202FFB4->unk628;
+ break;
+ }
+ return 0;
+ }
+ //_0808E36C
+ else
+ {
+ REG_BG2VOFS = gUnknown_0202FFB4->unk62D + gUnknown_0202FFB4->unk630 * 16;
+ return 1;
+ }
+}
+
+void sub_808E398(u8 a, u16 b)
+{
+ u16 unk;
+ u8 spriteId;
+
+ gUnknown_0202FFB4->unk632 = gUnknown_0202FFB4->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 = 0xFFC0;
+ }
+ if(gUnknown_0202FFB4->unk630 > 0)
+ gUnknown_0202FFB4->unk630--;
+ else
+ gUnknown_0202FFB4->unk630 = 0xF;
+ 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(gUnknown_0202FFB4->unk630 <= 0xE)
+ gUnknown_0202FFB4->unk630++;
+ else
+ gUnknown_0202FFB4->unk630 = 0;
+ break;
+ }
+ }
+}
+
+/*
+u16 sub_808E48C(u16 a, u16 b)
+{
+ if((gMain.heldKeys & 0x40) || a == 0)
+ {
+ //_0808E4B6
+ if(gMain.heldKeys & 0x80)
+ {
+
+ }
+ //_0808E4CE
+ }
+ //_0808E5E4
+ else
+ {
+ sub_8091818(1, a, 0, gUnknown_0202FFB4->unk60C - 1);
+ sub_808E398(1, a);
+ sub_808DBE8(1, a, b);
+ PlaySE(0x6C);
+ }
+
+}
+*/