summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/union_room.s366
-rw-r--r--src/union_room.c139
2 files changed, 137 insertions, 368 deletions
diff --git a/asm/union_room.s b/asm/union_room.s
index 0e8c06beb..1cd5db1e2 100644
--- a/asm/union_room.s
+++ b/asm/union_room.s
@@ -5,372 +5,6 @@
.text
- thumb_func_start sub_8116444
-sub_8116444: @ 8116444
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- adds r4, r2, 0
- ldr r0, [r5]
- bl sub_8116524
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08116460
- cmp r0, 0x2
- beq _081164AC
- b _081164C0
-_08116460:
- movs r0, 0x2
- bl PlaySE
- ldrb r0, [r5, 0x12]
- bl RedrawListMenu
- ldr r4, _081164A0 @ =gStringVar2
- ldrb r0, [r5, 0x13]
- lsls r0, 5
- ldr r1, [r5]
- adds r1, r0
- adds r1, 0x10
- adds r0, r4, 0
- bl StringCopy7
- ldr r1, [r5]
- ldrb r0, [r5, 0x13]
- lsls r0, 5
- adds r1, r0
- ldrb r1, [r1]
- lsls r1, 28
- lsrs r1, 28
- adds r0, r4, 0
- bl ConvertInternationalString
- ldr r0, _081164A4 @ =gStringVar4
- ldr r1, _081164A8 @ =gUnknown_203B058
- ldrb r1, [r1]
- bl sub_8116244
- strb r6, [r5, 0xC]
- b _081164C0
- .align 2, 0
-_081164A0: .4byte gStringVar2
-_081164A4: .4byte gStringVar4
-_081164A8: .4byte gUnknown_203B058
-_081164AC:
- movs r0, 0
- movs r1, 0
- bl sub_80FB9E4
- ldrb r0, [r5, 0x12]
- bl RedrawListMenu
- strb r4, [r5, 0xC]
- movs r0, 0x1
- b _081164C2
-_081164C0:
- movs r0, 0
-_081164C2:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8116444
-
- thumb_func_start sub_81164C8
-sub_81164C8: @ 81164C8
- push {r4-r6,lr}
- sub sp, 0x8
- adds r4, r1, 0
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r0, _081164F4 @ =gUnknown_203B05C
- ldr r3, [r0]
- movs r2, 0
- ldr r1, [r3]
- lsls r0, r4, 5
- adds r1, r0
- ldrb r0, [r1, 0x1A]
- lsls r0, 30
- lsrs r0, 30
- cmp r0, 0x1
- beq _081164F8
- cmp r0, 0x2
- beq _08116502
- b _08116504
- .align 2, 0
-_081164F4: .4byte gUnknown_203B05C
-_081164F8:
- ldrb r0, [r1, 0x1B]
- cmp r0, 0
- beq _08116504
- movs r2, 0x2
- b _08116504
-_08116502:
- movs r2, 0x1
-_08116504:
- lsls r0, r4, 5
- ldr r3, [r3]
- adds r3, r0
- str r2, [sp]
- lsls r0, r4, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0
- adds r2, r6, 0
- bl sub_811A910
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_81164C8
-
- thumb_func_start sub_8116524
-sub_8116524: @ 8116524
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- ldr r0, _0811657C @ =gUnknown_203B05C
- ldr r5, [r0]
- movs r0, 0
- mov r8, r0
- movs r3, 0x1
-_08116538:
- ldr r0, [r5]
- lsls r6, r3, 5
- adds r2, r0, r6
- ldrb r0, [r2, 0x1A]
- lsls r0, 30
- lsrs r0, 30
- mov r9, r0
- cmp r0, 0x1
- bne _08116598
- ldr r1, [r5, 0x4]
- adds r0, r2, 0
- str r3, [sp]
- bl sub_811A748
- adds r4, r0, 0
- ldr r3, [sp]
- cmp r4, 0xFF
- beq _08116580
- ldr r1, [r5]
- ldr r0, [r5, 0x4]
- lsls r2, r4, 3
- subs r2, r4
- lsls r2, 2
- adds r1, r6
- adds r0, r2
- ldm r0!, {r2,r4,r7}
- stm r1!, {r2,r4,r7}
- ldm r0!, {r2,r4,r7}
- stm r1!, {r2,r4,r7}
- ldr r0, [r5]
- adds r0, r6
- mov r1, r9
- strh r1, [r0, 0x18]
- b _08116598
- .align 2, 0
-_0811657C: .4byte gUnknown_203B05C
-_08116580:
- ldr r2, [r5]
- adds r2, r6
- ldrb r1, [r2, 0x1A]
- movs r4, 0x4
- negs r4, r4
- adds r0, r4, 0
- ands r1, r0
- movs r0, 0x2
- orrs r1, r0
- strb r1, [r2, 0x1A]
- movs r7, 0x2
- mov r8, r7
-_08116598:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x4
- bls _08116538
- movs r6, 0
- movs r4, 0x3
-_081165A6:
- ldr r0, [r5]
- ldr r1, [r5, 0x4]
- adds r1, r6
- movs r2, 0x5
- bl sub_811A798
- adds r6, 0x1C
- subs r4, 0x1
- ldr r0, [r5]
- cmp r4, 0
- bge _081165A6
- mov r1, r8
- cmp r1, 0x2
- beq _081165D8
- adds r1, r0, 0
- movs r4, 0x4
-_081165C6:
- ldrb r0, [r1, 0x1B]
- cmp r0, 0
- beq _081165D0
- movs r2, 0x1
- mov r8, r2
-_081165D0:
- adds r1, 0x20
- subs r4, 0x1
- cmp r4, 0
- bge _081165C6
-_081165D8:
- mov r0, r8
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8116524
-
- thumb_func_start sub_81165E8
-sub_81165E8: @ 81165E8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _081166BC @ =gUnknown_203B05C
- ldr r4, [r0]
- movs r3, 0
-_081165F8:
- ldr r0, [r4, 0x8]
- lsls r2, r3, 5
- ldr r1, [r4]
- adds r0, r2
- adds r1, r2
- ldm r1!, {r2,r5,r6}
- stm r0!, {r2,r5,r6}
- ldm r1!, {r2,r5,r7}
- stm r0!, {r2,r5,r7}
- ldm r1!, {r6,r7}
- stm r0!, {r6,r7}
- adds r3, 0x1
- ldr r0, [r4, 0x8]
- ldr r1, [r4]
- cmp r3, 0x4
- ble _081165F8
- movs r5, 0
- mov r8, r1
- mov r9, r0
- movs r3, 0x4
-_08116620:
- mov r1, r9
- ldrb r0, [r1, 0x1A]
- lsls r0, 30
- lsrs r0, 30
- cmp r0, 0x1
- bne _08116642
- lsls r0, r5, 5
- add r0, r8
- ldm r1!, {r2,r6,r7}
- stm r0!, {r2,r6,r7}
- ldm r1!, {r2,r6,r7}
- stm r0!, {r2,r6,r7}
- ldm r1!, {r2,r6}
- stm r0!, {r2,r6}
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_08116642:
- movs r7, 0x20
- add r9, r7
- subs r3, 0x1
- cmp r3, 0
- bge _08116620
- mov r10, r5
- cmp r5, 0x4
- bhi _081166A4
- ldr r0, _081166C0 @ =gUnknown_8457034
- mov r9, r0
- movs r1, 0
- mov r12, r1
- movs r2, 0x4
- negs r2, r2
- mov r8, r2
-_08116660:
- ldr r1, [r4]
- lsls r3, r5, 5
- adds r1, r3
- mov r0, r9
- ldm r0!, {r2,r6,r7}
- stm r1!, {r2,r6,r7}
- ldm r0!, {r2,r6,r7}
- stm r1!, {r2,r6,r7}
- ldr r0, [r4]
- adds r0, r3
- movs r1, 0
- strh r1, [r0, 0x18]
- ldr r1, [r4]
- adds r1, r3
- ldrb r2, [r1, 0x1A]
- mov r0, r8
- ands r0, r2
- strb r0, [r1, 0x1A]
- ldr r1, [r4]
- adds r1, r3
- ldrb r2, [r1, 0x1A]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1A]
- ldr r0, [r4]
- adds r0, r3
- mov r6, r12
- strb r6, [r0, 0x1B]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x4
- bls _08116660
-_081166A4:
- movs r3, 0
- ldr r1, [r4]
- ldrb r0, [r1, 0x1A]
- lsls r0, 30
- lsrs r0, 30
- cmp r0, 0x1
- bne _081166C4
- ldrb r0, [r1, 0x1B]
- cmp r0, 0x40
- bne _081166C4
- mov r10, r3
- b _081166E4
- .align 2, 0
-_081166BC: .4byte gUnknown_203B05C
-_081166C0: .4byte gUnknown_8457034
-_081166C4:
- adds r3, 0x1
- cmp r3, 0x4
- bgt _081166E4
- lsls r0, r3, 5
- adds r2, r1, r0
- ldrb r0, [r2, 0x1A]
- lsls r0, 30
- lsrs r0, 30
- cmp r0, 0x1
- bne _081166C4
- ldrb r0, [r2, 0x1B]
- cmp r0, 0x40
- bne _081166C4
- lsls r0, r3, 24
- lsrs r0, 24
- mov r10, r0
-_081166E4:
- mov r0, r10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_81165E8
-
thumb_func_start TryJoinLinkGroup
TryJoinLinkGroup: @ 81166F4
push {lr}
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;
+}