diff options
-rw-r--r-- | asm/oak_speech.s | 737 | ||||
-rw-r--r-- | data/data_845FD54.s | 4 | ||||
-rw-r--r-- | include/event_scripts.h | 8 | ||||
-rw-r--r-- | include/menu.h | 1 | ||||
-rw-r--r-- | include/new_menu_helpers.h | 1 | ||||
-rw-r--r-- | src/oak_speech.c | 289 |
6 files changed, 284 insertions, 756 deletions
diff --git a/asm/oak_speech.s b/asm/oak_speech.s index 29cfd154d..928ac6c6c 100644 --- a/asm/oak_speech.s +++ b/asm/oak_speech.s @@ -5,743 +5,6 @@ .text - thumb_func_start sub_812FDC0 -sub_812FDC0: @ 812FDC0 - push {r4-r6,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _0812FDEC @ =gTasks+0x8 - adds r1, r0, r1 - movs r2, 0x4 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _0812FE72 - ldrh r0, [r1, 0x6] - movs r2, 0x6 - ldrsh r4, [r1, r2] - cmp r4, 0 - beq _0812FDF0 - subs r0, 0x1 - strh r0, [r1, 0x6] - b _0812FE72 - .align 2, 0 -_0812FDEC: .4byte gTasks+0x8 -_0812FDF0: - movs r2, 0x3C - negs r2, r2 - adds r0, r2, 0 - strh r0, [r1, 0x2] - bl sub_8131310 - movs r0, 0 - movs r1, 0 - bl sub_80F6EE4 - ldr r2, _0812FE34 @ =gUnknown_81C59D5 - ldr r5, _0812FE38 @ =gStringVar4 - cmp r2, r5 - beq _0812FE40 - adds r0, r5, 0 - adds r1, r2, 0 - bl StringExpandPlaceholders - ldr r0, _0812FE3C @ =sOakSpeechResources - ldr r0, [r0] - ldrb r3, [r0, 0x1F] - str r4, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x4 - adds r2, r5, 0 - bl AddTextPrinterParametrized - b _0812FE5C - .align 2, 0 -_0812FE34: .4byte gUnknown_81C59D5 -_0812FE38: .4byte gStringVar4 -_0812FE3C: .4byte sOakSpeechResources -_0812FE40: - ldr r0, _0812FE7C @ =sOakSpeechResources - ldr r0, [r0] - ldrb r3, [r0, 0x1F] - str r4, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x4 - bl AddTextPrinterParametrized -_0812FE5C: - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldr r0, _0812FE80 @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, _0812FE84 @ =sub_812FE88 - str r0, [r1] -_0812FE72: - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0812FE7C: .4byte sOakSpeechResources -_0812FE80: .4byte gTasks -_0812FE84: .4byte sub_812FE88 - thumb_func_end sub_812FDC0 - - thumb_func_start sub_812FE88 -sub_812FE88: @ 812FE88 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0 - bl IsTextPrinterActive - lsls r0, 16 - lsrs r7, r0, 16 - cmp r7, 0 - bne _0812FF7E - ldr r0, _0812FF8C @ =gUnknown_8462EC8 - bl AddWindow - ldr r1, _0812FF90 @ =gTasks - lsls r5, r4, 2 - adds r5, r4 - lsls r5, 3 - adds r5, r1 - strh r0, [r5, 0x22] - lsls r0, 24 - lsrs r0, 24 - bl PutWindowTilemap - ldrh r4, [r5, 0x22] - lsls r4, 24 - lsrs r4, 24 - bl sub_80F796C - adds r2, r0, 0 - lsls r2, 16 - lsrs r2, 16 - adds r0, r4, 0 - movs r1, 0x1 - movs r3, 0xE - bl SetWindowBorderStyle - ldrh r0, [r5, 0x22] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r4, _0812FF94 @ =sOakSpeechResources - ldr r0, [r4] - movs r1, 0x1 - mov r9, r1 - mov r1, r9 - strb r1, [r0, 0x1C] - ldr r0, [r4] - movs r6, 0x2 - strb r6, [r0, 0x1D] - ldr r0, [r4] - movs r1, 0x3 - mov r8, r1 - mov r1, r8 - strb r1, [r0, 0x1E] - ldrh r0, [r5, 0x22] - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - adds r1, 0x1C - str r1, [sp] - str r7, [sp, 0x4] - ldr r1, _0812FF98 @ =gUnknown_8415D93 - str r1, [sp, 0x8] - movs r1, 0x2 - movs r2, 0x8 - movs r3, 0x1 - bl box_print - ldr r0, [r4] - mov r1, r9 - strb r1, [r0, 0x1C] - ldr r0, [r4] - strb r6, [r0, 0x1D] - ldr r0, [r4] - mov r1, r8 - strb r1, [r0, 0x1E] - ldrh r0, [r5, 0x22] - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - adds r1, 0x1C - str r1, [sp] - str r7, [sp, 0x4] - ldr r1, _0812FF9C @ =gUnknown_8415D97 - str r1, [sp, 0x8] - movs r1, 0x2 - movs r2, 0x8 - movs r3, 0x11 - bl box_print - movs r0, 0x2 - movs r1, 0x1 - bl GetFontAttribute - adds r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r5, 0x22] - lsls r1, 24 - lsrs r1, 24 - str r0, [sp] - str r6, [sp, 0x4] - str r7, [sp, 0x8] - adds r0, r1, 0 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x1 - bl sub_810F7D8 - ldrh r0, [r5, 0x22] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x3 - bl CopyWindowToVram - ldr r0, _0812FFA0 @ =sub_812FFA4 - str r0, [r5] -_0812FF7E: - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812FF8C: .4byte gUnknown_8462EC8 -_0812FF90: .4byte gTasks -_0812FF94: .4byte sOakSpeechResources -_0812FF98: .4byte gUnknown_8415D93 -_0812FF9C: .4byte gUnknown_8415D97 -_0812FFA0: .4byte sub_812FFA4 - thumb_func_end sub_812FE88 - - thumb_func_start sub_812FFA4 -sub_812FFA4: @ 812FFA4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl ProcessMenuInputNoWrapAround - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _0812FFC8 - cmp r1, 0 - bgt _0812FFC4 - movs r0, 0x2 - negs r0, r0 - cmp r1, r0 - blt _0812FFCE - b _0812FFDC -_0812FFC4: - cmp r1, 0x1 - bne _0812FFCE -_0812FFC8: - ldr r0, _0812FFE4 @ =gSaveBlock2Ptr - ldr r0, [r0] - strb r1, [r0, 0x8] -_0812FFCE: - ldr r0, _0812FFE8 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _0812FFEC @ =sub_812FFF0 - str r0, [r1] -_0812FFDC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812FFE4: .4byte gSaveBlock2Ptr -_0812FFE8: .4byte gTasks -_0812FFEC: .4byte sub_812FFF0 - thumb_func_end sub_812FFA4 - - thumb_func_start sub_812FFF0 -sub_812FFF0: @ 812FFF0 - push {r4-r6,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - lsls r5, r0, 2 - adds r5, r0 - lsls r5, 3 - ldr r6, _08130048 @ =gTasks+0x8 - adds r4, r5, r6 - ldrb r0, [r4, 0x1A] - movs r1, 0x1 - bl sub_810F4D8 - ldrb r0, [r4, 0x1A] - bl RemoveWindow - movs r0, 0 - strh r0, [r4, 0x1A] - movs r0, 0 - movs r1, 0x1 - bl sub_80F6F54 - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0 - bl CopyBgTilemapBufferToVram - subs r6, 0x8 - adds r5, r6 - ldr r0, _0813004C @ =sub_8130050 - str r0, [r5] - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08130048: .4byte gTasks+0x8 -_0813004C: .4byte sub_8130050 - thumb_func_end sub_812FFF0 - - thumb_func_start sub_8130050 -sub_8130050: @ 8130050 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0813006C @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - cmp r0, 0 - bne _08130070 - movs r0, 0 - movs r1, 0 - bl sub_81311F4 - b _08130078 - .align 2, 0 -_0813006C: .4byte gSaveBlock2Ptr -_08130070: - movs r0, 0x1 - movs r1, 0 - bl sub_81311F4 -_08130078: - adds r0, r4, 0 - movs r1, 0x2 - bl sub_81315CC - ldr r1, _08130098 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - movs r1, 0x20 - strh r1, [r0, 0xE] - ldr r1, _0813009C @ =sub_81300A0 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08130098: .4byte gTasks -_0813009C: .4byte sub_81300A0 - thumb_func_end sub_8130050 - - thumb_func_start sub_81300A0 -sub_81300A0: @ 81300A0 - push {r4-r6,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _081300CC @ =gTasks+0x8 - adds r1, r0, r1 - movs r2, 0x4 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _0813014A - ldrh r0, [r1, 0x6] - movs r2, 0x6 - ldrsh r4, [r1, r2] - cmp r4, 0 - beq _081300D0 - subs r0, 0x1 - strh r0, [r1, 0x6] - b _0813014A - .align 2, 0 -_081300CC: .4byte gTasks+0x8 -_081300D0: - strh r4, [r1, 0x2] - movs r0, 0 - movs r1, 0 - bl sub_80F6EE4 - ldr r2, _0813010C @ =gUnknown_81C5DEA - ldr r5, _08130110 @ =gStringVar4 - cmp r2, r5 - beq _08130118 - adds r0, r5, 0 - adds r1, r2, 0 - bl StringExpandPlaceholders - ldr r0, _08130114 @ =sOakSpeechResources - ldr r0, [r0] - ldrb r3, [r0, 0x1F] - str r4, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x4 - adds r2, r5, 0 - bl AddTextPrinterParametrized - b _08130134 - .align 2, 0 -_0813010C: .4byte gUnknown_81C5DEA -_08130110: .4byte gStringVar4 -_08130114: .4byte sOakSpeechResources -_08130118: - ldr r0, _08130154 @ =sOakSpeechResources - ldr r0, [r0] - ldrb r3, [r0, 0x1F] - str r4, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x4 - bl AddTextPrinterParametrized -_08130134: - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldr r0, _08130158 @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, _0813015C @ =sub_8130160 - str r0, [r1] -_0813014A: - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08130154: .4byte sOakSpeechResources -_08130158: .4byte gTasks -_0813015C: .4byte sub_8130160 - thumb_func_end sub_81300A0 - - thumb_func_start sub_8130160 -sub_8130160: @ 8130160 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - movs r0, 0 - bl IsTextPrinterActive - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0 - bne _0813019A - movs r0, 0x1 - negs r0, r0 - str r4, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _081301A4 @ =sOakSpeechResources - ldr r0, [r0] - strh r4, [r0, 0x10] - ldr r1, _081301A8 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _081301AC @ =sub_81303B4 - str r1, [r0] -_0813019A: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081301A4: .4byte sOakSpeechResources -_081301A8: .4byte gTasks -_081301AC: .4byte sub_81303B4 - thumb_func_end sub_8130160 - - thumb_func_start sub_81301B0 -sub_81301B0: @ 81301B0 - 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, _081301F8 @ =gTasks+0x8 - adds r4, r6, r7 - movs r0, 0 - bl IsTextPrinterActive - lsls r0, 16 - cmp r0, 0 - bne _08130218 - ldrh r2, [r4, 0x2] - movs r1, 0x2 - ldrsh r0, [r4, r1] - movs r1, 0x3C - negs r1, r1 - cmp r0, r1 - ble _08130200 - subs r0, r2, 0x2 - strh r0, [r4, 0x2] - ldr r1, _081301FC @ =gSpriteCoordOffsetX - ldrh r0, [r1] - adds r0, 0x2 - strh r0, [r1] - movs r1, 0x80 - lsls r1, 2 - movs r0, 0x2 - movs r2, 0x2 - bl ChangeBgX - b _08130218 - .align 2, 0 -_081301F8: .4byte gTasks+0x8 -_081301FC: .4byte gSpriteCoordOffsetX -_08130200: - strh r1, [r4, 0x2] - ldr r0, _08130220 @ =sOakSpeechResources - ldr r0, [r0] - ldrb r1, [r0, 0x10] - adds r0, r5, 0 - bl sub_8131660 - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _08130224 @ =sub_8130324 - str r1, [r0] -_08130218: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08130220: .4byte sOakSpeechResources -_08130224: .4byte sub_8130324 - thumb_func_end sub_81301B0 - - thumb_func_start sub_8130228 -sub_8130228: @ 8130228 - push {r4-r6,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r4, _08130278 @ =sOakSpeechResources - ldr r0, [r4] - ldrb r1, [r0, 0x10] - adds r0, r6, 0 - bl sub_8131660 - ldr r0, [r4] - ldrh r4, [r0, 0x10] - cmp r4, 0 - bne _081302A6 - movs r0, 0 - movs r1, 0 - bl sub_80F6EE4 - ldr r2, _0813027C @ =gUnknown_81C5DEA - ldr r5, _08130280 @ =gStringVar4 - cmp r2, r5 - beq _08130284 - adds r0, r5, 0 - adds r1, r2, 0 - bl StringExpandPlaceholders - str r4, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x4 - adds r2, r5, 0 - movs r3, 0 - bl AddTextPrinterParametrized - b _0813029C - .align 2, 0 -_08130278: .4byte sOakSpeechResources -_0813027C: .4byte gUnknown_81C5DEA -_08130280: .4byte gStringVar4 -_08130284: - str r4, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x4 - movs r3, 0 - bl AddTextPrinterParametrized -_0813029C: - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - b _08130306 -_081302A6: - movs r0, 0 - movs r1, 0 - bl sub_80F6EE4 - ldr r2, _081302DC @ =gUnknown_81C5E91 - ldr r4, _081302E0 @ =gStringVar4 - cmp r2, r4 - beq _081302E4 - adds r0, r4, 0 - adds r1, r2, 0 - bl StringExpandPlaceholders - movs r0, 0 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x4 - adds r2, r4, 0 - movs r3, 0 - bl AddTextPrinterParametrized - b _081302FE - .align 2, 0 -_081302DC: .4byte gUnknown_81C5E91 -_081302E0: .4byte gStringVar4 -_081302E4: - movs r0, 0 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x4 - movs r3, 0 - bl AddTextPrinterParametrized -_081302FE: - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram -_08130306: - ldr r0, _0813031C @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, _08130320 @ =sub_8130324 - str r0, [r1] - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813031C: .4byte gTasks -_08130320: .4byte sub_8130324 - thumb_func_end sub_8130228 - - thumb_func_start sub_8130324 -sub_8130324: @ 8130324 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r6, r1, 3 - ldr r7, _0813037C @ =gTasks+0x8 - adds r5, r6, r7 - bl ProcessMenuInput - lsls r0, 24 - asrs r4, r0, 24 - cmp r4, 0 - beq _08130388 - cmp r4, 0 - ble _081303A8 - cmp r4, 0x4 - bgt _081303A8 - movs r0, 0x5 - bl PlaySE - ldrb r0, [r5, 0x1A] - movs r1, 0x1 - bl sub_810F4D8 - ldrb r0, [r5, 0x1A] - bl RemoveWindow - ldr r0, _08130380 @ =sOakSpeechResources - ldr r0, [r0] - ldrb r0, [r0, 0x10] - subs r1, r4, 0x1 - lsls r1, 24 - lsrs r1, 24 - bl sub_8131754 - movs r0, 0x1 - strh r0, [r5, 0x1E] - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _08130384 @ =sub_8130464 - b _081303A6 - .align 2, 0 -_0813037C: .4byte gTasks+0x8 -_08130380: .4byte sOakSpeechResources -_08130384: .4byte sub_8130464 -_08130388: - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - negs r0, r0 - str r4, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _081303B0 @ =sub_81303B4 -_081303A6: - str r1, [r0] -_081303A8: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081303B0: .4byte sub_81303B4 - thumb_func_end sub_8130324 - thumb_func_start sub_81303B4 sub_81303B4: @ 81303B4 push {r4-r6,lr} diff --git a/data/data_845FD54.s b/data/data_845FD54.s index a5755b8db..67c69c261 100644 --- a/data/data_845FD54.s +++ b/data/data_845FD54.s @@ -77,10 +77,10 @@ gUnknown_8462EC0:: @ 8462EC0 window_template 0x00, 0x01, 0x04, 0x1c, 0x0f, 0x0f, 0x0001 gUnknown_8462EC8:: @ 8462EC8 - .incbin "baserom.gba", 0x462EC8, 0x8 + window_template 0x00, 0x12, 0x09, 0x09, 0x04, 0x0f, 0x0174 gUnknown_8462ED0:: @ 8462ED0 - .incbin "baserom.gba", 0x462ED0, 0x8 + window_template 0x00, 0x02, 0x02, 0x06, 0x04, 0x0f, 0x0180 gUnknown_8462ED8:: @ 8462ED8 .incbin "baserom.gba", 0x462ED8, 0x10 diff --git a/include/event_scripts.h b/include/event_scripts.h index 6c26ef892..9b31a084f 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -706,5 +706,13 @@ extern const u8 gFameCheckerFlavorTextOriginObjectName_Giovanni4[]; extern const u8 gFameCheckerFlavorTextOriginObjectName_Giovanni5[]; extern const u8 gUnknown_81C582D[]; +extern const u8 gUnknown_81C59D5[]; +extern const u8 gUnknown_81C5C78[]; +extern const u8 gUnknown_81C5D06[]; +extern const u8 gUnknown_81C5D12[]; +extern const u8 gUnknown_81C5D4B[]; +extern const u8 gUnknown_81C5DBD[]; +extern const u8 gUnknown_81C5DEA[]; +extern const u8 gUnknown_81C5E91[]; #endif //GUARD_EVENT_SCRIPTS_H diff --git a/include/menu.h b/include/menu.h index cdc872a6d..41119db4f 100644 --- a/include/menu.h +++ b/include/menu.h @@ -43,5 +43,6 @@ void sub_810F650(const u8 *, const u8 *, u8, u32, u8); void sub_810F5E8(const u8 *, u32, u8); void sub_810F71C(void); void sub_810F740(void); +void sub_810F7D8(u8, u8, u8, u8, u8, u8, u8); #endif // GUARD_MENU_H diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h index 8903f5d56..0157896cb 100644 --- a/include/new_menu_helpers.h +++ b/include/new_menu_helpers.h @@ -28,5 +28,6 @@ void sub_80F6C6C(void); void sub_80F6C98(void); void sub_80F77CC(u16); void * malloc_and_decompress(const void * src, u32 * size); +u16 sub_80F796C(void); #endif // GUARD_NEW_MENU_HELPERS_H diff --git a/src/oak_speech.c b/src/oak_speech.c index 93275bc08..19c603c99 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -26,10 +26,11 @@ struct OakSpeechResources void * unk_0000; u8 filler_0004[0x4]; void * unk_0008; - u8 filler_000C[6]; + u8 filler_000C[4]; + u16 unk_0010; u16 unk_0012; - u16 unk_0014[3]; - u8 filler_001A[5]; + u16 unk_0014[4]; + u8 unk_001C[3]; u8 unk_001F; u8 filler_0020[0x1800]; u8 bg2TilemapBuffer[0x400]; @@ -58,20 +59,30 @@ void sub_812FBF0(u8 taskId); void sub_812FC68(u8 taskId); void sub_812FD78(u8 taskId); void sub_812FDC0(u8 taskId); +void sub_812FE88(u8 taskId); +void sub_812FFA4(u8 taskId); +void sub_812FFF0(u8 taskId); +void sub_8130050(u8 taskId); +void sub_81300A0(u8 taskId); +void sub_8130160(u8 taskId); +void sub_8130324(u8 taskId); +void sub_81303B4(u8 taskId); +void sub_8130464(u8 taskId); void sub_8130F2C(u8 taskId); void sub_8130FD4(u8 taskId, u8 state); void sub_8131168(u8 taskId, u8 state); -void sub_81311F4(u8 taskId, u8 state); +void sub_81311F4(u8 arg0, u8 state); +void sub_8131310(void); void sub_813144C(u8 taskId, u8 state); +void sub_81315CC(u8 taskId, u8 state); +void sub_8131660(u8 taskId, u8 state); +void sub_8131754(u8 arg0, u8 namePick); extern const u8 gUnknown_8415D2C[]; extern const u8 gUnknown_8415D48[]; extern const u8 gUnknown_8415D50[]; -extern const u8 gUnknown_81C5C78[]; -extern const u8 gUnknown_81C5D06[]; -extern const u8 gUnknown_81C5D12[]; -extern const u8 gUnknown_81C5D4B[]; -extern const u8 gUnknown_81C5DBD[]; +extern const u8 gUnknown_8415D93[]; +extern const u8 gUnknown_8415D97[]; const u8 gUnknown_845FD54[][5] = { [SPECIES_BULBASAUR - 1] = {0x16, 0x1b, 0x30, 0x16, 0x29}, @@ -501,6 +512,7 @@ extern const u16 gUnknown_8460E34[]; extern const struct BgTemplate gUnknown_8462E58[3]; extern const struct WindowTemplate *const gUnknown_8462EB4[3]; extern const struct WindowTemplate gUnknown_8462EC0; +extern const struct WindowTemplate gUnknown_8462EC8; extern const struct TextColor gUnknown_8462EE8; extern const struct TextColor gUnknown_8462EEC; extern const u8 *const gUnknown_8462EF0[]; @@ -1015,16 +1027,16 @@ void sub_812F7C0(u8 taskId) } } -#define OaksSpeechPrintMessage(str) ({ \ +#define OaksSpeechPrintMessage(str, speed) ({ \ sub_80F6EE4(0, FALSE);\ if (str != gStringVar4) \ { \ StringExpandPlaceholders(gStringVar4, str); \ - AddTextPrinterParametrized(0, 4, gStringVar4, sOakSpeechResources->unk_001F, NULL, 2, 1, 3); \ + AddTextPrinterParametrized(0, 4, gStringVar4, speed, NULL, 2, 1, 3); \ } \ else \ { \ - AddTextPrinterParametrized(0, 4, str, sOakSpeechResources->unk_001F, NULL, 2, 1, 3); \ + AddTextPrinterParametrized(0, 4, str, speed, NULL, 2, 1, 3); \ } \ CopyWindowToVram(0, 3); \ }) @@ -1039,7 +1051,7 @@ void sub_812F880(u8 taskId) data[3]--; else { - OaksSpeechPrintMessage(gUnknown_81C5C78); + OaksSpeechPrintMessage(gUnknown_81C5C78, sOakSpeechResources->unk_001F); gTasks[taskId].func = sub_812F944; } } @@ -1049,7 +1061,7 @@ void sub_812F944(u8 taskId) { if (!IsTextPrinterActive(0)) { - OaksSpeechPrintMessage(gUnknown_81C5D06); + OaksSpeechPrintMessage(gUnknown_81C5D06, sOakSpeechResources->unk_001F); gTasks[taskId].data[3] = 30; gTasks[taskId].func = sub_812F9EC; } @@ -1087,7 +1099,7 @@ void sub_812FA78(u8 taskId) gTasks[taskId].data[3]++; if (gTasks[taskId].data[3] == 32) { - OaksSpeechPrintMessage(gUnknown_81C5D12); + OaksSpeechPrintMessage(gUnknown_81C5D12, sOakSpeechResources->unk_001F); PlayCry1(SPECIES_NIDORAN_F, 0); } } @@ -1097,7 +1109,7 @@ void sub_812FB4C(u8 taskId) { if (!IsTextPrinterActive(0)) { - OaksSpeechPrintMessage(gUnknown_81C5D4B); + OaksSpeechPrintMessage(gUnknown_81C5D4B, sOakSpeechResources->unk_001F); gTasks[taskId].func = sub_812FBF0; } } @@ -1142,7 +1154,7 @@ void sub_812FC68(u8 taskId) } else { - OaksSpeechPrintMessage(gUnknown_81C5DBD); + OaksSpeechPrintMessage(gUnknown_81C5DBD, sOakSpeechResources->unk_001F); gTasks[taskId].func = sub_812FD78; } } @@ -1160,3 +1172,246 @@ void sub_812FD78(u8 taskId) gTasks[taskId].func = sub_812FDC0; } } + +void sub_812FDC0(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (data[2] != 0) + { + if (data[3] != 0) + data[3]--; + else + { + data[1] = -60; + sub_8131310(); + OaksSpeechPrintMessage(gUnknown_81C59D5, sOakSpeechResources->unk_001F); + gTasks[taskId].func = sub_812FE88; + } + } +} + +void sub_812FE88(u8 taskId) +{ + if (!IsTextPrinterActive(0)) + { + gTasks[taskId].data[13] = AddWindow(&gUnknown_8462EC8); + PutWindowTilemap(gTasks[taskId].data[13]); + SetWindowBorderStyle(gTasks[taskId].data[13], 1, sub_80F796C(), 14); + FillWindowPixelBuffer(gTasks[taskId].data[13], 0x11); + sOakSpeechResources->unk_001C[0] = 1; + sOakSpeechResources->unk_001C[1] = 2; + sOakSpeechResources->unk_001C[2] = 3; + box_print(gTasks[taskId].data[13], 2, 8, 1, sOakSpeechResources->unk_001C, 0, gUnknown_8415D93); + sOakSpeechResources->unk_001C[0] = 1; + sOakSpeechResources->unk_001C[1] = 2; + sOakSpeechResources->unk_001C[2] = 3; + box_print(gTasks[taskId].data[13], 2, 8, 17, sOakSpeechResources->unk_001C, 0, gUnknown_8415D97); + sub_810F7D8(gTasks[taskId].data[13], 2, 0, 1, GetFontAttribute(2, 1) + 2, 2, 0); + CopyWindowToVram(gTasks[taskId].data[13], 3); + gTasks[taskId].func = sub_812FFA4; + } +} + +void sub_812FFA4(u8 taskId) +{ + s8 input = ProcessMenuInputNoWrapAround(); + switch (input) + { + case 0: + gSaveBlock2Ptr->playerGender = MALE; + break; + case 1: + gSaveBlock2Ptr->playerGender = FEMALE; + break; + case -1: + case -2: + return; + } + gTasks[taskId].func = sub_812FFF0; + +} + +void sub_812FFF0(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + sub_810F4D8(data[13], 1); + RemoveWindow(data[13]); + data[13] = 0; + sub_80F6F54(0, 1); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gTasks[taskId].func = sub_8130050; +} + +void sub_8130050(u8 taskId) +{ + if (gSaveBlock2Ptr->playerGender == MALE) + sub_81311F4(MALE, 0); + else + sub_81311F4(FEMALE, 0); + sub_81315CC(taskId, 2); + gTasks[taskId].data[3] = 32; + gTasks[taskId].func = sub_81300A0; +} + +void sub_81300A0(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (data[2] != 0) + { + if (data[3] != 0) + data[3]--; + else + { + data[1] = 0; + OaksSpeechPrintMessage(gUnknown_81C5DEA, sOakSpeechResources->unk_001F); + gTasks[taskId].func = sub_8130160; + } + } +} + +void sub_8130160(u8 taskId) +{ + if (!IsTextPrinterActive(0)) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sOakSpeechResources->unk_0010 = 0; + gTasks[taskId].func = sub_81303B4; + } +} +void sub_81301B0(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (!IsTextPrinterActive(0)) + { + if (data[1] > -60) + { + data[1] -= 2; + gSpriteCoordOffsetX += 2; + ChangeBgX(2, 0x200, 2); + } + else + { + data[1] = -60; + sub_8131660(taskId, sOakSpeechResources->unk_0010); + gTasks[taskId].func = sub_8130324; + } + } +} + +void sub_8130228(u8 taskId) +{ + sub_8131660(taskId, sOakSpeechResources->unk_0010); + if (sOakSpeechResources->unk_0010 == 0) + { + OaksSpeechPrintMessage(gUnknown_81C5DEA, 0); + } + else + { + OaksSpeechPrintMessage(gUnknown_81C5E91, 0); + } + gTasks[taskId].func = sub_8130324; +} + +#ifdef NONMATCHING +// switch case uses blt, should use ble +void sub_8130324(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + s8 input = ProcessMenuInput(); + + switch (input) + { + case 1: + case 2: + case 3: + case 4: + PlaySE(SE_SELECT); + sub_810F4D8(data[13], TRUE); + RemoveWindow(data[13]); + sub_8131754(sOakSpeechResources->unk_0010, input - 1); + data[15] = 1; + gTasks[taskId].func = sub_8130464; + break; + case 0: + PlaySE(SE_SELECT); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = sub_81303B4; + break; + } +} +#else +NAKED +void sub_8130324(u8 taskId) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tsub sp, 0x4\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tlsls r1, r0, 2\n" + "\tadds r1, r0\n" + "\tlsls r6, r1, 3\n" + "\tldr r7, _0813037C @ =gTasks+0x8\n" + "\tadds r5, r6, r7\n" + "\tbl ProcessMenuInput\n" + "\tlsls r0, 24\n" + "\tasrs r4, r0, 24\n" + "\tcmp r4, 0\n" + "\tbeq _08130388\n" + "\tcmp r4, 0\n" + "\tble _081303A8\n" + "\tcmp r4, 0x4\n" + "\tbgt _081303A8\n" + "\tmovs r0, 0x5\n" + "\tbl PlaySE\n" + "\tldrb r0, [r5, 0x1A]\n" + "\tmovs r1, 0x1\n" + "\tbl sub_810F4D8\n" + "\tldrb r0, [r5, 0x1A]\n" + "\tbl RemoveWindow\n" + "\tldr r0, _08130380 @ =sOakSpeechResources\n" + "\tldr r0, [r0]\n" + "\tldrb r0, [r0, 0x10]\n" + "\tsubs r1, r4, 0x1\n" + "\tlsls r1, 24\n" + "\tlsrs r1, 24\n" + "\tbl sub_8131754\n" + "\tmovs r0, 0x1\n" + "\tstrh r0, [r5, 0x1E]\n" + "\tadds r0, r7, 0\n" + "\tsubs r0, 0x8\n" + "\tadds r0, r6, r0\n" + "\tldr r1, _08130384 @ =sub_8130464\n" + "\tb _081303A6\n" + "\t.align 2, 0\n" + "_0813037C: .4byte gTasks+0x8\n" + "_08130380: .4byte sOakSpeechResources\n" + "_08130384: .4byte sub_8130464\n" + "_08130388:\n" + "\tmovs r0, 0x5\n" + "\tbl PlaySE\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r4, [sp]\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x10\n" + "\tbl BeginNormalPaletteFade\n" + "\tadds r0, r7, 0\n" + "\tsubs r0, 0x8\n" + "\tadds r0, r6, r0\n" + "\tldr r1, _081303B0 @ =sub_81303B4\n" + "_081303A6:\n" + "\tstr r1, [r0]\n" + "_081303A8:\n" + "\tadd sp, 0x4\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_081303B0: .4byte sub_81303B4"); +} +#endif //NONMATCHING |