sub_800F86C

This commit is contained in:
PikalaxALT 2018-01-19 21:50:30 -05:00
parent c383d490ad
commit 1c15b896a8
3 changed files with 115 additions and 466 deletions

View File

@ -5,468 +5,6 @@
.text
thumb_func_start sub_800F86C
sub_800F86C: @ 800F86C
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
movs r0, 0
mov r8, r0
_0800F87A:
mov r1, r8
lsls r0, r1, 4
ldr r2, =gRecvCmds
adds r1, r0, r2
ldrh r7, [r1]
movs r3, 0xFF
lsls r3, 8
adds r1, r3, 0
ands r1, r7
movs r2, 0x88
lsls r2, 8
adds r5, r0, 0
cmp r1, r2
beq _0800F960
cmp r1, r2
bgt _0800F8D6
movs r0, 0xCC
lsls r0, 7
cmp r1, r0
bne _0800F8A4
b _0800FAE0
_0800F8A4:
cmp r1, r0
bgt _0800F8C4
movs r0, 0x88
lsls r0, 7
cmp r1, r0
bne _0800F8B2
b _0800FBF4
_0800F8B2:
movs r0, 0xBE
lsls r0, 7
cmp r1, r0
bne _0800F8BC
b _0800FAD0
_0800F8BC:
b _0800FC04
.pool
_0800F8C4:
movs r0, 0xEE
lsls r0, 7
cmp r1, r0
beq _0800F920
movs r0, 0xF0
lsls r0, 7
cmp r1, r0
beq _0800F90E
b _0800FC04
_0800F8D6:
movs r0, 0xBE
lsls r0, 8
cmp r1, r0
bne _0800F8E0
b _0800FBF4
_0800F8E0:
cmp r1, r0
bgt _0800F8F8
movs r0, 0x89
lsls r0, 8
cmp r1, r0
beq _0800F9C8
movs r0, 0xA1
lsls r0, 8
cmp r1, r0
bne _0800F8F6
b _0800FAAC
_0800F8F6:
b _0800FC04
_0800F8F8:
movs r0, 0xED
lsls r0, 8
cmp r1, r0
bne _0800F902
b _0800FB10
_0800F902:
movs r0, 0xEE
lsls r0, 8
cmp r1, r0
bne _0800F90C
b _0800FBB0
_0800F90C:
b _0800FC04
_0800F90E:
ldr r4, =gUnknown_03005000
ldrb r0, [r4, 0xC]
cmp r0, 0
bne _0800F920
ldr r0, =gReceivedRemoteLinkPlayers
ldrb r0, [r0]
cmp r0, 0
beq _0800F920
b _0800FC50
_0800F920:
ldr r0, =gUnknown_03007890
ldr r0, [r0]
ldrb r0, [r0]
mov r6, r8
adds r6, 0x1
cmp r0, 0
beq _0800F930
b _0800FC08
_0800F930:
ldr r1, =gRecvCmds+0x2
adds r0, r5, r1
ldrh r0, [r0]
ldr r2, =gUnknown_03005000
strb r0, [r2, 0xD]
ldr r3, =gRecvCmds+0x4
adds r0, r5, r3
bl sub_800F74C
ldr r4, =gUnknown_03005000+0xCCE
strb r0, [r4]
b _0800FC08
.pool
_0800F960:
ldr r0, =gUnknown_03005000
mov r9, r0
mov r1, r8
lsls r0, r1, 2
add r0, r8
lsls r7, r0, 2
mov r2, r9
adds r3, r7, r2
movs r4, 0x92
adds r4, r3
mov r12, r4
ldrb r4, [r4]
mov r6, r8
adds r6, 0x1
cmp r4, 0
beq _0800F982
b _0800FC08
_0800F982:
adds r0, r3, 0
adds r0, 0x80
movs r2, 0
strh r4, [r0]
ldr r1, =gRecvCmds+0x2
adds r0, r5, r1
ldrh r0, [r0]
adds r1, r3, 0
adds r1, 0x82
strh r0, [r1]
ldr r1, =gRecvCmds+0x4
adds r0, r5, r1
ldrh r1, [r0]
adds r0, r3, 0
adds r0, 0x91
strb r1, [r0]
mov r0, r9
adds r0, 0x88
adds r0, r7, r0
str r4, [r0]
movs r0, 0x1
mov r3, r12
strb r0, [r3]
mov r0, r9
adds r0, 0x5C
add r0, r8
strb r2, [r0]
b _0800FC08
.pool
_0800F9C8:
ldr r4, =gUnknown_03005000
mov r9, r4
mov r0, r8
lsls r1, r0, 2
adds r0, r1, r0
lsls r4, r0, 2
mov r3, r9
adds r2, r4, r3
adds r0, r2, 0
adds r0, 0x92
ldrb r3, [r0]
mov r10, r1
mov r6, r8
adds r6, 0x1
cmp r3, 0x1
beq _0800F9EA
b _0800FC08
_0800F9EA:
movs r0, 0xFF
ands r0, r7
adds r2, 0x80
strh r0, [r2]
mov r1, r9
adds r1, 0x88
adds r1, r4, r1
lsls r3, r0
ldr r0, [r1]
orrs r0, r3
str r0, [r1]
movs r4, 0
ldr r0, =gBlockRecvBuffer
mov r9, r0
mov r12, r2
mov r1, r8
lsls r7, r1, 8
adds r3, r5, 0
_0800FA0E:
mov r2, r12
ldrh r0, [r2]
lsls r1, r0, 1
adds r1, r0
lsls r1, 1
adds r1, r4
lsls r1, 1
adds r1, r7
add r1, r9
adds r2, r4, 0x1
lsls r0, r2, 1
adds r0, r3
ldr r4, =gRecvCmds
adds r0, r4
ldrh r0, [r0]
strh r0, [r1]
lsls r2, 16
lsrs r4, r2, 16
cmp r4, 0x5
bls _0800FA0E
ldr r4, =gUnknown_03005000
mov r0, r10
add r0, r8
lsls r0, 2
adds r1, r4, 0
adds r1, 0x88
adds r1, r0, r1
adds r2, r0, r4
adds r0, r2, 0
adds r0, 0x82
ldrh r0, [r0]
lsls r0, 2
ldr r3, =gUnknown_082ED628
adds r0, r3
ldr r1, [r1]
ldr r0, [r0]
cmp r1, r0
beq _0800FA5C
b _0800FC08
_0800FA5C:
adds r1, r2, 0
adds r1, 0x92
movs r0, 0x2
strb r0, [r1]
mov r1, r8
lsls r0, r1, 24
lsrs r0, 24
bl sub_800F6FC
bl sub_800F7DC
ldrb r1, [r0, 0xA]
movs r0, 0x7F
ands r0, r1
cmp r0, 0x45
beq _0800FA7E
b _0800FC08
_0800FA7E:
ldr r0, =gReceivedRemoteLinkPlayers
ldrb r0, [r0]
cmp r0, 0
bne _0800FA88
b _0800FC08
_0800FA88:
ldrb r0, [r4, 0xC]
cmp r0, 0
beq _0800FA90
b _0800FC08
_0800FA90:
ldr r0, =gBlockRecvBuffer
bl sub_8010A70
b _0800FC08
.pool
_0800FAAC:
ldr r2, =gUnknown_082ED6B8
ldr r3, =gRecvCmds+0x2
adds r0, r5, r3
ldrh r1, [r0]
lsls r1, 3
adds r0, r1, r2
ldr r0, [r0]
adds r2, 0x4
adds r1, r2
ldrh r1, [r1]
bl sub_800FE84
b _0800FC04
.pool
_0800FAD0:
ldr r1, =gUnknown_03005000+0xE4
add r1, r8
movs r0, 0x1
strb r0, [r1]
b _0800FC04
.pool
_0800FAE0:
ldr r2, =gUnknown_03005000
movs r4, 0x80
lsls r4, 1
adds r0, r2, r4
ldr r3, =gRecvCmds+0x2
adds r1, r5, r3
ldrh r0, [r0]
mov r6, r8
adds r6, 0x1
ldrh r1, [r1]
cmp r0, r1
beq _0800FAFA
b _0800FC08
_0800FAFA:
adds r0, r2, 0
adds r0, 0xE9
add r0, r8
movs r1, 0x1
strb r1, [r0]
b _0800FC08
.pool
_0800FB10:
ldr r7, =gUnknown_03005000
ldrb r2, [r7, 0xC]
cmp r2, 0
bne _0800FB78
ldr r3, =gReceivedRemoteLinkPlayers
ldrb r0, [r3]
mov r6, r8
adds r6, 0x1
cmp r0, 0
beq _0800FC08
ldr r0, =gRecvCmds+0x2
adds r4, r5, r0
ldrh r1, [r4]
ldr r0, =gUnknown_03007890
ldr r0, [r0]
ldrb r0, [r0, 0x2]
ands r1, r0
cmp r1, 0
beq _0800FB48
strb r2, [r3]
bl sub_800D630
ldr r1, =gRecvCmds+0x4
adds r0, r5, r1
ldrh r1, [r0]
ldr r2, =0x00000ce4
adds r0, r7, r2
strb r1, [r0]
_0800FB48:
ldr r0, =gRecvCmds
adds r0, 0x6
adds r0, r5, r0
ldrh r0, [r0]
strb r0, [r7, 0xD]
ldrh r0, [r4]
bl sub_80109E8
b _0800FC08
.pool
_0800FB78:
movs r0, 0xEE
lsls r0, 8
bl sub_800FD14
ldr r1, =gSendCmd
ldr r3, =gRecvCmds+0x2
adds r0, r5, r3
ldrh r0, [r0]
strh r0, [r1, 0x2]
ldr r4, =gRecvCmds+0x4
adds r0, r5, r4
ldrh r0, [r0]
strh r0, [r1, 0x4]
ldr r0, =gRecvCmds
adds r0, 0x6
adds r0, r5, r0
ldrh r0, [r0]
strh r0, [r1, 0x6]
b _0800FC04
.pool
_0800FBB0:
ldr r4, =gUnknown_03005000
ldrb r0, [r4, 0xC]
mov r6, r8
adds r6, 0x1
cmp r0, 0x1
bne _0800FC44
ldr r0, =0x00000ce3
adds r2, r4, r0
ldr r1, =gRecvCmds+0x2
adds r3, r5, r1
ldrb r1, [r3]
ldrb r0, [r2]
orrs r0, r1
strb r0, [r2]
ldr r2, =gRecvCmds+0x4
adds r0, r5, r2
ldrh r1, [r0]
ldr r2, =0x00000ce4
adds r0, r4, r2
strb r1, [r0]
ldrh r0, [r3]
bl sub_80109E8
b _0800FC08
.pool
_0800FBF4:
ldr r0, =gLinkPartnersHeldKeys
mov r3, r8
lsls r1, r3, 1
adds r1, r0
ldr r4, =gRecvCmds+0x2
adds r0, r5, r4
ldrh r0, [r0]
strh r0, [r1]
_0800FC04:
mov r6, r8
adds r6, 0x1
_0800FC08:
ldr r3, =gUnknown_03005000
ldrb r4, [r3, 0xC]
cmp r4, 0x1
bne _0800FC44
adds r0, r3, 0
adds r0, 0x61
mov r1, r8
adds r2, r1, r0
ldrb r0, [r2]
adds r1, r0, 0
cmp r1, 0
beq _0800FC44
cmp r1, 0x4
bne _0800FC40
adds r0, r3, 0
adds r0, 0x5C
add r0, r8
movs r1, 0
strb r4, [r0]
strb r1, [r2]
b _0800FC44
.pool
_0800FC40:
adds r0, 0x1
strb r0, [r2]
_0800FC44:
lsls r0, r6, 16
lsrs r0, 16
mov r8, r0
cmp r0, 0x4
bhi _0800FC50
b _0800F87A
_0800FC50:
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_800F86C
thumb_func_start sub_800FC60
sub_800FC60: @ 800FC60
push {lr}

