summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/link_rfu.s101
-rw-r--r--include/link_rfu.h8
-rw-r--r--src/link.c2
-rw-r--r--src/link_rfu.c34
4 files changed, 43 insertions, 102 deletions
diff --git a/asm/link_rfu.s b/asm/link_rfu.s
index e64801388..b46fb0f83 100644
--- a/asm/link_rfu.s
+++ b/asm/link_rfu.s
@@ -5,107 +5,6 @@
.text
- thumb_func_start sub_80109E8
-sub_80109E8: @ 80109E8
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r2, r0, 16
- movs r1, 0
- movs r5, 0x1
- ldr r4, =gUnknown_03005000+0xCDE
- movs r3, 0
-_080109F6:
- adds r0, r2, 0
- asrs r0, r1
- ands r0, r5
- cmp r0, 0
- beq _08010A04
- adds r0, r1, r4
- strb r3, [r0]
-_08010A04:
- adds r1, 0x1
- cmp r1, 0x3
- ble _080109F6
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80109E8
-
- thumb_func_start sub_8010A14
-sub_8010A14: @ 8010A14
- push {r4-r7,lr}
- adds r2, r0, 0
- ldr r1, =gUnknown_03005000
- ldrb r0, [r2, 0xF]
- strb r0, [r1, 0xD]
- movs r4, 0
- ldr r0, =0x00000cde
- adds r5, r1, r0
- adds r3, r2, 0
- adds r3, 0x10
-_08010A28:
- adds r0, r4, r5
- adds r1, r3, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r4, 0x1
- cmp r4, 0x3
- ble _08010A28
- adds r6, r2, 0
- ldr r5, =gLinkPlayers
- movs r4, 0x4
-_08010A3C:
- adds r0, r5, 0
- adds r1, r6, 0
- adds r1, 0x14
- ldm r1!, {r2,r3,r7}
- stm r0!, {r2,r3,r7}
- ldm r1!, {r2,r3,r7}
- stm r0!, {r2,r3,r7}
- ldr r1, [r1]
- str r1, [r0]
- adds r0, r5, 0
- bl sub_800B524
- adds r6, 0x1C
- adds r5, 0x1C
- subs r4, 0x1
- cmp r4, 0
- bge _08010A3C
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010A14
-
- thumb_func_start sub_8010A70
-sub_8010A70: @ 8010A70
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldr r0, =gUnknown_082ED7EC
- adds r1, r4, 0
- bl strcmp
- adds r5, r0, 0
- cmp r5, 0
- bne _08010A9C
- adds r0, r4, 0
- bl sub_8010A14
- mov r0, sp
- strh r5, [r0]
- ldr r2, =0x0100007e
- adds r1, r4, 0
- bl CpuSet
- movs r0, 0
- bl ResetBlockReceivedFlag
-_08010A9C:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8010A70
-
thumb_func_start sub_8010AAC
sub_8010AAC: @ 8010AAC
push {r4-r7,lr}
diff --git a/include/link_rfu.h b/include/link_rfu.h
index b14a889bc..a53b58d8b 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -203,6 +203,14 @@ struct UnkRfuStruct_2 {
/* 0xcee */ u8 unk_cee[4];
}; // size = 0xcf4
+struct UnkRfuStruct_8010A14 {
+ char unk_00[15];
+ u8 unk_0f;
+ u8 unk_10[4];
+ struct LinkPlayer unk_14[4];
+ u8 fill_84[0x78];
+};
+
// Exported RAM declarations
extern struct UnkRfuStruct_1 gUnknown_03004140;
diff --git a/src/link.c b/src/link.c
index 1e8332f57..65c5d3982 100644
--- a/src/link.c
+++ b/src/link.c
@@ -26,8 +26,8 @@
#include "sound.h"
#include "trade.h"
#include "battle.h"
-#include "link_rfu.h"
#include "link.h"
+#include "link_rfu.h"
// Static type declarations
diff --git a/src/link_rfu.c b/src/link_rfu.c
index b666ffc39..0dc253d77 100644
--- a/src/link_rfu.c
+++ b/src/link_rfu.c
@@ -4280,3 +4280,37 @@ void sub_801084C(u8 taskId)
break;
}
}
+
+void sub_80109E8(u16 a0)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if ((a0 >> i) & 1)
+ gUnknown_03005000.unk_cde[i] = 0;
+ }
+}
+
+void sub_8010A14(const struct UnkRfuStruct_8010A14 *a0)
+{
+ int i;
+ gUnknown_03005000.playerCount = a0->unk_0f;
+ for (i = 0; i < 4; i++)
+ gUnknown_03005000.unk_cde[i] = a0->unk_10[i];
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ {
+ gLinkPlayers[i] = a0->unk_14[i];
+ sub_800B524(gLinkPlayers + i);
+ }
+}
+
+void sub_8010A70(void *a0)
+{
+ if (strcmp(gUnknown_082ED7EC, a0) == 0)
+ {
+ sub_8010A14(a0);
+ CpuFill16(0, a0, sizeof(struct UnkRfuStruct_8010A14));
+ ResetBlockReceivedFlag(0);
+ }
+}