diff options
-rw-r--r-- | asm/secret_base.s | 1157 | ||||
-rw-r--r-- | data/secret_base.s | 77 | ||||
-rw-r--r-- | include/decoration.h | 1 | ||||
-rw-r--r-- | include/global.h | 2 | ||||
-rw-r--r-- | include/secret_base.h | 5 | ||||
-rw-r--r-- | include/use_pokeblock.h | 13 | ||||
-rw-r--r-- | include/vars.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/battle/battle_setup.c | 2 | ||||
-rw-r--r-- | src/field/secret_base.c | 743 |
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; +} |