diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-01-20 09:09:02 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-01-20 09:09:02 -0500 |
commit | cedebf15ee3595228d6fa212b74e1c5aa6fac3f1 (patch) | |
tree | 0026a3177a0ce05d81abc14c474bafbdbf380fe9 /src | |
parent | 44337a41dbfcc4d2fe5f1e22cd87769a27c006c9 (diff) |
sub_8115A68
Diffstat (limited to 'src')
-rw-r--r-- | src/link_rfu_3.c | 2 | ||||
-rw-r--r-- | src/union_room.c | 330 |
2 files changed, 330 insertions, 2 deletions
diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 87197f57f..2e09dc0a0 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -681,7 +681,7 @@ bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx) return retVal; } -void sub_80FCD50(struct GFtgtGname *gname, u8 *uname) +void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *gname, u8 *uname) { memcpy(gname, &gHostRFUtgtGnameBuffer, RFU_GAME_NAME_LENGTH); memcpy(uname, gHostRFUtgtUnameBuffer, RFU_USER_NAME_LENGTH); diff --git a/src/union_room.c b/src/union_room.c index 070c43a09..fd59ded3e 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1,21 +1,49 @@ #include "global.h" #include "gflib.h" #include "event_data.h" +#include "link.h" #include "link_rfu.h" +#include "list_menu.h" +#include "new_menu_helpers.h" +#include "script.h" #include "task.h" #include "union_room.h" EWRAM_DATA union UnkUnion_Main gUnknown_203B05C = {}; +EWRAM_DATA u8 gUnknown_203B058 = 0; +EWRAM_DATA u8 gUnknown_203B059 = 0; IWRAM_DATA struct UnkStruct_Leader *gUnknown_3002024; void sub_8115A68(u8 taskId); +void sub_81161E4(struct UnkStruct_Leader * leader); +bool8 sub_8116444(struct UnkStruct_Leader * leader, u32 a1, u32 a2); +u8 sub_81165E8(struct UnkStruct_Main0 * a0); +void sub_8117990(void); u16 sub_8118658(const u8 *data); +u8 sub_811A054(struct UnkStruct_Main4 *arg0, u32 arg1); +bool8 sub_811A0F8(u8 *textState, const u8 *str); +s8 sub_811A14C(u8 *dest, bool32 arg1); void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); +void sub_811A5E4(struct UnkStruct_x20 *arg0, u8 count); +void sub_811A650(struct UnkStruct_Main4 *arg0, u8 count); -extern const u8 *const gUnknown_845742C[][5]; +extern const u8 *const gUnknown_8456C74[]; +extern const struct WindowTemplate gUnknown_8456CD0; +extern const u32 gUnknown_8456CD8[]; +extern const struct WindowTemplate gUnknown_8456CFC; +extern const struct WindowTemplate gUnknown_8456D04; +extern const struct ListMenuTemplate gUnknown_8456D34; extern const u8 gUnknown_84571B4[]; extern const u8 gUnknown_8457234[]; +extern const u8 gUnknown_8457264[]; +extern const u8 gUnknown_845747C[]; +extern const u8 gUnknown_8457514[]; +extern const u8 gUnknown_8457530[]; +extern const u8 gUnknown_8457554[]; +extern const u8 gUnknown_8457610[]; +extern const u8 *const gUnknown_845767C[]; +extern const u8 *const gUnknown_845742C[][5]; void sub_811586C(u8 windowId, u8 arg1, u8 stringId) { @@ -77,3 +105,303 @@ void TryBecomeLinkLeader(void) dataPtr->textState = 0; gSpecialVar_Result = 0; } + +void sub_8115A68(u8 taskId) +{ + u32 id, val; + struct UnkStruct_Leader *data = gUnknown_203B05C.leader; + + switch (data->state) + { + case 0: + gUnknown_203B058 = gUnknown_8456CD8[gSpecialVar_0x8004]; + gUnknown_203B059 = gUnknown_8456CD8[gSpecialVar_0x8004] >> 8; + sub_80FAF58(gUnknown_203B058, 0, 0); + sub_800B1F4(); + OpenLink(); + sub_80FBB8C(gUnknown_203B059 & 0xF); + data->state = 3; + break; + case 3: + data->field_4 = AllocZeroed(0x70); + data->field_0 = AllocZeroed(0xA0); + data->field_8 = AllocZeroed(0xA0); + sub_811A650(data->field_4, 4); + sub_811A5E4(data->field_0->arr, 5); + LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.field_0, data->field_0->arr[0].unk.playerName); + data->field_0->arr[0].field_18 = 0; + data->field_0->arr[0].field_1A_0 = 1; + data->field_0->arr[0].field_1A_1 = 0; + data->field_0->arr[0].field_1B = 0; + data->field_17 = sub_811A054(data->field_4, 0xFF); + data->field_10 = AddWindow(&gUnknown_8456CD0); + data->listWindowId = AddWindow(&gUnknown_8456CFC); + data->field_11 = AddWindow(&gUnknown_8456D04); + + FillWindowPixelBuffer(data->field_10, PIXEL_FILL(2)); + sub_811A444(data->field_10, 0, gUnknown_845747C, 8, 2, 4); + PutWindowTilemap(data->field_10); + CopyWindowToVram(data->field_10, 2); + + DrawStdWindowFrame(data->listWindowId, FALSE); + gMultiuseListMenuTemplate = gUnknown_8456D34; + gMultiuseListMenuTemplate.windowId = data->listWindowId; + data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + + DrawStdWindowFrame(data->field_11, FALSE); + PutWindowTilemap(data->field_11); + CopyWindowToVram(data->field_11, 2); + + CopyBgTilemapBufferToVram(0); + data->field_13 = 1; + data->state = 4; + break; + case 4: + StringCopy(gStringVar1, gUnknown_8456C74[gUnknown_203B058]); + if ((gUnknown_203B059 >> 4) != 0) + { + if (data->field_13 > (gUnknown_203B059 >> 4) - 1 && (gUnknown_203B059 & 0xF) != 0) + StringExpandPlaceholders(gStringVar4, gUnknown_8457264); + else + StringExpandPlaceholders(gStringVar4, gUnknown_8457234); + } + else + { + sub_811599C(gStringVar4, gUnknown_203B058); + } + + sub_811586C(data->field_11, gUnknown_203B059, data->field_13); + data->state = 5; + break; + case 5: + if (sub_811A0F8(&data->textState, gStringVar4)) + data->state = 6; + break; + case 6: + sub_8116444(data, 7, 10); + if (gMain.newKeys & B_BUTTON) + { + if (data->field_13 == 1) + data->state = 23; + else if ((gUnknown_203B059 & 0xF0) != 0) + data->state = 30; + else + data->state = 19; + } + if ((gUnknown_203B059 >> 4) != 0 + && data->field_13 > (gUnknown_203B059 >> 4) - 1 + && (gUnknown_203B059 & 0xF) != 0 + && sub_80FC1CC() + && gMain.newKeys & START_BUTTON) + { + data->state = 15; + sub_80F8F5C(); + } + if (data->state == 6 && sub_80FA5D4()) + { + data->state = 9; + } + break; + case 9: + if (!sub_80FA5D4()) + { + data->state = 6; + data->field_13 = sub_81165E8(data->field_0); + } + break; + case 10: + id = ((gUnknown_203B058 & 0xF) == 2) ? 1 : 0; + if (sub_811A0F8(&data->textState, gUnknown_845767C[id])) + { + data->field_13 = sub_81165E8(data->field_0); + RedrawListMenu(data->listTaskId); + data->state = 4; + } + break; + case 29: + id = ((gUnknown_203B059 & 0xF) == 2) ? 0 : 1; + if (sub_811A0F8(&data->textState, gUnknown_845767C[id])) + { + data->state = 21; + } + break; + case 7: + if (sub_811A0F8(&data->textState, gStringVar4)) + { + data->state = 11; + } + break; + case 11: + switch (sub_811A14C(&data->textState, sub_80FA634(sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName))) + { + case 0: + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); + data->field_19 = 5; + sub_80FA670(5, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + data->state = 12; + break; + case 1: + case -1: + data->field_19 = 6; + sub_80FA670(6, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + data->state = 12; + break; + case -3: + data->state = 9; + break; + } + break; + case 12: + val = sub_80FA6FC(sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + if (val == 1) + { + if (data->field_19 == 5) + { + data->field_0->arr[data->field_13].field_1B = 0; + RedrawListMenu(data->listTaskId); + data->field_13++; + if (data->field_13 == (gUnknown_203B059 & 0xF)) + { + if ((gUnknown_203B059 & 0xF0) != 0 || data->field_13 == 4) + { + data->state = 15; + } + else + { + StringCopy7(gStringVar1, data->field_0->arr[data->field_13 - 1].unk.playerName); + ConvertInternationalString(gStringVar1, data->field_0->arr[data->field_13 - 1].unk.field_0.unk_00.unk_00_0); + StringExpandPlaceholders(gStringVar4, gUnknown_8457554); + data->state = 13; + } + + sub_80F8F5C(); + sub_811586C(data->field_11, gUnknown_203B059, data->field_13); + } + else + { + data->state = 4; + } + } + else + { + sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId)); + data->field_0->arr[data->field_13].field_1A_0 = 0; + sub_81165E8(data->field_0); + RedrawListMenu(data->listTaskId); + data->state = 4; + } + + data->field_19 = 0; + } + else if (val == 2) + { + sub_80FB9E4(0, 0); + data->state = 4; + } + break; + case 13: + if (sub_811A0F8(&data->textState, gStringVar4)) + data->state = 14; + break; + case 14: + if (++data->field_E > 120) + data->state = 17; + break; + case 15: + if (sub_811A0F8(&data->textState, gUnknown_8457514)) + data->state = 16; + break; + case 16: + switch (sub_811A14C(&data->textState, FALSE)) + { + case 0: + data->state = 17; + break; + case 1: + case -1: + if ((gUnknown_203B059 & 0xF0) != 0) + data->state = 30; + else + data->state = 19; + break; + } + break; + case 19: + if (sub_811A0F8(&data->textState, gUnknown_8457530)) + data->state = 20; + break; + case 20: + switch (sub_811A14C(&data->textState, FALSE)) + { + case 0: + data->state = 23; + break; + case 1: + case -1: + if ((gUnknown_203B059 & 0xF0) != 0) + data->state = 15; + else if (data->field_13 == (gUnknown_203B059 & 0xF)) + data->state = 15; + else + data->state = 4; + break; + } + break; + case 17: + if (!sub_8116444(data, 7, 23)) + data->state = 18; + break; + case 18: + if (sub_80F8F40()) + { + if (sub_80F8F7C(FALSE)) + { + data->state = 26; + } + } + else + { + data->state = 29; + data->textState = 0; + } + break; + case 30: + if (sub_811A0F8(&data->textState, gUnknown_8457610)) + data->state = 23; + break; + case 21: + case 23: + DestroyWirelessStatusIndicatorSprite(); + sub_80F8DC0(); + sub_81161E4(data); + data->state++; + break; + case 24: + EnableBothScriptContexts(); + DestroyTask(taskId); + gSpecialVar_Result = 5; + break; + case 22: + EnableBothScriptContexts(); + DestroyTask(taskId); + gSpecialVar_Result = 8; + break; + case 26: + if (sub_80FBA00()) + { + data->state = 29; + } + else + { + if (gReceivedRemoteLinkPlayers != 0) + { + sub_80FAFE0(1); + sub_8117990(); + sub_81161E4(data); + DestroyTask(taskId); + } + } + break; + } +} |