diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-01-20 10:00:19 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-01-20 10:00:19 -0500 |
commit | bc0fbb5d6ec21a7aaeab5f0392038844d0d23b25 (patch) | |
tree | 1d6ef273130588512e6351caf5d00c84b5408a29 /src | |
parent | 8a5386899adf1c70049a039b041529b0d287b96a (diff) |
through sub_81165E8
Diffstat (limited to 'src')
-rw-r--r-- | src/union_room.c | 139 |
1 files changed, 137 insertions, 2 deletions
diff --git a/src/union_room.c b/src/union_room.c index 389b13132..8874ea816 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -8,6 +8,12 @@ #include "script.h" #include "task.h" #include "union_room.h" +#include "constants/songs.h" + +#define sub_8018404(dest, arg1) ({ \ + StringCopy7(dest, (arg1).unk.playerName); \ + ConvertInternationalString(dest, (arg1).unk.field_0.unk_00.unk_00_0); \ +}) EWRAM_DATA union UnkUnion_Main gUnknown_203B05C = {}; EWRAM_DATA u8 gUnknown_203B058 = 0; @@ -18,6 +24,7 @@ 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_8116524(struct UnkStruct_Main0 * a0); u8 sub_81165E8(struct UnkStruct_Main0 * a0); void sub_8117990(void); u16 sub_8118658(const u8 *data); @@ -27,6 +34,9 @@ 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); +u32 sub_811A748(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1); +u8 sub_811A798(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2); +void sub_811A910(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id); extern const u8 *const gUnknown_8456C74[]; extern const struct WindowTemplate gUnknown_8456CD0; @@ -34,6 +44,7 @@ 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 struct UnkStruct_Shared gUnknown_8457034; extern const u8 gUnknown_84571B4[]; extern const u8 gUnknown_8457234[]; extern const u8 gUnknown_8457264[]; @@ -278,8 +289,7 @@ void sub_8115A68(u8 taskId) } 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); + sub_8018404(gStringVar1, data->field_0->arr[data->field_13 - 1]); StringExpandPlaceholders(gStringVar4, gUnknown_8457554); data->state = 13; } @@ -509,3 +519,128 @@ void sub_81163B0(u8 *dst, u8 caseId) break; } } + +bool8 sub_8116444(struct UnkStruct_Leader *data, u32 arg1, u32 arg2) +{ + switch (sub_8116524(data->field_0)) + { + case 1: + PlaySE(SE_PC_LOGIN); + RedrawListMenu(data->listTaskId); + sub_8018404(gStringVar2, data->field_0->arr[data->field_13]); + sub_8116244(gStringVar4, gUnknown_203B058); + data->state = arg1; + break; + case 2: + sub_80FB9E4(0, 0); + RedrawListMenu(data->listTaskId); + data->state = arg2; + return TRUE; + } + + return FALSE; +} + +void sub_81164C8(u8 arg0, s32 id, u8 arg2) +{ + struct UnkStruct_Leader *data = gUnknown_203B05C.leader; + u8 var = 0; + + switch (data->field_0->arr[id].field_1A_0) + { + case 1: + if (data->field_0->arr[id].field_1B != 0) + var = 2; + break; + case 2: + var = 1; + break; + } + + sub_811A910(arg0, 0, arg2, &data->field_0->arr[id], var, id); +} + +u8 sub_8116524(struct UnkStruct_Main0 *arg0) +{ + struct UnkStruct_Leader *data = gUnknown_203B05C.leader; + u8 ret = 0; + u8 i; + s32 id; + + for (i = 1; i < 5; i++) + { + u16 var = data->field_0->arr[i].field_1A_0; + if (var == 1) + { + id = sub_811A748(&data->field_0->arr[i], data->field_4->arr); + if (id != 0xFF) + { + data->field_0->arr[i].unk = data->field_4->arr[id].unk0; + data->field_0->arr[i].field_18 = var; + } + else + { + data->field_0->arr[i].field_1A_0 = 2; + ret = 2; + } + } + } + + for (id = 0; id < 4; id++) + sub_811A798(data->field_0->arr, &data->field_4->arr[id], 5); + + if (ret != 2) + { + for (id = 0; id < 5; id++) + { + if (data->field_0->arr[id].field_1B != 0) + ret = 1; + } + } + + return ret; +} + +u8 sub_81165E8(struct UnkStruct_Main0 *arg0) +{ + struct UnkStruct_Leader *data = gUnknown_203B05C.leader; + u8 copiedCount; + s32 i; + u8 ret; + + for (i = 0; i < 5; i++) + data->field_8->arr[i] = data->field_0->arr[i]; + + copiedCount = 0; + for (i = 0; i < 5; i++) + { + if (data->field_8->arr[i].field_1A_0 == 1) + { + data->field_0->arr[copiedCount] = data->field_8->arr[i]; + copiedCount++; + } + } + + ret = copiedCount; + for (; copiedCount < 5; copiedCount++) + { + data->field_0->arr[copiedCount].unk = gUnknown_8457034; + data->field_0->arr[copiedCount].field_18 = 0; + data->field_0->arr[copiedCount].field_1A_0 = 0; + data->field_0->arr[copiedCount].field_1A_1 = 0; + data->field_0->arr[copiedCount].field_1B = 0; + } + + for (i = 0; i < 5; i++) + { + if (data->field_0->arr[i].field_1A_0 != 1) + continue; + if (data->field_0->arr[i].field_1B != 0x40) + continue; + + ret = i; + break; + } + + return ret; +} |