diff options
author | Marcus Huderle <huderlem@gmail.com> | 2017-10-15 14:36:53 -0700 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2017-10-15 14:36:53 -0700 |
commit | fcd62bf39372bbb26e21f3dfb67ccf1782954834 (patch) | |
tree | 065d2081953cfbec1bfcca3f3f9b335f580290e8 | |
parent | 7d657ef56716fd01bacf4a47df50ad0ec3d03b10 (diff) |
Start decomp on rest of secret_base
-rw-r--r-- | asm/secret_base.s | 1157 | ||||
-rw-r--r-- | include/decoration.h | 1 | ||||
-rw-r--r-- | include/global.fieldmap.h | 10 | ||||
-rw-r--r-- | include/global.h | 2 | ||||
-rw-r--r-- | include/secret_base.h | 2 | ||||
-rw-r--r-- | src/field/secret_base.c | 684 |
6 files changed, 679 insertions, 1177 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/include/decoration.h b/include/decoration.h index 2e72e305a..bd8c41d1e 100644 --- a/include/decoration.h +++ b/include/decoration.h @@ -292,6 +292,7 @@ extern bool8 sub_807D770(void); extern void sub_8109DAC(u8); // src/trader extern void ReshowPlayerPC(u8); // src/player_pc +void Task_SecretBasePC_Decoration(u8 taskId); void sub_80FE2B4(void); void Task_DecorationPCProcessMenuInput(u8); void sub_80FE394(void); diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 5c93eb8ab..7a8cc4592 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -111,11 +111,11 @@ struct CoordEvent struct BgEvent { - u16 x, y; - u8 unk4; - u8 kind; - // 0x2 padding for the union beginning. - union { // carried over from diego's FR/LG work, seems to be the same struct + /*0x00*/u16 x; + /*0x02*/u16 y; + /*0x04*/u8 unk4; + /*0x05*/u8 kind; + /*0x08*/union { // carried over from diego's FR/LG work, seems to be the same struct // in gen 3, "kind" (0x3 in BgEvent struct) determines the method to read the union. u8 *script; diff --git a/include/global.h b/include/global.h index f0eb7401f..51c599a73 100644 --- a/include/global.h +++ b/include/global.h @@ -130,7 +130,7 @@ struct UCoords16 struct SecretBaseRecord { - /*ID?*/ /*0x1A08*/ u8 sbr_field_0; + /*ID?*/ /*0x1A08*/ u8 secretBaseId; /*0x1A09*/ u8 sbr_field_1_0:4; /*0x1A09*/ u8 gender:1; /*0x1A09*/ u8 sbr_field_1_5:1; diff --git a/include/secret_base.h b/include/secret_base.h index bb747bb02..0318445ec 100644 --- a/include/secret_base.h +++ b/include/secret_base.h @@ -9,7 +9,7 @@ void sub_80BC038(); u8 sub_80BC050(); u8 *GetSecretBaseMapName(u8 *); void sub_80BC300(); -const u8 sub_80BCCA4(u8); +u8 sub_80BCCA4(u8); u8 *sub_80BCCE8(void); void sub_80BCF1C(u8); void sub_80BD674(void *, u32, u8); diff --git a/src/field/secret_base.c b/src/field/secret_base.c index f221d7f16..d60938d1b 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -11,17 +11,31 @@ #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" #include "overworld.h" #include "script.h" +#include "sound.h" #include "string_util.h" #include "strings.h" #include "task.h" #include "text.h" #include "vars.h" +extern void sub_80BCBF8(u8 taskId); +extern void sub_80BCC54(u8 taskId); +extern void sub_80BC824(u8 taskId); +extern void sub_80BC7D8(u8 taskId); +static void sub_80BCAEC(u8 taskId); +static void sub_80BC980(u8 taskId); +static void sub_80BC9E4(u8 taskId); +static u8 sub_80BC948(u8 a); +static void Task_SecretBasePC_Registry(u8 taskId); + +extern struct YesNoFuncTable gUnknown_083D13E4; +extern struct MenuAction gUnknown_083D13D4[]; extern u8 gUnknown_020387DC; extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; @@ -36,14 +50,26 @@ extern const struct extern const u8 gUnknown_083D1374[4 * 16]; extern void *gUnknown_0300485C; extern const u8 gUnknown_083D13EC[12]; +extern u8 gUnknown_0815F399[]; +extern u8 gUnknown_0815F49A[]; extern u8 gUnknown_081A2E14[]; +extern u8 UnknownString_81A1BB2[]; +extern u8 UnknownString_81A1F67[]; +extern u8 UnknownString_81A2254[]; +extern u8 UnknownString_81A25C3[]; +extern u8 UnknownString_81A2925[]; +extern u8 UnknownString_81A1D74[]; +extern u8 UnknownString_81A20C9[]; +extern u8 UnknownString_81A2439[]; +extern u8 UnknownString_81A2B2A[]; +extern u8 UnknownString_81A2754[]; void sub_80BB4AC(struct SecretBaseRecord *record) // 080bb4ac { u16 i; u16 j; - record->sbr_field_0 = 0; + record->secretBaseId = 0; for (i=0; i<7; i++) record->sbr_field_2[i] = 0xff; for (i=0; i<4; i++) @@ -93,7 +119,7 @@ void sub_80BB5E4(void) // 80bb5e4 u16 idx; gScriptResult = 0; for (idx=0; idx<20; idx++) { - if (gUnknown_020387DC != gSaveBlock1.secretBases[idx].sbr_field_0) + if (gUnknown_020387DC != gSaveBlock1.secretBases[idx].secretBaseId) continue; gScriptResult = 1; VarSet(VAR_0x4054, idx); @@ -103,7 +129,7 @@ void sub_80BB5E4(void) // 80bb5e4 void sub_80BB63C(void) // 80bb63c { - if (gSaveBlock1.secretBases[0].sbr_field_0) + if (gSaveBlock1.secretBases[0].secretBaseId) gScriptResult = 1; else gScriptResult = 0; @@ -196,7 +222,7 @@ void sub_80BB8CC(void) { u8 nameLength; u16 idx; - gSaveBlock1.secretBases[0].sbr_field_0 = gUnknown_020387DC; + gSaveBlock1.secretBases[0].secretBaseId = gUnknown_020387DC; for (idx=0; idx<4; idx++) { gSaveBlock1.secretBases[0].trainerId[idx] = gSaveBlock2.playerTrainerId[idx]; } @@ -215,7 +241,7 @@ void sub_80BB970(struct MapEvents *events) for (bgevidx=0; bgevidx<events->bgEventCount; bgevidx++) { if (events->bgEvents[bgevidx].kind == 8) { for (jdx=0; jdx<20; jdx++) { - if (gSaveBlock1.secretBases[jdx].sbr_field_0 == events->bgEvents[bgevidx].bgUnion.secretBaseId) { + if (gSaveBlock1.secretBases[jdx].secretBaseId == events->bgEvents[bgevidx].bgUnion.secretBaseId) { tile_id = MapGridGetMetatileIdAt(events->bgEvents[bgevidx].x + 7, events->bgEvents[bgevidx].y + 7); for (idx=0; idx<7; idx++) { if (gUnknown_083D1358[idx].unk_083D1358_0 == tile_id) { @@ -811,7 +837,7 @@ void sub_80BC0F8(void) { } void sub_80BC114(void) { - if (gSaveBlock1.secretBases[0].sbr_field_0 != gUnknown_020387DC) + if (gSaveBlock1.secretBases[0].secretBaseId != gUnknown_020387DC) gScriptResult = 1; else gScriptResult = 0; @@ -821,7 +847,7 @@ u8 sub_80BC14C(u8 sbid) { s16 idx; for (idx=0; idx<20; idx++) { - if (gSaveBlock1.secretBases[idx].sbr_field_0 == sbid) + if (gSaveBlock1.secretBases[idx].secretBaseId == sbid) return idx; } return 0; @@ -844,7 +870,7 @@ u8 *sub_80BC190(u8 *dest, u8 arg1) { // 80bc190 } u8 *GetSecretBaseMapName(u8 *dest) { - gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_0; + gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_0x4054)].secretBaseId; return sub_80BC190(dest, VarGet(VAR_0x4054)); } @@ -856,10 +882,10 @@ void sub_80BC224(void) { *var3 = EOS; } -u8 sub_80BC268(u8 foo) { // 80bc268 - if (gSaveBlock1.secretBases[foo].sbr_field_1_6) - return 1; - return 0; +bool8 sub_80BC268(u8 i) { // 80bc268 + if (gSaveBlock1.secretBases[i].sbr_field_1_6) + return TRUE; + return FALSE; } u8 sub_80BC298(struct Pokemon *mon) { // 80bc298 @@ -1070,6 +1096,638 @@ void sub_80BC440(void) void SecretBasePC_PackUp(void) { - IncrementGameStat(20); + IncrementGameStat(GAME_STAT_MOVED_SECRET_BASE); sub_80BC440(); } + +void sub_80BC474(void) +{ + u16 eventId; + struct MapEvents *mapEvents = gMapHeader.events; + for (eventId = 0; eventId < mapEvents->bgEventCount; eventId++) + { + if (mapEvents->bgEvents[eventId].kind == 8 + && gSaveBlock1.secretBases[0].secretBaseId == mapEvents->bgEvents[eventId].bgUnion.secretBaseId) + { + u16 i; + s16 tileId = MapGridGetMetatileIdAt(mapEvents->bgEvents[eventId].x + 7, mapEvents->bgEvents[eventId].y + 7); + + for (i = 0; i < 7; i++) + { + if (gUnknown_083D1358[i].unk_083D1358_1 == tileId) + { + MapGridSetMetatileIdAt( + mapEvents->bgEvents[eventId].x + 7, + mapEvents->bgEvents[eventId].y + 7, + gUnknown_083D1358[i].unk_083D1358_0 | 0xc00); + break; + } + } + + DrawWholeMapView(); + break; + } + } +} + +void sub_80BC50C(void) +{ + u16 backupValue; + sub_80BC474(); + IncrementGameStat(GAME_STAT_MOVED_SECRET_BASE); + + backupValue = gSaveBlock1.secretBases[0].sbr_field_e; + ResetSecretBase(0); + gSaveBlock1.secretBases[0].sbr_field_e = backupValue; +} + +u8 sub_80BC538(void) +{ + s16 secretBaseIndex; + u8 retVal = 0; + + for (secretBaseIndex = 1; secretBaseIndex < 20; secretBaseIndex++) + { + if (sub_80BC268(secretBaseIndex) == TRUE) + { + retVal++; + } + } + + return retVal; +} + +void sub_80BC56C(void) +{ + u8 secretBaseIndex = sub_80BC14C(gUnknown_020387DC); + if (sub_80BC268(secretBaseIndex) == 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); +} + +void Task_SecretBasePC_Registry(u8 taskId) +{ + s16 *taskData; + + ScriptContext2_Enable(); + sub_80F944C(); + LoadScrollIndicatorPalette(); + + taskData = &gTasks[taskId].data[0]; + taskData[0] = sub_80BC538(); + if (taskData[0] != 0) + { + if (taskData[0] > 7) { + taskData[3] = 7; + } + else + { + taskData[3] = taskData[0]; + } + + taskData[1] = 0; + taskData[2] = 0; + + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BC7D8(taskId); + + gTasks[taskId].func = sub_80BC824; + } + else + { + DisplayItemMessageOnField(taskId, gSecretBaseText_NoRegistry, sub_80BCC54, 0); + } +} + +#ifdef NONMATCHING +void sub_80BC6B0(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + u8 count = 0; + u8 var1 = 0; + u8 i = 1; + + if (var1 == taskData[2]) + { + count = 1; + } + else + { + while (1) + { + if (sub_80BC268(i) == TRUE) + { + count++; + } + + i++; + if (i > 19) + { + break; + } + + if (count == taskData[2]) + { + count = i; + break; + } + } + } + + while (count < 20) + { + if (sub_80BC268(count) == TRUE) + { + sub_80BC190(gStringVar1, count); + MenuFillWindowRectWithBlankTile(18, var1 * 2 + 2, 28, var1 * 2 + 3); + MenuPrint(gStringVar1, 18, var1 * 2 + 2); + + var1++; + if (var1 == 8) + { + break; + } + } + + count++; + } + + if (var1 < 8) + { + MenuFillWindowRectWithBlankTile(18, var1 * 2 + 2, 28, var1 * 2 + 3); + MenuPrint(gUnknownText_Exit, 18, var1 * 2 + 2); + DestroyVerticalScrollIndicator(1); + + if (var1 != 7) + { + MenuFillWindowRectWithBlankTile(18, (((var1 << 25) + 0x4000000)) >> 24, 28, 18); + } + } + else + { + CreateVerticalScrollIndicators(1, 188, 152); + } + + if (taskData[2] == 0) + { + DestroyVerticalScrollIndicator(0); + } + else + { + CreateVerticalScrollIndicators(0, 188, 8); + } +} +#else +__attribute__((naked)) +void sub_80BC6B0(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 3\n\ + ldr r0, _080BC6D8 @ =gTasks + 0x8\n\ + adds r1, r0\n\ + mov r8, r1\n\ + movs r4, 0\n\ + movs r6, 0\n\ + movs r5, 0x1\n\ + movs r2, 0x4\n\ + ldrsh r0, [r1, r2]\n\ + cmp r6, r0\n\ + bne _080BC6DC\n\ + movs r4, 0x1\n\ + b _080BC706\n\ + .align 2, 0\n\ +_080BC6D8: .4byte gTasks + 0x8\n\ +_080BC6DC:\n\ + adds r0, r5, 0\n\ + bl sub_80BC268\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _080BC6F0\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ +_080BC6F0:\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x13\n\ + bhi _080BC706\n\ + mov r1, r8\n\ + movs r2, 0x4\n\ + ldrsh r0, [r1, r2]\n\ + cmp r4, r0\n\ + bne _080BC6DC\n\ + adds r4, r5, 0\n\ +_080BC706:\n\ + adds r5, r4, 0\n\ + cmp r5, 0x13\n\ + bhi _080BC75A\n\ + ldr r7, _080BC7A0 @ =gStringVar1\n\ +_080BC70E:\n\ + adds r0, r5, 0\n\ + bl sub_80BC268\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _080BC750\n\ + adds r0, r7, 0\n\ + adds r1, r5, 0\n\ + bl sub_80BC190\n\ + lsls r3, r6, 1\n\ + adds r4, r3, 0x2\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + adds r3, 0x3\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + movs r0, 0x12\n\ + adds r1, r4, 0\n\ + movs r2, 0x1C\n\ + bl MenuFillWindowRectWithBlankTile\n\ + adds r0, r7, 0\n\ + movs r1, 0x12\n\ + adds r2, r4, 0\n\ + bl MenuPrint\n\ + adds r0, r6, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0x8\n\ + beq _080BC75A\n\ +_080BC750:\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x13\n\ + bls _080BC70E\n\ +_080BC75A:\n\ + cmp r6, 0x7\n\ + bhi _080BC7A8\n\ + lsls r3, r6, 1\n\ + adds r4, r3, 0x2\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + adds r3, 0x3\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + movs r0, 0x12\n\ + adds r1, r4, 0\n\ + movs r2, 0x1C\n\ + bl MenuFillWindowRectWithBlankTile\n\ + ldr r0, _080BC7A4 @ =gUnknownText_Exit\n\ + movs r1, 0x12\n\ + adds r2, r4, 0\n\ + bl MenuPrint\n\ + movs r0, 0x1\n\ + bl DestroyVerticalScrollIndicator\n\ + cmp r6, 0x7\n\ + beq _080BC7B2\n\ + lsls r1, r6, 25\n\ + movs r0, 0x80\n\ + lsls r0, 19\n\ + adds r1, r0\n\ + lsrs r1, 24\n\ + movs r0, 0x12\n\ + movs r2, 0x1C\n\ + movs r3, 0x12\n\ + bl MenuFillWindowRectWithBlankTile\n\ + b _080BC7B2\n\ + .align 2, 0\n\ +_080BC7A0: .4byte gStringVar1\n\ +_080BC7A4: .4byte gUnknownText_Exit\n\ +_080BC7A8:\n\ + movs r0, 0x1\n\ + movs r1, 0xBC\n\ + movs r2, 0x98\n\ + bl CreateVerticalScrollIndicators\n\ +_080BC7B2:\n\ + mov r1, r8\n\ + movs r2, 0x4\n\ + ldrsh r0, [r1, r2]\n\ + cmp r0, 0\n\ + bne _080BC7C4\n\ + movs r0, 0\n\ + bl DestroyVerticalScrollIndicator\n\ + b _080BC7CE\n\ +_080BC7C4:\n\ + movs r0, 0\n\ + movs r1, 0xBC\n\ + movs r2, 0x8\n\ + bl CreateVerticalScrollIndicators\n\ +_080BC7CE:\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif + +void sub_80BC7D8(u8 taskId) +{ + u16 *taskData = &gTasks[taskId].data[0]; + MenuDrawTextWindow(17, 0, 29, 19); + InitMenu(0, 18, 2, taskData[3] + 1, taskData[1], 11); + sub_80BC6B0(taskId); +} + +void sub_80BC824(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (taskData[1]) + { + PlaySE(5); + taskData[1] = MoveMenuCursor(-1); + } + else if (taskData[2]) + { + PlaySE(5); + taskData[2]--; + sub_80BC6B0(taskId); + } + else + { + return; + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (taskData[1] == taskData[3]) + { + if (taskData[2] + taskData[1] != taskData[0]) + { + PlaySE(5); + taskData[2]++; + sub_80BC6B0(taskId); + } + } + else + { + PlaySE(5); + taskData[1] = MoveMenuCursor(1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(5); + if (taskData[1] + taskData[2] == taskData[0]) + { + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BCC54(taskId); + } + else + { + HandleDestroyMenuCursors(); + taskData[4] = sub_80BC948(taskData[1] + taskData[2]); + sub_80BC980(taskId); + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(5); + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BCC54(taskId); + } +} + +u8 sub_80BC948(u8 a) +{ + u8 secretBaseIndex; + u8 count = 0; + + for (secretBaseIndex = 1; secretBaseIndex < 20; secretBaseIndex++) + { + if (sub_80BC268(secretBaseIndex) == TRUE) + { + if (a == count) + { + return secretBaseIndex; + } + else + { + count++; + } + } + } + + return 0; +} + +void sub_80BC980(u8 taskId) +{ + PauseVerticalScrollIndicator(0); + PauseVerticalScrollIndicator(1); + MenuDrawTextWindow(1, 0, 12, 5); + PrintMenuItems(2, 1, 2, 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()) + { + PlaySE(5); + MoveMenuCursor(-1); + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (GetMenuCursorPos() != 1) + { + PlaySE(5); + MoveMenuCursor(1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(5); + gUnknown_083D13D4[GetMenuCursorPos()].func(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(5); + sub_80BCBF8(taskId); + } +} + +void sub_80BCA84(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + DestroyVerticalScrollIndicator(0); + DestroyVerticalScrollIndicator(1); + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + + sub_80BC190(gStringVar1, taskData[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 *taskData = gTasks[taskId].data; + + MenuZeroFillWindowRect(0, 0, 29, 19); + + gSaveBlock1.secretBases[taskData[4]].sbr_field_1_6 = 0; + taskData[0]--; + + if (taskData[2] > 0) + { + taskData[2]--; + } + + if (taskData[0] < 8) + { + taskData[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 *taskData = gTasks[taskId].data; + + InitMenu(0, 18, 2, taskData[3] + 1, taskData[1], 11); + MenuZeroFillWindowRect(1, 0, 12, 5); + StartVerticalScrollIndicators(0); + StartVerticalScrollIndicators(1); + + gTasks[taskId].func = sub_80BC824; +} + +void sub_80BCC54(u8 taskId) +{ + u16 curBaseIndex = VarGet(VAR_0x4054); + + BuyMenuFreeMemory(); + DestroyVerticalScrollIndicator(0); + DestroyVerticalScrollIndicator(1); + + if (curBaseIndex == 0) + { + ScriptContext1_SetupScript(gUnknown_0815F399); + } + else + { + ScriptContext1_SetupScript(gUnknown_0815F49A); + } + + DestroyTask(taskId); +} + +u8 sub_80BCCA4(u8 secretBaseIndex) +{ + return (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_2[7] % 5) + + gSaveBlock1.secretBases[secretBaseIndex].gender * 5; +} + +u8 *sub_80BCCE8(void) +{ + u8 var1 = sub_80BCCA4(VarGet(VAR_0x4054)); + + if (var1 == 0) + { + return UnknownString_81A1BB2; + } + else if (var1 == 1) + { + return UnknownString_81A1F67; + } + else if (var1 == 2) + { + return UnknownString_81A2254; + } + else if (var1 == 3) + { + return UnknownString_81A25C3; + } + else if (var1 == 4) + { + return UnknownString_81A2925; + } + else if (var1 == 5) + { + return UnknownString_81A1D74; + } + else if (var1 == 6) + { + return UnknownString_81A20C9; + } + else if (var1 == 7) + { + return UnknownString_81A2439; + } + else if (var1 == 8) + { + return UnknownString_81A2754; + } + else + { + return UnknownString_81A2B2A; + } +} |