View File

@ -153,9 +153,11 @@ struct UnkRfuStruct_2 {
/* 0x068 */ u8 filler_68[4];
/* 0x06c */ struct UnkRfuStruct_2_Sub_6c unk_6c;
/* 0x080 */ struct UnkRfuStruct_2_Sub_6c unk_80[5];
/* 0x0e4 */ u8 filler_e4[10];
/* 0x0e4 */ u8 unk_e4[5];
/* 0x0e9 */ u8 unk_e9[5];
/* 0x0ee */ vu8 unk_ee;
/* 0x0ef */ u8 filler_ef[0x13];
/* 0x0ef */ u8 filler_ef[0x11];
/* 0x100 */ u16 unk_100;
/* 0x102 */ u8 unk_102;
/* 0x103 */ u8 filler_103[0x21];
/* 0x124 */ struct UnkRfuStruct_2_Sub_124 unk_124;
@ -168,7 +170,8 @@ struct UnkRfuStruct_2 {
/* 0xc85 */ u8 filler_c85[2];
/* 0xc87 */ u8 unk_c87[5][7][2];
/* 0xccd */ u8 unk_ccd;
/* 0xcce */ u8 filler_cce[2];
/* 0xcce */ u8 unk_cce;
/* 0xccf */ u8 unk_ccf;
/* 0xcd0 */ vu8 unk_cd0;
/* 0xcd1 */ u8 filler_cd1[8];
/* 0xcd9 */ u8 unk_cd9;

View File

@ -64,6 +64,8 @@ void sub_8010528(void);
void sub_8010750(void);
int sub_80107A0(void);
void sub_801084C(u8 taskId);
void sub_80109E8(u16 a0);
void sub_8010A70(void *a0);
void sub_8010AAC(u8 taskId);
void sub_8010D0C(u8 taskId);
void sub_8011068(u8 a0);
@ -259,7 +261,7 @@ const u8 gUnknown_082ED6A5[] = {
};
const struct {
u8 *buffer;
u16 size;
u32 size;
} gUnknown_082ED6B8[] = {
{ gBlockSendBuffer, 200 },
{ gBlockSendBuffer, 200 },
@ -3390,3 +3392,109 @@ void sub_800F850(void)
if (gUnknown_03005000.unk_00 == NULL)
gUnknown_03005000.unk_00 = sub_800F820;
}
void sub_800F86C(u8 unused)
{
u16 i;
u16 j;
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
switch (gRecvCmds[i][0] & 0xff00)
{
case 0x7800:
if (gUnknown_03005000.unk_0c == 0 && gReceivedRemoteLinkPlayers != 0)
return;
// fallthrough
case 0x7700:
if (gUnknown_03007890->unk_00 == 0)
{
gUnknown_03005000.playerCount = gRecvCmds[i][1];
gUnknown_03005000.unk_cce = sub_800F74C((u8 *)(gRecvCmds[i] + 2));
}
break;
case 0x8800:
if (gUnknown_03005000.unk_80[i].unk_12 == 0)
{
gUnknown_03005000.unk_80[i].unk_00 = 0;
gUnknown_03005000.unk_80[i].unk_02 = gRecvCmds[i][1];
gUnknown_03005000.unk_80[i].unk_11 = gRecvCmds[i][2];
gUnknown_03005000.unk_80[i].unk_08 = 0;
gUnknown_03005000.unk_80[i].unk_12 = 1;
gUnknown_03005000.unk_5c[i] = 0;
}
break;
case 0x8900:
if (gUnknown_03005000.unk_80[i].unk_12 == 1)
{
gUnknown_03005000.unk_80[i].unk_00 = gRecvCmds[i][0] & 0xff;
gUnknown_03005000.unk_80[i].unk_08 |= (1 << gUnknown_03005000.unk_80[i].unk_00);
for (j = 0; j < 6; j++)
gBlockRecvBuffer[i][gUnknown_03005000.unk_80[i].unk_00 * 6 + j] = gRecvCmds[i][j + 1];
if (gUnknown_03005000.unk_80[i].unk_08 == gUnknown_082ED628[gUnknown_03005000.unk_80[i].unk_02])
{
gUnknown_03005000.unk_80[i].unk_12 = 2;
sub_800F6FC(i);
if (sub_800F7DC()->unk_0a_0 == 0x45 && gReceivedRemoteLinkPlayers != 0 && gUnknown_03005000.unk_0c == 0)
sub_8010A70(gBlockRecvBuffer);
}
}
break;
case 0xa100:
sub_800FE84(gUnknown_082ED6B8[gRecvCmds[i][1]].buffer, (u16)gUnknown_082ED6B8[gRecvCmds[i][1]].size);
break;
case 0x5f00:
gUnknown_03005000.unk_e4[i] = 1;
break;
case 0x6600:
if (gUnknown_03005000.unk_100 == gRecvCmds[i][1])
gUnknown_03005000.unk_e9[i] = 1;
break;
case 0xed00:
if (gUnknown_03005000.unk_0c == 0)
{
if (gReceivedRemoteLinkPlayers != 0)
{
if (gRecvCmds[i][1] & gUnknown_03007890->unk_02)
{
gReceivedRemoteLinkPlayers = 0;
sub_800D630();
gUnknown_03005000.unk_ce4 = gRecvCmds[i][2];
}
gUnknown_03005000.playerCount = gRecvCmds[i][3];
sub_80109E8(gRecvCmds[i][1]);
}
}
else
{
sub_800FD14(0xee00);
gSendCmd[1] = gRecvCmds[i][1];
gSendCmd[2] = gRecvCmds[i][2];
gSendCmd[3] = gRecvCmds[i][3];
}
break;
case 0xee00:
if (gUnknown_03005000.unk_0c == 1)
{
gUnknown_03005000.unk_ce3 |= gRecvCmds[i][1];
gUnknown_03005000.unk_ce4 = gRecvCmds[i][2];
sub_80109E8(gRecvCmds[i][1]);
}
break;
case 0x4400:
case 0xbe00:
gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
break;
}
if (gUnknown_03005000.unk_0c == 1 && gUnknown_03005000.unk_61[i])
{
if (gUnknown_03005000.unk_61[i] == 4)
{
gUnknown_03005000.unk_5c[i] = 1;
gUnknown_03005000.unk_61[i] = 0;
}
else
gUnknown_03005000.unk_61[i]++;
}
}
}