diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-03-29 15:50:04 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-03-29 15:50:04 -0400 |
commit | 8fc51b045941324c210096ccdbd385f7bfb0f6a6 (patch) | |
tree | de08c37e3e99ea2d3176a940ed3d60a2796a15c6 /src | |
parent | ae0e70d7bb17bd7da4e72e2133bad79ab59fa5e7 (diff) |
through sub_8017CB0
Diffstat (limited to 'src')
-rw-r--r-- | src/union_room.c | 384 |
1 files changed, 94 insertions, 290 deletions
diff --git a/src/union_room.c b/src/union_room.c index a4a728a3b..fdd76221f 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -39,160 +39,17 @@ #include "field_player_avatar.h" #include "strings.h" #include "mevent.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; +#include "rom_8011DC0.h" + +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; +} |