summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2020-01-20 09:09:02 -0500
committerPikalaxALT <PikalaxALT@gmail.com>2020-01-20 09:09:02 -0500
commitcedebf15ee3595228d6fa212b74e1c5aa6fac3f1 (patch)
tree0026a3177a0ce05d81abc14c474bafbdbf380fe9
parent44337a41dbfcc4d2fe5f1e22cd87769a27c006c9 (diff)
sub_8115A68
-rw-r--r--asm/union_room.s887
-rw-r--r--include/link_rfu.h12
-rw-r--r--src/link_rfu_3.c2
-rw-r--r--src/union_room.c330
4 files changed, 343 insertions, 888 deletions
diff --git a/asm/union_room.s b/asm/union_room.s
index 222ecaa7a..d35ca5190 100644
--- a/asm/union_room.s
+++ b/asm/union_room.s
@@ -5,891 +5,6 @@
.text
- thumb_func_start sub_8115A68
-sub_8115A68: @ 8115A68
- push {r4-r7,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08115A88 @ =gUnknown_203B05C
- ldr r5, [r0]
- ldrb r0, [r5, 0xC]
- cmp r0, 0x1E
- bls _08115A7C
- b _081161D8
-_08115A7C:
- lsls r0, 2
- ldr r1, _08115A8C @ =_08115A90
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08115A88: .4byte gUnknown_203B05C
-_08115A8C: .4byte _08115A90
- .align 2, 0
-_08115A90:
- .4byte _08115B0C
- .4byte _081161D8
- .4byte _081161D8
- .4byte _08115B5C
- .4byte _08115C60
- .4byte _08115CE8
- .4byte _08115D04
- .4byte _08115E24
- .4byte _081161D8
- .4byte _08115D94
- .4byte _08115DAC
- .4byte _08115E40
- .4byte _08115EF4
- .4byte _0811600A
- .4byte _08116028
- .4byte _0811603A
- .4byte _08116058
- .4byte _08116112
- .4byte _08116128
- .4byte _081160A2
- .4byte _081160C0
- .4byte _08116168
- .4byte _08116194
- .4byte _08116168
- .4byte _0811617E
- .4byte _081161D8
- .4byte _081161AC
- .4byte _081161D8
- .4byte _081161D8
- .4byte _08115DEC
- .4byte _0811614C
-_08115B0C:
- ldr r3, _08115B4C @ =gUnknown_203B058
- ldr r2, _08115B50 @ =gUnknown_8456CD8
- ldr r1, _08115B54 @ =gSpecialVar_0x8004
- ldrh r0, [r1]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- strb r0, [r3]
- ldr r4, _08115B58 @ =gUnknown_203B059
- ldrh r0, [r1]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- lsrs r0, 8
- strb r0, [r4]
- ldrb r0, [r3]
- movs r1, 0
- movs r2, 0
- bl sub_80FAF58
- bl sub_800B1F4
- bl OpenLink
- ldrb r1, [r4]
- movs r0, 0xF
- ands r0, r1
- bl sub_80FBB8C
- movs r0, 0x3
- strb r0, [r5, 0xC]
- b _081161D8
- .align 2, 0
-_08115B4C: .4byte gUnknown_203B058
-_08115B50: .4byte gUnknown_8456CD8
-_08115B54: .4byte gSpecialVar_0x8004
-_08115B58: .4byte gUnknown_203B059
-_08115B5C:
- movs r0, 0x70
- bl AllocZeroed
- str r0, [r5, 0x4]
- movs r0, 0xA0
- bl AllocZeroed
- str r0, [r5]
- movs r0, 0xA0
- bl AllocZeroed
- str r0, [r5, 0x8]
- ldr r0, [r5, 0x4]
- movs r1, 0x4
- bl sub_811A650
- ldr r0, [r5]
- movs r1, 0x5
- bl sub_811A5E4
- ldr r0, [r5]
- adds r1, r0, 0
- adds r1, 0x10
- bl sub_80FCD50
- ldr r1, [r5]
- movs r3, 0
- movs r0, 0
- strh r0, [r1, 0x18]
- ldr r2, [r5]
- ldrb r1, [r2, 0x1A]
- subs r0, 0x4
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x1A]
- ldr r2, [r5]
- ldrb r1, [r2, 0x1A]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x1A]
- ldr r0, [r5]
- strb r3, [r0, 0x1B]
- ldr r0, [r5, 0x4]
- movs r1, 0xFF
- bl sub_811A054
- strb r0, [r5, 0x17]
- ldr r0, _08115C48 @ =gUnknown_8456CD0
- bl AddWindow
- strb r0, [r5, 0x10]
- ldr r0, _08115C4C @ =gUnknown_8456CFC
- bl AddWindow
- strb r0, [r5, 0xF]
- ldr r0, _08115C50 @ =gUnknown_8456D04
- bl AddWindow
- strb r0, [r5, 0x11]
- ldrb r0, [r5, 0x10]
- movs r1, 0x22
- bl FillWindowPixelBuffer
- ldrb r0, [r5, 0x10]
- ldr r2, _08115C54 @ =gUnknown_845747C
- movs r1, 0x2
- str r1, [sp]
- movs r4, 0x4
- str r4, [sp, 0x4]
- movs r1, 0
- movs r3, 0x8
- bl sub_811A444
- ldrb r0, [r5, 0x10]
- bl PutWindowTilemap
- ldrb r0, [r5, 0x10]
- movs r1, 0x2
- bl CopyWindowToVram
- ldrb r0, [r5, 0xF]
- movs r1, 0
- bl DrawStdWindowFrame
- ldr r0, _08115C58 @ =gMultiuseListMenuTemplate
- adds r2, r0, 0
- ldr r1, _08115C5C @ =gUnknown_8456D34
- ldm r1!, {r3,r6,r7}
- stm r2!, {r3,r6,r7}
- ldm r1!, {r3,r6,r7}
- stm r2!, {r3,r6,r7}
- ldrb r1, [r5, 0xF]
- strb r1, [r0, 0x10]
- movs r1, 0
- movs r2, 0
- bl ListMenuInit
- strb r0, [r5, 0x12]
- ldrb r0, [r5, 0x11]
- movs r1, 0
- bl DrawStdWindowFrame
- ldrb r0, [r5, 0x11]
- bl PutWindowTilemap
- ldrb r0, [r5, 0x11]
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- movs r0, 0x1
- strb r0, [r5, 0x13]
- strb r4, [r5, 0xC]
- b _081161D8
- .align 2, 0
-_08115C48: .4byte gUnknown_8456CD0
-_08115C4C: .4byte gUnknown_8456CFC
-_08115C50: .4byte gUnknown_8456D04
-_08115C54: .4byte gUnknown_845747C
-_08115C58: .4byte gMultiuseListMenuTemplate
-_08115C5C: .4byte gUnknown_8456D34
-_08115C60:
- ldr r0, _08115C98 @ =gStringVar1
- ldr r2, _08115C9C @ =gUnknown_8456C74
- ldr r4, _08115CA0 @ =gUnknown_203B058
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl StringCopy
- ldr r0, _08115CA4 @ =gUnknown_203B059
- ldrb r2, [r0]
- lsrs r0, r2, 4
- cmp r0, 0
- beq _08115CC4
- ldrb r1, [r5, 0x13]
- subs r0, 0x1
- cmp r1, r0
- ble _08115CB0
- movs r0, 0xF
- ands r0, r2
- cmp r0, 0
- beq _08115CB0
- ldr r0, _08115CA8 @ =gStringVar4
- ldr r1, _08115CAC @ =gUnknown_8457264
- bl StringExpandPlaceholders
- b _08115CCC
- .align 2, 0
-_08115C98: .4byte gStringVar1
-_08115C9C: .4byte gUnknown_8456C74
-_08115CA0: .4byte gUnknown_203B058
-_08115CA4: .4byte gUnknown_203B059
-_08115CA8: .4byte gStringVar4
-_08115CAC: .4byte gUnknown_8457264
-_08115CB0:
- ldr r0, _08115CBC @ =gStringVar4
- ldr r1, _08115CC0 @ =gUnknown_8457234
- bl StringExpandPlaceholders
- b _08115CCC
- .align 2, 0
-_08115CBC: .4byte gStringVar4
-_08115CC0: .4byte gUnknown_8457234
-_08115CC4:
- ldr r0, _08115CE0 @ =gStringVar4
- ldrb r1, [r4]
- bl sub_811599C
-_08115CCC:
- ldrb r0, [r5, 0x11]
- ldr r1, _08115CE4 @ =gUnknown_203B059
- ldrb r1, [r1]
- ldrb r2, [r5, 0x13]
- bl sub_811586C
- movs r0, 0x5
- strb r0, [r5, 0xC]
- b _081161D8
- .align 2, 0
-_08115CE0: .4byte gStringVar4
-_08115CE4: .4byte gUnknown_203B059
-_08115CE8:
- adds r0, r5, 0
- adds r0, 0xD
- ldr r1, _08115D00 @ =gStringVar4
- bl sub_811A0F8
- lsls r0, 24
- cmp r0, 0
- bne _08115CFA
- b _081161D8
-_08115CFA:
- movs r0, 0x6
- strb r0, [r5, 0xC]
- b _081161D8
- .align 2, 0
-_08115D00: .4byte gStringVar4
-_08115D04:
- adds r0, r5, 0
- movs r1, 0x7
- movs r2, 0xA
- bl sub_8116444
- ldr r0, _08115D24 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08115D40
- ldrb r0, [r5, 0x13]
- cmp r0, 0x1
- bne _08115D28
- movs r0, 0x17
- b _08115D3E
- .align 2, 0
-_08115D24: .4byte gMain
-_08115D28:
- ldr r0, _08115D38 @ =gUnknown_203B059
- ldrb r1, [r0]
- movs r0, 0xF0
- ands r0, r1
- cmp r0, 0
- beq _08115D3C
- movs r0, 0x1E
- b _08115D3E
- .align 2, 0
-_08115D38: .4byte gUnknown_203B059
-_08115D3C:
- movs r0, 0x13
-_08115D3E:
- strb r0, [r5, 0xC]
-_08115D40:
- ldr r0, _08115D8C @ =gUnknown_203B059
- ldrb r2, [r0]
- lsrs r0, r2, 4
- cmp r0, 0
- beq _08115D76
- ldrb r1, [r5, 0x13]
- subs r0, 0x1
- cmp r1, r0
- ble _08115D76
- movs r4, 0xF
- adds r0, r4, 0
- ands r0, r2
- cmp r0, 0
- beq _08115D76
- bl sub_80FC1CC
- cmp r0, 0
- beq _08115D76
- ldr r0, _08115D90 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08115D76
- strb r4, [r5, 0xC]
- bl sub_80F8F5C
-_08115D76:
- ldrb r0, [r5, 0xC]
- cmp r0, 0x6
- beq _08115D7E
- b _081161D8
-_08115D7E:
- bl sub_80FA5D4
- cmp r0, 0
- bne _08115D88
- b _081161D8
-_08115D88:
- b _08115EEE
- .align 2, 0
-_08115D8C: .4byte gUnknown_203B059
-_08115D90: .4byte gMain
-_08115D94:
- bl sub_80FA5D4
- cmp r0, 0
- beq _08115D9E
- b _081161D8
-_08115D9E:
- movs r0, 0x6
- strb r0, [r5, 0xC]
- ldr r0, [r5]
- bl sub_81165E8
- strb r0, [r5, 0x13]
- b _081161D8
-_08115DAC:
- movs r3, 0
- ldr r0, _08115DE4 @ =gUnknown_203B058
- ldrb r1, [r0]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x2
- bne _08115DBC
- movs r3, 0x1
-_08115DBC:
- adds r0, r5, 0
- adds r0, 0xD
- ldr r2, _08115DE8 @ =gUnknown_845767C
- lsls r1, r3, 2
- adds r1, r2
- ldr r1, [r1]
- bl sub_811A0F8
- lsls r0, 24
- cmp r0, 0
- bne _08115DD4
- b _081161D8
-_08115DD4:
- ldr r0, [r5]
- bl sub_81165E8
- strb r0, [r5, 0x13]
- ldrb r0, [r5, 0x12]
- bl RedrawListMenu
- b _0811610C
- .align 2, 0
-_08115DE4: .4byte gUnknown_203B058
-_08115DE8: .4byte gUnknown_845767C
-_08115DEC:
- ldr r0, _08115E1C @ =gUnknown_203B059
- ldrb r0, [r0]
- movs r1, 0xF
- ands r1, r0
- movs r0, 0x2
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- lsrs r3, r0, 31
- adds r0, r5, 0
- adds r0, 0xD
- ldr r2, _08115E20 @ =gUnknown_845767C
- lsls r1, r3, 2
- adds r1, r2
- ldr r1, [r1]
- bl sub_811A0F8
- lsls r0, 24
- cmp r0, 0
- bne _08115E16
- b _081161D8
-_08115E16:
- movs r0, 0x15
- strb r0, [r5, 0xC]
- b _081161D8
- .align 2, 0
-_08115E1C: .4byte gUnknown_203B059
-_08115E20: .4byte gUnknown_845767C
-_08115E24:
- adds r0, r5, 0
- adds r0, 0xD
- ldr r1, _08115E3C @ =gStringVar4
- bl sub_811A0F8
- lsls r0, 24
- cmp r0, 0
- bne _08115E36
- b _081161D8
-_08115E36:
- movs r0, 0xB
- strb r0, [r5, 0xC]
- b _081161D8
- .align 2, 0
-_08115E3C: .4byte gStringVar4
-_08115E40:
- adds r4, r5, 0
- adds r4, 0xD
- ldrb r1, [r5, 0x13]
- lsls r1, 5
- ldr r0, [r5]
- adds r0, r1
- adds r0, 0x2
- bl sub_8118658
- lsls r0, 16
- lsrs r0, 16
- ldrb r2, [r5, 0x13]
- lsls r2, 5
- ldr r1, [r5]
- adds r1, r2
- adds r1, 0x10
- bl sub_80FA634
- adds r1, r0, 0
- adds r0, r4, 0
- bl sub_811A14C
- lsls r0, 24
- asrs r1, r0, 24
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08115EC0
- cmp r1, r0
- bgt _08115E84
- subs r0, 0x2
- cmp r1, r0
- beq _08115EEE
- b _081161D8
-_08115E84:
- cmp r1, 0
- beq _08115E8E
- cmp r1, 0x1
- beq _08115EC0
- b _081161D8
-_08115E8E:
- bl LoadWirelessStatusIndicatorSpriteGfx
- movs r0, 0
- movs r1, 0
- bl CreateWirelessStatusIndicatorSprite
- movs r0, 0x5
- strb r0, [r5, 0x19]
- ldrb r1, [r5, 0x13]
- lsls r1, 5
- ldr r0, [r5]
- adds r0, r1
- adds r0, 0x2
- bl sub_8118658
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldrb r0, [r5, 0x13]
- lsls r0, 5
- ldr r2, [r5]
- adds r2, r0
- adds r2, 0x10
- movs r0, 0x5
- b _08115EE4
-_08115EC0:
- movs r0, 0x6
- strb r0, [r5, 0x19]
- ldrb r1, [r5, 0x13]
- lsls r1, 5
- ldr r0, [r5]
- adds r0, r1
- adds r0, 0x2
- bl sub_8118658
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldrb r0, [r5, 0x13]
- lsls r0, 5
- ldr r2, [r5]
- adds r2, r0
- adds r2, 0x10
- movs r0, 0x6
-_08115EE4:
- bl sub_80FA670
- movs r0, 0xC
- strb r0, [r5, 0xC]
- b _081161D8
-_08115EEE:
- movs r0, 0x9
- strb r0, [r5, 0xC]
- b _081161D8
-_08115EF4:
- ldrb r1, [r5, 0x13]
- lsls r1, 5
- ldr r0, [r5]
- adds r0, r1
- adds r0, 0x2
- bl sub_8118658
- lsls r0, 16
- lsrs r0, 16
- ldrb r2, [r5, 0x13]
- lsls r2, 5
- ldr r1, [r5]
- adds r1, r2
- adds r1, 0x10
- bl sub_80FA6FC
- cmp r0, 0x1
- bne _08115FFA
- ldrb r0, [r5, 0x19]
- cmp r0, 0x5
- bne _08115FB4
- ldr r1, [r5]
- ldrb r0, [r5, 0x13]
- lsls r0, 5
- adds r1, r0
- movs r0, 0
- strb r0, [r1, 0x1B]
- ldrb r0, [r5, 0x12]
- bl RedrawListMenu
- ldrb r0, [r5, 0x13]
- adds r0, 0x1
- strb r0, [r5, 0x13]
- ldr r1, _08115F58 @ =gUnknown_203B059
- ldrb r1, [r1]
- movs r3, 0xF
- lsls r0, 24
- lsrs r2, r0, 24
- adds r0, r3, 0
- ands r0, r1
- cmp r2, r0
- bne _08115FF0
- movs r0, 0xF0
- ands r0, r1
- cmp r0, 0
- bne _08115F54
- cmp r2, 0x4
- bne _08115F5C
-_08115F54:
- strb r3, [r5, 0xC]
- b _08115F90
- .align 2, 0
-_08115F58: .4byte gUnknown_203B059
-_08115F5C:
- ldr r4, _08115FA4 @ =gStringVar1
- ldrb r1, [r5, 0x13]
- lsls r1, 5
- ldr r0, [r5]
- adds r1, r0
- subs r1, 0x10
- adds r0, r4, 0
- bl StringCopy7
- ldr r1, [r5]
- ldrb r0, [r5, 0x13]
- subs r0, 0x1
- lsls r0, 5
- adds r1, r0
- ldrb r1, [r1]
- lsls r1, 28
- lsrs r1, 28
- adds r0, r4, 0
- bl ConvertInternationalString
- ldr r0, _08115FA8 @ =gStringVar4
- ldr r1, _08115FAC @ =gUnknown_8457554
- bl StringExpandPlaceholders
- movs r0, 0xD
- strb r0, [r5, 0xC]
-_08115F90:
- bl sub_80F8F5C
- ldrb r0, [r5, 0x11]
- ldr r1, _08115FB0 @ =gUnknown_203B059
- ldrb r1, [r1]
- ldrb r2, [r5, 0x13]
- bl sub_811586C
- b _08115FF4
- .align 2, 0
-_08115FA4: .4byte gStringVar1
-_08115FA8: .4byte gStringVar4
-_08115FAC: .4byte gUnknown_8457554
-_08115FB0: .4byte gUnknown_203B059
-_08115FB4:
- ldrb r1, [r5, 0x13]
- lsls r1, 5
- ldr r0, [r5]
- adds r0, r1
- adds r4, r0, 0
- adds r4, 0x10
- adds r0, 0x2
- bl sub_8118658
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_80FBD4C
- ldr r1, [r5]
- ldrb r0, [r5, 0x13]
- lsls r0, 5
- adds r1, r0
- ldrb r2, [r1, 0x1A]
- movs r0, 0x4
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1A]
- ldr r0, [r5]
- bl sub_81165E8
- ldrb r0, [r5, 0x12]
- bl RedrawListMenu
-_08115FF0:
- movs r0, 0x4
- strb r0, [r5, 0xC]
-_08115FF4:
- movs r0, 0
- strb r0, [r5, 0x19]
- b _081161D8
-_08115FFA:
- cmp r0, 0x2
- beq _08116000
- b _081161D8
-_08116000:
- movs r0, 0
- movs r1, 0
- bl sub_80FB9E4
- b _0811610C
-_0811600A:
- adds r0, r5, 0
- adds r0, 0xD
- ldr r1, _08116024 @ =gStringVar4
- bl sub_811A0F8
- lsls r0, 24
- cmp r0, 0
- bne _0811601C
- b _081161D8
-_0811601C:
- movs r0, 0xE
- strb r0, [r5, 0xC]
- b _081161D8
- .align 2, 0
-_08116024: .4byte gStringVar4
-_08116028:
- ldrb r0, [r5, 0xE]
- adds r0, 0x1
- strb r0, [r5, 0xE]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x78
- bhi _08116038
- b _081161D8
-_08116038:
- b _0811607E
-_0811603A:
- adds r0, r5, 0
- adds r0, 0xD
- ldr r1, _08116054 @ =gUnknown_8457514
- bl sub_811A0F8
- lsls r0, 24
- cmp r0, 0
- bne _0811604C
- b _081161D8
-_0811604C:
- movs r0, 0x10
- strb r0, [r5, 0xC]
- b _081161D8
- .align 2, 0
-_08116054: .4byte gUnknown_8457514
-_08116058:
- adds r0, r5, 0
- adds r0, 0xD
- movs r1, 0
- bl sub_811A14C
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _0811607E
- cmp r1, 0
- bgt _08116078
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08116084
- b _081161D8
-_08116078:
- cmp r1, 0x1
- beq _08116084
- b _081161D8
-_0811607E:
- movs r0, 0x11
- strb r0, [r5, 0xC]
- b _081161D8
-_08116084:
- ldr r0, _08116098 @ =gUnknown_203B059
- ldrb r1, [r0]
- movs r0, 0xF0
- ands r0, r1
- cmp r0, 0
- beq _0811609C
- movs r0, 0x1E
- strb r0, [r5, 0xC]
- b _081161D8
- .align 2, 0
-_08116098: .4byte gUnknown_203B059
-_0811609C:
- movs r0, 0x13
- strb r0, [r5, 0xC]
- b _081161D8
-_081160A2:
- adds r0, r5, 0
- adds r0, 0xD
- ldr r1, _081160BC @ =gUnknown_8457530
- bl sub_811A0F8
- lsls r0, 24
- cmp r0, 0
- bne _081160B4
- b _081161D8
-_081160B4:
- movs r0, 0x14
- strb r0, [r5, 0xC]
- b _081161D8
- .align 2, 0
-_081160BC: .4byte gUnknown_8457530
-_081160C0:
- adds r0, r5, 0
- adds r0, 0xD
- movs r1, 0
- bl sub_811A14C
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _0811615C
- cmp r1, 0
- bgt _081160E0
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _081160E4
- b _081161D8
-_081160E0:
- cmp r1, 0x1
- bne _081161D8
-_081160E4:
- ldr r0, _081160F8 @ =gUnknown_203B059
- ldrb r2, [r0]
- movs r0, 0xF0
- ands r0, r2
- cmp r0, 0
- beq _081160FC
- movs r0, 0xF
- strb r0, [r5, 0xC]
- b _081161D8
- .align 2, 0
-_081160F8: .4byte gUnknown_203B059
-_081160FC:
- movs r3, 0xF
- ldrb r1, [r5, 0x13]
- adds r0, r3, 0
- ands r0, r2
- cmp r1, r0
- bne _0811610C
- strb r3, [r5, 0xC]
- b _081161D8
-_0811610C:
- movs r0, 0x4
- strb r0, [r5, 0xC]
- b _081161D8
-_08116112:
- adds r0, r5, 0
- movs r1, 0x7
- movs r2, 0x17
- bl sub_8116444
- lsls r0, 24
- cmp r0, 0
- bne _081161D8
- movs r0, 0x12
- strb r0, [r5, 0xC]
- b _081161D8
-_08116128:
- bl sub_80F8F40
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- beq _08116144
- movs r0, 0
- bl sub_80F8F7C
- cmp r0, 0
- beq _081161D8
- movs r0, 0x1A
- strb r0, [r5, 0xC]
- b _081161D8
-_08116144:
- movs r0, 0x1D
- strb r0, [r5, 0xC]
- strb r1, [r5, 0xD]
- b _081161D8
-_0811614C:
- adds r0, r5, 0
- adds r0, 0xD
- ldr r1, _08116164 @ =gUnknown_8457610
- bl sub_811A0F8
- lsls r0, 24
- cmp r0, 0
- beq _081161D8
-_0811615C:
- movs r0, 0x17
- strb r0, [r5, 0xC]
- b _081161D8
- .align 2, 0
-_08116164: .4byte gUnknown_8457610
-_08116168:
- bl DestroyWirelessStatusIndicatorSprite
- bl sub_80F8DC0
- adds r0, r5, 0
- bl sub_81161E4
- ldrb r0, [r5, 0xC]
- adds r0, 0x1
- strb r0, [r5, 0xC]
- b _081161D8
-_0811617E:
- bl EnableBothScriptContexts
- adds r0, r4, 0
- bl DestroyTask
- ldr r1, _08116190 @ =gSpecialVar_Result
- movs r0, 0x5
- strh r0, [r1]
- b _081161D8
- .align 2, 0
-_08116190: .4byte gSpecialVar_Result
-_08116194:
- bl EnableBothScriptContexts
- adds r0, r4, 0
- bl DestroyTask
- ldr r1, _081161A8 @ =gSpecialVar_Result
- movs r0, 0x8
- strh r0, [r1]
- b _081161D8
- .align 2, 0
-_081161A8: .4byte gSpecialVar_Result
-_081161AC:
- bl sub_80FBA00
- cmp r0, 0
- beq _081161BA
- movs r0, 0x1D
- strb r0, [r5, 0xC]
- b _081161D8
-_081161BA:
- ldr r0, _081161E0 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _081161D8
- movs r0, 0x1
- bl sub_80FAFE0
- bl sub_8117990
- adds r0, r5, 0
- bl sub_81161E4
- adds r0, r4, 0
- bl DestroyTask
-_081161D8:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081161E0: .4byte gReceivedRemoteLinkPlayers
- thumb_func_end sub_8115A68
-
thumb_func_start sub_81161E4
sub_81161E4: @ 81161E4
push {r4,lr}
@@ -3790,7 +2905,7 @@ _08117AB8:
ldr r0, [r5]
adds r1, r0, 0
adds r1, 0x10
- bl sub_80FCD50
+ bl LinkRfu3_SetGnameUnameFromStaticBuffers
ldr r1, [r5]
movs r3, 0
movs r0, 0
diff --git a/include/link_rfu.h b/include/link_rfu.h
index bde20c555..fd77688f2 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -295,6 +295,18 @@ void sub_80FEB3C(void);
void sub_80FAFE0(u8 a0);
bool32 sub_80FA44C(u32 a0);
bool8 sub_80FC1B0(void);
+bool8 sub_80F8F40(void);
+void sub_80F8F5C(void);
+bool32 sub_80FA5D4(void);
+bool32 sub_80FC1CC(void);
+bool32 sub_80F8F7C(bool32 a0);
+bool32 sub_80FA634(u16 a0, const u8 *a1);
+void sub_80FA670(u8 a0, u16 a1, const u8 *a2);
+u32 sub_80FA6FC(u16 a0, const u8 *a1);
+void sub_80FAF58(u8 a0, u32 a1, u32 a2);
+void sub_80FBB8C(u32 a0);
+void sub_80FBD4C(const u8 *ptr, u16 a1);
+void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *gname, u8 *uname);
#include "mevent_server.h"
extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[];
diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c
index 87197f57f..2e09dc0a0 100644
--- a/src/link_rfu_3.c
+++ b/src/link_rfu_3.c
@@ -681,7 +681,7 @@ bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx)
return retVal;
}
-void sub_80FCD50(struct GFtgtGname *gname, u8 *uname)
+void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *gname, u8 *uname)
{
memcpy(gname, &gHostRFUtgtGnameBuffer, RFU_GAME_NAME_LENGTH);
memcpy(uname, gHostRFUtgtUnameBuffer, RFU_USER_NAME_LENGTH);
diff --git a/src/union_room.c b/src/union_room.c
index 070c43a09..fd59ded3e 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -1,21 +1,49 @@
#include "global.h"
#include "gflib.h"
#include "event_data.h"
+#include "link.h"
#include "link_rfu.h"
+#include "list_menu.h"
+#include "new_menu_helpers.h"
+#include "script.h"
#include "task.h"
#include "union_room.h"
EWRAM_DATA union UnkUnion_Main gUnknown_203B05C = {};
+EWRAM_DATA u8 gUnknown_203B058 = 0;
+EWRAM_DATA u8 gUnknown_203B059 = 0;
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_81165E8(struct UnkStruct_Main0 * a0);
+void sub_8117990(void);
u16 sub_8118658(const u8 *data);
+u8 sub_811A054(struct UnkStruct_Main4 *arg0, u32 arg1);
+bool8 sub_811A0F8(u8 *textState, const u8 *str);
+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);
-extern const u8 *const gUnknown_845742C[][5];
+extern const u8 *const gUnknown_8456C74[];
+extern const struct WindowTemplate gUnknown_8456CD0;
+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 u8 gUnknown_84571B4[];
extern const u8 gUnknown_8457234[];
+extern const u8 gUnknown_8457264[];
+extern const u8 gUnknown_845747C[];
+extern const u8 gUnknown_8457514[];
+extern const u8 gUnknown_8457530[];
+extern const u8 gUnknown_8457554[];
+extern const u8 gUnknown_8457610[];
+extern const u8 *const gUnknown_845767C[];
+extern const u8 *const gUnknown_845742C[][5];
void sub_811586C(u8 windowId, u8 arg1, u8 stringId)
{
@@ -77,3 +105,303 @@ void TryBecomeLinkLeader(void)
dataPtr->textState = 0;
gSpecialVar_Result = 0;
}
+
+void sub_8115A68(u8 taskId)
+{
+ u32 id, val;
+ struct UnkStruct_Leader *data = gUnknown_203B05C.leader;
+
+ switch (data->state)
+ {
+ case 0:
+ gUnknown_203B058 = gUnknown_8456CD8[gSpecialVar_0x8004];
+ gUnknown_203B059 = gUnknown_8456CD8[gSpecialVar_0x8004] >> 8;
+ sub_80FAF58(gUnknown_203B058, 0, 0);
+ sub_800B1F4();
+ OpenLink();
+ sub_80FBB8C(gUnknown_203B059 & 0xF);
+ data->state = 3;
+ break;
+ case 3:
+ data->field_4 = AllocZeroed(0x70);
+ data->field_0 = AllocZeroed(0xA0);
+ data->field_8 = AllocZeroed(0xA0);
+ sub_811A650(data->field_4, 4);
+ sub_811A5E4(data->field_0->arr, 5);
+ LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.field_0, data->field_0->arr[0].unk.playerName);
+ data->field_0->arr[0].field_18 = 0;
+ data->field_0->arr[0].field_1A_0 = 1;
+ data->field_0->arr[0].field_1A_1 = 0;
+ data->field_0->arr[0].field_1B = 0;
+ data->field_17 = sub_811A054(data->field_4, 0xFF);
+ data->field_10 = AddWindow(&gUnknown_8456CD0);
+ data->listWindowId = AddWindow(&gUnknown_8456CFC);
+ data->field_11 = AddWindow(&gUnknown_8456D04);
+
+ FillWindowPixelBuffer(data->field_10, PIXEL_FILL(2));
+ sub_811A444(data->field_10, 0, gUnknown_845747C, 8, 2, 4);
+ PutWindowTilemap(data->field_10);
+ CopyWindowToVram(data->field_10, 2);
+
+ DrawStdWindowFrame(data->listWindowId, FALSE);
+ gMultiuseListMenuTemplate = gUnknown_8456D34;
+ gMultiuseListMenuTemplate.windowId = data->listWindowId;
+ data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+
+ DrawStdWindowFrame(data->field_11, FALSE);
+ PutWindowTilemap(data->field_11);
+ CopyWindowToVram(data->field_11, 2);
+
+ CopyBgTilemapBufferToVram(0);
+ data->field_13 = 1;
+ data->state = 4;
+ break;
+ case 4:
+ StringCopy(gStringVar1, gUnknown_8456C74[gUnknown_203B058]);
+ if ((gUnknown_203B059 >> 4) != 0)
+ {
+ if (data->field_13 > (gUnknown_203B059 >> 4) - 1 && (gUnknown_203B059 & 0xF) != 0)
+ StringExpandPlaceholders(gStringVar4, gUnknown_8457264);
+ else
+ StringExpandPlaceholders(gStringVar4, gUnknown_8457234);
+ }
+ else
+ {
+ sub_811599C(gStringVar4, gUnknown_203B058);
+ }
+
+ sub_811586C(data->field_11, gUnknown_203B059, data->field_13);
+ data->state = 5;
+ break;
+ case 5:
+ if (sub_811A0F8(&data->textState, gStringVar4))
+ data->state = 6;
+ break;
+ case 6:
+ sub_8116444(data, 7, 10);
+ if (gMain.newKeys & B_BUTTON)
+ {
+ if (data->field_13 == 1)
+ data->state = 23;
+ else if ((gUnknown_203B059 & 0xF0) != 0)
+ data->state = 30;
+ else
+ data->state = 19;
+ }
+ if ((gUnknown_203B059 >> 4) != 0
+ && data->field_13 > (gUnknown_203B059 >> 4) - 1
+ && (gUnknown_203B059 & 0xF) != 0
+ && sub_80FC1CC()
+ && gMain.newKeys & START_BUTTON)
+ {
+ data->state = 15;
+ sub_80F8F5C();
+ }
+ if (data->state == 6 && sub_80FA5D4())
+ {
+ data->state = 9;
+ }
+ break;
+ case 9:
+ if (!sub_80FA5D4())
+ {
+ data->state = 6;
+ data->field_13 = sub_81165E8(data->field_0);
+ }
+ break;
+ case 10:
+ id = ((gUnknown_203B058 & 0xF) == 2) ? 1 : 0;
+ if (sub_811A0F8(&data->textState, gUnknown_845767C[id]))
+ {
+ data->field_13 = sub_81165E8(data->field_0);
+ RedrawListMenu(data->listTaskId);
+ data->state = 4;
+ }
+ break;
+ case 29:
+ id = ((gUnknown_203B059 & 0xF) == 2) ? 0 : 1;
+ if (sub_811A0F8(&data->textState, gUnknown_845767C[id]))
+ {
+ data->state = 21;
+ }
+ break;
+ case 7:
+ if (sub_811A0F8(&data->textState, gStringVar4))
+ {
+ data->state = 11;
+ }
+ break;
+ case 11:
+ switch (sub_811A14C(&data->textState, sub_80FA634(sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName)))
+ {
+ case 0:
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ data->field_19 = 5;
+ sub_80FA670(5, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ data->state = 12;
+ break;
+ case 1:
+ case -1:
+ data->field_19 = 6;
+ sub_80FA670(6, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ data->state = 12;
+ break;
+ case -3:
+ data->state = 9;
+ break;
+ }
+ break;
+ case 12:
+ val = sub_80FA6FC(sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ if (val == 1)
+ {
+ if (data->field_19 == 5)
+ {
+ data->field_0->arr[data->field_13].field_1B = 0;
+ RedrawListMenu(data->listTaskId);
+ data->field_13++;
+ if (data->field_13 == (gUnknown_203B059 & 0xF))
+ {
+ if ((gUnknown_203B059 & 0xF0) != 0 || data->field_13 == 4)
+ {
+ data->state = 15;
+ }
+ 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);
+ StringExpandPlaceholders(gStringVar4, gUnknown_8457554);
+ data->state = 13;
+ }
+
+ sub_80F8F5C();
+ sub_811586C(data->field_11, gUnknown_203B059, data->field_13);
+ }
+ else
+ {
+ data->state = 4;
+ }
+ }
+ else
+ {
+ sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId));
+ data->field_0->arr[data->field_13].field_1A_0 = 0;
+ sub_81165E8(data->field_0);
+ RedrawListMenu(data->listTaskId);
+ data->state = 4;
+ }
+
+ data->field_19 = 0;
+ }
+ else if (val == 2)
+ {
+ sub_80FB9E4(0, 0);
+ data->state = 4;
+ }
+ break;
+ case 13:
+ if (sub_811A0F8(&data->textState, gStringVar4))
+ data->state = 14;
+ break;
+ case 14:
+ if (++data->field_E > 120)
+ data->state = 17;
+ break;
+ case 15:
+ if (sub_811A0F8(&data->textState, gUnknown_8457514))
+ data->state = 16;
+ break;
+ case 16:
+ switch (sub_811A14C(&data->textState, FALSE))
+ {
+ case 0:
+ data->state = 17;
+ break;
+ case 1:
+ case -1:
+ if ((gUnknown_203B059 & 0xF0) != 0)
+ data->state = 30;
+ else
+ data->state = 19;
+ break;
+ }
+ break;
+ case 19:
+ if (sub_811A0F8(&data->textState, gUnknown_8457530))
+ data->state = 20;
+ break;
+ case 20:
+ switch (sub_811A14C(&data->textState, FALSE))
+ {
+ case 0:
+ data->state = 23;
+ break;
+ case 1:
+ case -1:
+ if ((gUnknown_203B059 & 0xF0) != 0)
+ data->state = 15;
+ else if (data->field_13 == (gUnknown_203B059 & 0xF))
+ data->state = 15;
+ else
+ data->state = 4;
+ break;
+ }
+ break;
+ case 17:
+ if (!sub_8116444(data, 7, 23))
+ data->state = 18;
+ break;
+ case 18:
+ if (sub_80F8F40())
+ {
+ if (sub_80F8F7C(FALSE))
+ {
+ data->state = 26;
+ }
+ }
+ else
+ {
+ data->state = 29;
+ data->textState = 0;
+ }
+ break;
+ case 30:
+ if (sub_811A0F8(&data->textState, gUnknown_8457610))
+ data->state = 23;
+ break;
+ case 21:
+ case 23:
+ DestroyWirelessStatusIndicatorSprite();
+ sub_80F8DC0();
+ sub_81161E4(data);
+ data->state++;
+ break;
+ case 24:
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ gSpecialVar_Result = 5;
+ break;
+ case 22:
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ gSpecialVar_Result = 8;
+ break;
+ case 26:
+ if (sub_80FBA00())
+ {
+ data->state = 29;
+ }
+ else
+ {
+ if (gReceivedRemoteLinkPlayers != 0)
+ {
+ sub_80FAFE0(1);
+ sub_8117990();
+ sub_81161E4(data);
+ DestroyTask(taskId);
+ }
+ }
+ break;
+ }
+}