summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/secret_base.s1157
-rw-r--r--data/secret_base.s77
-rw-r--r--include/decoration.h1
-rw-r--r--include/global.h2
-rw-r--r--include/secret_base.h5
-rw-r--r--include/use_pokeblock.h13
-rw-r--r--include/vars.h2
-rw-r--r--ld_script.txt2
-rw-r--r--src/battle/battle_setup.c2
-rw-r--r--src/field/secret_base.c743
10 files changed, 590 insertions, 1414 deletions
diff --git a/asm/secret_base.s b/asm/secret_base.s
index 9fd741aa0..a7596f85b 100644
--- a/asm/secret_base.s
+++ b/asm/secret_base.s
@@ -6,1163 +6,6 @@
.section .text_80BC1D0
- thumb_func_start sub_80BC474
-sub_80BC474: @ 80BC474
- push {r4-r7,lr}
- ldr r0, _080BC4CC @ =gMapHeader
- ldr r4, [r0, 0x4]
- movs r6, 0
- ldrb r0, [r4, 0x3]
- cmp r6, r0
- bcs _080BC504
- ldr r3, _080BC4D0 @ =gSaveBlock1 + 0x1A08
-_080BC484:
- ldr r2, [r4, 0x10]
- lsls r1, r6, 1
- adds r0, r1, r6
- lsls r0, 2
- adds r2, r0, r2
- ldrb r0, [r2, 0x5]
- adds r7, r1, 0
- cmp r0, 0x8
- bne _080BC4F8
- ldrb r1, [r3]
- ldr r0, [r2, 0x8]
- cmp r1, r0
- bne _080BC4F8
- ldrh r0, [r2]
- adds r0, 0x7
- ldrh r1, [r2, 0x2]
- adds r1, 0x7
- bl MapGridGetMetatileIdAt
- movs r1, 0
- ldr r5, _080BC4D4 @ =gUnknown_083D1358
- lsls r0, 16
- asrs r2, r0, 16
-_080BC4B2:
- lsls r0, r1, 2
- adds r3, r0, r5
- ldrh r0, [r3, 0x2]
- cmp r0, r2
- beq _080BC4D8
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0x6
- bls _080BC4B2
-_080BC4C6:
- bl DrawWholeMapView
- b _080BC504
- .align 2, 0
-_080BC4CC: .4byte gMapHeader
-_080BC4D0: .4byte gSaveBlock1 + 0x1A08
-_080BC4D4: .4byte gUnknown_083D1358
-_080BC4D8:
- ldr r0, [r4, 0x10]
- adds r1, r7, r6
- lsls r1, 2
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x7
- ldrh r1, [r1, 0x2]
- adds r1, 0x7
- ldrh r3, [r3]
- movs r4, 0xC0
- lsls r4, 4
- adds r2, r4, 0
- orrs r2, r3
- bl MapGridSetMetatileIdAt
- b _080BC4C6
-_080BC4F8:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- ldrb r0, [r4, 0x3]
- cmp r6, r0
- bcc _080BC484
-_080BC504:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80BC474
-
- thumb_func_start sub_80BC50C
-sub_80BC50C: @ 80BC50C
- push {r4,r5,lr}
- bl sub_80BC474
- movs r0, 0x14
- bl IncrementGameStat
- ldr r4, _080BC530 @ =gSaveBlock1
- ldr r0, _080BC534 @ =0x00001a16
- adds r4, r0
- ldrh r5, [r4]
- movs r0, 0
- bl ResetSecretBase
- strh r5, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080BC530: .4byte gSaveBlock1
-_080BC534: .4byte 0x00001a16
- thumb_func_end sub_80BC50C
-
- thumb_func_start sub_80BC538
-sub_80BC538: @ 80BC538
- push {r4,r5,lr}
- movs r5, 0
- movs r4, 0x1
-_080BC53E:
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_80BC268
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080BC554
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_080BC554:
- lsls r0, r4, 16
- movs r1, 0x80
- lsls r1, 9
- adds r0, r1
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _080BC53E
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80BC538
-
- thumb_func_start sub_80BC56C
-sub_80BC56C: @ 80BC56C
- push {lr}
- ldr r0, _080BC58C @ =gUnknown_020387DC
- ldrb r0, [r0]
- bl sub_80BC14C
- lsls r0, 24
- lsrs r0, 24
- bl sub_80BC268
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x1
- bne _080BC594
- ldr r0, _080BC590 @ =gScriptResult
- strh r1, [r0]
- b _080BC5B2
- .align 2, 0
-_080BC58C: .4byte gUnknown_020387DC
-_080BC590: .4byte gScriptResult
-_080BC594:
- bl sub_80BC538
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x9
- bls _080BC5AC
- ldr r1, _080BC5A8 @ =gScriptResult
- movs r0, 0x2
- b _080BC5B0
- .align 2, 0
-_080BC5A8: .4byte gScriptResult
-_080BC5AC:
- ldr r1, _080BC5B8 @ =gScriptResult
- movs r0, 0
-_080BC5B0:
- strh r0, [r1]
-_080BC5B2:
- pop {r0}
- bx r0
- .align 2, 0
-_080BC5B8: .4byte gScriptResult
- thumb_func_end sub_80BC56C
-
- thumb_func_start sub_80BC5BC
-sub_80BC5BC: @ 80BC5BC
- push {lr}
- ldr r0, _080BC5F8 @ =gUnknown_020387DC
- ldrb r0, [r0]
- bl sub_80BC14C
- ldr r2, _080BC5FC @ =gSaveBlock1
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 5
- adds r1, r2
- ldr r0, _080BC600 @ =0x00001a09
- adds r1, r0
- ldrb r3, [r1]
- lsrs r2, r3, 6
- movs r0, 0x1
- eors r2, r0
- lsls r2, 6
- movs r0, 0x3F
- ands r0, r3
- orrs r0, r2
- strb r0, [r1]
- movs r0, 0x86
- lsls r0, 1
- bl FlagSet
- pop {r0}
- bx r0
- .align 2, 0
-_080BC5F8: .4byte gUnknown_020387DC
-_080BC5FC: .4byte gSaveBlock1
-_080BC600: .4byte 0x00001a09
- thumb_func_end sub_80BC5BC
-
- thumb_func_start SecretBasePC_Decoration
-SecretBasePC_Decoration: @ 80BC604
- push {lr}
- ldr r0, _080BC614 @ =Task_SecretBasePC_Decoration
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_080BC614: .4byte Task_SecretBasePC_Decoration
- thumb_func_end SecretBasePC_Decoration
-
- thumb_func_start SecretBasePC_Registry
-SecretBasePC_Registry: @ 80BC618
- push {lr}
- ldr r0, _080BC628 @ =Task_SecretBasePC_Registry
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_080BC628: .4byte Task_SecretBasePC_Registry
- thumb_func_end SecretBasePC_Registry
-
- thumb_func_start Task_SecretBasePC_Registry
-Task_SecretBasePC_Registry: @ 80BC62C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- bl ScriptContext2_Enable
- bl sub_80F944C
- bl LoadScrollIndicatorPalette
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _080BC688 @ =gTasks + 0x8
- adds r4, r0, r1
- bl sub_80BC538
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
- adds r1, r0, 0
- cmp r1, 0
- beq _080BC694
- cmp r1, 0x7
- ble _080BC65E
- movs r0, 0x7
-_080BC65E:
- strh r0, [r4, 0x6]
- movs r0, 0
- strh r0, [r4, 0x2]
- strh r0, [r4, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- adds r0, r5, 0
- bl sub_80BC7D8
- ldr r1, _080BC68C @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _080BC690 @ =sub_80BC824
- str r1, [r0]
- b _080BC6A0
- .align 2, 0
-_080BC688: .4byte gTasks + 0x8
-_080BC68C: .4byte gTasks
-_080BC690: .4byte sub_80BC824
-_080BC694:
- ldr r1, _080BC6A8 @ =gSecretBaseText_NoRegistry
- ldr r2, _080BC6AC @ =sub_80BCC54
- adds r0, r5, 0
- movs r3, 0
- bl DisplayItemMessageOnField
-_080BC6A0:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080BC6A8: .4byte gSecretBaseText_NoRegistry
-_080BC6AC: .4byte sub_80BCC54
- thumb_func_end Task_SecretBasePC_Registry
-
- thumb_func_start sub_80BC6B0
-sub_80BC6B0: @ 80BC6B0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080BC6D8 @ =gTasks + 0x8
- adds r1, r0
- mov r8, r1
- movs r4, 0
- movs r6, 0
- movs r5, 0x1
- movs r2, 0x4
- ldrsh r0, [r1, r2]
- cmp r6, r0
- bne _080BC6DC
- movs r4, 0x1
- b _080BC706
- .align 2, 0
-_080BC6D8: .4byte gTasks + 0x8
-_080BC6DC:
- adds r0, r5, 0
- bl sub_80BC268
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080BC6F0
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
-_080BC6F0:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x13
- bhi _080BC706
- mov r1, r8
- movs r2, 0x4
- ldrsh r0, [r1, r2]
- cmp r4, r0
- bne _080BC6DC
- adds r4, r5, 0
-_080BC706:
- adds r5, r4, 0
- cmp r5, 0x13
- bhi _080BC75A
- ldr r7, _080BC7A0 @ =gStringVar1
-_080BC70E:
- adds r0, r5, 0
- bl sub_80BC268
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080BC750
- adds r0, r7, 0
- adds r1, r5, 0
- bl sub_80BC190
- lsls r3, r6, 1
- adds r4, r3, 0x2
- lsls r4, 24
- lsrs r4, 24
- adds r3, 0x3
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x12
- adds r1, r4, 0
- movs r2, 0x1C
- bl MenuFillWindowRectWithBlankTile
- adds r0, r7, 0
- movs r1, 0x12
- adds r2, r4, 0
- bl MenuPrint
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x8
- beq _080BC75A
-_080BC750:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x13
- bls _080BC70E
-_080BC75A:
- cmp r6, 0x7
- bhi _080BC7A8
- lsls r3, r6, 1
- adds r4, r3, 0x2
- lsls r4, 24
- lsrs r4, 24
- adds r3, 0x3
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x12
- adds r1, r4, 0
- movs r2, 0x1C
- bl MenuFillWindowRectWithBlankTile
- ldr r0, _080BC7A4 @ =gUnknownText_Exit
- movs r1, 0x12
- adds r2, r4, 0
- bl MenuPrint
- movs r0, 0x1
- bl DestroyVerticalScrollIndicator
- cmp r6, 0x7
- beq _080BC7B2
- lsls r1, r6, 25
- movs r0, 0x80
- lsls r0, 19
- adds r1, r0
- lsrs r1, 24
- movs r0, 0x12
- movs r2, 0x1C
- movs r3, 0x12
- bl MenuFillWindowRectWithBlankTile
- b _080BC7B2
- .align 2, 0
-_080BC7A0: .4byte gStringVar1
-_080BC7A4: .4byte gUnknownText_Exit
-_080BC7A8:
- movs r0, 0x1
- movs r1, 0xBC
- movs r2, 0x98
- bl CreateVerticalScrollIndicators
-_080BC7B2:
- mov r1, r8
- movs r2, 0x4
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _080BC7C4
- movs r0, 0
- bl DestroyVerticalScrollIndicator
- b _080BC7CE
-_080BC7C4:
- movs r0, 0
- movs r1, 0xBC
- movs r2, 0x8
- bl CreateVerticalScrollIndicators
-_080BC7CE:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80BC6B0
-
- thumb_func_start sub_80BC7D8
-sub_80BC7D8: @ 80BC7D8
- push {r4,r5,lr}
- sub sp, 0x8
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- ldr r0, _080BC820 @ =gTasks + 0x8
- adds r4, r0
- movs r0, 0x11
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuDrawTextWindow
- ldrb r3, [r4, 0x6]
- adds r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- ldrb r0, [r4, 0x2]
- str r0, [sp]
- movs r0, 0xB
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0x12
- movs r2, 0x2
- bl InitMenu
- adds r0, r5, 0
- bl sub_80BC6B0
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080BC820: .4byte gTasks + 0x8
- thumb_func_end sub_80BC7D8
-
- thumb_func_start sub_80BC824
-sub_80BC824: @ 80BC824
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _080BC858 @ =gTasks + 0x8
- adds r4, r0, r1
- ldr r2, _080BC85C @ =gMain
- ldrh r1, [r2, 0x30]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080BC874
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080BC860
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- b _080BC8B6
- .align 2, 0
-_080BC858: .4byte gTasks + 0x8
-_080BC85C: .4byte gMain
-_080BC860:
- movs r2, 0x4
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080BC940
- movs r0, 0x5
- bl PlaySE
- ldrh r0, [r4, 0x4]
- subs r0, 0x1
- b _080BC8A4
-_080BC874:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080BC8C2
- movs r0, 0x2
- ldrsh r1, [r4, r0]
- movs r2, 0x6
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _080BC8AE
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- adds r0, r1
- movs r2, 0
- ldrsh r1, [r4, r2]
- cmp r0, r1
- beq _080BC940
- movs r0, 0x5
- bl PlaySE
- ldrh r0, [r4, 0x4]
- adds r0, 0x1
-_080BC8A4:
- strh r0, [r4, 0x4]
- adds r0, r5, 0
- bl sub_80BC6B0
- b _080BC940
-_080BC8AE:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
-_080BC8B6:
- bl MoveMenuCursor
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x2]
- b _080BC940
-_080BC8C2:
- ldrh r1, [r2, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080BC91C
- movs r0, 0x5
- bl PlaySE
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- movs r2, 0x4
- ldrsh r1, [r4, r2]
- adds r0, r1
- movs r2, 0
- ldrsh r1, [r4, r2]
- cmp r0, r1
- bne _080BC8FC
- bl HandleDestroyMenuCursors
- movs r0, 0
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- adds r0, r5, 0
- bl sub_80BCC54
- b _080BC940
-_080BC8FC:
- bl HandleDestroyMenuCursors
- ldrb r0, [r4, 0x4]
- ldrb r1, [r4, 0x2]
- adds r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl sub_80BC948
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x8]
- adds r0, r5, 0
- bl sub_80BC980
- b _080BC940
-_080BC91C:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080BC940
- movs r0, 0x5
- bl PlaySE
- bl HandleDestroyMenuCursors
- movs r0, 0
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- adds r0, r6, 0
- bl sub_80BCC54
-_080BC940:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80BC824
-
- thumb_func_start sub_80BC948
-sub_80BC948: @ 80BC948
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- movs r4, 0x1
-_080BC952:
- adds r0, r4, 0
- bl sub_80BC268
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080BC96E
- cmp r6, r5
- bne _080BC968
- adds r0, r4, 0
- b _080BC97A
-_080BC968:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_080BC96E:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x13
- bls _080BC952
- movs r0, 0
-_080BC97A:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80BC948
-
- thumb_func_start sub_80BC980
-sub_80BC980: @ 80BC980
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- bl PauseVerticalScrollIndicator
- movs r0, 0x1
- bl PauseVerticalScrollIndicator
- movs r0, 0x1
- movs r1, 0
- movs r2, 0xC
- movs r3, 0x5
- bl MenuDrawTextWindow
- ldr r3, _080BC9D8 @ =gUnknown_083D13D4
- movs r0, 0x2
- movs r1, 0x1
- movs r2, 0x2
- bl PrintMenuItems
- movs r0, 0
- str r0, [sp]
- movs r0, 0xA
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0x1
- movs r3, 0x2
- bl InitMenu
- ldr r1, _080BC9DC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080BC9E0 @ =sub_80BC9E4
- str r1, [r0]
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080BC9D8: .4byte gUnknown_083D13D4
-_080BC9DC: .4byte gTasks
-_080BC9E0: .4byte sub_80BC9E4
- thumb_func_end sub_80BC980
-
- thumb_func_start sub_80BC9E4
-sub_80BC9E4: @ 80BC9E4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, r5, 0
- ldr r2, _080BCA14 @ =gMain
- ldrh r1, [r2, 0x30]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080BCA18
- bl GetMenuCursorPos
- lsls r0, 24
- cmp r0, 0
- beq _080BCA7C
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- bl MoveMenuCursor
- b _080BCA7C
- .align 2, 0
-_080BCA14: .4byte gMain
-_080BCA18:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080BCA3A
- bl GetMenuCursorPos
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080BCA7C
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- bl MoveMenuCursor
- b _080BCA7C
-_080BCA3A:
- ldrh r1, [r2, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080BCA68
- movs r0, 0x5
- bl PlaySE
- ldr r4, _080BCA64 @ =gUnknown_083D13D4
- bl GetMenuCursorPos
- lsls r0, 24
- lsrs r0, 21
- adds r4, 0x4
- adds r0, r4
- ldr r1, [r0]
- adds r0, r5, 0
- bl _call_via_r1
- b _080BCA7C
- .align 2, 0
-_080BCA64: .4byte gUnknown_083D13D4
-_080BCA68:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080BCA7C
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl sub_80BCBF8
-_080BCA7C:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80BC9E4
-
- thumb_func_start sub_80BCA84
-sub_80BCA84: @ 80BCA84
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- ldr r0, _080BCAD8 @ =gTasks + 0x8
- adds r4, r0
- movs r0, 0
- bl DestroyVerticalScrollIndicator
- movs r0, 0x1
- bl DestroyVerticalScrollIndicator
- bl HandleDestroyMenuCursors
- movs r0, 0
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- ldr r0, _080BCADC @ =gStringVar1
- ldrb r1, [r4, 0x8]
- bl sub_80BC190
- ldr r4, _080BCAE0 @ =gStringVar4
- ldr r1, _080BCAE4 @ =gOtherText_OkayToDeleteFromRegistry
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r2, _080BCAE8 @ =sub_80BCAEC
- adds r0, r5, 0
- adds r1, r4, 0
- movs r3, 0
- bl DisplayItemMessageOnField
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080BCAD8: .4byte gTasks + 0x8
-_080BCADC: .4byte gStringVar1
-_080BCAE0: .4byte gStringVar4
-_080BCAE4: .4byte gOtherText_OkayToDeleteFromRegistry
-_080BCAE8: .4byte sub_80BCAEC
- thumb_func_end sub_80BCA84
-
- thumb_func_start sub_80BCAEC
-sub_80BCAEC: @ 80BCAEC
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x14
- movs r1, 0x8
- movs r2, 0x1
- bl DisplayYesNoMenu
- ldr r1, _080BCB0C @ =gUnknown_083D13E4
- adds r0, r4, 0
- bl DoYesNoFuncWithChoice
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080BCB0C: .4byte gUnknown_083D13E4
- thumb_func_end sub_80BCAEC
-
- thumb_func_start sub_80BCB10
-sub_80BCB10: @ 80BCB10
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- lsls r0, r5, 2
- adds r0, r5
- lsls r6, r0, 3
- ldr r7, _080BCB80 @ =gTasks + 0x8
- adds r4, r6, r7
- movs r0, 0
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- ldr r2, _080BCB84 @ =gSaveBlock1
- movs r0, 0x8
- ldrsh r1, [r4, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 5
- adds r0, r2
- ldr r1, _080BCB88 @ =0x00001a09
- adds r0, r1
- ldrb r2, [r0]
- movs r1, 0x3F
- ands r1, r2
- strb r1, [r0]
- ldrh r0, [r4]
- subs r0, 0x1
- strh r0, [r4]
- ldrh r1, [r4, 0x4]
- movs r2, 0x4
- ldrsh r0, [r4, r2]
- cmp r0, 0
- ble _080BCB5C
- subs r0, r1, 0x1
- strh r0, [r4, 0x4]
-_080BCB5C:
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x7
- bgt _080BCB6A
- ldrh r0, [r4, 0x6]
- subs r0, 0x1
- strh r0, [r4, 0x6]
-_080BCB6A:
- adds r0, r5, 0
- bl sub_80BC7D8
- adds r0, r7, 0
- subs r0, 0x8
- adds r0, r6, r0
- ldr r1, _080BCB8C @ =sub_80BC824
- str r1, [r0]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080BCB80: .4byte gTasks + 0x8
-_080BCB84: .4byte gSaveBlock1
-_080BCB88: .4byte 0x00001a09
-_080BCB8C: .4byte sub_80BC824
- thumb_func_end sub_80BCB10
-
- thumb_func_start sub_80BCB90
-sub_80BCB90: @ 80BCB90
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x14
- movs r1, 0x8
- movs r2, 0x1A
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- ldr r1, _080BCBB8 @ =gOtherText_RegisteredDataDeleted
- ldr r2, _080BCBBC @ =sub_80BCB10
- adds r0, r4, 0
- movs r3, 0
- bl DisplayItemMessageOnField
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080BCBB8: .4byte gOtherText_RegisteredDataDeleted
-_080BCBBC: .4byte sub_80BCB10
- thumb_func_end sub_80BCB90
-
- thumb_func_start sub_80BCBC0
-sub_80BCBC0: @ 80BCBC0
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- adds r0, r4, 0
- bl sub_80BC7D8
- ldr r1, _080BCBF0 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080BCBF4 @ =sub_80BC824
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080BCBF0: .4byte gTasks
-_080BCBF4: .4byte sub_80BC824
- thumb_func_end sub_80BCBC0
-
- thumb_func_start sub_80BCBF8
-sub_80BCBF8: @ 80BCBF8
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r5, _080BCC4C @ =gTasks + 0x8
- adds r0, r4, r5
- ldrb r3, [r0, 0x6]
- adds r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- ldrb r0, [r0, 0x2]
- str r0, [sp]
- movs r0, 0xB
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0x12
- movs r2, 0x2
- bl InitMenu
- movs r0, 0x1
- movs r1, 0
- movs r2, 0xC
- movs r3, 0x5
- bl MenuZeroFillWindowRect
- movs r0, 0
- bl StartVerticalScrollIndicators
- movs r0, 0x1
- bl StartVerticalScrollIndicators
- subs r5, 0x8
- adds r4, r5
- ldr r0, _080BCC50 @ =sub_80BC824
- str r0, [r4]
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080BCC4C: .4byte gTasks + 0x8
-_080BCC50: .4byte sub_80BC824
- thumb_func_end sub_80BCBF8
-
- thumb_func_start sub_80BCC54
-sub_80BCC54: @ 80BCC54
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080BCC84 @ =0x00004054
- bl VarGet
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl BuyMenuFreeMemory
- movs r0, 0
- bl DestroyVerticalScrollIndicator
- movs r0, 0x1
- bl DestroyVerticalScrollIndicator
- cmp r4, 0
- bne _080BCC8C
- ldr r0, _080BCC88 @ =gUnknown_0815F399
- bl ScriptContext1_SetupScript
- b _080BCC92
- .align 2, 0
-_080BCC84: .4byte 0x00004054
-_080BCC88: .4byte gUnknown_0815F399
-_080BCC8C:
- ldr r0, _080BCCA0 @ =gUnknown_0815F49A
- bl ScriptContext1_SetupScript
-_080BCC92:
- adds r0, r5, 0
- bl DestroyTask
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080BCCA0: .4byte gUnknown_0815F49A
- thumb_func_end sub_80BCC54
-
- thumb_func_start sub_80BCCA4
-sub_80BCCA4: @ 80BCCA4
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080BCCDC @ =gSaveBlock1
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 5
- adds r4, r1
- ldr r1, _080BCCE0 @ =0x00001a11
- adds r0, r4, r1
- ldrb r0, [r0]
- movs r1, 0x5
- bl __umodsi3
- ldr r1, _080BCCE4 @ =0x00001a09
- adds r4, r1
- ldrb r2, [r4]
- lsls r2, 27
- lsrs r2, 31
- lsls r1, r2, 2
- adds r1, r2
- adds r0, r1
- lsls r0, 24
- lsrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080BCCDC: .4byte gSaveBlock1
-_080BCCE0: .4byte 0x00001a11
-_080BCCE4: .4byte 0x00001a09
- thumb_func_end sub_80BCCA4
-
- thumb_func_start sub_80BCCE8
-sub_80BCCE8: @ 80BCCE8
- push {lr}
- ldr r0, _080BCD08 @ =0x00004054
- bl VarGet
- lsls r0, 24
- lsrs r0, 24
- bl sub_80BCCA4
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- cmp r0, 0
- bne _080BCD10
- ldr r0, _080BCD0C @ =UnknownString_81A1BB2
- b _080BCD72
- .align 2, 0
-_080BCD08: .4byte 0x00004054
-_080BCD0C: .4byte UnknownString_81A1BB2
-_080BCD10:
- cmp r0, 0x1
- bne _080BCD1C
- ldr r0, _080BCD18 @ =UnknownString_81A1F67
- b _080BCD72
- .align 2, 0
-_080BCD18: .4byte UnknownString_81A1F67
-_080BCD1C:
- cmp r0, 0x2
- bne _080BCD28
- ldr r0, _080BCD24 @ =UnknownString_81A2254
- b _080BCD72
- .align 2, 0
-_080BCD24: .4byte UnknownString_81A2254
-_080BCD28:
- cmp r0, 0x3
- bne _080BCD34
- ldr r0, _080BCD30 @ =UnknownString_81A25C3
- b _080BCD72
- .align 2, 0
-_080BCD30: .4byte UnknownString_81A25C3
-_080BCD34:
- cmp r0, 0x4
- bne _080BCD40
- ldr r0, _080BCD3C @ =UnknownString_81A2925
- b _080BCD72
- .align 2, 0
-_080BCD3C: .4byte UnknownString_81A2925
-_080BCD40:
- cmp r0, 0x5
- bne _080BCD4C
- ldr r0, _080BCD48 @ =UnknownString_81A1D74
- b _080BCD72
- .align 2, 0
-_080BCD48: .4byte UnknownString_81A1D74
-_080BCD4C:
- cmp r0, 0x6
- bne _080BCD58
- ldr r0, _080BCD54 @ =UnknownString_81A20C9
- b _080BCD72
- .align 2, 0
-_080BCD54: .4byte UnknownString_81A20C9
-_080BCD58:
- cmp r0, 0x7
- bne _080BCD64
- ldr r0, _080BCD60 @ =UnknownString_81A2439
- b _080BCD72
- .align 2, 0
-_080BCD60: .4byte UnknownString_81A2439
-_080BCD64:
- cmp r1, 0x8
- beq _080BCD70
- ldr r0, _080BCD6C @ =UnknownString_81A2B2A
- b _080BCD72
- .align 2, 0
-_080BCD6C: .4byte UnknownString_81A2B2A
-_080BCD70:
- ldr r0, _080BCD78 @ =UnknownString_81A2754
-_080BCD72:
- pop {r1}
- bx r1
- .align 2, 0
-_080BCD78: .4byte UnknownString_81A2754
- thumb_func_end sub_80BCCE8
-
thumb_func_start unref_sub_80BCD7C
unref_sub_80BCD7C: @ 80BCD7C
push {r4-r7,lr}
diff --git a/data/secret_base.s b/data/secret_base.s
deleted file mode 100644
index 59ded8ddf..000000000
--- a/data/secret_base.s
+++ /dev/null
@@ -1,77 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 1
-gUnknown_083D1358:: @ 83D1358
- .2byte 0x26, 0x36
- .2byte 0x27, 0x37
- .2byte 0x1A0, 0x1A1
- .2byte 0x1A8, 0x1A9
- .2byte 0x1B0, 0x1B1
- .2byte 0x208, 0x210
- .2byte 0x271, 0x278
-
-gUnknown_083D1374:: @ 83D1374
- .byte 0, 0
- .byte 1, 3
- .byte 6, 0
- .byte 5, 9
- .byte 12, 0
- .byte 1, 3
- .byte 18, 0
- .byte 7, 13
- .byte 1, 0
- .byte 2, 3
- .byte 7, 0
- .byte 9, 2
- .byte 13, 0
- .byte 13, 4
- .byte 19, 0
- .byte 1, 2
- .byte 2, 0
- .byte 1, 3
- .byte 8, 0
- .byte 1, 2
- .byte 14, 0
- .byte 3, 15
- .byte 20, 0
- .byte 3, 14
- .byte 3, 0
- .byte 9, 3
- .byte 9, 0
- .byte 8, 7
- .byte 15, 0
- .byte 3, 6
- .byte 21, 0
- .byte 5, 9
- .byte 4, 0
- .byte 2, 3
- .byte 10, 0
- .byte 5, 6
- .byte 16, 0
- .byte 15, 3
- .byte 22, 0
- .byte 4, 10
- .byte 5, 0
- .byte 3, 3
- .byte 11, 0
- .byte 1, 2
- .byte 17, 0
- .byte 7, 8
- .byte 23, 0
- .byte 9, 6
-
- .align 2
-gUnknown_083D13D4:: @ 83D13D4
- .4byte SecretBaseText_DelRegist, sub_80BCA84
- .4byte gUnknownText_Exit, sub_80BCBF8
-
- .align 2
-gUnknown_083D13E4:: @ 83D13E4
- .4byte sub_80BCB90
- .4byte sub_80BCBC0
-
-gUnknown_083D13EC:: @ 83D13EC
- .byte 0x23,0x24,0xF,0x1F,0x21,0x2F,0xE,0x14,0x20,0x22,0x0,0x0
diff --git a/include/decoration.h b/include/decoration.h
index 2e72e305a..1b83964d9 100644
--- a/include/decoration.h
+++ b/include/decoration.h
@@ -291,6 +291,7 @@ extern void sub_8134104(u8); // src/decoration_inventory
extern bool8 sub_807D770(void);
extern void sub_8109DAC(u8); // src/trader
extern void ReshowPlayerPC(u8); // src/player_pc
+void Task_SecretBasePC_Decoration(u8);
void sub_80FE2B4(void);
void Task_DecorationPCProcessMenuInput(u8);
diff --git a/include/global.h b/include/global.h
index f0eb7401f..6b0a0cb01 100644
--- a/include/global.h
+++ b/include/global.h
@@ -136,7 +136,7 @@ struct SecretBaseRecord
/*0x1A09*/ u8 sbr_field_1_5:1;
/*0x1A09*/ u8 sbr_field_1_6:2;
/*0x1A0A*/ u8 sbr_field_2[7]; // 0xFF bytes?
- /*0x1A12*/ u8 trainerId[4]; // byte 0 is used for determining trainer class
+ /*0x1A11*/ u8 trainerId[4]; // byte 0 is used for determining trainer class
/*0x1A16*/ u16 sbr_field_e;
/*0x1A18*/ u8 sbr_field_10;
/*0x1A19*/ u8 sbr_field_11;
diff --git a/include/secret_base.h b/include/secret_base.h
index bb747bb02..0844cff26 100644
--- a/include/secret_base.h
+++ b/include/secret_base.h
@@ -5,12 +5,11 @@ void ResetSecretBases(void);
void sub_80BB970(struct MapEvents *);
u8 sub_80BBB24(void);
void sub_80BBCCC(u8);
-void sub_80BC038();
+void sub_80BC038(struct MapPosition *, struct MapEvents *);
u8 sub_80BC050();
u8 *GetSecretBaseMapName(u8 *);
void sub_80BC300();
-const u8 sub_80BCCA4(u8);
-u8 *sub_80BCCE8(void);
+const u8 *sub_80BCCE8(void);
void sub_80BCF1C(u8);
void sub_80BD674(void *, u32, u8);
diff --git a/include/use_pokeblock.h b/include/use_pokeblock.h
new file mode 100644
index 000000000..978476d89
--- /dev/null
+++ b/include/use_pokeblock.h
@@ -0,0 +1,13 @@
+//
+// Created by Scott Norton on 5/31/17.
+//
+
+#ifndef POKERUBY_USE_POKEBLOCK_H
+#define POKERUBY_USE_POKEBLOCK_H
+
+extern void *gUnknown_02030400;
+extern s16 gUnknown_02039312;
+
+void sub_8136130(struct Pokeblock *, MainCallback);
+
+#endif //POKERUBY_USE_POKEBLOCK_H
diff --git a/include/vars.h b/include/vars.h
index 179fd6f93..631b9a41d 100644
--- a/include/vars.h
+++ b/include/vars.h
@@ -1,6 +1,8 @@
#ifndef GUARD_VARS_H
#define GUARD_VARS_H
+#define VAR_0x3F20 0x3F20
+
#define VAR_0x4000 0x4000
#define VAR_0x4001 0x4001
#define VAR_0x4002 0x4002
diff --git a/ld_script.txt b/ld_script.txt
index 7b53e8b35..f16611f57 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -396,7 +396,7 @@ SECTIONS {
src/engine/record_mixing.o(.data);
src/engine/record_mixing.o(.rodata);
src/debug/sound_check_menu.o(.rodata);
- data/secret_base.o(.rodata);
+ src/field/secret_base.o(.rodata);
data/tv.o(.rodata);
data/contest_link_80C2020.o(.rodata);
src/pokemon/pokemon_size_record.o(.rodata);
diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c
index 40949ed38..91a0667d9 100644
--- a/src/battle/battle_setup.c
+++ b/src/battle/battle_setup.c
@@ -1222,7 +1222,7 @@ static u8 *GetTrainerIntroSpeech(void)
u8 *sub_8082830(void)
{
- u8 *str;
+ const u8 *str;
if (gTrainerBattleOpponent == 1024)
str = sub_80BCCE8();
diff --git a/src/field/secret_base.c b/src/field/secret_base.c
index f221d7f16..949fae704 100644
--- a/src/field/secret_base.c
+++ b/src/field/secret_base.c
@@ -1,6 +1,9 @@
#include "global.h"
#include "secret_base.h"
#include "decoration.h"
+#include "species.h"
+#include "items.h"
+#include "moves.h"
#include "event_data.h"
#include "field_camera.h"
#include "field_fadetransition.h"
@@ -8,9 +11,12 @@
#include "field_weather.h"
#include "fieldmap.h"
#include "main.h"
+#include "sound.h"
+#include "songs.h"
#include "map_constants.h"
#include "map_name_popup.h"
#include "menu.h"
+#include "menu_helpers.h"
#include "metatile_behavior.h"
#include "palette.h"
#include "pokemon.h"
@@ -22,20 +28,117 @@
#include "text.h"
#include "vars.h"
-extern u8 gUnknown_020387DC;
-extern u16 gSpecialVar_0x8004;
-extern u16 gSpecialVar_0x8005;
-extern u16 gSpecialVar_0x8006;
-extern u16 gSpecialVar_0x8007;
-extern u16 gScriptResult;
-extern const struct
+extern u8 gUnknown_0815F399[];
+extern u8 gUnknown_0815F49A[];
+
+extern const u8 UnknownString_81A1BB2[];
+extern const u8 UnknownString_81A1F67[];
+extern const u8 UnknownString_81A2254[];
+extern const u8 UnknownString_81A25C3[];
+extern const u8 UnknownString_81A2925[];
+extern const u8 UnknownString_81A1D74[];
+extern const u8 UnknownString_81A20C9[];
+extern const u8 UnknownString_81A2439[];
+extern const u8 UnknownString_81A2754[];
+extern const u8 UnknownString_81A2B2A[];
+
+void sub_80BCA84(u8);
+void sub_80BCBF8(u8);
+void sub_80BCB90(u8);
+void sub_80BCBC0(u8);
+
+void Task_SecretBasePC_Registry(u8);
+void sub_80BC7D8(u8);
+void sub_80BC824(u8);
+void sub_80BCC54(u8);
+u8 sub_80BC948(u8);
+void sub_80BC980(u8);
+void sub_80BC9E4(u8);
+void sub_80BCAEC(u8);
+u8 sub_80BCCA4(u8);
+
+const struct
{
u16 unk_083D1358_0;
u16 unk_083D1358_1;
-} gUnknown_083D1358[7];
-extern const u8 gUnknown_083D1374[4 * 16];
+} gUnknown_083D1358[] = {
+ {0x26, 0x36},
+ {0x27, 0x37},
+ {0x1a0, 0x1a1},
+ {0x1a8, 0x1a9},
+ {0x1b0, 0x1b1},
+ {0x208, 0x210},
+ {0x271, 0x278}
+};
+
+extern u8 gUnknown_020387DC;
+
+const u8 gUnknown_083D1374[] = {
+ MAP_ID_SECRET_BASE_RED_CAVE1, 0,
+ MAP_ID_SECRET_BASE_BROWN_CAVE1, 3,
+ MAP_ID_SECRET_BASE_RED_CAVE2, 0,
+ MAP_ID_SECRET_BASE_SHRUB1, 9,
+ MAP_ID_SECRET_BASE_RED_CAVE3, 0,
+ MAP_ID_SECRET_BASE_BROWN_CAVE1, 3,
+ MAP_ID_SECRET_BASE_RED_CAVE4, 0,
+ MAP_ID_SECRET_BASE_BROWN_CAVE2, 13,
+ MAP_ID_SECRET_BASE_BROWN_CAVE1, 0,
+ MAP_ID_SECRET_BASE_BLUE_CAVE1, 3,
+ MAP_ID_SECRET_BASE_BROWN_CAVE2, 0,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE2, 2,
+ MAP_ID_SECRET_BASE_BROWN_CAVE3, 0,
+ MAP_ID_SECRET_BASE_BROWN_CAVE3, 4,
+ MAP_ID_SECRET_BASE_BROWN_CAVE4, 0,
+ MAP_ID_SECRET_BASE_BROWN_CAVE1, 2,
+ MAP_ID_SECRET_BASE_BLUE_CAVE1, 0,
+ MAP_ID_SECRET_BASE_BROWN_CAVE1, 3,
+ MAP_ID_SECRET_BASE_BLUE_CAVE2, 0,
+ MAP_ID_SECRET_BASE_BROWN_CAVE1, 2,
+ MAP_ID_SECRET_BASE_BLUE_CAVE3, 0,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE1, 15,
+ MAP_ID_SECRET_BASE_BLUE_CAVE4, 0,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE1, 14,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE1, 0,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE2, 3,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE2, 0,
+ MAP_ID_SECRET_BASE_BLUE_CAVE2, 7,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE3, 0,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE1, 6,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE4, 0,
+ MAP_ID_SECRET_BASE_SHRUB1, 9,
+ MAP_ID_SECRET_BASE_TREE1, 0,
+ MAP_ID_SECRET_BASE_BLUE_CAVE1, 3,
+ MAP_ID_SECRET_BASE_TREE2, 0,
+ MAP_ID_SECRET_BASE_SHRUB1, 6,
+ MAP_ID_SECRET_BASE_TREE3, 0,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE3, 3,
+ MAP_ID_SECRET_BASE_TREE4, 0,
+ MAP_ID_SECRET_BASE_TREE1, 10,
+ MAP_ID_SECRET_BASE_SHRUB1, 0,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE1, 3,
+ MAP_ID_SECRET_BASE_SHRUB2, 0,
+ MAP_ID_SECRET_BASE_BROWN_CAVE1, 2,
+ MAP_ID_SECRET_BASE_SHRUB3, 0,
+ MAP_ID_SECRET_BASE_BROWN_CAVE2, 8,
+ MAP_ID_SECRET_BASE_SHRUB4, 0,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE2, 6
+};
+
+const struct MenuAction2 gUnknown_083D13D4[] = {
+ {SecretBaseText_DelRegist, sub_80BCA84},
+ {gUnknownText_Exit, sub_80BCBF8}
+};
+
+const struct YesNoFuncTable gUnknown_083D13E4 = {
+ sub_80BCB90,
+ sub_80BCBC0
+};
+
+const u8 gUnknown_083D13EC[] = {
+ 0x23,0x24,0xF,0x1F,0x21,0x2F,0xE,0x14,0x20,0x22,0x0,0x0
+};
+
extern void *gUnknown_0300485C;
-extern const u8 gUnknown_083D13EC[12];
extern u8 gUnknown_081A2E14[];
@@ -323,7 +426,6 @@ bool8 CurrentMapIsSecretBase(void)
return FALSE;
}
-#ifdef NONMATCHING
void sub_80BBCCC(u8 flagIn)
{
u16 curBaseId;
@@ -331,8 +433,8 @@ void sub_80BBCCC(u8 flagIn)
if (CurrentMapIsSecretBase()) {
curBaseId = VarGet(VAR_0x4054);
for (x=0; x<16; x++) {
- if ((u8)(gSaveBlock1.secretBases[curBaseId].decorations[x] - 1) <= 0x77 && gDecorations[gSaveBlock1.secretBases[curBaseId].decorations[x]].decor_field_11 != 4) {
- sub_80FF394((gSaveBlock1.secretBases[0].decorationPos[x] >> 4) + 7, (gSaveBlock1.secretBases[0].decorationPos[x] & 0xF) + 7, gSaveBlock1.secretBases[curBaseId].decorations[x]);
+ if (gSaveBlock1.secretBases[curBaseId].decorations[x] > 0 && gSaveBlock1.secretBases[curBaseId].decorations[x] <= 0x78 && gDecorations[gSaveBlock1.secretBases[curBaseId].decorations[x]].permission != DECORPERM_SOLID_MAT) {
+ sub_80FF394((gSaveBlock1.secretBases[curBaseId].decorationPos[x] >> 4) + 7, (gSaveBlock1.secretBases[curBaseId].decorationPos[x] & 0xF) + 7, gSaveBlock1.secretBases[curBaseId].decorations[x]);
}
}
if (curBaseId != 0) {
@@ -345,6 +447,9 @@ void sub_80BBCCC(u8 flagIn)
}
}
+#ifdef NONMATCHING
+// The only nonmatching property of this function is that the implicit variables &gSaveBlock1 and &roomdecor[decidx]
+// are stored in the wrong registers.
void sub_80BBDD0(void)
{
u8 *roomdecor;
@@ -364,20 +469,19 @@ void sub_80BBDD0(void)
ndecor = 16;
}
for (decidx=0; decidx<ndecor; decidx++) {
- if (roomdecor[decidx] == 0)
- continue;
- if (gDecorations[roomdecor[decidx]].decor_field_11 != 4)
- continue;
- for (objid=0; objid<gMapHeader.events->mapObjectCount; objid++) {
- if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE)
- break;
- }
- if (objid != gMapHeader.events->mapObjectCount) {
+ if (roomdecor[decidx] != 0 && gDecorations[roomdecor[decidx]].permission == DECORPERM_SOLID_MAT)
+ {
+ for (objid=0; objid<gMapHeader.events->mapObjectCount; objid++) {
+ if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE)
+ break;
+ }
+ if (objid == gMapHeader.events->mapObjectCount)
+ continue;
gSpecialVar_0x8006 = roomdecorpos[decidx] >> 4;
gSpecialVar_0x8007 = roomdecorpos[decidx] & 0xF;
metatile = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7);
- if (sub_80572D8(metatile) == 1 || sub_80572EC(metatile) == 1) {
- gScriptResult = gMapHeader.events->mapObjects[objid].graphicsId + 0x3f20;
+ if (sub_80572D8(metatile) == TRUE || sub_80572EC(metatile) == TRUE) {
+ gScriptResult = gMapHeader.events->mapObjects[objid].graphicsId + VAR_0x3F20;
VarSet(gScriptResult, gDecorations[roomdecor[decidx]].tiles[0]);
gScriptResult = gMapHeader.events->mapObjects[objid].localId;
FlagClear(gSpecialVar_0x8004 + 0xAE);
@@ -392,132 +496,6 @@ void sub_80BBDD0(void)
#else
__attribute__((naked))
-void sub_80BBCCC(u8 flagIn)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- sub sp, 0x4\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- bl CurrentMapIsSecretBase\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080BBDBC\n\
- ldr r0, _080BBD70 @ =0x00004054\n\
- bl VarGet\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- movs r1, 0\n\
- mov r0, sp\n\
- strh r1, [r0]\n\
- ldr r6, _080BBD74 @ =gSaveBlock1\n\
- mov r4, sp\n\
- ldr r0, _080BBD78 @ =0x00001a2a\n\
- adds r7, r6, r0\n\
-_080BBCFC:\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 5\n\
- ldrh r1, [r4]\n\
- adds r2, r0, r1\n\
- ldr r1, _080BBD7C @ =0x00001a1a\n\
- adds r0, r6, r1\n\
- adds r1, r2, r0\n\
- ldrb r0, [r1]\n\
- subs r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x77\n\
- bhi _080BBD3A\n\
- ldr r0, _080BBD80 @ =gDecorations\n\
- ldrb r3, [r1]\n\
- lsls r1, r3, 5\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x11]\n\
- cmp r0, 0x4\n\
- beq _080BBD3A\n\
- adds r0, r2, r7\n\
- ldrb r2, [r0]\n\
- lsrs r0, r2, 4\n\
- adds r0, 0x7\n\
- movs r1, 0xF\n\
- ands r1, r2\n\
- adds r1, 0x7\n\
- adds r2, r3, 0\n\
- bl sub_80FF394\n\
-_080BBD3A:\n\
- ldrh r0, [r4]\n\
- adds r0, 0x1\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- strh r0, [r4]\n\
- cmp r0, 0xF\n\
- bls _080BBCFC\n\
- cmp r5, 0\n\
- beq _080BBD88\n\
- mov r4, sp\n\
- adds r4, 0x2\n\
- movs r2, 0x88\n\
- lsls r2, 2\n\
- mov r0, sp\n\
- adds r1, r4, 0\n\
- bl sub_80BB764\n\
- mov r0, sp\n\
- ldrh r0, [r0]\n\
- adds r0, 0x7\n\
- ldrh r1, [r4]\n\
- adds r1, 0x7\n\
- ldr r2, _080BBD84 @ =0x00000e21\n\
- bl MapGridSetMetatileIdAt\n\
- b _080BBDBC\n\
- .align 2, 0\n\
-_080BBD70: .4byte 0x00004054\n\
-_080BBD74: .4byte gSaveBlock1\n\
-_080BBD78: .4byte 0x00001a2a\n\
-_080BBD7C: .4byte 0x00001a1a\n\
-_080BBD80: .4byte gDecorations\n\
-_080BBD84: .4byte 0x00000e21\n\
-_080BBD88:\n\
- mov r0, r8\n\
- cmp r0, 0x1\n\
- bne _080BBDBC\n\
- ldr r0, _080BBDC8 @ =0x00004089\n\
- bl VarGet\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x1\n\
- bne _080BBDBC\n\
- mov r4, sp\n\
- adds r4, 0x2\n\
- movs r2, 0x88\n\
- lsls r2, 2\n\
- mov r0, sp\n\
- adds r1, r4, 0\n\
- bl sub_80BB764\n\
- mov r0, sp\n\
- ldrh r0, [r0]\n\
- adds r0, 0x7\n\
- ldrh r1, [r4]\n\
- adds r1, 0x7\n\
- ldr r2, _080BBDCC @ =0x00000e0a\n\
- bl MapGridSetMetatileIdAt\n\
-_080BBDBC:\n\
- add sp, 0x4\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080BBDC8: .4byte 0x00004089\n\
-_080BBDCC: .4byte 0x00000e0a\n\
-.syntax divided\n");
-}
-
-__attribute__((naked))
void sub_80BBDD0(void)
{
asm(".syntax unified\n\
@@ -755,18 +733,18 @@ void sub_80BBFA4(void)
VarSet(VAR_0x401F, gUnknown_083D13EC[sub_80BCCA4(curBase)]);
}
-void sub_80BBFD8(s16 *position, struct MapEvents *events)
+void sub_80BBFD8(struct MapPosition *position, struct MapEvents *events)
{
s16 bgevtidx;
for (bgevtidx=0; bgevtidx<events->bgEventCount; bgevtidx++) {
- if (events->bgEvents[bgevtidx].kind == 8 && position[0] == events->bgEvents[bgevtidx].x + 7 && position[1] == events->bgEvents[bgevtidx].y + 7) {
+ if (events->bgEvents[bgevtidx].kind == 8 && position->x == events->bgEvents[bgevtidx].x + 7 && position->y == events->bgEvents[bgevtidx].y + 7) {
gUnknown_020387DC = events->bgEvents[bgevtidx].bgUnion.secretBaseId;
break;
}
}
}
-void sub_80BC038(s16 *position, struct MapEvents *events)
+void sub_80BC038(struct MapPosition *position, struct MapEvents *events)
{
sub_80BBFD8(position, events);
sub_80BB5E4();
@@ -873,32 +851,31 @@ u8 sub_80BC298(struct Pokemon *mon) { // 80bc298
}
#ifdef NONMATCHING
+// So much is wrong with this function.
+// The compiler likes to store pointers in temp variables. That's not what it's supposed to do.
void sub_80BC300(void)
{
+ u16 partyidx;
u16 moveidx;
u16 sbpartyidx = 0;
- int resetVal = 0;
- u16 partyidx = 0;
- while (partyidx < 6) {
- partyidx ++;
- for (moveidx=0; moveidx<4; moveidx++) {
- gSaveBlock1.secretBases[0].partyMoves[(partyidx - 1) * 6 + moveidx] = resetVal;
- }
- gSaveBlock1.secretBases[0].partySpecies[partyidx - 1] = resetVal;
- gSaveBlock1.secretBases[0].partyHeldItems[partyidx - 1] = resetVal;
- gSaveBlock1.secretBases[0].partyLevels[partyidx - 1] = resetVal;
- gSaveBlock1.secretBases[0].partyPersonality[partyidx - 1] = resetVal;
- gSaveBlock1.secretBases[0].partyEVs[partyidx - 1] = resetVal;
- if (GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_SPECIES) != 0 && !GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_IS_EGG)) {
+ for (partyidx=0; partyidx<PARTY_SIZE; partyidx++)
+ {
+ for (moveidx=0; moveidx<4; moveidx++)
+ gSaveBlock1.secretBases[0].partyMoves[partyidx * 4 + moveidx] = MOVE_NONE;
+ gSaveBlock1.secretBases[0].partySpecies[partyidx] = SPECIES_NONE;
+ gSaveBlock1.secretBases[0].partyHeldItems[partyidx] = ITEM_NONE;
+ gSaveBlock1.secretBases[0].partyLevels[partyidx] = 0;
+ gSaveBlock1.secretBases[0].partyPersonality[partyidx] = 0;
+ gSaveBlock1.secretBases[0].partyEVs[partyidx] = 0;
+ if (GetMonData(&(gPlayerParty[partyidx]), MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&(gPlayerParty[partyidx]), MON_DATA_IS_EGG)) {
+ for (moveidx=0; moveidx<4; moveidx++)
+ gSaveBlock1.secretBases[0].partyMoves[sbpartyidx * 4 + moveidx] = GetMonData(&(gPlayerParty[partyidx]), MON_DATA_MOVE1 + moveidx);
+ gSaveBlock1.secretBases[0].partySpecies[sbpartyidx] = GetMonData(&(gPlayerParty[partyidx]), MON_DATA_SPECIES);
+ gSaveBlock1.secretBases[0].partyHeldItems[sbpartyidx] = GetMonData(&(gPlayerParty[partyidx]), MON_DATA_HELD_ITEM);
+ gSaveBlock1.secretBases[0].partyLevels[sbpartyidx] = GetMonData(&(gPlayerParty[partyidx]), MON_DATA_LEVEL);
+ gSaveBlock1.secretBases[0].partyPersonality[sbpartyidx] = GetMonData(&(gPlayerParty[partyidx]), MON_DATA_PERSONALITY);
+ gSaveBlock1.secretBases[0].partyEVs[sbpartyidx] = sub_80BC298(&(gPlayerParty[partyidx]));
sbpartyidx ++;
- for (moveidx=0; moveidx<4; moveidx++) {
- gSaveBlock1.secretBases[0].partyMoves[(sbpartyidx - 1) * 6 + moveidx] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_MOVE1 + moveidx);
- }
- gSaveBlock1.secretBases[0].partySpecies[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_SPECIES);
- gSaveBlock1.secretBases[0].partyHeldItems[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_HELD_ITEM);
- gSaveBlock1.secretBases[0].partyLevels[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_LEVEL);
- gSaveBlock1.secretBases[0].partyPersonality[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_PERSONALITY);
- gSaveBlock1.secretBases[0].partyEVs[sbpartyidx - 1] = sub_80BC298(&(gPlayerParty[partyidx - 1]));
}
}
}
@@ -1073,3 +1050,421 @@ void SecretBasePC_PackUp(void)
IncrementGameStat(20);
sub_80BC440();
}
+
+void sub_80BC474(void)
+{
+ u16 i, j;
+ s16 metatileId;
+ struct MapEvents *mapEvents = gMapHeader.events;
+ for (i=0; i<mapEvents->bgEventCount; i++)
+ {
+ if (mapEvents->bgEvents[i].kind == 8 && gSaveBlock1.secretBases[0].sbr_field_0 == mapEvents->bgEvents[i].bgUnion.secretBaseId)
+ {
+ metatileId = MapGridGetMetatileIdAt(mapEvents->bgEvents[i].x + 7, mapEvents->bgEvents[i].y + 7);
+ for (j=0; j<7; j++)
+ {
+ if (gUnknown_083D1358[j].unk_083D1358_1 == metatileId)
+ {
+ MapGridSetMetatileIdAt(mapEvents->bgEvents[i].x + 7, mapEvents->bgEvents[i].y + 7, gUnknown_083D1358[j].unk_083D1358_0 | 0xc00);
+ break;
+ }
+ }
+ DrawWholeMapView();
+ break;
+ }
+ }
+}
+
+void sub_80BC50C(void)
+{
+ u16 backup_sbr_field_e;
+ sub_80BC474();
+ IncrementGameStat(GAME_STAT_MOVED_SECRET_BASE);
+ backup_sbr_field_e = gSaveBlock1.secretBases[0].sbr_field_e;
+ ResetSecretBase(0);
+ gSaveBlock1.secretBases[0].sbr_field_e = backup_sbr_field_e;
+}
+
+u8 sub_80BC538(void)
+{
+ s16 i;
+ u8 count = 0;
+ for (i=1; i<20; i++)
+ {
+ if (sub_80BC268(i) == TRUE)
+ count++;
+ }
+ return count;
+}
+
+void sub_80BC56C(void)
+{
+ if (sub_80BC268(sub_80BC14C(gUnknown_020387DC)) == TRUE)
+ gScriptResult = 1;
+ else if (sub_80BC538() > 9)
+ gScriptResult = 2;
+ else
+ gScriptResult = 0;
+}
+
+void sub_80BC5BC(void)
+{
+ gSaveBlock1.secretBases[sub_80BC14C(gUnknown_020387DC)].sbr_field_1_6 ^= 1;
+ FlagSet(0x10c);
+}
+
+void SecretBasePC_Decoration(void)
+{
+ CreateTask(Task_SecretBasePC_Decoration, 0);
+}
+
+void SecretBasePC_Registry(void)
+{
+ CreateTask(Task_SecretBasePC_Registry, 0);
+}
+
+// This function tries to keep gTasks + 8 in a register. It should not.
+#ifdef NONMATCHING
+void Task_SecretBasePC_Registry(u8 taskId)
+{
+ s16 *data;
+ ScriptContext2_Enable();
+ sub_80F944C();
+ LoadScrollIndicatorPalette();
+ data = gTasks[taskId].data;
+ if ((data[0] = sub_80BC538()) != 0)
+ {
+ data[3] = max(data[0], 7);
+ data[1] = 0;
+ data[2] = 0;
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+ sub_80BC7D8(taskId);
+ gTasks[taskId].func = sub_80BC824;
+ }
+ else
+ {
+ DisplayItemMessageOnField(taskId, gSecretBaseText_NoRegistry, sub_80BCC54, 0);
+ }
+}
+#else
+__attribute__((naked))
+void Task_SecretBasePC_Registry(u8 taskId)
+{
+ asm_unified("\tpush {r4,r5,lr}\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r5, r0, 24\n"
+ "\tbl ScriptContext2_Enable\n"
+ "\tbl sub_80F944C\n"
+ "\tbl LoadScrollIndicatorPalette\n"
+ "\tlsls r0, r5, 2\n"
+ "\tadds r0, r5\n"
+ "\tlsls r0, 3\n"
+ "\tldr r1, _080BC688 @ =gTasks + 0x8\n"
+ "\tadds r4, r0, r1\n"
+ "\tbl sub_80BC538\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tstrh r0, [r4]\n"
+ "\tadds r1, r0, 0\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _080BC694\n"
+ "\tcmp r1, 0x7\n"
+ "\tble _080BC65E\n"
+ "\tmovs r0, 0x7\n"
+ "_080BC65E:\n"
+ "\tstrh r0, [r4, 0x6]\n"
+ "\tmovs r0, 0\n"
+ "\tstrh r0, [r4, 0x2]\n"
+ "\tstrh r0, [r4, 0x4]\n"
+ "\tmovs r0, 0\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r2, 0x1D\n"
+ "\tmovs r3, 0x13\n"
+ "\tbl MenuZeroFillWindowRect\n"
+ "\tadds r0, r5, 0\n"
+ "\tbl sub_80BC7D8\n"
+ "\tldr r1, _080BC68C @ =gTasks\n"
+ "\tlsls r0, r5, 2\n"
+ "\tadds r0, r5\n"
+ "\tlsls r0, 3\n"
+ "\tadds r0, r1\n"
+ "\tldr r1, _080BC690 @ =sub_80BC824\n"
+ "\tstr r1, [r0]\n"
+ "\tb _080BC6A0\n"
+ "\t.align 2, 0\n"
+ "_080BC688: .4byte gTasks + 0x8\n"
+ "_080BC68C: .4byte gTasks\n"
+ "_080BC690: .4byte sub_80BC824\n"
+ "_080BC694:\n"
+ "\tldr r1, _080BC6A8 @ =gSecretBaseText_NoRegistry\n"
+ "\tldr r2, _080BC6AC @ =sub_80BCC54\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r3, 0\n"
+ "\tbl DisplayItemMessageOnField\n"
+ "_080BC6A0:\n"
+ "\tpop {r4,r5}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_080BC6A8: .4byte gSecretBaseText_NoRegistry\n"
+ "_080BC6AC: .4byte sub_80BCC54");
+}
+#endif
+
+void sub_80BC6B0(u8 taskId)
+{
+ u8 i;
+ s16 *data = gTasks[taskId].data;
+ u8 m = 0;
+ u8 n = 0;
+ for (i=1; i<20; i++)
+ {
+ if (m == data[2])
+ {
+ m = i;
+ break;
+ }
+ if (sub_80BC268(i) == TRUE)
+ m ++;
+ }
+ for (i=m; i<20; i++)
+ {
+ if (sub_80BC268(i) == TRUE)
+ {
+ sub_80BC190(gStringVar1, i);
+ MenuFillWindowRectWithBlankTile(18, 2 * n + 2, 28, 2 * n + 3);
+ MenuPrint(gStringVar1, 18, 2 * n + 2);
+ if (++n == 8)
+ break;
+ }
+ }
+ if (n < 8)
+ {
+ MenuFillWindowRectWithBlankTile(18, 2 * n + 2, 28, 2 * n + 3);
+ MenuPrint(gUnknownText_Exit, 18, 2 * n + 2);
+ DestroyVerticalScrollIndicator(1);
+ if (n != 7)
+ MenuFillWindowRectWithBlankTile(18, ((n << 25) + (1 << 26)) >> 24, 28, 18); // needed to match
+ }
+ else
+ CreateVerticalScrollIndicators(1, 0xbc, 0x98);
+ if (data[2] == 0)
+ DestroyVerticalScrollIndicator(0);
+ else
+ CreateVerticalScrollIndicators(0, 0xbc, 0x08);
+}
+
+void sub_80BC7D8(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ MenuDrawTextWindow(17, 0, 29, 19);
+ InitMenu(0, 18, 2, data[3] + 1, data[1], 11);
+ sub_80BC6B0(taskId);
+}
+
+void sub_80BC824(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ if (data[1] != 0)
+ {
+ PlaySE(SE_SELECT);
+ data[1] = MoveMenuCursor(-1);
+ }
+ else if (data[2] != 0)
+ {
+ PlaySE(SE_SELECT);
+ data[2]--;
+ sub_80BC6B0(taskId);
+ }
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ if (data[1] == data[3])
+ {
+ if (data[2] + data[1] != data[0])
+ {
+ PlaySE(SE_SELECT);
+ data[2]++;
+ sub_80BC6B0(taskId);
+ }
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ data[1] = MoveMenuCursor(+1);
+ }
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ if (data[1] + data[2] == data[0])
+ {
+ HandleDestroyMenuCursors();
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+ sub_80BCC54(taskId);
+ }
+ else
+ {
+ HandleDestroyMenuCursors();
+ data[4] = sub_80BC948(data[1] + data[2]);
+ sub_80BC980(taskId);
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ HandleDestroyMenuCursors();
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+ sub_80BCC54(taskId);
+ }
+}
+
+u8 sub_80BC948(u8 a0)
+{
+ u8 n = 0;
+ u8 i;
+ for (i=1; i<20; i++)
+ {
+ if (sub_80BC268(i) == TRUE)
+ {
+ if (a0 == n)
+ return i;
+ n++;
+ }
+ }
+ return 0;
+}
+
+void sub_80BC980(u8 taskId)
+{
+ PauseVerticalScrollIndicator(0);
+ PauseVerticalScrollIndicator(1);
+ MenuDrawTextWindow(1, 0, 12, 5);
+ PrintMenuItems(2, 1, 2, (const struct MenuAction *)gUnknown_083D13D4);
+ InitMenu(0, 2, 1, 2, 0, 10);
+ gTasks[taskId].func = sub_80BC9E4;
+}
+
+void sub_80BC9E4(u8 taskId)
+{
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ if (GetMenuCursorPos() != 0)
+ {
+ PlaySE(SE_SELECT);
+ MoveMenuCursor(-1);
+ }
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ if (GetMenuCursorPos() != 1)
+ {
+ PlaySE(SE_SELECT);
+ MoveMenuCursor(+1);
+ }
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ gUnknown_083D13D4[GetMenuCursorPos()].func(taskId);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sub_80BCBF8(taskId);
+ }
+}
+
+void sub_80BCA84(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(1);
+ HandleDestroyMenuCursors();
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+ sub_80BC190(gStringVar1, data[4]);
+ StringExpandPlaceholders(gStringVar4, gOtherText_OkayToDeleteFromRegistry);
+ DisplayItemMessageOnField(taskId, gStringVar4, sub_80BCAEC, 0);
+}
+
+void sub_80BCAEC(u8 taskId)
+{
+ DisplayYesNoMenu(20, 8, 1);
+ DoYesNoFuncWithChoice(taskId, &gUnknown_083D13E4);
+}
+
+void sub_80BCB10(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+ gSaveBlock1.secretBases[data[4]].sbr_field_1_6 = 0;
+ data[0]--;
+ if (data[2] > 0)
+ data[2]--;
+ if (data[0] < 8)
+ data[3]--;
+ sub_80BC7D8(taskId);
+ gTasks[taskId].func = sub_80BC824;
+}
+
+void sub_80BCB90(u8 taskId)
+{
+ MenuZeroFillWindowRect(20, 8, 26, 13);
+ DisplayItemMessageOnField(taskId, gOtherText_RegisteredDataDeleted, sub_80BCB10, 0);
+}
+
+void sub_80BCBC0(u8 taskId)
+{
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+ sub_80BC7D8(taskId);
+ gTasks[taskId].func = sub_80BC824;
+}
+
+void sub_80BCBF8(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ InitMenu(0, 18, 2, data[3] + 1, data[1], 11);
+ MenuZeroFillWindowRect(1, 0, 12, 5);
+ StartVerticalScrollIndicators(0);
+ StartVerticalScrollIndicators(1);
+ gTasks[taskId].func = sub_80BC824;
+}
+
+void sub_80BCC54(u8 taskId)
+{
+ u16 var54 = VarGet(VAR_0x4054);
+ BuyMenuFreeMemory();
+ DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(1);
+ if (var54 == 0)
+ {
+ ScriptContext1_SetupScript(gUnknown_0815F399);
+ }
+ else
+ {
+ ScriptContext1_SetupScript(gUnknown_0815F49A);
+ }
+ DestroyTask(taskId);
+}
+
+u8 sub_80BCCA4(u8 sbid)
+{
+ return (gSaveBlock1.secretBases[sbid].trainerId[0] % 5) + gSaveBlock1.secretBases[sbid].gender * 5;
+}
+
+const u8 *sub_80BCCE8(void)
+{
+ u8 param = sub_80BCCA4(VarGet(VAR_0x4054));
+ if (param == 0) return UnknownString_81A1BB2;
+ if (param == 1) return UnknownString_81A1F67;
+ if (param == 2) return UnknownString_81A2254;
+ if (param == 3) return UnknownString_81A25C3;
+ if (param == 4) return UnknownString_81A2925;
+ if (param == 5) return UnknownString_81A1D74;
+ if (param == 6) return UnknownString_81A20C9;
+ if (param == 7) return UnknownString_81A2439;
+ if (param == 8) return UnknownString_81A2754;
+ return UnknownString_81A2B2A;
+}