From c906978692e9663ecea16f2dcc01abcd9f2ef765 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 29 Nov 2017 23:58:48 -0500 Subject: [PATCH] through sub_800D294; fix sub_800CF34 --- asm/link_rfu.s | 135 ---------------- include/librfu.h | 12 +- src/link_rfu.c | 394 ++++++++++------------------------------------- 3 files changed, 89 insertions(+), 452 deletions(-) diff --git a/asm/link_rfu.s b/asm/link_rfu.s index 738ed91b9..bbf490508 100644 --- a/asm/link_rfu.s +++ b/asm/link_rfu.s @@ -5,141 +5,6 @@ .text - thumb_func_start sub_800D20C -sub_800D20C: @ 800D20C - push {r4,r5,lr} - ldr r5, =gUnknown_03004140 - ldrb r0, [r5, 0x4] - cmp r0, 0xF - bne _0800D258 - ldr r1, =gUnknown_03007880 - ldrb r2, [r5, 0x10] - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, 0x26 - bne _0800D258 - movs r4, 0 - strb r4, [r5, 0x5] - strb r4, [r5, 0x4] - movs r0, 0x4 - adds r1, r2, 0 - bl rfu_clearSlot - adds r2, r5, 0 - adds r2, 0x24 - movs r1, 0x1 - ldrb r0, [r5, 0x10] - lsls r1, r0 - ldrb r0, [r2] - bics r0, r1 - strb r0, [r2] - ldrb r0, [r5, 0x10] - lsls r0, 1 - adds r1, r5, 0 - adds r1, 0x28 - adds r0, r1 - strh r4, [r0] - movs r0, 0x24 - movs r1, 0 - bl sub_800D30C -_0800D258: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_800D20C - - thumb_func_start sub_800D268 -sub_800D268: @ 800D268 - push {lr} - ldr r1, =gUnknown_03004140 - ldrb r0, [r1, 0x6] - cmp r0, 0 - bne _0800D28C - ldrb r0, [r1, 0xA] - cmp r0, 0x1 - bne _0800D28C - ldrb r0, [r1, 0x4] - strb r0, [r1, 0x11] - ldrb r0, [r1, 0x5] - strb r0, [r1, 0x12] - movs r0, 0x10 - strb r0, [r1, 0x4] - movs r0, 0x11 - strb r0, [r1, 0x5] - movs r0, 0x2 - strb r0, [r1, 0xA] -_0800D28C: - pop {r0} - bx r0 - .pool - thumb_func_end sub_800D268 - - thumb_func_start sub_800D294 -sub_800D294: @ 800D294 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r6, 0 - movs r5, 0 - ldr r1, =gUnknown_03007890 - ldr r0, [r1] - ldrb r0, [r0, 0x8] - cmp r6, r0 - bcs _0800D2F0 - mov r8, r0 - ldr r0, =gUnknown_03004140 - mov r10, r0 - mov r9, r1 -_0800D2B4: - mov r1, r10 - ldr r3, [r1, 0x20] - ldrh r2, [r3] - adds r0, r5, 0x1 - mov r12, r0 - ldr r1, =0x0000ffff - cmp r2, r1 - beq _0800D2E6 - mov r1, r9 - ldr r0, [r1] - lsls r1, r5, 5 - adds r0, r1 - ldrh r4, [r0, 0x18] - ldr r7, =0x0000ffff - movs r1, 0x1 - lsls r1, r5 -_0800D2D4: - cmp r4, r2 - bne _0800D2DE - orrs r6, r1 - lsls r0, r6, 24 - lsrs r6, r0, 24 -_0800D2DE: - adds r3, 0x2 - ldrh r2, [r3] - cmp r2, r7 - bne _0800D2D4 -_0800D2E6: - mov r1, r12 - lsls r0, r1, 24 - lsrs r5, r0, 24 - cmp r5, r8 - bcc _0800D2B4 -_0800D2F0: - adds r0, r6, 0 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .pool - thumb_func_end sub_800D294 - thumb_func_start sub_800D30C sub_800D30C: @ 800D30C push {r4,lr} diff --git a/include/librfu.h b/include/librfu.h index 15c09a6d6..988ee1c0e 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -132,6 +132,14 @@ struct RfuUnk3 u32 unk_dc; }; +struct RfuUnkSub +{ + u16 unk_00; + u8 unk_02; + u16 unk_04; + u8 filler_06[26]; +}; + struct RfuUnk5 { u8 unk_00; @@ -144,9 +152,7 @@ struct RfuUnk5 u8 unk_07; u8 unk_08; u8 filler_09[11]; - u16 unk_14; - u8 filler_16[2]; - u16 unk_18[4]; + struct RfuUnkSub unk_14[4]; }; extern struct RfuStruct *gRfuState; diff --git a/src/link_rfu.c b/src/link_rfu.c index 36ae9c1d6..82a68214f 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -23,19 +23,19 @@ EWRAM_DATA struct UnkLinkRfuStruct_02022B2C gUnknown_02022B2C = {}; // Static ROM declarations -void sub_800C000(void); +static void sub_800C000(void); void sub_800CEB0(u16 r6); void sub_800C7B4(u16 r8, u16 r6); void sub_800D30C(u8 a0, u8 a1); void sub_800D334(u8 a0); void sub_800D610(void); void sub_800D630(void); -void sub_800C744(u32 a0); -void sub_800CF34(void); +static void sub_800C744(u32 a0); +static void sub_800CF34(void); static void sub_800D158(void); -void sub_800D20C(void); -void sub_800D268(void); -u8 sub_800D294(void); +static void sub_800D20C(void); +static void sub_800D268(void); +static u8 sub_800D294(void); void sub_800D358(void); void sub_800D434(void); @@ -69,7 +69,7 @@ u32 sub_800BEC0(void) void rfu_REQ_sendData_wrapper(u8 r2) { u8 val; - if (!gUnknown_03007890[0].unk_00) + if (!gUnknown_03007890->unk_00) { val = gUnknown_03004140.unk_02; r2 = 0; @@ -121,7 +121,7 @@ void sub_800BFCC(struct UnkLinkRfuStruct_02022B2C *unk0) } } -void sub_800C000(void) +static void sub_800C000(void) { u8 i; @@ -221,15 +221,14 @@ u8 sub_800C12C(u16 r6, u16 r8) sub_800D30C(0xF3, 0x01); return 2; } - for (i = 0; i < gUnknown_03007890[0].unk_08; i++) + for (i = 0; i < gUnknown_03007890->unk_08; i++) { - tmp = &gUnknown_03007890[i]; - if (tmp->unk_14 == r6) + if (gUnknown_03007890->unk_14[i].unk_00 == r6) { break; } } - if (gUnknown_03007890[0].unk_08 == 0 || i == gUnknown_03007890[0].unk_08) + if (gUnknown_03007890->unk_08 == 0 || i == gUnknown_03007890->unk_08) { gUnknown_03004140.unk_14 = 3; sub_800D30C(0xF3, 0x01); @@ -268,7 +267,7 @@ void sub_800C210(u8 a0) gUnknown_03004140.unk_34[i] = 0; } } - i = gUnknown_03007890[0].unk_03 & a0; + i = gUnknown_03007890->unk_03 & a0; if (i) { sub_800D334(i); @@ -337,8 +336,8 @@ void sub_800C27C(bool8 a0) case 16: gUnknown_03004140.unk_04 = gUnknown_03004140.unk_11; gUnknown_03004140.unk_05 = gUnknown_03004140.unk_12; - sub_800D334(gUnknown_03007890[0].unk_03); - gUnknown_03004140.unk_14 = gUnknown_03007890[0].unk_03; + sub_800D334(gUnknown_03007890->unk_03); + gUnknown_03004140.unk_14 = gUnknown_03007890->unk_03; sub_800D30C(0x33, 0x01); return; case 17: @@ -410,7 +409,7 @@ bool8 sub_800C36C(u16 a0) } sub_800D610(); } - if (gUnknown_03007890[0].unk_00 == 1) + if (gUnknown_03007890->unk_00 == 1) { if (sp2) { @@ -541,7 +540,7 @@ void sub_800C54C(u32 a0) case 15: break; case 16: - rfu_REQ_CHILD_startConnectRecovery(gUnknown_03007890[0].unk_03); + rfu_REQ_CHILD_startConnectRecovery(gUnknown_03007890->unk_03); break; case 17: rfu_REQ_CHILD_pollConnectRecovery(); @@ -564,7 +563,7 @@ void sub_800C54C(u32 a0) gUnknown_03004140.unk_0e = 0; } } while (gUnknown_03004140.unk_04 == 18 || gUnknown_03004140.unk_04 == 19); - if (gUnknown_03007890[0].unk_00 != 1 || !sub_800C36C(0)) + if (gUnknown_03007890->unk_00 != 1 || !sub_800C36C(0)) { sub_800CF34(); sub_800D158(); @@ -574,7 +573,7 @@ void sub_800C54C(u32 a0) } } -void sub_800C744(u32 a0) +static void sub_800C744(u32 a0) { if (gUnknown_03004140.unk_07 == 5) { @@ -690,7 +689,7 @@ void sub_800C7B4(u16 r8, u16 r6) { sub_800D30C(0x20, 0x01); } - if (gUnknown_03004140.unk_0b && gUnknown_03004140.unk_1a != 1 && gUnknown_03007890[0].unk_08 == 4) + if (gUnknown_03004140.unk_0b && gUnknown_03004140.unk_1a != 1 && gUnknown_03007890->unk_08 == 4) { rfu_REQ_endSearchParent(); rfu_waitREQComplete(); @@ -766,11 +765,11 @@ void sub_800C7B4(u16 r8, u16 r6) case 50: if (r6 == 0) { - gUnknown_03004140.unk_14 = gUnknown_03007890[0].unk_03; + gUnknown_03004140.unk_14 = gUnknown_03007890->unk_03; gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 17; for (gUnknown_03004140.unk_10 = 0; gUnknown_03004140.unk_10 < 4; gUnknown_03004140.unk_10 ++) { - if ((gUnknown_03007890[0].unk_03 >> gUnknown_03004140.unk_10) & 1) + if ((gUnknown_03007890->unk_03 >> gUnknown_03004140.unk_10) & 1) { break; } @@ -799,7 +798,7 @@ void sub_800C7B4(u16 r8, u16 r6) else { gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; - sub_800D334(gUnknown_03007890[0].unk_03); + sub_800D334(gUnknown_03007890->unk_03); gUnknown_03004140.unk_1e = 0x33; } gUnknown_03004140.unk_34[gUnknown_03004140.unk_10] = 0; @@ -833,7 +832,7 @@ void sub_800C7B4(u16 r8, u16 r6) { gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; sub_800D610(); - sub_800D334(gUnknown_03007890[0].unk_02 | gUnknown_03007890[0].unk_03); + sub_800D334(gUnknown_03007890->unk_02 | gUnknown_03007890->unk_03); gUnknown_03004140.unk_14 = sp0; sub_800D30C(0x25, 0x01); } @@ -855,10 +854,10 @@ void sub_800C7B4(u16 r8, u16 r6) rfu_REQ_RFUStatus(); rfu_waitREQComplete(); rfu_getRFUStatus(&sp0); - if (sp0 == 0 && gUnknown_03007890[0].unk_00 == 0) + if (sp0 == 0 && gUnknown_03007890->unk_00 == 0) { stwiRecvBuffer = rfu_getSTWIRecvBuffer(); - stwiRecvBuffer[4] = gUnknown_03007890[0].unk_02; + stwiRecvBuffer[4] = gUnknown_03007890->unk_02; stwiRecvBuffer[5] = 1; sub_800C36C(0x29); r6 = 0; @@ -898,7 +897,7 @@ void sub_800C7B4(u16 r8, u16 r6) gUnknown_03004140.unk_00 &= ~gUnknown_03004140.unk_14; if (gUnknown_03004140.unk_07) { - if (gUnknown_03007890[0].unk_00 == 0xFF) + if (gUnknown_03007890->unk_00 == 0xFF) { if (gUnknown_03004140.unk_07 == 8) { @@ -913,7 +912,7 @@ void sub_800C7B4(u16 r8, u16 r6) } } } - if (gUnknown_03007890[0].unk_00 == 0xFF) + if (gUnknown_03007890->unk_00 == 0xFF) { if (gUnknown_03004140.unk_04 == 0) { @@ -928,7 +927,7 @@ void sub_800C7B4(u16 r8, u16 r6) break; case 38: sub_800D20C(); - if (gUnknown_03007890[0].unk_00 != 0xFF) + if (gUnknown_03007890->unk_00 != 0xFF) { sub_800D30C(0x50, 0x00); } @@ -953,8 +952,8 @@ void sub_800C7B4(u16 r8, u16 r6) { if (r8 == 28 && r6 != 0 && gUnknown_03004140.unk_07 == 4) { - gUnknown_03007890[0].unk_00 = 1; - gUnknown_03007890[0].unk_02 = 15; + gUnknown_03007890->unk_00 = 1; + gUnknown_03007890->unk_02 = 15; sub_800D334(15); rfu_waitREQComplete(); return; @@ -986,7 +985,7 @@ void sub_800CEB0(u16 r6) r7 = gUnknown_03004140.unk_0e; gUnknown_03004140.unk_0e = 0; gUnknown_03004140.unk_0f = 1; - if (gUnknown_03007890[0].unk_00 == 0) + if (gUnknown_03007890->unk_00 == 0) { sub_800C36C(r6); if (gUnknown_03004140.unk_02 != 1) @@ -1017,8 +1016,7 @@ void sub_800CEB0(u16 r6) gUnknown_03004140.unk_0e = r7; } -#ifdef NONMATCHING -void sub_800CF34(void) +static void sub_800CF34(void) { u8 flags; u8 sp0; @@ -1029,8 +1027,8 @@ void sub_800CF34(void) if (gUnknown_03004140.unk_04 == 5 || gUnknown_03004140.unk_04 == 6 || gUnknown_03004140.unk_04 == 7 || gUnknown_03004140.unk_04 == 8) { - flags = ((gUnknown_03007890[0].unk_02 ^ gUnknown_03004140.unk_0c) & gUnknown_03007890[0].unk_02) & ~gUnknown_03007890[0].unk_07; - gUnknown_03004140.unk_0c = gUnknown_03007890[0].unk_02; + flags = ((gUnknown_03007890->unk_02 ^ gUnknown_03004140.unk_0c) & gUnknown_03007890->unk_02) & ~gUnknown_03007890->unk_07; + gUnknown_03004140.unk_0c = gUnknown_03007890->unk_02; if (flags) { gUnknown_03004140.unk_14 = flags; @@ -1055,7 +1053,7 @@ void sub_800CF34(void) r5 = 0x02; for (ptr = gUnknown_03004140.unk_20; *ptr != 0xFFFF; ptr++) { - if (*gUnknown_03007890[i].unk_18 == *ptr) // FIXME: Role of r0 and r1 is swapped + if (gUnknown_03007890->unk_14[i].unk_04 == *ptr) { gUnknown_03004140.unk_00 |= r4; gUnknown_03004140.unk_01++; @@ -1094,7 +1092,7 @@ void sub_800CF34(void) if (gUnknown_03004140.unk_0d) { r5 = 0x01; - if (gUnknown_03007890[0].unk_06 && ((gUnknown_03004140.unk_03 & gUnknown_03004140.unk_00) != gUnknown_03004140.unk_00)) + if (gUnknown_03007890->unk_06 && ((gUnknown_03004140.unk_03 & gUnknown_03004140.unk_00) != gUnknown_03004140.unk_00)) { r5 = 0x00; } @@ -1135,281 +1133,6 @@ void sub_800CF34(void) } } } -#else -__attribute__((naked)) void sub_800CF34(void) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x8\n" - "\tldr r1, =gUnknown_03004140\n" - "\tldrb r0, [r1, 0x4]\n" - "\tsubs r0, 0x5\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tadds r3, r1, 0\n" - "\tcmp r0, 0x3\n" - "\tbls _0800CF52\n" - "\tb _0800D146_break\n" - "_0800CF52:\n" - "\tldr r0, =gUnknown_03007890\n" - "\tldr r2, [r0]\n" - "\tldrb r1, [r2, 0x2]\n" - "\tldrb r0, [r3, 0xC]\n" - "\tadds r4, r1, 0\n" - "\teors r4, r0\n" - "\tands r4, r1\n" - "\tldrb r0, [r2, 0x7]\n" - "\tbics r4, r0\n" - "\tmov r8, r4\n" - "\tstrb r1, [r3, 0xC]\n" - "\tcmp r4, 0\n" - "\tbeq _0800CF7A\n" - "\tstrh r4, [r3, 0x14]\n" - "\tmovs r0, 0x10\n" - "\tmovs r1, 0x1\n" - "\tstr r3, [sp, 0x4]\n" - "\tbl sub_800D30C\n" - "\tldr r3, [sp, 0x4]\n" - "_0800CF7A:\n" - "\tmovs r0, 0\n" - "\tstr r0, [sp]\n" - "\tmovs r6, 0\n" - "\tadds r7, r3, 0\n" - "\tmovs r1, 0x24\n" - "\tadds r1, r3\n" - "\tmov r9, r1\n" - "_0800CF88:\n" - "\tmovs r0, 0x80\n" - "\tlsls r0, 17\n" - "\tlsls r0, r6\n" - "\tlsrs r4, r0, 24\n" - "\tmovs r5, 0\n" - "\tmov r0, r8\n" - "\tands r0, r4\n" - "\tcmp r0, 0\n" - "\tbeq _0800CFDA\n" - "\tlsls r1, r6, 1\n" - "\tadds r0, r7, 0\n" - "\tadds r0, 0x28\n" - "\tadds r1, r0\n" - "\tldrh r0, [r7, 0x26]\n" - "\tstrh r0, [r1]\n" - "\tmov r2, r9\n" - "\tldrb r1, [r2]\n" - "\tadds r0, r4, 0\n" - "\torrs r0, r1\n" - "\tstrb r0, [r2]\n" - "\tadds r6, 0x1\n" - "\tmov r10, r6\n" - "\tb _0800D090\n" - "\t.pool\n" - "_0800CFC0:\n" - "\tldrb r1, [r7]\n" - "\tadds r0, r4, 0\n" - "\torrs r0, r1\n" - "\tstrb r0, [r7]\n" - "\tldrb r0, [r7, 0x1]\n" - "\tadds r0, 0x1\n" - "\tstrb r0, [r7, 0x1]\n" - "\tldr r0, [sp]\n" - "\torrs r0, r4\n" - "\tstr r0, [sp]\n" - "\tmovs r0, 0x1\n" - "\torrs r5, r0\n" - "\tb _0800D024\n" - "_0800CFDA:\n" - "\tmov r1, r9\n" - "\tldrb r0, [r1]\n" - "\tands r0, r4\n" - "\tadds r2, r6, 0x1\n" - "\tmov r10, r2\n" - "\tcmp r0, 0\n" - "\tbeq _0800D090\n" - "\tldr r0, =gUnknown_03007880\n" - "\tlsls r1, r6, 2\n" - "\tadds r1, r0\n" - "\tldr r1, [r1]\n" - "\tldrh r0, [r1, 0x34]\n" - "\tcmp r0, 0x46\n" - "\tbne _0800D040\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0x61\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0x1\n" - "\tbne _0800D058\n" - "\tmovs r5, 0x2\n" - "\tldr r3, [r3, 0x20]\n" - "\tldrh r2, [r3]\n" - "\tldr r0, =0x0000ffff\n" - "\tcmp r2, r0\n" - "\tbeq _0800D024\n" - "\tldr r0, =gUnknown_03007890\n" - "\tldr r0, [r0]\n" - "\tlsls r1, r6, 5\n" - "\tadds r0, r1\n" - "\tldrh r0, [r0, 0x18]\n" - "\tldr r1, =0x0000ffff\n" - "_0800D018:\n" - "\tcmp r0, r2\n" - "\tbeq _0800CFC0\n" - "\tadds r3, 0x2\n" - "\tldrh r2, [r3]\n" - "\tcmp r2, r1\n" - "\tbne _0800D018\n" - "_0800D024:\n" - "\tmovs r0, 0x1\n" - "\tands r0, r5\n" - "\tcmp r0, 0\n" - "\tbne _0800D058\n" - "\tmovs r0, 0x4\n" - "\torrs r5, r0\n" - "\tb _0800D058\n" - "\t.pool\n" - "_0800D040:\n" - "\tlsls r1, r6, 1\n" - "\tadds r0, r3, 0\n" - "\tadds r0, 0x28\n" - "\tadds r1, r0\n" - "\tldrh r0, [r1]\n" - "\tsubs r0, 0x1\n" - "\tstrh r0, [r1]\n" - "\tldr r1, =0x0000ffff\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbne _0800D058\n" - "\tmovs r5, 0x6\n" - "_0800D058:\n" - "\tmovs r0, 0x2\n" - "\tands r0, r5\n" - "\tcmp r0, 0\n" - "\tbeq _0800D07E\n" - "\tmov r2, r9\n" - "\tldrb r0, [r2]\n" - "\tbics r0, r4\n" - "\tmovs r2, 0\n" - "\tmov r1, r9\n" - "\tstrb r0, [r1]\n" - "\tlsls r0, r6, 1\n" - "\tadds r1, r7, 0\n" - "\tadds r1, 0x28\n" - "\tadds r0, r1\n" - "\tstrh r2, [r0]\n" - "\tmovs r0, 0x8\n" - "\tadds r1, r6, 0\n" - "\tbl rfu_clearSlot\n" - "_0800D07E:\n" - "\tmovs r0, 0x4\n" - "\tands r5, r0\n" - "\tldr r3, =gUnknown_03004140\n" - "\tcmp r5, 0\n" - "\tbeq _0800D090\n" - "\tldrb r1, [r7, 0xD]\n" - "\tadds r0, r4, 0\n" - "\torrs r0, r1\n" - "\tstrb r0, [r7, 0xD]\n" - "_0800D090:\n" - "\tmov r2, r10\n" - "\tlsls r0, r2, 24\n" - "\tlsrs r6, r0, 24\n" - "\tcmp r6, 0x3\n" - "\tbhi _0800D09C\n" - "\tb _0800CF88\n" - "_0800D09C:\n" - "\tldr r4, [sp]\n" - "\tcmp r4, 0\n" - "\tbeq _0800D0AE\n" - "\tldr r0, =gUnknown_03004140\n" - "\tstrh r4, [r0, 0x14]\n" - "\tmovs r0, 0x11\n" - "\tmovs r1, 0x1\n" - "\tbl sub_800D30C\n" - "_0800D0AE:\n" - "\tldr r1, =gUnknown_03004140\n" - "\tldrb r0, [r1, 0xD]\n" - "\tcmp r0, 0\n" - "\tbeq _0800D0EA\n" - "\tmovs r5, 0x1\n" - "\tldr r0, =gUnknown_03007890\n" - "\tldr r0, [r0]\n" - "\tldrb r0, [r0, 0x6]\n" - "\tcmp r0, 0\n" - "\tbeq _0800D0CE\n" - "\tldrb r0, [r1, 0x3]\n" - "\tldrb r1, [r1]\n" - "\tands r0, r1\n" - "\tcmp r0, r1\n" - "\tbeq _0800D0CE\n" - "\tmovs r5, 0\n" - "_0800D0CE:\n" - "\tcmp r5, 0\n" - "\tbeq _0800D0EA\n" - "\tldr r4, =gUnknown_03004140\n" - "\tldrb r0, [r4, 0xD]\n" - "\tbl sub_800D334\n" - "\tldrb r0, [r4, 0xD]\n" - "\tmovs r1, 0\n" - "\tstrh r0, [r4, 0x14]\n" - "\tstrb r1, [r4, 0xD]\n" - "\tmovs r0, 0x12\n" - "\tmovs r1, 0x1\n" - "\tbl sub_800D30C\n" - "_0800D0EA:\n" - "\tldr r0, =gUnknown_03004140\n" - "\tadds r1, r0, 0\n" - "\tadds r1, 0x24\n" - "\tldrb r1, [r1]\n" - "\tadds r3, r0, 0\n" - "\tcmp r1, 0\n" - "\tbne _0800D146_break\n" - "\tldrb r0, [r3, 0x4]\n" - "\tcmp r0, 0x8\n" - "\tbne _0800D146_break\n" - "\tldrb r0, [r3, 0x7]\n" - "\tcmp r0, 0\n" - "\tbne _0800D120\n" - "\tstrb r0, [r3, 0x5]\n" - "\tstrb r0, [r3, 0x4]\n" - "\tmovs r0, 0x14\n" - "\tmovs r1, 0\n" - "\tbl sub_800D30C\n" - "\tb _0800D146_break\n" - "\t.pool\n" - "_0800D120:\n" - "\tcmp r0, 0x2\n" - "\tbne _0800D12C\n" - "\tmovs r0, 0x3\n" - "\tstrb r0, [r3, 0x7]\n" - "\tmovs r0, 0x9\n" - "\tb _0800D132\n" - "_0800D12C:\n" - "\tmovs r0, 0x1\n" - "\tstrb r0, [r3, 0x7]\n" - "\tmovs r0, 0x5\n" - "_0800D132:\n" - "\tstrb r0, [r3, 0x4]\n" - "\tldrb r0, [r3]\n" - "\tcmp r0, 0\n" - "\tbeq _0800D146_break\n" - "\tmovs r0, 0\n" - "\tstrh r0, [r3, 0x1A]\n" - "\tmovs r0, 0x8\n" - "\tstrb r0, [r3, 0x7]\n" - "\tmovs r0, 0x5\n" - "\tstrb r0, [r3, 0x4]\n" - "_0800D146_break:\n" - "\tadd sp, 0x8\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0"); -} -#endif static void sub_800D158(void) { @@ -1436,9 +1159,52 @@ static void sub_800D158(void) if (gUnknown_03004140.unk_02 == 0) { gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; - sub_800D334(gUnknown_03007890[0].unk_02 | gUnknown_03007890[0].unk_03); + sub_800D334(gUnknown_03007890->unk_02 | gUnknown_03007890->unk_03); gUnknown_03004140.unk_14 = 0; sub_800D30C(0x25, 0x01); } } } + +static void sub_800D20C(void) +{ + if (gUnknown_03004140.unk_04 == 15 && gUnknown_03007880[gUnknown_03004140.unk_10]->unk_0 == 0x26) + { + gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; + rfu_clearSlot(4, gUnknown_03004140.unk_10); + gUnknown_03004140.unk_24 &= ~(1 << gUnknown_03004140.unk_10); + gUnknown_03004140.unk_28[gUnknown_03004140.unk_10] = 0; + sub_800D30C(0x24, 0x00); + } +} + +static void sub_800D268(void) +{ + if (gUnknown_03004140.unk_06 == 0 && gUnknown_03004140.unk_0a == 1) + { + gUnknown_03004140.unk_11 = gUnknown_03004140.unk_04; + gUnknown_03004140.unk_12 = gUnknown_03004140.unk_05; + gUnknown_03004140.unk_04 = 16; + gUnknown_03004140.unk_05 = 17; + gUnknown_03004140.unk_0a = 2; + } +} + +static u8 sub_800D294(void) +{ + u8 i; + u16 *ptr; + u8 flags = 0x00; + + for (i = 0; i < gUnknown_03007890->unk_08; i++) + { + for (ptr = gUnknown_03004140.unk_20; *ptr != 0xffff; ptr++) + { + if (gUnknown_03007890->unk_14[i].unk_04 == *ptr) + { + flags |= (1 << i); + } + } + } + return flags; +}