Match sub_8166BEC and do some cleanup

This commit is contained in:
Marcus Huderle
2019-03-23 10:41:09 -05:00
parent a5ee2c14fd
commit 511ff2f20f
2 changed files with 1302 additions and 1477 deletions
+5 -2
View File
@@ -1,6 +1,7 @@
#ifndef GUARD_MENU_SPECIALIZED_H
#define GUARD_MENU_SPECIALIZED_H
#include "sprite.h"
#include "player_pc.h"
#include "list_menu.h"
#include "pokemon.h"
@@ -37,9 +38,11 @@ void sub_81D1ED4(struct UnknownStruct_81D1ED4 *a0);
void sub_81D2108(struct UnknownStruct_81D1ED4 *arg0);
void sub_81D20AC(struct UnknownStruct_81D1ED4 *arg0);
void sub_81D2230(struct UnknownStruct_81D1ED4 *arg0);
void sub_81D3520(struct Sprite **);
bool8 sub_81D20BC(struct UnknownStruct_81D1ED4 *arg0);
void sub_81D3464(void *arg0);
void sub_81D3480(void *arg0, u8 arg1, u8 arg2);
void sub_81D354C(struct Sprite **);
void sub_81D3464(struct Sprite **arg0);
void sub_81D3480(struct Sprite **arg0, u8 arg1, u8 arg2);
void sub_81D2754(u8 *arg0, struct UnknownSubStruct_81D1ED4 *arg1);
void sub_81D1F84(struct UnknownStruct_81D1ED4 *arg0, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2);
void MoveRelearnerPrintText(u8 *str);
+34 -212
View File
@@ -46,15 +46,19 @@ struct UsePokeblockSubStruct
struct UsePokeblockStruct
{
/*0x0000*/ u8 field_0[0x7B0E];
/*0x0000*/ u8 field_0[0x7B06];
/*0x7B06*/ u8 field_7B06[7];
/*0x7B0E*/ u16 field_7B0E;
/*0x7B10*/ u8 field_7B10[0xC];
/*0x7B1C*/ u8 field_7B1C[0x13C];
/*0x7B10*/ u8 field_7B10;
/*0x7B11*/ u8 field_7B11[0xB];
/*0x7B1C*/ struct Sprite *field_7B1C[10];
/*0x7B44*/ struct Sprite *field_7B44[0x45];
/*0x7C58*/ struct UnknownStruct_81D1ED4 field_7C58;
/*0x7FB0*/ u8 unk7FB0[3];
/*0x7FB3*/ s8 unk7FB3;
/*0x7FB4*/ u8 filler7FB4[0x1C];
/*0x7FD0*/ struct UsePokeblockSubStruct info;
/*0x804C*/ u8 filler804C[0x20];
};
extern u16 gKeyRepeatStartDelay;
@@ -76,7 +80,6 @@ void sub_8167608(u8 arg0);
void sub_8167BA0(u16 arg0, u8 copyToVramMode);
void sub_8166634(void);
void sub_8167CA0(bool8);
extern void sub_81D3520(u8*);
void sub_8166BEC(void);
void sub_8166D44(void);
s8 sub_8166DE4(void);
@@ -92,7 +95,6 @@ extern void sub_81D2074(void);
void sub_81681F4(u8);
void sub_8166E24(void);
bool8 sub_8166EDC(void);
void sub_81D354C(u8*);
void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2);
void Pokeblock_MenuWindowTextPrint(const u8 *message);
void sub_8167184(struct Pokeblock *, struct Pokemon *);
@@ -145,7 +147,7 @@ EWRAM_DATA struct UsePokeblockStruct *gUnknown_0203BCAC = NULL;
// code
void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void))
{
gUnknown_0203BCAC = AllocZeroed(0x806C);
gUnknown_0203BCAC = AllocZeroed(sizeof(*gUnknown_0203BCAC));
gUnknown_0203BC90 = &gUnknown_0203BCAC->info;
gUnknown_0203BC90->pokeblock = pokeblock;
gUnknown_0203BC90->callback = callback;
@@ -155,7 +157,7 @@ void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void
void CB2_ReturnAndChooseMonToGivePokeblock(void)
{
gUnknown_0203BCAC = AllocZeroed(0x806C);
gUnknown_0203BCAC = AllocZeroed(sizeof(*gUnknown_0203BCAC));
gUnknown_0203BC90 = &gUnknown_0203BCAC->info;
gUnknown_0203BC90->pokeblock = gUnknown_0203BC98;
gUnknown_0203BC90->callback = gUnknown_0203BC94;
@@ -215,7 +217,7 @@ void sub_8166380(void)
switch (gUnknown_0203BC90->field_50)
{
case 0:
gUnknown_0203BCAC->field_0[0x7B10] = 0xFF;
gUnknown_0203BCAC->field_7B10 = 0xFF;
sub_81D1ED4(&gUnknown_0203BCAC->field_7C58);
gUnknown_0203BC90->field_50++;
break;
@@ -242,9 +244,7 @@ void sub_8166380(void)
break;
case 5:
if (!sub_8168328())
{
gUnknown_0203BC90->field_50++;
}
break;
case 6:
gKeyRepeatStartDelay = 20;
@@ -253,9 +253,7 @@ void sub_8166380(void)
break;
case 7:
if (!sub_8167930())
{
gUnknown_0203BC90->field_50++;
}
break;
case 8:
sub_8167608(0);
@@ -263,10 +261,8 @@ void sub_8166380(void)
gUnknown_0203BC90->field_50++;
break;
case 9:
if (!sub_81D312C(&gUnknown_0203BCAC->field_0[0x7B0E]))
{
if (!sub_81D312C(&gUnknown_0203BCAC->field_7B0E))
gUnknown_0203BC90->field_50++;
}
break;
case 10:
gUnknown_0203BC90->field_50++;
@@ -304,7 +300,7 @@ void sub_8166564(void)
switch (gUnknown_0203BC90->field_50)
{
case 0:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
SetVBlankCallback(sub_8166340);
ShowBg(0);
ShowBg(1);
@@ -315,11 +311,11 @@ void sub_8166564(void)
case 1:
if (!gPaletteFade.active)
{
sub_81D3464(&gUnknown_0203BCAC->field_7B1C);
sub_81D3464(gUnknown_0203BCAC->field_7B1C);
if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1)
{
u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->unk7FB3];
sub_81D3480(&gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10[0], var0);
sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0);
}
sub_816636C(sub_8166634);
@@ -338,14 +334,14 @@ void sub_8166634(void)
{
PlaySE(SE_SELECT);
sub_8167CA0(TRUE);
sub_81D3520(&gUnknown_0203BCAC->field_0[0x7B1C]);
sub_81D3520(gUnknown_0203BCAC->field_7B1C);
gUnknown_0203BC90->field_50 = 1;
}
else if (gMain.heldKeys & DPAD_DOWN)
{
PlaySE(SE_SELECT);
sub_8167CA0(FALSE);
sub_81D3520(&gUnknown_0203BCAC->field_0[0x7B1C]);
sub_81D3520(gUnknown_0203BCAC->field_7B1C);
gUnknown_0203BC90->field_50 = 1;
}
else if (gMain.newKeys & B_BUTTON)
@@ -357,15 +353,10 @@ void sub_8166634(void)
{
PlaySE(SE_SELECT);
if (gUnknown_0203BCAC->info.field_71 == gUnknown_0203BCAC->info.field_70 - 1)
{
gUnknown_0203BC90->field_50 = 3;
}
else
{
gUnknown_0203BC90->field_50 = 5;
}
}
break;
case 1:
var = gUnknown_0203BCAC->info.unk74();
@@ -421,7 +412,7 @@ void sub_816681C(void)
gPokeblockMonId = sub_81672A4(gUnknown_0203BCAC->info.field_71);
gUnknown_0203BC94 = gUnknown_0203BC90->callback;
gUnknown_0203BC98 = gUnknown_0203BC90->pokeblock;
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gUnknown_0203BC90->field_50++;
break;
case 1:
@@ -446,9 +437,9 @@ void sub_816681C(void)
void sub_81668F8(void)
{
u16 var;
switch (gUnknown_0203BC90->field_50)
{
u16 var;
case 0:
if (gUnknown_0203BCAC->info.field_71 != gPokeblockMonId)
{
@@ -463,14 +454,12 @@ void sub_81668F8(void)
case 1:
var = gUnknown_0203BCAC->info.unk74();
if (!var)
{
gUnknown_0203BC90->field_50 = var;
}
break;
case 2:
break;
case 3:
BlendPalettes(0xFFFFFFFF, 16, RGB(0, 0, 0));
BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
gUnknown_0203BC90->field_50++;
break;
case 4:
@@ -482,13 +471,13 @@ void sub_81668F8(void)
break;
case 5:
SetVBlankCallback(sub_8166340);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
gUnknown_0203BC90->field_50++;
break;
case 6:
if (!gPaletteFade.active)
{
sub_81D3464(&gUnknown_0203BCAC->field_0[0x7B1C]);
sub_81D3464(gUnknown_0203BCAC->field_7B1C);
sub_816636C(sub_8166A34);
SetMainCallback2(sub_816631C);
}
@@ -506,7 +495,7 @@ void sub_8166A34(void)
gUnknown_0203BC90->field_5c[0] = (u8) &gPlayerParty;
gUnknown_0203BCAC->info.field_71 = (u32) &gUnknown_0203BCAC->field_0[gUnknown_0203BCAC->info.field_71];
gUnknown_0203BC90->field_5c[0] = &gPlayerParty
sub_81D3520(&gUnknown_0203BCAC->field_0[0x7B1C]);
sub_81D3520(gUnknown_0203BCAC->field_7B1C);
/*gUnknown_0203BCAC->pokemon = &gPlayerParty[gUnknown_083DFEC4->unk893c[gUnknown_0203BCAC->field_0[0x7B1C]].partyIdx];
move_anim_execute();*/
gUnknown_0203BC90->field_50++;
@@ -740,7 +729,6 @@ _08166BDA:\n\
}
#endif
#ifdef NONMATCHING
void sub_8166BEC(void)
{
u8 i;
@@ -748,14 +736,12 @@ void sub_8166BEC(void)
switch (gUnknown_0203BC90->field_50)
{
case 0:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gUnknown_0203BC90->field_50++;
break;
case 1:
if (!gPaletteFade.active)
{
gUnknown_0203BC90->field_50 = 2;
}
break;
case 2:
gScanlineEffect.state = 3;
@@ -764,193 +750,30 @@ void sub_8166BEC(void)
break;
case 3:
SetMainCallback2(gUnknown_0203BC90->callback);
sub_81D354C(&gUnknown_0203BCAC->field_0[0x7B1C]);
sub_81D354C(gUnknown_0203BCAC->field_7B1C);
for (i = 0; i < 7; i++)
{
DestroySprite(&gSprites[gUnknown_0203BCAC->field_0[0x7B06 + i]]);
}
DestroySprite(&gSprites[gUnknown_0203BCAC->field_7B06[i]]);
FreeSpriteTilesByTag(0);
FreeSpriteTilesByTag(1);
FreeSpriteTilesByTag(0);
FreeSpriteTilesByTag(1);
FreeSpritePaletteByTag(0);
FreeSpritePaletteByTag(1);
for (i = 0; i < 2; i++)
{
DestroySprite(&gUnknown_0203BCAC->sprite7B44[i*4]);
}
DestroySprite(gUnknown_0203BCAC->field_7B44[i]);
if(gUnknown_0203BCAC->field_0[0x7B10] != 255)
{
DestroySprite(&gSprites[gUnknown_0203BCAC->field_0[0x7B10]]);
return;
}
if (gUnknown_0203BCAC->field_7B10 != 0xFF)
DestroySprite(&gSprites[gUnknown_0203BCAC->field_7B10]);
SetVBlankCallback(NULL);
Free(gUnknown_0203BCA0);
gUnknown_0203BCA0 = NULL;
Free(gUnknown_0203BCA4);
gUnknown_0203BCA0 = NULL;
Free(gUnknown_0203BCA8);
gUnknown_0203BCA8 = NULL;
Free(gUnknown_0203BCAC);
gUnknown_0203BCAC = NULL;
FREE_AND_SET_NULL(gUnknown_0203BCA0);
FREE_AND_SET_NULL(gUnknown_0203BCA4);
FREE_AND_SET_NULL(gUnknown_0203BCA8);
FREE_AND_SET_NULL(gUnknown_0203BCAC);
FreeAllWindowBuffers();
break;
}
}
#else
NAKED
void sub_8166BEC(void)
{
asm(".syntax unified\n\
push {r4-r6,lr}\n\
sub sp, 0x4\n\
ldr r4, =gUnknown_0203BC90\n\
ldr r0, [r4]\n\
adds r2, r0, 0\n\
adds r2, 0x50\n\
ldrb r1, [r2]\n\
cmp r1, 0x1\n\
beq _08166C28\n\
cmp r1, 0x1\n\
bgt _08166C0C\n\
cmp r1, 0\n\
beq _08166C16\n\
b _08166D18\n\
.pool\n\
_08166C0C:\n\
cmp r1, 0x2\n\
beq _08166C40\n\
cmp r1, 0x3\n\
beq _08166C5C\n\
b _08166D18\n\
_08166C16:\n\
movs r0, 0x1\n\
negs r0, r0\n\
str r1, [sp]\n\
movs r1, 0\n\
movs r2, 0\n\
movs r3, 0x10\n\
bl BeginNormalPaletteFade\n\
b _08166C4A\n\
_08166C28:\n\
ldr r0, =gPaletteFade\n\
ldrb r1, [r0, 0x7]\n\
movs r0, 0x80\n\
ands r0, r1\n\
cmp r0, 0\n\
bne _08166D18\n\
movs r0, 0x2\n\
strb r0, [r2]\n\
b _08166D18\n\
.pool\n\
_08166C40:\n\
ldr r1, =gScanlineEffect\n\
movs r0, 0x3\n\
strb r0, [r1, 0x15]\n\
bl ScanlineEffect_InitHBlankDmaTransfer\n\
_08166C4A:\n\
ldr r1, [r4]\n\
adds r1, 0x50\n\
ldrb r0, [r1]\n\
adds r0, 0x1\n\
strb r0, [r1]\n\
b _08166D18\n\
.pool\n\
_08166C5C:\n\
ldr r0, [r0, 0x4]\n\
bl SetMainCallback2\n\
ldr r0, =gUnknown_0203BCAC\n\
ldr r0, [r0]\n\
ldr r1, =0x00007b1c\n\
adds r0, r1\n\
bl sub_81D354C\n\
movs r4, 0\n\
_08166C70:\n\
ldr r5, =gUnknown_0203BCAC\n\
ldr r0, [r5]\n\
ldr r2, =0x00007b06\n\
adds r0, r2\n\
adds r0, r4\n\
ldrb r1, [r0]\n\
lsls r0, r1, 4\n\
adds r0, r1\n\
lsls r0, 2\n\
ldr r1, =gSprites\n\
adds r0, r1\n\
bl DestroySprite\n\
adds r0, r4, 0x1\n\
lsls r0, 24\n\
lsrs r4, r0, 24\n\
cmp r4, 0x6\n\
bls _08166C70\n\
movs r0, 0\n\
bl FreeSpriteTilesByTag\n\
movs r0, 0x1\n\
bl FreeSpriteTilesByTag\n\
movs r0, 0\n\
bl FreeSpritePaletteByTag\n\
movs r0, 0x1\n\
bl FreeSpritePaletteByTag\n\
movs r4, 0\n\
_08166CAE:\n\
ldr r0, [r5]\n\
lsls r1, r4, 2\n\
ldr r2, =0x00007b44\n\
adds r0, r2\n\
adds r0, r1\n\
ldr r0, [r0]\n\
bl DestroySprite\n\
adds r0, r4, 0x1\n\
lsls r0, 24\n\
lsrs r4, r0, 24\n\
cmp r4, 0x1\n\
bls _08166CAE\n\
ldr r6, =gUnknown_0203BCAC\n\
ldr r0, [r6]\n\
ldr r2, =0x00007b10\n\
adds r1, r0, r2\n\
ldrb r0, [r1]\n\
cmp r0, 0xFF\n\
beq _08166CE6\n\
adds r1, r0, 0\n\
lsls r0, r1, 4\n\
adds r0, r1\n\
lsls r0, 2\n\
ldr r1, =gSprites\n\
adds r0, r1\n\
bl DestroySprite\n\
_08166CE6:\n\
movs r0, 0\n\
bl SetVBlankCallback\n\
ldr r4, =gUnknown_0203BCA0\n\
ldr r0, [r4]\n\
bl Free\n\
movs r5, 0\n\
str r5, [r4]\n\
ldr r4, =gUnknown_0203BCA4\n\
ldr r0, [r4]\n\
bl Free\n\
str r5, [r4]\n\
ldr r4, =gUnknown_0203BCA8\n\
ldr r0, [r4]\n\
bl Free\n\
str r5, [r4]\n\
ldr r0, [r6]\n\
bl Free\n\
str r5, [r6]\n\
bl FreeAllWindowBuffers\n\
_08166D18:\n\
add sp, 0x4\n\
pop {r4-r6}\n\
pop {r0}\n\
bx r0\n\
.pool\n\
.syntax divided\n");
}
#endif
void sub_8166D44(void)
{
@@ -980,7 +803,6 @@ s8 sub_8166DE4(void)
rbox_fill_rectangle(2);
ClearWindowTilemap(2);
break;
}
return retval;
}