through sub_8017CB0

This commit is contained in:
PikalaxALT
2019-03-29 15:50:04 -04:00
parent ae0e70d7bb
commit 8fc51b0459
4 changed files with 242 additions and 538 deletions

View File

@@ -39,160 +39,17 @@
#include "field_player_avatar.h"
#include "strings.h"
#include "mevent.h"
#include "rom_8011DC0.h"
struct UnkStruct_Shared
{
struct UnkLinkRfuStruct_02022B14 field_0;
u8 needingPadding[2];
u8 playerName[PLAYER_NAME_LENGTH + 1];
};
struct UnkStruct_x1C
{
struct UnkStruct_Shared unk0;
u8 unk18:1;
};
struct UnkStruct_x20
{
struct UnkStruct_Shared unk;
u16 field_18;
u8 field_1A_0:2;
u8 field_1A_1:1;
u8 field_1B;
u8 field_1D;
u8 field_1E;
u8 field_1F;
};
struct UnkStruct_Main0
{
struct UnkStruct_x20 arr[8];
};
struct UnkStruct_Main4
{
struct UnkStruct_x1C arr[5];
};
struct UnkStruct_Main8
{
struct UnkStruct_x20 arr[5];
};
struct UnkStruct_Leader
{
struct UnkStruct_Main0 *field_0;
struct UnkStruct_Main4 *field_4;
struct UnkStruct_Main8 *field_8;
u8 state;
u8 textState;
u8 field_E;
u8 listWindowId;
u8 field_10;
u8 field_11;
u8 listTaskId;
u8 field_13;
u8 field_14;
u8 field_15;
u8 field_16;
u8 field_17;
u8 field_18;
u8 field_19;
u16 field_1A;
};
struct UnkStruct_Group
{
struct UnkStruct_Main0 *field_0;
struct UnkStruct_Main4 *field_4;
u8 state;
u8 textState;
u8 field_A;
u8 listWindowId;
u8 field_C;
u8 field_D;
u8 listTaskId;
u8 field_F;
u8 field_10;
u8 field_11;
u8 field_12;
u8 field_13;
u8 field_14;
u8 field_15;
};
struct UnkStruct_8019BA8
{
u8 field_0;
u8 field_1;
u8 field_2;
u8 field_3;
};
struct UnkStruct_URoom
{
struct UnkStruct_Main0 *field_0;
struct UnkStruct_Main4 *field_4;
struct UnkStruct_Main0 *field_8;
struct UnkStruct_Main4 *field_C;
u16 field_10;
u16 field_12;
u8 state;
u8 stateAfterPrint;
u8 textState;
u8 field_17;
u8 field_18;
u8 field_19;
u8 field_1A;
u8 field_1B;
u8 field_1C;
u8 field_1D;
u8 field_1E;
u8 field_1F;
u8 field_20;
u8 spriteIds[40];
u8 field_49;
u8 field_4A;
u16 field_4C[6];
u8 field_58[0x98 - 0x58];
u16 field_98;
u16 field_9A[3];
struct UnkStruct_8019BA8 field_A0[8];
};
union UnkUnion_Main
{
struct UnkStruct_Leader *leader;
struct UnkStruct_Group *group;
struct UnkStruct_URoom *uRoom;
};
struct TradeUnkStruct
{
u16 field_0;
u16 field_2;
u32 field_4;
u8 field_8;
u8 field_9;
u16 field_A;
u16 field_C;
u16 species;
u16 level;
u16 field_12;
u32 personality;
};
extern struct TradeUnkStruct gUnknown_02022C40;
extern struct UnkLinkRfuStruct_02022B14Substruct gUnknown_02022C38;
extern union UnkUnion_Main gUnknown_02022C30;
extern u8 gUnknown_02022C2C;
extern u8 gUnknown_02022C2D;
extern u8 gUnknown_02022C3E;
extern u16 gUnknown_02022C3C;
extern u8 gUnknown_02022C20[];
extern u8 gFieldLinkPlayerCount;
extern u8 gLocalLinkPlayerId;
EWRAM_DATA u8 gUnknown_02022C20[12] = {};
EWRAM_DATA u8 gUnknown_02022C2C = 0;
EWRAM_DATA u8 gUnknown_02022C2D = 0;
EWRAM_DATA union UnkUnion_Main gUnknown_02022C30 = {};
EWRAM_DATA u32 gFiller_02022C34 = 0;
EWRAM_DATA struct UnkLinkRfuStruct_02022B14Substruct gUnknown_02022C38 = {};
EWRAM_DATA u16 gUnknown_02022C3C = 0;
EWRAM_DATA u8 gUnknown_02022C3E = 0;
EWRAM_DATA struct TradeUnkStruct gUnknown_02022C40 = {};
// IWRAM vars
IWRAM_DATA struct UnkStruct_Leader *gUnknown_03000DA0;
@@ -268,7 +125,7 @@ void sub_801818C(bool32 arg0);
void sub_801A3D0(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2);
s32 sub_8017178(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate);
s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6);
s32 sub_8017CB0(struct UnkStruct_Main0 * arg);
s32 sub_8017CB0(struct UnkStruct_x20 * arg, s32 arg1);
bool32 sub_8018024(void);
u32 sub_8017984(s32 arg0);
void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2);
@@ -1326,7 +1183,7 @@ const u8 gUnknown_082F0530[] = {
};
// code
void nullsub_89(void)
void nullsub_89(u8 taskId)
{
}
@@ -4692,7 +4549,6 @@ s32 sub_8017178(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTe
return -1;
}
#ifdef NONMATCHING
s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6)
{
s32 input;
@@ -4728,7 +4584,7 @@ s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTempl
}
else
{
r4 = sub_8017CB0(arg6);
r4 = sub_8017CB0(arg6->arr, input);
if (r4 >= 0)
{
DestroyListMenuTask(*arg2, NULL, NULL);
@@ -4748,138 +4604,6 @@ s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTempl
return -1;
}
#else
NAKED
s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r10\n"
"\tmov r6, r9\n"
"\tmov r5, r8\n"
"\tpush {r5-r7}\n"
"\tadds r5, r0, 0\n"
"\tadds r6, r1, 0\n"
"\tmov r10, r2\n"
"\tmov r9, r3\n"
"\tldrb r4, [r5]\n"
"\tcmp r4, 0x1\n"
"\tbeq _0801730C\n"
"\tcmp r4, 0x1\n"
"\tbgt _080172C2\n"
"\tcmp r4, 0\n"
"\tbeq _080172C8\n"
"\tb _0801739C\n"
"_080172C2:\n"
"\tcmp r4, 0x2\n"
"\tbeq _0801731C\n"
"\tb _0801739C\n"
"_080172C8:\n"
"\tldr r0, =gUnknown_082F0344\n"
"\tbl sub_8017118\n"
"\tmov r1, r9\n"
"\tstrb r0, [r1]\n"
"\tldr r0, [sp, 0x20]\n"
"\tbl AddWindow\n"
"\tstrb r0, [r6]\n"
"\tldrb r0, [r6]\n"
"\tmovs r1, 0\n"
"\tbl DrawStdWindowFrame\n"
"\tldr r0, =gMultiuseListMenuTemplate\n"
"\tadds r2, r0, 0\n"
"\tldr r1, [sp, 0x24]\n"
"\tldm r1!, {r3,r4,r7}\n"
"\tstm r2!, {r3,r4,r7}\n"
"\tldm r1!, {r3,r4,r7}\n"
"\tstm r2!, {r3,r4,r7}\n"
"\tldrb r1, [r6]\n"
"\tstrb r1, [r0, 0x10]\n"
"\tmovs r1, 0\n"
"\tmovs r2, 0x1\n"
"\tbl ListMenuInit\n"
"\tmov r1, r10\n"
"\tstrb r0, [r1]\n"
"\tb _08017314\n"
"\t.pool\n"
"_0801730C:\n"
"\tldrb r0, [r6]\n"
"\tmovs r1, 0x1\n"
"\tbl CopyWindowToVram\n"
"_08017314:\n"
"\tldrb r0, [r5]\n"
"\tadds r0, 0x1\n"
"\tstrb r0, [r5]\n"
"\tb _0801739C\n"
"_0801731C:\n"
"\tmov r3, r10\n"
"\tldrb r0, [r3]\n"
"\tbl ListMenu_ProcessInput\n"
"\tadds r1, r0, 0\n"
"\tldr r0, =gMain\n"
"\tldrh r2, [r0, 0x2E]\n"
"\tmovs r0, 0x3\n"
"\tands r0, r2\n"
"\tcmp r0, 0\n"
"\tbeq _0801739C\n"
"\tcmp r1, 0x8\n"
"\tbeq _0801733E\n"
"\tands r4, r2\n"
"\tmov r8, r4\n"
"\tcmp r4, 0\n"
"\tbeq _08017368\n"
"_0801733E:\n"
"\tmov r4, r10\n"
"\tldrb r0, [r4]\n"
"\tmovs r1, 0\n"
"\tmovs r2, 0\n"
"\tbl DestroyListMenuTask\n"
"\tldrb r0, [r6]\n"
"\tbl RemoveWindow\n"
"\tmov r7, r9\n"
"\tldrb r0, [r7]\n"
"\tbl sub_8017168\n"
"\tmovs r0, 0\n"
"\tstrb r0, [r5]\n"
"\tmovs r0, 0x2\n"
"\tnegs r0, r0\n"
"\tb _080173A0\n"
"\t.pool\n"
"_08017368:\n"
"\tldr r0, [sp, 0x28]\n"
"\tbl sub_8017CB0\n"
"\tadds r4, r0, 0\n"
"\tcmp r4, 0\n"
"\tblt _08017396\n"
"\tmov r1, r10\n"
"\tldrb r0, [r1]\n"
"\tmovs r1, 0\n"
"\tmovs r2, 0\n"
"\tbl DestroyListMenuTask\n"
"\tldrb r0, [r6]\n"
"\tbl RemoveWindow\n"
"\tmov r3, r9\n"
"\tldrb r0, [r3]\n"
"\tbl sub_8017168\n"
"\tmov r7, r8\n"
"\tstrb r7, [r5]\n"
"\tadds r0, r4, 0\n"
"\tb _080173A0\n"
"_08017396:\n"
"\tmovs r0, 0x7\n"
"\tbl PlaySE\n"
"_0801739C:\n"
"\tmovs r0, 0x1\n"
"\tnegs r0, r0\n"
"_080173A0:\n"
"\tpop {r3-r5}\n"
"\tmov r8, r3\n"
"\tmov r9, r4\n"
"\tmov r10, r5\n"
"\tpop {r4-r7}\n"
"\tpop {r1}\n"
"\tbx r1");
}
#endif
void sub_80173B0(void)
{
FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0);
@@ -5212,3 +4936,83 @@ s32 sub_80179D4(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender
return 0;
}
}
void nullsub_14(u8 windowId, s32 itemId, u8 y)
{
}
void sub_8017B3C(u8 arg0, u8 arg1, struct UnkLinkRfuStruct_02022B14 * arg2, const u8 * str, u8 arg4)
{
u8 sp8[4];
u16 r8 = arg2->species;
u8 r7 = arg2->type;
u8 r9 = arg2->unk_0b_1;
sub_80173E0(arg0, 1, str, 8, arg1, arg4);
if (r8 == SPECIES_EGG)
{
sub_80173E0(arg0, 1, gUnknown_082EF7D0, 0x44, arg1, arg4);
}
else
{
blit_move_info_icon(arg0, r7 + 1, 0x44, arg1);
sub_80173E0(arg0, 1, gSpeciesNames[r8], 0x76, arg1, arg4);
ConvertIntToDecimalStringN(sp8, r9, STR_CONV_MODE_RIGHT_ALIGN, 3);
sub_80173E0(arg0, 1, sp8, 0xC6, arg1, arg4);
}
}
void sub_8017BE8(u8 windowId, s32 itemId, u8 y)
{
struct UnkStruct_Leader *leader = gUnknown_02022C30.leader;
struct UnkLinkRfuStruct_02022B14 *rfu;
s32 i, j;
u8 sp4[11];
if (itemId == -3 && y == gUnknown_082F03A4.upText_Y)
{
rfu = sub_800F7DC();
if (rfu->species != SPECIES_NONE)
{
sub_8017B3C(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5);
}
}
else
{
j = 0;
for (i = 0; i < 8; i++)
{
if (leader->field_0->arr[i].field_1A_0 == 1 && leader->field_0->arr[i].unk.field_0.species != SPECIES_NONE)
{
j++;
}
if (j == itemId + 1)
{
sub_8018404(sp4, &leader->field_0->arr[i]);
sub_8017B3C(windowId, y, &leader->field_0->arr[i].unk.field_0, sp4, 6);
break;
}
}
}
}
s32 sub_8017CB0(struct UnkStruct_x20 * arg, s32 arg1)
{
s32 i;
s32 j = 0;
for (i = 0; i < 8; i++)
{
if (arg[i].field_1A_0 == 1 && arg[i].unk.field_0.species != SPECIES_NONE)
{
j++;
}
if (j == arg1 + 1)
{
return i;
}
}
return -1;
}