summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/union_room.s946
-rw-r--r--include/link_rfu.h5
-rw-r--r--include/union_room.h2
-rw-r--r--src/union_room.c463
4 files changed, 450 insertions, 966 deletions
diff --git a/asm/union_room.s b/asm/union_room.s
index 5f1ff772a..ba13397da 100644
--- a/asm/union_room.s
+++ b/asm/union_room.s
@@ -5,946 +5,6 @@
.text
- thumb_func_start MEvent_CreateTask_CardOrNewsWithFriend
-MEvent_CreateTask_CardOrNewsWithFriend: @ 8117ED4
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _08117F0C @ =sub_8117F20
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08117F10 @ =gUnknown_203B05C
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08117F14 @ =gTasks+0x8
- adds r1, r0
- str r1, [r2]
- ldr r0, _08117F18 @ =gUnknown_3002028
- str r1, [r0]
- movs r2, 0
- strb r2, [r1, 0x8]
- strb r2, [r1, 0x9]
- subs r4, 0x15
- strb r4, [r1, 0x12]
- ldr r0, _08117F1C @ =gSpecialVar_Result
- strh r2, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08117F0C: .4byte sub_8117F20
-_08117F10: .4byte gUnknown_203B05C
-_08117F14: .4byte gTasks+0x8
-_08117F18: .4byte gUnknown_3002028
-_08117F1C: .4byte gSpecialVar_Result
- thumb_func_end MEvent_CreateTask_CardOrNewsWithFriend
-
- thumb_func_start sub_8117F20
-sub_8117F20: @ 8117F20
- push {r4-r7,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _08117F40 @ =gUnknown_203B05C
- ldr r5, [r0]
- ldrb r0, [r5, 0x8]
- cmp r0, 0xC
- bls _08117F34
- b _08118288
-_08117F34:
- lsls r0, 2
- ldr r1, _08117F44 @ =_08117F48
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08117F40: .4byte gUnknown_203B05C
-_08117F44: .4byte _08117F48
- .align 2, 0
-_08117F48:
- .4byte _08117F7C
- .4byte _08117FB0
- .4byte _08117FC0
- .4byte _08118070
- .4byte _08118150
- .4byte _0811818C
- .4byte _081181EC
- .4byte _08118248
- .4byte _081181EC
- .4byte _08118222
- .4byte _081181EC
- .4byte _0811826C
- .4byte _08118278
-_08117F7C:
- ldrb r0, [r5, 0x12]
- adds r0, 0x15
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- movs r2, 0
- bl sub_80FAF58
- bl sub_800B1F4
- bl OpenLink
- bl sub_80FBBD8
- movs r0, 0x70
- bl AllocZeroed
- str r0, [r5, 0x4]
- movs r0, 0x80
- lsls r0, 2
- bl AllocZeroed
- str r0, [r5]
- movs r0, 0x1
- strb r0, [r5, 0x8]
- b _08118288
-_08117FB0:
- ldr r0, _08117FBC @ =gUnknown_8458FE4
- bl AddTextPrinterToWindow1
- movs r0, 0x2
- strb r0, [r5, 0x8]
- b _08118288
- .align 2, 0
-_08117FBC: .4byte gUnknown_8458FE4
-_08117FC0:
- ldr r0, [r5, 0x4]
- movs r1, 0x4
- bl sub_811A650
- ldr r0, [r5]
- movs r1, 0x10
- bl sub_811A5E4
- ldr r0, [r5, 0x4]
- ldrb r1, [r5, 0x12]
- adds r1, 0x7
- bl sub_811A054
- movs r4, 0
- strb r0, [r5, 0x11]
- ldr r0, _0811805C @ =gUnknown_8456D4C
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- bl GetMysteryGiftBaseBlock
- lsls r0, 16
- ldr r2, _08118060 @ =0x0000ffff
- ldr r1, [sp, 0x4]
- ands r1, r2
- orrs r1, r0
- str r1, [sp, 0x4]
- mov r0, sp
- bl AddWindow
- strb r0, [r5, 0xB]
- ldr r0, _08118064 @ =gUnknown_8456D54
- bl AddWindow
- strb r0, [r5, 0xD]
- ldrb r0, [r5, 0xB]
- bl MG_DrawTextBorder
- ldr r0, _08118068 @ =gMultiuseListMenuTemplate
- adds r2, r0, 0
- ldr r1, _0811806C @ =gUnknown_8456DDC
- ldm r1!, {r3,r6,r7}
- stm r2!, {r3,r6,r7}
- ldm r1!, {r3,r6,r7}
- stm r2!, {r3,r6,r7}
- ldrb r1, [r5, 0xB]
- strb r1, [r0, 0x10]
- movs r1, 0
- movs r2, 0
- bl ListMenuInit
- strb r0, [r5, 0xE]
- ldrb r0, [r5, 0xD]
- bl MG_DrawTextBorder
- ldrb r0, [r5, 0xD]
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldrb r0, [r5, 0xD]
- bl PutWindowTilemap
- ldrb r0, [r5, 0xD]
- bl sub_8115924
- ldrb r0, [r5, 0xD]
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- strb r4, [r5, 0xF]
- movs r0, 0x3
- strb r0, [r5, 0x8]
- b _08118288
- .align 2, 0
-_0811805C: .4byte gUnknown_8456D4C
-_08118060: .4byte 0x0000ffff
-_08118064: .4byte gUnknown_8456D54
-_08118068: .4byte gMultiuseListMenuTemplate
-_0811806C: .4byte gUnknown_8456DDC
-_08118070:
- bl sub_8116FE4
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _0811808E
- cmp r2, 0x1
- bne _08118086
- movs r0, 0x2
- bl PlaySE
-_08118086:
- ldrb r0, [r5, 0xE]
- bl RedrawListMenu
- b _08118288
-_0811808E:
- ldrb r0, [r5, 0xE]
- bl ListMenu_ProcessInput
- adds r2, r0, 0
- ldr r0, _08118128 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08118138
- movs r0, 0x1
- negs r0, r0
- cmp r2, r0
- beq _08118138
- ldr r0, [r5]
- lsls r1, r2, 5
- adds r0, r1
- ldrb r1, [r0, 0xA]
- ldrb r0, [r0, 0x1A]
- lsls r0, 30
- lsrs r0, 30
- cmp r0, 0x1
- bne _08118130
- lsrs r0, r1, 7
- cmp r0, 0
- bne _08118130
- strb r2, [r5, 0xF]
- bl LoadWirelessStatusIndicatorSpriteGfx
- movs r0, 0
- movs r1, 0
- bl CreateWirelessStatusIndicatorSprite
- ldrb r0, [r5, 0xE]
- bl RedrawListMenu
- ldr r4, _0811812C @ =gStringVar1
- ldrb r0, [r5, 0xF]
- lsls r0, 5
- ldr r1, [r5]
- adds r1, r0
- adds r1, 0x10
- adds r0, r4, 0
- bl StringCopy
- ldr r1, [r5]
- ldrb r0, [r5, 0xF]
- lsls r0, 5
- adds r1, r0
- ldrb r1, [r1]
- lsls r1, 28
- lsrs r1, 28
- adds r0, r4, 0
- bl ConvertInternationalString
- ldrb r1, [r5, 0xF]
- 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_80FBF54
- movs r0, 0x67
- bl PlaySE
- movs r0, 0x4
- strb r0, [r5, 0x8]
- b _08118288
- .align 2, 0
-_08118128: .4byte gMain
-_0811812C: .4byte gStringVar1
-_08118130:
- movs r0, 0x7
- bl PlaySE
- b _08118288
-_08118138:
- ldr r0, _0811814C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _08118146
- b _08118288
-_08118146:
- movs r0, 0x6
- strb r0, [r5, 0x8]
- b _08118288
- .align 2, 0
-_0811814C: .4byte gMain
-_08118150:
- ldr r0, _08118184 @ =gUnknown_8459238
- bl AddTextPrinterToWindow1
- ldr r4, _08118188 @ =gStringVar1
- ldrb r0, [r5, 0xF]
- lsls r0, 5
- ldr r1, [r5]
- adds r1, r0
- adds r1, 0x10
- adds r0, r4, 0
- bl StringCopy
- ldr r1, [r5]
- ldrb r0, [r5, 0xF]
- lsls r0, 5
- adds r1, r0
- ldrb r1, [r1]
- lsls r1, 28
- lsrs r1, 28
- adds r0, r4, 0
- bl ConvertInternationalString
- movs r0, 0x5
- strb r0, [r5, 0x8]
- b _08118288
- .align 2, 0
-_08118184: .4byte gUnknown_8459238
-_08118188: .4byte gStringVar1
-_0811818C:
- ldr r0, _081181C4 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _081181AA
- ldr r2, _081181C8 @ =gUnknown_203B058
- ldr r1, [r5]
- ldrb r0, [r5, 0xF]
- lsls r0, 5
- adds r1, r0
- ldrb r0, [r1, 0xA]
- lsls r0, 25
- lsrs r0, 25
- strb r0, [r2]
- movs r0, 0xA
- strb r0, [r5, 0x8]
-_081181AA:
- bl sub_80FB9F4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x5
- beq _081181D6
- cmp r0, 0x5
- bgt _081181CC
- cmp r0, 0x2
- bgt _08118288
- cmp r0, 0x1
- blt _08118288
- b _081181D0
- .align 2, 0
-_081181C4: .4byte gReceivedRemoteLinkPlayers
-_081181C8: .4byte gUnknown_203B058
-_081181CC:
- cmp r0, 0x6
- bne _08118288
-_081181D0:
- movs r0, 0x8
- strb r0, [r5, 0x8]
- b _08118288
-_081181D6:
- ldr r0, _081181E8 @ =gUnknown_84576AC
- bl AddTextPrinterToWindow1
- movs r0, 0
- movs r1, 0
- bl sub_80FB9E4
- b _08118288
- .align 2, 0
-_081181E8: .4byte gUnknown_84576AC
-_081181EC:
- ldrb r0, [r5, 0xE]
- movs r1, 0
- movs r2, 0
- bl DestroyListMenuTask
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- ldrb r0, [r5, 0xD]
- bl RemoveWindow
- ldrb r0, [r5, 0xB]
- bl RemoveWindow
- ldrb r0, [r5, 0x11]
- bl DestroyTask
- ldr r0, [r5]
- bl Free
- ldr r0, [r5, 0x4]
- bl Free
- ldrb r0, [r5, 0x8]
- adds r0, 0x1
- strb r0, [r5, 0x8]
- b _08118288
-_08118222:
- adds r5, 0x9
- ldr r4, _08118244 @ =gUnknown_8457838
- bl sub_80FB9F4
- lsls r0, 24
- lsrs r0, 22
- adds r0, r4
- ldr r1, [r0]
- adds r0, r5, 0
- bl MG_PrintTextOnWindow1AndWaitButton
- cmp r0, 0
- beq _08118288
- bl DestroyWirelessStatusIndicatorSprite
- b _08118252
- .align 2, 0
-_08118244: .4byte gUnknown_8457838
-_08118248:
- bl DestroyWirelessStatusIndicatorSprite
- ldr r0, _08118264 @ =gUnknown_84571B8
- bl AddTextPrinterToWindow1
-_08118252:
- adds r0, r6, 0
- bl DestroyTask
- bl sub_80F8DC0
- ldr r1, _08118268 @ =gSpecialVar_Result
- movs r0, 0x5
- strh r0, [r1]
- b _08118288
- .align 2, 0
-_08118264: .4byte gUnknown_84571B8
-_08118268: .4byte gSpecialVar_Result
-_0811826C:
- ldrb r0, [r5, 0x8]
- adds r0, 0x1
- strb r0, [r5, 0x8]
- bl sub_800AB9C
- b _08118288
-_08118278:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _08118288
- adds r0, r6, 0
- bl DestroyTask
-_08118288:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8117F20
-
- thumb_func_start MEvent_CreateTask_CardOrNewsOverWireless
-MEvent_CreateTask_CardOrNewsOverWireless: @ 8118290
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _081182C8 @ =sub_81182DC
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _081182CC @ =gUnknown_203B05C
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _081182D0 @ =gTasks+0x8
- adds r1, r0
- str r1, [r2]
- ldr r0, _081182D4 @ =gUnknown_3002028
- str r1, [r0]
- movs r2, 0
- strb r2, [r1, 0x8]
- strb r2, [r1, 0x9]
- subs r4, 0x15
- strb r4, [r1, 0x12]
- ldr r0, _081182D8 @ =gSpecialVar_Result
- strh r2, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081182C8: .4byte sub_81182DC
-_081182CC: .4byte gUnknown_203B05C
-_081182D0: .4byte gTasks+0x8
-_081182D4: .4byte gUnknown_3002028
-_081182D8: .4byte gSpecialVar_Result
- thumb_func_end MEvent_CreateTask_CardOrNewsOverWireless
-
- thumb_func_start sub_81182DC
-sub_81182DC: @ 81182DC
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _081182FC @ =gUnknown_203B05C
- ldr r5, [r0]
- ldrb r0, [r5, 0x8]
- cmp r0, 0xE
- bls _081182F0
- b _08118604
-_081182F0:
- lsls r0, 2
- ldr r1, _08118300 @ =_08118304
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_081182FC: .4byte gUnknown_203B05C
-_08118300: .4byte _08118304
- .align 2, 0
-_08118304:
- .4byte _08118340
- .4byte _0811836E
- .4byte _08118380
- .4byte _08118408
- .4byte _081184C8
- .4byte _08118504
- .4byte _08118564
- .4byte _081185A8
- .4byte _08118564
- .4byte _0811859A
- .4byte _08118564
- .4byte _081185B4
- .4byte _08118564
- .4byte _081185E8
- .4byte _081185F4
-_08118340:
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl sub_80FAF58
- bl sub_800B1F4
- bl OpenLink
- bl sub_80FBBD8
- movs r0, 0x70
- bl AllocZeroed
- str r0, [r5, 0x4]
- movs r0, 0x80
- lsls r0, 2
- bl AllocZeroed
- str r0, [r5]
- movs r0, 0x1
- strb r0, [r5, 0x8]
- b _08118604
-_0811836E:
- ldr r0, _0811837C @ =gUnknown_84591DC
- bl AddTextPrinterToWindow1
- movs r0, 0x2
- strb r0, [r5, 0x8]
- b _08118604
- .align 2, 0
-_0811837C: .4byte gUnknown_84591DC
-_08118380:
- ldr r0, [r5, 0x4]
- movs r1, 0x4
- bl sub_811A650
- ldr r0, [r5]
- movs r1, 0x10
- bl sub_811A5E4
- ldr r0, [r5, 0x4]
- ldrb r1, [r5, 0x12]
- adds r1, 0x7
- bl sub_811A084
- strb r0, [r5, 0x11]
- ldrb r0, [r5, 0x13]
- cmp r0, 0
- beq _081183EC
- ldr r0, _081183F8 @ =gUnknown_8456D4C
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- bl GetMysteryGiftBaseBlock
- lsls r0, 16
- ldr r2, _081183FC @ =0x0000ffff
- ldr r1, [sp, 0x4]
- ands r1, r2
- orrs r1, r0
- str r1, [sp, 0x4]
- mov r0, sp
- bl AddWindow
- strb r0, [r5, 0xB]
- ldrb r0, [r5, 0xB]
- bl MG_DrawTextBorder
- ldr r0, _08118400 @ =gMultiuseListMenuTemplate
- adds r2, r0, 0
- ldr r1, _08118404 @ =gUnknown_8456DDC
- ldm r1!, {r3,r4,r6}
- stm r2!, {r3,r4,r6}
- ldm r1!, {r3,r4,r6}
- stm r2!, {r3,r4,r6}
- ldrb r1, [r5, 0xB]
- strb r1, [r0, 0x10]
- movs r1, 0
- movs r2, 0
- bl ListMenuInit
- strb r0, [r5, 0xE]
- movs r0, 0
- bl CopyBgTilemapBufferToVram
-_081183EC:
- movs r0, 0
- strb r0, [r5, 0xF]
- movs r0, 0x3
- strb r0, [r5, 0x8]
- b _08118604
- .align 2, 0
-_081183F8: .4byte gUnknown_8456D4C
-_081183FC: .4byte 0x0000ffff
-_08118400: .4byte gMultiuseListMenuTemplate
-_08118404: .4byte gUnknown_8456DDC
-_08118408:
- bl sub_8116FE4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _0811842E
- cmp r0, 0x1
- bne _0811841E
- movs r0, 0x2
- bl PlaySE
-_0811841E:
- ldrb r0, [r5, 0x13]
- cmp r0, 0
- bne _08118426
- b _08118604
-_08118426:
- ldrb r0, [r5, 0xE]
- bl RedrawListMenu
- b _08118604
-_0811842E:
- ldrb r0, [r5, 0x13]
- cmp r0, 0
- beq _0811843A
- ldrb r0, [r5, 0xE]
- bl ListMenu_ProcessInput
-_0811843A:
- ldrb r0, [r5, 0x14]
- cmp r0, 0x78
- bls _081184A8
- ldr r2, [r5]
- ldrb r1, [r2, 0x1A]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0x1
- bne _081184BC
- ldrb r1, [r2, 0xA]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _081184BC
- ldrb r1, [r5, 0x12]
- adds r1, 0x7
- adds r0, r2, 0
- bl sub_8119FB0
- cmp r0, 0
- beq _0811849C
- strb r4, [r5, 0xF]
- strb r4, [r5, 0x14]
- bl LoadWirelessStatusIndicatorSpriteGfx
- movs r0, 0
- movs r1, 0
- bl CreateWirelessStatusIndicatorSprite
- ldr r0, [r5]
- 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_80FBF54
- movs r0, 0x67
- bl PlaySE
- movs r0, 0x4
- strb r0, [r5, 0x8]
- b _081184BC
-_0811849C:
- movs r0, 0x16
- bl PlaySE
- movs r0, 0xA
- strb r0, [r5, 0x8]
- b _081184BC
-_081184A8:
- ldr r0, _081184C4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _081184BC
- movs r1, 0
- movs r0, 0x6
- strb r0, [r5, 0x8]
- strb r1, [r5, 0x14]
-_081184BC:
- ldrb r0, [r5, 0x14]
- adds r0, 0x1
- strb r0, [r5, 0x14]
- b _08118604
- .align 2, 0
-_081184C4: .4byte gMain
-_081184C8:
- ldr r0, _081184FC @ =gUnknown_845928C
- bl AddTextPrinterToWindow1
- ldr r4, _08118500 @ =gStringVar1
- ldrb r0, [r5, 0xF]
- lsls r0, 5
- ldr r1, [r5]
- adds r1, r0
- adds r1, 0x10
- adds r0, r4, 0
- bl StringCopy
- ldr r1, [r5]
- ldrb r0, [r5, 0xF]
- lsls r0, 5
- adds r1, r0
- ldrb r1, [r1]
- lsls r1, 28
- lsrs r1, 28
- adds r0, r4, 0
- bl ConvertInternationalString
- movs r0, 0x5
- strb r0, [r5, 0x8]
- b _08118604
- .align 2, 0
-_081184FC: .4byte gUnknown_845928C
-_08118500: .4byte gStringVar1
-_08118504:
- ldr r0, _0811853C @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _08118522
- ldr r2, _08118540 @ =gUnknown_203B058
- ldr r1, [r5]
- ldrb r0, [r5, 0xF]
- lsls r0, 5
- adds r1, r0
- ldrb r0, [r1, 0xA]
- lsls r0, 25
- lsrs r0, 25
- strb r0, [r2]
- movs r0, 0xC
- strb r0, [r5, 0x8]
-_08118522:
- bl sub_80FB9F4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x5
- beq _0811854E
- cmp r0, 0x5
- bgt _08118544
- cmp r0, 0x2
- bgt _08118604
- cmp r0, 0x1
- blt _08118604
- b _08118548
- .align 2, 0
-_0811853C: .4byte gReceivedRemoteLinkPlayers
-_08118540: .4byte gUnknown_203B058
-_08118544:
- cmp r0, 0x6
- bne _08118604
-_08118548:
- movs r0, 0x8
- strb r0, [r5, 0x8]
- b _08118604
-_0811854E:
- ldr r0, _08118560 @ =gUnknown_845777C
- bl AddTextPrinterToWindow1
- movs r0, 0
- movs r1, 0
- bl sub_80FB9E4
- b _08118604
- .align 2, 0
-_08118560: .4byte gUnknown_845777C
-_08118564:
- ldrb r0, [r5, 0x13]
- cmp r0, 0
- beq _08118580
- ldrb r0, [r5, 0xE]
- movs r1, 0
- movs r2, 0
- bl DestroyListMenuTask
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- ldrb r0, [r5, 0xB]
- bl RemoveWindow
-_08118580:
- ldrb r0, [r5, 0x11]
- bl DestroyTask
- ldr r0, [r5]
- bl Free
- ldr r0, [r5, 0x4]
- bl Free
- ldrb r0, [r5, 0x8]
- adds r0, 0x1
- strb r0, [r5, 0x8]
- b _08118604
-_0811859A:
- adds r0, r5, 0
- adds r0, 0x9
- ldr r1, _081185A4 @ =gUnknown_84577BC
- b _081185C2
- .align 2, 0
-_081185A4: .4byte gUnknown_84577BC
-_081185A8:
- adds r0, r5, 0
- adds r0, 0x9
- ldr r1, _081185B0 @ =gUnknown_84571E0
- b _081185C2
- .align 2, 0
-_081185B0: .4byte gUnknown_84571E0
-_081185B4:
- adds r0, r5, 0
- adds r0, 0x9
- ldr r2, _081185E0 @ =gUnknown_845933C
- ldrb r1, [r5, 0x12]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
-_081185C2:
- bl MG_PrintTextOnWindow1AndWaitButton
- cmp r0, 0
- beq _08118604
- bl DestroyWirelessStatusIndicatorSprite
- adds r0, r4, 0
- bl DestroyTask
- bl sub_80F8DC0
- ldr r1, _081185E4 @ =gSpecialVar_Result
- movs r0, 0x5
- strh r0, [r1]
- b _08118604
- .align 2, 0
-_081185E0: .4byte gUnknown_845933C
-_081185E4: .4byte gSpecialVar_Result
-_081185E8:
- ldrb r0, [r5, 0x8]
- adds r0, 0x1
- strb r0, [r5, 0x8]
- bl sub_800AB9C
- b _08118604
-_081185F4:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _08118604
- adds r0, r4, 0
- bl DestroyTask
-_08118604:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_81182DC
-
- thumb_func_start UnionRoomSpecial
-UnionRoomSpecial: @ 811860C
- push {r4,lr}
- bl ClearAndInitHostRFUtgtGname
- ldr r0, _08118648 @ =sub_81186E0
- movs r1, 0xA
- bl CreateTask
- ldr r4, _0811864C @ =gUnknown_203B05C
- movs r0, 0x96
- lsls r0, 2
- bl AllocZeroed
- str r0, [r4]
- ldr r1, _08118650 @ =gUnknown_300202C
- str r0, [r1]
- movs r1, 0
- strb r1, [r0, 0x14]
- strb r1, [r0, 0x16]
- strh r1, [r0, 0x10]
- strh r1, [r0, 0x12]
- ldr r0, _08118654 @ =gSpecialVar_Result
- strh r1, [r0]
- movs r0, 0xD0
- movs r1, 0x1
- bl sub_8107D38
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08118648: .4byte sub_81186E0
-_0811864C: .4byte gUnknown_203B05C
-_08118650: .4byte gUnknown_300202C
-_08118654: .4byte gSpecialVar_Result
- thumb_func_end UnionRoomSpecial
-
- thumb_func_start sub_8118658
-sub_8118658: @ 8118658
- ldrb r1, [r0, 0x1]
- lsls r1, 8
- ldrb r0, [r0]
- orrs r0, r1
- bx lr
- thumb_func_end sub_8118658
-
- thumb_func_start sub_8118664
-sub_8118664: @ 8118664
- push {lr}
- adds r3, r1, 0
- ldr r1, _08118684 @ =gUnknown_203B05C
- ldr r2, [r1]
- movs r1, 0x8
- strb r1, [r2, 0x14]
- strb r0, [r2, 0x15]
- ldr r0, _08118688 @ =gStringVar4
- cmp r3, r0
- beq _0811867E
- adds r1, r3, 0
- bl StringExpandPlaceholders
-_0811867E:
- pop {r0}
- bx r0
- .align 2, 0
-_08118684: .4byte gUnknown_203B05C
-_08118688: .4byte gStringVar4
- thumb_func_end sub_8118664
-
- thumb_func_start sub_811868C
-sub_811868C: @ 811868C
- push {lr}
- adds r2, r0, 0
- ldr r0, _081186A8 @ =gUnknown_203B05C
- ldr r1, [r0]
- movs r0, 0x1A
- strb r0, [r1, 0x14]
- ldr r0, _081186AC @ =gStringVar4
- cmp r2, r0
- beq _081186A4
- adds r1, r2, 0
- bl StringExpandPlaceholders
-_081186A4:
- pop {r0}
- bx r0
- .align 2, 0
-_081186A8: .4byte gUnknown_203B05C
-_081186AC: .4byte gStringVar4
- thumb_func_end sub_811868C
-
- thumb_func_start sub_81186B0
-sub_81186B0: @ 81186B0
- push {lr}
- ldr r3, _081186C4 @ =gDecompressionBuffer + 0x3F00
- ldr r1, [r0]
- movs r2, 0x80
- lsls r2, 1
- adds r0, r3, 0
- bl memcpy
- pop {r0}
- bx r0
- .align 2, 0
-_081186C4: .4byte gDecompressionBuffer + 0x3F00
- thumb_func_end sub_81186B0
-
- thumb_func_start sub_81186C8
-sub_81186C8: @ 81186C8
- push {lr}
- ldr r0, [r0]
- ldr r1, _081186DC @ =gDecompressionBuffer + 0x3F00
- movs r2, 0x80
- lsls r2, 1
- bl memcpy
- pop {r0}
- bx r0
- .align 2, 0
-_081186DC: .4byte gDecompressionBuffer + 0x3F00
- thumb_func_end sub_81186C8
-
thumb_func_start sub_81186E0
sub_81186E0: @ 81186E0
push {r4-r7,lr}
@@ -3229,7 +2289,7 @@ _08119ACA:
ldr r0, [r5]
adds r0, r4
adds r0, 0x2
- bl sub_8118658
+ bl ReadAsU16
lsls r0, 16
lsrs r0, 16
mov r1, sp
@@ -5264,7 +4324,7 @@ sub_811AA24: @ 811AA24
bl ConvertInternationalString
adds r4, 0x2
adds r0, r4, 0
- bl sub_8118658
+ bl ReadAsU16
lsls r0, 16
lsrs r0, 16
mov r1, sp
@@ -5302,7 +4362,7 @@ sub_811AA5C: @ 811AA5C
adds r0, r4, 0
bl ConvertInternationalString
adds r0, r5, 0x2
- bl sub_8118658
+ bl ReadAsU16
lsls r0, 16
lsrs r0, 16
adds r1, r4, 0
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 6f7e01678..35e5d46ff 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -233,8 +233,8 @@ void MG_DrawCheckerboardPattern(void);
void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
bool8 IsLinkRfuTaskFinished(void);
void DestroyWirelessStatusIndicatorSprite(void);
-void MEvent_CreateTask_CardOrNewsWithFriend(u8);
-void MEvent_CreateTask_CardOrNewsOverWireless(u8);
+void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0);
+void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0);
void MEvent_CreateTask_Leader(u32 arg0);
void sub_80F9E2C(void * data);
u8 sub_8116DE0(void);
@@ -315,6 +315,7 @@ void RecordMixTrainerNames(void);
void sub_80F8CFC();
void sub_80F8D14();
void sub_80FAF74(bool32 a0, bool32 a1);
+void ClearAndInitHostRFUtgtGname(void);
#include "mevent_server.h"
extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[];
diff --git a/include/union_room.h b/include/union_room.h
index 9221b6bf5..b485d2035 100644
--- a/include/union_room.h
+++ b/include/union_room.h
@@ -124,7 +124,7 @@ struct UnkStruct_URoom
struct UnkStruct_8019BA8 field_A0[8];
u8 field_C0[12][15];
u8 field_174[48];
- u8 field_1A4[200];
+ u8 field_1A4[180];
};
union UnkUnion_Main
diff --git a/src/union_room.c b/src/union_room.c
index 6b6ef5b98..ac1f081fb 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -3,6 +3,7 @@
#include "battle.h"
#include "berry_crush.h"
#include "cable_club.h"
+#include "decompress.h"
#include "dodrio_berry_picking.h"
#include "event_data.h"
#include "field_control_avatar.h"
@@ -11,6 +12,7 @@
#include "link_rfu.h"
#include "list_menu.h"
#include "load_save.h"
+#include "menu.h"
#include "mevent.h"
#include "mystery_gift_menu.h"
#include "new_menu_helpers.h"
@@ -37,8 +39,9 @@ EWRAM_DATA u8 gUnknown_203B058 = 0;
EWRAM_DATA u8 gUnknown_203B059 = 0;
EWRAM_DATA struct UnionRoomTrade gUnknown_203B06C = {};
-IWRAM_DATA struct UnkStruct_Leader *gUnknown_3002024;
-IWRAM_DATA struct UnkStruct_Group *gUnknown_3002028;
+IWRAM_DATA struct UnkStruct_Leader * gUnknown_3002024;
+IWRAM_DATA struct UnkStruct_Group * gUnknown_3002028;
+IWRAM_DATA struct UnkStruct_URoom * gUnknown_300202C;
void sub_8115A68(u8 taskId);
void sub_81161E4(struct UnkStruct_Leader * leader);
@@ -53,8 +56,13 @@ u8 sub_8116FE4(void);
void sub_8117990(void);
void sub_81179A4(void);
void sub_8117A0C(u8 taskId);
-u16 sub_8118658(const u8 *data);
+void sub_8117F20(u8 taskId);
+void sub_81182DC(u8 taskId);
+void sub_81186E0(u8 taskId);
+u16 ReadAsU16(const u8 *data);
+bool32 sub_8119FB0(struct GFtgtGname *arg0, s16 arg1);
u8 sub_811A054(struct UnkStruct_Main4 *arg0, u32 arg1);
+u8 sub_811A084(struct UnkStruct_Main4 *arg0, u32 arg1);
bool8 sub_811A0F8(u8 *textState, const u8 *str);
s8 sub_811A14C(u8 *dest, bool32 arg1);
void sub_811A41C(void);
@@ -83,6 +91,7 @@ extern const u8 *const gUnknown_8457094[13];
extern const u8 gUnknown_84570C8[];
extern const u8 gUnknown_84571B4[];
extern const u8 gUnknown_84571B8[];
+extern const u8 gUnknown_84571E0[];
extern const u8 gUnknown_8457234[];
extern const u8 gUnknown_8457264[];
extern const u8 *const gUnknown_845742C[][5];
@@ -101,13 +110,20 @@ extern const u8 gUnknown_84576C4[];
extern const u8 gUnknown_8457700[];
extern const u8 gUnknown_845771C[];
extern const u8 *const gUnknown_8457754[];
+extern const u8 gUnknown_845777C[];
+extern const u8 gUnknown_84577BC[];
extern const u8 gUnknown_84577F8[];
+extern const u8 *const gUnknown_8457838[];
extern const u8 gUnknown_8457E28[];
extern const u8 gUnknown_8457E44[];
extern const u8 gUnknown_8458FC8[];
+extern const u8 gUnknown_8458FE4[];
+extern const u8 gUnknown_84591DC[];
extern const u8 *const gUnknown_84591B8[];
extern const u8 gUnknown_8459238[];
extern const u8 gUnknown_8459250[];
+extern const u8 gUnknown_845928C[];
+extern const u8 *const gUnknown_845933C[];
// These are functions in Emmerald but inlined in FireRed
@@ -116,6 +132,11 @@ extern const u8 gUnknown_8459250[];
ConvertInternationalString(dest, (arg1).unk.field_0.unk_00.unk_00_0); \
})
+#define sub_8018404_2(dest, arg1) ({ \
+ StringCopy(dest, (arg1).unk.playerName); \
+ ConvertInternationalString(dest, (arg1).unk.field_0.unk_00.unk_00_0); \
+})
+
#define CopyTrainerCardData(dest, src, _version) ({ \
(dest) = *((struct TrainerCard *)(src)); \
(dest).version = _version; \
@@ -150,7 +171,7 @@ void sub_8115924(u8 windowId)
sub_811A444(windowId, 2, gSaveBlock2Ptr->playerName, 0, 2, 0);
StringCopy(text2, gUnknown_84571B4);
- ConvertIntToDecimalStringN(text, sub_8118658(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5);
+ ConvertIntToDecimalStringN(text, ReadAsU16(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5);
StringAppend(text2, text);
sub_811A444(windowId, 0, text2, 0, 0x10, 0);
}
@@ -255,7 +276,7 @@ void sub_8115A68(u8 taskId)
break;
case 6:
sub_8116444(data, 7, 10);
- if (gMain.newKeys & B_BUTTON)
+ if (JOY_NEW(B_BUTTON))
{
if (data->field_13 == 1)
data->state = 23;
@@ -268,7 +289,7 @@ void sub_8115A68(u8 taskId)
&& data->field_13 > (gUnknown_203B059 >> 4) - 1
&& (gUnknown_203B059 & 0xF) != 0
&& sub_80FC1CC()
- && gMain.newKeys & START_BUTTON)
+ && JOY_NEW(START_BUTTON))
{
data->state = 15;
sub_80F8F5C();
@@ -308,19 +329,19 @@ void sub_8115A68(u8 taskId)
}
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)))
+ switch (sub_811A14C(&data->textState, sub_80FA634(ReadAsU16(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);
+ sub_80FA670(5, ReadAsU16(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);
+ sub_80FA670(6, ReadAsU16(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:
@@ -329,7 +350,7 @@ void sub_8115A68(u8 taskId)
}
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);
+ val = sub_80FA6FC(ReadAsU16(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)
@@ -360,7 +381,7 @@ void sub_8115A68(u8 taskId)
}
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));
+ sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(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);
@@ -773,7 +794,7 @@ void sub_8116738(u8 taskId)
break;
case 0:
id = ListMenu_ProcessInput(data->listTaskId);
- if (gMain.newKeys & A_BUTTON && id != -1)
+ if (JOY_NEW(A_BUTTON) && id != -1)
{
// this unused variable along with the assignment is needed to match
u32 unusedVar;
@@ -800,7 +821,7 @@ void sub_8116738(u8 taskId)
PlaySE(SE_WALL_HIT);
}
}
- else if (gMain.newKeys & B_BUTTON)
+ else if (JOY_NEW(B_BUTTON))
{
data->state = 10;
}
@@ -869,7 +890,7 @@ void sub_8116738(u8 taskId)
break;
}
- if (!sub_80FB9F4() && gMain.newKeys & B_BUTTON)
+ if (!sub_80FB9F4() && JOY_NEW(B_BUTTON))
data->state = 7;
break;
case 7:
@@ -985,7 +1006,7 @@ void sub_8116D60(struct UnkStruct_Group *data, s32 id)
RedrawListMenu(data->listTaskId);
sub_8018404(gStringVar1, data->field_0->arr[data->field_F]);
sub_80FB008(gUnknown_84570C8[gSpecialVar_0x8004], 0, 1);
- sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, sub_8118658(data->field_0->arr[data->field_F].unk.field_0.unk_00.playerTrainerId));
+ sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.field_0.unk_00.playerTrainerId));
}
u8 sub_8116DE0(void)
@@ -1536,7 +1557,7 @@ void sub_8117A0C(u8 taskId)
break;
case 4:
sub_8116444(data, 5, 6);
- if (gMain.newKeys & B_BUTTON)
+ if (JOY_NEW(B_BUTTON))
{
data->state = 13;
DestroyWirelessStatusIndicatorSprite();
@@ -1562,19 +1583,19 @@ void sub_8117A0C(u8 taskId)
data->field_0->arr[data->field_13].field_1B = 0;
RedrawListMenu(data->listTaskId);
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);
+ sub_80FA670(5, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
data->state = 8;
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);
+ sub_80FA670(6, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
data->state = 8;
break;
}
break;
case 8:
- 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);
+ val = sub_80FA6FC(ReadAsU16(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)
@@ -1589,7 +1610,7 @@ void sub_8117A0C(u8 taskId)
}
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));
+ sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(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);
@@ -1674,3 +1695,405 @@ void sub_8117A0C(u8 taskId)
break;
}
}
+
+void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0)
+{
+ u8 taskId;
+ struct UnkStruct_Group *dataPtr;
+
+ taskId = CreateTask(sub_8117F20, 0);
+ gUnknown_203B05C.group = dataPtr = (void*)(gTasks[taskId].data);
+ gUnknown_3002028 = dataPtr;
+
+ dataPtr->state = 0;
+ dataPtr->textState = 0;
+ dataPtr->field_12 = arg0 - 21;
+ gSpecialVar_Result = 0;
+}
+
+void sub_8117F20(u8 taskId)
+{
+ s32 id;
+ struct WindowTemplate winTemplate1, winTemplate2;
+ struct UnkStruct_Group *data = gUnknown_203B05C.group;
+
+ switch (data->state)
+ {
+ case 0:
+ sub_80FAF58(data->field_12 + 21, 0, 0);
+ sub_800B1F4();
+ OpenLink();
+ sub_80FBBD8();
+ data->field_4 = AllocZeroed(0x70);
+ data->field_0 = AllocZeroed(0x200);
+ data->state = 1;
+ break;
+ case 1:
+ AddTextPrinterToWindow1(gUnknown_8458FE4);
+ data->state = 2;
+ break;
+ case 2:
+ sub_811A650(data->field_4, 4);
+ sub_811A5E4(data->field_0->arr, 16);
+ data->field_11 = sub_811A054(data->field_4, data->field_12 + 7);
+
+ winTemplate1 = gUnknown_8456D4C;
+ winTemplate1.baseBlock = GetMysteryGiftBaseBlock();
+ data->listWindowId = AddWindow(&winTemplate1);
+
+ data->field_D = AddWindow(&gUnknown_8456D54);
+
+ MG_DrawTextBorder(data->listWindowId);
+ gMultiuseListMenuTemplate = gUnknown_8456DDC;
+ gMultiuseListMenuTemplate.windowId = data->listWindowId;
+ data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+
+ MG_DrawTextBorder(data->field_D);
+ FillWindowPixelBuffer(data->field_D, PIXEL_FILL(1));
+ PutWindowTilemap(data->field_D);
+ sub_8115924(data->field_D);
+ CopyWindowToVram(data->field_D, 2);
+
+ CopyBgTilemapBufferToVram(0);
+ data->field_F = 0;
+ data->state = 3;
+ break;
+ case 3:
+ id = sub_8116FE4();
+ switch (id)
+ {
+ case 1:
+ PlaySE(SE_PC_LOGIN);
+ default:
+ RedrawListMenu(data->listTaskId);
+ break;
+ case 0:
+ id = ListMenu_ProcessInput(data->listTaskId);
+ if (JOY_NEW(A_BUTTON) && id != -1)
+ {
+ // this unused variable along with the assignment is needed to match
+ u32 unusedVar;
+ unusedVar = data->field_0->arr[id].unk.field_0.unk_0a_0;
+
+ if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.field_0.unk_0a_7)
+ {
+ data->field_F = id;
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ RedrawListMenu(data->listTaskId);
+ sub_8018404_2(gStringVar1, data->field_0->arr[data->field_F]);
+ sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.field_0.unk_00.playerTrainerId));
+ PlaySE(SE_PN_ON);
+ data->state = 4;
+ }
+ else
+ {
+ PlaySE(SE_WALL_HIT);
+ }
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ data->state = 6;
+ }
+ break;
+ }
+ break;
+ case 4:
+ AddTextPrinterToWindow1(gUnknown_8459238);
+ sub_8018404_2(gStringVar1, data->field_0->arr[data->field_F]);
+ data->state = 5;
+ break;
+ case 5:
+ if (gReceivedRemoteLinkPlayers != 0)
+ {
+ gUnknown_203B058 = data->field_0->arr[data->field_F].unk.field_0.unk_0a_0;
+ data->state = 10;
+ }
+
+ switch (sub_80FB9F4())
+ {
+ case 1:
+ case 2:
+ case 6:
+ data->state = 8;
+ break;
+ case 5:
+ AddTextPrinterToWindow1(gUnknown_84576AC);
+ sub_80FB9E4(0, 0);
+ break;
+ }
+ break;
+ case 6:
+ case 8:
+ case 10:
+ DestroyListMenuTask(data->listTaskId, 0, 0);
+ CopyBgTilemapBufferToVram(0);
+ RemoveWindow(data->field_D);
+ RemoveWindow(data->listWindowId);
+ DestroyTask(data->field_11);
+ Free(data->field_0);
+ Free(data->field_4);
+ data->state++;
+ break;
+ case 9:
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_8457838[sub_80FB9F4()]))
+ {
+ DestroyWirelessStatusIndicatorSprite();
+ DestroyTask(taskId);
+ sub_80F8DC0();
+ gSpecialVar_Result = 5;
+ }
+ break;
+ case 7:
+ DestroyWirelessStatusIndicatorSprite();
+ AddTextPrinterToWindow1(gUnknown_84571B8);
+ DestroyTask(taskId);
+ sub_80F8DC0();
+ gSpecialVar_Result = 5;
+ break;
+ case 11:
+ data->state++;
+ sub_800AB9C();
+ break;
+ case 12:
+ if (IsLinkTaskFinished())
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0)
+{
+ u8 taskId;
+ struct UnkStruct_Group *dataPtr;
+
+ taskId = CreateTask(sub_81182DC, 0);
+ gUnknown_203B05C.group = dataPtr = (void*)(gTasks[taskId].data);
+ gUnknown_3002028 = dataPtr;
+
+ dataPtr->state = 0;
+ dataPtr->textState = 0;
+ dataPtr->field_12 = arg0 - 21;
+ gSpecialVar_Result = 0;
+}
+
+void sub_81182DC(u8 taskId)
+{
+ s32 id;
+ struct WindowTemplate winTemplate;
+ struct UnkStruct_Group *data = gUnknown_203B05C.group;
+
+ switch (data->state)
+ {
+ case 0:
+ sub_80FAF58(0, 0, 0);
+ sub_800B1F4();
+ OpenLink();
+ sub_80FBBD8();
+ data->field_4 = AllocZeroed(0x70);
+ data->field_0 = AllocZeroed(0x200);
+ data->state = 1;
+ break;
+ case 1:
+ AddTextPrinterToWindow1(gUnknown_84591DC);
+ data->state = 2;
+ break;
+ case 2:
+ sub_811A650(data->field_4, 4);
+ sub_811A5E4(data->field_0->arr, 16);
+ data->field_11 = sub_811A084(data->field_4, data->field_12 + 7);
+
+ if (data->field_13 != 0)
+ {
+ winTemplate = gUnknown_8456D4C;
+ winTemplate.baseBlock = GetMysteryGiftBaseBlock();
+ data->listWindowId = AddWindow(&winTemplate);
+
+ MG_DrawTextBorder(data->listWindowId);
+ gMultiuseListMenuTemplate = gUnknown_8456DDC;
+ gMultiuseListMenuTemplate.windowId = data->listWindowId;
+ data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+
+ CopyBgTilemapBufferToVram(0);
+ }
+
+ data->field_F = 0;
+ data->state = 3;
+ break;
+ case 3:
+ id = sub_8116FE4();
+ switch (id)
+ {
+ case 1:
+ PlaySE(SE_PC_LOGIN);
+ default:
+ if (data->field_13 != 0)
+ RedrawListMenu(data->listTaskId);
+ break;
+ case 0:
+ if (data->field_13 != 0)
+ id = ListMenu_ProcessInput(data->listTaskId);
+ if (data->field_14 > 120)
+ {
+ if (data->field_0->arr[0].field_1A_0 == 1 && !data->field_0->arr[0].unk.field_0.unk_0a_7)
+ {
+ if (sub_8119FB0(&data->field_0->arr[0].unk.field_0, data->field_12 + 7))
+ {
+ data->field_F = 0;
+ data->field_14 = 0;
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ sub_80FBF54(data->field_0->arr[0].unk.playerName, ReadAsU16(data->field_0->arr[0].unk.field_0.unk_00.playerTrainerId));
+ PlaySE(SE_PN_ON);
+ data->state = 4;
+ }
+ else
+ {
+ PlaySE(SE_BOO);
+ data->state = 10;
+ }
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ data->state = 6;
+ data->field_14 = 0;
+ }
+ data->field_14++;
+ break;
+ }
+ break;
+ case 4:
+ AddTextPrinterToWindow1(gUnknown_845928C);
+ sub_8018404_2(gStringVar1, data->field_0->arr[data->field_F]);
+ data->state = 5;
+ break;
+ case 5:
+ if (gReceivedRemoteLinkPlayers != 0)
+ {
+ gUnknown_203B058 = data->field_0->arr[data->field_F].unk.field_0.unk_0a_0;
+ data->state = 12;
+ }
+
+ switch (sub_80FB9F4())
+ {
+ case 1:
+ case 2:
+ case 6:
+ data->state = 8;
+ break;
+ case 5:
+ AddTextPrinterToWindow1(gUnknown_845777C);
+ sub_80FB9E4(0, 0);
+ break;
+ }
+ break;
+ case 6:
+ case 8:
+ case 10:
+ case 12:
+ if (data->field_13 != 0)
+ {
+ DestroyListMenuTask(data->listTaskId, 0, 0);
+ CopyBgTilemapBufferToVram(0);
+ RemoveWindow(data->listWindowId);
+ }
+ DestroyTask(data->field_11);
+ Free(data->field_0);
+ Free(data->field_4);
+ data->state++;
+ break;
+ case 9:
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_84577BC))
+ {
+ DestroyWirelessStatusIndicatorSprite();
+ DestroyTask(taskId);
+ sub_80F8DC0();
+ gSpecialVar_Result = 5;
+ }
+ break;
+ case 7:
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_84571E0))
+ {
+ DestroyWirelessStatusIndicatorSprite();
+ DestroyTask(taskId);
+ sub_80F8DC0();
+ gSpecialVar_Result = 5;
+ }
+ break;
+ case 11:
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_845933C[data->field_12]))
+ {
+ DestroyWirelessStatusIndicatorSprite();
+ DestroyTask(taskId);
+ sub_80F8DC0();
+ gSpecialVar_Result = 5;
+ }
+ break;
+ case 13:
+ data->state++;
+ sub_800AB9C();
+ break;
+ case 14:
+ if (IsLinkTaskFinished())
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void UnionRoomSpecial(void)
+{
+ struct UnkStruct_URoom *dataPtr;
+
+ ClearAndInitHostRFUtgtGname();
+ CreateTask(sub_81186E0, 10);
+
+ // dumb line needed to match
+ gUnknown_203B05C.uRoom = gUnknown_203B05C.uRoom;
+
+ dataPtr = AllocZeroed(sizeof(*gUnknown_203B05C.uRoom));
+ gUnknown_203B05C.uRoom = dataPtr;
+ gUnknown_300202C = dataPtr;
+
+ dataPtr->state = 0;
+ dataPtr->textState = 0;
+ dataPtr->field_10 = 0;
+ dataPtr->field_12 = 0;
+
+ gSpecialVar_Result = 0;
+ sub_8107D38(0xD0, 1);
+}
+
+u16 ReadAsU16(const u8 *ptr)
+{
+ return (ptr[1] << 8) | (ptr[0]);
+}
+
+void sub_8118664(u32 nextState, const u8 *src)
+{
+ struct UnkStruct_URoom *data = gUnknown_203B05C.uRoom;
+
+ data->state = 8;
+ data->stateAfterPrint = nextState;
+ if (src != gStringVar4)
+ StringExpandPlaceholders(gStringVar4, src);
+}
+
+void sub_811868C(const u8 *src)
+{
+ struct UnkStruct_URoom *data = gUnknown_203B05C.uRoom;
+
+ data->state = 26;
+ if (src != gStringVar4)
+ StringExpandPlaceholders(gStringVar4, src);
+}
+
+void sub_81186B0(struct UnkStruct_URoom *data)
+{
+ memcpy(&gDecompressionBuffer[0x3F00], data->field_0, sizeof(*data->field_0));
+}
+
+void sub_81186C8(struct UnkStruct_URoom *data)
+{
+ memcpy(data->field_0, &gDecompressionBuffer[0x3F00], sizeof(*data->field_0));
+}