continue some more matching of multiplayer

This commit is contained in:
Oliver Bell committed 2022-08-05 10:05:22 +00:00
1 parent db5847517d
commit 6680996261
7 files changed
+1120 -1115

No files matched your search

-859
View File
@@ -4,865 +4,6 @@
.syntax unified
.arm
thumb_func_start sub_805ADAC
sub_805ADAC: @ 0x0805ADAC
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x34
movs r0, #0
str r0, [sp]
movs r1, #0
str r1, [sp, #4]
movs r2, #0
str r2, [sp, #8]
movs r4, #0
str r0, [sp, #0xc]
str r1, [sp, #0x10]
movs r2, #1
str r2, [sp, #0x14]
ldr r0, _0805AE30 @ =gCurTask
ldr r0, [r0]
ldrh r1, [r0, #6]
movs r0, #0xc0
lsls r0, r0, #0x12
adds r6, r1, r0
adds r0, r6, #0
bl sub_802D4CC
ldr r0, _0805AE34 @ =gMultiSioStatusFlags
ldr r2, [r0]
movs r0, #0x81
ands r0, r2
cmp r0, #0
beq _0805AE60
ldr r3, _0805AE38 @ =0x04000128
ldr r1, [r3]
lsls r1, r1, #0x1a
lsrs r1, r1, #0x1e
ldr r0, [sp, #0x14]
lsls r0, r1
ands r2, r0
cmp r2, #0
bne _0805AE50
ldr r1, _0805AE3C @ =gUnknown_030054D4
ldr r0, [r3]
lsls r0, r0, #0x1a
lsrs r0, r0, #0x1e
adds r0, r0, r1
ldrb r1, [r0]
adds r2, r1, #1
strb r2, [r0]
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
cmp r1, #0xb4
bls _0805AE60
ldr r1, _0805AE40 @ =0x0000FFFF
movs r0, #0
bl TasksDestroyInPriorityRange
ldr r1, _0805AE44 @ =gUnknown_03002AE4
ldr r0, _0805AE48 @ =gUnknown_0300287C
ldrb r0, [r0]
strb r0, [r1]
ldr r0, _0805AE4C @ =gUnknown_03005390
mov r1, sp
ldrb r1, [r1, #8]
strb r1, [r0]
b _0805B1F6
.align 2, 0
_0805AE30: .4byte gCurTask
_0805AE34: .4byte gMultiSioStatusFlags
_0805AE38: .4byte 0x04000128
_0805AE3C: .4byte gUnknown_030054D4
_0805AE40: .4byte 0x0000FFFF
_0805AE44: .4byte gUnknown_03002AE4
_0805AE48: .4byte gUnknown_0300287C
_0805AE4C: .4byte gUnknown_03005390
_0805AE50:
ldr r1, _0805AEBC @ =gUnknown_030054D4
ldr r0, [r3]
lsls r0, r0, #0x1a
lsrs r0, r0, #0x1e
adds r0, r0, r1
mov r2, sp
ldrb r2, [r2, #8]
strb r2, [r0]
_0805AE60:
ldr r1, _0805AEC0 @ =gMultiSioStatusFlags
ldr r2, [r1]
movs r0, #0x80
lsls r0, r0, #1
ands r0, r2
cmp r0, #0
beq _0805AE70
movs r4, #1
_0805AE70:
ldr r0, _0805AEC4 @ =gMultiSioRecv
mov r8, r0
movs r0, #0x80
lsls r0, r0, #5
ands r0, r2
cmp r0, #0
bne _0805AE92
cmp r4, #0
beq _0805AED8
movs r0, #1
ands r2, r0
cmp r2, #0
bne _0805AED8
ldr r1, _0805AEC4 @ =gMultiSioRecv
ldrh r0, [r1]
cmp r0, #0
beq _0805AED8
_0805AE92:
adds r1, r6, #0
adds r1, #0xfd
ldrb r0, [r1]
adds r0, #1
strb r0, [r1]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #8
bls _0805AEE0
ldr r1, _0805AEC8 @ =0x0000FFFF
movs r0, #0
bl TasksDestroyInPriorityRange
ldr r1, _0805AECC @ =gUnknown_03002AE4
ldr r0, _0805AED0 @ =gUnknown_0300287C
ldrb r0, [r0]
strb r0, [r1]
ldr r1, _0805AED4 @ =gUnknown_03005390
movs r0, #0
b _0805B1F4
.align 2, 0
_0805AEBC: .4byte gUnknown_030054D4
_0805AEC0: .4byte gMultiSioStatusFlags
_0805AEC4: .4byte gMultiSioRecv
_0805AEC8: .4byte 0x0000FFFF
_0805AECC: .4byte gUnknown_03002AE4
_0805AED0: .4byte gUnknown_0300287C
_0805AED4: .4byte gUnknown_03005390
_0805AED8:
adds r1, r6, #0
adds r1, #0xfd
movs r0, #0
strb r0, [r1]
_0805AEE0:
movs r5, #0
adds r2, r6, #0
adds r2, #0xfa
str r2, [sp, #0x20]
movs r7, #1
adds r4, r6, #0
adds r4, #0xee
movs r0, #0xf2
adds r0, r0, r6
mov ip, r0
movs r1, #0
str r1, [sp, #0x28]
movs r2, #0
str r2, [sp, #0x2c]
mov sl, r2
ldr r0, _0805AF98 @ =gUnknown_03005460
mov sb, r0
_0805AF02:
lsls r1, r5, #2
str r1, [sp, #0x30]
ldr r3, _0805AF9C @ =gMultiSioRecv
add r3, sl
ldrb r0, [r4]
lsls r0, r0, #1
strb r0, [r4]
mov r2, ip
ldrb r0, [r2]
lsls r0, r0, #1
strb r0, [r2]
ldr r0, _0805AFA0 @ =0x04000128
ldr r0, [r0]
lsls r0, r0, #0x1a
lsrs r0, r0, #0x1e
cmp r5, r0
beq _0805AF3A
adds r1, r7, #0
lsls r1, r5
ldr r2, _0805AFA4 @ =gMultiSioStatusFlags
ldr r0, [r2]
ands r0, r1
cmp r0, #0
beq _0805AFB8
ldrh r0, [r3]
ldr r1, _0805AFA8 @ =0x0000400F
cmp r0, r1
bls _0805AFB8
_0805AF3A:
ldrb r1, [r4]
adds r0, r7, #0
orrs r0, r1
strb r0, [r4]
ldr r2, [sp]
adds r2, #1
str r2, [sp]
adds r0, r7, #0
lsls r0, r5
ldr r1, [sp, #8]
orrs r1, r0
lsls r0, r1, #0x18
lsrs r0, r0, #0x18
str r0, [sp, #8]
ldr r2, [sp, #0xc]
cmp r2, #0
beq _0805AF60
movs r0, #1
str r0, [sp, #0x10]
_0805AF60:
ldr r0, _0805AFAC @ =gUnknown_03005410
ldr r1, [sp, #0x30]
adds r0, r1, r0
ldr r1, [r3, #4]
str r1, [r0]
ldrh r0, [r3, #8]
mov r2, sb
strh r0, [r2]
ldr r0, _0805AF98 @ =gUnknown_03005460
adds r0, #2
ldr r1, [sp, #0x2c]
adds r0, r1, r0
ldrh r1, [r3, #0xa]
strh r1, [r0]
ldrh r0, [r3, #0xc]
strh r0, [r2, #4]
ldr r2, _0805AFB0 @ =gUnknown_03005594
ldrb r0, [r2]
ldrb r1, [r3, #0xe]
orrs r0, r1
strb r0, [r2]
ldr r2, _0805AFB4 @ =gUnknown_030054D8
ldrb r1, [r3, #0xf]
ldrb r0, [r2]
cmp r0, r1
bhs _0805B01E
strb r1, [r2]
b _0805B01E
.align 2, 0
_0805AF98: .4byte gUnknown_03005460
_0805AF9C: .4byte gMultiSioRecv
_0805AFA0: .4byte 0x04000128
_0805AFA4: .4byte gMultiSioStatusFlags
_0805AFA8: .4byte 0x0000400F
_0805AFAC: .4byte gUnknown_03005410
_0805AFB0: .4byte gUnknown_03005594
_0805AFB4: .4byte gUnknown_030054D8
_0805AFB8:
ldr r2, [sp, #0x28]
ldr r1, _0805AFF0 @ =0x04000120
adds r0, r2, r1
ldrh r0, [r0]
str r0, [sp, #0x30]
movs r2, #1
str r2, [sp, #0xc]
adds r1, r2, #0
lsls r1, r5
ldr r2, _0805AFF4 @ =gMultiSioStatusFlags
ldr r0, [r2]
ands r0, r1
cmp r0, #0
bne _0805AFF8
ldr r0, [sp, #0x30]
cmp r0, #0
bne _0805AFF8
movs r1, #1
str r1, [sp, #0x10]
mov r2, ip
ldrb r0, [r2]
adds r1, r7, #0
orrs r1, r0
strb r1, [r2]
ldrb r0, [r4]
cmp r0, #0
bne _0805B024
b _0805B01A
.align 2, 0
_0805AFF0: .4byte 0x04000120
_0805AFF4: .4byte gMultiSioStatusFlags
_0805AFF8:
mov r1, ip
ldrb r0, [r1]
cmp r0, #0
bne _0805B016
adds r1, r7, #0
lsls r1, r5
ldr r2, _0805B08C @ =gMultiSioStatusFlags
ldr r0, [r2]
ands r0, r1
cmp r0, #0
beq _0805B01E
ldrh r0, [r3]
ldr r1, _0805B090 @ =0x0000400F
cmp r0, r1
bhi _0805B01E
_0805B016:
movs r2, #1
str r2, [sp, #0x10]
_0805B01A:
movs r0, #0
str r0, [sp, #0x14]
_0805B01E:
ldrb r0, [r4]
cmp r0, #0
beq _0805B02A
_0805B024:
ldr r1, [sp, #4]
adds r1, #1
str r1, [sp, #4]
_0805B02A:
adds r4, #1
movs r2, #1
add ip, r2
ldr r0, [sp, #0x28]
adds r0, #2
str r0, [sp, #0x28]
movs r1, #0xc
add sb, r1
ldr r2, [sp, #0x2c]
adds r2, #0xc
str r2, [sp, #0x2c]
movs r0, #0x14
add sl, r0
adds r5, #1
cmp r5, #3
bgt _0805B04C
b _0805AF02
_0805B04C:
ldr r1, [sp, #4]
cmp r1, #0
bne _0805B056
movs r2, #1
str r2, [sp, #4]
_0805B056:
ldr r0, [sp, #0x20]
ldrb r4, [r0]
cmp r4, #0
bne _0805B0AE
ldr r1, _0805B08C @ =gMultiSioStatusFlags
ldr r0, [r1]
movs r1, #0x81
ands r0, r1
cmp r0, #1
bne _0805B0A8
mov r2, r8
ldrh r1, [r2]
ldr r0, _0805B094 @ =0x00004010
cmp r1, r0
bls _0805B0A8
ldr r1, _0805B098 @ =0x0000FFFF
movs r0, #0
bl TasksDestroyInPriorityRange
ldr r1, _0805B09C @ =gUnknown_03002AE4
ldr r0, _0805B0A0 @ =gUnknown_0300287C
ldrb r0, [r0]
strb r0, [r1]
ldr r0, _0805B0A4 @ =gUnknown_03005390
strb r4, [r0]
b _0805B1F6
.align 2, 0
_0805B08C: .4byte gMultiSioStatusFlags
_0805B090: .4byte 0x0000400F
_0805B094: .4byte 0x00004010
_0805B098: .4byte 0x0000FFFF
_0805B09C: .4byte gUnknown_03002AE4
_0805B0A0: .4byte gUnknown_0300287C
_0805B0A4: .4byte gUnknown_03005390
_0805B0A8:
movs r0, #1
ldr r1, [sp, #0x20]
strb r0, [r1]
_0805B0AE:
mov r2, r8
ldrh r1, [r2]
ldr r0, [sp, #0x10]
cmp r0, #0
beq _0805B0BA
b _0805B1D8
_0805B0BA:
ldr r0, _0805B130 @ =0x00004011
cmp r1, r0
beq _0805B0C2
b _0805B1D8
_0805B0C2:
ldr r2, [sp, #0x20]
ldrb r0, [r2]
cmp r0, #0
bne _0805B0CC
b _0805B1D8
_0805B0CC:
ldr r1, _0805B134 @ =gUnknown_03005434
mov r2, r8
ldr r0, [r2, #0x10]
str r0, [r1]
ldr r1, _0805B138 @ =gUnknown_030055B8
ldrb r0, [r2, #2]
strb r0, [r1]
movs r5, #0
adds r0, r6, #0
adds r0, #0xe8
str r0, [sp, #0x18]
adds r1, r6, #0
adds r1, #0xf6
str r1, [sp, #0x1c]
adds r6, #0xfb
str r6, [sp, #0x24]
ldr r6, _0805B13C @ =gUnknown_03005460
ldr r7, _0805B140 @ =gUnknown_03005594
adds r4, r6, #0
mov sl, r5
ldr r2, _0805B144 @ =gUnknown_03005410
mov ip, r2
mov sb, r5
_0805B0FA:
ldr r1, _0805B138 @ =gUnknown_030055B8
ldrb r0, [r1]
asrs r0, r5
movs r1, #1
ands r0, r1
cmp r0, #0
beq _0805B182
cmp r5, #0
bne _0805B14C
mov r2, r8
ldr r0, [r2, #4]
ldr r1, _0805B144 @ =gUnknown_03005410
str r0, [r1]
ldrh r0, [r2, #8]
strh r0, [r6]
ldrh r0, [r2, #0xa]
strh r0, [r6, #2]
ldrh r0, [r2, #0xc]
strh r0, [r6, #4]
ldrb r0, [r7]
ldrb r1, [r2, #0xe]
orrs r0, r1
strb r0, [r7]
ldr r2, _0805B148 @ =gUnknown_030054D8
mov r0, r8
ldrb r1, [r0, #0xf]
b _0805B17A
.align 2, 0
_0805B130: .4byte 0x00004011
_0805B134: .4byte gUnknown_03005434
_0805B138: .4byte gUnknown_030055B8
_0805B13C: .4byte gUnknown_03005460
_0805B140: .4byte gUnknown_03005594
_0805B144: .4byte gUnknown_03005410
_0805B148: .4byte gUnknown_030054D8
_0805B14C:
ldr r3, _0805B1C0 @ =gMultiSioRecv
add r3, sb
ldrh r0, [r3]
ldr r1, _0805B1C4 @ =0x00004010
cmp r0, r1
bne _0805B182
ldr r0, [r3, #4]
mov r2, ip
str r0, [r2]
ldrh r0, [r3, #8]
strh r0, [r4]
adds r0, r6, #2
add r0, sl
ldrh r1, [r3, #0xa]
strh r1, [r0]
ldrh r0, [r3, #0xc]
strh r0, [r4, #4]
ldrb r0, [r7]
ldrb r1, [r3, #0xe]
orrs r0, r1
strb r0, [r7]
ldr r2, _0805B1C8 @ =gUnknown_030054D8
ldrb r1, [r3, #0xf]
_0805B17A:
ldrb r0, [r2]
cmp r0, r1
bhs _0805B182
strb r1, [r2]
_0805B182:
adds r4, #0xc
movs r0, #0xc
add sl, r0
movs r1, #4
add ip, r1
movs r2, #0x14
add sb, r2
adds r5, #1
cmp r5, #3
ble _0805B0FA
movs r0, #0
movs r1, #0
ldr r2, [sp, #0x18]
strh r0, [r2]
ldr r0, [sp, #0x1c]
strb r1, [r0]
ldr r2, _0805B1CC @ =gUnknown_030054D4
strb r1, [r2, #3]
strb r1, [r2, #2]
strb r1, [r2, #1]
strb r1, [r2]
ldr r0, [sp, #0x24]
strb r1, [r0]
ldr r1, _0805B1D0 @ =gCurTask
ldr r0, [r1]
ldr r2, _0805B1D4 @ =sub_805B4C0
str r2, [r0, #8]
bl _call_via_r2
b _0805B42A
.align 2, 0
_0805B1C0: .4byte gMultiSioRecv
_0805B1C4: .4byte 0x00004010
_0805B1C8: .4byte gUnknown_030054D8
_0805B1CC: .4byte gUnknown_030054D4
_0805B1D0: .4byte gCurTask
_0805B1D4: .4byte sub_805B4C0
_0805B1D8:
lsls r1, r1, #0x10
ldr r0, _0805B204 @ =0x40120000
cmp r1, r0
bls _0805B220
ldr r1, _0805B208 @ =0x0000FFFF
movs r0, #0
bl TasksDestroyInPriorityRange
ldr r1, _0805B20C @ =gUnknown_03002AE4
ldr r0, _0805B210 @ =gUnknown_0300287C
ldrb r0, [r0]
strb r0, [r1]
ldr r1, _0805B214 @ =gUnknown_03005390
movs r0, #0
_0805B1F4:
strb r0, [r1]
_0805B1F6:
ldr r1, _0805B218 @ =gUnknown_03004D5C
ldr r0, _0805B21C @ =gUnknown_03002A84
ldrb r0, [r0]
strb r0, [r1]
bl sub_805B9A4
b _0805B42A
.align 2, 0
_0805B204: .4byte 0x40120000
_0805B208: .4byte 0x0000FFFF
_0805B20C: .4byte gUnknown_03002AE4
_0805B210: .4byte gUnknown_0300287C
_0805B214: .4byte gUnknown_03005390
_0805B218: .4byte gUnknown_03004D5C
_0805B21C: .4byte gUnknown_03002A84
_0805B220:
ldr r0, _0805B254 @ =gPressedKeys
ldrh r1, [r0]
movs r0, #2
ands r0, r1
cmp r0, #0
beq _0805B2B0
movs r0, #0x6b
bl m4aSongNumStart
ldr r0, _0805B258 @ =gMultiSioStatusFlags
ldr r4, [r0]
movs r0, #0x80
ands r4, r0
cmp r4, #0
beq _0805B268
ldr r7, _0805B25C @ =gMultiSioSend
movs r1, #0
strh r1, [r7]
adds r0, r6, #0
adds r0, #0xe8
strh r1, [r0]
ldr r0, _0805B260 @ =gCurTask
ldr r1, [r0]
ldr r0, _0805B264 @ =sub_805B454
str r0, [r1, #8]
b _0805B42A
.align 2, 0
_0805B254: .4byte gPressedKeys
_0805B258: .4byte gMultiSioStatusFlags
_0805B25C: .4byte gMultiSioSend
_0805B260: .4byte gCurTask
_0805B264: .4byte sub_805B454
_0805B268:
ldr r0, _0805B29C @ =gMultiSioEnabled
strb r4, [r0]
bl MultiSioStop
movs r0, #0
bl MultiSioInit
ldr r7, _0805B2A0 @ =gMultiSioSend
movs r2, #0
strh r4, [r7]
ldr r0, _0805B2A4 @ =gUnknown_03004D80
strb r2, [r0]
ldr r1, _0805B2A8 @ =gUnknown_03002280
strb r2, [r1]
strb r2, [r1, #1]
movs r0, #0xff
strb r0, [r1, #2]
movs r0, #0x20
strb r0, [r1, #3]
bl CreateMultiplayerModeSelectScreen
ldr r0, _0805B2AC @ =gCurTask
ldr r0, [r0]
bl TaskDestroy
b _0805B42A
.align 2, 0
_0805B29C: .4byte gMultiSioEnabled
_0805B2A0: .4byte gMultiSioSend
_0805B2A4: .4byte gUnknown_03004D80
_0805B2A8: .4byte gUnknown_03002280
_0805B2AC: .4byte gCurTask
_0805B2B0:
ldr r1, _0805B3AC @ =gMultiSioStatusFlags
ldr r0, [r1]
movs r1, #0x80
ands r0, r1
cmp r0, #0
beq _0805B2D8
ldr r2, [sp, #4]
cmp r2, #1
ble _0805B302
ldr r0, [sp, #0x14]
cmp r0, #0
beq _0805B2D8
adds r4, r6, #0
adds r4, #0x3c
adds r0, r4, #0
bl sub_8004558
adds r0, r4, #0
bl sub_80051E8
_0805B2D8:
ldr r1, [sp, #4]
cmp r1, #1
ble _0805B302
adds r4, r6, #0
adds r4, #0x6c
ldr r0, _0805B3B0 @ =0x00000432
strh r0, [r4, #0xa]
adds r1, #6
adds r0, r6, #0
adds r0, #0x8c
strb r1, [r0]
adds r1, r6, #0
adds r1, #0x8d
movs r0, #0xff
strb r0, [r1]
adds r0, r4, #0
bl sub_8004558
adds r0, r4, #0
bl sub_80051E8
_0805B302:
adds r4, r6, #0
adds r4, #0xc
adds r0, r4, #0
bl sub_80051E8
ldr r0, _0805B3AC @ =gMultiSioStatusFlags
ldr r0, [r0]
movs r1, #0x80
ands r0, r1
adds r2, r6, #0
adds r2, #0xf6
str r2, [sp, #0x1c]
cmp r0, #0
beq _0805B3CC
ldr r0, [sp, #0x10]
cmp r0, #0
bne _0805B336
ldr r1, [sp]
cmp r1, #1
ble _0805B336
ldr r0, _0805B3B4 @ =gPressedKeys
ldrh r1, [r0]
movs r0, #8
ands r0, r1
cmp r0, #0
bne _0805B34E
_0805B336:
adds r1, r6, #0
adds r1, #0xf6
ldrb r0, [r1]
str r1, [sp, #0x1c]
cmp r0, #0
beq _0805B3EC
ldr r2, [sp, #0x10]
cmp r2, #0
bne _0805B3CC
ldr r0, [sp]
cmp r0, #1
ble _0805B3CC
_0805B34E:
ldr r7, _0805B3B8 @ =gMultiSioSend
ldr r0, _0805B3BC @ =0x00004011
strh r0, [r7]
mov r1, sp
ldrb r1, [r1, #8]
strb r1, [r7, #2]
ldr r1, _0805B3C0 @ =gLoadedSaveGame
ldr r0, [r1]
ldr r0, [r0]
str r0, [r7, #4]
adds r0, r6, #0
adds r0, #0xdc
ldr r0, [r0]
str r0, [r7, #0x10]
movs r2, #0
ldr r0, _0805B3C4 @ =gUnknown_03005594
mov r8, r0
ldr r0, _0805B3C8 @ =gUnknown_030054D8
mov sb, r0
adds r4, r6, #0
adds r4, #0xfc
adds r5, r1, #0
adds r3, r7, #0
adds r3, #8
_0805B37E:
lsls r0, r2, #1
ldr r1, [r5]
adds r1, #0x20
adds r1, r1, r0
ldrh r0, [r1]
strh r0, [r3]
adds r3, #2
adds r2, #1
cmp r2, #2
ble _0805B37E
mov r1, r8
ldrb r0, [r1]
movs r1, #0
strb r0, [r7, #0xe]
mov r2, sb
ldrb r0, [r2]
strb r0, [r7, #0xf]
movs r0, #1
ldr r2, [sp, #0x1c]
strb r0, [r2]
strb r1, [r4]
b _0805B42A
.align 2, 0
_0805B3AC: .4byte gMultiSioStatusFlags
_0805B3B0: .4byte 0x00000432
_0805B3B4: .4byte gPressedKeys
_0805B3B8: .4byte gMultiSioSend
_0805B3BC: .4byte 0x00004011
_0805B3C0: .4byte gLoadedSaveGame
_0805B3C4: .4byte gUnknown_03005594
_0805B3C8: .4byte gUnknown_030054D8
_0805B3CC:
ldr r1, [sp, #0x1c]
ldrb r0, [r1]
cmp r0, #0
beq _0805B3EC
movs r0, #0
strb r0, [r1]
ldr r0, _0805B43C @ =gMultiSioStatusFlags
ldr r0, [r0]
movs r1, #0x80
ands r0, r1
cmp r0, #0
beq _0805B3EC
adds r1, r6, #0
adds r1, #0xfc
movs r0, #1
strb r0, [r1]
_0805B3EC:
ldr r7, _0805B440 @ =gMultiSioSend
ldr r0, _0805B444 @ =0x00004010
strh r0, [r7]
ldr r1, _0805B448 @ =gLoadedSaveGame
ldr r0, [r1]
ldr r0, [r0]
str r0, [r7, #4]
movs r2, #0
ldr r0, _0805B44C @ =gUnknown_03005594
mov r8, r0
ldr r0, _0805B450 @ =gUnknown_030054D8
mov sb, r0
adds r4, r1, #0
adds r3, r7, #0
adds r3, #8
_0805B40A:
lsls r0, r2, #1
ldr r1, [r4]
adds r1, #0x20
adds r1, r1, r0
ldrh r0, [r1]
strh r0, [r3]
adds r3, #2
adds r2, #1
cmp r2, #2
ble _0805B40A
mov r1, r8
ldrb r0, [r1]
strb r0, [r7, #0xe]
mov r2, sb
ldrb r0, [r2]
strb r0, [r7, #0xf]
_0805B42A:
add sp, #0x34
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0805B43C: .4byte gMultiSioStatusFlags
_0805B440: .4byte gMultiSioSend
_0805B444: .4byte 0x00004010
_0805B448: .4byte gLoadedSaveGame
_0805B44C: .4byte gUnknown_03005594
_0805B450: .4byte gUnknown_030054D8
thumb_func_start sub_805B454
sub_805B454: @ 0x0805B454
push {r4, r5, lr}
ldr r5, _0805B4A8 @ =gCurTask
ldr r0, [r5]
ldrh r1, [r0, #6]
ldr r2, _0805B4AC @ =gMultiSioSend
movs r4, #0
movs r0, #0
strh r0, [r2]
ldr r0, _0805B4B0 @ =IWRAM_START + 0xE8
adds r1, r1, r0
ldrh r0, [r1]
adds r0, #1
strh r0, [r1]
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r0, #4
bls _0805B4A0
ldr r0, _0805B4B4 @ =gMultiSioEnabled
strb r4, [r0]
bl MultiSioStop
movs r0, #0
bl MultiSioInit
ldr r0, _0805B4B8 @ =gUnknown_03004D80
strb r4, [r0]
ldr r1, _0805B4BC @ =gUnknown_03002280
strb r4, [r1]
strb r4, [r1, #1]
movs r0, #0xff
strb r0, [r1, #2]
movs r0, #0x20
strb r0, [r1, #3]
bl CreateMultiplayerModeSelectScreen
ldr r0, [r5]
bl TaskDestroy
_0805B4A0:
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
_0805B4A8: .4byte gCurTask
_0805B4AC: .4byte gMultiSioSend
_0805B4B0: .4byte IWRAM_START + 0xE8
_0805B4B4: .4byte gMultiSioEnabled
_0805B4B8: .4byte gUnknown_03004D80
_0805B4BC: .4byte gUnknown_03002280
thumb_func_start sub_805B4C0
sub_805B4C0: @ 0x0805B4C0
push {r4, r5, r6, r7, lr}
+816
View File
@@ -0,0 +1,816 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x34
movs r0, #0
str r0, [sp]
movs r1, #0
str r1, [sp, #4]
movs r2, #0
str r2, [sp, #8]
movs r4, #0
str r0, [sp, #0xc]
str r1, [sp, #0x10]
movs r2, #1
str r2, [sp, #0x14]
ldr r0, _0805AE30 @ =gCurTask
ldr r0, [r0]
ldrh r1, [r0, #6]
movs r0, #0xc0
lsls r0, r0, #0x12
adds r6, r1, r0
adds r0, r6, #0
bl sub_802D4CC
ldr r0, _0805AE34 @ =gMultiSioStatusFlags
ldr r2, [r0]
movs r0, #0x81
ands r0, r2
cmp r0, #0
beq _0805AE60
ldr r3, _0805AE38 @ =0x04000128
ldr r1, [r3]
lsls r1, r1, #0x1a
lsrs r1, r1, #0x1e
ldr r0, [sp, #0x14]
lsls r0, r1
ands r2, r0
cmp r2, #0
bne _0805AE50
ldr r1, _0805AE3C @ =gUnknown_030054D4
ldr r0, [r3]
lsls r0, r0, #0x1a
lsrs r0, r0, #0x1e
adds r0, r0, r1
ldrb r1, [r0]
adds r2, r1, #1
strb r2, [r0]
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
cmp r1, #0xb4
bls _0805AE60
ldr r1, _0805AE40 @ =0x0000FFFF
movs r0, #0
bl TasksDestroyInPriorityRange
ldr r1, _0805AE44 @ =gUnknown_03002AE4
ldr r0, _0805AE48 @ =gUnknown_0300287C
ldrb r0, [r0]
strb r0, [r1]
ldr r0, _0805AE4C @ =gUnknown_03005390
mov r1, sp
ldrb r1, [r1, #8]
strb r1, [r0]
b _0805B1F6
.align 2, 0
_0805AE30: .4byte gCurTask
_0805AE34: .4byte gMultiSioStatusFlags
_0805AE38: .4byte 0x04000128
_0805AE3C: .4byte gUnknown_030054D4
_0805AE40: .4byte 0x0000FFFF
_0805AE44: .4byte gUnknown_03002AE4
_0805AE48: .4byte gUnknown_0300287C
_0805AE4C: .4byte gUnknown_03005390
_0805AE50:
ldr r1, _0805AEBC @ =gUnknown_030054D4
ldr r0, [r3]
lsls r0, r0, #0x1a
lsrs r0, r0, #0x1e
adds r0, r0, r1
mov r2, sp
ldrb r2, [r2, #8]
strb r2, [r0]
_0805AE60:
ldr r1, _0805AEC0 @ =gMultiSioStatusFlags
ldr r2, [r1]
movs r0, #0x80
lsls r0, r0, #1
ands r0, r2
cmp r0, #0
beq _0805AE70
movs r4, #1
_0805AE70:
ldr r0, _0805AEC4 @ =gMultiSioRecv
mov r8, r0
movs r0, #0x80
lsls r0, r0, #5
ands r0, r2
cmp r0, #0
bne _0805AE92
cmp r4, #0
beq _0805AED8
movs r0, #1
ands r2, r0
cmp r2, #0
bne _0805AED8
ldr r1, _0805AEC4 @ =gMultiSioRecv
ldrh r0, [r1]
cmp r0, #0
beq _0805AED8
_0805AE92:
adds r1, r6, #0
adds r1, #0xfd
ldrb r0, [r1]
adds r0, #1
strb r0, [r1]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #8
bls _0805AEE0
ldr r1, _0805AEC8 @ =0x0000FFFF
movs r0, #0
bl TasksDestroyInPriorityRange
ldr r1, _0805AECC @ =gUnknown_03002AE4
ldr r0, _0805AED0 @ =gUnknown_0300287C
ldrb r0, [r0]
strb r0, [r1]
ldr r1, _0805AED4 @ =gUnknown_03005390
movs r0, #0
b _0805B1F4
.align 2, 0
_0805AEBC: .4byte gUnknown_030054D4
_0805AEC0: .4byte gMultiSioStatusFlags
_0805AEC4: .4byte gMultiSioRecv
_0805AEC8: .4byte 0x0000FFFF
_0805AECC: .4byte gUnknown_03002AE4
_0805AED0: .4byte gUnknown_0300287C
_0805AED4: .4byte gUnknown_03005390
_0805AED8:
adds r1, r6, #0
adds r1, #0xfd
movs r0, #0
strb r0, [r1]
_0805AEE0:
movs r5, #0
adds r2, r6, #0
adds r2, #0xfa
str r2, [sp, #0x20]
movs r7, #1
adds r4, r6, #0
adds r4, #0xee
movs r0, #0xf2
adds r0, r0, r6
mov ip, r0
movs r1, #0
str r1, [sp, #0x28]
movs r2, #0
str r2, [sp, #0x2c]
mov sl, r2
ldr r0, _0805AF98 @ =gUnknown_03005460
mov sb, r0
_0805AF02:
lsls r1, r5, #2
str r1, [sp, #0x30]
ldr r3, _0805AF9C @ =gMultiSioRecv
add r3, sl
ldrb r0, [r4]
lsls r0, r0, #1
strb r0, [r4]
mov r2, ip
ldrb r0, [r2]
lsls r0, r0, #1
strb r0, [r2]
ldr r0, _0805AFA0 @ =0x04000128
ldr r0, [r0]
lsls r0, r0, #0x1a
lsrs r0, r0, #0x1e
cmp r5, r0
beq _0805AF3A
adds r1, r7, #0
lsls r1, r5
ldr r2, _0805AFA4 @ =gMultiSioStatusFlags
ldr r0, [r2]
ands r0, r1
cmp r0, #0
beq _0805AFB8
ldrh r0, [r3]
ldr r1, _0805AFA8 @ =0x0000400F
cmp r0, r1
bls _0805AFB8
_0805AF3A:
ldrb r1, [r4]
adds r0, r7, #0
orrs r0, r1
strb r0, [r4]
ldr r2, [sp]
adds r2, #1
str r2, [sp]
adds r0, r7, #0
lsls r0, r5
ldr r1, [sp, #8]
orrs r1, r0
lsls r0, r1, #0x18
lsrs r0, r0, #0x18
str r0, [sp, #8]
ldr r2, [sp, #0xc]
cmp r2, #0
beq _0805AF60
movs r0, #1
str r0, [sp, #0x10]
_0805AF60:
ldr r0, _0805AFAC @ =gUnknown_03005410
ldr r1, [sp, #0x30]
adds r0, r1, r0
ldr r1, [r3, #4]
str r1, [r0]
ldrh r0, [r3, #8]
mov r2, sb
strh r0, [r2]
ldr r0, _0805AF98 @ =gUnknown_03005460
adds r0, #2
ldr r1, [sp, #0x2c]
adds r0, r1, r0
ldrh r1, [r3, #0xa]
strh r1, [r0]
ldrh r0, [r3, #0xc]
strh r0, [r2, #4]
ldr r2, _0805AFB0 @ =gUnknown_03005594
ldrb r0, [r2]
ldrb r1, [r3, #0xe]
orrs r0, r1
strb r0, [r2]
ldr r2, _0805AFB4 @ =gUnknown_030054D8
ldrb r1, [r3, #0xf]
ldrb r0, [r2]
cmp r0, r1
bhs _0805B01E
strb r1, [r2]
b _0805B01E
.align 2, 0
_0805AF98: .4byte gUnknown_03005460
_0805AF9C: .4byte gMultiSioRecv
_0805AFA0: .4byte 0x04000128
_0805AFA4: .4byte gMultiSioStatusFlags
_0805AFA8: .4byte 0x0000400F
_0805AFAC: .4byte gUnknown_03005410
_0805AFB0: .4byte gUnknown_03005594
_0805AFB4: .4byte gUnknown_030054D8
_0805AFB8:
ldr r2, [sp, #0x28]
ldr r1, _0805AFF0 @ =0x04000120
adds r0, r2, r1
ldrh r0, [r0]
str r0, [sp, #0x30]
movs r2, #1
str r2, [sp, #0xc]
adds r1, r2, #0
lsls r1, r5
ldr r2, _0805AFF4 @ =gMultiSioStatusFlags
ldr r0, [r2]
ands r0, r1
cmp r0, #0
bne _0805AFF8
ldr r0, [sp, #0x30]
cmp r0, #0
bne _0805AFF8
movs r1, #1
str r1, [sp, #0x10]
mov r2, ip
ldrb r0, [r2]
adds r1, r7, #0
orrs r1, r0
strb r1, [r2]
ldrb r0, [r4]
cmp r0, #0
bne _0805B024
b _0805B01A
.align 2, 0
_0805AFF0: .4byte 0x04000120
_0805AFF4: .4byte gMultiSioStatusFlags
_0805AFF8:
mov r1, ip
ldrb r0, [r1]
cmp r0, #0
bne _0805B016
adds r1, r7, #0
lsls r1, r5
ldr r2, _0805B08C @ =gMultiSioStatusFlags
ldr r0, [r2]
ands r0, r1
cmp r0, #0
beq _0805B01E
ldrh r0, [r3]
ldr r1, _0805B090 @ =0x0000400F
cmp r0, r1
bhi _0805B01E
_0805B016:
movs r2, #1
str r2, [sp, #0x10]
_0805B01A:
movs r0, #0
str r0, [sp, #0x14]
_0805B01E:
ldrb r0, [r4]
cmp r0, #0
beq _0805B02A
_0805B024:
ldr r1, [sp, #4]
adds r1, #1
str r1, [sp, #4]
_0805B02A:
adds r4, #1
movs r2, #1
add ip, r2
ldr r0, [sp, #0x28]
adds r0, #2
str r0, [sp, #0x28]
movs r1, #0xc
add sb, r1
ldr r2, [sp, #0x2c]
adds r2, #0xc
str r2, [sp, #0x2c]
movs r0, #0x14
add sl, r0
adds r5, #1
cmp r5, #3
bgt _0805B04C
b _0805AF02
_0805B04C:
ldr r1, [sp, #4]
cmp r1, #0
bne _0805B056
movs r2, #1
str r2, [sp, #4]
_0805B056:
ldr r0, [sp, #0x20]
ldrb r4, [r0]
cmp r4, #0
bne _0805B0AE
ldr r1, _0805B08C @ =gMultiSioStatusFlags
ldr r0, [r1]
movs r1, #0x81
ands r0, r1
cmp r0, #1
bne _0805B0A8
mov r2, r8
ldrh r1, [r2]
ldr r0, _0805B094 @ =0x00004010
cmp r1, r0
bls _0805B0A8
ldr r1, _0805B098 @ =0x0000FFFF
movs r0, #0
bl TasksDestroyInPriorityRange
ldr r1, _0805B09C @ =gUnknown_03002AE4
ldr r0, _0805B0A0 @ =gUnknown_0300287C
ldrb r0, [r0]
strb r0, [r1]
ldr r0, _0805B0A4 @ =gUnknown_03005390
strb r4, [r0]
b _0805B1F6
.align 2, 0
_0805B08C: .4byte gMultiSioStatusFlags
_0805B090: .4byte 0x0000400F
_0805B094: .4byte 0x00004010
_0805B098: .4byte 0x0000FFFF
_0805B09C: .4byte gUnknown_03002AE4
_0805B0A0: .4byte gUnknown_0300287C
_0805B0A4: .4byte gUnknown_03005390
_0805B0A8:
movs r0, #1
ldr r1, [sp, #0x20]
strb r0, [r1]
_0805B0AE:
mov r2, r8
ldrh r1, [r2]
ldr r0, [sp, #0x10]
cmp r0, #0
beq _0805B0BA
b _0805B1D8
_0805B0BA:
ldr r0, _0805B130 @ =0x00004011
cmp r1, r0
beq _0805B0C2
b _0805B1D8
_0805B0C2:
ldr r2, [sp, #0x20]
ldrb r0, [r2]
cmp r0, #0
bne _0805B0CC
b _0805B1D8
_0805B0CC:
ldr r1, _0805B134 @ =gUnknown_03005434
mov r2, r8
ldr r0, [r2, #0x10]
str r0, [r1]
ldr r1, _0805B138 @ =gUnknown_030055B8
ldrb r0, [r2, #2]
strb r0, [r1]
movs r5, #0
adds r0, r6, #0
adds r0, #0xe8
str r0, [sp, #0x18]
adds r1, r6, #0
adds r1, #0xf6
str r1, [sp, #0x1c]
adds r6, #0xfb
str r6, [sp, #0x24]
ldr r6, _0805B13C @ =gUnknown_03005460
ldr r7, _0805B140 @ =gUnknown_03005594
adds r4, r6, #0
mov sl, r5
ldr r2, _0805B144 @ =gUnknown_03005410
mov ip, r2
mov sb, r5
_0805B0FA:
ldr r1, _0805B138 @ =gUnknown_030055B8
ldrb r0, [r1]
asrs r0, r5
movs r1, #1
ands r0, r1
cmp r0, #0
beq _0805B182
cmp r5, #0
bne _0805B14C
mov r2, r8
ldr r0, [r2, #4]
ldr r1, _0805B144 @ =gUnknown_03005410
str r0, [r1]
ldrh r0, [r2, #8]
strh r0, [r6]
ldrh r0, [r2, #0xa]
strh r0, [r6, #2]
ldrh r0, [r2, #0xc]
strh r0, [r6, #4]
ldrb r0, [r7]
ldrb r1, [r2, #0xe]
orrs r0, r1
strb r0, [r7]
ldr r2, _0805B148 @ =gUnknown_030054D8
mov r0, r8
ldrb r1, [r0, #0xf]
b _0805B17A
.align 2, 0
_0805B130: .4byte 0x00004011
_0805B134: .4byte gUnknown_03005434
_0805B138: .4byte gUnknown_030055B8
_0805B13C: .4byte gUnknown_03005460
_0805B140: .4byte gUnknown_03005594
_0805B144: .4byte gUnknown_03005410
_0805B148: .4byte gUnknown_030054D8
_0805B14C:
ldr r3, _0805B1C0 @ =gMultiSioRecv
add r3, sb
ldrh r0, [r3]
ldr r1, _0805B1C4 @ =0x00004010
cmp r0, r1
bne _0805B182
ldr r0, [r3, #4]
mov r2, ip
str r0, [r2]
ldrh r0, [r3, #8]
strh r0, [r4]
adds r0, r6, #2
add r0, sl
ldrh r1, [r3, #0xa]
strh r1, [r0]
ldrh r0, [r3, #0xc]
strh r0, [r4, #4]
ldrb r0, [r7]
ldrb r1, [r3, #0xe]
orrs r0, r1
strb r0, [r7]
ldr r2, _0805B1C8 @ =gUnknown_030054D8
ldrb r1, [r3, #0xf]
_0805B17A:
ldrb r0, [r2]
cmp r0, r1
bhs _0805B182
strb r1, [r2]
_0805B182:
adds r4, #0xc
movs r0, #0xc
add sl, r0
movs r1, #4
add ip, r1
movs r2, #0x14
add sb, r2
adds r5, #1
cmp r5, #3
ble _0805B0FA
movs r0, #0
movs r1, #0
ldr r2, [sp, #0x18]
strh r0, [r2]
ldr r0, [sp, #0x1c]
strb r1, [r0]
ldr r2, _0805B1CC @ =gUnknown_030054D4
strb r1, [r2, #3]
strb r1, [r2, #2]
strb r1, [r2, #1]
strb r1, [r2]
ldr r0, [sp, #0x24]
strb r1, [r0]
ldr r1, _0805B1D0 @ =gCurTask
ldr r0, [r1]
ldr r2, _0805B1D4 @ =sub_805B4C0
str r2, [r0, #8]
bl _call_via_r2
b _0805B42A
.align 2, 0
_0805B1C0: .4byte gMultiSioRecv
_0805B1C4: .4byte 0x00004010
_0805B1C8: .4byte gUnknown_030054D8
_0805B1CC: .4byte gUnknown_030054D4
_0805B1D0: .4byte gCurTask
_0805B1D4: .4byte sub_805B4C0
_0805B1D8:
lsls r1, r1, #0x10
ldr r0, _0805B204 @ =0x40120000
cmp r1, r0
bls _0805B220
ldr r1, _0805B208 @ =0x0000FFFF
movs r0, #0
bl TasksDestroyInPriorityRange
ldr r1, _0805B20C @ =gUnknown_03002AE4
ldr r0, _0805B210 @ =gUnknown_0300287C
ldrb r0, [r0]
strb r0, [r1]
ldr r1, _0805B214 @ =gUnknown_03005390
movs r0, #0
_0805B1F4:
strb r0, [r1]
_0805B1F6:
ldr r1, _0805B218 @ =gUnknown_03004D5C
ldr r0, _0805B21C @ =gUnknown_03002A84
ldrb r0, [r0]
strb r0, [r1]
bl sub_805B9A4
b _0805B42A
.align 2, 0
_0805B204: .4byte 0x40120000
_0805B208: .4byte 0x0000FFFF
_0805B20C: .4byte gUnknown_03002AE4
_0805B210: .4byte gUnknown_0300287C
_0805B214: .4byte gUnknown_03005390
_0805B218: .4byte gUnknown_03004D5C
_0805B21C: .4byte gUnknown_03002A84
_0805B220:
ldr r0, _0805B254 @ =gPressedKeys
ldrh r1, [r0]
movs r0, #2
ands r0, r1
cmp r0, #0
beq _0805B2B0
movs r0, #0x6b
bl m4aSongNumStart
ldr r0, _0805B258 @ =gMultiSioStatusFlags
ldr r4, [r0]
movs r0, #0x80
ands r4, r0
cmp r4, #0
beq _0805B268
ldr r7, _0805B25C @ =gMultiSioSend
movs r1, #0
strh r1, [r7]
adds r0, r6, #0
adds r0, #0xe8
strh r1, [r0]
ldr r0, _0805B260 @ =gCurTask
ldr r1, [r0]
ldr r0, _0805B264 @ =sub_805B454
str r0, [r1, #8]
b _0805B42A
.align 2, 0
_0805B254: .4byte gPressedKeys
_0805B258: .4byte gMultiSioStatusFlags
_0805B25C: .4byte gMultiSioSend
_0805B260: .4byte gCurTask
_0805B264: .4byte sub_805B454
_0805B268:
ldr r0, _0805B29C @ =gMultiSioEnabled
strb r4, [r0]
bl MultiSioStop
movs r0, #0
bl MultiSioInit
ldr r7, _0805B2A0 @ =gMultiSioSend
movs r2, #0
strh r4, [r7]
ldr r0, _0805B2A4 @ =gUnknown_03004D80
strb r2, [r0]
ldr r1, _0805B2A8 @ =gUnknown_03002280
strb r2, [r1]
strb r2, [r1, #1]
movs r0, #0xff
strb r0, [r1, #2]
movs r0, #0x20
strb r0, [r1, #3]
bl CreateMultiplayerModeSelectScreen
ldr r0, _0805B2AC @ =gCurTask
ldr r0, [r0]
bl TaskDestroy
b _0805B42A
.align 2, 0
_0805B29C: .4byte gMultiSioEnabled
_0805B2A0: .4byte gMultiSioSend
_0805B2A4: .4byte gUnknown_03004D80
_0805B2A8: .4byte gUnknown_03002280
_0805B2AC: .4byte gCurTask
_0805B2B0:
ldr r1, _0805B3AC @ =gMultiSioStatusFlags
ldr r0, [r1]
movs r1, #0x80
ands r0, r1
cmp r0, #0
beq _0805B2D8
ldr r2, [sp, #4]
cmp r2, #1
ble _0805B302
ldr r0, [sp, #0x14]
cmp r0, #0
beq _0805B2D8
adds r4, r6, #0
adds r4, #0x3c
adds r0, r4, #0
bl sub_8004558
adds r0, r4, #0
bl sub_80051E8
_0805B2D8:
ldr r1, [sp, #4]
cmp r1, #1
ble _0805B302
adds r4, r6, #0
adds r4, #0x6c
ldr r0, _0805B3B0 @ =0x00000432
strh r0, [r4, #0xa]
adds r1, #6
adds r0, r6, #0
adds r0, #0x8c
strb r1, [r0]
adds r1, r6, #0
adds r1, #0x8d
movs r0, #0xff
strb r0, [r1]
adds r0, r4, #0
bl sub_8004558
adds r0, r4, #0
bl sub_80051E8
_0805B302:
adds r4, r6, #0
adds r4, #0xc
adds r0, r4, #0
bl sub_80051E8
ldr r0, _0805B3AC @ =gMultiSioStatusFlags
ldr r0, [r0]
movs r1, #0x80
ands r0, r1
adds r2, r6, #0
adds r2, #0xf6
str r2, [sp, #0x1c]
cmp r0, #0
beq _0805B3CC
ldr r0, [sp, #0x10]
cmp r0, #0
bne _0805B336
ldr r1, [sp]
cmp r1, #1
ble _0805B336
ldr r0, _0805B3B4 @ =gPressedKeys
ldrh r1, [r0]
movs r0, #8
ands r0, r1
cmp r0, #0
bne _0805B34E
_0805B336:
adds r1, r6, #0
adds r1, #0xf6
ldrb r0, [r1]
str r1, [sp, #0x1c]
cmp r0, #0
beq _0805B3EC
ldr r2, [sp, #0x10]
cmp r2, #0
bne _0805B3CC
ldr r0, [sp]
cmp r0, #1
ble _0805B3CC
_0805B34E:
ldr r7, _0805B3B8 @ =gMultiSioSend
ldr r0, _0805B3BC @ =0x00004011
strh r0, [r7]
mov r1, sp
ldrb r1, [r1, #8]
strb r1, [r7, #2]
ldr r1, _0805B3C0 @ =gLoadedSaveGame
ldr r0, [r1]
ldr r0, [r0]
str r0, [r7, #4]
adds r0, r6, #0
adds r0, #0xdc
ldr r0, [r0]
str r0, [r7, #0x10]
movs r2, #0
ldr r0, _0805B3C4 @ =gUnknown_03005594
mov r8, r0
ldr r0, _0805B3C8 @ =gUnknown_030054D8
mov sb, r0
adds r4, r6, #0
adds r4, #0xfc
adds r5, r1, #0
adds r3, r7, #0
adds r3, #8
_0805B37E:
lsls r0, r2, #1
ldr r1, [r5]
adds r1, #0x20
adds r1, r1, r0
ldrh r0, [r1]
strh r0, [r3]
adds r3, #2
adds r2, #1
cmp r2, #2
ble _0805B37E
mov r1, r8
ldrb r0, [r1]
movs r1, #0
strb r0, [r7, #0xe]
mov r2, sb
ldrb r0, [r2]
strb r0, [r7, #0xf]
movs r0, #1
ldr r2, [sp, #0x1c]
strb r0, [r2]
strb r1, [r4]
b _0805B42A
.align 2, 0
_0805B3AC: .4byte gMultiSioStatusFlags
_0805B3B0: .4byte 0x00000432
_0805B3B4: .4byte gPressedKeys
_0805B3B8: .4byte gMultiSioSend
_0805B3BC: .4byte 0x00004011
_0805B3C0: .4byte gLoadedSaveGame
_0805B3C4: .4byte gUnknown_03005594
_0805B3C8: .4byte gUnknown_030054D8
_0805B3CC:
ldr r1, [sp, #0x1c]
ldrb r0, [r1]
cmp r0, #0
beq _0805B3EC
movs r0, #0
strb r0, [r1]
ldr r0, _0805B43C @ =gMultiSioStatusFlags
ldr r0, [r0]
movs r1, #0x80
ands r0, r1
cmp r0, #0
beq _0805B3EC
adds r1, r6, #0
adds r1, #0xfc
movs r0, #1
strb r0, [r1]
_0805B3EC:
ldr r7, _0805B440 @ =gMultiSioSend
ldr r0, _0805B444 @ =0x00004010
strh r0, [r7]
ldr r1, _0805B448 @ =gLoadedSaveGame
ldr r0, [r1]
ldr r0, [r0]
str r0, [r7, #4]
movs r2, #0
ldr r0, _0805B44C @ =gUnknown_03005594
mov r8, r0
ldr r0, _0805B450 @ =gUnknown_030054D8
mov sb, r0
adds r4, r1, #0
adds r3, r7, #0
adds r3, #8
_0805B40A:
lsls r0, r2, #1
ldr r1, [r4]
adds r1, #0x20
adds r1, r1, r0
ldrh r0, [r1]
strh r0, [r3]
adds r3, #2
adds r2, #1
cmp r2, #2
ble _0805B40A
mov r1, r8
ldrb r0, [r1]
strb r0, [r7, #0xe]
mov r2, sb
ldrb r0, [r2]
strb r0, [r7, #0xf]
_0805B42A:
add sp, #0x34
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0805B43C: .4byte gMultiSioStatusFlags
_0805B440: .4byte gMultiSioSend
_0805B444: .4byte 0x00004010
_0805B448: .4byte gLoadedSaveGame
_0805B44C: .4byte gUnknown_03005594
_0805B450: .4byte gUnknown_030054D8
.syntax divided
+11
View File
@@ -21,6 +21,17 @@
}
#endif
#if NON_MATCHING
#define NONMATCH(path, decl) decl
#define END_NONMATCH
#else
#define NONMATCH(path, decl) \
NAKED decl { \
asm(".include " #path); \
if (0)
#define END_NONMATCH }
#endif
/// IDE support
#if defined(__APPLE__) || defined(__CYGWIN__) || defined(__INTELLISENSE__)
// We define these when using certain IDEs to fool preproc
+4
View File
@@ -18,4 +18,8 @@
#define TO_LEVEL_INDEX(zone, act) ((zone) * (ACTS_PER_ZONE + 1)) + (act)
// likely static data, needs to be extracted
extern union Unk_03002E60 gMapHeaders[];
extern u32 gUnknown_080F40D4;
#endif // GUARD_ZONES_H
+27
View File
@@ -0,0 +1,27 @@
import sys
asm_file = sys.argv[1]
asm_content = "".join(open(asm_file).readlines())
func_lines = asm_content.split("thumb_func_start")[1].split('\n')
func_name = func_lines[0].strip()
func_body = "\n".join(func_lines[2:])
new_asm_content = asm_content.replace("thumb_func_start" + asm_content.split("thumb_func_start")[1], "")
content = f"""\
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
{func_body}
.syntax divided
"""
open(f"asm/non_matching/{func_name}.inc", 'w').write(content)
open(asm_file, "w").write(new_asm_content)
print(f"""NONMATCH("asm/non_matching/{func_name}.inc", void {func_name}()) {{
}}
END_NONMATCH
""")
+1 -4
View File
@@ -8,10 +8,7 @@
#include "player.h"
#include "title_screen.h"
#include "profile.h"
// likely static data, needs to be extracted
extern union Unk_03002E60 gMapHeaders[];
extern u32 gUnknown_080F40D4;
#include "zones.h"
// Some sort of unused task variable
struct Task *gUnknown_03005844;
+261 -252
View File
@@ -10,6 +10,9 @@
#include "input.h"
#include "m4a.h"
#include "constants/songs.h"
#include "game.h"
#include "flags.h"
#include "zones.h"
struct MultiplayerConnectScreen {
struct UNK_802D4CC_UNK270 unk0;
@@ -177,276 +180,282 @@ void sub_805AAD8(void) {
void sub_805B9A4(void);
u32 gUnknown_03005410[4];
// multiplayerNames
u16 gUnknown_03005460[4][6];
u32 gUnknown_03005434;
u8 gUnknown_030055B8;
void sub_805B4C0(void);
void sub_805B454(void);
#define SIO_MULTI_CNT ((volatile struct SioMultiCnt *)REG_ADDR_SIOCNT)
// https://decomp.me/scratch/EfwxS
// void sub_805ADAC(void) {
// u8 i;
// u32 var1 = 0;
// u32 var2 = 0;
// u8 var3 = 0;
// u8 bool1 = FALSE;
// u8 bool2 = FALSE;
// u8 bool3 = FALSE;
// struct MultiplayerConnectScreen* connectScreen = TaskGetStructPtr(gCurTask, connectScreen);
// sub_802D4CC(&connectScreen->unk0);
NONMATCH("asm/non_matching/sub_805ADAC.inc", void sub_805ADAC()) {
s32 i;
s32 x;
s32 var1 = 0;
s32 var2 = 0;
u8 var3 = 0;
bool8 r4 = FALSE;
bool8 bool1 = FALSE;
bool8 bool2 = FALSE;
bool8 bool3 = TRUE;
struct MultiplayerConnectScreen *connectScreen = TaskGetStructPtr(gCurTask, connectScreen);
struct MultiSioData_0_0 *send, *recv;
struct MultiSioData_0_0 *data;
struct UNK_0808B3FC_UNK240 *r4p;
// if (gMultiSioStatusFlags & (MULTI_SIO_PARENT | MULTI_SIO_RECV_ID0)) {
// if (gMultiSioStatusFlags & MULTI_SIO_RECV_ID(REG_SIOCNT >> 4)) {
// if (gUnknown_030054D4[REG_SIOCNT >> 4]++ > 180) {
// TasksDestroyAll();
// gUnknown_03002AE4 = gUnknown_0300287C;
// gUnknown_03005390 = 0;
// gUnknown_03004D5C = gUnknown_03002A84;
// gUnknown_0300287C = gUnknown_03002AE4;
// sub_805B9A4();
// return;
// }
// } else {
// gUnknown_030054D4[REG_SIOCNT >> 4] = 0;
// }
// }
sub_802D4CC(&connectScreen->unk0);
// if (gMultiSioStatusFlags & MULTI_SIO_HARD_ERROR ||
// (gMultiSioStatusFlags & MULTI_SIO_CONNECTED_ID0 &&
// !(gMultiSioStatusFlags & MULTI_SIO_RECV_ID0) && gMultiSioRecv[0].pat0.unk0 != 0)) {
// if (++connectScreen->unkFD >= 9) {
// TasksDestroyAll();
// gUnknown_03002AE4 = gUnknown_0300287C;
// gUnknown_03005390 = 0;
// gUnknown_03004D5C = gUnknown_03002A84;
// gUnknown_0300287C = gUnknown_03002AE4;
// sub_805B9A4();
// return;
// }
// } else {
// connectScreen->unkFD = 0;
// }
if (gMultiSioStatusFlags & (MULTI_SIO_PARENT | MULTI_SIO_RECV_ID0)) {
if (!(gMultiSioStatusFlags & MULTI_SIO_RECV_ID(SIO_MULTI_CNT->id))) {
if (gUnknown_030054D4[SIO_MULTI_CNT->id]++ > 180) {
TasksDestroyAll();
gUnknown_03002AE4 = gUnknown_0300287C;
gUnknown_03005390 = 0;
gUnknown_03004D5C = gUnknown_03002A84;
sub_805B9A4();
return;
}
} else {
gUnknown_030054D4[SIO_MULTI_CNT->id] = 0;
}
}
// for (i = 0; i < 4; i++) {
// connectScreen->unkEE[i] <<= 1;
// connectScreen->unkF2[i] <<= 1;
// if (i == REG_SIOCNT >> 4 ||
// (gMultiSioStatusFlags & MULTI_SIO_RECV_ID(i) &&
// gMultiSioRecv[i].pat0.unk0 < 0x400)) {
// connectScreen->unkEE[i] |= 1;
// var1++;
// var3 |= MULTI_SIO_RECV_ID(i);
// if (bool1) {
// bool2 = TRUE;
// }
// gUnknown_03005410[i] = gMultiSioRecv[i].pat0.unk4;
// memcpy(&gUnknown_03005460[i], &gMultiSioRecv[i].pat0.unk8, sizeof(gMultiSioRecv[i].pat0.unk8));
// gUnknown_03005594 |= gMultiSioRecv[i].pat0.unkE;
// if (gMultiSioRecv[i].pat0.unkF > gUnknown_030054D8) {
// gUnknown_030054D8 = gMultiSioRecv[i].pat0.unkF;
// }
// if (connectScreen->unkEE[i] != 0) {
// var2++;
// }
// } else {
// bool1 = TRUE;
// if (gMultiSioStatusFlags & MULTI_SIO_CONNECTED_ID(i) || *(vu16 *)(REG_ADDR_SIOMULTI0 + i * 2) != 0) {
// if (connectScreen->unkF2[i] != 0 || (gMultiSioStatusFlags & MULTI_SIO_CONNECTED_ID(i) && gMultiSioRecv[i].pat0.unk0 < 0x4010)) {
// bool2 = TRUE;
// bool3 = FALSE;
// }
// if (connectScreen->unkEE[i] != 0) {
// var2++;
// }
// } else {
// bool2 = TRUE;
// connectScreen->unkF2[i] |= 1;
// if (connectScreen->unkEE[i] == 0) {
// bool2 = TRUE;
// bool3 = FALSE;
// if (connectScreen->unkEE[i] != 0) {
// var2++;
// }
// } else {
// var2++;
// }
// }
// }
// }
// if (var2 == 0) {
// var2 = 1;
// }
// if (connectScreen->unkFA == 0) {
// if (gMultiSioStatusFlags & (MULTI_SIO_PARENT | MULTI_SIO_RECV_ID0) && gMultiSioRecv[i].pat0.unk0 > 0x4010) {
// TasksDestroyAll();
// gUnknown_03002AE4 = gUnknown_0300287C;
// gUnknown_03005390 = 0;
// gUnknown_03004D5C = gUnknown_03002A84;
// gUnknown_0300287C = gUnknown_03002AE4;
// return;
// }
// connectScreen->unkFA = 1;
// }
if (gMultiSioStatusFlags & MULTI_SIO_CONNECTED_ID0) {
r4 = TRUE;
}
recv = &gMultiSioRecv[0].pat0;
if (gMultiSioStatusFlags & MULTI_SIO_HARD_ERROR
|| (r4 && !(gMultiSioStatusFlags & MULTI_SIO_RECV_ID0) && recv->unk0 != 0)) {
if (++connectScreen->unkFD >= 9) {
TasksDestroyAll();
gUnknown_03002AE4 = gUnknown_0300287C;
gUnknown_03005390 = 0;
gUnknown_03004D5C = gUnknown_03002A84;
sub_805B9A4();
return;
}
} else {
connectScreen->unkFD = 0;
}
for (i = 0; i < 4; i++) {
data = &gMultiSioRecv[i].pat0;
connectScreen->unkEE[i] <<= 1;
connectScreen->unkF2[i] <<= 1;
if (i == SIO_MULTI_CNT->id ||
(gMultiSioStatusFlags & MULTI_SIO_RECV_ID(i) &&
data->unk0 > 0x400F)) {
connectScreen->unkEE[i] |= 1;
var1++;
var3 |= MULTI_SIO_RECV_ID(i);
if (bool1) {
bool2 = TRUE;
}
gUnknown_03005410[i] = data->unk4;
gUnknown_03005460[i][0] = data->unk8[0];
gUnknown_03005460[i][1] = data->unk8[1];
gUnknown_03005460[i][2] = data->unk8[2];
gUnknown_03005594 |= data->unkE;
// if (!bool2 && gMultiSioRecv[0].pat0.unk0 == 0x4011 && connectScreen->unkFA != 0) {
// u8 j;
// gUnknown_03005434 = gMultiSioRecv[0].pat0.unk10;
// gUnknown_030055B8 = gMultiSioRecv[0].pat0.unk2;
// for (j = 0; j < 4; j++) {
// if ((gUnknown_030055B8 >> j) & 1) {
// if (j == 0) {
// gUnknown_03005410[0] = gMultiSioRecv[j].pat0.unk4;
// memcpy(&gUnknown_03005460[0], &gMultiSioRecv[j].pat0.unk8, sizeof(gMultiSioRecv[j].pat0.unk8));
// gUnknown_03005594 |= gMultiSioRecv[j].pat0.unkE;
// if (gMultiSioRecv[j].pat0.unkF > gUnknown_030054D8) {
// gUnknown_030054D8 = gMultiSioRecv[j].pat0.unkF;
// }
// } else {
// if (gMultiSioRecv[j].pat0.unk0 != 0x4010) {
// continue;
// }
// gUnknown_03005410[j] = gMultiSioRecv[j].pat0.unk4;
// memcpy(&gUnknown_03005460[j], &gMultiSioRecv[j].pat0.unk8, sizeof(gMultiSioRecv[j].pat0.unk8));
// gUnknown_03005594 |= gMultiSioRecv[j].pat0.unkE;
// if (gMultiSioRecv[0].pat0.unkF > gUnknown_030054D8) {
// gUnknown_030054D8 = gMultiSioRecv[0].pat0.unkF;
// }
// }
// }
// }
// connectScreen->unkE8 = 0;
// connectScreen->unkF6 = 0;
// gUnknown_030054D4[3] = 0;
// gUnknown_030054D4[2] = 0;
// gUnknown_030054D4[1] = 0;
// gUnknown_030054D4[0] = 0;
// connectScreen->unkFB = 0;
// gCurTask->main = sub_805B4C0;
// sub_805B4C0();
// return;
// }
if (gUnknown_030054D8 < data->unkF) {
gUnknown_030054D8 = data->unkF;
}
// if (gMultiSioRecv[0].pat0.unk0 < 0x4013) {
// if (gPressedKeys & B_BUTTON) {
// m4aSongNumStart(SE_RETURN);
// if (gMultiSioStatusFlags & MULTI_SIO_PARENT) {
// gMultiSioSend.pat0.unk0 = 0;
// connectScreen->unkE8 = 0;
// gCurTask->main = sub_805B454;
// return;
// }
} else {
u16 a = ((vu16 *)(REG_ADDR_SIOMULTI0))[i];
bool1 = TRUE;
if (!(gMultiSioStatusFlags & MULTI_SIO_RECV_ID(i)) && a == 0) {
bool2 = TRUE;
connectScreen->unkF2[i] |= 1;
// gMultiSioEnabled = FALSE;
// MultiSioStop();
// MultiSioInit(0);
// gMultiSioSend.pat0.unk0 = 0;
// gUnknown_03004D80[0] = 0;
if (connectScreen->unkEE[i] == 0) {
bool2 = TRUE;
bool3 = FALSE;
}
} else {
if (connectScreen->unkF2[i] != 0
|| (gMultiSioStatusFlags & MULTI_SIO_RECV_ID(i) && data->unk0 < 0x4010)) {
bool2 = TRUE;
bool3 = FALSE;
}
}
}
if (connectScreen->unkEE[i] != 0) {
var2++;
}
}
// gUnknown_03002280[0] = 0;
// gUnknown_03002280[1] = 0;
// gUnknown_03002280[2] = 0xff;
// gUnknown_03002280[3] = 32;
// sub_805A1CC();
// TaskDestroy(gCurTask);
// return;
// }
if (var2 == 0) {
var2 = 1;
}
// if (!(gMultiSioStatusFlags & MULTI_SIO_PARENT)) {
// if (var2 > 1) {
// struct UNK_0808B3FC_UNK240* unk6C = &connectScreen->unk6C;
// unk6C->unkA = 0x432;
// unk6C->unk20 = 6;
// unk6C->unk21 = 0xFF;
// sub_8004558(unk6C);
// sub_80051E8(unk6C);
// }
// } else if (var2 > 1) {
// if (bool3) {
// struct UNK_0808B3FC_UNK240* unk3C = &connectScreen->unk3C;
// sub_8004558(unk3C);
// sub_80051E8(unk3C);
// }
// if (var2 > 1) {
// struct UNK_0808B3FC_UNK240* unk6C = &connectScreen->unk6C;
// unk6C->unkA = 0x432;
// unk6C->unk20 = 6;
// unk6C->unk21 = 0xFF;
// sub_8004558(unk6C);
// sub_80051E8(unk6C);
// }
// }
// sub_80051E8(&connectScreen->unkC);
if (connectScreen->unkFA == 0) {
if (!(gMultiSioStatusFlags & MULTI_SIO_PARENT) && gMultiSioStatusFlags & MULTI_SIO_RECV_ID0 && recv->unk0 > 0x4010) {
TasksDestroyAll();
gUnknown_03002AE4 = gUnknown_0300287C;
gUnknown_03005390 = 0;
gUnknown_03004D5C = gUnknown_03002A84;
sub_805B9A4();
return;
}
connectScreen->unkFA = 1;
}
// if (gMultiSioStatusFlags & MULTI_SIO_PARENT) {
// if (!bool1 && var1 > 1 && gPressedKeys & START_BUTTON) {
// u8 x;
// u8* unkF6 = &connectScreen->unkF6;
// gMultiSioSend.pat0.unk0 = 0x4011;
// gMultiSioSend.pat0.unk2 = var3;
// gMultiSioSend.pat0.unk4 = gLoadedSaveGame->unk0;
// gMultiSioSend.pat0.unk10 = connectScreen->unkDC;
if (!bool2 && recv->unk0 == 0x4011 && connectScreen->unkFA != 0) {
gUnknown_03005434 = recv->unk10;
gUnknown_030055B8 = recv->unk2;
for (i = 0; i < 4; i++) {
if ((gUnknown_030055B8 >> i) & 1) {
if (i == 0) {
gUnknown_03005410[0] = recv->unk4;
// Reg swap on this, should be r4, but is r6
gUnknown_03005460[0][0] = recv->unk8[0];
gUnknown_03005460[0][1] = recv->unk8[1];
gUnknown_03005460[0][2] = recv->unk8[2];
gUnknown_03005594 |= recv->unkE;
if (gUnknown_030054D8 < recv->unkF) {
gUnknown_030054D8 = recv->unkF;
}
continue;
}
data = &gMultiSioRecv[i].pat0;
#ifndef NONMATCHING
asm("":::"r2");
#endif
if (data->unk0 != 0x4010) {
continue;
}
gUnknown_03005410[i] = data->unk4;
gUnknown_03005460[i][0] = data->unk8[0];
gUnknown_03005460[i][1] = data->unk8[1];
gUnknown_03005460[i][2] = data->unk8[2];
gUnknown_03005594 |= data->unkE;
if (gUnknown_030054D8 < data->unkF) {
gUnknown_030054D8 = data->unkF;
}
}
}
connectScreen->unkE8 = 0;
connectScreen->unkF6 = 0;
gUnknown_030054D4[3] = 0;
gUnknown_030054D4[2] = 0;
gUnknown_030054D4[1] = 0;
gUnknown_030054D4[0] = 0;
connectScreen->unkFB = 0;
gCurTask->main = sub_805B4C0;
sub_805B4C0();
return;
}
// for (x = 0; x < 3; x++) {
// gMultiSioSend.pat0.unk8[x] = gLoadedSaveGame->unk20[i];
// }
// gMultiSioSend.pat0.unkE = gUnknown_03005594;
// gMultiSioSend.pat0.unkF = gUnknown_030054D8;
// *unkF6 = 1;
// connectScreen->unkFC = 0;
// return;
// }
if (recv->unk0 >= 0x4013) {
TasksDestroyAll();
gUnknown_03002AE4 = gUnknown_0300287C;
gUnknown_03005390 = 0;
gUnknown_03004D5C = gUnknown_03002A84;
sub_805B9A4();
return;
}
if (gPressedKeys & B_BUTTON) {
m4aSongNumStart(SE_RETURN);
if (gMultiSioStatusFlags & MULTI_SIO_PARENT) {
send = &gMultiSioSend.pat0;
send->unk0 = 0;
connectScreen->unkE8 = 0;
gCurTask->main = sub_805B454;
return;
}
// if (connectScreen->unkF6 != 0) {
// if (!bool2 && var1 > 1) {
// u8 x;
// u8* unkF6 = &connectScreen->unkF6;
// gMultiSioSend.pat0.unk0 = 0x4011;
// gMultiSioSend.pat0.unk2 = var3;
// gMultiSioSend.pat0.unk4 = gLoadedSaveGame->unk0;
// gMultiSioSend.pat0.unk10 = connectScreen->unkDC;
gMultiSioEnabled = FALSE;
MultiSioStop();
MultiSioInit(0);
send = &gMultiSioSend.pat0;
send->unk0 = 0;
gUnknown_03004D80[0] = 0;
// for (x = 0; x < 3; x++) {
// gMultiSioSend.pat0.unk8[x] = gLoadedSaveGame->unk20[i];
// }
// gMultiSioSend.pat0.unkE = gUnknown_03005594;
// gMultiSioSend.pat0.unkF = gUnknown_030054D8;
// *unkF6 = 1;
// connectScreen->unkFC = 0;
// return;
// }
// }
// } else {
// if (connectScreen->unkF6 != 0) {
// connectScreen->unkF6 = 0;
// if (gMultiSioStatusFlags & MULTI_SIO_PARENT) {
// connectScreen->unkFC = 1;
// }
// }
// }
gUnknown_03002280[0] = 0;
gUnknown_03002280[1] = 0;
gUnknown_03002280[2] = 0xff;
gUnknown_03002280[3] = 32;
CreateMultiplayerModeSelectScreen();
TaskDestroy(gCurTask);
return;
}
// {
// u8 x;
// gMultiSioSend.pat0.unk0 = 0x4010;
// gMultiSioSend.pat0.unk4 = gLoadedSaveGame->unk0;
// for (x = 0; x < 3; x++) {
// gMultiSioSend.pat0.unk8[x] = gLoadedSaveGame->unk20[x];
// }
// gMultiSioSend.pat0.unkE = gUnknown_03005594;
// gMultiSioSend.pat0.unkF = gUnknown_030054D8;
// return;
// }
// }
// TasksDestroyAll();
// gUnknown_03005390 = 0;
// gUnknown_03002AE4 = gUnknown_0300287C;
// gUnknown_03004D5C = gUnknown_03002A84;
// gUnknown_0300287C = gUnknown_03002AE4;
// sub_805B9A4();
// }
if ((gMultiSioStatusFlags & MULTI_SIO_PARENT) && var2 > 1 && bool3) {
r4p = &connectScreen->unk3C;
sub_8004558(r4p);
sub_80051E8(r4p);
}
if (var2 > 1) {
r4p = &connectScreen->unk6C;
r4p->unkA = 0x432;
r4p->unk20 = var2 + 6;
r4p->unk21 = 0xFF;
sub_8004558(r4p);
sub_80051E8(r4p);
}
r4p = &connectScreen->unkC;
sub_80051E8(r4p);
if (gMultiSioStatusFlags & MULTI_SIO_PARENT) {
if ((!bool2 && var1 > 1 && gPressedKeys & START_BUTTON) || (connectScreen->unkF6 != 0 && !bool2 && var1 > 1)) {
send = &gMultiSioSend.pat0;
send->unk0 = 0x4011;
send->unk2 = var3;
send->unk4 = gLoadedSaveGame->unk0;
send->unk10 = connectScreen->unkDC;
for (x = 0; x < 3; x++) {
send->unk8[x] = gLoadedSaveGame->unk20[x];
}
send->unkE = gUnknown_03005594;
send->unkF = gUnknown_030054D8;
connectScreen->unkF6 = 1;
connectScreen->unkFC = 0;
return;
}
}
if (connectScreen->unkF6 != 0) {
connectScreen->unkF6 = 0;
if (gMultiSioStatusFlags & MULTI_SIO_PARENT) {
connectScreen->unkFC = 1;
}
}
send = &gMultiSioSend.pat0;
send->unk0 = 0x4010;
send->unk4 = gLoadedSaveGame->unk0;
for (x = 0; x < 3; x++) {
send->unk8[x] = gLoadedSaveGame->unk20[x];
}
send->unkE = gUnknown_03005594;
send->unkF = gUnknown_030054D8;
}
END_NONMATCH
void sub_805B454(void) {
struct MultiplayerConnectScreen* connectScreen = TaskGetStructPtr(gCurTask, connectScreen);
gMultiSioSend.pat0.unk0 = 0;
if (++connectScreen->unkE8 > 4) {
gMultiSioEnabled = FALSE;
MultiSioStop();
MultiSioInit(0);
gUnknown_03004D80[0] = 0;
gUnknown_03002280[0] = 0;
gUnknown_03002280[1] = 0;
gUnknown_03002280[2] = 0xFF;
gUnknown_03002280[3] = 32;
CreateMultiplayerModeSelectScreen();
TaskDestroy(gCurTask);
}
}