summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xasm/mystery_gift.s (renamed from asm/union_room.s)968
-rwxr-xr-xdata/mystery_gift.s99
-rwxr-xr-xdata/union_room.s246
-rw-r--r--include/mevent2.h6
-rw-r--r--include/mystery_gift.h8
-rw-r--r--include/rom_8011DC0.h171
-rw-r--r--include/strings.h20
-rw-r--r--include/union_room.h172
-rw-r--r--ld_script.txt6
-rw-r--r--src/cable_club.c3
-rwxr-xr-xsrc/ereader_helpers.c2
-rwxr-xr-xsrc/ereader_screen.c2
-rw-r--r--src/link_rfu.c4
-rw-r--r--src/mevent_801BAAC.c1
-rw-r--r--src/mystery_gift.c698
-rwxr-xr-xsrc/party_menu.c2
-rw-r--r--src/start_menu.c1
-rw-r--r--src/trade.c3
-rw-r--r--src/union_room.c4
-rw-r--r--sym_ewram.txt5
20 files changed, 1019 insertions, 1402 deletions
diff --git a/asm/union_room.s b/asm/mystery_gift.s
index ca5ad6853..6fec153ca 100755
--- a/asm/union_room.s
+++ b/asm/mystery_gift.s
@@ -5,974 +5,6 @@
.text
- thumb_func_start sub_8018424
-sub_8018424: @ 8018424
- push {lr}
- bl ProcessSpriteCopyRequests
- bl LoadOam
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_8018424
-
- thumb_func_start sub_8018438
-sub_8018438: @ 8018438
- push {lr}
- bl RunTasks
- bl RunTextPrinters
- bl AnimateSprites
- bl BuildOamBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_8018438
-
- thumb_func_start sub_8018450
-sub_8018450: @ 8018450
- push {r4-r7,lr}
- sub sp, 0xC
- adds r7, r0, 0
- ldr r0, =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r6, r0, r1
- ldrb r0, [r6]
- cmp r0, 0x1
- bne _08018466
- b _08018574
-_08018466:
- cmp r0, 0x1
- bgt _08018474
- cmp r0, 0
- beq _08018482
- b _08018644
- .pool
-_08018474:
- cmp r0, 0x2
- bne _0801847A
- b _080185F8
-_0801847A:
- cmp r0, 0x3
- bne _08018480
- b _08018618
-_08018480:
- b _08018644
-_08018482:
- movs r0, 0
- bl SetVBlankCallback
- bl ResetPaletteFade
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl ResetTasks
- bl ScanlineEffect_Stop
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, =gUnknown_082F0598
- movs r0, 0
- movs r2, 0x4
- bl InitBgsFromTemplates
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r4, 0x80
- lsls r4, 4
- adds r0, r4, 0
- bl Alloc
- adds r1, r0, 0
- movs r0, 0x3
- bl SetBgTilemapBuffer
- adds r0, r4, 0
- bl Alloc
- adds r1, r0, 0
- movs r0, 0x2
- bl SetBgTilemapBuffer
- adds r0, r4, 0
- bl Alloc
- adds r1, r0, 0
- movs r0, 0x1
- bl SetBgTilemapBuffer
- adds r0, r4, 0
- bl Alloc
- adds r1, r0, 0
- movs r0, 0
- bl SetBgTilemapBuffer
- movs r0, 0x3
- bl bgid_upload_textbox_1
- ldr r0, =gUnknown_082F05A8
- bl InitWindows
- bl DeactivateAllTextPrinters
- movs r1, 0xC0
- lsls r1, 7
- movs r0, 0
- bl ClearGpuRegBits
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- b _08018610
- .pool
-_08018574:
- ldr r0, =gUnkTextboxBorderPal
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0x2
- bl stdpal_get
- movs r1, 0xD0
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0xC0
- bl sub_81978B0
- movs r0, 0
- movs r1, 0xA
- movs r2, 0xE0
- bl LoadUserWindowBorderGfx
- movs r0, 0
- movs r1, 0x1
- movs r2, 0xF0
- bl LoadUserWindowBorderGfx_
- movs r4, 0x20
- str r4, [sp]
- str r4, [sp, 0x4]
- movs r5, 0x11
- str r5, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect
- str r4, [sp]
- str r4, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect
- str r4, [sp]
- str r4, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect
- movs r0, 0x3
- bl sub_8018798
- lsls r0, r7, 24
- lsrs r0, 24
- movs r1, 0
- bl sub_80186EC
- b _08018610
- .pool
-_080185F8:
- movs r0, 0x3
- bl CopyBgTilemapBufferToVram
- movs r0, 0x2
- bl CopyBgTilemapBufferToVram
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- movs r0, 0
- bl CopyBgTilemapBufferToVram
-_08018610:
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
- b _08018644
-_08018618:
- movs r0, 0
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- ldr r0, =0x0000021d
- bl PlayBGM
- ldr r0, =sub_8018424
- bl SetVBlankCallback
- movs r0, 0xC5
- bl EnableInterrupts
- movs r0, 0x1
- b _08018646
- .pool
-_08018644:
- movs r0, 0
-_08018646:
- add sp, 0xC
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8018450
-
- thumb_func_start c2_mystery_gift
-c2_mystery_gift: @ 8018650
- push {lr}
- movs r0, 0
- bl sub_8018450
- cmp r0, 0
- beq _0801866C
- ldr r0, =sub_8018438
- bl SetMainCallback2
- ldr r1, =gUnknown_02022C60
- movs r0, 0
- strb r0, [r1]
- bl task_add_00_mystery_gift
-_0801866C:
- bl RunTasks
- pop {r0}
- bx r0
- .pool
- thumb_func_end c2_mystery_gift
-
- thumb_func_start sub_801867C
-sub_801867C: @ 801867C
- push {lr}
- movs r0, 0x1
- bl sub_8018450
- cmp r0, 0
- beq _08018698
- ldr r0, =sub_8018438
- bl SetMainCallback2
- ldr r1, =gUnknown_02022C60
- movs r0, 0x1
- strb r0, [r1]
- bl sub_81D5014
-_08018698:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_801867C
-
- thumb_func_start sub_80186A4
-sub_80186A4: @ 80186A4
- push {lr}
- ldr r1, =gUnknown_02022C60
- movs r0, 0
- strb r0, [r1]
- bl FreeAllWindowBuffers
- movs r0, 0
- bl GetBgTilemapBuffer
- bl Free
- movs r0, 0x1
- bl GetBgTilemapBuffer
- bl Free
- movs r0, 0x2
- bl GetBgTilemapBuffer
- bl Free
- movs r0, 0x3
- bl GetBgTilemapBuffer
- bl Free
- ldr r0, =CB2_InitTitleScreen
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80186A4
-
- thumb_func_start sub_80186EC
-sub_80186EC: @ 80186EC
- push {r4-r7,lr}
- sub sp, 0x14
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- cmp r4, 0
- bne _0801871C
- ldr r0, =gText_MysteryGift
- ldr r7, =gText_PickOKCancel
- cmp r5, 0
- bne _08018720
- ldr r7, =gText_PickOKExit
- b _08018720
- .pool
-_0801871C:
- ldr r0, =gJPText_MysteryGift
- ldr r7, =gJPText_DecideStop
-_08018720:
- movs r4, 0
- str r4, [sp]
- str r4, [sp, 0x4]
- ldr r6, =gUnknown_082F0720
- str r6, [sp, 0x8]
- movs r5, 0x1
- negs r5, r5
- str r5, [sp, 0xC]
- str r0, [sp, 0x10]
- movs r0, 0
- movs r1, 0x1
- movs r2, 0x4
- movs r3, 0x1
- bl AddTextPrinterParameterized4
- movs r0, 0
- adds r1, r7, 0
- movs r2, 0xDE
- bl GetStringRightAlignXOffset
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- str r4, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- str r5, [sp, 0xC]
- str r7, [sp, 0x10]
- movs r0, 0
- movs r1, 0
- movs r3, 0x1
- bl AddTextPrinterParameterized4
- movs r0, 0
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0
- bl PutWindowTilemap
- add sp, 0x14
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80186EC
-
- thumb_func_start sub_8018784
-sub_8018784: @ 8018784
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- movs r2, 0xF
- bl sub_8098858
- pop {r0}
- bx r0
- thumb_func_end sub_8018784
-
- thumb_func_start sub_8018798
-sub_8018798: @ 8018798
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- adds r4, r0, 0
- movs r0, 0
- mov r9, r0
- lsls r4, 24
- lsrs r0, r4, 24
- movs r1, 0x20
- str r1, [sp]
- movs r1, 0x2
- str r1, [sp, 0x4]
- movs r1, 0x11
- str r1, [sp, 0x8]
- movs r1, 0x3
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect
- mov r8, r4
- movs r4, 0x1
-_080187C8:
- movs r7, 0
- mov r0, r9
- adds r0, 0x2
- movs r1, 0x1
- add r1, r9
- mov r10, r1
- lsls r5, r0, 24
- movs r6, 0
-_080187D8:
- mov r1, r9
- ands r1, r4
- adds r0, r7, 0
- ands r0, r4
- cmp r1, r0
- beq _080187FC
- lsrs r2, r6, 24
- str r4, [sp]
- str r4, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- mov r1, r8
- lsrs r0, r1, 24
- movs r1, 0x1
- lsrs r3, r5, 24
- bl FillBgTilemapBufferRect
- b _08018812
-_080187FC:
- lsrs r2, r6, 24
- str r4, [sp]
- str r4, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- mov r1, r8
- lsrs r0, r1, 24
- movs r1, 0x2
- lsrs r3, r5, 24
- bl FillBgTilemapBufferRect
-_08018812:
- movs r0, 0x80
- lsls r0, 17
- adds r6, r0
- adds r7, 0x1
- cmp r7, 0x1F
- ble _080187D8
- mov r9, r10
- mov r1, r9
- cmp r1, 0x11
- ble _080187C8
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8018798
-
- thumb_func_start sub_8018838
-sub_8018838: @ 8018838
- push {lr}
- sub sp, 0xC
- cmp r0, 0
- beq _08018846
- cmp r0, 0x1
- beq _0801885E
- b _08018876
-_08018846:
- movs r0, 0x20
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect
- b _08018876
-_0801885E:
- movs r0, 0x20
- str r0, [sp]
- movs r0, 0x1E
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0x2
- bl FillBgTilemapBufferRect
-_08018876:
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0xC
- pop {r0}
- bx r0
- thumb_func_end sub_8018838
-
- thumb_func_start sub_8018884
-sub_8018884: @ 8018884
- push {r4,lr}
- sub sp, 0x14
- adds r1, r0, 0
- ldr r4, =gStringVar4
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0x1
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r1, 0
- str r1, [sp]
- str r1, [sp, 0x4]
- ldr r0, =gUnknown_082F0728
- str r0, [sp, 0x8]
- str r1, [sp, 0xC]
- str r4, [sp, 0x10]
- movs r0, 0x1
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl AddTextPrinterParameterized4
- movs r0, 0x1
- movs r1, 0x1
- movs r2, 0xF
- bl sub_8098858
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0x1
- movs r1, 0x3
- bl CopyWindowToVram
- add sp, 0x14
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8018884
-
- thumb_func_start sub_80188DC
-sub_80188DC: @ 80188DC
- push {lr}
- movs r0, 0x1
- bl rbox_fill_rectangle
- movs r0, 0x1
- bl ClearWindowTilemap
- movs r0, 0x1
- movs r1, 0x1
- bl CopyWindowToVram
- pop {r0}
- bx r0
- thumb_func_end sub_80188DC
-
- thumb_func_start mevent_0814257C
-mevent_0814257C: @ 80188F8
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- adds r0, r1, 0
- ldrb r2, [r4]
- cmp r2, 0x1
- beq _08018920
- cmp r2, 0x1
- bgt _08018910
- cmp r2, 0
- beq _0801891A
- b _08018980
-_08018910:
- cmp r2, 0x2
- beq _08018954
- cmp r2, 0xFF
- beq _0801897C
- b _08018980
-_0801891A:
- bl sub_8018884
- b _08018944
-_08018920:
- movs r0, 0
- str r0, [sp]
- ldr r0, =gUnknown_02022C58
- str r0, [sp, 0x4]
- adds r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0xD0
- movs r2, 0x14
- movs r3, 0x1
- bl DrawDownArrow
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _08018980
-_08018944:
- ldrb r0, [r4]
- adds r0, 0x1
- b _0801897E
- .pool
-_08018954:
- movs r0, 0x1
- str r0, [sp]
- ldr r0, =gUnknown_02022C58
- str r0, [sp, 0x4]
- adds r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0xD0
- movs r2, 0x14
- movs r3, 0x1
- bl DrawDownArrow
- movs r0, 0
- strb r0, [r4]
- bl sub_80188DC
- movs r0, 0x1
- b _08018982
- .pool
-_0801897C:
- movs r0, 0x2
-_0801897E:
- strb r0, [r4]
-_08018980:
- movs r0, 0
-_08018982:
- add sp, 0xC
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end mevent_0814257C
-
- thumb_func_start sub_801898C
-sub_801898C: @ 801898C
- push {lr}
- sub sp, 0xC
- movs r0, 0
- str r0, [sp]
- ldr r0, =gUnknown_02022C58
- str r0, [sp, 0x4]
- adds r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0xD0
- movs r2, 0x14
- movs r3, 0x1
- bl DrawDownArrow
- add sp, 0xC
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_801898C
-
- thumb_func_start sub_80189B4
-sub_80189B4: @ 80189B4
- push {lr}
- sub sp, 0xC
- movs r0, 0x1
- str r0, [sp]
- ldr r0, =gUnknown_02022C58
- str r0, [sp, 0x4]
- adds r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0xD0
- movs r2, 0x14
- movs r3, 0x1
- bl DrawDownArrow
- add sp, 0xC
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80189B4
-
- thumb_func_start sub_80189DC
-sub_80189DC: @ 80189DC
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _080189EC
- cmp r0, 0x1
- beq _08018A08
- b _08018A14
-_080189EC:
- bl sub_801898C
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _08018A14
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _08018A14
- .pool
-_08018A08:
- bl sub_80189B4
- movs r0, 0
- strb r0, [r4]
- movs r0, 0x1
- b _08018A16
-_08018A14:
- movs r0, 0
-_08018A16:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80189DC
-
- thumb_func_start sub_8018A1C
-sub_8018A1C: @ 8018A1C
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- bne _08018A2C
- adds r0, r1, 0
- bl sub_8018884
-_08018A2C:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x78
- bhi _08018A3E
- movs r0, 0
- b _08018A48
-_08018A3E:
- movs r0, 0
- strb r0, [r4]
- bl sub_80188DC
- movs r0, 0x1
-_08018A48:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8018A1C
-
- thumb_func_start sub_8018A50
-sub_8018A50: @ 8018A50
- push {r4,r5,lr}
- sub sp, 0x24
- lsls r2, 24
- add r1, sp, 0x4
- ldr r0, =gUnknown_082F0638
- ldm r0!, {r3-r5}
- stm r1!, {r3-r5}
- ldm r0!, {r3-r5}
- stm r1!, {r3-r5}
- ldr r0, =gUnknown_082F05E0
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp, 0x1C]
- str r1, [sp, 0x20]
- cmp r2, 0
- bne _08018A80
- ldr r0, =gUnknown_082F0608
- b _08018A82
- .pool
-_08018A80:
- ldr r0, =gUnknown_082F0620
-_08018A82:
- str r0, [sp, 0x4]
- add r0, sp, 0x4
- bl sub_81DB41C
- adds r3, r0, 0
- movs r0, 0x1
- ands r0, r3
- cmp r0, 0
- beq _08018A96
- adds r3, 0x1
-_08018A96:
- lsls r1, r3, 24
- ldr r0, =0x00ffffff
- ldr r2, [sp, 0x1C]
- ands r2, r0
- orrs r2, r1
- str r2, [sp, 0x1C]
- cmp r3, 0x1D
- bgt _08018ACC
- movs r0, 0x1E
- subs r0, r3
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- lsls r0, 24
- lsrs r0, 16
- ldr r1, =0xffff00ff
- ands r1, r2
- orrs r1, r0
- str r1, [sp, 0x1C]
- b _08018AD2
- .pool
-_08018ACC:
- ldr r0, =0xffff00ff
- ands r2, r0
- str r2, [sp, 0x1C]
-_08018AD2:
- add r0, sp, 0x1C
- movs r1, 0xE0
- str r1, [sp]
- add r1, sp, 0x4
- movs r2, 0x1
- movs r3, 0xA
- bl DoMysteryGiftListMenu
- adds r4, r0, 0
- movs r0, 0x1
- negs r0, r0
- cmp r4, r0
- beq _08018AFA
- movs r0, 0x2
- bl ClearWindowTilemap
- movs r0, 0x2
- movs r1, 0x1
- bl CopyWindowToVram
-_08018AFA:
- adds r0, r4, 0
- add sp, 0x24
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8018A50
-
- thumb_func_start sub_8018B08
-sub_8018B08: @ 8018B08
- push {r4-r6,lr}
- sub sp, 0x1C
- adds r5, r0, 0
- adds r4, r1, 0
- adds r1, r3, 0
- lsls r2, 24
- lsrs r6, r2, 24
- ldrb r0, [r5]
- cmp r0, 0x1
- beq _08018B98
- cmp r0, 0x1
- bgt _08018B26
- cmp r0, 0
- beq _08018B30
- b _08018C3E
-_08018B26:
- cmp r0, 0x2
- beq _08018BE4
- cmp r0, 0xFF
- beq _08018C1A
- b _08018C3E
-_08018B30:
- ldr r0, =gStringVar4
- bl StringExpandPlaceholders
- cmp r6, 0
- bne _08018B48
- ldr r0, =gUnknown_082F05C8
- b _08018B4A
- .pool
-_08018B48:
- ldr r0, =gUnknown_082F05D0
-_08018B4A:
- bl AddWindow
- strh r0, [r4]
- ldrb r0, [r4]
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldrb r0, [r4]
- movs r2, 0
- str r2, [sp]
- str r2, [sp, 0x4]
- ldr r1, =gUnknown_082F0728
- str r1, [sp, 0x8]
- str r2, [sp, 0xC]
- ldr r1, =gStringVar4
- str r1, [sp, 0x10]
- movs r1, 0x1
- movs r3, 0x1
- bl AddTextPrinterParameterized4
- ldrb r0, [r4]
- movs r1, 0x1
- movs r2, 0xF
- bl sub_8098858
- ldrb r0, [r4]
- movs r1, 0x2
- bl CopyWindowToVram
- ldrb r0, [r4]
- bl PutWindowTilemap
- b _08018BD6
- .pool
-_08018B98:
- ldr r0, =gUnknown_082F05E8
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp, 0x14]
- str r1, [sp, 0x18]
- cmp r6, 0
- bne _08018BBC
- ldr r0, =0xff00ffff
- ldr r1, [sp, 0x14]
- ands r1, r0
- movs r0, 0x90
- lsls r0, 12
- b _08018BC6
- .pool
-_08018BBC:
- ldr r0, =0xff00ffff
- ldr r1, [sp, 0x14]
- ands r1, r0
- movs r0, 0xF0
- lsls r0, 12
-_08018BC6:
- orrs r1, r0
- str r1, [sp, 0x14]
- add r0, sp, 0x14
- movs r1, 0xA
- movs r2, 0xE
- movs r3, 0
- bl CreateYesNoMenu
-_08018BD6:
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- b _08018C3E
- .pool
-_08018BE4:
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r6, r0, 24
- movs r1, 0x80
- lsls r1, 17
- adds r0, r1
- lsrs r0, 24
- cmp r0, 0x2
- bhi _08018C3E
- movs r0, 0
- strb r0, [r5]
- ldrb r0, [r4]
- bl rbox_fill_rectangle
- ldrb r0, [r4]
- bl ClearWindowTilemap
- ldrb r0, [r4]
- movs r1, 0x1
- bl CopyWindowToVram
- ldrb r0, [r4]
- bl RemoveWindow
- adds r0, r6, 0
- b _08018C42
-_08018C1A:
- movs r0, 0
- strb r0, [r5]
- ldrb r0, [r4]
- bl rbox_fill_rectangle
- ldrb r0, [r4]
- bl ClearWindowTilemap
- ldrb r0, [r4]
- movs r1, 0x1
- bl CopyWindowToVram
- ldrb r0, [r4]
- bl RemoveWindow
- movs r0, 0x1
- negs r0, r0
- b _08018C42
-_08018C3E:
- movs r0, 0x2
- negs r0, r0
-_08018C42:
- add sp, 0x1C
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8018B08
-
thumb_func_start sub_8018C4C
sub_8018C4C: @ 8018C4C
push {r4-r6,lr}
diff --git a/data/mystery_gift.s b/data/mystery_gift.s
new file mode 100755
index 000000000..5f86ab4d2
--- /dev/null
+++ b/data/mystery_gift.s
@@ -0,0 +1,99 @@
+ .include "asm/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+
+ .align 2
+gUnknown_082F072C:: @ 82F072C
+ .byte 0x21, 0x2c, 0x1f, 0x23, 0x25, 0x24, 0x41, 0x42
+ .byte 0x00, 0x00, 0x22, 0x28, 0x20, 0x2f, 0x2f, 0x0e
+ .byte 0x14, 0x2d, 0x00, 0x00
+
+ .align 2
+gUnknown_082F0740:: @ 82F0740
+ .2byte 0x0004, 0x0006, 0x000d, 0x0008
+ .2byte 0x000a, 0x0006, 0x0001, 0x0008
+ .2byte 0x000d, 0x0004, 0x0007, 0x0004
+ .2byte 0x0001, 0x0004, 0x0007, 0x0008
+
+ .align 2
+gUnknown_082F0760:: @ 82F0760
+ .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0xff, 0x00
+ .byte 0x00, 0x01
+
+gUnknown_082F076A:: @ 82F076A
+ .byte 0x00, 0x02, 0x01, 0x04, 0x03
+
+gUnknown_082F076F:: @ 82F076F
+ .byte 0x01, 0x03, 0x01, 0x04, 0x02
+
+gUnknown_082F0774:: @ 82F0774
+ .byte 0x09, 0x08, 0x07, 0x02, 0x06, 0x05, 0x04, 0x03
+ .byte 0xbf, 0x02, 0xc0, 0x02, 0xc1, 0x02, 0xc2, 0x02
+ .byte 0xc3, 0x02, 0xc4, 0x02, 0xc5, 0x02, 0xc6, 0x02
+
+gUnknown_082F078C:: @ 82F078C
+ .byte 0x9c, 0xfe
+
+gUnknown_082F078E:: @ 82F078E
+ .byte 0x9d, 0xfe
+
+ .align 2
+gWirelessInfoScreenPal:: @ 82F0790
+ .incbin "graphics/interface/wireless_info_screen.gbapal"
+
+ .align 2
+gWirelessInfoScreenGfx:: @ 82F0990
+ .incbin "graphics/interface/wireless_info_screen.4bpp.lz"
+
+ .align 2
+gWirelessInfoScreenTilemap:: @ 82F0BA0
+ .incbin "graphics/interface/wireless_info_screen.bin.lz"
+
+ .align 2
+gUnknown_082F0D34:: @ 82F0D34
+ .4byte 0x000001f8
+ .4byte 0x00001081
+
+ .align 2
+gUnknown_082F0D3C:: @ 82F0D3C
+ window_template 0x00, 0x03, 0x00, 0x18, 0x03, 0x0f, 0x0001
+ window_template 0x00, 0x03, 0x04, 0x15, 0x0f, 0x0f, 0x0049
+ window_template 0x00, 0x18, 0x04, 0x03, 0x0f, 0x0f, 0x0184
+ null_window_template
+
+ .align 2
+gUnknown_082F0D5C:: @ 82F0D5C
+ .4byte gText_WirelessCommStatus
+ .4byte gText_PeopleTrading
+ .4byte gText_PeopleBattling
+ .4byte gText_PeopleInUnionRoom
+ .4byte gText_PeopleCommunicating
+
+ .align 2
+gUnknown_082F0D70:: @ 82F0D70
+ .byte 0x01, 0x01, 0x02, 0x02, 0x01, 0x02, 0x03, 0x01
+ .byte 0x04, 0x04, 0x00, 0x02, 0x06, 0x03, 0x02, 0x07
+ .byte 0x03, 0x02, 0x09, 0x03, 0x00, 0x0a, 0x03, 0x00
+ .byte 0x0b, 0x03, 0x00, 0x0c, 0xff, 0x00, 0x0d, 0x00
+ .byte 0x00, 0x10, 0x03, 0x00, 0x0f, 0x03, 0x00, 0x40
+ .byte 0x02, 0x01, 0x41, 0x02, 0x02, 0x44, 0x02, 0x02
+ .byte 0x45, 0x02, 0x00, 0x48, 0x02, 0x02, 0x54, 0x02
+ .byte 0x01, 0x53, 0x02, 0x02, 0x51, 0x02, 0x01, 0x52
+ .byte 0x02, 0x01, 0x15, 0x03, 0x02, 0x16, 0x03, 0x02
+ .byte 0x17, 0x03, 0x00, 0x18, 0x03, 0x00, 0x19, 0x03
+ .byte 0x00, 0x1a, 0x03, 0x00, 0x1b, 0x03, 0x00, 0x1c
+ .byte 0x01, 0x02, 0x0e, 0x01, 0x02, 0x00, 0x00, 0x00
+
+ .align 2
+gUnknown_082F0DD0:: @ 82F0DD0
+ .4byte 0x000001FC
+
+ .align 2
+gUnknown_082F0DD4:: @ 82F0DD4
+ window_template 0x00, 0x03, 0x0f, 0x18, 0x04, 0x0e, 0x0014
+ null_window_template
+
+ .align 2
+gUnknown_082F0DE4:: @ 82F0DE4
+ .byte 0x01, 0x02, 0x03
diff --git a/data/union_room.s b/data/union_room.s
deleted file mode 100755
index 6934f0fd8..000000000
--- a/data/union_room.s
+++ /dev/null
@@ -1,246 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnkTextboxBorderPal:: @ 82F0548
- .incbin "graphics/interface/unk_textbox_border.gbapal"
-
- .align 2
-gUnkTextboxBorderGfx:: @ 82F0568
- .incbin "graphics/interface/unk_textbox_border.4bpp.lz"
-
- .align 2
-gUnknown_082F0598:: @ 82F0598 struct BgTemplate
- .4byte 0x000000f8
- .4byte 0x000010e1
- .4byte 0x000020d2
- .4byte 0x000030c3
-
- .align 2
-gUnknown_082F05A8:: @ 82F05A8
- window_template 0x00, 0x00, 0x00, 0x1e, 0x02, 0x0c, 0x0013
- window_template 0x00, 0x01, 0x0f, 0x1c, 0x04, 0x0c, 0x004f
- window_template 0x00, 0x00, 0x0f, 0x1e, 0x05, 0x0d, 0x004f
- null_window_template
-
- .align 2
-gUnknown_082F05C8:: @ 82F05C8
- window_template 0x00, 0x01, 0x0f, 0x1c, 0x04, 0x0c, 0x00e5
-
- .align 2
-gUnknown_082F05D0:: @ 82F05D0
- window_template 0x00, 0x01, 0x0f, 0x14, 0x04, 0x0c, 0x00e5
-
- .align 2
-gUnknown_082F05D8:: @ 82F05D8
- window_template 0x00, 0x01, 0x0f, 0x13, 0x04, 0x0c, 0x00e5
-
- .align 2
-gUnknown_082F05E0:: @ 82F05E0
- window_template 0x00, 0x08, 0x06, 0x0e, 0x06, 0x0c, 0x0155
-
- .align 2
-gUnknown_082F05E8:: @ 82F05E8
- window_template 0x00, 0x17, 0x0f, 0x06, 0x04, 0x0c, 0x0155
-
- .align 2
-gUnknown_082F05F0:: @ 82F05F0
- window_template 0x00, 0x16, 0x0b, 0x07, 0x08, 0x0c, 0x0155
-
- .align 2
-gUnknown_082F05F8:: @ 82F05F8
- window_template 0x00, 0x16, 0x0d, 0x07, 0x06, 0x0c, 0x0155
-
- .align 2
-gUnknown_082F0600:: @ 82F0600
- window_template 0x00, 0x16, 0x0f, 0x07, 0x04, 0x0c, 0x0155
-
- .align 2
-gUnknown_082F0608:: @ 82F0608
- .4byte gText_WonderCards, 0x00000000
- .4byte gText_WonderNews, 0x00000001
- .4byte gText_Exit3, 0xfffffffe
-
- .align 2
-gUnknown_082F0620:: @ 82F0620
- .4byte gText_WirelessCommunication, 0x00000000
- .4byte gText_Friend2, 0x00000001
- .4byte gText_Cancel2, 0xfffffffe
-
- .align 2
-gUnknown_082F0638:: @ 82F0638 struct ListMenuTemplate
- .4byte NULL
- .4byte ListMenuDefaultCursorMoveFunc
- .4byte NULL
- .byte 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00
- .byte 0x21, 0x31, 0x00, 0x01
-
- .align 2
-gUnknown_082F0650:: @ 82F0650
- .4byte gText_Receive, 0x00000000
- .4byte gText_Send, 0x00000001
- .4byte gText_Toss, 0x00000002
- .4byte gText_Cancel2, 0xfffffffe
-
- .align 2
-gUnknown_082F0670:: @ 82F0670
- .4byte gText_Receive, 0x00000000
- .4byte gText_Toss, 0x00000002
- .4byte gText_Cancel2, 0xfffffffe
-
- .align 2
-gUnknown_082F0688:: @ 82F0688
- .4byte gText_Receive, 0x00000000
- .4byte gText_Send, 0x00000001
- .4byte gText_Cancel2, 0xfffffffe
-
- .align 2
-gUnknown_082F06A0:: @ 82F06A0
- .4byte gText_Receive, 0x00000000
- .4byte gText_Cancel2, 0xfffffffe
-
- .align 2
-gUnknown_082F06B0:: @ 82F06B0 struct ListMenuTemplate
- .4byte gUnknown_082F0650
- .4byte ListMenuDefaultCursorMoveFunc
- .4byte NULL
- .byte 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00
- .byte 0x21, 0x31, 0x00, 0x01
-
- .align 2
-gUnknown_082F06C8:: @ 82F06C8
- .4byte gUnknown_082F0670
- .4byte ListMenuDefaultCursorMoveFunc
- .4byte NULL
- .byte 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00
- .byte 0x21, 0x31, 0x00, 0x01
-
- .align 2
-gUnknown_082F06E0:: @ 82F06E0
- .4byte gUnknown_082F0688
- .4byte ListMenuDefaultCursorMoveFunc
- .4byte NULL
- .byte 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00
- .byte 0x21, 0x31, 0x00, 0x01
-
- .align 2
-gUnknown_082F06F8:: @ 82F06F8
- .4byte gUnknown_082F06A0
- .4byte ListMenuDefaultCursorMoveFunc
- .4byte NULL
- .byte 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00
- .byte 0x21, 0x31, 0x00, 0x01
-
- .align 2
- .4byte gText_VarietyOfEventsImportedWireless
- .4byte gText_WonderCardsInPossession
- .4byte gText_ReadNewsThatArrived
- .4byte gText_ReturnToTitle
-
- .align 2
-gUnknown_082F0720:: @ 82F0720
- .byte 0x00, 0x01, 0x02
-
- .align 2
- .byte 0x00, 0x01, 0x02
-
- .align 2
-gUnknown_082F0728:: @ 82F0728
- .byte 0x01, 0x02, 0x03
-
- .align 2
-gUnknown_082F072C:: @ 82F072C
- .byte 0x21, 0x2c, 0x1f, 0x23, 0x25, 0x24, 0x41, 0x42
- .byte 0x00, 0x00, 0x22, 0x28, 0x20, 0x2f, 0x2f, 0x0e
- .byte 0x14, 0x2d, 0x00, 0x00
-
- .align 2
-gUnknown_082F0740:: @ 82F0740
- .2byte 0x0004, 0x0006, 0x000d, 0x0008
- .2byte 0x000a, 0x0006, 0x0001, 0x0008
- .2byte 0x000d, 0x0004, 0x0007, 0x0004
- .2byte 0x0001, 0x0004, 0x0007, 0x0008
-
- .align 2
-gUnknown_082F0760:: @ 82F0760
- .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0xff, 0x00
- .byte 0x00, 0x01
-
-gUnknown_082F076A:: @ 82F076A
- .byte 0x00, 0x02, 0x01, 0x04, 0x03
-
-gUnknown_082F076F:: @ 82F076F
- .byte 0x01, 0x03, 0x01, 0x04, 0x02
-
-gUnknown_082F0774:: @ 82F0774
- .byte 0x09, 0x08, 0x07, 0x02, 0x06, 0x05, 0x04, 0x03
- .byte 0xbf, 0x02, 0xc0, 0x02, 0xc1, 0x02, 0xc2, 0x02
- .byte 0xc3, 0x02, 0xc4, 0x02, 0xc5, 0x02, 0xc6, 0x02
-
-gUnknown_082F078C:: @ 82F078C
- .byte 0x9c, 0xfe
-
-gUnknown_082F078E:: @ 82F078E
- .byte 0x9d, 0xfe
-
- .align 2
-gWirelessInfoScreenPal:: @ 82F0790
- .incbin "graphics/interface/wireless_info_screen.gbapal"
-
- .align 2
-gWirelessInfoScreenGfx:: @ 82F0990
- .incbin "graphics/interface/wireless_info_screen.4bpp.lz"
-
- .align 2
-gWirelessInfoScreenTilemap:: @ 82F0BA0
- .incbin "graphics/interface/wireless_info_screen.bin.lz"
-
- .align 2
-gUnknown_082F0D34:: @ 82F0D34
- .4byte 0x000001f8
- .4byte 0x00001081
-
- .align 2
-gUnknown_082F0D3C:: @ 82F0D3C
- window_template 0x00, 0x03, 0x00, 0x18, 0x03, 0x0f, 0x0001
- window_template 0x00, 0x03, 0x04, 0x15, 0x0f, 0x0f, 0x0049
- window_template 0x00, 0x18, 0x04, 0x03, 0x0f, 0x0f, 0x0184
- null_window_template
-
- .align 2
-gUnknown_082F0D5C:: @ 82F0D5C
- .4byte gText_WirelessCommStatus
- .4byte gText_PeopleTrading
- .4byte gText_PeopleBattling
- .4byte gText_PeopleInUnionRoom
- .4byte gText_PeopleCommunicating
-
- .align 2
-gUnknown_082F0D70:: @ 82F0D70
- .byte 0x01, 0x01, 0x02, 0x02, 0x01, 0x02, 0x03, 0x01
- .byte 0x04, 0x04, 0x00, 0x02, 0x06, 0x03, 0x02, 0x07
- .byte 0x03, 0x02, 0x09, 0x03, 0x00, 0x0a, 0x03, 0x00
- .byte 0x0b, 0x03, 0x00, 0x0c, 0xff, 0x00, 0x0d, 0x00
- .byte 0x00, 0x10, 0x03, 0x00, 0x0f, 0x03, 0x00, 0x40
- .byte 0x02, 0x01, 0x41, 0x02, 0x02, 0x44, 0x02, 0x02
- .byte 0x45, 0x02, 0x00, 0x48, 0x02, 0x02, 0x54, 0x02
- .byte 0x01, 0x53, 0x02, 0x02, 0x51, 0x02, 0x01, 0x52
- .byte 0x02, 0x01, 0x15, 0x03, 0x02, 0x16, 0x03, 0x02
- .byte 0x17, 0x03, 0x00, 0x18, 0x03, 0x00, 0x19, 0x03
- .byte 0x00, 0x1a, 0x03, 0x00, 0x1b, 0x03, 0x00, 0x1c
- .byte 0x01, 0x02, 0x0e, 0x01, 0x02, 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_082F0DD0:: @ 82F0DD0
- .4byte 0x000001FC
-
- .align 2
-gUnknown_082F0DD4:: @ 82F0DD4
- window_template 0x00, 0x03, 0x0f, 0x18, 0x04, 0x0e, 0x0014
- null_window_template
-
- .align 2
-gUnknown_082F0DE4:: @ 82F0DE4
- .byte 0x01, 0x02, 0x03
diff --git a/include/mevent2.h b/include/mevent2.h
new file mode 100644
index 000000000..80b1fd51b
--- /dev/null
+++ b/include/mevent2.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_MEVENT2_H
+#define GUARD_MEVENT2_H
+
+void sub_801B990(u32, u32);
+
+#endif //GUARD_MEVENT2_H
diff --git a/include/mystery_gift.h b/include/mystery_gift.h
new file mode 100644
index 000000000..b43fbe9a9
--- /dev/null
+++ b/include/mystery_gift.h
@@ -0,0 +1,8 @@
+#ifndef GUARD_MYSTERY_GIFT_H
+#define GUARD_MYSTERY_GIFT_H
+
+void sub_8018438(void);
+void sub_80186EC(bool8 isJapanese, bool32 usePickOkCancel);
+void sub_8018798(u32 bg);
+
+#endif //GUARD_MYSTERY_GIFT_H
diff --git a/include/rom_8011DC0.h b/include/rom_8011DC0.h
index fa54fca66..ee7397320 100644
--- a/include/rom_8011DC0.h
+++ b/include/rom_8011DC0.h
@@ -1,175 +1,4 @@
#ifndef GUARD_rom_8011DC0_H
#define GUARD_rom_8011DC0_H
-#include "librfu.h"
-
-// Exported type declarations
-
-struct UnkStruct_Shared
-{
- struct UnkLinkRfuStruct_02022B14 field_0;
- u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1];
-};
-
-struct UnkStruct_x1C
-{
- struct UnkStruct_Shared unk0;
- u8 unk18:1;
-};
-
-struct UnkStruct_x20
-{
- struct UnkStruct_Shared unk;
- u16 field_18;
- u8 field_1A_0:2;
- u8 field_1A_1:1;
- u8 field_1B;
- u8 field_1D;
- u8 field_1E;
- u8 field_1F;
-};
-
-struct UnkStruct_Main0
-{
- struct UnkStruct_x20 arr[8];
-};
-
-struct UnkStruct_Main4
-{
- struct UnkStruct_x1C arr[5];
-};
-
-struct UnkStruct_Main8
-{
- struct UnkStruct_x20 arr[5];
-};
-
-struct UnkStruct_Leader
-{
- struct UnkStruct_Main0 *field_0;
- struct UnkStruct_Main4 *field_4;
- struct UnkStruct_Main8 *field_8;
- u8 state;
- u8 textState;
- u8 field_E;
- u8 listWindowId;
- u8 field_10;
- u8 field_11;
- u8 listTaskId;
- u8 field_13;
- u8 field_14;
- u8 field_15;
- u8 field_16;
- u8 field_17;
- u8 field_18;
- u8 field_19;
- u16 field_1A;
-};
-
-struct UnkStruct_Group
-{
- struct UnkStruct_Main0 *field_0;
- struct UnkStruct_Main4 *field_4;
- u8 state;
- u8 textState;
- u8 field_A;
- u8 listWindowId;
- u8 field_C;
- u8 field_D;
- u8 listTaskId;
- u8 field_F;
- u8 field_10;
- u8 field_11;
- u8 field_12;
- u8 field_13;
- u8 field_14;
- u8 field_15;
-};
-
-struct UnkStruct_8019BA8
-{
- u8 field_0;
- u8 field_1;
- u8 field_2;
- u8 field_3;
-};
-
-struct UnkStruct_URoom
-{
- struct UnkStruct_Main0 *field_0;
- struct UnkStruct_Main4 *field_4;
- struct UnkStruct_Main0 *field_8;
- struct UnkStruct_Main4 *field_C;
- u16 field_10;
- u16 field_12;
- u8 state;
- u8 stateAfterPrint;
- u8 textState;
- u8 field_17;
- u8 field_18;
- u8 field_19;
- u8 field_1A;
- u8 field_1B;
- u8 field_1C;
- u8 field_1D;
- u8 field_1E;
- u8 field_1F;
- u8 field_20;
- u8 spriteIds[40];
- u8 field_49;
- u8 field_4A;
- u16 field_4C[6];
- u8 field_58[0x98 - 0x58];
- u16 field_98;
- u16 field_9A[3];
- struct UnkStruct_8019BA8 field_A0[8];
- u8 field_C0[12][15];
- u8 field_174[48];
- u8 field_1A4[200];
-};
-
-union UnkUnion_Main
-{
- struct UnkStruct_Leader *leader;
- struct UnkStruct_Group *group;
- struct UnkStruct_URoom *uRoom;
-};
-
-struct TradeUnkStruct
-{
- u16 field_0;
- u16 type;
- u32 playerPersonality;
- u8 field_8;
- u8 field_9;
- u16 playerSpecies;
- u16 playerLevel;
- u16 species;
- u16 level;
- u16 field_12;
- u32 personality;
-};
-
-// Exported RAM declarations
-
-extern u8 gUnknown_02022C2C;
-extern union UnkUnion_Main gUnknown_02022C30;
-extern struct UnkLinkRfuStruct_02022B14Substruct gUnknown_02022C38;
-
-extern u16 gUnknown_02022C3C;
-extern u8 gUnknown_02022C3E;
-
-// Exported ROM declarations
-
-void sub_8018438(void);
-void sub_801B990(u32, u32);
-u8 sub_8013F78(void);
-bool32 sub_802C908(u16);
-void nullsub_89(u8 taskId);
-void var_800D_set_xB(void);
-
-bool32 mevent_0814257C(u8 *textState, const u8 *str);
-void sub_8018884(const u8 *src);
-void sub_80186A4(void);
-
#endif //GUARD_rom_8011DC0_H
diff --git a/include/strings.h b/include/strings.h
index c762ebd45..2f9a64af1 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -2607,4 +2607,24 @@ extern const u8 gText_YayUnkF9F9[];
extern const u8 gText_ThankYou[];
extern const u8 gText_ByeBye[];
+// Mystery Gift
+extern const u8 gText_MysteryGift[];
+extern const u8 gText_PickOKCancel[];
+extern const u8 gText_PickOKExit[];
+extern const u8 gJPText_MysteryGift[];
+extern const u8 gJPText_DecideStop[];
+extern const u8 gText_WonderCards[];
+extern const u8 gText_WonderNews[];
+extern const u8 gText_Exit3[];
+extern const u8 gText_WirelessCommunication[];
+extern const u8 gText_Friend2[];
+extern const u8 gText_Cancel2[];
+extern const u8 gText_Receive[];
+extern const u8 gText_Send[];
+extern const u8 gText_Toss[];
+extern const u8 gText_VarietyOfEventsImportedWireless[];
+extern const u8 gText_WonderCardsInPossession[];
+extern const u8 gText_ReadNewsThatArrived[];
+extern const u8 gText_ReturnToTitle[];
+
#endif // GUARD_STRINGS_H
diff --git a/include/union_room.h b/include/union_room.h
index 7634e4763..84a7f1f2b 100644
--- a/include/union_room.h
+++ b/include/union_room.h
@@ -1,9 +1,175 @@
#ifndef GUARD_UNION_ROOM_H
#define GUARD_UNION_ROOM_H
-extern bool8 gUnknown_02022C60;
+#include "librfu.h"
+
+// Exported type declarations
+
+struct UnkStruct_Shared
+{
+ struct UnkLinkRfuStruct_02022B14 field_0;
+ u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1];
+};
+
+struct UnkStruct_x1C
+{
+ struct UnkStruct_Shared unk0;
+ u8 unk18:1;
+};
+
+struct UnkStruct_x20
+{
+ struct UnkStruct_Shared unk;
+ u16 field_18;
+ u8 field_1A_0:2;
+ u8 field_1A_1:1;
+ u8 field_1B;
+ u8 field_1D;
+ u8 field_1E;
+ u8 field_1F;
+};
+
+struct UnkStruct_Main0
+{
+ struct UnkStruct_x20 arr[8];
+};
+
+struct UnkStruct_Main4
+{
+ struct UnkStruct_x1C arr[5];
+};
+
+struct UnkStruct_Main8
+{
+ struct UnkStruct_x20 arr[5];
+};
+
+struct UnkStruct_Leader
+{
+ struct UnkStruct_Main0 *field_0;
+ struct UnkStruct_Main4 *field_4;
+ struct UnkStruct_Main8 *field_8;
+ u8 state;
+ u8 textState;
+ u8 field_E;
+ u8 listWindowId;
+ u8 field_10;
+ u8 field_11;
+ u8 listTaskId;
+ u8 field_13;
+ u8 field_14;
+ u8 field_15;
+ u8 field_16;
+ u8 field_17;
+ u8 field_18;
+ u8 field_19;
+ u16 field_1A;
+};
+
+struct UnkStruct_Group
+{
+ struct UnkStruct_Main0 *field_0;
+ struct UnkStruct_Main4 *field_4;
+ u8 state;
+ u8 textState;
+ u8 field_A;
+ u8 listWindowId;
+ u8 field_C;
+ u8 field_D;
+ u8 listTaskId;
+ u8 field_F;
+ u8 field_10;
+ u8 field_11;
+ u8 field_12;
+ u8 field_13;
+ u8 field_14;
+ u8 field_15;
+};
+
+struct UnkStruct_8019BA8
+{
+ u8 field_0;
+ u8 field_1;
+ u8 field_2;
+ u8 field_3;
+};
-void sub_8018798(u8);
-void sub_80186EC(bool8, bool32);
+struct UnkStruct_URoom
+{
+ struct UnkStruct_Main0 *field_0;
+ struct UnkStruct_Main4 *field_4;
+ struct UnkStruct_Main0 *field_8;
+ struct UnkStruct_Main4 *field_C;
+ u16 field_10;
+ u16 field_12;
+ u8 state;
+ u8 stateAfterPrint;
+ u8 textState;
+ u8 field_17;
+ u8 field_18;
+ u8 field_19;
+ u8 field_1A;
+ u8 field_1B;
+ u8 field_1C;
+ u8 field_1D;
+ u8 field_1E;
+ u8 field_1F;
+ u8 field_20;
+ u8 spriteIds[40];
+ u8 field_49;
+ u8 field_4A;
+ u16 field_4C[6];
+ u8 field_58[0x98 - 0x58];
+ u16 field_98;
+ u16 field_9A[3];
+ struct UnkStruct_8019BA8 field_A0[8];
+ u8 field_C0[12][15];
+ u8 field_174[48];
+ u8 field_1A4[200];
+};
+
+union UnkUnion_Main
+{
+ struct UnkStruct_Leader *leader;
+ struct UnkStruct_Group *group;
+ struct UnkStruct_URoom *uRoom;
+};
+
+struct TradeUnkStruct
+{
+ u16 field_0;
+ u16 type;
+ u32 playerPersonality;
+ u8 field_8;
+ u8 field_9;
+ u16 playerSpecies;
+ u16 playerLevel;
+ u16 species;
+ u16 level;
+ u16 field_12;
+ u32 personality;
+};
+
+// Exported RAM declarations
+
+extern u8 gUnknown_02022C2C;
+extern union UnkUnion_Main gUnknown_02022C30;
+extern struct UnkLinkRfuStruct_02022B14Substruct gUnknown_02022C38;
+
+extern u16 gUnknown_02022C3C;
+extern u8 gUnknown_02022C3E;
+
+// Exported ROM declarations
+
+u8 sub_8013F78(void);
+bool32 sub_802C908(u16);
+void nullsub_89(u8 taskId);
+void var_800D_set_xB(void);
+
+bool32 mevent_0814257C(u8 *textState, const u8 *str);
+void sub_8018884(const u8 *src);
+void sub_80186A4(void);
+
+extern bool8 gUnknown_02022C60;
#endif //GUARD_UNION_ROOM_H
diff --git a/ld_script.txt b/ld_script.txt
index 97eb046b9..4f4d0fac5 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -55,7 +55,8 @@ SECTIONS {
src/link.o(.text);
src/link_rfu.o(.text);
src/union_room.o(.text);
- asm/union_room.o(.text);
+ src/mystery_gift.o(.text);
+ asm/mystery_gift.o(.text);
src/mevent2.o(.text);
src/mevent_801BAAC.o(.text);
asm/mevent_server.o(.text);
@@ -409,7 +410,8 @@ SECTIONS {
src/link.o(.rodata);
src/link_rfu.o(.rodata);
src/union_room.o(.rodata);
- data/union_room.o(.rodata);
+ src/mystery_gift.o(.rodata);
+ data/mystery_gift.o(.rodata);
src/mevent2.o(.rodata);
src/mevent_801BAAC.o(.rodata);
data/mevent_server.o(.rodata);
diff --git a/src/cable_club.c b/src/cable_club.c
index b80e76e99..fab187b07 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -17,7 +17,8 @@
#include "menu.h"
#include "overworld.h"
#include "palette.h"
-#include "rom_8011DC0.h"
+#include "union_room.h"
+#include "mevent2.h"
#include "script.h"
#include "script_pokemon_util_80F87D8.h"
#include "sound.h"
diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c
index 6c92b676f..cdb829ac8 100755
--- a/src/ereader_helpers.c
+++ b/src/ereader_helpers.c
@@ -4,7 +4,7 @@
#include "ereader_helpers.h"
#include "link.h"
#include "main.h"
-#include "rom_8011DC0.h"
+#include "union_room.h"
#include "save.h"
#include "sprite.h"
#include "task.h"
diff --git a/src/ereader_screen.c b/src/ereader_screen.c
index b15c1fd0c..10a23e251 100755
--- a/src/ereader_screen.c
+++ b/src/ereader_screen.c
@@ -4,7 +4,7 @@
#include "ereader_helpers.h"
#include "link.h"
#include "main.h"
-#include "rom_8011DC0.h"
+#include "union_room.h"
#include "save.h"
#include "sound.h"
#include "sprite.h"
diff --git a/src/link_rfu.c b/src/link_rfu.c
index 945806459..43d19be03 100644
--- a/src/link_rfu.c
+++ b/src/link_rfu.c
@@ -11,13 +11,13 @@
#include "overworld.h"
#include "random.h"
#include "palette.h"
-#include "rom_8011DC0.h"
+#include "union_room.h"
#include "string_util.h"
#include "task.h"
#include "text.h"
#include "constants/species.h"
#include "save.h"
-#include "rom_8011DC0.h"
+#include "mystery_gift.h"
extern u16 gHeldKeyCodeToSend;
diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c
index 857ca3fde..d69ab0495 100644
--- a/src/mevent_801BAAC.c
+++ b/src/mevent_801BAAC.c
@@ -13,6 +13,7 @@
#include "string_util.h"
#include "link_rfu.h"
#include "mevent.h"
+#include "mystery_gift.h"
struct UnkStruct_8467FB8
{
diff --git a/src/mystery_gift.c b/src/mystery_gift.c
new file mode 100644
index 000000000..da2a3bcc0
--- /dev/null
+++ b/src/mystery_gift.c
@@ -0,0 +1,698 @@
+#include "global.h"
+#include "main.h"
+#include "text.h"
+#include "task.h"
+#include "alloc.h"
+#include "gpu_regs.h"
+#include "scanline_effect.h"
+#include "text_window.h"
+#include "bg.h"
+#include "window.h"
+#include "strings.h"
+#include "text_window.h"
+#include "menu.h"
+#include "palette.h"
+#include "constants/songs.h"
+#include "sound.h"
+#include "mystery_gift.h"
+#include "union_room.h"
+#include "title_screen.h"
+#include "ereader_screen.h"
+#include "international_string_util.h"
+#include "list_menu.h"
+#include "string_util.h"
+
+void bgid_upload_textbox_1(u8 bgId);
+void task_add_00_mystery_gift(void);
+
+EWRAM_DATA u8 gUnknown_02022C58[2] = {};
+
+const u16 gUnkTextboxBorderPal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal");
+const u32 gUnkTextboxBorderGfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz");
+
+const struct BgTemplate gUnknown_082F0598[] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 15,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0x000
+ }, {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 14,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0x000
+ }, {
+ .bg = 2,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 13,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0x000
+ }, {
+ .bg = 3,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 12,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0x000
+ }
+};
+
+const struct WindowTemplate gUnknown_082F05A8[] = {
+ {
+ .bg = 0x00,
+ .tilemapLeft = 0x00,
+ .tilemapTop = 0x00,
+ .width = 0x1e,
+ .height = 0x02,
+ .paletteNum = 0x0c,
+ .baseBlock = 0x0013
+ }, {
+ .bg = 0x00,
+ .tilemapLeft = 0x01,
+ .tilemapTop = 0x0f,
+ .width = 0x1c,
+ .height = 0x04,
+ .paletteNum = 0x0c,
+ .baseBlock = 0x004f
+ }, {
+ .bg = 0x00,
+ .tilemapLeft = 0x00,
+ .tilemapTop = 0x0f,
+ .width = 0x1e,
+ .height = 0x05,
+ .paletteNum = 0x0d,
+ .baseBlock = 0x004f
+ }, {
+ 0xFF
+ }
+};
+
+const struct WindowTemplate gUnknown_082F05C8 = {
+ .bg = 0x00,
+ .tilemapLeft = 0x01,
+ .tilemapTop = 0x0f,
+ .width = 0x1c,
+ .height = 0x04,
+ .paletteNum = 0x0c,
+ .baseBlock = 0x00e5
+};
+
+const struct WindowTemplate gUnknown_082F05D0 = {
+ .bg = 0x00,
+ .tilemapLeft = 0x01,
+ .tilemapTop = 0x0f,
+ .width = 0x14,
+ .height = 0x04,
+ .paletteNum = 0x0c,
+ .baseBlock = 0x00e5
+};
+
+const struct WindowTemplate gUnknown_082F05D8 = {
+ .bg = 0x00,
+ .tilemapLeft = 0x01,
+ .tilemapTop = 0x0f,
+ .width = 0x13,
+ .height = 0x04,
+ .paletteNum = 0x0c,
+ .baseBlock = 0x00e5
+};
+
+const struct WindowTemplate gUnknown_082F05E0 = {
+ .bg = 0x00,
+ .tilemapLeft = 0x08,
+ .tilemapTop = 0x06,
+ .width = 0x0e,
+ .height = 0x06,
+ .paletteNum = 0x0c,
+ .baseBlock = 0x0155
+};
+
+const struct WindowTemplate gUnknown_082F05E8 = {
+ .bg = 0x00,
+ .tilemapLeft = 0x17,
+ .tilemapTop = 0x0f,
+ .width = 0x06,
+ .height = 0x04,
+ .paletteNum = 0x0c,
+ .baseBlock = 0x0155
+};
+
+const struct WindowTemplate gUnknown_082F05F0 = {
+ .bg = 0x00,
+ .tilemapLeft = 0x16,
+ .tilemapTop = 0x0b,
+ .width = 0x07,
+ .height = 0x08,
+ .paletteNum = 0x0c,
+ .baseBlock = 0x0155
+};
+
+const struct WindowTemplate gUnknown_082F05F8 = {
+ .bg = 0x00,
+ .tilemapLeft = 0x16,
+ .tilemapTop = 0x0d,
+ .width = 0x07,
+ .height = 0x06,
+ .paletteNum = 0x0c,
+ .baseBlock = 0x0155
+};
+
+const struct WindowTemplate gUnknown_082F0600 = {
+ .bg = 0x00,
+ .tilemapLeft = 0x16,
+ .tilemapTop = 0x0f,
+ .width = 0x07,
+ .height = 0x04,
+ .paletteNum = 0x0c,
+ .baseBlock = 0x0155
+};
+
+const struct ListMenuItem gUnknown_082F0608[] = {
+ { gText_WonderCards, 0 },
+ { gText_WonderNews, 1 },
+ { gText_Exit3, -2 }
+};
+
+const struct ListMenuItem gUnknown_082F0620[] = {
+ { gText_WirelessCommunication, 0 },
+ { gText_Friend2, 1 },
+ { gText_Cancel2, -2 }
+};
+
+const struct ListMenuTemplate gUnknown_082F0638 = {
+ .items = NULL,
+ .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
+ .itemPrintFunc = NULL,
+ .totalItems = 3,
+ .maxShowed = 3,
+ .windowId = 0,
+ .header_X = 0,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 0,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = 0,
+ .fontId = 1,
+ .cursorKind = 0
+};
+
+const struct ListMenuItem gUnknown_082F0650[] = {
+ { gText_Receive, 0 },
+ { gText_Send, 1 },
+ { gText_Toss, 2 },
+ { gText_Cancel2, -2 }
+};
+
+const struct ListMenuItem gUnknown_082F0670[] = {
+ { gText_Receive, 0 },
+ { gText_Toss, 2 },
+ { gText_Cancel2, -2 }
+};
+
+const struct ListMenuItem gUnknown_082F0688[] = {
+ { gText_Receive, 0 },
+ { gText_Send, 1 },
+ { gText_Cancel2, -2 }
+};
+
+const struct ListMenuItem gUnknown_082F06A0[] = {
+ { gText_Receive, 0 },
+ { gText_Cancel2, -2 }
+};
+
+const struct ListMenuTemplate gUnknown_082F06B0 = {
+ .items = gUnknown_082F0650,
+ .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
+ .itemPrintFunc = NULL,
+ .totalItems = 4,
+ .maxShowed = 4,
+ .windowId = 0,
+ .header_X = 0,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 0,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = 0,
+ .fontId = 1,
+ .cursorKind = 0
+};
+
+const struct ListMenuTemplate gUnknown_082F06C8 = {
+ .items = gUnknown_082F0670,
+ .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
+ .itemPrintFunc = NULL,
+ .totalItems = 3,
+ .maxShowed = 3,
+ .windowId = 0,
+ .header_X = 0,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 0,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = 0,
+ .fontId = 1,
+ .cursorKind = 0
+};
+
+const struct ListMenuTemplate gUnknown_082F06E0 = {
+ .items = gUnknown_082F0688,
+ .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
+ .itemPrintFunc = NULL,
+ .totalItems = 3,
+ .maxShowed = 3,
+ .windowId = 0,
+ .header_X = 0,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 0,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = 0,
+ .fontId = 1,
+ .cursorKind = 0
+};
+
+const struct ListMenuTemplate gUnknown_082F06F8 = {
+ .items = gUnknown_082F06A0,
+ .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
+ .itemPrintFunc = NULL,
+ .totalItems = 2,
+ .maxShowed = 2,
+ .windowId = 0,
+ .header_X = 0,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 0,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = 0,
+ .fontId = 1,
+ .cursorKind = 0
+};
+
+const u8 *const Unref_082F0710[] = {
+ gText_VarietyOfEventsImportedWireless,
+ gText_WonderCardsInPossession,
+ gText_ReadNewsThatArrived,
+ gText_ReturnToTitle
+};
+
+ALIGNED(2) const u8 gUnknown_082F0720[] = { 0, 1, 2 };
+ALIGNED(2) const u8 gUnknown_082F0724[] = { 0, 1, 2 };
+ALIGNED(2) const u8 gUnknown_082F0728[] = { 1, 2, 3 };
+
+void sub_8018424(void)
+{
+ ProcessSpriteCopyRequests();
+ LoadOam();
+ TransferPlttBuffer();
+}
+
+void sub_8018438(void)
+{
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+}
+
+bool32 sub_8018450(s32 arg)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankCallback(NULL);
+ ResetPaletteFade();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ ResetTasks();
+ ScanlineEffect_Stop();
+ ResetBgsAndClearDma3BusyFlags(0);
+
+ InitBgsFromTemplates(0, gUnknown_082F0598, ARRAY_COUNT(gUnknown_082F0598));
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgX(3, 0, 0);
+ ChangeBgY(3, 0, 0);
+
+ SetBgTilemapBuffer(3, Alloc(0x800));
+ SetBgTilemapBuffer(2, Alloc(0x800));
+ SetBgTilemapBuffer(1, Alloc(0x800));
+ SetBgTilemapBuffer(0, Alloc(0x800));
+
+ bgid_upload_textbox_1(3);
+ InitWindows(gUnknown_082F05A8);
+ DeactivateAllTextPrinters();
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ gMain.state++;
+ break;
+ case 1:
+ LoadPalette(gUnkTextboxBorderPal, 0, 0x20);
+ LoadPalette(stdpal_get(2), 0xd0, 0x20);
+ sub_81978B0(0xC0);
+ LoadUserWindowBorderGfx(0, 0xA, 0xE0);
+ LoadUserWindowBorderGfx_(0, 0x1, 0xF0);
+ FillBgTilemapBufferRect(0, 0x000, 0, 0, 32, 32, 0x11);
+ FillBgTilemapBufferRect(1, 0x000, 0, 0, 32, 32, 0x11);
+ FillBgTilemapBufferRect(2, 0x000, 0, 0, 32, 32, 0x11);
+ sub_8018798(3);
+ sub_80186EC(arg, 0);
+ gMain.state++;
+ break;
+ case 2:
+ CopyBgTilemapBufferToVram(3);
+ CopyBgTilemapBufferToVram(2);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(0);
+ gMain.state++;
+ break;
+ case 3:
+ ShowBg(0);
+ ShowBg(3);
+ PlayBGM(MUS_RG_OKURIMONO);
+ SetVBlankCallback(sub_8018424);
+ EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void c2_mystery_gift(void)
+{
+ if (sub_8018450(0))
+ {
+ SetMainCallback2(sub_8018438);
+ gUnknown_02022C60 = FALSE;
+ task_add_00_mystery_gift();
+ }
+ RunTasks();
+}
+
+void sub_801867C(void)
+{
+ if (sub_8018450(1))
+ {
+ SetMainCallback2(sub_8018438);
+ gUnknown_02022C60 = TRUE;
+ sub_81D5014();
+ }
+}
+
+void sub_80186A4(void)
+{
+ gUnknown_02022C60 = FALSE;
+ FreeAllWindowBuffers();
+ Free(GetBgTilemapBuffer(0));
+ Free(GetBgTilemapBuffer(1));
+ Free(GetBgTilemapBuffer(2));
+ Free(GetBgTilemapBuffer(3));
+ SetMainCallback2(CB2_InitTitleScreen);
+}
+
+void sub_80186EC(bool8 isJapanese, bool32 usePickOkCancel)
+{
+ const u8 * header;
+ const u8 * options;
+ FillWindowPixelBuffer(0, 0);
+ if (!isJapanese)
+ {
+ header = gText_MysteryGift;
+ options = !usePickOkCancel ? gText_PickOKExit : gText_PickOKCancel;
+ }
+ else
+ {
+ header = gJPText_MysteryGift;
+ options = gJPText_DecideStop;
+ }
+
+ AddTextPrinterParameterized4(0, 1, 4, 1, 0, 0, gUnknown_082F0720, -1, header);
+ AddTextPrinterParameterized4(0, 0, GetStringRightAlignXOffset(0, options, 0xDE), 1, 0, 0, gUnknown_082F0720, -1, options);
+ CopyWindowToVram(0, 2);
+ PutWindowTilemap(0);
+}
+
+void sub_8018784(u8 windowId)
+{
+ sub_8098858(windowId, 0x01, 0xF);
+}
+
+void sub_8018798(u32 bg)
+{
+ s32 i = 0, j;
+
+ FillBgTilemapBufferRect(bg, 0x003, 0, 0, 32, 2, 0x11);
+
+ for (i = 0; i < 18; i++)
+ {
+ for (j = 0; j < 32; j++)
+ {
+ if ((i & 1) != (j & 1))
+ {
+ FillBgTilemapBufferRect(bg, 1, j, i + 2, 1, 1, 0x11);
+ }
+ else
+ {
+ FillBgTilemapBufferRect(bg, 2, j, i + 2, 1, 1, 0x11);
+ }
+ }
+ }
+}
+
+void sub_8018838(bool32 arg)
+{
+ switch (arg)
+ {
+ case 0:
+ FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0x11);
+ break;
+ case 1:
+ FillBgTilemapBufferRect(0, 0, 0, 2, 32, 30, 0x11);
+ break;
+ }
+ CopyBgTilemapBufferToVram(0);
+}
+
+void sub_8018884(const u8 *str)
+{
+ StringExpandPlaceholders(gStringVar4, str);
+ FillWindowPixelBuffer(1, 0x11);
+ AddTextPrinterParameterized4(1, 1, 0, 1, 0, 0, gUnknown_082F0728, 0, gStringVar4);
+ sub_8098858(1, 0x001, 0xF);
+ PutWindowTilemap(1);
+ CopyWindowToVram(1, 3);
+}
+
+void sub_80188DC(void)
+{
+ rbox_fill_rectangle(1);
+ ClearWindowTilemap(1);
+ CopyWindowToVram(1, 1);
+}
+
+bool32 mevent_0814257C(u8 *textState, const u8 *str)
+{
+ switch (*textState)
+ {
+ case 0:
+ sub_8018884(str);
+ goto inc;
+ case 1:
+ DrawDownArrow(1, 0xD0, 0x14, 1, FALSE, &gUnknown_02022C58[0], &gUnknown_02022C58[1]);
+ if (({gMain.newKeys & (A_BUTTON | B_BUTTON);}))
+ {
+ inc:
+ (*textState)++;
+ }
+ break;
+ case 2:
+ DrawDownArrow(1, 0xD0, 0x14, 1, TRUE, &gUnknown_02022C58[0], &gUnknown_02022C58[1]);
+ *textState = 0;
+ sub_80188DC();
+ return TRUE;
+ case 0xFF:
+ *textState = 2;
+ break;
+ }
+ return FALSE;
+}
+
+void sub_801898C(void)
+{
+ DrawDownArrow(1, 0xD0, 0x14, 1, FALSE, &gUnknown_02022C58[0], &gUnknown_02022C58[1]);
+}
+
+void sub_80189B4(void)
+{
+ DrawDownArrow(1, 0xD0, 0x14, 1, TRUE, &gUnknown_02022C58[0], &gUnknown_02022C58[1]);
+}
+
+bool32 sub_80189DC(u8 * textState)
+{
+ switch (*textState)
+ {
+ case 0:
+ sub_801898C();
+ if (({gMain.newKeys & (A_BUTTON | B_BUTTON);}))
+ {
+ (*textState)++;
+ }
+ break;
+ case 1:
+ sub_80189B4();
+ *textState = 0;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 sub_8018A1C(u8 * counter, const u8 * str)
+{
+ if (*counter == 0)
+ {
+ sub_8018884(str);
+ }
+ if (++(*counter) > 120)
+ {
+ *counter = 0;
+ sub_80188DC();
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+s32 sub_8018A50(u8 * unused0, u8 * unused1, bool8 r2)
+{
+ struct ListMenuTemplate listMenuTemplate = gUnknown_082F0638;
+ struct WindowTemplate windowTemplate = gUnknown_082F05E0;
+ s32 r3;
+ s32 r4;
+
+ if (r2 == FALSE)
+ {
+ listMenuTemplate.items = gUnknown_082F0608;
+ }
+ else
+ {
+ listMenuTemplate.items = gUnknown_082F0620;
+ }
+ r3 = sub_81DB41C(&listMenuTemplate);
+ if (r3 & 1)
+ {
+ r3++;
+ }
+ windowTemplate.width = r3;
+ if (r3 < 30)
+ {
+ windowTemplate.tilemapLeft = (30 - r3) / 2;
+ }
+ else
+ {
+ windowTemplate.tilemapLeft = 0;
+ }
+ r4 = DoMysteryGiftListMenu(&windowTemplate, &listMenuTemplate, 1, 0x00A, 0xE0);
+ if (r4 != -1)
+ {
+ ClearWindowTilemap(2);
+ CopyWindowToVram(2, 1);
+ }
+ return r4;
+}
+
+s32 sub_8018B08(u8 * textState, u16 * windowId, bool8 r6, const u8 * str)
+{
+ struct WindowTemplate windowTemplate;
+ s8 input;
+
+ switch (*textState)
+ {
+ case 0:
+ StringExpandPlaceholders(gStringVar4, str);
+ if (r6 == 0)
+ {
+ *windowId = AddWindow(&gUnknown_082F05C8);
+ }
+ else
+ {
+ *windowId = AddWindow(&gUnknown_082F05D0);
+ }
+ FillWindowPixelBuffer(*windowId, 0x11);
+ AddTextPrinterParameterized4(*windowId, 1, 0, 1, 0, 0, gUnknown_082F0728, 0, gStringVar4);
+ sub_8098858(*windowId, 0x001, 0x0F);
+ CopyWindowToVram(*windowId, 2);
+ PutWindowTilemap(*windowId);
+ (*textState)++;
+ break;
+ case 1:
+ windowTemplate = gUnknown_082F05E8;
+ if (r6 == 0)
+ {
+ windowTemplate.tilemapTop = 9;
+ }
+ else
+ {
+ windowTemplate.tilemapTop = 15;
+ }
+ CreateYesNoMenu(&windowTemplate, 10, 14, 0);
+ (*textState)++;
+ break;
+ case 2:
+ input = Menu_ProcessInputNoWrapClearOnChoose();
+ if (input == -1 || input == 0 || input == 1)
+ {
+ *textState = 0;
+ rbox_fill_rectangle(*windowId);
+ ClearWindowTilemap(*windowId);
+ CopyWindowToVram(*windowId, 1);
+ RemoveWindow(*windowId);
+ return input;
+ }
+ break;
+ case 0xFF:
+ *textState = 0;
+ rbox_fill_rectangle(*windowId);
+ ClearWindowTilemap(*windowId);
+ CopyWindowToVram(*windowId, 1);
+ RemoveWindow(*windowId);
+ return -1;
+ }
+
+ return -2;
+}
diff --git a/src/party_menu.c b/src/party_menu.c
index 7db24b6ca..6233558ff 100755
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -49,7 +49,7 @@
#include "pokemon_summary_screen.h"
#include "region_map.h"
#include "reshow_battle_screen.h"
-#include "rom_8011DC0.h"
+#include "union_room.h"
#include "scanline_effect.h"
#include "script.h"
#include "sound.h"
diff --git a/src/start_menu.c b/src/start_menu.c
index 4822c12e6..f573f9bdf 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -44,6 +44,7 @@
#include "window.h"
#include "constants/songs.h"
#include "rom_8011DC0.h"
+#include "union_room.h"
// Menu actions
enum
diff --git a/src/trade.c b/src/trade.c
index df8f493f1..34f49060f 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -19,6 +19,8 @@
#include "load_save.h"
#include "mail.h"
#include "main.h"
+#include "mevent2.h"
+#include "mystery_gift.h"
#include "overworld.h"
#include "palette.h"
#include "party_menu.h"
@@ -39,6 +41,7 @@
#include "text_window.h"
#include "trainer_card.h"
#include "trade.h"
+#include "union_room.h"
#include "util.h"
#include "window.h"
#include "constants/easy_chat.h"
diff --git a/src/union_room.c b/src/union_room.c
index 5050b04f1..df0137379 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -40,7 +40,7 @@
#include "strings.h"
#include "mevent.h"
#include "dynamic_placeholder_text_util.h"
-#include "rom_8011DC0.h"
+#include "union_room.h"
#include "easy_chat.h"
#include "event_obj_lock.h"
#include "union_room_chat.h"
@@ -102,8 +102,6 @@ void sub_802493C(u8 monId, MainCallback callback);
void sub_80149D8(void);
u16 sub_8019930(void);
void sub_8018784(u8 windowId);
-void sub_8018884(const u8 *src);
-bool32 mevent_0814257C(u8 *textState, const u8 *str);
s8 sub_8018B08(u8 *textState, u8 *arg1, u8 arg2, const u8 *str);
bool32 sub_8016F1C(struct UnkLinkRfuStruct_02022B14 *arg0, s16 arg1);
u8 sub_8016DF0(struct UnkStruct_Main4 *arg0, struct UnkStruct_Main4 *arg1, u32 arg2);
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 8aea7124c..f2efe6a69 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -7,10 +7,9 @@
.include "src/link.o"
.include "src/link_rfu.o"
.include "src/union_room.o"
+ .include "src/mystery_gift.o"
-gUnknown_02022C58: @ 2022C58
- .space 0x8
-
+ .align 3
gUnknown_02022C60: @ 2022C60
.space 0x4