summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDizzyEggg <jajkodizzy@wp.pl>2018-06-04 23:32:28 +0200
committerDizzyEggg <jajkodizzy@wp.pl>2018-06-04 23:32:28 +0200
commit7b72cfdc6cd380326deb3cbed6802f5db11c31d4 (patch)
tree702f5ecf3f621815b00a077ff0f3adad01301760
parentdbb9cdd424431f597366020da26a972c1db9cabb (diff)
through sub_80156C8
-rw-r--r--asm/rom_8011DC0.s837
-rw-r--r--src/rom_8011DC0.c435
2 files changed, 427 insertions, 845 deletions
diff --git a/asm/rom_8011DC0.s b/asm/rom_8011DC0.s
index bd5131e2f..b450d811d 100644
--- a/asm/rom_8011DC0.s
+++ b/asm/rom_8011DC0.s
@@ -4,843 +4,8 @@
.syntax unified
.text
-
-
-
- thumb_func_start sub_8014F48
-sub_8014F48: @ 8014F48
- push {r4-r7,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, =gUnknown_02022C30
- ldr r7, [r0]
- ldrb r0, [r7, 0x8]
- cmp r0, 0xC
- bls _08014F5C
- b _080152A0
-_08014F5C:
- lsls r0, 2
- ldr r1, =_08014F70
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08014F70:
- .4byte _08014FA4
- .4byte _08014FD8
- .4byte _08014FE8
- .4byte _080150B8
- .4byte _08015180
- .4byte _080151A4
- .4byte _08015204
- .4byte _08015260
- .4byte _08015204
- .4byte _0801523A
- .4byte _08015204
- .4byte _08015284
- .4byte _08015290
-_08014FA4:
- ldrb r0, [r7, 0x12]
- adds r0, 0x15
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- movs r2, 0
- bl sub_8010F84
- bl sub_800B488
- bl OpenLink
- bl sub_8011C5C
- movs r0, 0x70
- bl AllocZeroed
- str r0, [r7, 0x4]
- movs r0, 0x80
- lsls r0, 2
- bl AllocZeroed
- str r0, [r7]
- movs r0, 0x1
- strb r0, [r7, 0x8]
- b _080152A0
-_08014FD8:
- ldr r0, =gUnknown_082EF7F8
- bl sub_8018884
- movs r0, 0x2
- strb r0, [r7, 0x8]
- b _080152A0
- .pool
-_08014FE8:
- ldr r0, [r7, 0x4]
- movs r1, 0x4
- bl sub_80175EC
- ldr r0, [r7]
- movs r1, 0x10
- bl sub_8017580
- ldr r0, [r7, 0x4]
- ldrb r1, [r7, 0x12]
- adds r1, 0x7
- bl sub_8016FC0
- movs r6, 0
- strb r0, [r7, 0x11]
- ldr r0, =gUnknown_082F0174
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- bl sub_8019930
- lsls r0, 16
- ldr r2, =0x0000ffff
- ldr r1, [sp, 0x4]
- ands r1, r2
- orrs r1, r0
- ldr r5, =0xffff00ff
- ands r1, r5
- movs r4, 0xC0
- lsls r4, 4
- orrs r1, r4
- str r1, [sp, 0x4]
- mov r0, sp
- bl AddWindow
- strb r0, [r7, 0xB]
- ldr r0, =gUnknown_082F017C
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp, 0x8]
- str r1, [sp, 0xC]
- add r0, sp, 0x8
- ldr r1, [r0, 0x4]
- ands r1, r5
- orrs r1, r4
- str r1, [r0, 0x4]
- bl AddWindow
- strb r0, [r7, 0xD]
- ldrb r0, [r7, 0xB]
- bl sub_8018784
- ldr r0, =gMultiuseListMenuTemplate
- adds r2, r0, 0
- ldr r1, =gUnknown_082F0204
- ldm r1!, {r3-r5}
- stm r2!, {r3-r5}
- ldm r1!, {r3-r5}
- stm r2!, {r3-r5}
- ldrb r1, [r7, 0xB]
- strb r1, [r0, 0x10]
- movs r1, 0
- movs r2, 0
- bl ListMenuInit
- strb r0, [r7, 0xE]
- ldrb r0, [r7, 0xD]
- bl sub_8018784
- ldrb r0, [r7, 0xD]
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldrb r0, [r7, 0xD]
- bl PutWindowTilemap
- ldrb r0, [r7, 0xD]
- bl sub_80125BC
- ldrb r0, [r7, 0xD]
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- strb r6, [r7, 0xF]
- movs r0, 0x3
- strb r0, [r7, 0x8]
- b _080152A0
- .pool
-_080150B8:
- bl sub_8013E44
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _080150D6
- cmp r2, 0x1
- bne _080150CE
- movs r0, 0x2
- bl PlaySE
-_080150CE:
- ldrb r0, [r7, 0xE]
- bl sub_81AE70C
- b _080152A0
-_080150D6:
- ldrb r0, [r7, 0xE]
- bl ListMenuHandleInputGetItemId
- adds r2, r0, 0
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08015168
- movs r0, 0x1
- negs r0, r0
- cmp r2, r0
- beq _08015168
- ldr r0, [r7]
- 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 _08015160
- lsrs r0, r1, 7
- cmp r0, 0
- bne _08015160
- strb r2, [r7, 0xF]
- bl sub_800E0E8
- movs r0, 0
- movs r1, 0
- bl CreateWirelessStatusIndicatorSprite
- ldrb r0, [r7, 0xE]
- bl sub_81AE70C
- ldr r0, =gStringVar1
- ldrb r2, [r7, 0xF]
- lsls r2, 5
- ldr r1, [r7]
- adds r1, r2
- bl sub_8018404
- ldrb r1, [r7, 0xF]
- lsls r1, 5
- ldr r0, [r7]
- adds r0, r1
- adds r4, r0, 0
- adds r4, 0x10
- adds r0, 0x2
- bl ReadAsU16
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_8011FC8
- movs r0, 0x6E
- bl PlaySE
- movs r0, 0x4
- strb r0, [r7, 0x8]
- b _080152A0
- .pool
-_08015160:
- movs r0, 0x7
- bl PlaySE
- b _080152A0
-_08015168:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _08015176
- b _080152A0
-_08015176:
- movs r0, 0x6
- strb r0, [r7, 0x8]
- b _080152A0
- .pool
-_08015180:
- ldr r0, =gUnknown_082EFC3C
- bl sub_8018884
- ldr r0, =gStringVar1
- ldrb r2, [r7, 0xF]
- lsls r2, 5
- ldr r1, [r7]
- adds r1, r2
- bl sub_8018404
- movs r0, 0x5
- strb r0, [r7, 0x8]
- b _080152A0
- .pool
-_080151A4:
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080151C2
- ldr r2, =gUnknown_02022C2C
- ldr r1, [r7]
- ldrb r0, [r7, 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, [r7, 0x8]
-_080151C2:
- bl sub_8011A74
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x5
- beq _080151EE
- cmp r0, 0x5
- bgt _080151E4
- cmp r0, 0x2
- bgt _080152A0
- cmp r0, 0x1
- blt _080152A0
- b _080151E8
- .pool
-_080151E4:
- cmp r0, 0x6
- bne _080152A0
-_080151E8:
- movs r0, 0x8
- strb r0, [r7, 0x8]
- b _080152A0
-_080151EE:
- ldr r0, =gUnknown_082EDDF4
- bl sub_8018884
- movs r0, 0
- movs r1, 0
- bl sub_8011A64
- b _080152A0
- .pool
-_08015204:
- ldrb r0, [r7, 0xE]
- movs r1, 0
- movs r2, 0
- bl DestroyListMenuTask
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- ldrb r0, [r7, 0xD]
- bl RemoveWindow
- ldrb r0, [r7, 0xB]
- bl RemoveWindow
- ldrb r0, [r7, 0x11]
- bl DestroyTask
- ldr r0, [r7]
- bl Free
- ldr r0, [r7, 0x4]
- bl Free
- ldrb r0, [r7, 0x8]
- adds r0, 0x1
- strb r0, [r7, 0x8]
- b _080152A0
-_0801523A:
- adds r5, r7, 0
- adds r5, 0x9
- ldr r4, =gUnknown_082EDF80
- bl sub_8011A74
- lsls r0, 24
- lsrs r0, 22
- adds r0, r4
- ldr r1, [r0]
- adds r0, r5, 0
- bl mevent_0814257C
- cmp r0, 0
- beq _080152A0
- bl sub_800E084
- b _0801526A
- .pool
-_08015260:
- bl sub_800E084
- ldr r0, =gText_PleaseStartOver
- bl sub_8018884
-_0801526A:
- adds r0, r6, 0
- bl DestroyTask
- bl sub_800EDD4
- ldr r1, =gSpecialVar_Result
- movs r0, 0x5
- strh r0, [r1]
- b _080152A0
- .pool
-_08015284:
- ldrb r0, [r7, 0x8]
- adds r0, 0x1
- strb r0, [r7, 0x8]
- bl sub_800ADF8
- b _080152A0
-_08015290:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- beq _080152A0
- adds r0, r6, 0
- bl DestroyTask
-_080152A0:
- add sp, 0x10
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8014F48
-
- thumb_func_start sub_80152A8
-sub_80152A8: @ 80152A8
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =task00_081182DC
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_02022C30
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks + 0x8
- adds r1, r0
- str r1, [r2]
- ldr r0, =gUnknown_03000DA4
- str r1, [r0]
- movs r2, 0
- strb r2, [r1, 0x8]
- strb r2, [r1, 0x9]
- subs r4, 0x15
- strb r4, [r1, 0x12]
- ldr r0, =gSpecialVar_Result
- strh r2, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80152A8
- thumb_func_start task00_081182DC
-task00_081182DC: @ 80152F4
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gUnknown_02022C30
- ldr r5, [r0]
- ldrb r0, [r5, 0x8]
- cmp r0, 0xE
- bls _08015308
- b _08015604
-_08015308:
- lsls r0, 2
- ldr r1, =_0801531C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0801531C:
- .4byte _08015358
- .4byte _08015386
- .4byte _08015398
- .4byte _08015420
- .4byte _080154E0
- .4byte _08015504
- .4byte _08015564
- .4byte _080155A8
- .4byte _08015564
- .4byte _0801559A
- .4byte _08015564
- .4byte _080155B4
- .4byte _08015564
- .4byte _080155E8
- .4byte _080155F4
-_08015358:
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl sub_8010F84
- bl sub_800B488
- bl OpenLink
- bl sub_8011C5C
- 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 _08015604
-_08015386:
- ldr r0, =gUnknown_082EFBC8
- bl sub_8018884
- movs r0, 0x2
- strb r0, [r5, 0x8]
- b _08015604
- .pool
-_08015398:
- ldr r0, [r5, 0x4]
- movs r1, 0x4
- bl sub_80175EC
- ldr r0, [r5]
- movs r1, 0x10
- bl sub_8017580
- ldr r0, [r5, 0x4]
- ldrb r1, [r5, 0x12]
- adds r1, 0x7
- bl sub_8016FF0
- strb r0, [r5, 0x11]
- ldrb r0, [r5, 0x13]
- cmp r0, 0
- beq _08015404
- ldr r0, =gUnknown_082F0174
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- bl sub_8019930
- lsls r0, 16
- ldr r2, =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 sub_8018784
- ldr r0, =gMultiuseListMenuTemplate
- adds r2, r0, 0
- ldr r1, =gUnknown_082F0204
- 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
-_08015404:
- movs r0, 0
- strb r0, [r5, 0xF]
- movs r0, 0x3
- strb r0, [r5, 0x8]
- b _08015604
- .pool
-_08015420:
- bl sub_8013E44
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08015446
- cmp r0, 0x1
- bne _08015436
- movs r0, 0x2
- bl PlaySE
-_08015436:
- ldrb r0, [r5, 0x13]
- cmp r0, 0
- bne _0801543E
- b _08015604
-_0801543E:
- ldrb r0, [r5, 0xE]
- bl sub_81AE70C
- b _08015604
-_08015446:
- ldrb r0, [r5, 0x13]
- cmp r0, 0
- beq _08015452
- ldrb r0, [r5, 0xE]
- bl ListMenuHandleInputGetItemId
-_08015452:
- ldrb r0, [r5, 0x14]
- cmp r0, 0x78
- bls _080154C0
- ldr r2, [r5]
- ldrb r1, [r2, 0x1A]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0x1
- bne _080154D4
- ldrb r1, [r2, 0xA]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080154D4
- ldrb r1, [r5, 0x12]
- adds r1, 0x7
- adds r0, r2, 0
- bl sub_8016F1C
- cmp r0, 0
- beq _080154B4
- strb r4, [r5, 0xF]
- strb r4, [r5, 0x14]
- bl sub_800E0E8
- movs r0, 0
- movs r1, 0
- bl CreateWirelessStatusIndicatorSprite
- ldr r0, [r5]
- adds r4, r0, 0
- adds r4, 0x10
- adds r0, 0x2
- bl ReadAsU16
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_8011FC8
- movs r0, 0x6E
- bl PlaySE
- movs r0, 0x4
- strb r0, [r5, 0x8]
- b _080154D4
-_080154B4:
- movs r0, 0x16
- bl PlaySE
- movs r0, 0xA
- strb r0, [r5, 0x8]
- b _080154D4
-_080154C0:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080154D4
- movs r1, 0
- movs r0, 0x6
- strb r0, [r5, 0x8]
- strb r1, [r5, 0x14]
-_080154D4:
- ldrb r0, [r5, 0x14]
- adds r0, 0x1
- strb r0, [r5, 0x14]
- b _08015604
- .pool
-_080154E0:
- ldr r0, =gUnknown_082EFC90
- bl sub_8018884
- ldr r0, =gStringVar1
- ldrb r2, [r5, 0xF]
- lsls r2, 5
- ldr r1, [r5]
- adds r1, r2
- bl sub_8018404
- movs r0, 0x5
- strb r0, [r5, 0x8]
- b _08015604
- .pool
-_08015504:
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _08015522
- ldr r2, =gUnknown_02022C2C
- 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]
-_08015522:
- bl sub_8011A74
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x5
- beq _0801554E
- cmp r0, 0x5
- bgt _08015544
- cmp r0, 0x2
- bgt _08015604
- cmp r0, 0x1
- blt _08015604
- b _08015548
- .pool
-_08015544:
- cmp r0, 0x6
- bne _08015604
-_08015548:
- movs r0, 0x8
- strb r0, [r5, 0x8]
- b _08015604
-_0801554E:
- ldr r0, =gUnknown_082EDEC4
- bl sub_8018884
- movs r0, 0
- movs r1, 0
- bl sub_8011A64
- b _08015604
- .pool
-_08015564:
- ldrb r0, [r5, 0x13]
- cmp r0, 0
- beq _08015580
- ldrb r0, [r5, 0xE]
- movs r1, 0
- movs r2, 0
- bl DestroyListMenuTask
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- ldrb r0, [r5, 0xB]
- bl RemoveWindow
-_08015580:
- 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 _08015604
-_0801559A:
- adds r0, r5, 0
- adds r0, 0x9
- ldr r1, =gUnknown_082EDF04
- b _080155C2
- .pool
-_080155A8:
- adds r0, r5, 0
- adds r0, 0x9
- ldr r1, =gText_WirelessSearchCanceled
- b _080155C2
- .pool
-_080155B4:
- adds r0, r5, 0
- adds r0, 0x9
- ldr r2, =gUnknown_082EFD58
- ldrb r1, [r5, 0x12]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
-_080155C2:
- bl mevent_0814257C
- cmp r0, 0
- beq _08015604
- bl sub_800E084
- adds r0, r4, 0
- bl DestroyTask
- bl sub_800EDD4
- ldr r1, =gSpecialVar_Result
- movs r0, 0x5
- strh r0, [r1]
- b _08015604
- .pool
-_080155E8:
- ldrb r0, [r5, 0x8]
- adds r0, 0x1
- strb r0, [r5, 0x8]
- bl sub_800ADF8
- b _08015604
-_080155F4:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- beq _08015604
- adds r0, r4, 0
- bl DestroyTask
-_08015604:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end task00_081182DC
-
- thumb_func_start UnionRoomSpecial
-UnionRoomSpecial: @ 801560C
- push {r4,lr}
- bl sub_8010F60
- ldr r0, =sub_80156E0
- movs r1, 0xA
- bl CreateTask
- ldr r4, =gUnknown_02022C30
- movs r0, 0x9B
- lsls r0, 2
- bl AllocZeroed
- str r0, [r4]
- ldr r1, =gUnknown_03000DA8
- str r0, [r1]
- movs r1, 0
- strb r1, [r0, 0x14]
- strb r1, [r0, 0x16]
- strh r1, [r0, 0x10]
- strh r1, [r0, 0x12]
- ldr r0, =gSpecialVar_Result
- strh r1, [r0]
- movs r0, 0xD0
- movs r1, 0x1
- bl sub_819A2BC
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end UnionRoomSpecial
-
- thumb_func_start ReadAsU16
-ReadAsU16: @ 8015658
- ldrb r1, [r0, 0x1]
- lsls r1, 8
- ldrb r0, [r0]
- orrs r0, r1
- bx lr
- thumb_func_end ReadAsU16
-
- thumb_func_start sub_8015664
-sub_8015664: @ 8015664
- push {lr}
- adds r3, r1, 0
- ldr r1, =gUnknown_02022C30
- ldr r2, [r1]
- movs r1, 0x8
- strb r1, [r2, 0x14]
- strb r0, [r2, 0x15]
- ldr r0, =gStringVar4
- cmp r3, r0
- beq _0801567E
- adds r1, r3, 0
- bl StringExpandPlaceholders
-_0801567E:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8015664
-
- thumb_func_start sub_801568C
-sub_801568C: @ 801568C
- push {lr}
- adds r2, r0, 0
- ldr r0, =gUnknown_02022C30
- ldr r1, [r0]
- movs r0, 0x1A
- strb r0, [r1, 0x14]
- ldr r0, =gStringVar4
- cmp r2, r0
- beq _080156A4
- adds r1, r2, 0
- bl StringExpandPlaceholders
-_080156A4:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_801568C
-
- thumb_func_start sub_80156B0
-sub_80156B0: @ 80156B0
- push {lr}
- ldr r3, =0x0201ff00
- ldr r1, [r0]
- movs r2, 0x80
- lsls r2, 1
- adds r0, r3, 0
- bl memcpy
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80156B0
-
- thumb_func_start sub_80156C8
-sub_80156C8: @ 80156C8
- push {lr}
- ldr r0, [r0]
- ldr r1, =0x0201ff00
- movs r2, 0x80
- lsls r2, 1
- bl memcpy
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80156C8
+
thumb_func_start sub_80156E0
sub_80156E0: @ 80156E0
diff --git a/src/rom_8011DC0.c b/src/rom_8011DC0.c
index dd162c4a0..d3902f208 100644
--- a/src/rom_8011DC0.c
+++ b/src/rom_8011DC0.c
@@ -26,6 +26,7 @@
#include "party_menu.h"
#include "field_weather.h"
#include "palette.h"
+#include "decompress.h"
extern void HealPlayerParty(void);
@@ -100,7 +101,7 @@ struct UnkStruct_Group
u8 state;
u8 textState;
u8 field_A;
- u8 field_B;
+ u8 listWindowId;
u8 field_C;
u8 field_D;
u8 listTaskId;
@@ -113,10 +114,24 @@ struct UnkStruct_Group
u8 field_15;
};
+struct UnkStruct_URoom
+{
+ void *field_0;
+ void *field_4;
+ void *field_8;
+ void *field_C;
+ u16 field_10;
+ u16 field_12;
+ u8 field_14;
+ u8 field_15;
+ u8 field_16;
+};
+
union UnkUnion_Main
{
struct UnkStruct_Leader *leader;
struct UnkStruct_Group *group;
+ struct UnkStruct_URoom *uRoom;
};
struct TradeUnkStruct
@@ -146,7 +161,7 @@ extern u8 gUnknown_03005DB4;
// IWRAM vars
IWRAM_DATA struct UnkStruct_Leader *gUnknown_03000DA0;
IWRAM_DATA struct UnkStruct_Group *gUnknown_03000DA4;
-IWRAM_DATA void *gUnknown_03000DA8;
+IWRAM_DATA struct UnkStruct_URoom *gUnknown_03000DA8;
IWRAM_DATA void *gUnknown_03000DAC;
IWRAM_DATA bool32 gUnknown_03000DB0;
@@ -158,9 +173,12 @@ void sub_80134E8(u8 taskId);
void sub_8013C7C(u8 taskId);
void sub_8014A40(u8 taskId);
void sub_8014F48(u8 taskId);
+void sub_80152F4(u8 taskId);
+void sub_80156E0(u8 taskId);
void sub_80175EC(struct UnkStruct_Main4 *arg0, u8 count);
void sub_8017580(struct UnkStruct_Main0 *arg0, u8 count);
u8 sub_8016FC0(struct UnkStruct_Main4 *arg0, u32 arg1);
+u8 sub_8016FF0(struct UnkStruct_Main4 *arg0, u32 arg1);
bool8 PrintOnTextbox(u8 *textState, const u8 *str);
bool8 sub_801320C(struct UnkStruct_Leader *data, u32 arg1, u32 arg2);
u8 sub_8013398(struct UnkStruct_Main0 *arg0);
@@ -194,6 +212,7 @@ 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 UnkStruct_x20 *arg0, s16 arg1);
// const rom data
extern const u8 *const gUnknown_082EDB60[][5];
@@ -220,6 +239,12 @@ extern const u8 gUnknown_082EDE48[];
extern const u8 gUnknown_082EDE64[];
extern const u8 gUnknown_082EDF40[];
extern const u8 gText_PleaseStartOver[];
+extern const u8 gUnknown_082EF7F8[];
+extern const u8 gUnknown_082EFBC8[];
+extern const u8 gUnknown_082EFC90[];
+extern const u8 gUnknown_082EDEC4[];
+extern const u8 gUnknown_082EDF04[];
+extern const u8 gText_WirelessSearchCanceled[];
extern const u32 gUnknown_082F00C4[];
@@ -240,6 +265,8 @@ extern const u8 *const gUnknown_082EDDC4[];
extern const u8 *const gUnknown_082EFB70[];
extern const u8 *const gUnknown_082EDD50[];
extern const u8 *const gUnknown_082EDE9C[];
+extern const u8 *const gUnknown_082EDF80[];
+extern const u8 *const gUnknown_082EFD58[];
extern const struct UnkStruct_Shared gUnknown_082F045C[];
@@ -936,7 +963,7 @@ void sub_80134E8(u8 taskId)
sub_8017580(data->field_0, 16);
data->field_11 = sub_8016FC0(data->field_4, gSpecialVar_0x8004);
data->field_C = AddWindow(&gUnknown_082F00BC);
- data->field_B = AddWindow(&gUnknown_082F0174);
+ data->listWindowId = AddWindow(&gUnknown_082F0174);
data->field_D = AddWindow(&gUnknown_082F017C);
FillWindowPixelBuffer(data->field_C, 0x22);
@@ -944,9 +971,9 @@ void sub_80134E8(u8 taskId)
PutWindowTilemap(data->field_C);
CopyWindowToVram(data->field_C, 2);
- NewMenuHelpers_DrawStdWindowFrame(data->field_B, FALSE);
+ NewMenuHelpers_DrawStdWindowFrame(data->listWindowId, FALSE);
gMultiuseListMenuTemplate = gUnknown_082F0204;
- gMultiuseListMenuTemplate.windowId = data->field_B;
+ gMultiuseListMenuTemplate.windowId = data->listWindowId;
data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
NewMenuHelpers_DrawStdWindowFrame(data->field_D, FALSE);
@@ -974,7 +1001,7 @@ void sub_80134E8(u8 taskId)
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 == 0)
+ if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.field_0.unk_0a_7)
{
u32 var = sub_8013B8C(data, id);
if (var == 0)
@@ -1121,10 +1148,10 @@ void sub_80134E8(u8 taskId)
sub_819746C(data->field_D, FALSE);
DestroyListMenuTask(data->listTaskId, 0, 0);
ClearWindowTilemap(data->field_C);
- sub_819746C(data->field_B, FALSE);
+ sub_819746C(data->listWindowId, FALSE);
CopyBgTilemapBufferToVram(0);
RemoveWindow(data->field_D);
- RemoveWindow(data->field_B);
+ RemoveWindow(data->listWindowId);
RemoveWindow(data->field_C);
DestroyTask(data->field_11);
Free(data->field_0);
@@ -1286,7 +1313,7 @@ u8 sub_8013DBC(struct UnkStruct_Group *data, u32 id)
{
if (data->field_0->arr[id].field_1A_0 == 1)
{
- if (data->field_0->arr[id].unk.field_0.unk_0a_7 != 0)
+ if (data->field_0->arr[id].unk.field_0.unk_0a_7)
return 3;
else if (data->field_0->arr[id].field_1A_1 != 0)
return 1;
@@ -1984,3 +2011,393 @@ void sub_8014EFC(u32 arg0)
dataPtr->field_12 = arg0 - 21;
gSpecialVar_Result = 0;
}
+
+void sub_8014F48(u8 taskId)
+{
+ s32 id;
+ struct WindowTemplate winTemplate1, winTemplate2;
+ struct UnkStruct_Group *data = gUnknown_02022C30.group;
+
+ switch (data->state)
+ {
+ case 0:
+ sub_8010F84(data->field_12 + 21, 0, 0);
+ sub_800B488();
+ OpenLink();
+ sub_8011C5C();
+ data->field_4 = AllocZeroed(0x70);
+ data->field_0 = AllocZeroed(0x200);
+ data->state = 1;
+ break;
+ case 1:
+ sub_8018884(gUnknown_082EF7F8);
+ data->state = 2;
+ break;
+ case 2:
+ sub_80175EC(data->field_4, 4);
+ sub_8017580(data->field_0, 16);
+ data->field_11 = sub_8016FC0(data->field_4, data->field_12 + 7);
+
+ winTemplate1 = gUnknown_082F0174;
+ winTemplate1.baseBlock = sub_8019930();
+ winTemplate1.paletteNum = 0xC;
+ data->listWindowId = AddWindow(&winTemplate1);
+
+ winTemplate2 = gUnknown_082F017C;
+ winTemplate2.paletteNum = 0xC;
+ data->field_D = AddWindow(&winTemplate2);
+
+ sub_8018784(data->listWindowId);
+ gMultiuseListMenuTemplate = gUnknown_082F0204;
+ gMultiuseListMenuTemplate.windowId = data->listWindowId;
+ data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+
+ sub_8018784(data->field_D);
+ FillWindowPixelBuffer(data->field_D, 0x11);
+ PutWindowTilemap(data->field_D);
+ sub_80125BC(data->field_D);
+ CopyWindowToVram(data->field_D, 2);
+
+ CopyBgTilemapBufferToVram(0);
+ data->field_F = 0;
+ data->state = 3;
+ break;
+ case 3:
+ id = sub_8013E44();
+ switch (id)
+ {
+ case 1:
+ PlaySE(SE_PC_LOGIN);
+ default:
+ sub_81AE70C(data->listTaskId);
+ break;
+ case 0:
+ id = ListMenuHandleInputGetItemId(data->listTaskId);
+ if (gMain.newKeys & 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;
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ sub_81AE70C(data->listTaskId);
+ sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]);
+ sub_8011FC8(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.field_0.playerTrainerId));
+ PlaySE(SE_PN_ON);
+ data->state = 4;
+ }
+ else
+ {
+ PlaySE(SE_WALL_HIT);
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ data->state = 6;
+ }
+ break;
+ }
+ break;
+ case 4:
+ sub_8018884(gUnknown_082EFC3C);
+ sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]);
+ data->state = 5;
+ break;
+ case 5:
+ if (gReceivedRemoteLinkPlayers != 0)
+ {
+ gUnknown_02022C2C = data->field_0->arr[data->field_F].unk.field_0.unk_0a_0;
+ data->state = 10;
+ }
+
+ switch (sub_8011A74())
+ {
+ case 1:
+ case 2:
+ case 6:
+ data->state = 8;
+ break;
+ case 5:
+ sub_8018884(gUnknown_082EDDF4);
+ sub_8011A64(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 (mevent_0814257C(&data->textState, gUnknown_082EDF80[sub_8011A74()]))
+ {
+ sub_800E084();
+ DestroyTask(taskId);
+ sub_800EDD4();
+ gSpecialVar_Result = 5;
+ }
+ break;
+ case 7:
+ sub_800E084();
+ sub_8018884(gText_PleaseStartOver);
+ DestroyTask(taskId);
+ sub_800EDD4();
+ gSpecialVar_Result = 5;
+ break;
+ case 11:
+ data->state++;
+ sub_800ADF8();
+ break;
+ case 12:
+ if (sub_800A520())
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void sub_80152A8(u32 arg0)
+{
+ u8 taskId;
+ struct UnkStruct_Group *dataPtr;
+
+ taskId = CreateTask(sub_80152F4, 0);
+ gUnknown_02022C30.group = dataPtr = (void*)(gTasks[taskId].data);
+ gUnknown_03000DA4 = dataPtr;
+
+ dataPtr->state = 0;
+ dataPtr->textState = 0;
+ dataPtr->field_12 = arg0 - 21;
+ gSpecialVar_Result = 0;
+}
+
+void sub_80152F4(u8 taskId)
+{
+ s32 id;
+ struct WindowTemplate winTemplate;
+ struct UnkStruct_Group *data = gUnknown_02022C30.group;
+
+ switch (data->state)
+ {
+ case 0:
+ sub_8010F84(0, 0, 0);
+ sub_800B488();
+ OpenLink();
+ sub_8011C5C();
+ data->field_4 = AllocZeroed(0x70);
+ data->field_0 = AllocZeroed(0x200);
+ data->state = 1;
+ break;
+ case 1:
+ sub_8018884(gUnknown_082EFBC8);
+ data->state = 2;
+ break;
+ case 2:
+ sub_80175EC(data->field_4, 4);
+ sub_8017580(data->field_0, 16);
+ data->field_11 = sub_8016FF0(data->field_4, data->field_12 + 7);
+
+ if (data->field_13 != 0)
+ {
+ winTemplate = gUnknown_082F0174;
+ winTemplate.baseBlock = sub_8019930();
+ data->listWindowId = AddWindow(&winTemplate);
+
+ sub_8018784(data->listWindowId);
+ gMultiuseListMenuTemplate = gUnknown_082F0204;
+ gMultiuseListMenuTemplate.windowId = data->listWindowId;
+ data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+
+ CopyBgTilemapBufferToVram(0);
+ }
+
+ data->field_F = 0;
+ data->state = 3;
+ break;
+ case 3:
+ id = sub_8013E44();
+ switch (id)
+ {
+ case 1:
+ PlaySE(SE_PC_LOGIN);
+ default:
+ if (data->field_13 != 0)
+ sub_81AE70C(data->listTaskId);
+ break;
+ case 0:
+ if (data->field_13 != 0)
+ id = ListMenuHandleInputGetItemId(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_8016F1C(&data->field_0->arr[0], data->field_12 + 7))
+ {
+ data->field_F = 0;
+ data->field_14 = 0;
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ sub_8011FC8(data->field_0->arr[0].unk.playerName, ReadAsU16(data->field_0->arr[0].unk.field_0.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:
+ sub_8018884(gUnknown_082EFC90);
+ sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]);
+ data->state = 5;
+ break;
+ case 5:
+ if (gReceivedRemoteLinkPlayers != 0)
+ {
+ gUnknown_02022C2C = data->field_0->arr[data->field_F].unk.field_0.unk_0a_0;
+ data->state = 12;
+ }
+
+ switch (sub_8011A74())
+ {
+ case 1:
+ case 2:
+ case 6:
+ data->state = 8;
+ break;
+ case 5:
+ sub_8018884(gUnknown_082EDEC4);
+ sub_8011A64(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 (mevent_0814257C(&data->textState, gUnknown_082EDF04))
+ {
+ sub_800E084();
+ DestroyTask(taskId);
+ sub_800EDD4();
+ gSpecialVar_Result = 5;
+ }
+ break;
+ case 7:
+ if (mevent_0814257C(&data->textState, gText_WirelessSearchCanceled))
+ {
+ sub_800E084();
+ DestroyTask(taskId);
+ sub_800EDD4();
+ gSpecialVar_Result = 5;
+ }
+ break;
+ case 11:
+ if (mevent_0814257C(&data->textState, gUnknown_082EFD58[data->field_12]))
+ {
+ sub_800E084();
+ DestroyTask(taskId);
+ sub_800EDD4();
+ gSpecialVar_Result = 5;
+ }
+ break;
+ case 13:
+ data->state++;
+ sub_800ADF8();
+ break;
+ case 14:
+ if (sub_800A520())
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void UnionRoomSpecial(void)
+{
+ struct UnkStruct_URoom *dataPtr;
+
+ sub_8010F60();
+ CreateTask(sub_80156E0, 10);
+
+ // dumb line needed to match
+ gUnknown_02022C30.uRoom = gUnknown_02022C30.uRoom;
+
+ dataPtr = AllocZeroed(0x26C);
+ gUnknown_02022C30.uRoom = dataPtr;
+ gUnknown_03000DA8 = dataPtr;
+
+ dataPtr->field_14 = 0;
+ dataPtr->field_16 = 0;
+ dataPtr->field_10 = 0;
+ dataPtr->field_12 = 0;
+
+ gSpecialVar_Result = 0;
+ sub_819A2BC(0xD0, 1);
+}
+
+u16 ReadAsU16(const u8 *ptr)
+{
+ return (ptr[1] << 8) | (ptr[0]);
+}
+
+void sub_8015664(u32 arg0, const u8 *src)
+{
+ struct UnkStruct_URoom *data = gUnknown_02022C30.uRoom;
+
+ data->field_14 = 8;
+ data->field_15 = arg0;
+ if (src != gStringVar4)
+ StringExpandPlaceholders(gStringVar4, src);
+}
+
+void sub_801568C(const u8 *src)
+{
+ struct UnkStruct_URoom *data = gUnknown_02022C30.uRoom;
+
+ data->field_14 = 26;
+ if (src != gStringVar4)
+ StringExpandPlaceholders(gStringVar4, src);
+}
+
+void sub_80156B0(struct UnkStruct_URoom *data)
+{
+ memcpy(&gDecompressionBuffer[0x3F00], data->field_0, 0x100);
+}
+
+void sub_80156C8(struct UnkStruct_URoom *data)
+{
+ memcpy(data->field_0, &gDecompressionBuffer[0x3F00], 0x100);
+}