From 05724d3db1208ffdb867aba5aa9441d538ba9e26 Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 16 Nov 2019 19:45:55 -0700 Subject: remove compile errors --- asm/option_menu.s | 1337 ----------------------------------------------------- data/strings.s | 14 +- include/global.h | 10 +- include/strings.h | 11 + ld_script.txt | 2 +- src/option_menu.c | 594 ++++++++++++++++++++++++ sym_ewram.txt | 2 +- 7 files changed, 619 insertions(+), 1351 deletions(-) delete mode 100644 asm/option_menu.s create mode 100644 src/option_menu.c diff --git a/asm/option_menu.s b/asm/option_menu.s deleted file mode 100644 index 3b08810c5..000000000 --- a/asm/option_menu.s +++ /dev/null @@ -1,1337 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_808835C -sub_808835C: @ 808835C - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_808835C - - thumb_func_start sub_8088374 -sub_8088374: @ 8088374 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_8088374 - - thumb_func_start CB2_OptionsMenuFromStartMenu -CB2_OptionsMenuFromStartMenu: @ 8088388 - push {r4-r6,lr} - ldr r1, _08088418 @ =gMain - ldr r0, [r1, 0x8] - cmp r0, 0 - bne _08088396 - ldr r0, _0808841C @ =CB2_ReturnToStartMenu - str r0, [r1, 0x8] -_08088396: - ldr r4, _08088420 @ =gUnknown_2039620 - movs r0, 0x14 - bl AllocZeroed - str r0, [r4] - movs r1, 0 - strb r1, [r0, 0x10] - ldr r0, [r4] - strb r1, [r0, 0x12] - ldr r0, [r4] - strb r1, [r0, 0x11] - ldr r2, [r4] - strh r1, [r2, 0xE] - ldr r0, _08088424 @ =gSaveBlock2Ptr - ldr r1, [r0] - ldrb r0, [r1, 0x14] - lsls r0, 29 - lsrs r0, 29 - strh r0, [r2] - ldrb r0, [r1, 0x15] - lsls r0, 29 - lsrs r0, 31 - strh r0, [r2, 0x2] - ldrb r0, [r1, 0x15] - lsls r0, 30 - lsrs r0, 31 - strh r0, [r2, 0x4] - ldrb r0, [r1, 0x15] - lsls r0, 31 - lsrs r0, 31 - strh r0, [r2, 0x6] - ldrb r0, [r1, 0x13] - strh r0, [r2, 0x8] - ldrb r0, [r1, 0x14] - lsrs r0, 3 - strh r0, [r2, 0xA] - movs r3, 0 - adds r6, r4, 0 - ldr r5, _08088428 @ =gUnknown_83CC304 - movs r4, 0 -_080883E6: - ldr r1, [r6] - lsls r0, r3, 1 - adds r2, r1, r0 - ldrh r1, [r2] - adds r0, r5 - ldrh r0, [r0] - subs r0, 0x1 - cmp r1, r0 - ble _080883FA - strh r4, [r2] -_080883FA: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x5 - bls _080883E6 - movs r0, 0xD - bl HelpSystem_SetSomeVariable2 - ldr r0, _0808842C @ =sub_8088454 - bl SetMainCallback2 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08088418: .4byte gMain -_0808841C: .4byte CB2_ReturnToStartMenu -_08088420: .4byte gUnknown_2039620 -_08088424: .4byte gSaveBlock2Ptr -_08088428: .4byte gUnknown_83CC304 -_0808842C: .4byte sub_8088454 - thumb_func_end CB2_OptionsMenuFromStartMenu - - thumb_func_start sub_8088430 -sub_8088430: @ 8088430 - push {lr} - movs r0, 0 - bl SetVBlankCallback - movs r0, 0 - bl SetHBlankCallback - pop {r0} - bx r0 - thumb_func_end sub_8088430 - - thumb_func_start sub_8088444 -sub_8088444: @ 8088444 - push {lr} - ldr r0, _08088450 @ =sub_8088374 - bl SetVBlankCallback - pop {r0} - bx r0 - .align 2, 0 -_08088450: .4byte sub_8088374 - thumb_func_end sub_8088444 - - thumb_func_start sub_8088454 -sub_8088454: @ 8088454 - push {r4,lr} - ldr r0, _0808846C @ =gUnknown_2039620 - ldr r0, [r0] - ldrb r0, [r0, 0x11] - cmp r0, 0x9 - bhi _080884FA - lsls r0, 2 - ldr r1, _08088470 @ =_08088474 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0808846C: .4byte gUnknown_2039620 -_08088470: .4byte _08088474 - .align 2, 0 -_08088474: - .4byte _0808849C - .4byte _080884A2 - .4byte _080884A8 - .4byte _080884AE - .4byte _080884BC - .4byte _080884C2 - .4byte _080884C8 - .4byte _080884CE - .4byte _080884E2 - .4byte _080884F4 -_0808849C: - bl sub_8088430 - b _080884FE -_080884A2: - bl sub_8088530 - b _080884FE -_080884A8: - bl sub_80886D4 - b _080884FE -_080884AE: - bl sub_80886F0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08088508 - b _080884FE -_080884BC: - bl sub_8088BD0 - b _080884FE -_080884C2: - bl sub_8088C0C - b _080884FE -_080884C8: - bl sub_8088D8C - b _080884FE -_080884CE: - movs r4, 0 -_080884D0: - adds r0, r4, 0 - bl sub_80889A8 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x6 - bls _080884D0 - b _080884FE -_080884E2: - ldr r0, _080884F0 @ =gUnknown_2039620 - ldr r0, [r0] - ldrh r0, [r0, 0xE] - bl sub_8088DE0 - b _080884FE - .align 2, 0 -_080884F0: .4byte gUnknown_2039620 -_080884F4: - bl sub_8088680 - b _080884FE -_080884FA: - bl sub_8088514 -_080884FE: - ldr r0, _08088510 @ =gUnknown_2039620 - ldr r1, [r0] - ldrb r0, [r1, 0x11] - adds r0, 0x1 - strb r0, [r1, 0x11] -_08088508: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08088510: .4byte gUnknown_2039620 - thumb_func_end sub_8088454 - - thumb_func_start sub_8088514 -sub_8088514: @ 8088514 - push {lr} - ldr r0, _08088528 @ =sub_8088780 - movs r1, 0 - bl CreateTask - ldr r0, _0808852C @ =sub_808835C - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_08088528: .4byte sub_8088780 -_0808852C: .4byte sub_808835C - thumb_func_end sub_8088514 - - thumb_func_start sub_8088530 -sub_8088530: @ 8088530 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r3, 0xC0 - lsls r3, 19 - movs r4, 0xC0 - lsls r4, 9 - add r0, sp, 0x4 - mov r8, r0 - mov r2, sp - movs r6, 0 - ldr r1, _08088670 @ =0x040000d4 - movs r5, 0x80 - lsls r5, 5 - ldr r7, _08088674 @ =0x81000800 - movs r0, 0x81 - lsls r0, 24 - mov r12, r0 -_08088556: - strh r6, [r2] - mov r0, sp - str r0, [r1] - str r3, [r1, 0x4] - str r7, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r3, r5 - subs r4, r5 - cmp r4, r5 - bhi _08088556 - strh r6, [r2] - mov r2, sp - str r2, [r1] - str r3, [r1, 0x4] - lsrs r0, r4, 1 - mov r2, r12 - orrs r0, r2 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r0, 0xE0 - lsls r0, 19 - movs r3, 0x80 - lsls r3, 3 - movs r4, 0 - str r4, [sp, 0x4] - ldr r2, _08088670 @ =0x040000d4 - mov r1, r8 - str r1, [r2] - str r0, [r2, 0x4] - lsrs r0, r3, 2 - movs r1, 0x85 - lsls r1, 24 - orrs r0, r1 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r1, 0xA0 - lsls r1, 19 - mov r0, sp - strh r4, [r0] - str r0, [r2] - str r1, [r2, 0x4] - lsrs r3, 1 - movs r0, 0x81 - lsls r0, 24 - orrs r3, r0 - str r3, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _08088678 @ =gUnknown_83CC2D8 - movs r0, 0 - movs r2, 0x3 - bl InitBgsFromTemplates - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - ldr r0, _0808867C @ =gUnknown_83CC2B8 - bl InitWindows - bl DeactivateAllTextPrinters - movs r0, 0x50 - movs r1, 0xC1 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0x2 - bl SetGpuReg - movs r0, 0x48 - movs r1, 0x1 - bl SetGpuReg - movs r0, 0x4A - movs r1, 0x27 - bl SetGpuReg - movs r1, 0xC1 - lsls r1, 6 - movs r0, 0 - bl SetGpuReg - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08088670: .4byte 0x040000d4 -_08088674: .4byte 0x81000800 -_08088678: .4byte gUnknown_83CC2D8 -_0808867C: .4byte gUnknown_83CC2B8 - thumb_func_end sub_8088530 - - thumb_func_start sub_8088680 -sub_8088680: @ 8088680 - push {r4,r5,lr} - sub sp, 0xC - ldr r5, _080886CC @ =gUnknown_8419E57 - movs r0, 0 - adds r1, r5, 0 - movs r2, 0 - bl GetStringWidth - movs r4, 0xE4 - subs r4, r0 - movs r0, 0x2 - movs r1, 0xFF - bl FillWindowPixelBuffer - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080886D0 @ =gUnknown_83CC360 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x2 - movs r1, 0 - adds r2, r4, 0 - movs r3, 0 - bl AddTextPrinterParameterized3 - movs r0, 0x2 - bl PutWindowTilemap - movs r0, 0x2 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080886CC: .4byte gUnknown_8419E57 -_080886D0: .4byte gUnknown_83CC360 - thumb_func_end sub_8088680 - - thumb_func_start sub_80886D4 -sub_80886D4: @ 80886D4 - push {lr} - bl ResetSpriteData - bl ResetPaletteFade - bl FreeAllSpritePalettes - bl ResetTasks - bl ScanlineEffect_Stop - pop {r0} - bx r0 - thumb_func_end sub_80886D4 - - thumb_func_start sub_80886F0 -sub_80886F0: @ 80886F0 - push {lr} - ldr r0, _08088708 @ =gUnknown_2039620 - ldr r0, [r0] - ldrb r1, [r0, 0x12] - cmp r1, 0x1 - beq _0808872E - cmp r1, 0x1 - bgt _0808870C - cmp r1, 0 - beq _08088716 - b _08088768 - .align 2, 0 -_08088708: .4byte gUnknown_2039620 -_0808870C: - cmp r1, 0x2 - beq _0808873A - cmp r1, 0x3 - beq _08088758 - b _08088768 -_08088716: - ldrb r0, [r0, 0xA] - bl GetUserFrameGraphicsInfo - ldr r1, [r0] - movs r2, 0x90 - lsls r2, 1 - movs r3, 0xD5 - lsls r3, 1 - movs r0, 0x1 - bl LoadBgTiles - b _0808876C -_0808872E: - ldrb r0, [r0, 0xA] - bl GetUserFrameGraphicsInfo - ldr r0, [r0, 0x4] - movs r1, 0x20 - b _0808874C -_0808873A: - ldr r0, _08088754 @ =gUnknown_83CC2E4 - movs r1, 0x10 - movs r2, 0x20 - bl LoadPalette - movs r0, 0x2 - bl stdpal_get - movs r1, 0xF0 -_0808874C: - movs r2, 0x20 - bl LoadPalette - b _0808876C - .align 2, 0 -_08088754: .4byte gUnknown_83CC2E4 -_08088758: - ldr r1, _08088764 @ =0x000001b3 - movs r0, 0x1 - movs r2, 0x30 - bl sub_814FDA0 - b _0808876C - .align 2, 0 -_08088764: .4byte 0x000001b3 -_08088768: - movs r0, 0x1 - b _08088778 -_0808876C: - ldr r0, _0808877C @ =gUnknown_2039620 - ldr r1, [r0] - ldrb r0, [r1, 0x12] - adds r0, 0x1 - strb r0, [r1, 0x12] - movs r0, 0 -_08088778: - pop {r1} - bx r1 - .align 2, 0 -_0808877C: .4byte gUnknown_2039620 - thumb_func_end sub_80886F0 - - thumb_func_start sub_8088780 -sub_8088780: @ 8088780 - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _080887A0 @ =gUnknown_2039620 - ldr r0, [r1] - ldrb r0, [r0, 0x10] - adds r3, r1, 0 - cmp r0, 0x5 - bls _08088796 - b _080888B6 -_08088796: - lsls r0, 2 - ldr r1, _080887A4 @ =_080887A8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080887A0: .4byte gUnknown_2039620 -_080887A4: .4byte _080887A8 - .align 2, 0 -_080887A8: - .4byte _080887C0 - .4byte _08088894 - .4byte _080887E0 - .4byte _08088878 - .4byte _08088894 - .4byte _080888B0 -_080887C0: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - bl sub_8088444 - ldr r0, _080887DC @ =gUnknown_2039620 - ldr r1, [r0] - b _080888A2 - .align 2, 0 -_080887DC: .4byte gUnknown_2039620 -_080887E0: - bl sub_80BF72C - cmp r0, 0x1 - beq _080888B6 - bl sub_80888C0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bhi _080888B6 - lsls r0, 2 - ldr r1, _08088800 @ =_08088804 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08088800: .4byte _08088804 - .align 2, 0 -_08088804: - .4byte _080888B6 - .4byte _08088818 - .4byte _08088824 - .4byte _08088858 - .4byte _08088868 -_08088818: - ldr r0, _08088820 @ =gUnknown_2039620 - ldr r1, [r0] - b _080888A2 - .align 2, 0 -_08088820: .4byte gUnknown_2039620 -_08088824: - ldr r4, _08088854 @ =gUnknown_2039620 - ldr r0, [r4] - ldrb r0, [r0, 0xA] - bl GetUserFrameGraphicsInfo - ldr r1, [r0] - movs r2, 0x90 - lsls r2, 1 - movs r3, 0xD5 - lsls r3, 1 - movs r0, 0x1 - bl LoadBgTiles - ldr r0, [r4] - ldrb r0, [r0, 0xA] - bl GetUserFrameGraphicsInfo - ldr r0, [r0, 0x4] - movs r1, 0x20 - movs r2, 0x20 - bl LoadPalette - ldr r0, [r4] - b _0808886C - .align 2, 0 -_08088854: .4byte gUnknown_2039620 -_08088858: - ldr r0, _08088864 @ =gUnknown_2039620 - ldr r0, [r0] - ldrh r0, [r0, 0xE] - bl sub_8088DE0 - b _080888B6 - .align 2, 0 -_08088864: .4byte gUnknown_2039620 -_08088868: - ldr r0, _08088874 @ =gUnknown_2039620 - ldr r0, [r0] -_0808886C: - ldrb r0, [r0, 0xE] - bl sub_80889A8 - b _080888B6 - .align 2, 0 -_08088874: .4byte gUnknown_2039620 -_08088878: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _08088890 @ =gUnknown_2039620 - ldr r1, [r0] - b _080888A2 - .align 2, 0 -_08088890: .4byte gUnknown_2039620 -_08088894: - ldr r0, _080888AC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080888B6 - ldr r1, [r3] -_080888A2: - ldrb r0, [r1, 0x10] - adds r0, 0x1 - strb r0, [r1, 0x10] - b _080888B6 - .align 2, 0 -_080888AC: .4byte gPaletteFade -_080888B0: - adds r0, r2, 0 - bl sub_8088B00 -_080888B6: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8088780 - - thumb_func_start sub_80888C0 -sub_80888C0: @ 80888C0 - push {r4,lr} - ldr r3, _080888EC @ =gMain - ldrh r1, [r3, 0x30] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08088906 - ldr r2, _080888F0 @ =gUnknown_2039620 - ldr r1, [r2] - ldrh r0, [r1, 0xE] - lsls r0, 1 - adds r3, r1, r0 - ldrh r4, [r3] - ldr r1, _080888F4 @ =gUnknown_83CC304 - adds r0, r1 - ldrh r0, [r0] - subs r0, 0x1 - cmp r4, r0 - bne _080888F8 - movs r0, 0 - b _080888FA - .align 2, 0 -_080888EC: .4byte gMain -_080888F0: .4byte gUnknown_2039620 -_080888F4: .4byte gUnknown_83CC304 -_080888F8: - adds r0, r4, 0x1 -_080888FA: - strh r0, [r3] - ldr r0, [r2] - ldrh r0, [r0, 0xE] - cmp r0, 0x5 - beq _08088930 - b _0808893C -_08088906: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _08088940 - ldr r2, _08088934 @ =gUnknown_2039620 - ldr r1, [r2] - ldrh r0, [r1, 0xE] - lsls r3, r0, 1 - adds r1, r3 - ldrh r0, [r1] - cmp r0, 0 - bne _08088924 - ldr r0, _08088938 @ =gUnknown_83CC304 - adds r0, r3, r0 - ldrh r0, [r0] -_08088924: - subs r0, 0x1 - strh r0, [r1] - ldr r0, [r2] - ldrh r0, [r0, 0xE] - cmp r0, 0x5 - bne _0808893C -_08088930: - movs r0, 0x2 - b _080889A0 - .align 2, 0 -_08088934: .4byte gUnknown_2039620 -_08088938: .4byte gUnknown_83CC304 -_0808893C: - movs r0, 0x4 - b _080889A0 -_08088940: - movs r0, 0x40 - ands r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0 - beq _08088964 - ldr r0, _0808895C @ =gUnknown_2039620 - ldr r1, [r0] - ldrh r0, [r1, 0xE] - cmp r0, 0 - bne _08088960 - movs r0, 0x6 - b _08088982 - .align 2, 0 -_0808895C: .4byte gUnknown_2039620 -_08088960: - subs r0, 0x1 - b _08088982 -_08088964: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08088988 - ldr r0, _0808897C @ =gUnknown_2039620 - ldr r1, [r0] - ldrh r0, [r1, 0xE] - cmp r0, 0x6 - bne _08088980 - strh r2, [r1, 0xE] - b _08088984 - .align 2, 0 -_0808897C: .4byte gUnknown_2039620 -_08088980: - adds r0, 0x1 -_08088982: - strh r0, [r1, 0xE] -_08088984: - movs r0, 0x3 - b _080889A0 -_08088988: - ldrh r1, [r3, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0808899A - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0808899E -_0808899A: - movs r0, 0x1 - b _080889A0 -_0808899E: - movs r0, 0 -_080889A0: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80888C0 - - thumb_func_start sub_80889A8 -sub_80889A8: @ 80889A8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x30 - lsls r0, 24 - lsrs r5, r0, 24 - add r4, sp, 0x2C - ldr r1, _08088A08 @ =gUnknown_83CC363 - adds r0, r4, 0 - movs r2, 0x3 - bl memcpy - movs r0, 0x82 - mov r8, r0 - movs r0, 0x2 - movs r1, 0x1 - bl GetFontAttribute - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x1 - muls r0, r5 - adds r0, 0x2 - lsls r0, 24 - lsrs r7, r0, 24 - movs r0, 0x2 - movs r1, 0x1 - bl GetFontAttribute - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x46 - str r1, [sp] - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0x82 - adds r3, r7, 0 - bl FillWindowPixelRect - adds r6, r4, 0 - cmp r5, 0x5 - bhi _08088ADE - lsls r0, r5, 2 - ldr r1, _08088A0C @ =_08088A10 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08088A08: .4byte gUnknown_83CC363 -_08088A0C: .4byte _08088A10 - .align 2, 0 -_08088A10: - .4byte _08088A28 - .4byte _08088A38 - .4byte _08088A48 - .4byte _08088A58 - .4byte _08088A68 - .4byte _08088A9C -_08088A28: - str r6, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - ldr r2, _08088A34 @ =gUnknown_83CC330 - b _08088A72 - .align 2, 0 -_08088A34: .4byte gUnknown_83CC330 -_08088A38: - str r6, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - ldr r2, _08088A44 @ =gUnknown_83CC33C - b _08088A72 - .align 2, 0 -_08088A44: .4byte gUnknown_83CC33C -_08088A48: - str r6, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - ldr r2, _08088A54 @ =gUnknown_83CC344 - b _08088A72 - .align 2, 0 -_08088A54: .4byte gUnknown_83CC344 -_08088A58: - str r6, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - ldr r2, _08088A64 @ =gUnknown_83CC34C - b _08088A72 - .align 2, 0 -_08088A64: .4byte gUnknown_83CC34C -_08088A68: - str r6, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - ldr r2, _08088A94 @ =gUnknown_83CC354 -_08088A72: - ldr r0, _08088A98 @ =gUnknown_2039620 - ldr r0, [r0] - lsls r1, r5, 1 - adds r0, r1 - ldrh r0, [r0] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - str r0, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x2 - mov r2, r8 - adds r3, r7, 0 - bl AddTextPrinterParameterized3 - b _08088ADE - .align 2, 0 -_08088A94: .4byte gUnknown_83CC354 -_08088A98: .4byte gUnknown_2039620 -_08088A9C: - ldr r1, _08088AF8 @ =gUnknown_8419E52 - add r0, sp, 0xC - bl StringCopy - add r4, sp, 0x20 - ldr r0, _08088AFC @ =gUnknown_2039620 - ldr r0, [r0] - lsls r1, r5, 1 - adds r0, r1 - ldrh r1, [r0] - adds r1, 0x1 - adds r0, r4, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - add r0, sp, 0xC - adds r1, r4, 0 - movs r2, 0x3 - bl StringAppendN - str r6, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - add r0, sp, 0xC - str r0, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x2 - mov r2, r8 - adds r3, r7, 0 - bl AddTextPrinterParameterized3 -_08088ADE: - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0x1 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0x30 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08088AF8: .4byte gUnknown_8419E52 -_08088AFC: .4byte gUnknown_2039620 - thumb_func_end sub_80889A8 - - thumb_func_start sub_8088B00 -sub_8088B00: @ 8088B00 - push {r4-r6,lr} - mov r6, r8 - push {r6} - mov r8, r0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r1, _08088BBC @ =gFieldCallback - ldr r0, _08088BC0 @ =sub_807DF64 - str r0, [r1] - ldr r0, _08088BC4 @ =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 - bl FreeAllWindowBuffers - ldr r3, _08088BC8 @ =gSaveBlock2Ptr - ldr r5, [r3] - ldr r4, _08088BCC @ =gUnknown_2039620 - ldr r0, [r4] - movs r2, 0x7 - ldrb r1, [r0] - ands r1, r2 - ldrb r2, [r5, 0x14] - movs r0, 0x8 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x14] - ldr r5, [r3] - ldr r0, [r4] - movs r6, 0x1 - ldrb r1, [r0, 0x2] - ands r1, r6 - lsls r1, 2 - ldrb r2, [r5, 0x15] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x15] - ldr r5, [r3] - ldr r0, [r4] - ldrb r1, [r0, 0x4] - ands r1, r6 - lsls r1, 1 - ldrb r2, [r5, 0x15] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x15] - ldr r5, [r3] - ldr r0, [r4] - ldrb r1, [r0, 0x6] - ands r1, r6 - ldrb r2, [r5, 0x15] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x15] - ldr r1, [r3] - ldr r0, [r4] - ldrh r0, [r0, 0x8] - movs r6, 0 - strb r0, [r1, 0x13] - ldr r5, [r3] - ldr r0, [r4] - ldrb r1, [r0, 0xA] - lsls r1, 3 - ldrb r2, [r5, 0x14] - movs r0, 0x7 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x14] - ldr r0, [r3] - ldrb r0, [r0, 0x15] - lsls r0, 31 - lsrs r0, 31 - bl SetPokemonCryStereo - ldr r0, [r4] - bl Free - str r6, [r4] - mov r0, r8 - bl DestroyTask - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08088BBC: .4byte gFieldCallback -_08088BC0: .4byte sub_807DF64 -_08088BC4: .4byte gMain -_08088BC8: .4byte gSaveBlock2Ptr -_08088BCC: .4byte gUnknown_2039620 - thumb_func_end sub_8088B00 - - thumb_func_start sub_8088BD0 -sub_8088BD0: @ 8088BD0 - push {lr} - sub sp, 0xC - movs r0, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r2, _08088C08 @ =gUnknown_8419DCC - movs r0, 0x1 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r1, 0x2 - movs r3, 0x8 - bl AddTextPrinterParameterized - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0xC - pop {r0} - bx r0 - .align 2, 0 -_08088C08: .4byte gUnknown_8419DCC - thumb_func_end sub_8088BD0 - - thumb_func_start sub_8088C0C -sub_8088C0C: @ 8088C0C - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC - movs r6, 0x2 - ldr r1, _08088D6C @ =0x000001b3 - movs r4, 0x1 - str r4, [sp] - str r4, [sp, 0x4] - movs r5, 0x3 - str r5, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x1 - movs r3, 0x2 - bl FillBgTilemapBufferRect - movs r1, 0xDA - lsls r1, 1 - movs r0, 0x1B - mov r8, r0 - str r0, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x2 - movs r3, 0x2 - bl FillBgTilemapBufferRect - ldr r1, _08088D70 @ =0x000001b5 - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x1C - movs r3, 0x2 - bl FillBgTilemapBufferRect - movs r1, 0xDB - lsls r1, 1 - str r4, [sp] - str r6, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x1 - movs r3, 0x3 - bl FillBgTilemapBufferRect - movs r1, 0xDC - lsls r1, 1 - str r4, [sp] - str r6, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x1C - movs r3, 0x3 - bl FillBgTilemapBufferRect - ldr r1, _08088D74 @ =0x000001b9 - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x1 - movs r3, 0x5 - bl FillBgTilemapBufferRect - movs r1, 0xDD - lsls r1, 1 - mov r0, r8 - str r0, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x2 - movs r3, 0x5 - bl FillBgTilemapBufferRect - ldr r1, _08088D78 @ =0x000001bb - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x1C - movs r3, 0x5 - bl FillBgTilemapBufferRect - movs r1, 0xD5 - lsls r1, 1 - str r4, [sp] - str r4, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x1 - movs r3, 0x6 - bl FillBgTilemapBufferRect - ldr r1, _08088D7C @ =0x000001ab - movs r0, 0x1A - mov r8, r0 - str r0, [sp] - str r4, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x2 - movs r3, 0x6 - bl FillBgTilemapBufferRect - movs r1, 0xD6 - lsls r1, 1 - str r4, [sp] - str r4, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x1C - movs r3, 0x6 - bl FillBgTilemapBufferRect - ldr r1, _08088D80 @ =0x000001ad - str r4, [sp] - movs r5, 0x10 - str r5, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x1 - movs r3, 0x7 - bl FillBgTilemapBufferRect - ldr r1, _08088D84 @ =0x000001af - str r4, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x1C - movs r3, 0x7 - bl FillBgTilemapBufferRect - movs r1, 0xD8 - lsls r1, 1 - str r4, [sp] - str r4, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x1 - movs r3, 0x13 - bl FillBgTilemapBufferRect - ldr r1, _08088D88 @ =0x000001b1 - mov r0, r8 - str r0, [sp] - str r4, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x2 - movs r3, 0x13 - bl FillBgTilemapBufferRect - movs r1, 0xD9 - lsls r1, 1 - str r4, [sp] - str r4, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x1C - movs r3, 0x13 - bl FillBgTilemapBufferRect - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08088D6C: .4byte 0x000001b3 -_08088D70: .4byte 0x000001b5 -_08088D74: .4byte 0x000001b9 -_08088D78: .4byte 0x000001bb -_08088D7C: .4byte 0x000001ab -_08088D80: .4byte 0x000001ad -_08088D84: .4byte 0x000001af -_08088D88: .4byte 0x000001b1 - thumb_func_end sub_8088C0C - - thumb_func_start sub_8088D8C -sub_8088D8C: @ 8088D8C - push {r4,lr} - sub sp, 0xC - movs r0, 0x1 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r4, 0 -_08088D9A: - movs r0, 0x2 - movs r1, 0x1 - bl GetFontAttribute - adds r1, r4, 0 - muls r1, r0 - adds r1, 0x2 - subs r1, r4 - lsls r1, 24 - lsrs r1, 24 - ldr r2, _08088DDC @ =gUnknown_83CC314 - lsls r0, r4, 2 - adds r0, r2 - ldr r2, [r0] - str r1, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x2 - movs r3, 0x8 - bl AddTextPrinterParameterized - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x6 - bls _08088D9A - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08088DDC: .4byte gUnknown_83CC314 - thumb_func_end sub_8088D8C - - thumb_func_start sub_8088DE0 -sub_8088DE0: @ 8088DE0 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - movs r0, 0x2 - movs r1, 0x1 - bl GetFontAttribute - lsls r0, 24 - lsrs r0, 24 - subs r1, r0, 0x1 - adds r2, r4, 0 - muls r2, r1 - adds r2, 0x3A - lsls r2, 16 - lsrs r2, 16 - lsls r1, r2, 8 - adds r2, r0 - orrs r1, r2 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x44 - bl SetGpuReg - movs r1, 0x87 - lsls r1, 5 - movs r0, 0x40 - bl SetGpuReg - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8088DE0 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/strings.s b/data/strings.s index 101946475..14a4472e3 100644 --- a/data/strings.s +++ b/data/strings.s @@ -2907,25 +2907,25 @@ gUnknown_8419D89:: @ 8419D89 gUnknown_8419DCC:: @ 8419DCC .string "OPTION$" -gUnknown_8419DD3:: @ 0x8419DD3 +gText_TextSpeed:: @ 0x8419DD3 .string "TEXT SPEED$" -gUnknown_8419DDE:: @ 0x8419DDE +gText_BattleScene:: @ 0x8419DDE .string "BATTLE SCENE$" -gUnknown_8419DEB:: @ 0x8419DEB +gText_BattleStyle:: @ 0x8419DEB .string "BATTLE STYLE$" -gUnknown_8419DF8:: @ 0x8419DF8 +gText_Sound:: @ 0x8419DF8 .string "SOUND$" -gUnknown_8419DFE:: @ 0x8419DFE +gText_ButtonMode:: @ 0x8419DFE .string "BUTTON MODE$" -gUnknown_8419E0A:: @ 0x8419E0A +gText_Frame:: @ 0x8419E0A .string "FRAME$" -gUnknown_8419E10:: @ 0x8419E10 +gText_OptionMenuCancel:: @ 0x8419E10 .string "CANCEL$" gUnknown_8419E17:: @ 0x8419E17 diff --git a/include/global.h b/include/global.h index 2f34de1a0..63c6923bd 100644 --- a/include/global.h +++ b/include/global.h @@ -291,11 +291,11 @@ struct SaveBlock2 /*0x012*/ u8 playTimeVBlanks; /*0x013*/ u8 optionsButtonMode; // OPTIONS_BUTTON_MODE_[NORMAL/LR/L_EQUALS_A] /*0x014*/ u16 optionsTextSpeed:3; // OPTIONS_TEXT_SPEED_[SLOW/MID/FAST] - u16 optionsWindowFrameType:5; // Specifies one of the 20 decorative borders for text boxes - u16 optionsSound:1; // OPTIONS_SOUND_[MONO/STEREO] - u16 optionsBattleStyle:1; // OPTIONS_BATTLE_STYLE_[SHIFT/SET] - u16 optionsBattleSceneOff:1; // whether battle animations are disabled - u16 regionMapZoom:1; // whether the map is zoomed in + u16 optionsWindowFrameType:5; // Specifies one of the 20 decorative borders for text boxes + /*0x15*/ u16 optionsSound:1; // OPTIONS_SOUND_[MONO/STEREO] + u16 optionsBattleStyle:1; // OPTIONS_BATTLE_STYLE_[SHIFT/SET] + u16 optionsBattleSceneOff:1; // whether battle animations are disabled + u16 regionMapZoom:1; // whether the map is zoomed in /*0x018*/ struct Pokedex pokedex; /*0x090*/ u8 filler_90[0x8]; /*0x098*/ struct Time localTimeOffset; diff --git a/include/strings.h b/include/strings.h index 377b6ea39..286a65190 100644 --- a/include/strings.h +++ b/include/strings.h @@ -763,4 +763,15 @@ extern const u8 gText_DecimalPoint[]; // map_name_popup extern const u8 gUnknown_841D18D[]; +// options menu +extern const u8 gText_TextSpeed[]; +extern const u8 gText_BattleScene[]; +extern const u8 gText_BattleStyle[]; +extern const u8 gText_Sound[]; +extern const u8 gText_ButtonMode[]; +extern const u8 gText_Frame[]; +extern const u8 gText_OptionMenuCancel[]; +extern const u8 gText_PickSwitchCancel[]; + + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index 50a3b3270..ddf3eaa47 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -128,7 +128,7 @@ SECTIONS { src/wild_encounter.o(.text); asm/field_effect.o(.text); src/scanline_effect.o(.text); - asm/option_menu.o(.text); + src/option_menu.o(.text); src/pokedex.o(.text); asm/trainer_card.o(.text); asm/pokemon_storage_system.o(.text); diff --git a/src/option_menu.c b/src/option_menu.c new file mode 100644 index 000000000..57de35f11 --- /dev/null +++ b/src/option_menu.c @@ -0,0 +1,594 @@ +#include "global.h" +#include "gpu_regs.h" +#include "scanline_effect.h" +#include "text_window_graphics.h" +#include "menu.h" +#include "menu_helpers.h" +#include "task.h" +#include "palette.h" +#include "overworld.h" +#include "malloc.h" +#include "help_system.h" +#include "main.h" +#include "bg.h" +#include "window.h" +#include "text.h" +#include "text_window.h" +#include "string_util.h" +#include "strings.h" +#include "field_fadetransition.h" +#include "gba/m4a_internal.h" + + +// Menu items +enum +{ + MENUITEM_TEXTSPEED = 0, + MENUITEM_BATTLESCENE, + MENUITEM_BATTLESTYLE, + MENUITEM_SOUND, + MENUITEM_BUTTONMODE, + MENUITEM_FRAMETYPE, + MENUITEM_CANCEL, + MENUITEM_COUNT, +}; +// Window Ids +enum +{ + WIN_TEXT_OPTION, + WIN_OPTIONS +}; + +//This file's functions +static void sub_808835C(void); +static void sub_8088374(void); +static void sub_8088430(void); +static void sub_8088444(void); +static void sub_8088454(void); +static void sub_8088514(void); +static void sub_8088530(void); +static void sub_8088680(void); +static void sub_80886D4(void); +static bool8 sub_80886F0(void); +static void sub_8088780(u8 taskId); +static u8 sub_80888C0(void); +static void sub_80889A8(u8 selection); +static void sub_8088B00(u8 taskId); +static void sub_8088BD0(void); +static void sub_8088C0C(void); +static void sub_8088D8C(void); +static void sub_8088DE0(u8 selection); + +extern const u16 gUnknown_83CC304[]; //sOptionsMenuItemCounts +extern const struct BgTemplate gUnknown_83CC2D8[]; +extern const u8 gUnknown_83CC360[]; +extern const u16 gUnknown_83CC2E4[]; +extern const struct WindowTemplate gUnknown_83CC2B8[]; +extern const u8 gUnknown_83CC363[]; +extern const u8 gUnknown_83CC330[]; +extern const u8 gUnknown_83CC33C[]; +extern const u8 gUnknown_83CC344[]; +extern const u8 gUnknown_83CC34C[]; +extern const u8 gUnknown_83CC354[]; +extern const u8 gUnknown_8419E52[]; +extern const u8 gUnknown_8419DCC[]; +extern const u8* gUnknown_83CC314[MENUITEM_COUNT]; +extern const u8 gUnknown_8419E57[]; + +struct OptionsMenu +{ + /*0x00*/ u16 option[7]; + /*0x0E*/ u16 unkE; + /*0x10*/ u8 state3; + /*0x11*/ u8 state; + /*0x12*/ u8 state2; + /*0x13*/ u8 unk13; +}; + +EWRAM_DATA struct OptionsMenu *sOptionsMenu = {0}; + + +//CB2_InitOptionsMenu +static void sub_808835C(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + + +//VBlankCB_OptionsMenu +static void sub_8088374(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + + +//sub_8088388 +void CB2_OptionsMenuFromStartMenu(void) +{ + int i; + + if (gMain.savedCallback == NULL) + gMain.savedCallback = CB2_ReturnToStartMenu; + sOptionsMenu = AllocZeroed(sizeof(struct OptionsMenu)); + sOptionsMenu->state3 = 0; + sOptionsMenu->state2 = 0; + sOptionsMenu->state = 0; + sOptionsMenu->unkE = 0; + sOptionsMenu->option[MENUITEM_TEXTSPEED] = gSaveBlock2Ptr->optionsTextSpeed; + sOptionsMenu->option[MENUITEM_BATTLESCENE] = gSaveBlock2Ptr->optionsBattleSceneOff; + sOptionsMenu->option[MENUITEM_BATTLESTYLE] = gSaveBlock2Ptr->optionsBattleStyle; + sOptionsMenu->option[MENUITEM_SOUND] = gSaveBlock2Ptr->optionsSound; + sOptionsMenu->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode; + sOptionsMenu->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType; + + for (i = 0; i < MENUITEM_COUNT-2; i++) + { + if (sOptionsMenu->option[i] > gUnknown_83CC304[i]-1) + sOptionsMenu->option[i] = 0; + } + HelpSystem_SetSomeVariable2(0xD); + SetMainCallback2(sub_8088454); +} + + +//sub_8088430 +static void sub_8088430(void) +{ + SetVBlankCallback(0); + SetHBlankCallback(0); +} + + +//sub_8088444 +static void sub_8088444(void) +{ + SetVBlankCallback(sub_8088374); +} + +//sub_8088454 +static void sub_8088454(void) +{ + int i; + switch (sOptionsMenu->state) + { + case 0: + sub_8088430(); + sOptionsMenu->state++; + break; + case 1: + sub_8088530(); + sOptionsMenu->state++; + break; + case 2: + sub_80886D4(); + sOptionsMenu->state++; + break; + case 3: + if (!(sub_80886F0())); + return; + sOptionsMenu->state++; + break; + case 4: + sub_8088BD0(); + sOptionsMenu->state++; + break; + case 5: + sub_8088C0C(); + sOptionsMenu->state++; + break; + case 6: + sub_8088D8C(); + sOptionsMenu->state++; + break; + case 7: + for (i = 0; i < MENUITEM_COUNT; i++) + sub_80889A8(i); + sOptionsMenu->state++; + break; + case 8: + sub_8088DE0(sOptionsMenu->unkE); + sOptionsMenu->state++; + break; + case 9: + sub_8088680(); + sOptionsMenu->state++; + break; + default: + sub_8088514(); + return; + } +} + +//sub_8088514 +static void sub_8088514(void) +{ + CreateTask(sub_8088780, 0); + SetMainCallback2(sub_808835C); +} + + +//sub_8088530 +static void sub_8088530(void) +{ + void * dest = (void *) VRAM; + DmaClearLarge16(3, dest, VRAM_SIZE, 0x1000); + + DmaClear32(3, (void *)OAM, OAM_SIZE); + DmaClear16(3, (void *)PLTT, PLTT_SIZE); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_83CC2D8, 3); //3 -> ARRAY_COUNT(gUnknown_83CC2D8) + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + InitWindows(gUnknown_83CC2B8); + DeactivateAllTextPrinters(); + SetGpuReg(REG_OFFSET_BLDCNT, 193); + SetGpuReg(REG_OFFSET_BLDY, 2); + SetGpuReg(REG_OFFSET_WININ, 1); + SetGpuReg(REG_OFFSET_WINOUT, 27); + SetGpuReg(0, 0x3040); + ShowBg(0); + ShowBg(1); + ShowBg(2); +}; + +//sub_8088680 +static void sub_8088680(void) +{ + s32 x; + x = 0xE4 - GetStringWidth(0, gUnknown_8419E57, 0); + FillWindowPixelBuffer(WIN_OPTIONS, 0xFF); + AddTextPrinterParameterized3(2, 0, x, 0, gUnknown_83CC360, 0, gUnknown_8419E57); + PutWindowTilemap(2); + CopyWindowToVram(2, 3); +} + + +//sub_80886D4 +static void sub_80886D4(void) +{ + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + ResetTasks(); + ScanlineEffect_Stop(); +} + +//sub_80886F0 +static bool8 sub_80886F0(void) +{ + switch (sOptionsMenu->state2) + { + case 0: + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->tiles, 0x120, 0x1AA); + break; + case 1: + LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->palette, 0x20, 0x20); + break; + case 2: + LoadPalette(gUnknown_83CC2E4, 0x10, 0x20); + LoadPalette(stdpal_get(2), 0xF0, 0x20); + break; + case 3: + sub_814FDA0(1, 0x1B3, 0x30); + break; + default: + return TRUE; + } + sOptionsMenu->state2++; + return FALSE; +} + + +//sub_8088780 +static void sub_8088780(u8 taskId) +{ + switch (sOptionsMenu->state3) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + sub_8088444(); + sOptionsMenu->state3++; + break; + case 2: + if (sub_80BF72C) + return; + switch (sub_80888C0()) + { + case 0: + return; + case 1: + sOptionsMenu->state3++; + break; + case 2: + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->tiles, 0x120, 0x1AA); + LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->palette, 0x20, 0x20); + sub_80889A8(sOptionsMenu->unkE); + return; + case 3: + sub_8088DE0(sOptionsMenu->unkE); + return; + case 4: + sub_80889A8(sOptionsMenu->unkE); + return; + default: + return; + } + case 3: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + sOptionsMenu->state3++; + break; + case 1: + case 4: + if (gPaletteFade.active) + return; + sOptionsMenu->state3++; + return; + case 5: + sub_8088B00(taskId); + return; + default: + return; + } +} + + +//OptionsMenu_ProcessInput +static u8 sub_80888C0(void) +{ + u16 current, selection; + if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + { + selection = 2 * sOptionsMenu->unkE; + current = sOptionsMenu->option[selection]; + + if (current == gUnknown_83CC304[selection] - 1) + sOptionsMenu->option[selection] = 0; + else + sOptionsMenu->option[selection] = current + 1; + if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE) + return 2; + else + return 4; + } + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + { + selection = 2*sOptionsMenu->unkE; + current = sOptionsMenu->option[selection]; + if (current == 0) + sOptionsMenu->option[selection] = gUnknown_83CC304[selection] - 1; + else + sOptionsMenu->option[selection] = current - 1; + if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE) + return 2; + else + return 4; + } + else if (gMain.newAndRepeatedKeys & DPAD_UP) + { + selection = sOptionsMenu->unkE; + if (selection == MENUITEM_TEXTSPEED) + sOptionsMenu->unkE = MENUITEM_CANCEL; + else + sOptionsMenu->unkE = selection - 1; + return 3; + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + selection = sOptionsMenu->unkE; + if (selection == MENUITEM_CANCEL) + sOptionsMenu->unkE = MENUITEM_TEXTSPEED; + else + sOptionsMenu->unkE = selection + 1; + return 3; + } + else if ((gMain.newKeys & B_BUTTON) || (gMain.newKeys & A_BUTTON)) + { + return 1; + } + else + { + return 0; + } +} + +/* +// must match with goto :( +bool sub_80888C0() +{ + int v0; // r0@2 + _WORD *v1; // r3@2 + int v2; // r4@2 + __int16 v3; // r0@3 + int v4; // r3@8 + __int16 v5; // r0@8 + int v7; // r1@14 + signed __int16 v8; // r0@15 + int v9; // r0@18 + + if (gMain.buttons4_new_and_keyrepeat & DPAD_RIGHT) + { + v0 = 2 * *(_WORD *)(sOptionsMenu + 14); + v1 = (_WORD *)(sOptionsMenu + v0); + v2 = *(_WORD *)(sOptionsMenu + v0); + if ( v2 == *(_WORD *)((char *)&sOptionsMenuItemCounts + v0) - 1 ) + v3 = 0; + else + v3 = v2 + 1; + *v1 = v3; + if ( *(_WORD *)(sOptionsMenu + 14) != 5 ) + return 4; + return 2; + } + if ( gMain.buttons4_new_and_keyrepeat & DPAD_LEFT ) + { + v4 = 2 * *(_WORD *)(sOptionsMenu + 14); + v5 = *(_WORD *)(sOptionsMenu + v4); + if ( !*(_WORD *)(sOptionsMenu + v4) ) + v5 = *(_WORD *)((char *)&sOptionsMenuItemCounts + v4); + *(_WORD *)(sOptionsMenu + v4) = v5 - 1; + if ( *(_WORD *)(sOptionsMenu + 14) != 5 ) + return 4; + return 2; + } + if ( gMain.buttons4_new_and_keyrepeat & 0x40 ) + { + v7 = sOptionsMenu; + if ( *(_WORD *)(sOptionsMenu + 14) ) + v8 = *(_WORD *)(sOptionsMenu + 14) - 1; + else + v8 = 6; + goto LABEL_21; + } + if ( gMain.buttons4_new_and_keyrepeat & 0x80 ) + { + v7 = sOptionsMenu; + v9 = *(_WORD *)(sOptionsMenu + 14); + if ( v9 == 6 ) + { + *(_WORD *)(sOptionsMenu + 14) = 0; + return 3; + } + v8 = v9 + 1; +LABEL_21: + *(_WORD *)(v7 + 14) = v8; + return 3; + } + return gMain.buttons3_new_remapped & 2 || gMain.buttons3_new_remapped & 1; +} +*/ + + +//sub_80889A8 +static void sub_80889A8(u8 selection) +{ + u8* dst; + u8* str; + u8* v8; + u8 x, y; + + x = 0x82; + memcpy(dst, gUnknown_83CC363, 3); + y = ((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2; + FillWindowPixelRect(1, 1, x, y, 0x46, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); + switch (selection) + { + case MENUITEM_TEXTSPEED: + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC330); + break; + case MENUITEM_BATTLESCENE: + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC33C); + break; + case MENUITEM_BATTLESTYLE: + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC344); + break; + case MENUITEM_SOUND: + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC34C); + break; + case MENUITEM_BUTTONMODE: + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC354); + break; + case MENUITEM_FRAMETYPE: + StringCopy(str, gUnknown_8419E52); + ConvertIntToDecimalStringN(v8, sOptionsMenu->option[2*selection] + 1, 1, 2); + StringAppendN(str, v8, 3); + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, str); + break; + default: + break; + } + PutWindowTilemap(1); + CopyWindowToVram(1, 3); +} + + +//sub_8088B00 +static void sub_8088B00(u8 taskId) +{ + gFieldCallback = sub_807DF64; + SetMainCallback2(gMain.savedCallback); + FreeAllWindowBuffers(); + + gSaveBlock2Ptr->optionsTextSpeed = sOptionsMenu->option[MENUITEM_TEXTSPEED] & 0x7; + gSaveBlock2Ptr->optionsBattleSceneOff = sOptionsMenu->option[MENUITEM_BATTLESCENE] & 0x1; + gSaveBlock2Ptr->optionsBattleStyle = sOptionsMenu->option[MENUITEM_BATTLESTYLE] & 0x1; + gSaveBlock2Ptr->optionsSound = sOptionsMenu->option[MENUITEM_SOUND] & 0x1; + gSaveBlock2Ptr->optionsButtonMode = sOptionsMenu->option[MENUITEM_BUTTONMODE]; + gSaveBlock2Ptr->optionsWindowFrameType = sOptionsMenu->option[MENUITEM_FRAMETYPE]; + + SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); + Free(sOptionsMenu); + sOptionsMenu = NULL; + DestroyTask(taskId); +} + + +//sub_8088BD0 +static void sub_8088BD0(void) +{ + FillWindowPixelBuffer(0, 0x11); + AddTextPrinterParameterized(WIN_TEXT_OPTION, 2, gUnknown_8419DCC, 8, 1, TEXT_SPEED_FF, NULL); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); +} + + +//sub_8088C0C +static void sub_8088C0C(void) +{ + FillBgTilemapBufferRect(1, 0x1B3, 1, 2, 1, 1, 3); + FillBgTilemapBufferRect(1, 0x1B4, 2, 2, 0x1B, 1, 3); + FillBgTilemapBufferRect(1, 0x1B5, 0x1C, 2, 1, 1, 3); + FillBgTilemapBufferRect(1, 0x1B6, 1, 3, 1, 2, 3); + FillBgTilemapBufferRect(1, 0x1B8, 1, 0x1C, 1, 2, 3); + FillBgTilemapBufferRect(1, 0x1B9, 1, 5, 1, 1, 3); + FillBgTilemapBufferRect(1, 0x1BA, 2, 5, 0x1B, 1, 3); + FillBgTilemapBufferRect(1, 0x1BB, 0x1C, 5, 1, 1, 3); + FillBgTilemapBufferRect(1, 0x1AA, 1, 6, 1, 1, 2); + FillBgTilemapBufferRect(1, 0x1AB, 2, 6, 0x1A, 1, 2); + FillBgTilemapBufferRect(1, 0x1AC, 0x1C, 6, 1, 1, 2); + FillBgTilemapBufferRect(1, 0x1AD, 1, 7, 1, 0x10, 2); + FillBgTilemapBufferRect(1, 0x1AF, 0x1C, 7, 1, 0x10, 2); + FillBgTilemapBufferRect(1, 0x1B0, 1, 0x13, 1, 1, 2); + FillBgTilemapBufferRect(1, 0x1B1, 2, 0x13, 0x1A, 1, 2); + FillBgTilemapBufferRect(1, 0x1B2, 0x1C, 0x13, 1, 1, 2); + CopyBgTilemapBufferToVram(1); +} + + +//sub_8088D8C +static void sub_8088D8C(void) +{ + int i; + u8 attr; + + FillWindowPixelBuffer(1, 0x11); + + for (i = 0; i < MENUITEM_COUNT; i++) + { + attr = (((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))*i) + 2) - i; + AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, attr, 0xFF, 0); + } +} + + +//sub_8088DE0 +static void sub_8088DE0(u8 selection) +{ + u8 attr; + attr = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT); + SetGpuReg(0x44, ((selection * (attr - 1) + 58) << 8) | (selection * (attr - 1) + 58 + attr)); + SetGpuReg(0x40, 4320); +} + diff --git a/sym_ewram.txt b/sym_ewram.txt index a892eb532..cec65b59c 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -226,7 +226,7 @@ gFieldEffectArguments: @ 20386E0 .include "src/scanline_effect.o" .align 2 -gUnknown_2039620: @ 2039620 +sOptionsMenu: @ 2039620 .space 0x4 gTrainerCards: @ 2039624 -- cgit v1.2.3 From b58554b9aebf7b8d6cebf682020a267c981bd5a0 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 18 Nov 2019 15:21:22 -0700 Subject: matching up to sub_8088D8C --- include/menu_helpers.h | 2 +- src/menu_helpers.c | 2 +- src/option_menu.c | 657 ++++++++++++++++++++++++++++++++++++------------- 3 files changed, 489 insertions(+), 172 deletions(-) diff --git a/include/menu_helpers.h b/include/menu_helpers.h index 6ea771500..8d042825c 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -12,7 +12,7 @@ struct YesNoFuncTable }; bool16 RunTextPrinters_CheckActive(u8 textPrinterId); -bool8 sub_80BF72C(void); +bool32 sub_80BF72C(void); bool8 sub_80BF748(void); bool8 MenuHelpers_LinkSomething(void); void SetVBlankHBlankCallbacksToNull(void); diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 06e7bb08b..027280beb 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -125,7 +125,7 @@ bool8 MenuHelpers_LinkSomething(void) return FALSE; } -bool8 sub_80BF72C(void) +bool32 sub_80BF72C(void) { if (!MenuHelpers_LinkSomething()) return FALSE; diff --git a/src/option_menu.c b/src/option_menu.c index 57de35f11..c98a2ec7b 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -39,6 +39,65 @@ enum WIN_OPTIONS }; +/* +static const struct WindowTemplate gUnknown_83CC2B8[] = //sOptionMenuWinTemplates +{ + { + .bg = 1, + .tilemapLeft = 2, + .tilemapTop = 3, + .width = 26, + .height = 2, + .paletteNum = 1, + .baseBlock = 2 + }, + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop =7, + .width = 26, + .height = 12, + .paletteNum = 1, + .baseBlock = 0x36 + }, + DUMMY_WIN_TEMPLATE +}; +static const struct BgTemplate gUnknown_83CC2D8[] = //sOptionMenuBgTemplates +{ + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 0, + .charBaseIndex = 1, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + } +}; + + +static const u16 gUnknown_83CC304[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //sOptionsMenuItemCounts +static const u8* gUnknown_83CC314[MENUITEM_COUNT] = //sOptionMenuItemsNames +{ + [MENUITEM_TEXTSPEED] = gText_TextSpeed, + [MENUITEM_BATTLESCENE] = gText_BattleScene, + [MENUITEM_BATTLESTYLE] = gText_BattleStyle, + [MENUITEM_SOUND] = gText_Sound, + [MENUITEM_BUTTONMODE] = gText_ButtonMode, + [MENUITEM_FRAMETYPE] = gText_Frame, + [MENUITEM_CANCEL] = gText_OptionMenuCancel, +}; +*/ + //This file's functions static void sub_808835C(void); static void sub_8088374(void); @@ -57,27 +116,27 @@ static void sub_8088B00(u8 taskId); static void sub_8088BD0(void); static void sub_8088C0C(void); static void sub_8088D8C(void); -static void sub_8088DE0(u8 selection); - -extern const u16 gUnknown_83CC304[]; //sOptionsMenuItemCounts -extern const struct BgTemplate gUnknown_83CC2D8[]; -extern const u8 gUnknown_83CC360[]; -extern const u16 gUnknown_83CC2E4[]; -extern const struct WindowTemplate gUnknown_83CC2B8[]; -extern const u8 gUnknown_83CC363[]; -extern const u8 gUnknown_83CC330[]; -extern const u8 gUnknown_83CC33C[]; -extern const u8 gUnknown_83CC344[]; -extern const u8 gUnknown_83CC34C[]; -extern const u8 gUnknown_83CC354[]; -extern const u8 gUnknown_8419E52[]; -extern const u8 gUnknown_8419DCC[]; +static void sub_8088DE0(u16 selection); + +extern const struct WindowTemplate gUnknown_83CC2B8[3]; +extern const struct BgTemplate gUnknown_83CC2D8[2]; +extern const u16 gUnknown_83CC2E4[0x20]; +extern const u16 gUnknown_83CC304[MENUITEM_COUNT]; //sOptionsMenuItemCounts extern const u8* gUnknown_83CC314[MENUITEM_COUNT]; +extern const u8 gUnknown_83CC330[0xC]; +extern const u8 gUnknown_83CC33C[0x8]; +extern const u8 gUnknown_83CC344[0x8]; +extern const u8 gUnknown_83CC34C[0x8]; +extern const u8 gUnknown_83CC354[0xC]; +extern const u8 gUnknown_83CC360[0x3]; +extern const u8 gUnknown_83CC363[0x3]; +extern const u8 gUnknown_8419DCC[]; +extern const u8 gUnknown_8419E52[]; extern const u8 gUnknown_8419E57[]; struct OptionsMenu { - /*0x00*/ u16 option[7]; + /*0x00*/ u16 option[7]; //0,2,4,6,8,a,c /*0x0E*/ u16 unkE; /*0x10*/ u8 state3; /*0x11*/ u8 state; @@ -110,7 +169,7 @@ static void sub_8088374(void) //sub_8088388 void CB2_OptionsMenuFromStartMenu(void) { - int i; + u8 i; if (gMain.savedCallback == NULL) gMain.savedCallback = CB2_ReturnToStartMenu; @@ -126,10 +185,10 @@ void CB2_OptionsMenuFromStartMenu(void) sOptionsMenu->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode; sOptionsMenu->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType; - for (i = 0; i < MENUITEM_COUNT-2; i++) + for (i = 0; i < MENUITEM_COUNT-1; i++) { - if (sOptionsMenu->option[i] > gUnknown_83CC304[i]-1) - sOptionsMenu->option[i] = 0; + if (sOptionsMenu->option[i] > (gUnknown_83CC304[i])-1) + sOptionsMenu->option[i] = 0; } HelpSystem_SetSomeVariable2(0xD); SetMainCallback2(sub_8088454); @@ -153,55 +212,46 @@ static void sub_8088444(void) //sub_8088454 static void sub_8088454(void) { - int i; - switch (sOptionsMenu->state) + u8 i, state; + state = sOptionsMenu->state; + switch (state) { case 0: sub_8088430(); - sOptionsMenu->state++; break; case 1: sub_8088530(); - sOptionsMenu->state++; break; case 2: sub_80886D4(); - sOptionsMenu->state++; break; case 3: - if (!(sub_80886F0())); + if (sub_80886F0() != TRUE) //silly matching quirk return; - sOptionsMenu->state++; break; case 4: sub_8088BD0(); - sOptionsMenu->state++; break; case 5: sub_8088C0C(); - sOptionsMenu->state++; break; case 6: sub_8088D8C(); - sOptionsMenu->state++; break; case 7: for (i = 0; i < MENUITEM_COUNT; i++) sub_80889A8(i); - sOptionsMenu->state++; break; case 8: sub_8088DE0(sOptionsMenu->unkE); - sOptionsMenu->state++; break; case 9: sub_8088680(); - sOptionsMenu->state++; break; default: sub_8088514(); - return; } + sOptionsMenu->state++; } //sub_8088514 @@ -217,12 +267,12 @@ static void sub_8088530(void) { void * dest = (void *) VRAM; DmaClearLarge16(3, dest, VRAM_SIZE, 0x1000); - + DmaClear32(3, (void *)OAM, OAM_SIZE); DmaClear16(3, (void *)PLTT, PLTT_SIZE); SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_83CC2D8, 3); //3 -> ARRAY_COUNT(gUnknown_83CC2D8) + InitBgsFromTemplates(0, gUnknown_83CC2D8, 3); //3 -> ARRAY_COUNT(gUnknown_83CC2D8) ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); @@ -233,10 +283,10 @@ static void sub_8088530(void) ChangeBgY(3, 0, 0); InitWindows(gUnknown_83CC2B8); DeactivateAllTextPrinters(); - SetGpuReg(REG_OFFSET_BLDCNT, 193); + SetGpuReg(REG_OFFSET_BLDCNT, 0xC1); SetGpuReg(REG_OFFSET_BLDY, 2); SetGpuReg(REG_OFFSET_WININ, 1); - SetGpuReg(REG_OFFSET_WINOUT, 27); + SetGpuReg(REG_OFFSET_WINOUT, 0x27); SetGpuReg(0, 0x3040); ShowBg(0); ShowBg(1); @@ -248,7 +298,7 @@ static void sub_8088680(void) { s32 x; x = 0xE4 - GetStringWidth(0, gUnknown_8419E57, 0); - FillWindowPixelBuffer(WIN_OPTIONS, 0xFF); + FillWindowPixelBuffer(2, 0xFF); AddTextPrinterParameterized3(2, 0, x, 0, gUnknown_83CC360, 0, gUnknown_8419E57); PutWindowTilemap(2); CopyWindowToVram(2, 3); @@ -271,10 +321,10 @@ static bool8 sub_80886F0(void) switch (sOptionsMenu->state2) { case 0: - LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->tiles, 0x120, 0x1AA); + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); break; case 1: - LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->palette, 0x20, 0x20); + LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); break; case 2: LoadPalette(gUnknown_83CC2E4, 0x10, 0x20); @@ -291,72 +341,228 @@ static bool8 sub_80886F0(void) } -//sub_8088780 + +// I could not get this function to match. GOTO statements weren't even compiling correctly. +#ifdef NONMATCHING static void sub_8088780(u8 taskId) { + u8 v2, v5; + struct OptionsMenu v4; + switch (sOptionsMenu->state3) { case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); sub_8088444(); sOptionsMenu->state3++; break; case 2: - if (sub_80BF72C) + if (sub_80BF72C() == TRUE) return; switch (sub_80888C0()) { - case 0: - return; case 1: sOptionsMenu->state3++; break; case 2: - LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->tiles, 0x120, 0x1AA); - LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->palette, 0x20, 0x20); + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); + LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); sub_80889A8(sOptionsMenu->unkE); - return; + sOptionsMenu->state3++; + break; case 3: sub_8088DE0(sOptionsMenu->unkE); - return; + break; case 4: sub_80889A8(sOptionsMenu->unkE); - return; + sOptionsMenu->state3++; + break; default: return; } case 3: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); sOptionsMenu->state3++; - break; case 1: case 4: if (gPaletteFade.active) return; sOptionsMenu->state3++; - return; case 5: sub_8088B00(taskId); - return; + break; default: return; } } - - +#else +NAKED +static void sub_8088780(u8 taskId) +{ + asm_unified("\tpush {r4,lr}\n" + "\tsub sp, 0x4\n" + "\tlsls r0, 24\n" + "\tlsrs r2, r0, 24\n" + "\tldr r1, _080887A0 @ =sOptionsMenu\n" + "\tldr r0, [r1]\n" + "\tldrb r0, [r0, 0x10]\n" + "\tadds r3, r1, 0\n" + "\tcmp r0, 0x5\n" + "\tbls _08088796\n" + "\tb _080888B6\n" + "_08088796:\n" + "\tlsls r0, 2\n" + "\tldr r1, _080887A4 @ =_080887A8\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_080887A0: .4byte sOptionsMenu\n" + "_080887A4: .4byte _080887A8\n" + "\t.align 2, 0\n" + "_080887A8:\n" + "\t.4byte _080887C0\n" + "\t.4byte _08088894\n" + "\t.4byte _080887E0\n" + "\t.4byte _08088878\n" + "\t.4byte _08088894\n" + "\t.4byte _080888B0\n" + "_080887C0:\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp]\n" + "\tmovs r2, 0x10\n" + "\tmovs r3, 0\n" + "\tbl BeginNormalPaletteFade\n" + "\tbl sub_8088444\n" + "\tldr r0, _080887DC @ =sOptionsMenu\n" + "\tldr r1, [r0]\n" + "\tb _080888A2\n" + "\t.align 2, 0\n" + "_080887DC: .4byte sOptionsMenu\n" + "_080887E0:\n" + "\tbl sub_80BF72C\n" + "\tcmp r0, 0x1\n" + "\tbeq _080888B6\n" + "\tbl sub_80888C0\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x4\n" + "\tbhi _080888B6\n" + "\tlsls r0, 2\n" + "\tldr r1, _08088800 @ =_08088804\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_08088800: .4byte _08088804\n" + "\t.align 2, 0\n" + "_08088804:\n" + "\t.4byte _080888B6\n" + "\t.4byte _08088818\n" + "\t.4byte _08088824\n" + "\t.4byte _08088858\n" + "\t.4byte _08088868\n" + "_08088818:\n" + "\tldr r0, _08088820 @ =sOptionsMenu\n" + "\tldr r1, [r0]\n" + "\tb _080888A2\n" + "\t.align 2, 0\n" + "_08088820: .4byte sOptionsMenu\n" + "_08088824:\n" + "\tldr r4, _08088854 @ =sOptionsMenu\n" + "\tldr r0, [r4]\n" + "\tldrb r0, [r0, 0xA]\n" + "\tbl GetUserFrameGraphicsInfo\n" + "\tldr r1, [r0]\n" + "\tmovs r2, 0x90\n" + "\tlsls r2, 1\n" + "\tmovs r3, 0xD5\n" + "\tlsls r3, 1\n" + "\tmovs r0, 0x1\n" + "\tbl LoadBgTiles\n" + "\tldr r0, [r4]\n" + "\tldrb r0, [r0, 0xA]\n" + "\tbl GetUserFrameGraphicsInfo\n" + "\tldr r0, [r0, 0x4]\n" + "\tmovs r1, 0x20\n" + "\tmovs r2, 0x20\n" + "\tbl LoadPalette\n" + "\tldr r0, [r4]\n" + "\tb _0808886C\n" + "\t.align 2, 0\n" + "_08088854: .4byte sOptionsMenu\n" + "_08088858:\n" + "\tldr r0, _08088864 @ =sOptionsMenu\n" + "\tldr r0, [r0]\n" + "\tldrh r0, [r0, 0xE]\n" + "\tbl sub_8088DE0\n" + "\tb _080888B6\n" + "\t.align 2, 0\n" + "_08088864: .4byte sOptionsMenu\n" + "_08088868:\n" + "\tldr r0, _08088874 @ =sOptionsMenu\n" + "\tldr r0, [r0]\n" + "_0808886C:\n" + "\tldrb r0, [r0, 0xE]\n" + "\tbl sub_80889A8\n" + "\tb _080888B6\n" + "\t.align 2, 0\n" + "_08088874: .4byte sOptionsMenu\n" + "_08088878:\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp]\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x10\n" + "\tbl BeginNormalPaletteFade\n" + "\tldr r0, _08088890 @ =sOptionsMenu\n" + "\tldr r1, [r0]\n" + "\tb _080888A2\n" + "\t.align 2, 0\n" + "_08088890: .4byte sOptionsMenu\n" + "_08088894:\n" + "\tldr r0, _080888AC @ =gPaletteFade\n" + "\tldrb r1, [r0, 0x7]\n" + "\tmovs r0, 0x80\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbne _080888B6\n" + "\tldr r1, [r3]\n" + "_080888A2:\n" + "\tldrb r0, [r1, 0x10]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r1, 0x10]\n" + "\tb _080888B6\n" + "\t.align 2, 0\n" + "_080888AC: .4byte gPaletteFade\n" + "_080888B0:\n" + "\tadds r0, r2, 0\n" + "\tbl sub_8088B00\n" + "_080888B6:\n" + "\tadd sp, 0x4\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n"); +} +#endif + + + //OptionsMenu_ProcessInput static u8 sub_80888C0(void) { - u16 current, selection; + u16 current; + u16* curr; if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { - selection = 2 * sOptionsMenu->unkE; - current = sOptionsMenu->option[selection]; - - if (current == gUnknown_83CC304[selection] - 1) - sOptionsMenu->option[selection] = 0; + current = sOptionsMenu->option[(sOptionsMenu->unkE)]; + if (current == (gUnknown_83CC304[sOptionsMenu->unkE] - 1)) + sOptionsMenu->option[sOptionsMenu->unkE] = 0; else - sOptionsMenu->option[selection] = current + 1; + sOptionsMenu->option[sOptionsMenu->unkE] = current + 1; if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE) return 2; else @@ -364,12 +570,12 @@ static u8 sub_80888C0(void) } else if (gMain.newAndRepeatedKeys & DPAD_LEFT) { - selection = 2*sOptionsMenu->unkE; - current = sOptionsMenu->option[selection]; - if (current == 0) - sOptionsMenu->option[selection] = gUnknown_83CC304[selection] - 1; + curr = &sOptionsMenu->option[sOptionsMenu->unkE]; + if (*curr == 0) + *curr = gUnknown_83CC304[sOptionsMenu->unkE] - 1; else - sOptionsMenu->option[selection] = current - 1; + --*(curr); + if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE) return 2; else @@ -377,20 +583,18 @@ static u8 sub_80888C0(void) } else if (gMain.newAndRepeatedKeys & DPAD_UP) { - selection = sOptionsMenu->unkE; - if (selection == MENUITEM_TEXTSPEED) + if (sOptionsMenu->unkE == MENUITEM_TEXTSPEED) sOptionsMenu->unkE = MENUITEM_CANCEL; else - sOptionsMenu->unkE = selection - 1; + sOptionsMenu->unkE = sOptionsMenu->unkE - 1; return 3; } else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { - selection = sOptionsMenu->unkE; - if (selection == MENUITEM_CANCEL) + if (sOptionsMenu->unkE == MENUITEM_CANCEL) sOptionsMenu->unkE = MENUITEM_TEXTSPEED; else - sOptionsMenu->unkE = selection + 1; + sOptionsMenu->unkE = sOptionsMenu->unkE + 1; return 3; } else if ((gMain.newKeys & B_BUTTON) || (gMain.newKeys & A_BUTTON)) @@ -403,85 +607,22 @@ static u8 sub_80888C0(void) } } -/* -// must match with goto :( -bool sub_80888C0() -{ - int v0; // r0@2 - _WORD *v1; // r3@2 - int v2; // r4@2 - __int16 v3; // r0@3 - int v4; // r3@8 - __int16 v5; // r0@8 - int v7; // r1@14 - signed __int16 v8; // r0@15 - int v9; // r0@18 - - if (gMain.buttons4_new_and_keyrepeat & DPAD_RIGHT) - { - v0 = 2 * *(_WORD *)(sOptionsMenu + 14); - v1 = (_WORD *)(sOptionsMenu + v0); - v2 = *(_WORD *)(sOptionsMenu + v0); - if ( v2 == *(_WORD *)((char *)&sOptionsMenuItemCounts + v0) - 1 ) - v3 = 0; - else - v3 = v2 + 1; - *v1 = v3; - if ( *(_WORD *)(sOptionsMenu + 14) != 5 ) - return 4; - return 2; - } - if ( gMain.buttons4_new_and_keyrepeat & DPAD_LEFT ) - { - v4 = 2 * *(_WORD *)(sOptionsMenu + 14); - v5 = *(_WORD *)(sOptionsMenu + v4); - if ( !*(_WORD *)(sOptionsMenu + v4) ) - v5 = *(_WORD *)((char *)&sOptionsMenuItemCounts + v4); - *(_WORD *)(sOptionsMenu + v4) = v5 - 1; - if ( *(_WORD *)(sOptionsMenu + 14) != 5 ) - return 4; - return 2; - } - if ( gMain.buttons4_new_and_keyrepeat & 0x40 ) - { - v7 = sOptionsMenu; - if ( *(_WORD *)(sOptionsMenu + 14) ) - v8 = *(_WORD *)(sOptionsMenu + 14) - 1; - else - v8 = 6; - goto LABEL_21; - } - if ( gMain.buttons4_new_and_keyrepeat & 0x80 ) - { - v7 = sOptionsMenu; - v9 = *(_WORD *)(sOptionsMenu + 14); - if ( v9 == 6 ) - { - *(_WORD *)(sOptionsMenu + 14) = 0; - return 3; - } - v8 = v9 + 1; -LABEL_21: - *(_WORD *)(v7 + 14) = v8; - return 3; - } - return gMain.buttons3_new_remapped & 2 || gMain.buttons3_new_remapped & 1; -} -*/ - //sub_80889A8 +#ifdef NONMATCHING // could not get it to match perfectly, no idea how they put so many vars on the stack static void sub_80889A8(u8 selection) { u8* dst; u8* str; - u8* v8; + u8* v8; u8 x, y; + u8** col; - x = 0x82; - memcpy(dst, gUnknown_83CC363, 3); + memcpy(&dst, gUnknown_83CC363, 3); y = ((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2; + x = 0x82; FillWindowPixelRect(1, 1, x, y, 0x46, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); + switch (selection) { case MENUITEM_TEXTSPEED: @@ -501,7 +642,7 @@ static void sub_80889A8(u8 selection) break; case MENUITEM_FRAMETYPE: StringCopy(str, gUnknown_8419E52); - ConvertIntToDecimalStringN(v8, sOptionsMenu->option[2*selection] + 1, 1, 2); + ConvertIntToDecimalStringN(v8, sOptionsMenu->option[2*selection] + 1, 1, 2); StringAppendN(str, v8, 3); AddTextPrinterParameterized3(1, 2, x, y, dst, -1, str); break; @@ -511,6 +652,173 @@ static void sub_80889A8(u8 selection) PutWindowTilemap(1); CopyWindowToVram(1, 3); } +#else +NAKED +static void sub_80889A8(u8 selection) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tsub sp, 0x30\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tadd r4, sp, 0x2C\n" + "\tldr r1, _08088A08 @ =gUnknown_83CC363\n" + "\tadds r0, r4, 0\n" + "\tmovs r2, 0x3\n" + "\tbl memcpy\n" + "\tmovs r0, 0x82\n" + "\tmov r8, r0\n" + "\tmovs r0, 0x2\n" + "\tmovs r1, 0x1\n" + "\tbl GetFontAttribute\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tsubs r0, 0x1\n" + "\tmuls r0, r5\n" + "\tadds r0, 0x2\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tmovs r0, 0x2\n" + "\tmovs r1, 0x1\n" + "\tbl GetFontAttribute\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmovs r1, 0x46\n" + "\tstr r1, [sp]\n" + "\tstr r0, [sp, 0x4]\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x82\n" + "\tadds r3, r7, 0\n" + "\tbl FillWindowPixelRect\n" + "\tadds r6, r4, 0\n" + "\tcmp r5, 0x5\n" + "\tbhi _08088ADE\n" + "\tlsls r0, r5, 2\n" + "\tldr r1, _08088A0C @ =_08088A10\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_08088A08: .4byte gUnknown_83CC363\n" + "_08088A0C: .4byte _08088A10\n" + "\t.align 2, 0\n" + "_08088A10:\n" + "\t.4byte _08088A28\n" + "\t.4byte _08088A38\n" + "\t.4byte _08088A48\n" + "\t.4byte _08088A58\n" + "\t.4byte _08088A68\n" + "\t.4byte _08088A9C\n" + "_08088A28:\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r2, _08088A34 @ =gUnknown_83CC330\n" + "\tb _08088A72\n" + "\t.align 2, 0\n" + "_08088A34: .4byte gUnknown_83CC330\n" + "_08088A38:\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r2, _08088A44 @ =gUnknown_83CC33C\n" + "\tb _08088A72\n" + "\t.align 2, 0\n" + "_08088A44: .4byte gUnknown_83CC33C\n" + "_08088A48:\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r2, _08088A54 @ =gUnknown_83CC344\n" + "\tb _08088A72\n" + "\t.align 2, 0\n" + "_08088A54: .4byte gUnknown_83CC344\n" + "_08088A58:\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r2, _08088A64 @ =gUnknown_83CC34C\n" + "\tb _08088A72\n" + "\t.align 2, 0\n" + "_08088A64: .4byte gUnknown_83CC34C\n" + "_08088A68:\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r2, _08088A94 @ =gUnknown_83CC354\n" + "_08088A72:\n" + "\tldr r0, _08088A98 @ =sOptionsMenu\n" + "\tldr r0, [r0]\n" + "\tlsls r1, r5, 1\n" + "\tadds r0, r1\n" + "\tldrh r0, [r0]\n" + "\tlsls r0, 2\n" + "\tadds r0, r2\n" + "\tldr r0, [r0]\n" + "\tstr r0, [sp, 0x8]\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0x2\n" + "\tmov r2, r8\n" + "\tadds r3, r7, 0\n" + "\tbl AddTextPrinterParameterized3\n" + "\tb _08088ADE\n" + "\t.align 2, 0\n" + "_08088A94: .4byte gUnknown_83CC354\n" + "_08088A98: .4byte sOptionsMenu\n" + "_08088A9C:\n" + "\tldr r1, _08088AF8 @ =gUnknown_8419E52\n" + "\tadd r0, sp, 0xC\n" + "\tbl StringCopy\n" + "\tadd r4, sp, 0x20\n" + "\tldr r0, _08088AFC @ =sOptionsMenu\n" + "\tldr r0, [r0]\n" + "\tlsls r1, r5, 1\n" + "\tadds r0, r1\n" + "\tldrh r1, [r0]\n" + "\tadds r1, 0x1\n" + "\tadds r0, r4, 0\n" + "\tmovs r2, 0x1\n" + "\tmovs r3, 0x2\n" + "\tbl ConvertIntToDecimalStringN\n" + "\tadd r0, sp, 0xC\n" + "\tadds r1, r4, 0\n" + "\tmovs r2, 0x3\n" + "\tbl StringAppendN\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tadd r0, sp, 0xC\n" + "\tstr r0, [sp, 0x8]\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0x2\n" + "\tmov r2, r8\n" + "\tadds r3, r7, 0\n" + "\tbl AddTextPrinterParameterized3\n" + "_08088ADE:\n" + "\tmovs r0, 0x1\n" + "\tbl PutWindowTilemap\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0x3\n" + "\tbl CopyWindowToVram\n" + "\tadd sp, 0x30\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08088AF8: .4byte gUnknown_8419E52\n" + "_08088AFC: .4byte sOptionsMenu\n"); +} +#endif //sub_8088B00 @@ -520,20 +828,20 @@ static void sub_8088B00(u8 taskId) SetMainCallback2(gMain.savedCallback); FreeAllWindowBuffers(); - gSaveBlock2Ptr->optionsTextSpeed = sOptionsMenu->option[MENUITEM_TEXTSPEED] & 0x7; - gSaveBlock2Ptr->optionsBattleSceneOff = sOptionsMenu->option[MENUITEM_BATTLESCENE] & 0x1; - gSaveBlock2Ptr->optionsBattleStyle = sOptionsMenu->option[MENUITEM_BATTLESTYLE] & 0x1; - gSaveBlock2Ptr->optionsSound = sOptionsMenu->option[MENUITEM_SOUND] & 0x1; - gSaveBlock2Ptr->optionsButtonMode = sOptionsMenu->option[MENUITEM_BUTTONMODE]; - gSaveBlock2Ptr->optionsWindowFrameType = sOptionsMenu->option[MENUITEM_FRAMETYPE]; - + gSaveBlock2Ptr->optionsTextSpeed = (u8) sOptionsMenu->option[MENUITEM_TEXTSPEED]; + gSaveBlock2Ptr->optionsBattleSceneOff = (u8) sOptionsMenu->option[MENUITEM_BATTLESCENE]; + gSaveBlock2Ptr->optionsBattleStyle = (u8) sOptionsMenu->option[MENUITEM_BATTLESTYLE]; + gSaveBlock2Ptr->optionsSound = sOptionsMenu->option[MENUITEM_SOUND]; + gSaveBlock2Ptr->optionsButtonMode = (u8) sOptionsMenu->option[MENUITEM_BUTTONMODE]; + gSaveBlock2Ptr->optionsWindowFrameType = (u8) sOptionsMenu->option[MENUITEM_FRAMETYPE]; SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); - Free(sOptionsMenu); + Free(sOptionsMenu); sOptionsMenu = NULL; - DestroyTask(taskId); + DestroyTask(taskId); } - + + //sub_8088BD0 static void sub_8088BD0(void) { @@ -545,24 +853,28 @@ static void sub_8088BD0(void) //sub_8088C0C +//double check static void sub_8088C0C(void) { + u8 h; + h = 2; + FillBgTilemapBufferRect(1, 0x1B3, 1, 2, 1, 1, 3); FillBgTilemapBufferRect(1, 0x1B4, 2, 2, 0x1B, 1, 3); FillBgTilemapBufferRect(1, 0x1B5, 0x1C, 2, 1, 1, 3); - FillBgTilemapBufferRect(1, 0x1B6, 1, 3, 1, 2, 3); - FillBgTilemapBufferRect(1, 0x1B8, 1, 0x1C, 1, 2, 3); - FillBgTilemapBufferRect(1, 0x1B9, 1, 5, 1, 1, 3); + FillBgTilemapBufferRect(1, 0x1B6, 1, 3, 1, h, 3); + FillBgTilemapBufferRect(1, 0x1B8, 1, 0x1C, 1, h, 3); + FillBgTilemapBufferRect(1, 0x1B9, 1, 5, 1, 1, 3); FillBgTilemapBufferRect(1, 0x1BA, 2, 5, 0x1B, 1, 3); FillBgTilemapBufferRect(1, 0x1BB, 0x1C, 5, 1, 1, 3); - FillBgTilemapBufferRect(1, 0x1AA, 1, 6, 1, 1, 2); - FillBgTilemapBufferRect(1, 0x1AB, 2, 6, 0x1A, 1, 2); - FillBgTilemapBufferRect(1, 0x1AC, 0x1C, 6, 1, 1, 2); - FillBgTilemapBufferRect(1, 0x1AD, 1, 7, 1, 0x10, 2); - FillBgTilemapBufferRect(1, 0x1AF, 0x1C, 7, 1, 0x10, 2); - FillBgTilemapBufferRect(1, 0x1B0, 1, 0x13, 1, 1, 2); - FillBgTilemapBufferRect(1, 0x1B1, 2, 0x13, 0x1A, 1, 2); - FillBgTilemapBufferRect(1, 0x1B2, 0x1C, 0x13, 1, 1, 2); + FillBgTilemapBufferRect(1, 0x1AA, 1, 6, 1, 1, h); + FillBgTilemapBufferRect(1, 0x1AB, 2, 6, 0x1A, 1, h); + FillBgTilemapBufferRect(1, 0x1AC, 0x1C, 6, 1, 1, h); + FillBgTilemapBufferRect(1, 0x1AD, 1, 7, 1, 0x10, h); + FillBgTilemapBufferRect(1, 0x1AF, 0x1C, 7, 1, 0x10, h); + FillBgTilemapBufferRect(1, 0x1B0, 1, 0x13, 1, 1, h); + FillBgTilemapBufferRect(1, 0x1B1, 2, 0x13, 0x1A, 1, h); + FillBgTilemapBufferRect(1, 0x1B2, 0x1C, 0x13, 1, 1, h); CopyBgTilemapBufferToVram(1); } @@ -571,20 +883,25 @@ static void sub_8088C0C(void) static void sub_8088D8C(void) { int i; - u8 attr; + u8 y; FillWindowPixelBuffer(1, 0x11); for (i = 0; i < MENUITEM_COUNT; i++) { - attr = (((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))*i) + 2) - i; - AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, attr, 0xFF, 0); + //AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, (u8) ((i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, 0xFF, 0); + //gets registers right, but an lsl/lsr 0x18 after GetFontAttribute that shouldn't be there + y = i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); + y += 2; + y -= i; + AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, y, 0xFF, 0); + } } //sub_8088DE0 -static void sub_8088DE0(u8 selection) +static void sub_8088DE0(u16 selection) { u8 attr; attr = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT); -- cgit v1.2.3 From cb5dc21a4e8fecbffcb46e34782d9db3b21ccb13 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 18 Nov 2019 21:03:51 -0700 Subject: matching rom --- data/option_menu.s | 33 +++++------ data/strings.s | 30 +++++----- graphics/misc/unk_83cc2e4.pal | 19 ++++++ include/menu_helpers.h | 2 +- include/strings.h | 14 +++++ src/menu_helpers.c | 2 +- src/option_menu.c | 130 +++++++++++++++++++++++------------------- 7 files changed, 137 insertions(+), 93 deletions(-) create mode 100644 graphics/misc/unk_83cc2e4.pal diff --git a/data/option_menu.s b/data/option_menu.s index 098e76f31..f8a590d6d 100644 --- a/data/option_menu.s +++ b/data/option_menu.s @@ -1,43 +1,44 @@ #include "constants/maps.h" #include "constants/species.h" - .include "asm/macros.inc" - .include "constants/constants.inc" + .include "asm/macros.inc" + .include "constants/constants.inc" - .section .rodata - .align 2 + .section .rodata + .align 2 gUnknown_83CC2B8:: @ 83CC2B8 - .incbin "baserom.gba", 0x3CC2B8, 0x20 + .incbin "baserom.gba", 0x3CC2B8, 0x20 gUnknown_83CC2D8:: @ 83CC2D8 - .incbin "baserom.gba", 0x3CC2D8, 0xC + .incbin "baserom.gba", 0x3CC2D8, 0xC gUnknown_83CC2E4:: @ 83CC2E4 - .incbin "baserom.gba", 0x3CC2E4, 0x20 + .incbin "baserom.gba", 0x3CC2E4, 0x20 gUnknown_83CC304:: @ 83CC304 - .incbin "baserom.gba", 0x3CC304, 0x10 + .incbin "baserom.gba", 0x3CC304, 0x10 gUnknown_83CC314:: @ 83CC314 - .incbin "baserom.gba", 0x3CC314, 0x1C + .incbin "baserom.gba", 0x3CC314, 0x1C gUnknown_83CC330:: @ 83CC330 - .incbin "baserom.gba", 0x3CC330, 0xC + .incbin "baserom.gba", 0x3CC330, 0xC gUnknown_83CC33C:: @ 83CC33C - .incbin "baserom.gba", 0x3CC33C, 0x8 + .incbin "baserom.gba", 0x3CC33C, 0x8 gUnknown_83CC344:: @ 83CC344 - .incbin "baserom.gba", 0x3CC344, 0x8 + .incbin "baserom.gba", 0x3CC344, 0x8 gUnknown_83CC34C:: @ 83CC34C - .incbin "baserom.gba", 0x3CC34C, 0x8 + .incbin "baserom.gba", 0x3CC34C, 0x8 gUnknown_83CC354:: @ 83CC354 - .incbin "baserom.gba", 0x3CC354, 0xC + .incbin "baserom.gba", 0x3CC354, 0xC gUnknown_83CC360:: @ 83CC360 - .incbin "baserom.gba", 0x3CC360, 0x3 + .incbin "baserom.gba", 0x3CC360, 0x3 gUnknown_83CC363:: @ 83CC363 - .incbin "baserom.gba", 0x3CC363, 0x3 + .incbin "baserom.gba", 0x3CC363, 0x3 + diff --git a/data/strings.s b/data/strings.s index 14a4472e3..a75671090 100644 --- a/data/strings.s +++ b/data/strings.s @@ -2904,7 +2904,7 @@ gUnknown_8419D89:: @ 8419D89 .string "Waiting for the other TRAINER to\n" .string "finish reading your TRAINER CARD.$" -gUnknown_8419DCC:: @ 8419DCC +gText_MenuOptionOption:: @ 8419DCC .string "OPTION$" gText_TextSpeed:: @ 0x8419DD3 @@ -2928,49 +2928,49 @@ gText_Frame:: @ 0x8419E0A gText_OptionMenuCancel:: @ 0x8419E10 .string "CANCEL$" -gUnknown_8419E17:: @ 0x8419E17 +gText_TextSpeedSlow:: @ 0x8419E17 .string "SLOW$" -gUnknown_8419E1C:: @ 0x8419E1C +gText_TextSpeedMid:: @ 0x8419E1C .string "MID$" -gUnknown_8419E20:: @ 0x8419E20 +gText_TextSpeedFast:: @ 0x8419E20 .string "FAST$" -gUnknown_8419E25:: @ 0x8419E25 +gText_BattleSceneOn:: @ 0x8419E25 .string "ON$" -gUnknown_8419E28:: @ 0x8419E28 +gText_BattleSceneOff:: @ 0x8419E28 .string "OFF$" -gUnknown_8419E2C:: @ 0x8419E2C +gText_BattleStyleShift:: @ 0x8419E2C .string "SHIFT$" -gUnknown_8419E32:: @ 0x8419E32 +gText_BattleStyleSet:: @ 0x8419E32 .string "SET$" -gUnknown_8419E36:: @ 0x8419E36 +gText_SoundMono:: @ 0x8419E36 .string "MONO$" -gUnknown_8419E3B:: @ 0x8419E3B +gText_SoundStereo:: @ 0x8419E3B .string "STEREO$" gUnknown_8419E42:: @ 0x8419E42 .string "タイプ$" -gUnknown_8419E46:: @ 0x8419E46 +gText_ButtonTypeNormal:: @ 0x8419E46 .string "HELP$" -gUnknown_8419E4B:: @ 0x8419E4B +gText_ButtonTypeLR:: @ 0x8419E4B .string "LゅA$" -gUnknown_8419E4F:: @ 0x8419E4F +gText_ButtonTypeLEqualsA:: @ 0x8419E4F .string "LR$" -gUnknown_8419E52:: @ 8419E52 +gText_FrameType:: @ 8419E52 .string "TYPE$" -gUnknown_8419E57:: @ 8419E57 +gText_PickSwitchCancel:: @ 8419E57 .string "{DPAD_UPDOWN}PICK {DPAD_LEFTRIGHT}SWITCH {A_BUTTON}{B_BUTTON}CANCEL$" gUnknown_8419E72:: @ 0x8419E72 diff --git a/graphics/misc/unk_83cc2e4.pal b/graphics/misc/unk_83cc2e4.pal new file mode 100644 index 000000000..b2172775f --- /dev/null +++ b/graphics/misc/unk_83cc2e4.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +255 255 255 +99 99 99 +214 214 206 +230 8 8 +255 189 115 +33 156 8 +148 247 148 +49 82 206 +165 197 247 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/include/menu_helpers.h b/include/menu_helpers.h index 8d042825c..6ea771500 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -12,7 +12,7 @@ struct YesNoFuncTable }; bool16 RunTextPrinters_CheckActive(u8 textPrinterId); -bool32 sub_80BF72C(void); +bool8 sub_80BF72C(void); bool8 sub_80BF748(void); bool8 MenuHelpers_LinkSomething(void); void SetVBlankHBlankCallbacksToNull(void); diff --git a/include/strings.h b/include/strings.h index 286a65190..9d4d26ba1 100644 --- a/include/strings.h +++ b/include/strings.h @@ -771,6 +771,20 @@ extern const u8 gText_Sound[]; extern const u8 gText_ButtonMode[]; extern const u8 gText_Frame[]; extern const u8 gText_OptionMenuCancel[]; +extern const u8 gText_TextSpeedSlow[]; +extern const u8 gText_TextSpeedMid[]; +extern const u8 gText_TextSpeedFast[]; +extern const u8 gText_BattleSceneOn[]; +extern const u8 gText_BattleSceneOff[]; +extern const u8 gText_BattleStyleShift[]; +extern const u8 gText_BattleStyleSet[]; +extern const u8 gText_SoundMono[]; +extern const u8 gText_SoundStereo[]; +extern const u8 gText_ButtonTypeNormal[]; +extern const u8 gText_ButtonTypeLR[]; +extern const u8 gText_ButtonTypeLEqualsA[]; +extern const u8 gText_MenuOptionOption[]; +extern const u8 gText_FrameType[]; extern const u8 gText_PickSwitchCancel[]; diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 027280beb..06e7bb08b 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -125,7 +125,7 @@ bool8 MenuHelpers_LinkSomething(void) return FALSE; } -bool32 sub_80BF72C(void) +bool8 sub_80BF72C(void) { if (!MenuHelpers_LinkSomething()) return FALSE; diff --git a/src/option_menu.c b/src/option_menu.c index c98a2ec7b..c1cde37a6 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -36,11 +36,10 @@ enum enum { WIN_TEXT_OPTION, - WIN_OPTIONS + WIN_OPTIONS, }; - /* -static const struct WindowTemplate gUnknown_83CC2B8[] = //sOptionMenuWinTemplates +static const struct WindowTemplate gUnknown_83CC2B8[] = //3CC2B8 -> sOptionMenuWinTemplates { { .bg = 1, @@ -49,20 +48,29 @@ static const struct WindowTemplate gUnknown_83CC2B8[] = //sOptionMenuWinTempl .width = 26, .height = 2, .paletteNum = 1, - .baseBlock = 2 + .baseBlock = 2, }, { .bg = 0, .tilemapLeft = 2, - .tilemapTop =7, + .tilemapTop = 7, .width = 26, .height = 12, .paletteNum = 1, - .baseBlock = 0x36 + .baseBlock = 0x36, }, - DUMMY_WIN_TEMPLATE + { + .bg = 2, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 30, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x16e, + }, + DUMMY_WIN_TEMPLATE, }; -static const struct BgTemplate gUnknown_83CC2D8[] = //sOptionMenuBgTemplates +static const struct BgTemplate gUnknown_83CC2D8[] = //3CC2D8 -> sOptionMenuBgTemplates { { .bg = 1, @@ -81,12 +89,20 @@ static const struct BgTemplate gUnknown_83CC2D8[] = //sOptionMenuBgTemplates .paletteMode = 0, .priority = 1, .baseTile = 0 - } + }, + { + .bg = 2, + .charBaseIndex = 1, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0, + }, }; - - -static const u16 gUnknown_83CC304[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //sOptionsMenuItemCounts -static const u8* gUnknown_83CC314[MENUITEM_COUNT] = //sOptionMenuItemsNames +static const u16 gUnknown_83CC2E4[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal"); //3CC2E4 +static const u16 gUnknown_83CC304[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //3CC304 -> sOptionsMenuItemCounts +static const u8* gUnknown_83CC314[MENUITEM_COUNT] = //3CC314 -> sOptionMenuItemsNames { [MENUITEM_TEXTSPEED] = gText_TextSpeed, [MENUITEM_BATTLESCENE] = gText_BattleScene, @@ -96,8 +112,28 @@ static const u8* gUnknown_83CC314[MENUITEM_COUNT] = //sOptionMenuItemsNames [MENUITEM_FRAMETYPE] = gText_Frame, [MENUITEM_CANCEL] = gText_OptionMenuCancel, }; +static const u8* gUnknown_83CC330[] = {gText_TextSpeedSlow, gText_TextSpeedMid, gText_TextSpeedFast}; //3CC330 +static const u8* gUnknown_83CC33C[] = {gText_BattleSceneOn, gText_BattleSceneOff}; //3CC33C +static const u8* gUnknown_83CC344[] = {gText_BattleStyleShift, gText_BattleStyleSet}; //3CC344 +static const u8* gUnknown_83CC34C[] = {gText_SoundMono, gText_SoundStereo}; //3CC34C +static const u8* gUnknown_83CC354[] = {gText_ButtonTypeNormal, gText_ButtonTypeLR, gText_ButtonTypeLEqualsA}; //3CC354 +static const u8 gUnknown_83CC360[] = {0xF, 0x1, 0x2}; //3CC360 +static const u8 gUnknown_83CC363[] = {0, 5, 4, 0, 0}; //3CC363 */ +extern const struct WindowTemplate gUnknown_83CC2B8[3]; +extern const struct BgTemplate gUnknown_83CC2D8[3]; +extern const u16 gUnknown_83CC2E4[0x20]; +extern const u16 gUnknown_83CC304[MENUITEM_COUNT]; +extern const u8* gUnknown_83CC314[MENUITEM_COUNT]; +extern const u8* gUnknown_83CC330[12]; +extern const u8* gUnknown_83CC33C[8]; +extern const u8* gUnknown_83CC344[8]; +extern const u8* gUnknown_83CC34C[8]; +extern const u8* gUnknown_83CC354[12]; +extern const u8 gUnknown_83CC360[3]; +extern const u8 gUnknown_83CC363[3]; + //This file's functions static void sub_808835C(void); static void sub_8088374(void); @@ -118,25 +154,9 @@ static void sub_8088C0C(void); static void sub_8088D8C(void); static void sub_8088DE0(u16 selection); -extern const struct WindowTemplate gUnknown_83CC2B8[3]; -extern const struct BgTemplate gUnknown_83CC2D8[2]; -extern const u16 gUnknown_83CC2E4[0x20]; -extern const u16 gUnknown_83CC304[MENUITEM_COUNT]; //sOptionsMenuItemCounts -extern const u8* gUnknown_83CC314[MENUITEM_COUNT]; -extern const u8 gUnknown_83CC330[0xC]; -extern const u8 gUnknown_83CC33C[0x8]; -extern const u8 gUnknown_83CC344[0x8]; -extern const u8 gUnknown_83CC34C[0x8]; -extern const u8 gUnknown_83CC354[0xC]; -extern const u8 gUnknown_83CC360[0x3]; -extern const u8 gUnknown_83CC363[0x3]; -extern const u8 gUnknown_8419DCC[]; -extern const u8 gUnknown_8419E52[]; -extern const u8 gUnknown_8419E57[]; - struct OptionsMenu { - /*0x00*/ u16 option[7]; //0,2,4,6,8,a,c + /*0x00*/ u16 option[MENUITEM_COUNT]; //0,2,4,6,8,a,c /*0x0E*/ u16 unkE; /*0x10*/ u8 state3; /*0x11*/ u8 state; @@ -147,6 +167,7 @@ struct OptionsMenu EWRAM_DATA struct OptionsMenu *sOptionsMenu = {0}; + //CB2_InitOptionsMenu static void sub_808835C(void) { @@ -272,7 +293,7 @@ static void sub_8088530(void) DmaClear16(3, (void *)PLTT, PLTT_SIZE); SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_83CC2D8, 3); //3 -> ARRAY_COUNT(gUnknown_83CC2D8) + InitBgsFromTemplates(0, gUnknown_83CC2D8, ARRAY_COUNT(gUnknown_83CC2D8)); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); @@ -297,9 +318,9 @@ static void sub_8088530(void) static void sub_8088680(void) { s32 x; - x = 0xE4 - GetStringWidth(0, gUnknown_8419E57, 0); + x = 0xE4 - GetStringWidth(0, gText_PickSwitchCancel, 0); FillWindowPixelBuffer(2, 0xFF); - AddTextPrinterParameterized3(2, 0, x, 0, gUnknown_83CC360, 0, gUnknown_8419E57); + AddTextPrinterParameterized3(2, 0, x, 0, gUnknown_83CC360, 0, gText_PickSwitchCancel); PutWindowTilemap(2); CopyWindowToVram(2, 3); } @@ -357,7 +378,7 @@ static void sub_8088780(u8 taskId) sOptionsMenu->state3++; break; case 2: - if (sub_80BF72C() == TRUE) + if ((bool32) sub_80BF72C() == TRUE) //cast to bool32 to remove the lsl/lsr 0x18 after func call return; switch (sub_80888C0()) { @@ -547,10 +568,8 @@ static void sub_8088780(u8 taskId) "\tpop {r0}\n" "\tbx r0\n"); } -#endif - - - +#endif + //OptionsMenu_ProcessInput static u8 sub_80888C0(void) { @@ -616,7 +635,6 @@ static void sub_80889A8(u8 selection) u8* str; u8* v8; u8 x, y; - u8** col; memcpy(&dst, gUnknown_83CC363, 3); y = ((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2; @@ -641,7 +659,7 @@ static void sub_80889A8(u8 selection) AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC354); break; case MENUITEM_FRAMETYPE: - StringCopy(str, gUnknown_8419E52); + StringCopy(str, gText_FrameType); ConvertIntToDecimalStringN(v8, sOptionsMenu->option[2*selection] + 1, 1, 2); StringAppendN(str, v8, 3); AddTextPrinterParameterized3(1, 2, x, y, dst, -1, str); @@ -773,7 +791,7 @@ static void sub_80889A8(u8 selection) "_08088A94: .4byte gUnknown_83CC354\n" "_08088A98: .4byte sOptionsMenu\n" "_08088A9C:\n" - "\tldr r1, _08088AF8 @ =gUnknown_8419E52\n" + "\tldr r1, _08088AF8 @ =gText_FrameType\n" "\tadd r0, sp, 0xC\n" "\tbl StringCopy\n" "\tadd r4, sp, 0x20\n" @@ -815,7 +833,7 @@ static void sub_80889A8(u8 selection) "\tpop {r0}\n" "\tbx r0\n" "\t.align 2, 0\n" - "_08088AF8: .4byte gUnknown_8419E52\n" + "_08088AF8: .4byte gText_FrameType\n" "_08088AFC: .4byte sOptionsMenu\n"); } #endif @@ -846,14 +864,13 @@ static void sub_8088B00(u8 taskId) static void sub_8088BD0(void) { FillWindowPixelBuffer(0, 0x11); - AddTextPrinterParameterized(WIN_TEXT_OPTION, 2, gUnknown_8419DCC, 8, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(WIN_TEXT_OPTION, 2, gText_MenuOptionOption, 8, 1, TEXT_SPEED_FF, NULL); PutWindowTilemap(0); CopyWindowToVram(0, 3); } //sub_8088C0C -//double check static void sub_8088C0C(void) { u8 h; @@ -863,7 +880,7 @@ static void sub_8088C0C(void) FillBgTilemapBufferRect(1, 0x1B4, 2, 2, 0x1B, 1, 3); FillBgTilemapBufferRect(1, 0x1B5, 0x1C, 2, 1, 1, 3); FillBgTilemapBufferRect(1, 0x1B6, 1, 3, 1, h, 3); - FillBgTilemapBufferRect(1, 0x1B8, 1, 0x1C, 1, h, 3); + FillBgTilemapBufferRect(1, 0x1B8, 0x1C, 3, 1, h, 3); FillBgTilemapBufferRect(1, 0x1B9, 1, 5, 1, 1, 3); FillBgTilemapBufferRect(1, 0x1BA, 2, 5, 0x1B, 1, 3); FillBgTilemapBufferRect(1, 0x1BB, 0x1C, 5, 1, 1, 3); @@ -878,24 +895,15 @@ static void sub_8088C0C(void) CopyBgTilemapBufferToVram(1); } - //sub_8088D8C static void sub_8088D8C(void) { - int i; - u8 y; + u8 i; FillWindowPixelBuffer(1, 0x11); - for (i = 0; i < MENUITEM_COUNT; i++) { - //AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, (u8) ((i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, 0xFF, 0); - //gets registers right, but an lsl/lsr 0x18 after GetFontAttribute that shouldn't be there - y = i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); - y += 2; - y -= i; - AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, y, 0xFF, 0); - + AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, (u8) ((i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, 0xFF, 0); } } @@ -903,9 +911,11 @@ static void sub_8088D8C(void) //sub_8088DE0 static void sub_8088DE0(u16 selection) { - u8 attr; - attr = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT); - SetGpuReg(0x44, ((selection * (attr - 1) + 58) << 8) | (selection * (attr - 1) + 58 + attr)); - SetGpuReg(0x40, 4320); + u16 v1, v2; + + v1 = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT); + v2 = selection * (v1 - 1) + 0x3A; + SetGpuReg(0x44, (v2 << 8) | (v2 + v1)); + SetGpuReg(0x40, 0x10E0); } -- cgit v1.2.3 From 5bb5d38d225d4ea426b6bf90778a10cb42cb84d4 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 18 Nov 2019 21:41:45 -0700 Subject: match baserom --- data/option_menu.s | 44 -------------------------------------------- include/strings.h | 3 +-- ld_script.txt | 2 +- src/option_menu.c | 16 +++++++++------- 4 files changed, 11 insertions(+), 54 deletions(-) delete mode 100644 data/option_menu.s diff --git a/data/option_menu.s b/data/option_menu.s deleted file mode 100644 index f8a590d6d..000000000 --- a/data/option_menu.s +++ /dev/null @@ -1,44 +0,0 @@ -#include "constants/maps.h" -#include "constants/species.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnknown_83CC2B8:: @ 83CC2B8 - .incbin "baserom.gba", 0x3CC2B8, 0x20 - -gUnknown_83CC2D8:: @ 83CC2D8 - .incbin "baserom.gba", 0x3CC2D8, 0xC - -gUnknown_83CC2E4:: @ 83CC2E4 - .incbin "baserom.gba", 0x3CC2E4, 0x20 - -gUnknown_83CC304:: @ 83CC304 - .incbin "baserom.gba", 0x3CC304, 0x10 - -gUnknown_83CC314:: @ 83CC314 - .incbin "baserom.gba", 0x3CC314, 0x1C - -gUnknown_83CC330:: @ 83CC330 - .incbin "baserom.gba", 0x3CC330, 0xC - -gUnknown_83CC33C:: @ 83CC33C - .incbin "baserom.gba", 0x3CC33C, 0x8 - -gUnknown_83CC344:: @ 83CC344 - .incbin "baserom.gba", 0x3CC344, 0x8 - -gUnknown_83CC34C:: @ 83CC34C - .incbin "baserom.gba", 0x3CC34C, 0x8 - -gUnknown_83CC354:: @ 83CC354 - .incbin "baserom.gba", 0x3CC354, 0xC - -gUnknown_83CC360:: @ 83CC360 - .incbin "baserom.gba", 0x3CC360, 0x3 - -gUnknown_83CC363:: @ 83CC363 - .incbin "baserom.gba", 0x3CC363, 0x3 - diff --git a/include/strings.h b/include/strings.h index 9d4d26ba1..89149a8eb 100644 --- a/include/strings.h +++ b/include/strings.h @@ -763,7 +763,7 @@ extern const u8 gText_DecimalPoint[]; // map_name_popup extern const u8 gUnknown_841D18D[]; -// options menu +// option menu extern const u8 gText_TextSpeed[]; extern const u8 gText_BattleScene[]; extern const u8 gText_BattleStyle[]; @@ -787,5 +787,4 @@ extern const u8 gText_MenuOptionOption[]; extern const u8 gText_FrameType[]; extern const u8 gText_PickSwitchCancel[]; - #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index ddf3eaa47..50d647cda 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -432,7 +432,7 @@ SECTIONS { data/trainer_see.o(.rodata); src/wild_encounter.o(.rodata); data/field_effect.o(.rodata); - data/option_menu.o(.rodata); + src/option_menu.o(.rodata); data/trainer_card.o(.rodata); data/pokemon_storage_system.o(.rodata); src/pokemon_icon.o(.rodata); diff --git a/src/option_menu.c b/src/option_menu.c index c1cde37a6..54b0e29cb 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -38,8 +38,8 @@ enum WIN_TEXT_OPTION, WIN_OPTIONS, }; -/* -static const struct WindowTemplate gUnknown_83CC2B8[] = //3CC2B8 -> sOptionMenuWinTemplates + +static const struct WindowTemplate gUnknown_83CC2B8[4] = //3CC2B8 -> sOptionMenuWinTemplates { { .bg = 1, @@ -70,7 +70,7 @@ static const struct WindowTemplate gUnknown_83CC2B8[] = //3CC2B8 -> sOptionMe }, DUMMY_WIN_TEMPLATE, }; -static const struct BgTemplate gUnknown_83CC2D8[] = //3CC2D8 -> sOptionMenuBgTemplates +static const struct BgTemplate gUnknown_83CC2D8[3] = //3CC2D8 -> sOptionMenuBgTemplates { { .bg = 1, @@ -79,7 +79,7 @@ static const struct BgTemplate gUnknown_83CC2D8[] = //3CC2D8 -> sOptionMenuBg .screenSize = 0, .paletteMode = 0, .priority = 0, - .baseTile = 0 + .baseTile = 0, }, { .bg = 0, @@ -88,7 +88,7 @@ static const struct BgTemplate gUnknown_83CC2D8[] = //3CC2D8 -> sOptionMenuBg .screenSize = 0, .paletteMode = 0, .priority = 1, - .baseTile = 0 + .baseTile = 0, }, { .bg = 2, @@ -119,9 +119,10 @@ static const u8* gUnknown_83CC34C[] = {gText_SoundMono, gText_SoundStereo}; //3 static const u8* gUnknown_83CC354[] = {gText_ButtonTypeNormal, gText_ButtonTypeLR, gText_ButtonTypeLEqualsA}; //3CC354 static const u8 gUnknown_83CC360[] = {0xF, 0x1, 0x2}; //3CC360 static const u8 gUnknown_83CC363[] = {0, 5, 4, 0, 0}; //3CC363 -*/ -extern const struct WindowTemplate gUnknown_83CC2B8[3]; + +/* +extern const struct WindowTemplate gUnknown_83CC2B8[4]; extern const struct BgTemplate gUnknown_83CC2D8[3]; extern const u16 gUnknown_83CC2E4[0x20]; extern const u16 gUnknown_83CC304[MENUITEM_COUNT]; @@ -133,6 +134,7 @@ extern const u8* gUnknown_83CC34C[8]; extern const u8* gUnknown_83CC354[12]; extern const u8 gUnknown_83CC360[3]; extern const u8 gUnknown_83CC363[3]; +*/ //This file's functions static void sub_808835C(void); -- cgit v1.2.3 From 79b2bc17124bf69ce6486ff7db60798454ba538c Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 19 Nov 2019 09:46:10 -0700 Subject: update option menu const structs --- include/text.h | 13 +++ src/option_menu.c | 258 ++++++++++++++++++++++++++++-------------------------- sym_ewram.txt | 2 +- 3 files changed, 146 insertions(+), 127 deletions(-) diff --git a/include/text.h b/include/text.h index c4199190f..578a0d735 100644 --- a/include/text.h +++ b/include/text.h @@ -81,6 +81,19 @@ #define TEXT_COLOR_TRANSPARENT 0x0 #define TEXT_COLOR_WHITE 0x1 #define TEXT_COLOR_DARK_GREY 0x2 +#define TEXT_COLOR_LIGHT_GREY 0x3 +#define TEXT_COLOR_RED 0x4 +#define TEXT_COLOR_LIGHT_RED 0x5 +#define TEXT_COLOR_GREEN 0x6 +#define TEXT_COLOR_LIGHT_GREEN 0x7 +#define TEXT_COLOR_BLUE 0x8 +#define TEXT_COLOR_LIGHT_BLUE 0x9 +#define TEXT_DYNAMIC_COLOR_1 0xA // Usually white +#define TEXT_DYNAMIC_COLOR_2 0xB // Usually white w/ tinge of green +#define TEXT_DYNAMIC_COLOR_3 0xC // Usually white +#define TEXT_DYNAMIC_COLOR_4 0xD // Usually aquamarine +#define TEXT_DYNAMIC_COLOR_5 0xE // Usually blue-green +#define TEXT_DYNAMIC_COLOR_6 0xF // Usually cerulean // battle placeholders are located in battle_message.h #define EXT_CTRL_CODE_COLOR 0x1 diff --git a/src/option_menu.c b/src/option_menu.c index 54b0e29cb..4898ac1cd 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -19,7 +19,6 @@ #include "field_fadetransition.h" #include "gba/m4a_internal.h" - // Menu items enum { @@ -39,7 +38,7 @@ enum WIN_OPTIONS, }; -static const struct WindowTemplate gUnknown_83CC2B8[4] = //3CC2B8 -> sOptionMenuWinTemplates +static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8 { { .bg = 1, @@ -70,7 +69,7 @@ static const struct WindowTemplate gUnknown_83CC2B8[4] = //3CC2B8 -> sOptionM }, DUMMY_WIN_TEMPLATE, }; -static const struct BgTemplate gUnknown_83CC2D8[3] = //3CC2D8 -> sOptionMenuBgTemplates +static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8 { { .bg = 1, @@ -100,9 +99,9 @@ static const struct BgTemplate gUnknown_83CC2D8[3] = //3CC2D8 -> sOptionMenuB .baseTile = 0, }, }; -static const u16 gUnknown_83CC2E4[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal"); //3CC2E4 -static const u16 gUnknown_83CC304[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //3CC304 -> sOptionsMenuItemCounts -static const u8* gUnknown_83CC314[MENUITEM_COUNT] = //3CC314 -> sOptionMenuItemsNames +static const u16 sOptionsMenuPalette[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal"); //3CC2E4 +static const u16 sOptionsMenuItemCounts[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //3CC304 +static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = //3CC314 { [MENUITEM_TEXTSPEED] = gText_TextSpeed, [MENUITEM_BATTLESCENE] = gText_BattleScene, @@ -112,29 +111,36 @@ static const u8* gUnknown_83CC314[MENUITEM_COUNT] = //3CC314 -> sOptionMenuI [MENUITEM_FRAMETYPE] = gText_Frame, [MENUITEM_CANCEL] = gText_OptionMenuCancel, }; -static const u8* gUnknown_83CC330[] = {gText_TextSpeedSlow, gText_TextSpeedMid, gText_TextSpeedFast}; //3CC330 -static const u8* gUnknown_83CC33C[] = {gText_BattleSceneOn, gText_BattleSceneOff}; //3CC33C -static const u8* gUnknown_83CC344[] = {gText_BattleStyleShift, gText_BattleStyleSet}; //3CC344 -static const u8* gUnknown_83CC34C[] = {gText_SoundMono, gText_SoundStereo}; //3CC34C -static const u8* gUnknown_83CC354[] = {gText_ButtonTypeNormal, gText_ButtonTypeLR, gText_ButtonTypeLEqualsA}; //3CC354 -static const u8 gUnknown_83CC360[] = {0xF, 0x1, 0x2}; //3CC360 -static const u8 gUnknown_83CC363[] = {0, 5, 4, 0, 0}; //3CC363 - - -/* -extern const struct WindowTemplate gUnknown_83CC2B8[4]; -extern const struct BgTemplate gUnknown_83CC2D8[3]; -extern const u16 gUnknown_83CC2E4[0x20]; -extern const u16 gUnknown_83CC304[MENUITEM_COUNT]; -extern const u8* gUnknown_83CC314[MENUITEM_COUNT]; -extern const u8* gUnknown_83CC330[12]; -extern const u8* gUnknown_83CC33C[8]; -extern const u8* gUnknown_83CC344[8]; -extern const u8* gUnknown_83CC34C[8]; -extern const u8* gUnknown_83CC354[12]; -extern const u8 gUnknown_83CC360[3]; -extern const u8 gUnknown_83CC363[3]; -*/ +static const u8 *const sTextSpeedOptions[] = //3CC330 +{ + gText_TextSpeedSlow, + gText_TextSpeedMid, + gText_TextSpeedFast +}; +static const u8 *const sBattleSceneOptions[] = //3CC33C +{ + gText_BattleSceneOn, + gText_BattleSceneOff +}; +static const u8 *const sBattleStyleOptions[] = //3CC344 +{ + gText_BattleStyleShift, + gText_BattleStyleSet +}; +static const u8 *const sSoundOptions[] = //3CC34C +{ + gText_SoundMono, + gText_SoundStereo +}; +static const u8 *const sButtonTypeOptions[] = //3CC354 +{ + gText_ButtonTypeNormal, + gText_ButtonTypeLEqualsA, + gText_ButtonTypeLR, +}; +static const u8 sOptionsMenuPickSwitchCancelTextColor[] = {TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; //3CC360 +static const u8 sOptionsMenuTextColor[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_RED}; //3CC363 + //This file's functions static void sub_808835C(void); @@ -166,7 +172,7 @@ struct OptionsMenu /*0x13*/ u8 unk13; }; -EWRAM_DATA struct OptionsMenu *sOptionsMenu = {0}; +EWRAM_DATA struct OptionsMenu *sOptionsMenuPtr = {0}; @@ -196,22 +202,22 @@ void CB2_OptionsMenuFromStartMenu(void) if (gMain.savedCallback == NULL) gMain.savedCallback = CB2_ReturnToStartMenu; - sOptionsMenu = AllocZeroed(sizeof(struct OptionsMenu)); - sOptionsMenu->state3 = 0; - sOptionsMenu->state2 = 0; - sOptionsMenu->state = 0; - sOptionsMenu->unkE = 0; - sOptionsMenu->option[MENUITEM_TEXTSPEED] = gSaveBlock2Ptr->optionsTextSpeed; - sOptionsMenu->option[MENUITEM_BATTLESCENE] = gSaveBlock2Ptr->optionsBattleSceneOff; - sOptionsMenu->option[MENUITEM_BATTLESTYLE] = gSaveBlock2Ptr->optionsBattleStyle; - sOptionsMenu->option[MENUITEM_SOUND] = gSaveBlock2Ptr->optionsSound; - sOptionsMenu->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode; - sOptionsMenu->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType; + sOptionsMenuPtr = AllocZeroed(sizeof(struct OptionsMenu)); + sOptionsMenuPtr->state3 = 0; + sOptionsMenuPtr->state2 = 0; + sOptionsMenuPtr->state = 0; + sOptionsMenuPtr->unkE = 0; + sOptionsMenuPtr->option[MENUITEM_TEXTSPEED] = gSaveBlock2Ptr->optionsTextSpeed; + sOptionsMenuPtr->option[MENUITEM_BATTLESCENE] = gSaveBlock2Ptr->optionsBattleSceneOff; + sOptionsMenuPtr->option[MENUITEM_BATTLESTYLE] = gSaveBlock2Ptr->optionsBattleStyle; + sOptionsMenuPtr->option[MENUITEM_SOUND] = gSaveBlock2Ptr->optionsSound; + sOptionsMenuPtr->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode; + sOptionsMenuPtr->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType; for (i = 0; i < MENUITEM_COUNT-1; i++) { - if (sOptionsMenu->option[i] > (gUnknown_83CC304[i])-1) - sOptionsMenu->option[i] = 0; + if (sOptionsMenuPtr->option[i] > (sOptionsMenuItemCounts[i])-1) + sOptionsMenuPtr->option[i] = 0; } HelpSystem_SetSomeVariable2(0xD); SetMainCallback2(sub_8088454); @@ -236,7 +242,7 @@ static void sub_8088444(void) static void sub_8088454(void) { u8 i, state; - state = sOptionsMenu->state; + state = sOptionsMenuPtr->state; switch (state) { case 0: @@ -266,7 +272,7 @@ static void sub_8088454(void) sub_80889A8(i); break; case 8: - sub_8088DE0(sOptionsMenu->unkE); + sub_8088DE0(sOptionsMenuPtr->unkE); break; case 9: sub_8088680(); @@ -274,7 +280,7 @@ static void sub_8088454(void) default: sub_8088514(); } - sOptionsMenu->state++; + sOptionsMenuPtr->state++; } //sub_8088514 @@ -295,7 +301,7 @@ static void sub_8088530(void) DmaClear16(3, (void *)PLTT, PLTT_SIZE); SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_83CC2D8, ARRAY_COUNT(gUnknown_83CC2D8)); + InitBgsFromTemplates(0, sOptionMenuBgTemplates, ARRAY_COUNT(sOptionMenuBgTemplates)); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); @@ -304,7 +310,7 @@ static void sub_8088530(void) ChangeBgY(2, 0, 0); ChangeBgX(3, 0, 0); ChangeBgY(3, 0, 0); - InitWindows(gUnknown_83CC2B8); + InitWindows(sOptionMenuWinTemplates); DeactivateAllTextPrinters(); SetGpuReg(REG_OFFSET_BLDCNT, 0xC1); SetGpuReg(REG_OFFSET_BLDY, 2); @@ -322,7 +328,7 @@ static void sub_8088680(void) s32 x; x = 0xE4 - GetStringWidth(0, gText_PickSwitchCancel, 0); FillWindowPixelBuffer(2, 0xFF); - AddTextPrinterParameterized3(2, 0, x, 0, gUnknown_83CC360, 0, gText_PickSwitchCancel); + AddTextPrinterParameterized3(2, 0, x, 0, sOptionsMenuPickSwitchCancelTextColor, 0, gText_PickSwitchCancel); PutWindowTilemap(2); CopyWindowToVram(2, 3); } @@ -341,16 +347,16 @@ static void sub_80886D4(void) //sub_80886F0 static bool8 sub_80886F0(void) { - switch (sOptionsMenu->state2) + switch (sOptionsMenuPtr->state2) { case 0: - LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); break; case 1: - LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); + LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); break; case 2: - LoadPalette(gUnknown_83CC2E4, 0x10, 0x20); + LoadPalette(sOptionsMenuPalette, 0x10, 0x20); LoadPalette(stdpal_get(2), 0xF0, 0x20); break; case 3: @@ -359,7 +365,7 @@ static bool8 sub_80886F0(void) default: return TRUE; } - sOptionsMenu->state2++; + sOptionsMenuPtr->state2++; return FALSE; } @@ -372,12 +378,12 @@ static void sub_8088780(u8 taskId) u8 v2, v5; struct OptionsMenu v4; - switch (sOptionsMenu->state3) + switch (sOptionsMenuPtr->state3) { case 0: BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); sub_8088444(); - sOptionsMenu->state3++; + sOptionsMenuPtr->state3++; break; case 2: if ((bool32) sub_80BF72C() == TRUE) //cast to bool32 to remove the lsl/lsr 0x18 after func call @@ -385,32 +391,32 @@ static void sub_8088780(u8 taskId) switch (sub_80888C0()) { case 1: - sOptionsMenu->state3++; + sOptionsMenuPtr->state3++; break; case 2: - LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); - LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); - sub_80889A8(sOptionsMenu->unkE); - sOptionsMenu->state3++; + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); + LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); + sub_80889A8(sOptionsMenuPtr->unkE); + sOptionsMenuPtr->state3++; break; case 3: - sub_8088DE0(sOptionsMenu->unkE); + sub_8088DE0(sOptionsMenuPtr->unkE); break; case 4: - sub_80889A8(sOptionsMenu->unkE); - sOptionsMenu->state3++; + sub_80889A8(sOptionsMenuPtr->unkE); + sOptionsMenuPtr->state3++; break; default: return; } case 3: BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - sOptionsMenu->state3++; + sOptionsMenuPtr->state3++; case 1: case 4: if (gPaletteFade.active) return; - sOptionsMenu->state3++; + sOptionsMenuPtr->state3++; case 5: sub_8088B00(taskId); break; @@ -426,7 +432,7 @@ static void sub_8088780(u8 taskId) "\tsub sp, 0x4\n" "\tlsls r0, 24\n" "\tlsrs r2, r0, 24\n" - "\tldr r1, _080887A0 @ =sOptionsMenu\n" + "\tldr r1, _080887A0 @ =sOptionsMenuPtr\n" "\tldr r0, [r1]\n" "\tldrb r0, [r0, 0x10]\n" "\tadds r3, r1, 0\n" @@ -440,7 +446,7 @@ static void sub_8088780(u8 taskId) "\tldr r0, [r0]\n" "\tmov pc, r0\n" "\t.align 2, 0\n" - "_080887A0: .4byte sOptionsMenu\n" + "_080887A0: .4byte sOptionsMenuPtr\n" "_080887A4: .4byte _080887A8\n" "\t.align 2, 0\n" "_080887A8:\n" @@ -459,11 +465,11 @@ static void sub_8088780(u8 taskId) "\tmovs r3, 0\n" "\tbl BeginNormalPaletteFade\n" "\tbl sub_8088444\n" - "\tldr r0, _080887DC @ =sOptionsMenu\n" + "\tldr r0, _080887DC @ =sOptionsMenuPtr\n" "\tldr r1, [r0]\n" "\tb _080888A2\n" "\t.align 2, 0\n" - "_080887DC: .4byte sOptionsMenu\n" + "_080887DC: .4byte sOptionsMenuPtr\n" "_080887E0:\n" "\tbl sub_80BF72C\n" "\tcmp r0, 0x1\n" @@ -488,13 +494,13 @@ static void sub_8088780(u8 taskId) "\t.4byte _08088858\n" "\t.4byte _08088868\n" "_08088818:\n" - "\tldr r0, _08088820 @ =sOptionsMenu\n" + "\tldr r0, _08088820 @ =sOptionsMenuPtr\n" "\tldr r1, [r0]\n" "\tb _080888A2\n" "\t.align 2, 0\n" - "_08088820: .4byte sOptionsMenu\n" + "_08088820: .4byte sOptionsMenuPtr\n" "_08088824:\n" - "\tldr r4, _08088854 @ =sOptionsMenu\n" + "\tldr r4, _08088854 @ =sOptionsMenuPtr\n" "\tldr r0, [r4]\n" "\tldrb r0, [r0, 0xA]\n" "\tbl GetUserFrameGraphicsInfo\n" @@ -515,24 +521,24 @@ static void sub_8088780(u8 taskId) "\tldr r0, [r4]\n" "\tb _0808886C\n" "\t.align 2, 0\n" - "_08088854: .4byte sOptionsMenu\n" + "_08088854: .4byte sOptionsMenuPtr\n" "_08088858:\n" - "\tldr r0, _08088864 @ =sOptionsMenu\n" + "\tldr r0, _08088864 @ =sOptionsMenuPtr\n" "\tldr r0, [r0]\n" "\tldrh r0, [r0, 0xE]\n" "\tbl sub_8088DE0\n" "\tb _080888B6\n" "\t.align 2, 0\n" - "_08088864: .4byte sOptionsMenu\n" + "_08088864: .4byte sOptionsMenuPtr\n" "_08088868:\n" - "\tldr r0, _08088874 @ =sOptionsMenu\n" + "\tldr r0, _08088874 @ =sOptionsMenuPtr\n" "\tldr r0, [r0]\n" "_0808886C:\n" "\tldrb r0, [r0, 0xE]\n" "\tbl sub_80889A8\n" "\tb _080888B6\n" "\t.align 2, 0\n" - "_08088874: .4byte sOptionsMenu\n" + "_08088874: .4byte sOptionsMenuPtr\n" "_08088878:\n" "\tmovs r0, 0x1\n" "\tnegs r0, r0\n" @@ -541,11 +547,11 @@ static void sub_8088780(u8 taskId) "\tmovs r2, 0\n" "\tmovs r3, 0x10\n" "\tbl BeginNormalPaletteFade\n" - "\tldr r0, _08088890 @ =sOptionsMenu\n" + "\tldr r0, _08088890 @ =sOptionsMenuPtr\n" "\tldr r1, [r0]\n" "\tb _080888A2\n" "\t.align 2, 0\n" - "_08088890: .4byte sOptionsMenu\n" + "_08088890: .4byte sOptionsMenuPtr\n" "_08088894:\n" "\tldr r0, _080888AC @ =gPaletteFade\n" "\tldrb r1, [r0, 0x7]\n" @@ -579,43 +585,43 @@ static u8 sub_80888C0(void) u16* curr; if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { - current = sOptionsMenu->option[(sOptionsMenu->unkE)]; - if (current == (gUnknown_83CC304[sOptionsMenu->unkE] - 1)) - sOptionsMenu->option[sOptionsMenu->unkE] = 0; + current = sOptionsMenuPtr->option[(sOptionsMenuPtr->unkE)]; + if (current == (sOptionsMenuItemCounts[sOptionsMenuPtr->unkE] - 1)) + sOptionsMenuPtr->option[sOptionsMenuPtr->unkE] = 0; else - sOptionsMenu->option[sOptionsMenu->unkE] = current + 1; - if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE) + sOptionsMenuPtr->option[sOptionsMenuPtr->unkE] = current + 1; + if (sOptionsMenuPtr->unkE == MENUITEM_FRAMETYPE) return 2; else return 4; } else if (gMain.newAndRepeatedKeys & DPAD_LEFT) { - curr = &sOptionsMenu->option[sOptionsMenu->unkE]; + curr = &sOptionsMenuPtr->option[sOptionsMenuPtr->unkE]; if (*curr == 0) - *curr = gUnknown_83CC304[sOptionsMenu->unkE] - 1; + *curr = sOptionsMenuItemCounts[sOptionsMenuPtr->unkE] - 1; else --*(curr); - if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE) + if (sOptionsMenuPtr->unkE == MENUITEM_FRAMETYPE) return 2; else return 4; } else if (gMain.newAndRepeatedKeys & DPAD_UP) { - if (sOptionsMenu->unkE == MENUITEM_TEXTSPEED) - sOptionsMenu->unkE = MENUITEM_CANCEL; + if (sOptionsMenuPtr->unkE == MENUITEM_TEXTSPEED) + sOptionsMenuPtr->unkE = MENUITEM_CANCEL; else - sOptionsMenu->unkE = sOptionsMenu->unkE - 1; + sOptionsMenuPtr->unkE = sOptionsMenuPtr->unkE - 1; return 3; } else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { - if (sOptionsMenu->unkE == MENUITEM_CANCEL) - sOptionsMenu->unkE = MENUITEM_TEXTSPEED; + if (sOptionsMenuPtr->unkE == MENUITEM_CANCEL) + sOptionsMenuPtr->unkE = MENUITEM_TEXTSPEED; else - sOptionsMenu->unkE = sOptionsMenu->unkE + 1; + sOptionsMenuPtr->unkE = sOptionsMenuPtr->unkE + 1; return 3; } else if ((gMain.newKeys & B_BUTTON) || (gMain.newKeys & A_BUTTON)) @@ -638,7 +644,7 @@ static void sub_80889A8(u8 selection) u8* v8; u8 x, y; - memcpy(&dst, gUnknown_83CC363, 3); + memcpy(&dst, sOptionsMenuTextColor, 3); y = ((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2; x = 0x82; FillWindowPixelRect(1, 1, x, y, 0x46, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); @@ -646,23 +652,23 @@ static void sub_80889A8(u8 selection) switch (selection) { case MENUITEM_TEXTSPEED: - AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC330); + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sTextSpeedOptions); break; case MENUITEM_BATTLESCENE: - AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC33C); + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sBattleSceneOptions); break; case MENUITEM_BATTLESTYLE: - AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC344); + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sBattleStyleOptions); break; case MENUITEM_SOUND: - AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC34C); + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sSoundOptions); break; case MENUITEM_BUTTONMODE: - AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC354); + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sButtonTypeOptions); break; case MENUITEM_FRAMETYPE: StringCopy(str, gText_FrameType); - ConvertIntToDecimalStringN(v8, sOptionsMenu->option[2*selection] + 1, 1, 2); + ConvertIntToDecimalStringN(v8, sOptionsMenuPtr->option[2*selection] + 1, 1, 2); StringAppendN(str, v8, 3); AddTextPrinterParameterized3(1, 2, x, y, dst, -1, str); break; @@ -683,7 +689,7 @@ static void sub_80889A8(u8 selection) "\tlsls r0, 24\n" "\tlsrs r5, r0, 24\n" "\tadd r4, sp, 0x2C\n" - "\tldr r1, _08088A08 @ =gUnknown_83CC363\n" + "\tldr r1, _08088A08 @ =sOptionsMenuTextColor\n" "\tadds r0, r4, 0\n" "\tmovs r2, 0x3\n" "\tbl memcpy\n" @@ -721,7 +727,7 @@ static void sub_80889A8(u8 selection) "\tldr r0, [r0]\n" "\tmov pc, r0\n" "\t.align 2, 0\n" - "_08088A08: .4byte gUnknown_83CC363\n" + "_08088A08: .4byte sOptionsMenuTextColor\n" "_08088A0C: .4byte _08088A10\n" "\t.align 2, 0\n" "_08088A10:\n" @@ -736,45 +742,45 @@ static void sub_80889A8(u8 selection) "\tmovs r0, 0x1\n" "\tnegs r0, r0\n" "\tstr r0, [sp, 0x4]\n" - "\tldr r2, _08088A34 @ =gUnknown_83CC330\n" + "\tldr r2, _08088A34 @ =sTextSpeedOptions\n" "\tb _08088A72\n" "\t.align 2, 0\n" - "_08088A34: .4byte gUnknown_83CC330\n" + "_08088A34: .4byte sTextSpeedOptions\n" "_08088A38:\n" "\tstr r6, [sp]\n" "\tmovs r0, 0x1\n" "\tnegs r0, r0\n" "\tstr r0, [sp, 0x4]\n" - "\tldr r2, _08088A44 @ =gUnknown_83CC33C\n" + "\tldr r2, _08088A44 @ =sBattleSceneOptions\n" "\tb _08088A72\n" "\t.align 2, 0\n" - "_08088A44: .4byte gUnknown_83CC33C\n" + "_08088A44: .4byte sBattleSceneOptions\n" "_08088A48:\n" "\tstr r6, [sp]\n" "\tmovs r0, 0x1\n" "\tnegs r0, r0\n" "\tstr r0, [sp, 0x4]\n" - "\tldr r2, _08088A54 @ =gUnknown_83CC344\n" + "\tldr r2, _08088A54 @ =sBattleStyleOptions\n" "\tb _08088A72\n" "\t.align 2, 0\n" - "_08088A54: .4byte gUnknown_83CC344\n" + "_08088A54: .4byte sBattleStyleOptions\n" "_08088A58:\n" "\tstr r6, [sp]\n" "\tmovs r0, 0x1\n" "\tnegs r0, r0\n" "\tstr r0, [sp, 0x4]\n" - "\tldr r2, _08088A64 @ =gUnknown_83CC34C\n" + "\tldr r2, _08088A64 @ =sSoundOptions\n" "\tb _08088A72\n" "\t.align 2, 0\n" - "_08088A64: .4byte gUnknown_83CC34C\n" + "_08088A64: .4byte sSoundOptions\n" "_08088A68:\n" "\tstr r6, [sp]\n" "\tmovs r0, 0x1\n" "\tnegs r0, r0\n" "\tstr r0, [sp, 0x4]\n" - "\tldr r2, _08088A94 @ =gUnknown_83CC354\n" + "\tldr r2, _08088A94 @ =sButtonTypeOptions\n" "_08088A72:\n" - "\tldr r0, _08088A98 @ =sOptionsMenu\n" + "\tldr r0, _08088A98 @ =sOptionsMenuPtr\n" "\tldr r0, [r0]\n" "\tlsls r1, r5, 1\n" "\tadds r0, r1\n" @@ -790,14 +796,14 @@ static void sub_80889A8(u8 selection) "\tbl AddTextPrinterParameterized3\n" "\tb _08088ADE\n" "\t.align 2, 0\n" - "_08088A94: .4byte gUnknown_83CC354\n" - "_08088A98: .4byte sOptionsMenu\n" + "_08088A94: .4byte sButtonTypeOptions\n" + "_08088A98: .4byte sOptionsMenuPtr\n" "_08088A9C:\n" "\tldr r1, _08088AF8 @ =gText_FrameType\n" "\tadd r0, sp, 0xC\n" "\tbl StringCopy\n" "\tadd r4, sp, 0x20\n" - "\tldr r0, _08088AFC @ =sOptionsMenu\n" + "\tldr r0, _08088AFC @ =sOptionsMenuPtr\n" "\tldr r0, [r0]\n" "\tlsls r1, r5, 1\n" "\tadds r0, r1\n" @@ -836,7 +842,7 @@ static void sub_80889A8(u8 selection) "\tbx r0\n" "\t.align 2, 0\n" "_08088AF8: .4byte gText_FrameType\n" - "_08088AFC: .4byte sOptionsMenu\n"); + "_08088AFC: .4byte sOptionsMenuPtr\n"); } #endif @@ -848,15 +854,15 @@ static void sub_8088B00(u8 taskId) SetMainCallback2(gMain.savedCallback); FreeAllWindowBuffers(); - gSaveBlock2Ptr->optionsTextSpeed = (u8) sOptionsMenu->option[MENUITEM_TEXTSPEED]; - gSaveBlock2Ptr->optionsBattleSceneOff = (u8) sOptionsMenu->option[MENUITEM_BATTLESCENE]; - gSaveBlock2Ptr->optionsBattleStyle = (u8) sOptionsMenu->option[MENUITEM_BATTLESTYLE]; - gSaveBlock2Ptr->optionsSound = sOptionsMenu->option[MENUITEM_SOUND]; - gSaveBlock2Ptr->optionsButtonMode = (u8) sOptionsMenu->option[MENUITEM_BUTTONMODE]; - gSaveBlock2Ptr->optionsWindowFrameType = (u8) sOptionsMenu->option[MENUITEM_FRAMETYPE]; + gSaveBlock2Ptr->optionsTextSpeed = (u8) sOptionsMenuPtr->option[MENUITEM_TEXTSPEED]; + gSaveBlock2Ptr->optionsBattleSceneOff = (u8) sOptionsMenuPtr->option[MENUITEM_BATTLESCENE]; + gSaveBlock2Ptr->optionsBattleStyle = (u8) sOptionsMenuPtr->option[MENUITEM_BATTLESTYLE]; + gSaveBlock2Ptr->optionsSound = sOptionsMenuPtr->option[MENUITEM_SOUND]; + gSaveBlock2Ptr->optionsButtonMode = (u8) sOptionsMenuPtr->option[MENUITEM_BUTTONMODE]; + gSaveBlock2Ptr->optionsWindowFrameType = (u8) sOptionsMenuPtr->option[MENUITEM_FRAMETYPE]; SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); - Free(sOptionsMenu); - sOptionsMenu = NULL; + Free(sOptionsMenuPtr); + sOptionsMenuPtr = NULL; DestroyTask(taskId); } @@ -905,7 +911,7 @@ static void sub_8088D8C(void) FillWindowPixelBuffer(1, 0x11); for (i = 0; i < MENUITEM_COUNT; i++) { - AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, (u8) ((i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, 0xFF, 0); + AddTextPrinterParameterized(1, 2, sOptionMenuItemsNames[i], 8, (u8) ((i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, 0xFF, 0); } } diff --git a/sym_ewram.txt b/sym_ewram.txt index cec65b59c..8ff8247d9 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -226,7 +226,7 @@ gFieldEffectArguments: @ 20386E0 .include "src/scanline_effect.o" .align 2 -sOptionsMenu: @ 2039620 +sOptionsMenuPtr: @ 2039620 .space 0x4 gTrainerCards: @ 2039624 -- cgit v1.2.3 From a50adf3a1bc7c63b53caea72d23d61899e086eac Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 19 Nov 2019 09:53:23 -0700 Subject: fix formatting on option menu --- ld_script.txt | 2 +- src/option_menu.c | 70 +++++++++++++++++++++++++++---------------------------- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/ld_script.txt b/ld_script.txt index 50d647cda..a6676b100 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -128,7 +128,7 @@ SECTIONS { src/wild_encounter.o(.text); asm/field_effect.o(.text); src/scanline_effect.o(.text); - src/option_menu.o(.text); + src/option_menu.o(.text); src/pokedex.o(.text); asm/trainer_card.o(.text); asm/pokemon_storage_system.o(.text); diff --git a/src/option_menu.c b/src/option_menu.c index 4898ac1cd..8450633f5 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -58,15 +58,15 @@ static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8 .paletteNum = 1, .baseBlock = 0x36, }, - { - .bg = 2, - .tilemapLeft = 0, - .tilemapTop = 0, - .width = 30, - .height = 2, - .paletteNum = 0xF, - .baseBlock = 0x16e, - }, + { + .bg = 2, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 30, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x16e, + }, DUMMY_WIN_TEMPLATE, }; static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8 @@ -90,16 +90,16 @@ static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8 .baseTile = 0, }, { - .bg = 2, - .charBaseIndex = 1, - .mapBaseIndex = 29, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0, + .bg = 2, + .charBaseIndex = 1, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0, }, }; -static const u16 sOptionsMenuPalette[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal"); //3CC2E4 +static const u16 sOptionsMenuPalette[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal"); //3CC2E4 static const u16 sOptionsMenuItemCounts[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //3CC304 static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = //3CC314 { @@ -111,35 +111,35 @@ static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = //3CC314 [MENUITEM_FRAMETYPE] = gText_Frame, [MENUITEM_CANCEL] = gText_OptionMenuCancel, }; -static const u8 *const sTextSpeedOptions[] = //3CC330 +static const u8 *const sTextSpeedOptions[] = //3CC330 { - gText_TextSpeedSlow, - gText_TextSpeedMid, - gText_TextSpeedFast + gText_TextSpeedSlow, + gText_TextSpeedMid, + gText_TextSpeedFast }; -static const u8 *const sBattleSceneOptions[] = //3CC33C +static const u8 *const sBattleSceneOptions[] = //3CC33C { - gText_BattleSceneOn, - gText_BattleSceneOff + gText_BattleSceneOn, + gText_BattleSceneOff }; static const u8 *const sBattleStyleOptions[] = //3CC344 { - gText_BattleStyleShift, - gText_BattleStyleSet + gText_BattleStyleShift, + gText_BattleStyleSet }; -static const u8 *const sSoundOptions[] = //3CC34C +static const u8 *const sSoundOptions[] = //3CC34C { - gText_SoundMono, - gText_SoundStereo + gText_SoundMono, + gText_SoundStereo }; -static const u8 *const sButtonTypeOptions[] = //3CC354 +static const u8 *const sButtonTypeOptions[] = //3CC354 { - gText_ButtonTypeNormal, - gText_ButtonTypeLEqualsA, - gText_ButtonTypeLR, + gText_ButtonTypeNormal, + gText_ButtonTypeLEqualsA, + gText_ButtonTypeLR, }; -static const u8 sOptionsMenuPickSwitchCancelTextColor[] = {TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; //3CC360 -static const u8 sOptionsMenuTextColor[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_RED}; //3CC363 +static const u8 sOptionsMenuPickSwitchCancelTextColor[] = {TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; //3CC360 +static const u8 sOptionsMenuTextColor[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_RED}; //3CC363 //This file's functions -- cgit v1.2.3 From d84cf59678d75c50896ba46b3047c65ea5e106d9 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 19 Nov 2019 09:55:31 -0700 Subject: fix tab vs space format --- include/global.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/global.h b/include/global.h index 63c6923bd..744d23eb3 100644 --- a/include/global.h +++ b/include/global.h @@ -291,11 +291,11 @@ struct SaveBlock2 /*0x012*/ u8 playTimeVBlanks; /*0x013*/ u8 optionsButtonMode; // OPTIONS_BUTTON_MODE_[NORMAL/LR/L_EQUALS_A] /*0x014*/ u16 optionsTextSpeed:3; // OPTIONS_TEXT_SPEED_[SLOW/MID/FAST] - u16 optionsWindowFrameType:5; // Specifies one of the 20 decorative borders for text boxes + u16 optionsWindowFrameType:5; // Specifies one of the 20 decorative borders for text boxes /*0x15*/ u16 optionsSound:1; // OPTIONS_SOUND_[MONO/STEREO] - u16 optionsBattleStyle:1; // OPTIONS_BATTLE_STYLE_[SHIFT/SET] - u16 optionsBattleSceneOff:1; // whether battle animations are disabled - u16 regionMapZoom:1; // whether the map is zoomed in + u16 optionsBattleStyle:1; // OPTIONS_BATTLE_STYLE_[SHIFT/SET] + u16 optionsBattleSceneOff:1; // whether battle animations are disabled + u16 regionMapZoom:1; // whether the map is zoomed in /*0x018*/ struct Pokedex pokedex; /*0x090*/ u8 filler_90[0x8]; /*0x098*/ struct Time localTimeOffset; -- cgit v1.2.3 From 3bf1f5e65d41c19fe8a5f67e3c42a709aa86c4e4 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 19 Nov 2019 12:57:11 -0700 Subject: start shop.c --- asm/shop.s | 188 +++++++++++++++------------------------------------------- ld_script.txt | 2 + src/shop.c | 68 +++++++++++++++++++++ sym_ewram.txt | 2 +- 4 files changed, 119 insertions(+), 141 deletions(-) create mode 100644 src/shop.c diff --git a/asm/shop.s b/asm/shop.s index bc5eccd64..70c9892a0 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -5,98 +5,6 @@ .text - thumb_func_start sub_809AAB0 -sub_809AAB0: @ 809AAB0 - push {r4-r6,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - bl sub_809AB7C - ldr r4, _0809AAE8 @ =gUnknown_2039934 - movs r1, 0xF - ands r1, r0 - ldrb r2, [r4, 0x16] - movs r0, 0x10 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x16] - movs r0, 0 - strh r0, [r4, 0xC] - bl ContextNpcGetTextColor - lsls r0, 24 - cmp r0, 0 - bne _0809AAF0 - ldrh r0, [r4, 0x16] - ldr r1, _0809AAEC @ =0xfffffe0f - ands r1, r0 - movs r0, 0x40 - b _0809AAF8 - .align 2, 0 -_0809AAE8: .4byte gUnknown_2039934 -_0809AAEC: .4byte 0xfffffe0f -_0809AAF0: - ldrh r0, [r4, 0x16] - ldr r1, _0809AB68 @ =0xfffffe0f - ands r1, r0 - movs r0, 0x50 -_0809AAF8: - orrs r1, r0 - strh r1, [r4, 0x16] - ldr r4, _0809AB6C @ =gUnknown_2039950 - ldr r0, _0809AB70 @ =gUnknown_83DF0BC - bl AddWindow - strb r0, [r4] - ldrb r0, [r4] - movs r1, 0 - bl SetStdWindowBorderStyle - movs r0, 0x2 - movs r1, 0 - bl GetMenuCursorDimensionByFont - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - ldrb r0, [r4] - movs r6, 0x10 - str r6, [sp] - movs r5, 0x3 - str r5, [sp, 0x4] - ldr r1, _0809AB74 @ =gUnknown_83DF09C - str r1, [sp, 0x8] - movs r1, 0x2 - movs r3, 0x2 - bl PrintTextArray - ldrb r0, [r4] - str r6, [sp] - str r5, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl Menu_InitCursor - ldrb r0, [r4] - bl PutWindowTilemap - ldrb r0, [r4] - movs r1, 0x1 - bl CopyWindowToVram - ldr r0, _0809AB78 @ =sub_809AC10 - movs r1, 0x8 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0809AB68: .4byte 0xfffffe0f -_0809AB6C: .4byte gUnknown_2039950 -_0809AB70: .4byte gUnknown_83DF0BC -_0809AB74: .4byte gUnknown_83DF09C -_0809AB78: .4byte sub_809AC10 - thumb_func_end sub_809AAB0 - thumb_func_start sub_809AB7C sub_809AB7C: @ 809AB7C push {r4,r5,lr} @@ -110,7 +18,7 @@ _0809AB88: b _0809ABCE _0809AB8C: movs r4, 0 - ldr r1, _0809ABD4 @ =gUnknown_2039934 + ldr r1, _0809ABD4 @ =gShopData ldrh r0, [r1, 0x10] cmp r4, r0 bcs _0809ABCC @@ -148,14 +56,14 @@ _0809ABCE: pop {r1} bx r1 .align 2, 0 -_0809ABD4: .4byte gUnknown_2039934 +_0809ABD4: .4byte gShopData thumb_func_end sub_809AB7C thumb_func_start sub_809ABD8 sub_809ABD8: @ 809ABD8 push {lr} adds r1, r0, 0 - ldr r2, _0809AC00 @ =gUnknown_2039934 + ldr r2, _0809AC00 @ =gShopData str r1, [r2, 0x4] movs r0, 0 strh r0, [r2, 0x10] @@ -176,16 +84,16 @@ _0809ABFC: pop {r0} bx r0 .align 2, 0 -_0809AC00: .4byte gUnknown_2039934 +_0809AC00: .4byte gShopData thumb_func_end sub_809ABD8 thumb_func_start sub_809AC04 sub_809AC04: @ 809AC04 - ldr r1, _0809AC0C @ =gUnknown_2039934 + ldr r1, _0809AC0C @ =gShopData str r0, [r1] bx lr .align 2, 0 -_0809AC0C: .4byte gUnknown_2039934 +_0809AC0C: .4byte gShopData thumb_func_end sub_809AC04 thumb_func_start sub_809AC10 @@ -313,7 +221,7 @@ sub_809ACF8: @ 809ACF8 bl sub_809C138 adds r0, r4, 0 bl DestroyTask - ldr r0, _0809AD20 @ =gUnknown_2039934 + ldr r0, _0809AD20 @ =gShopData ldr r0, [r0] cmp r0, 0 beq _0809AD1A @@ -323,7 +231,7 @@ _0809AD1A: pop {r0} bx r0 .align 2, 0 -_0809AD20: .4byte gUnknown_2039934 +_0809AD20: .4byte gShopData thumb_func_end sub_809ACF8 thumb_func_start sub_809AD24 @@ -414,7 +322,7 @@ sub_809ADC0: @ 809ADC0 adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - ldr r0, _0809ADE0 @ =gUnknown_2039934 + ldr r0, _0809ADE0 @ =gShopData ldrb r0, [r0, 0x16] lsls r0, 28 lsrs r0, 28 @@ -425,7 +333,7 @@ sub_809ADC0: @ 809ADC0 pop {r0} bx r0 .align 2, 0 -_0809ADE0: .4byte gUnknown_2039934 +_0809ADE0: .4byte gShopData thumb_func_end sub_809ADC0 thumb_func_start sub_809ADE4 @@ -465,7 +373,7 @@ sub_809AE14: @ 809AE14 bne _0809AE2C b _0809AF54 _0809AE2C: - ldr r0, _0809AE94 @ =gUnknown_2039934 + ldr r0, _0809AE94 @ =gShopData movs r5, 0 strh r5, [r0, 0xC] strh r5, [r0, 0xE] @@ -508,7 +416,7 @@ _0809AE2C: b _0809AF64 .align 2, 0 _0809AE90: .4byte gMain -_0809AE94: .4byte gUnknown_2039934 +_0809AE94: .4byte gShopData _0809AE98: .4byte sub_809BBC0 _0809AE9C: .4byte gMultiuseListMenuTemplate _0809AEA0: .4byte gTasks @@ -568,7 +476,7 @@ _0809AEAC: movs r2, 0 movs r3, 0 bl FillBgTilemapBufferRect_Palette0 - ldr r0, _0809AF50 @ =gUnknown_2039934 + ldr r0, _0809AF50 @ =gShopData ldrb r0, [r0, 0x16] lsls r0, 28 lsrs r0, 28 @@ -577,7 +485,7 @@ _0809AEAC: b _0809AF5E .align 2, 0 _0809AF4C: .4byte 0x01000100 -_0809AF50: .4byte gUnknown_2039934 +_0809AF50: .4byte gShopData _0809AF54: bl FreeTempTileDataBuffersIfPossible lsls r0, 24 @@ -722,7 +630,7 @@ sub_809B080: @ 809B080 str r0, [sp] movs r0, 0x1 bl DecompressAndCopyTileDataToVram - ldr r0, _0809B0B4 @ =gUnknown_2039934 + ldr r0, _0809B0B4 @ =gShopData ldrb r1, [r0, 0x16] movs r0, 0xF ands r0, r1 @@ -735,7 +643,7 @@ sub_809B080: @ 809B080 b _0809B0CA .align 2, 0 _0809B0B0: .4byte gUnknown_8E85DC8 -_0809B0B4: .4byte gUnknown_2039934 +_0809B0B4: .4byte gShopData _0809B0B8: .4byte gUnknown_8E85EFC _0809B0BC: .4byte gUnknown_2039954 _0809B0C0: @@ -780,7 +688,7 @@ sub_809B10C: @ 809B10C bne _0809B118 movs r2, 0xB _0809B118: - ldr r0, _0809B138 @ =gUnknown_2039934 + ldr r0, _0809B138 @ =gShopData ldrb r1, [r0, 0x16] movs r0, 0xF ands r0, r1 @@ -796,7 +704,7 @@ _0809B118: bl SetBgRectPal b _0809B14E .align 2, 0 -_0809B138: .4byte gUnknown_2039934 +_0809B138: .4byte gShopData _0809B13C: movs r0, 0x8 str r0, [sp] @@ -836,7 +744,7 @@ sub_809B15C: @ 809B15C sub_809B188: @ 809B188 push {r4-r7,lr} ldr r7, _0809B1C0 @ =gUnknown_2039964 - ldr r4, _0809B1C4 @ =gUnknown_2039934 + ldr r4, _0809B1C4 @ =gShopData ldrh r0, [r4, 0x10] adds r0, 0x1 lsls r0, 3 @@ -860,7 +768,7 @@ _0809B1B2: b _0809B2F0 .align 2, 0 _0809B1C0: .4byte gUnknown_2039964 -_0809B1C4: .4byte gUnknown_2039934 +_0809B1C4: .4byte gShopData _0809B1C8: .4byte gUnknown_2039968 _0809B1CC: movs r6, 0 @@ -906,7 +814,7 @@ _0809B1F2: str r0, [r1, 0x4] ldr r5, _0809B2D4 @ =gMultiuseListMenuTemplate str r2, [r5] - ldr r6, _0809B2D8 @ =gUnknown_2039934 + ldr r6, _0809B2D8 @ =gShopData ldrh r0, [r6, 0x10] adds r0, 0x1 movs r1, 0 @@ -993,13 +901,13 @@ _0809B2C8: .4byte gUnknown_2039968 _0809B2CC: .4byte gFameCheckerText_Cancel _0809B2D0: .4byte gUnknown_2039964 _0809B2D4: .4byte gMultiuseListMenuTemplate -_0809B2D8: .4byte gUnknown_2039934 +_0809B2D8: .4byte gShopData _0809B2DC: .4byte sub_809B320 _0809B2E0: .4byte sub_809B408 _0809B2E4: strh r0, [r5, 0xE] _0809B2E6: - ldr r0, _0809B2F8 @ =gUnknown_2039934 + ldr r0, _0809B2F8 @ =gShopData ldr r1, _0809B2FC @ =gMultiuseListMenuTemplate ldrh r1, [r1, 0xE] strh r1, [r0, 0x12] @@ -1009,7 +917,7 @@ _0809B2F0: pop {r1} bx r1 .align 2, 0 -_0809B2F8: .4byte gUnknown_2039934 +_0809B2F8: .4byte gShopData _0809B2FC: .4byte gMultiuseListMenuTemplate thumb_func_end sub_809B188 @@ -1058,7 +966,7 @@ _0809B34A: movs r0, 0x5 movs r1, 0 bl FillWindowPixelBuffer - ldr r6, _0809B388 @ =gUnknown_2039934 + ldr r6, _0809B388 @ =gShopData ldrb r0, [r6, 0x16] movs r4, 0xF ands r4, r0 @@ -1083,7 +991,7 @@ _0809B34A: b _0809B398 .align 2, 0 _0809B384: .4byte gUnknown_8416757 -_0809B388: .4byte gUnknown_2039934 +_0809B388: .4byte gShopData _0809B38C: ldr r0, _0809B3D0 @ =0x00000177 ldrb r1, [r6, 0x17] @@ -1091,7 +999,7 @@ _0809B38C: lsrs r1, 30 bl CreateItemMenuIcon _0809B398: - ldr r3, _0809B3D4 @ =gUnknown_2039934 + ldr r3, _0809B3D4 @ =gShopData ldrb r2, [r3, 0x17] lsls r0, r2, 29 lsrs r0, 30 @@ -1120,7 +1028,7 @@ _0809B398: b _0809B400 .align 2, 0 _0809B3D0: .4byte 0x00000177 -_0809B3D4: .4byte gUnknown_2039934 +_0809B3D4: .4byte gShopData _0809B3D8: movs r0, 0x6 movs r1, 0 @@ -1318,13 +1226,13 @@ _0809B568: .4byte gUnknown_8416217 thumb_func_start sub_809B56C sub_809B56C: @ 809B56C - ldr r0, _0809B578 @ =gUnknown_2039934 + ldr r0, _0809B578 @ =gShopData ldrh r0, [r0, 0x16] lsls r0, 23 lsrs r0, 27 bx lr .align 2, 0 -_0809B578: .4byte gUnknown_2039934 +_0809B578: .4byte gShopData thumb_func_end sub_809B56C thumb_func_start sub_809B57C @@ -1469,7 +1377,7 @@ _0809B68C: .4byte CB2_ReturnToField sub_809B690: @ 809B690 push {r4,lr} sub sp, 0x10 - ldr r4, _0809B6C0 @ =gUnknown_2039934 + ldr r4, _0809B6C0 @ =gShopData ldrb r1, [r4, 0x16] movs r0, 0xF ands r0, r1 @@ -1492,7 +1400,7 @@ sub_809B690: @ 809B690 movs r3, 0x68 b _0809B6E2 .align 2, 0 -_0809B6C0: .4byte gUnknown_2039934 +_0809B6C0: .4byte gShopData _0809B6C4: ldrh r0, [r4, 0x10] ldrh r1, [r4, 0x12] @@ -1527,7 +1435,7 @@ _0809B6E2: sub_809B6FC: @ 809B6FC push {r4,lr} sub sp, 0x10 - ldr r4, _0809B738 @ =gUnknown_2039934 + ldr r4, _0809B738 @ =gShopData movs r0, 0x1 strh r0, [r4, 0x18] movs r0, 0x2 @@ -1554,13 +1462,13 @@ sub_809B6FC: @ 809B6FC pop {r0} bx r0 .align 2, 0 -_0809B738: .4byte gUnknown_2039934 +_0809B738: .4byte gShopData thumb_func_end sub_809B6FC thumb_func_start sub_809B73C sub_809B73C: @ 809B73C push {r4,lr} - ldr r4, _0809B760 @ =gUnknown_2039934 + ldr r4, _0809B760 @ =gShopData ldrb r1, [r4, 0x17] movs r0, 0xF8 ands r0, r1 @@ -1577,7 +1485,7 @@ _0809B758: pop {r0} bx r0 .align 2, 0 -_0809B760: .4byte gUnknown_2039934 +_0809B760: .4byte gShopData thumb_func_end sub_809B73C thumb_func_start sub_809B764 @@ -2104,7 +2012,7 @@ sub_809BB44: @ 809BB44 movs r0, 0x3 movs r1, 0x11 bl FillWindowPixelBuffer - ldr r0, _0809BBB0 @ =gUnknown_2039934 + ldr r0, _0809BBB0 @ =gShopData ldr r3, [r0, 0x8] movs r0, 0xFF str r0, [sp] @@ -2141,7 +2049,7 @@ sub_809BB44: @ 809BB44 bx r0 .align 2, 0 _0809BBAC: .4byte gTasks+0x8 -_0809BBB0: .4byte gUnknown_2039934 +_0809BBB0: .4byte gShopData _0809BBB4: .4byte gStringVar1 _0809BBB8: .4byte gStringVar4 _0809BBBC: .4byte gText_TimesStrVar1 @@ -2314,7 +2222,7 @@ sub_809BCA0: @ 809BCA0 lsrs r2, r0, 16 cmp r2, 0x63 bls _0809BD58 - ldr r1, _0809BD54 @ =gUnknown_2039934 + ldr r1, _0809BD54 @ =gShopData movs r0, 0x63 b _0809BD5E .align 2, 0 @@ -2323,9 +2231,9 @@ _0809BD44: .4byte gStringVar1 _0809BD48: .4byte gStringVar4 _0809BD4C: .4byte gUnknown_8416749 _0809BD50: .4byte gSaveBlock1Ptr -_0809BD54: .4byte gUnknown_2039934 +_0809BD54: .4byte gShopData _0809BD58: - ldr r1, _0809BD80 @ =gUnknown_2039934 + ldr r1, _0809BD80 @ =gShopData lsls r0, r2, 24 lsrs r0, 24 _0809BD5E: @@ -2346,7 +2254,7 @@ _0809BD68: pop {r0} bx r0 .align 2, 0 -_0809BD80: .4byte gUnknown_2039934 +_0809BD80: .4byte gShopData _0809BD84: .4byte gTasks _0809BD88: .4byte sub_809BD8C thumb_func_end sub_809BCA0 @@ -2363,7 +2271,7 @@ sub_809BD8C: @ 809BD8C ldr r1, _0809BDCC @ =gTasks+0x8 adds r4, r0, r1 adds r0, r4, 0x2 - ldr r6, _0809BDD0 @ =gUnknown_2039934 + ldr r6, _0809BDD0 @ =gShopData ldrh r1, [r6, 0x14] bl AdjustQuantityAccordingToDPadInput lsls r0, 24 @@ -2383,7 +2291,7 @@ sub_809BD8C: @ 809BD8C b _0809BE88 .align 2, 0 _0809BDCC: .4byte gTasks+0x8 -_0809BDD0: .4byte gUnknown_2039934 +_0809BDD0: .4byte gShopData _0809BDD4: ldr r0, _0809BE3C @ =gMain ldrh r1, [r0, 0x2E] @@ -2532,7 +2440,7 @@ sub_809BF0C: @ 809BF0C movs r5, 0xA4 lsls r5, 2 adds r0, r5 - ldr r1, _0809BF5C @ =gUnknown_2039934 + ldr r1, _0809BF5C @ =gShopData ldr r1, [r1, 0x8] bl RemoveMoney movs r0, 0xF8 @@ -2556,7 +2464,7 @@ sub_809BF0C: @ 809BF0C bx r0 .align 2, 0 _0809BF58: .4byte gSaveBlock1Ptr -_0809BF5C: .4byte gUnknown_2039934 +_0809BF5C: .4byte gShopData _0809BF60: .4byte gTasks _0809BF64: .4byte sub_809BF68 thumb_func_end sub_809BF0C @@ -2611,7 +2519,7 @@ sub_809BF98: @ 809BF98 bl PutWindowTilemap movs r0, 0x5 bl PutWindowTilemap - ldr r0, _0809BFFC @ =gUnknown_2039934 + ldr r0, _0809BFFC @ =gShopData ldrb r1, [r0, 0x16] movs r0, 0xF ands r0, r1 @@ -2633,7 +2541,7 @@ _0809BFDC: bx r0 .align 2, 0 _0809BFF8: .4byte gTasks+0x8 -_0809BFFC: .4byte gUnknown_2039934 +_0809BFFC: .4byte gShopData _0809C000: .4byte sub_809BBC0 thumb_func_end sub_809BF98 diff --git a/ld_script.txt b/ld_script.txt index a6676b100..b3a64df47 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -140,6 +140,7 @@ SECTIONS { src/item_menu_icons.o(.text); src/battle_anim_mon_movement.o(.text); src/item.o(.text); + src/shop.o(.text); asm/shop.o(.text); src/berry.o(.text); src/script_menu.o(.text); @@ -441,6 +442,7 @@ SECTIONS { src/item_menu_icons.o(.rodata); src/battle_anim_mon_movement.o(.rodata); src/item.o(.rodata); + src/shop.o(.rodata); data/shop.o(.rodata); src/berry.o(.rodata); src/script_menu.o(.rodata); diff --git a/src/shop.c b/src/shop.c new file mode 100644 index 000000000..25b1f2a74 --- /dev/null +++ b/src/shop.c @@ -0,0 +1,68 @@ +#include "global.h" +#include "menu.h" +#include "new_menu_helpers.h" +#include "window.h" +#include "field_specials.h" +#include "task.h" + + + +struct ShopData { + /*0x00*/ void (*callback)(void); + /*0x04*/ const u16 *itemList; + /*0x08*/ u32 itemPrice; + /*0x0C*/ u16 cursorPos; + /*0x0E*/ u16 _; + /*0x10*/ u16 itemCount; + /*0x12*/ u16 field12; + /*0x14*/ u16 field14; + /*0x16*/ u16 martType:4; // 0x1 if tm list + u16 unk16_1:5; + u16 unk16_2:7; + //INCOMPLETE +}; + + +// external defines +extern const struct WindowTemplate gUnknown_83DF0BC[]; //sShopMenuWindowTemplates +extern const struct MenuAction gUnknown_83DF09C[]; //sShopMenuActions_BuySellQuit + +extern u8 sub_809AB7C(u8 a); +extern void sub_809AC10(u8 taskId); + +EWRAM_DATA struct ShopData gShopData = {0}; +EWRAM_DATA u8 gUnknown_2039950 = 0; + + + +u8 sub_809AAB0(u8 a0) +{ + u32 v1, v2; + + //gShopData.martType = (sub_809AB7C(a0) & 0xF) | ((u8) gShopData.martType & 0xF0); + gShopData.martType = sub_809AB7C(a0); + gShopData.cursorPos = 0; + if (!(ContextNpcGetTextColor())) + { + v1 = (u16) gShopData.unk16_1; + v1 = ~(0x1F0); + //v1 = (s16) gShopData.unk16_1 & 0xFFFFFE0F; + //v1 = gShopData.unk16_1 & (u32) 0xFFFFFE0F; + //v1 &= 0xFE0F; + v2 = 0x40; + } + else + { + v1 = (u16) gShopData.unk16_1; + v1 = ~(0x1F0); + v2 = 0x50; + } + gShopData.martType = v1 | v2; + gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShop + SetStdWindowBorderStyle(gUnknown_2039950, 0); + PrintTextArray(gUnknown_2039950, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); + Menu_InitCursor(gUnknown_2039950, 2, 0, 2, 16, 3, 0); + PutWindowTilemap(gUnknown_2039950); + CopyWindowToVram(gUnknown_2039950, 1); + return CreateTask(sub_809AC10, 8); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 8ff8247d9..3584e5080 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -316,7 +316,7 @@ gUnknown_20398B8: @ 20398B8 gUnknown_20398BA: @ 20398BA .space 0x7A -gUnknown_2039934: @ 2039934 +gShopData: @ 2039934 .space 0xE gUnknown_2039942: @ 2039942 -- cgit v1.2.3 From e06da7f066a75bbbcdb4000e96de7af83611ff9b Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 19 Nov 2019 17:36:21 -0700 Subject: start new func --- src/shop.c | 145 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 140 insertions(+), 5 deletions(-) diff --git a/src/shop.c b/src/shop.c index 25b1f2a74..858686743 100644 --- a/src/shop.c +++ b/src/shop.c @@ -7,6 +7,7 @@ + struct ShopData { /*0x00*/ void (*callback)(void); /*0x04*/ const u16 *itemList; @@ -22,6 +23,12 @@ struct ShopData { //INCOMPLETE }; +EWRAM_DATA struct ShopData gShopData = {0}; +EWRAM_DATA u8 gUnknown_2039950 = 0; + +//Functions +static u8 sub_809AB7C(u8 a0); + // external defines extern const struct WindowTemplate gUnknown_83DF0BC[]; //sShopMenuWindowTemplates @@ -30,16 +37,17 @@ extern const struct MenuAction gUnknown_83DF09C[]; //sShopMenuActions_BuySellQui extern u8 sub_809AB7C(u8 a); extern void sub_809AC10(u8 taskId); -EWRAM_DATA struct ShopData gShopData = {0}; -EWRAM_DATA u8 gUnknown_2039950 = 0; + + +#ifdef NONMATCHING u8 sub_809AAB0(u8 a0) { u32 v1, v2; - - //gShopData.martType = (sub_809AB7C(a0) & 0xF) | ((u8) gShopData.martType & 0xF0); + u8* v3; + gShopData.martType = sub_809AB7C(a0); gShopData.cursorPos = 0; if (!(ContextNpcGetTextColor())) @@ -57,7 +65,8 @@ u8 sub_809AAB0(u8 a0) v1 = ~(0x1F0); v2 = 0x50; } - gShopData.martType = v1 | v2; + gShopData.martType = (u16) (v1 | v2); + gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShop SetStdWindowBorderStyle(gUnknown_2039950, 0); PrintTextArray(gUnknown_2039950, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); @@ -66,3 +75,129 @@ u8 sub_809AAB0(u8 a0) CopyWindowToVram(gUnknown_2039950, 1); return CreateTask(sub_809AC10, 8); } +#else +NAKED +u8 sub_809AAB0(u8 a0) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tsub sp, 0xC\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tbl sub_809AB7C\n" + "\tldr r4, _0809AAE8 @ =gUnknown_2039934\n" + "\tmovs r1, 0xF\n" + "\tands r1, r0\n" + "\tldrb r2, [r4, 0x16]\n" + "\tmovs r0, 0x10\n" + "\tnegs r0, r0\n" + "\tands r0, r2\n" + "\torrs r0, r1\n" + "\tstrb r0, [r4, 0x16]\n" + "\tmovs r0, 0\n" + "\tstrh r0, [r4, 0xC]\n" + "\tbl ContextNpcGetTextColor\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _0809AAF0\n" + "\tldrh r0, [r4, 0x16]\n" + "\tldr r1, _0809AAEC @ =0xfffffe0f\n" + "\tands r1, r0\n" + "\tmovs r0, 0x40\n" + "\tb _0809AAF8\n" + "\t.align 2, 0\n" + "_0809AAE8: .4byte gUnknown_2039934\n" + "_0809AAEC: .4byte 0xfffffe0f\n" + "_0809AAF0:\n" + "\tldrh r0, [r4, 0x16]\n" + "\tldr r1, _0809AB68 @ =0xfffffe0f\n" + "\tands r1, r0\n" + "\tmovs r0, 0x50\n" + "_0809AAF8:\n" + "\torrs r1, r0\n" + "\tstrh r1, [r4, 0x16]\n" + "\tldr r4, _0809AB6C @ =gUnknown_2039950\n" + "\tldr r0, _0809AB70 @ =gUnknown_83DF0BC\n" + "\tbl AddWindow\n" + "\tstrb r0, [r4]\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0\n" + "\tbl SetStdWindowBorderStyle\n" + "\tmovs r0, 0x2\n" + "\tmovs r1, 0\n" + "\tbl GetMenuCursorDimensionByFont\n" + "\tadds r2, r0, 0\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tldrb r0, [r4]\n" + "\tmovs r6, 0x10\n" + "\tstr r6, [sp]\n" + "\tmovs r5, 0x3\n" + "\tstr r5, [sp, 0x4]\n" + "\tldr r1, _0809AB74 @ =gUnknown_83DF09C\n" + "\tstr r1, [sp, 0x8]\n" + "\tmovs r1, 0x2\n" + "\tmovs r3, 0x2\n" + "\tbl PrintTextArray\n" + "\tldrb r0, [r4]\n" + "\tstr r6, [sp]\n" + "\tstr r5, [sp, 0x4]\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp, 0x8]\n" + "\tmovs r1, 0x2\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x2\n" + "\tbl Menu_InitCursor\n" + "\tldrb r0, [r4]\n" + "\tbl PutWindowTilemap\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0x1\n" + "\tbl CopyWindowToVram\n" + "\tldr r0, _0809AB78 @ =sub_809AC10\n" + "\tmovs r1, 0x8\n" + "\tbl CreateTask\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tadd sp, 0xC\n" + "\tpop {r4-r6}\n" + "\tpop {r1}\n" + "\tbx r1\n" + "\t.align 2, 0\n" + "_0809AB68: .4byte 0xfffffe0f\n" + "_0809AB6C: .4byte gUnknown_2039950\n" + "_0809AB70: .4byte gUnknown_83DF0BC\n" + "_0809AB74: .4byte gUnknown_83DF09C\n" + "_0809AB78: .4byte sub_809AC10\n"); +} +#endif + +static u8 sub_809AB7C(u8 a0) +{ + u16 pocket; + + if (a0 != 0) + return a0; + else if (a0 >= gShopData.itemCount) + return FALSE; + else if (gShopData.itemList[0] == 0) + return FALSE; + else + { + while (ItemId_GetPocket(gShopData.itemCount[i]) != 0) + { + if (ItemId_GetPocket(gShopData.itemCount[i] == POCKET_TM_CASE) + return 1; + + } + } + + + +} + + + + + + + + -- cgit v1.2.3 From 9e0db07ce9172b5d9da5c7e8aa98ddc809b3c0f1 Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 20 Nov 2019 15:06:09 -0700 Subject: refine ShopData --- src/shop.c | 140 +++++++------------------------------------------------------ 1 file changed, 14 insertions(+), 126 deletions(-) diff --git a/src/shop.c b/src/shop.c index 858686743..6ec6d0467 100644 --- a/src/shop.c +++ b/src/shop.c @@ -5,7 +5,10 @@ #include "field_specials.h" #include "task.h" - +// enums +// RAM symbols +// Function Declarations +// Data Definitions struct ShopData { @@ -18,16 +21,16 @@ struct ShopData { /*0x12*/ u16 field12; /*0x14*/ u16 field14; /*0x16*/ u16 martType:4; // 0x1 if tm list - u16 unk16_1:5; - u16 unk16_2:7; + u16 unk16_4:5; + u16 unk16_9:7; //INCOMPLETE }; EWRAM_DATA struct ShopData gShopData = {0}; EWRAM_DATA u8 gUnknown_2039950 = 0; -//Functions -static u8 sub_809AB7C(u8 a0); +//Function Declarations +//static u8 sub_809AB7C(u8 a0); // external defines @@ -38,34 +41,15 @@ extern u8 sub_809AB7C(u8 a); extern void sub_809AC10(u8 taskId); - - - - -#ifdef NONMATCHING +// Functions u8 sub_809AAB0(u8 a0) { - u32 v1, v2; - u8* v3; - - gShopData.martType = sub_809AB7C(a0); + gShopData.martType = sub_809AB7C(a0) & 0xF; gShopData.cursorPos = 0; if (!(ContextNpcGetTextColor())) - { - v1 = (u16) gShopData.unk16_1; - v1 = ~(0x1F0); - //v1 = (s16) gShopData.unk16_1 & 0xFFFFFE0F; - //v1 = gShopData.unk16_1 & (u32) 0xFFFFFE0F; - //v1 &= 0xFE0F; - v2 = 0x40; - } + gShopData.unk16_4 = 4; else - { - v1 = (u16) gShopData.unk16_1; - v1 = ~(0x1F0); - v2 = 0x50; - } - gShopData.martType = (u16) (v1 | v2); + gShopData.unk16_4 = 5; gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShop SetStdWindowBorderStyle(gUnknown_2039950, 0); @@ -75,101 +59,8 @@ u8 sub_809AAB0(u8 a0) CopyWindowToVram(gUnknown_2039950, 1); return CreateTask(sub_809AC10, 8); } -#else -NAKED -u8 sub_809AAB0(u8 a0) -{ - asm_unified("\tpush {r4-r6,lr}\n" - "\tsub sp, 0xC\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tbl sub_809AB7C\n" - "\tldr r4, _0809AAE8 @ =gUnknown_2039934\n" - "\tmovs r1, 0xF\n" - "\tands r1, r0\n" - "\tldrb r2, [r4, 0x16]\n" - "\tmovs r0, 0x10\n" - "\tnegs r0, r0\n" - "\tands r0, r2\n" - "\torrs r0, r1\n" - "\tstrb r0, [r4, 0x16]\n" - "\tmovs r0, 0\n" - "\tstrh r0, [r4, 0xC]\n" - "\tbl ContextNpcGetTextColor\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _0809AAF0\n" - "\tldrh r0, [r4, 0x16]\n" - "\tldr r1, _0809AAEC @ =0xfffffe0f\n" - "\tands r1, r0\n" - "\tmovs r0, 0x40\n" - "\tb _0809AAF8\n" - "\t.align 2, 0\n" - "_0809AAE8: .4byte gUnknown_2039934\n" - "_0809AAEC: .4byte 0xfffffe0f\n" - "_0809AAF0:\n" - "\tldrh r0, [r4, 0x16]\n" - "\tldr r1, _0809AB68 @ =0xfffffe0f\n" - "\tands r1, r0\n" - "\tmovs r0, 0x50\n" - "_0809AAF8:\n" - "\torrs r1, r0\n" - "\tstrh r1, [r4, 0x16]\n" - "\tldr r4, _0809AB6C @ =gUnknown_2039950\n" - "\tldr r0, _0809AB70 @ =gUnknown_83DF0BC\n" - "\tbl AddWindow\n" - "\tstrb r0, [r4]\n" - "\tldrb r0, [r4]\n" - "\tmovs r1, 0\n" - "\tbl SetStdWindowBorderStyle\n" - "\tmovs r0, 0x2\n" - "\tmovs r1, 0\n" - "\tbl GetMenuCursorDimensionByFont\n" - "\tadds r2, r0, 0\n" - "\tlsls r2, 24\n" - "\tlsrs r2, 24\n" - "\tldrb r0, [r4]\n" - "\tmovs r6, 0x10\n" - "\tstr r6, [sp]\n" - "\tmovs r5, 0x3\n" - "\tstr r5, [sp, 0x4]\n" - "\tldr r1, _0809AB74 @ =gUnknown_83DF09C\n" - "\tstr r1, [sp, 0x8]\n" - "\tmovs r1, 0x2\n" - "\tmovs r3, 0x2\n" - "\tbl PrintTextArray\n" - "\tldrb r0, [r4]\n" - "\tstr r6, [sp]\n" - "\tstr r5, [sp, 0x4]\n" - "\tmovs r1, 0\n" - "\tstr r1, [sp, 0x8]\n" - "\tmovs r1, 0x2\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0x2\n" - "\tbl Menu_InitCursor\n" - "\tldrb r0, [r4]\n" - "\tbl PutWindowTilemap\n" - "\tldrb r0, [r4]\n" - "\tmovs r1, 0x1\n" - "\tbl CopyWindowToVram\n" - "\tldr r0, _0809AB78 @ =sub_809AC10\n" - "\tmovs r1, 0x8\n" - "\tbl CreateTask\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tadd sp, 0xC\n" - "\tpop {r4-r6}\n" - "\tpop {r1}\n" - "\tbx r1\n" - "\t.align 2, 0\n" - "_0809AB68: .4byte 0xfffffe0f\n" - "_0809AB6C: .4byte gUnknown_2039950\n" - "_0809AB70: .4byte gUnknown_83DF0BC\n" - "_0809AB74: .4byte gUnknown_83DF09C\n" - "_0809AB78: .4byte sub_809AC10\n"); -} -#endif +/* static u8 sub_809AB7C(u8 a0) { u16 pocket; @@ -189,11 +80,8 @@ static u8 sub_809AB7C(u8 a0) } } - - - } - +*/ -- cgit v1.2.3 From 0001d360a616bbf07716dd848d32dd646a7006e5 Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 21 Nov 2019 08:19:38 -0700 Subject: function progress --- asm/shop.s | 130 ------------------------------------------------------------- src/shop.c | 123 ++++++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 101 insertions(+), 152 deletions(-) diff --git a/asm/shop.s b/asm/shop.s index 70c9892a0..7512ac369 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -5,136 +5,6 @@ .text - thumb_func_start sub_809AB7C -sub_809AB7C: @ 809AB7C - push {r4,r5,lr} - cmp r0, 0 - beq _0809AB8C - lsls r0, 24 - lsrs r0, 24 - b _0809ABCE -_0809AB88: - movs r0, 0x1 - b _0809ABCE -_0809AB8C: - movs r4, 0 - ldr r1, _0809ABD4 @ =gShopData - ldrh r0, [r1, 0x10] - cmp r4, r0 - bcs _0809ABCC - ldr r0, [r1, 0x4] - ldrh r0, [r0] - cmp r0, 0 - beq _0809ABCC - adds r5, r1, 0 -_0809ABA0: - ldr r1, [r5, 0x4] - lsls r0, r4, 1 - adds r0, r1 - ldrh r0, [r0] - bl ItemId_GetPocket - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - beq _0809AB88 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - ldrh r0, [r5, 0x10] - cmp r4, r0 - bcs _0809ABCC - ldr r0, [r5, 0x4] - lsls r1, r4, 1 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _0809ABA0 -_0809ABCC: - movs r0, 0 -_0809ABCE: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0809ABD4: .4byte gShopData - thumb_func_end sub_809AB7C - - thumb_func_start sub_809ABD8 -sub_809ABD8: @ 809ABD8 - push {lr} - adds r1, r0, 0 - ldr r2, _0809AC00 @ =gShopData - str r1, [r2, 0x4] - movs r0, 0 - strh r0, [r2, 0x10] - ldrh r0, [r1] - cmp r0, 0 - beq _0809ABFC -_0809ABEA: - ldrh r0, [r2, 0x10] - adds r0, 0x1 - strh r0, [r2, 0x10] - ldrh r0, [r2, 0x10] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0 - bne _0809ABEA -_0809ABFC: - pop {r0} - bx r0 - .align 2, 0 -_0809AC00: .4byte gShopData - thumb_func_end sub_809ABD8 - - thumb_func_start sub_809AC04 -sub_809AC04: @ 809AC04 - ldr r1, _0809AC0C @ =gShopData - str r0, [r1] - bx lr - .align 2, 0 -_0809AC0C: .4byte gShopData - thumb_func_end sub_809AC04 - - thumb_func_start sub_809AC10 -sub_809AC10: @ 809AC10 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - bl Menu_ProcessInputNoWrapAround - lsls r0, 24 - asrs r1, r0, 24 - movs r0, 0x2 - negs r0, r0 - cmp r1, r0 - beq _0809AC52 - adds r0, 0x1 - cmp r1, r0 - bne _0809AC3C - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl sub_809ACF8 - b _0809AC52 -_0809AC3C: - ldr r4, _0809AC58 @ =gUnknown_83DF09C - bl Menu_GetCursorPos - lsls r0, 24 - lsrs r0, 21 - adds r4, 0x4 - adds r0, r4 - ldr r1, [r0] - adds r0, r5, 0 - bl _call_via_r1 -_0809AC52: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809AC58: .4byte gUnknown_83DF09C - thumb_func_end sub_809AC10 - thumb_func_start sub_809AC5C sub_809AC5C: @ 809AC5C push {r4,lr} diff --git a/src/shop.c b/src/shop.c index 6ec6d0467..8d87eb6ae 100644 --- a/src/shop.c +++ b/src/shop.c @@ -4,6 +4,9 @@ #include "window.h" #include "field_specials.h" #include "task.h" +#include "item.h" +#include "main.h" +#include "sound.h" // enums // RAM symbols @@ -30,15 +33,24 @@ EWRAM_DATA struct ShopData gShopData = {0}; EWRAM_DATA u8 gUnknown_2039950 = 0; //Function Declarations -//static u8 sub_809AB7C(u8 a0); - +static u8 sub_809AB7C(bool32 a0); +static void sub_809AC10(u8 taskId); // external defines extern const struct WindowTemplate gUnknown_83DF0BC[]; //sShopMenuWindowTemplates extern const struct MenuAction gUnknown_83DF09C[]; //sShopMenuActions_BuySellQuit -extern u8 sub_809AB7C(u8 a); -extern void sub_809AC10(u8 taskId); +extern void sub_809ACF8(u8 taskId); + +//Data Definitions +/* +static const struct MenuAction sShopMenuActions_BuySellQuit[] = +{ + { gText_ShopBuy, {.void_u8=Task_HandleShopMenuBuy} }, + { gText_ShopSell, {.void_u8=Task_HandleShopMenuSell} }, + { gText_ShopQuit, {.void_u8=Task_HandleShopMenuQuit} } +}; +*/ // Functions @@ -60,32 +72,99 @@ u8 sub_809AAB0(u8 a0) return CreateTask(sub_809AC10, 8); } +static u8 sub_809AB7C(u32 a0) +{ + u16 retVal, i; + if (a0) + return (u8)a0; + goto MAIN; + RETURN_1: + return 1; + + MAIN: + i = 0; + if (i >= gShopData.itemCount) + goto RETURN_0; + else if (gShopData.itemList[0] == 0) + goto RETURN_0; + + while (gShopData.itemList[i] != 0) + { + if (ItemId_GetPocket(gShopData.itemList[i]) == POCKET_TM_CASE) + goto RETURN_1; + ++i; + if (i >= gShopData.itemCount) + goto RETURN_0; + else if (gShopData.itemList[i] == 0) + goto RETURN_0; + } + RETURN_0: + return 0; +} + /* -static u8 sub_809AB7C(u8 a0) +void (const u16 *list) //SetShopItemsForSale { - u16 pocket; + u16 i; + gShopData.itemList = list; + gShopData.itemCount = 0; + if (list[0] == 0) + return; - if (a0 != 0) - return a0; - else if (a0 >= gShopData.itemCount) - return FALSE; - else if (gShopData.itemList[0] == 0) - return FALSE; - else + i = 0; + while (list[i] != 0) { - while (ItemId_GetPocket(gShopData.itemCount[i]) != 0) - { - if (ItemId_GetPocket(gShopData.itemCount[i] == POCKET_TM_CASE) - return 1; - - } + gShopData.itemCount++; + if (list[i] == 0) + return; + i++; } } */ +//#ifdef NONMATCHING +// WHAT THE FUCK IS UP WITH THIS FUNCTION +void sub_809ABD8(const u16 *items) +{ + //const u16* mart = items; + u16 item; + gShopData.itemList = items; + gShopData.itemCount = 0; + + //item = items[0]; + if (items[0] == 0) + return; + do { + gShopData.itemCount++; + item = items[gShopData.itemCount]; + } while (item); +} +/* +#else +NAKED +void sub_809ABD8(const u16 *items) + asm_unified("\t +*/ +//SetShopMenuCallback +void sub_809AC04(MainCallback callback) +{ + gShopData.callback = callback; +} - - - +//Task_ShopMenu +static void sub_809AC10(u8 taskId) +{ + s8 a0 = Menu_ProcessInputNoWrapAround(); + if (a0 == -2) + return; + + if (a0 == -1) + { + PlaySE(5); + sub_809ACF8(taskId); + return; + } + //gUnknown_83DF09C.func.u8_void(Menu_GetCursorPos()); +} -- cgit v1.2.3 From 359d345913d7f5ed36c34ede5476fff946318ffd Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 21 Nov 2019 09:05:43 -0700 Subject: temp --- src/shop.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/shop.c b/src/shop.c index 8d87eb6ae..f1dda35b4 100644 --- a/src/shop.c +++ b/src/shop.c @@ -40,17 +40,20 @@ static void sub_809AC10(u8 taskId); extern const struct WindowTemplate gUnknown_83DF0BC[]; //sShopMenuWindowTemplates extern const struct MenuAction gUnknown_83DF09C[]; //sShopMenuActions_BuySellQuit +extern void sub_809AC5C(u8 taskId); +extern void sub_809AC98(u8 taskId); extern void sub_809ACF8(u8 taskId); //Data Definitions -/* static const struct MenuAction sShopMenuActions_BuySellQuit[] = { - { gText_ShopBuy, {.void_u8=Task_HandleShopMenuBuy} }, - { gText_ShopSell, {.void_u8=Task_HandleShopMenuSell} }, - { gText_ShopQuit, {.void_u8=Task_HandleShopMenuQuit} } + {gUnknown_8416738, {.void_u8 = sub_809AC5C}}, + {gUnknown_841673C, {.void_u8 = sub_809AC98}}, + {gUnknown_8416741, {.void_u8 = sub_809ACF8}} + //{ gText_ShopBuy, {.void_u8=Task_HandleShopMenuBuy} }, + //{ gText_ShopSell, {.void_u8=Task_HandleShopMenuSell} }, + //{ gText_ShopQuit, {.void_u8=Task_HandleShopMenuQuit} } }; -*/ // Functions @@ -130,14 +133,11 @@ void sub_809ABD8(const u16 *items) u16 item; gShopData.itemList = items; gShopData.itemCount = 0; - - //item = items[0]; - if (items[0] == 0) - return; - do { - gShopData.itemCount++; - item = items[gShopData.itemCount]; - } while (item); + + while (1) + { + item = items[++gShopData.itemCount]; + } } /* #else @@ -165,6 +165,6 @@ static void sub_809AC10(u8 taskId) sub_809ACF8(taskId); return; } - //gUnknown_83DF09C.func.u8_void(Menu_GetCursorPos()); + gUnknown_83DF09C.func.void_u8(Menu_GetCursorPos()); } -- cgit v1.2.3 From 2cc4db0c786e20c1ef9823d0d0a027f39dfef9f3 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 24 Nov 2019 16:23:06 -0700 Subject: remove .s files --- asm/shop.s | 3341 ------------------------------------------------ data/shop.s | 92 -- data/strings.s | 24 +- include/list_menu.h | 38 +- include/shop.h | 31 +- include/strings.h | 15 + ld_script.txt | 2 - src/buy_menu_helpers.c | 2 +- src/shop.c | 1987 +++++++++++++++++++++++++++- sym_ewram.txt | 2 +- 10 files changed, 2030 insertions(+), 3504 deletions(-) delete mode 100644 asm/shop.s delete mode 100644 data/shop.s diff --git a/asm/shop.s b/asm/shop.s deleted file mode 100644 index 7512ac369..000000000 --- a/asm/shop.s +++ /dev/null @@ -1,3341 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_809AC5C -sub_809AC5C: @ 809AC5C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r2, _0809AC8C @ =sub_809AE14 - adds r0, r4, 0 - movs r1, 0xE - bl SetWordTaskArg - movs r0, 0x1 - movs r1, 0 - bl fade_screen - ldr r1, _0809AC90 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0809AC94 @ =sub_809AD40 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809AC8C: .4byte sub_809AE14 -_0809AC90: .4byte gTasks -_0809AC94: .4byte sub_809AD40 - thumb_func_end sub_809AC5C - - thumb_func_start sub_809AC98 -sub_809AC98: @ 809AC98 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r2, _0809ACC8 @ =sub_809ACD4 - adds r0, r4, 0 - movs r1, 0xE - bl SetWordTaskArg - movs r0, 0x1 - movs r1, 0 - bl fade_screen - ldr r1, _0809ACCC @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0809ACD0 @ =sub_809AD40 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809ACC8: .4byte sub_809ACD4 -_0809ACCC: .4byte gTasks -_0809ACD0: .4byte sub_809AD40 - thumb_func_end sub_809AC98 - - thumb_func_start sub_809ACD4 -sub_809ACD4: @ 809ACD4 - push {lr} - ldr r2, _0809ACEC @ =CB2_ReturnToField - movs r0, 0x2 - movs r1, 0x3 - bl sub_8107DB4 - ldr r1, _0809ACF0 @ =gFieldCallback - ldr r0, _0809ACF4 @ =sub_809AD74 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0809ACEC: .4byte CB2_ReturnToField -_0809ACF0: .4byte gFieldCallback -_0809ACF4: .4byte sub_809AD74 - thumb_func_end sub_809ACD4 - - thumb_func_start sub_809ACF8 -sub_809ACF8: @ 809ACF8 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_809AD24 - bl sub_809C138 - adds r0, r4, 0 - bl DestroyTask - ldr r0, _0809AD20 @ =gShopData - ldr r0, [r0] - cmp r0, 0 - beq _0809AD1A - bl _call_via_r0 -_0809AD1A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809AD20: .4byte gShopData - thumb_func_end sub_809ACF8 - - thumb_func_start sub_809AD24 -sub_809AD24: @ 809AD24 - push {r4,lr} - ldr r4, _0809AD3C @ =gUnknown_2039950 - ldrb r0, [r4] - movs r1, 0x2 - bl ClearStdWindowAndFrameToTransparent - ldrb r0, [r4] - bl RemoveWindow - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809AD3C: .4byte gUnknown_2039950 - thumb_func_end sub_809AD24 - - thumb_func_start sub_809AD40 -sub_809AD40: @ 809AD40 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0809AD70 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0809AD68 - adds r0, r4, 0 - movs r1, 0xE - bl GetWordTaskArg - bl SetMainCallback2 - bl FreeAllWindowBuffers - adds r0, r4, 0 - bl DestroyTask -_0809AD68: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809AD70: .4byte gPaletteFade - thumb_func_end sub_809AD40 - - thumb_func_start sub_809AD74 -sub_809AD74: @ 809AD74 - push {lr} - bl sub_807DC00 - ldr r0, _0809AD88 @ =sub_809AD8C - movs r1, 0x8 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_0809AD88: .4byte sub_809AD8C - thumb_func_end sub_809AD74 - - thumb_func_start sub_809AD8C -sub_809AD8C: @ 809AD8C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl field_weather_is_fade_finished - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0809ADB2 - bl sub_809B56C - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r2, _0809ADB8 @ =gUnknown_841689E - ldr r3, _0809ADBC @ =sub_809ADC0 - adds r0, r4, 0 - bl DisplayItemMessageOnField -_0809ADB2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809ADB8: .4byte gUnknown_841689E -_0809ADBC: .4byte sub_809ADC0 - thumb_func_end sub_809AD8C - - thumb_func_start sub_809ADC0 -sub_809ADC0: @ 809ADC0 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0809ADE0 @ =gShopData - ldrb r0, [r0, 0x16] - lsls r0, 28 - lsrs r0, 28 - bl sub_809AAB0 - adds r0, r4, 0 - bl DestroyTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809ADE0: .4byte gShopData - thumb_func_end sub_809ADC0 - - thumb_func_start sub_809ADE4 -sub_809ADE4: @ 809ADE4 - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - bl DoScheduledBgTilemapCopiesToVram - pop {r0} - bx r0 - thumb_func_end sub_809ADE4 - - thumb_func_start sub_809AE00 -sub_809AE00: @ 809AE00 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_809AE00 - - thumb_func_start sub_809AE14 -sub_809AE14: @ 809AE14 - push {r4,r5,lr} - sub sp, 0xC - ldr r0, _0809AE90 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r5, r0, r1 - ldrb r4, [r5] - cmp r4, 0 - beq _0809AEAC - cmp r4, 0x1 - bne _0809AE2C - b _0809AF54 -_0809AE2C: - ldr r0, _0809AE94 @ =gShopData - movs r5, 0 - strh r5, [r0, 0xC] - strh r5, [r0, 0xE] - bl sub_809B15C - bl sub_809B690 - ldr r0, _0809AE98 @ =sub_809BBC0 - movs r1, 0x8 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0809AE9C @ =gMultiuseListMenuTemplate - movs r1, 0 - movs r2, 0 - bl ListMenuInit - ldr r2, _0809AEA0 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r2 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x16] - movs r4, 0x1 - negs r4, r4 - adds r0, r4, 0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - str r5, [sp] - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r0, _0809AEA4 @ =sub_809AE00 - bl SetVBlankCallback - ldr r0, _0809AEA8 @ =sub_809ADE4 - bl SetMainCallback2 - b _0809AF64 - .align 2, 0 -_0809AE90: .4byte gMain -_0809AE94: .4byte gShopData -_0809AE98: .4byte sub_809BBC0 -_0809AE9C: .4byte gMultiuseListMenuTemplate -_0809AEA0: .4byte gTasks -_0809AEA4: .4byte sub_809AE00 -_0809AEA8: .4byte sub_809ADE4 -_0809AEAC: - bl SetVBlankHBlankCallbacksToNull - str r4, [sp, 0x8] - movs r1, 0xE0 - lsls r1, 19 - ldr r2, _0809AF4C @ =0x01000100 - add r0, sp, 0x8 - bl CpuFastSet - bl ScanlineEffect_Stop - bl ResetTempTileDataBuffers - bl FreeAllSpritePalettes - bl ResetPaletteFade - bl ResetSpriteData - bl ResetTasks - bl ClearScheduledBgCopiesToVram - bl ResetItemMenuIconState - bl sub_809AF6C - lsls r0, 24 - cmp r0, 0 - beq _0809AF64 - bl sub_809B188 - lsls r0, 24 - cmp r0, 0 - beq _0809AF64 - bl sub_809AFD0 - movs r4, 0x20 - str r4, [sp] - str r4, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - str r4, [sp] - str r4, [sp, 0x4] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - str r4, [sp] - str r4, [sp, 0x4] - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - str r4, [sp] - str r4, [sp, 0x4] - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - ldr r0, _0809AF50 @ =gShopData - ldrb r0, [r0, 0x16] - lsls r0, 28 - lsrs r0, 28 - bl BuyMenuInitWindows - bl sub_809B080 - b _0809AF5E - .align 2, 0 -_0809AF4C: .4byte 0x01000100 -_0809AF50: .4byte gShopData -_0809AF54: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - cmp r0, 0 - bne _0809AF64 -_0809AF5E: - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] -_0809AF64: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_809AE14 - - thumb_func_start sub_809AF6C -sub_809AF6C: @ 809AF6C - push {r4,r5,lr} - ldr r4, _0809AFB0 @ =gUnknown_2039954 - movs r5, 0x80 - lsls r5, 4 - adds r0, r5, 0 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _0809AFC0 - ldr r4, _0809AFB4 @ =gUnknown_2039958 - adds r0, r5, 0 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _0809AFC0 - ldr r4, _0809AFB8 @ =gUnknown_203995C - adds r0, r5, 0 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _0809AFC0 - ldr r4, _0809AFBC @ =gUnknown_2039960 - adds r0, r5, 0 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _0809AFC0 - movs r0, 0x1 - b _0809AFCA - .align 2, 0 -_0809AFB0: .4byte gUnknown_2039954 -_0809AFB4: .4byte gUnknown_2039958 -_0809AFB8: .4byte gUnknown_203995C -_0809AFBC: .4byte gUnknown_2039960 -_0809AFC0: - bl sub_809B604 - bl sub_809B670 - movs r0, 0 -_0809AFCA: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_809AF6C - - thumb_func_start sub_809AFD0 -sub_809AFD0: @ 809AFD0 - push {lr} - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _0809B070 @ =gUnknown_83DF0C4 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - ldr r0, _0809B074 @ =gUnknown_2039958 - ldr r1, [r0] - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r0, _0809B078 @ =gUnknown_2039960 - ldr r1, [r0] - movs r0, 0x2 - bl SetBgTilemapBuffer - ldr r0, _0809B07C @ =gUnknown_203995C - ldr r1, [r0] - movs r0, 0x3 - bl SetBgTilemapBuffer - movs r0, 0x10 - movs r1, 0 - bl SetGpuReg - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - movs r0, 0x14 - movs r1, 0 - bl SetGpuReg - movs r0, 0x16 - movs r1, 0 - bl SetGpuReg - movs r0, 0x18 - movs r1, 0 - bl SetGpuReg - movs r0, 0x1A - movs r1, 0 - bl SetGpuReg - movs r0, 0x1C - movs r1, 0 - bl SetGpuReg - movs r0, 0x1E - movs r1, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - pop {r0} - bx r0 - .align 2, 0 -_0809B070: .4byte gUnknown_83DF0C4 -_0809B074: .4byte gUnknown_2039958 -_0809B078: .4byte gUnknown_2039960 -_0809B07C: .4byte gUnknown_203995C - thumb_func_end sub_809AFD0 - - thumb_func_start sub_809B080 -sub_809B080: @ 809B080 - push {r4,lr} - sub sp, 0x4 - ldr r1, _0809B0B0 @ =gUnknown_8E85DC8 - movs r2, 0x90 - lsls r2, 3 - movs r3, 0xF7 - lsls r3, 2 - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - bl DecompressAndCopyTileDataToVram - ldr r0, _0809B0B4 @ =gShopData - ldrb r1, [r0, 0x16] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x1 - beq _0809B0C0 - ldr r0, _0809B0B8 @ =gUnknown_8E85EFC - ldr r1, _0809B0BC @ =gUnknown_2039954 - ldr r1, [r1] - bl LZDecompressWram - b _0809B0CA - .align 2, 0 -_0809B0B0: .4byte gUnknown_8E85DC8 -_0809B0B4: .4byte gShopData -_0809B0B8: .4byte gUnknown_8E85EFC -_0809B0BC: .4byte gUnknown_2039954 -_0809B0C0: - ldr r0, _0809B100 @ =gUnknown_8E86038 - ldr r1, _0809B104 @ =gUnknown_2039954 - ldr r1, [r1] - bl LZDecompressWram -_0809B0CA: - movs r0, 0x40 - bl Alloc - adds r4, r0, 0 - ldr r0, _0809B108 @ =gUnknown_8E86170 - adds r1, r4, 0 - bl LZDecompressWram - adds r0, r4, 0 - movs r1, 0xB0 - movs r2, 0x20 - bl LoadPalette - adds r0, r4, 0 - adds r0, 0x20 - movs r1, 0x60 - movs r2, 0x20 - bl LoadPalette - adds r0, r4, 0 - bl Free - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809B100: .4byte gUnknown_8E86038 -_0809B104: .4byte gUnknown_2039954 -_0809B108: .4byte gUnknown_8E86170 - thumb_func_end sub_809B080 - - thumb_func_start sub_809B10C -sub_809B10C: @ 809B10C - push {lr} - sub sp, 0x8 - movs r2, 0x6 - cmp r0, 0 - bne _0809B118 - movs r2, 0xB -_0809B118: - ldr r0, _0809B138 @ =gShopData - ldrb r1, [r0, 0x16] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x1 - beq _0809B13C - movs r0, 0x6 - str r0, [sp] - str r2, [sp, 0x4] - movs r0, 0x1 - movs r1, 0 - movs r2, 0xE - movs r3, 0x1E - bl SetBgRectPal - b _0809B14E - .align 2, 0 -_0809B138: .4byte gShopData -_0809B13C: - movs r0, 0x8 - str r0, [sp] - str r2, [sp, 0x4] - movs r0, 0x1 - movs r1, 0 - movs r2, 0xC - movs r3, 0x1E - bl SetBgRectPal -_0809B14E: - movs r0, 0x1 - bl ScheduleBgCopyTilemapToVram - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_809B10C - - thumb_func_start sub_809B15C -sub_809B15C: @ 809B15C - push {lr} - bl sub_809B764 - bl sub_809BAFC - bl BuyMenuDrawMoneyBox - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - movs r0, 0x1 - bl ScheduleBgCopyTilemapToVram - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - movs r0, 0x3 - bl ScheduleBgCopyTilemapToVram - pop {r0} - bx r0 - thumb_func_end sub_809B15C - - thumb_func_start sub_809B188 -sub_809B188: @ 809B188 - push {r4-r7,lr} - ldr r7, _0809B1C0 @ =gUnknown_2039964 - ldr r4, _0809B1C4 @ =gShopData - ldrh r0, [r4, 0x10] - adds r0, 0x1 - lsls r0, 3 - bl Alloc - str r0, [r7] - cmp r0, 0 - beq _0809B1B2 - ldr r5, _0809B1C8 @ =gUnknown_2039968 - ldrh r0, [r4, 0x10] - adds r0, 0x1 - movs r1, 0xD - muls r0, r1 - bl Alloc - str r0, [r5] - cmp r0, 0 - bne _0809B1CC -_0809B1B2: - bl sub_809B604 - bl sub_809B670 - movs r0, 0 - b _0809B2F0 - .align 2, 0 -_0809B1C0: .4byte gUnknown_2039964 -_0809B1C4: .4byte gShopData -_0809B1C8: .4byte gUnknown_2039968 -_0809B1CC: - movs r6, 0 - b _0809B1F2 -_0809B1D0: - lsls r1, r6, 3 - ldr r0, [r7] - adds r0, r1 - ldr r2, [r4, 0x4] - lsls r1, r6, 1 - adds r1, r2 - ldrh r1, [r1] - movs r2, 0xD - adds r3, r6, 0 - muls r3, r2 - ldr r2, [r5] - adds r2, r3 - bl sub_809B300 - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 -_0809B1F2: - ldrh r0, [r4, 0x10] - cmp r6, r0 - bcc _0809B1D0 - ldr r5, _0809B2C8 @ =gUnknown_2039968 - movs r0, 0xD - adds r4, r6, 0 - muls r4, r0 - ldr r0, [r5] - adds r0, r4 - ldr r1, _0809B2CC @ =gFameCheckerText_Cancel - bl StringCopy - ldr r0, _0809B2D0 @ =gUnknown_2039964 - ldr r2, [r0] - lsls r1, r6, 3 - adds r1, r2 - ldr r0, [r5] - adds r0, r4 - str r0, [r1] - movs r0, 0x2 - negs r0, r0 - str r0, [r1, 0x4] - ldr r5, _0809B2D4 @ =gMultiuseListMenuTemplate - str r2, [r5] - ldr r6, _0809B2D8 @ =gShopData - ldrh r0, [r6, 0x10] - adds r0, 0x1 - movs r1, 0 - strh r0, [r5, 0xC] - movs r0, 0x4 - strb r0, [r5, 0x10] - strb r1, [r5, 0x11] - movs r0, 0x9 - strb r0, [r5, 0x12] - movs r0, 0x1 - strb r0, [r5, 0x13] - ldrb r1, [r5, 0x16] - subs r0, 0x9 - ands r0, r1 - movs r1, 0x39 - negs r1, r1 - ands r0, r1 - movs r1, 0x10 - orrs r0, r1 - strb r0, [r5, 0x16] - ldrb r2, [r5, 0x14] - movs r1, 0x10 - negs r1, r1 - adds r0, r1, 0 - ands r0, r2 - movs r3, 0x2 - orrs r0, r3 - strb r0, [r5, 0x14] - ldrb r2, [r5, 0x17] - movs r0, 0x40 - negs r0, r0 - ands r0, r2 - orrs r0, r3 - strb r0, [r5, 0x17] - ldrb r0, [r5, 0x15] - ands r1, r0 - strb r1, [r5, 0x15] - movs r0, 0x2 - movs r1, 0x5 - bl GetFontAttribute - lsls r0, 4 - ldrb r2, [r5, 0x14] - movs r4, 0xF - adds r1, r4, 0 - ands r1, r2 - orrs r1, r0 - strb r1, [r5, 0x14] - movs r0, 0x2 - movs r1, 0x7 - bl GetFontAttribute - lsls r0, 4 - ldrb r2, [r5, 0x15] - adds r1, r4, 0 - ands r1, r2 - orrs r1, r0 - strb r1, [r5, 0x15] - ldr r0, _0809B2DC @ =sub_809B320 - str r0, [r5, 0x4] - ldr r0, _0809B2E0 @ =sub_809B408 - str r0, [r5, 0x8] - ldrb r2, [r5, 0x16] - movs r1, 0x3F - adds r0, r1, 0 - ands r0, r2 - strb r0, [r5, 0x16] - ldrb r0, [r5, 0x17] - ands r1, r0 - strb r1, [r5, 0x17] - ldrb r0, [r6, 0x16] - ands r4, r0 - movs r1, 0x6 - cmp r4, 0x1 - bne _0809B2BC - movs r1, 0x5 -_0809B2BC: - ldrh r0, [r6, 0x10] - adds r0, 0x1 - cmp r0, r1 - ble _0809B2E4 - strh r1, [r5, 0xE] - b _0809B2E6 - .align 2, 0 -_0809B2C8: .4byte gUnknown_2039968 -_0809B2CC: .4byte gFameCheckerText_Cancel -_0809B2D0: .4byte gUnknown_2039964 -_0809B2D4: .4byte gMultiuseListMenuTemplate -_0809B2D8: .4byte gShopData -_0809B2DC: .4byte sub_809B320 -_0809B2E0: .4byte sub_809B408 -_0809B2E4: - strh r0, [r5, 0xE] -_0809B2E6: - ldr r0, _0809B2F8 @ =gShopData - ldr r1, _0809B2FC @ =gMultiuseListMenuTemplate - ldrh r1, [r1, 0xE] - strh r1, [r0, 0x12] - movs r0, 0x1 -_0809B2F0: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0809B2F8: .4byte gShopData -_0809B2FC: .4byte gMultiuseListMenuTemplate - thumb_func_end sub_809B188 - - thumb_func_start sub_809B300 -sub_809B300: @ 809B300 - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r5, 0 - adds r1, r6, 0 - bl CopyItemName - str r6, [r4] - str r5, [r4, 0x4] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_809B300 - - thumb_func_start sub_809B320 -sub_809B320: @ 809B320 - push {r4-r7,lr} - sub sp, 0x14 - adds r5, r0, 0 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0x1 - beq _0809B334 - movs r0, 0x5 - bl PlaySE -_0809B334: - movs r0, 0x2 - negs r0, r0 - cmp r5, r0 - beq _0809B348 - lsls r0, r5, 16 - lsrs r0, 16 - bl ItemId_GetDescription - adds r7, r0, 0 - b _0809B34A -_0809B348: - ldr r7, _0809B384 @ =gUnknown_8416757 -_0809B34A: - movs r0, 0x5 - movs r1, 0 - bl FillWindowPixelBuffer - ldr r6, _0809B388 @ =gShopData - ldrb r0, [r6, 0x16] - movs r4, 0xF - ands r4, r0 - cmp r4, 0x1 - beq _0809B3D8 - ldrb r1, [r6, 0x17] - lsls r1, 29 - lsrs r1, 30 - movs r0, 0x1 - eors r0, r1 - bl DestroyItemMenuIcon - movs r0, 0x2 - negs r0, r0 - cmp r5, r0 - beq _0809B38C - lsls r0, r5, 16 - lsrs r0, 16 - ldrb r1, [r6, 0x17] - lsls r1, 29 - lsrs r1, 30 - bl CreateItemMenuIcon - b _0809B398 - .align 2, 0 -_0809B384: .4byte gUnknown_8416757 -_0809B388: .4byte gShopData -_0809B38C: - ldr r0, _0809B3D0 @ =0x00000177 - ldrb r1, [r6, 0x17] - lsls r1, 29 - lsrs r1, 30 - bl CreateItemMenuIcon -_0809B398: - ldr r3, _0809B3D4 @ =gShopData - ldrb r2, [r3, 0x17] - lsls r0, r2, 29 - lsrs r0, 30 - movs r1, 0x1 - eors r1, r0 - lsls r1, 1 - movs r0, 0x7 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x17] - movs r0, 0x3 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0 - str r0, [sp, 0xC] - str r0, [sp, 0x10] - movs r0, 0x5 - movs r1, 0x2 - adds r2, r7, 0 - movs r3, 0 - bl BuyMenuPrint - b _0809B400 - .align 2, 0 -_0809B3D0: .4byte 0x00000177 -_0809B3D4: .4byte gShopData -_0809B3D8: - movs r0, 0x6 - movs r1, 0 - bl FillWindowPixelBuffer - adds r0, r5, 0 - bl sub_809B494 - movs r0, 0x3 - str r0, [sp] - str r4, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - str r0, [sp, 0xC] - str r0, [sp, 0x10] - movs r0, 0x5 - movs r1, 0x2 - adds r2, r7, 0 - movs r3, 0x2 - bl BuyMenuPrint -_0809B400: - add sp, 0x14 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_809B320 - - thumb_func_start sub_809B408 -sub_809B408: @ 809B408 - push {r4-r6,lr} - sub sp, 0x14 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r2, 24 - lsrs r5, r2, 24 - movs r0, 0x2 - negs r0, r0 - cmp r1, r0 - beq _0809B480 - ldr r4, _0809B488 @ =gStringVar1 - lsls r0, r1, 16 - lsrs r0, 16 - bl itemid_get_market_price - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - movs r2, 0 - movs r3, 0x4 - bl ConvertIntToDecimalStringN - adds r0, r4, 0 - bl StringLength - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x4 - subs r1, r0 - ldr r2, _0809B48C @ =gStringVar4 - adds r0, r1, 0 - subs r1, 0x1 - cmp r0, 0 - beq _0809B45C - movs r3, 0 -_0809B450: - strb r3, [r2] - adds r2, 0x1 - adds r0, r1, 0 - subs r1, 0x1 - cmp r0, 0 - bne _0809B450 -_0809B45C: - ldr r1, _0809B490 @ =gText_PokedollarVar1 - adds r0, r2, 0 - bl StringExpandPlaceholders - ldr r2, _0809B48C @ =gStringVar4 - str r5, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - movs r0, 0xFF - str r0, [sp, 0xC] - movs r0, 0x1 - str r0, [sp, 0x10] - adds r0, r6, 0 - movs r1, 0 - movs r3, 0x69 - bl BuyMenuPrint -_0809B480: - add sp, 0x14 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809B488: .4byte gStringVar1 -_0809B48C: .4byte gStringVar4 -_0809B490: .4byte gText_PokedollarVar1 - thumb_func_end sub_809B408 - - thumb_func_start sub_809B494 -sub_809B494: @ 809B494 - push {r4-r7,lr} - sub sp, 0x14 - adds r7, r0, 0 - movs r0, 0x2 - negs r0, r0 - cmp r7, r0 - beq _0809B528 - ldr r4, _0809B514 @ =gStringVar1 - ldr r0, _0809B518 @ =0xfffffee0 - adds r1, r7, r0 - adds r0, r4, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r5, _0809B51C @ =gStringVar4 - ldr r1, _0809B520 @ =gOtherText_UnkF9_08_Clear_01 - adds r0, r5, 0 - bl StringCopy - adds r0, r5, 0 - adds r1, r4, 0 - bl StringAppend - movs r4, 0 - str r4, [sp] - str r4, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0xFF - str r0, [sp, 0xC] - movs r6, 0x1 - str r6, [sp, 0x10] - movs r0, 0x6 - movs r1, 0 - adds r2, r5, 0 - movs r3, 0 - bl BuyMenuPrint - lsls r0, r7, 16 - lsrs r0, 16 - bl ItemIdToBattleMoveId - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xD - muls r1, r0 - ldr r0, _0809B524 @ =gMoveNames - adds r1, r0 - adds r0, r5, 0 - bl StringCopy - movs r0, 0x10 - str r0, [sp] - str r4, [sp, 0x4] - str r4, [sp, 0x8] - str r4, [sp, 0xC] - str r6, [sp, 0x10] - movs r0, 0x6 - movs r1, 0x2 - adds r2, r5, 0 - movs r3, 0 - bl BuyMenuPrint - b _0809B55C - .align 2, 0 -_0809B514: .4byte gStringVar1 -_0809B518: .4byte 0xfffffee0 -_0809B51C: .4byte gStringVar4 -_0809B520: .4byte gOtherText_UnkF9_08_Clear_01 -_0809B524: .4byte gMoveNames -_0809B528: - ldr r2, _0809B564 @ =gText_ThreeHyphens - movs r4, 0 - str r4, [sp] - str r4, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0xFF - str r0, [sp, 0xC] - movs r5, 0x1 - str r5, [sp, 0x10] - movs r0, 0x6 - movs r1, 0 - movs r3, 0 - bl BuyMenuPrint - ldr r2, _0809B568 @ =gUnknown_8416217 - movs r0, 0x10 - str r0, [sp] - str r4, [sp, 0x4] - str r4, [sp, 0x8] - str r4, [sp, 0xC] - str r5, [sp, 0x10] - movs r0, 0x6 - movs r1, 0x2 - movs r3, 0 - bl BuyMenuPrint -_0809B55C: - add sp, 0x14 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809B564: .4byte gText_ThreeHyphens -_0809B568: .4byte gUnknown_8416217 - thumb_func_end sub_809B494 - - thumb_func_start sub_809B56C -sub_809B56C: @ 809B56C - ldr r0, _0809B578 @ =gShopData - ldrh r0, [r0, 0x16] - lsls r0, 23 - lsrs r0, 27 - bx lr - .align 2, 0 -_0809B578: .4byte gShopData - thumb_func_end sub_809B56C - - thumb_func_start sub_809B57C -sub_809B57C: @ 809B57C - push {r4,lr} - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r4, 24 - lsrs r4, 24 - bl ListMenuGetYCoordForPrintingArrowCursor - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - bl sub_809B59C - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_809B57C - - thumb_func_start sub_809B59C -sub_809B59C: @ 809B59C - push {r4,r5,lr} - sub sp, 0x14 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0xFF - bne _0809B5E0 - movs r0, 0x2 - movs r1, 0 - bl GetFontAttribute - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x2 - movs r1, 0x1 - bl GetFontAttribute - lsls r0, 24 - lsrs r0, 24 - str r4, [sp] - str r0, [sp, 0x4] - movs r0, 0x4 - movs r1, 0 - movs r2, 0x1 - adds r3, r5, 0 - bl FillWindowPixelRect - movs r0, 0x4 - movs r1, 0x2 - bl CopyWindowToVram - b _0809B5F8 -_0809B5E0: - ldr r2, _0809B600 @ =gFameCheckerText_ListMenuCursor - str r5, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - str r1, [sp, 0x10] - movs r0, 0x4 - movs r1, 0x2 - movs r3, 0x1 - bl BuyMenuPrint -_0809B5F8: - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809B600: .4byte gFameCheckerText_ListMenuCursor - thumb_func_end sub_809B59C - - thumb_func_start sub_809B604 -sub_809B604: @ 809B604 - push {lr} - ldr r0, _0809B658 @ =gUnknown_2039954 - ldr r0, [r0] - cmp r0, 0 - beq _0809B612 - bl Free -_0809B612: - ldr r0, _0809B65C @ =gUnknown_2039958 - ldr r0, [r0] - cmp r0, 0 - beq _0809B61E - bl Free -_0809B61E: - ldr r0, _0809B660 @ =gUnknown_203995C - ldr r0, [r0] - cmp r0, 0 - beq _0809B62A - bl Free -_0809B62A: - ldr r0, _0809B664 @ =gUnknown_2039960 - ldr r0, [r0] - cmp r0, 0 - beq _0809B636 - bl Free -_0809B636: - ldr r0, _0809B668 @ =gUnknown_2039964 - ldr r0, [r0] - cmp r0, 0 - beq _0809B642 - bl Free -_0809B642: - ldr r0, _0809B66C @ =gUnknown_2039968 - ldr r0, [r0] - cmp r0, 0 - beq _0809B64E - bl Free -_0809B64E: - bl FreeAllWindowBuffers - pop {r0} - bx r0 - .align 2, 0 -_0809B658: .4byte gUnknown_2039954 -_0809B65C: .4byte gUnknown_2039958 -_0809B660: .4byte gUnknown_203995C -_0809B664: .4byte gUnknown_2039960 -_0809B668: .4byte gUnknown_2039964 -_0809B66C: .4byte gUnknown_2039968 - thumb_func_end sub_809B604 - - thumb_func_start sub_809B670 -sub_809B670: @ 809B670 - push {lr} - ldr r0, _0809B684 @ =gFieldCallback - ldr r1, _0809B688 @ =sub_809AD74 - str r1, [r0] - ldr r0, _0809B68C @ =CB2_ReturnToField - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_0809B684: .4byte gFieldCallback -_0809B688: .4byte sub_809AD74 -_0809B68C: .4byte CB2_ReturnToField - thumb_func_end sub_809B670 - - thumb_func_start sub_809B690 -sub_809B690: @ 809B690 - push {r4,lr} - sub sp, 0x10 - ldr r4, _0809B6C0 @ =gShopData - ldrb r1, [r4, 0x16] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x1 - beq _0809B6C4 - ldrh r0, [r4, 0x10] - ldrh r1, [r4, 0x12] - subs r0, r1 - adds r0, 0x1 - str r0, [sp] - movs r0, 0x6E - str r0, [sp, 0x4] - str r0, [sp, 0x8] - adds r0, r4, 0 - adds r0, 0xE - str r0, [sp, 0xC] - movs r0, 0x2 - movs r1, 0xA0 - movs r2, 0x8 - movs r3, 0x68 - b _0809B6E2 - .align 2, 0 -_0809B6C0: .4byte gShopData -_0809B6C4: - ldrh r0, [r4, 0x10] - ldrh r1, [r4, 0x12] - subs r0, r1 - adds r0, 0x1 - str r0, [sp] - movs r0, 0x6E - str r0, [sp, 0x4] - str r0, [sp, 0x8] - adds r0, r4, 0 - adds r0, 0xE - str r0, [sp, 0xC] - movs r0, 0x2 - movs r1, 0xA0 - movs r2, 0x8 - movs r3, 0x58 -_0809B6E2: - bl AddScrollIndicatorArrowPairParameterized - lsls r0, 3 - ldrb r2, [r4, 0x17] - movs r1, 0x7 - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0x17] - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_809B690 - - thumb_func_start sub_809B6FC -sub_809B6FC: @ 809B6FC - push {r4,lr} - sub sp, 0x10 - ldr r4, _0809B738 @ =gShopData - movs r0, 0x1 - strh r0, [r4, 0x18] - movs r0, 0x2 - str r0, [sp] - movs r0, 0x6E - str r0, [sp, 0x4] - str r0, [sp, 0x8] - adds r0, r4, 0 - adds r0, 0x18 - str r0, [sp, 0xC] - movs r0, 0x2 - movs r1, 0x98 - movs r2, 0x48 - movs r3, 0x68 - bl AddScrollIndicatorArrowPairParameterized - lsls r0, 3 - ldrb r2, [r4, 0x17] - movs r1, 0x7 - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0x17] - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809B738: .4byte gShopData - thumb_func_end sub_809B6FC - - thumb_func_start sub_809B73C -sub_809B73C: @ 809B73C - push {r4,lr} - ldr r4, _0809B760 @ =gShopData - ldrb r1, [r4, 0x17] - movs r0, 0xF8 - ands r0, r1 - cmp r0, 0xF8 - beq _0809B758 - lsrs r0, r1, 3 - bl RemoveScrollIndicatorArrowPair - ldrb r0, [r4, 0x17] - movs r1, 0xF8 - orrs r0, r1 - strb r0, [r4, 0x17] -_0809B758: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809B760: .4byte gShopData - thumb_func_end sub_809B73C - - thumb_func_start sub_809B764 -sub_809B764: @ 809B764 - push {lr} - bl sub_809B92C - bl sub_809BA40 - bl sub_809B778 - pop {r0} - bx r0 - thumb_func_end sub_809B764 - - thumb_func_start sub_809B778 -sub_809B778: @ 809B778 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r0, _0809B804 @ =gMapHeader - ldr r0, [r0] - mov r9, r0 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl GetXYCoordsOneStepInFrontOfPlayer - mov r1, sp - mov r0, sp - ldrh r0, [r0] - subs r0, 0x2 - strh r0, [r1] - ldrh r0, [r4] - subs r0, 0x3 - strh r0, [r4] - movs r1, 0 - mov r10, r4 -_0809B7AA: - movs r4, 0 - lsls r1, 16 - mov r8, r1 - asrs r7, r1, 16 -_0809B7B2: - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - lsls r4, 16 - asrs r6, r4, 16 - adds r0, r6 - mov r2, r10 - movs r3, 0 - ldrsh r1, [r2, r3] - adds r1, r7 - bl MapGridGetMetatileIdAt - lsls r0, 16 - lsrs r5, r0, 16 - mov r0, sp - ldrh r0, [r0] - adds r0, r6, r0 - lsls r0, 16 - asrs r0, 16 - mov r2, r10 - ldrh r1, [r2] - adds r1, r7, r1 - lsls r1, 16 - asrs r1, 16 - bl MapGridGetMetatileLayerTypeAt - lsls r0, 24 - lsrs r3, r0, 24 - ldr r0, _0809B808 @ =0x0000027f - cmp r5, r0 - bhi _0809B80C - mov r1, r9 - ldr r0, [r1, 0x10] - lsls r1, r5, 4 - ldr r2, [r0, 0xC] - adds r2, r1 - adds r0, r6, 0 - adds r1, r7, 0 - bl sub_809B850 - b _0809B822 - .align 2, 0 -_0809B804: .4byte gMapHeader -_0809B808: .4byte 0x0000027f -_0809B80C: - mov r2, r9 - ldr r0, [r2, 0x14] - ldr r2, _0809B84C @ =0xfffffd80 - adds r1, r5, r2 - lsls r1, 4 - ldr r2, [r0, 0xC] - adds r2, r1 - adds r0, r6, 0 - adds r1, r7, 0 - bl sub_809B850 -_0809B822: - movs r3, 0x80 - lsls r3, 9 - adds r0, r4, r3 - lsrs r4, r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _0809B7B2 - adds r0, r3, 0 - add r0, r8 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0x9 - ble _0809B7AA - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809B84C: .4byte 0xfffffd80 - thumb_func_end sub_809B778 - - thumb_func_start sub_809B850 -sub_809B850: @ 809B850 - push {r4-r6,lr} - adds r6, r2, 0 - lsls r3, 24 - lsrs r3, 24 - adds r2, r3, 0 - lsls r0, 17 - lsrs r5, r0, 16 - lsls r1, 22 - movs r0, 0x80 - lsls r0, 15 - adds r1, r0 - lsrs r1, 16 - cmp r3, 0x1 - beq _0809B8A0 - cmp r3, 0x1 - bgt _0809B876 - cmp r3, 0 - beq _0809B87C - b _0809B8F6 -_0809B876: - cmp r2, 0x2 - beq _0809B8D0 - b _0809B8F6 -_0809B87C: - ldr r0, _0809B898 @ =gUnknown_2039960 - ldr r0, [r0] - lsls r5, 16 - asrs r5, 16 - lsls r4, r1, 16 - asrs r4, 16 - adds r1, r5, 0 - adds r2, r4, 0 - adds r3, r6, 0 - bl sub_809B904 - ldr r0, _0809B89C @ =gUnknown_2039958 - b _0809B8B8 - .align 2, 0 -_0809B898: .4byte gUnknown_2039960 -_0809B89C: .4byte gUnknown_2039958 -_0809B8A0: - ldr r0, _0809B8C8 @ =gUnknown_203995C - ldr r0, [r0] - lsls r5, 16 - asrs r5, 16 - lsls r4, r1, 16 - asrs r4, 16 - adds r1, r5, 0 - adds r2, r4, 0 - adds r3, r6, 0 - bl sub_809B904 - ldr r0, _0809B8CC @ =gUnknown_2039960 -_0809B8B8: - ldr r0, [r0] - adds r3, r6, 0 - adds r3, 0x8 - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_809B904 - b _0809B8F6 - .align 2, 0 -_0809B8C8: .4byte gUnknown_203995C -_0809B8CC: .4byte gUnknown_2039960 -_0809B8D0: - ldr r0, _0809B8FC @ =gUnknown_203995C - ldr r0, [r0] - lsls r5, 16 - asrs r5, 16 - lsls r4, r1, 16 - asrs r4, 16 - adds r1, r5, 0 - adds r2, r4, 0 - adds r3, r6, 0 - bl sub_809B904 - ldr r0, _0809B900 @ =gUnknown_2039958 - ldr r0, [r0] - adds r3, r6, 0 - adds r3, 0x8 - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_809B904 -_0809B8F6: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809B8FC: .4byte gUnknown_203995C -_0809B900: .4byte gUnknown_2039958 - thumb_func_end sub_809B850 - - thumb_func_start sub_809B904 -sub_809B904: @ 809B904 - lsls r1, 16 - asrs r1, 16 - lsls r2, 16 - asrs r2, 16 - adds r1, r2 - lsls r1, 1 - adds r1, r0 - ldrh r0, [r3] - strh r0, [r1] - ldrh r0, [r3, 0x2] - strh r0, [r1, 0x2] - adds r2, r1, 0 - adds r2, 0x40 - ldrh r0, [r3, 0x4] - strh r0, [r2] - adds r1, 0x42 - ldrh r0, [r3, 0x6] - strh r0, [r1] - bx lr - thumb_func_end sub_809B904 - - thumb_func_start sub_809B92C -sub_809B92C: @ 809B92C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - movs r0, 0 - mov r9, r0 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl GetXYCoordsOneStepInFrontOfPlayer - bl PlayerGetZCoord - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - movs r5, 0 - ldr r2, _0809B9DC @ =gUnknown_20398B4 - movs r1, 0x10 -_0809B958: - lsls r0, r5, 3 - adds r0, r2 - strh r1, [r0] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0xF - bls _0809B958 - movs r5, 0 - ldr r6, _0809B9E0 @ =gUnknown_20398BA - subs r1, r6, 0x6 - mov r8, r1 -_0809B970: - movs r4, 0 - adds r2, r5, 0x1 - mov r10, r2 -_0809B976: - mov r1, sp - ldr r3, _0809B9E4 @ =0x0000fffd - adds r0, r3, 0 - ldrh r1, [r1] - adds r0, r1 - adds r0, r4 - lsls r0, 16 - lsrs r0, 16 - ldr r2, _0809B9E8 @ =0x0000fffe - adds r1, r2, 0 - mov r3, sp - ldrh r3, [r3, 0x2] - adds r1, r3 - adds r1, r5 - lsls r1, 16 - lsrs r1, 16 - ldr r2, [sp, 0x4] - bl GetFieldObjectIdByXYZ - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x10 - beq _0809BA1C - mov r0, r9 - lsls r2, r0, 3 - mov r1, r8 - adds r0, r2, r1 - movs r7, 0 - strh r3, [r0] - mov r0, r8 - adds r0, 0x2 - adds r0, r2, r0 - strh r4, [r0] - ldr r1, _0809B9EC @ =gUnknown_20398B8 - adds r0, r2, r1 - strh r5, [r0] - ldr r1, _0809B9F0 @ =gMapObjects - lsls r0, r3, 3 - adds r0, r3 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x18] - lsls r0, 28 - lsrs r0, 28 - cmp r0, 0x2 - beq _0809BA00 - cmp r0, 0x2 - bgt _0809B9F4 - cmp r0, 0x1 - beq _0809B9FA - b _0809BA0C - .align 2, 0 -_0809B9DC: .4byte gUnknown_20398B4 -_0809B9E0: .4byte gUnknown_20398BA -_0809B9E4: .4byte 0x0000fffd -_0809B9E8: .4byte 0x0000fffe -_0809B9EC: .4byte gUnknown_20398B8 -_0809B9F0: .4byte gMapObjects -_0809B9F4: - cmp r0, 0x3 - beq _0809BA06 - b _0809BA0C -_0809B9FA: - adds r0, r2, r6 - strh r7, [r0] - b _0809BA12 -_0809BA00: - adds r1, r2, r6 - movs r0, 0x1 - b _0809BA10 -_0809BA06: - adds r1, r2, r6 - movs r0, 0x2 - b _0809BA10 -_0809BA0C: - adds r1, r2, r6 - movs r0, 0x3 -_0809BA10: - strh r0, [r1] -_0809BA12: - mov r0, r9 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 -_0809BA1C: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x6 - bls _0809B976 - mov r2, r10 - lsls r0, r2, 24 - lsrs r5, r0, 24 - cmp r5, 0x4 - bls _0809B970 - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_809B92C - - thumb_func_start sub_809BA40 -sub_809BA40: @ 809BA40 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - movs r6, 0 - ldr r7, _0809BAE8 @ =gUnknown_20398B4 - ldr r0, _0809BAEC @ =gMapObjects - mov r8, r0 - adds r1, r7, 0x6 - mov r9, r1 -_0809BA56: - lsls r5, r6, 3 - adds r4, r5, r7 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x10 - beq _0809BACE - adds r1, r0, 0 - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - add r0, r8 - ldrb r0, [r0, 0x5] - bl GetFieldObjectGraphicsInfo - movs r1, 0 - ldrsh r2, [r4, r1] - lsls r1, r2, 3 - adds r1, r2 - lsls r1, 2 - add r1, r8 - ldrb r4, [r1, 0x5] - adds r1, r7, 0x2 - adds r1, r5, r1 - ldrh r2, [r1] - lsls r2, 20 - ldr r1, _0809BAF0 @ =0xfff80000 - adds r2, r1 - asrs r2, 16 - adds r1, r7, 0x4 - adds r1, r5, r1 - ldrh r3, [r1] - lsls r3, 4 - movs r1, 0xA - ldrsh r0, [r0, r1] - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - subs r0, 0x30 - subs r3, r0 - lsls r3, 16 - asrs r3, 16 - movs r0, 0x2 - str r0, [sp] - adds r0, r4, 0 - ldr r1, _0809BAF4 @ =SpriteCallbackDummy - bl AddPseudoEventObject - lsls r0, 24 - lsrs r0, 24 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _0809BAF8 @ =gSprites - adds r2, r0 - mov r1, r9 - adds r0, r5, r1 - ldrb r1, [r0] - adds r0, r2, 0 - bl StartSpriteAnim -_0809BACE: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0xF - bls _0809BA56 - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809BAE8: .4byte gUnknown_20398B4 -_0809BAEC: .4byte gMapObjects -_0809BAF0: .4byte 0xfff80000 -_0809BAF4: .4byte SpriteCallbackDummy -_0809BAF8: .4byte gSprites - thumb_func_end sub_809BA40 - - thumb_func_start sub_809BAFC -sub_809BAFC: @ 809BAFC - push {r4-r6,lr} - ldr r0, _0809BB34 @ =gUnknown_2039958 - ldr r4, [r0] - ldr r0, _0809BB38 @ =gUnknown_2039954 - ldr r3, [r0] - movs r1, 0 - ldr r0, _0809BB3C @ =0x0000b3dc - adds r6, r0, 0 - ldr r5, _0809BB40 @ =0x000003ff -_0809BB0E: - lsls r0, r1, 16 - asrs r2, r0, 16 - lsls r1, r2, 1 - adds r0, r1, r3 - ldrh r0, [r0] - cmp r0, 0 - beq _0809BB22 - adds r1, r4 - adds r0, r6 - strh r0, [r1] -_0809BB22: - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, r5 - ble _0809BB0E - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809BB34: .4byte gUnknown_2039958 -_0809BB38: .4byte gUnknown_2039954 -_0809BB3C: .4byte 0x0000b3dc -_0809BB40: .4byte 0x000003ff - thumb_func_end sub_809BAFC - - thumb_func_start sub_809BB44 -sub_809BB44: @ 809BB44 - push {r4,lr} - sub sp, 0x14 - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _0809BBAC @ =gTasks+0x8 - adds r4, r0 - movs r0, 0x3 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, _0809BBB0 @ =gShopData - ldr r3, [r0, 0x8] - movs r0, 0xFF - str r0, [sp] - movs r0, 0x3 - movs r1, 0x36 - movs r2, 0xA - bl PrintMoneyAmount - ldr r0, _0809BBB4 @ =gStringVar1 - movs r2, 0x2 - ldrsh r1, [r4, r2] - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r4, _0809BBB8 @ =gStringVar4 - ldr r1, _0809BBBC @ =gText_TimesStrVar1 - adds r0, r4, 0 - bl StringExpandPlaceholders - movs r0, 0xA - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - movs r0, 0x1 - str r0, [sp, 0x10] - movs r0, 0x3 - movs r1, 0 - adds r2, r4, 0 - movs r3, 0x2 - bl BuyMenuPrint - add sp, 0x14 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809BBAC: .4byte gTasks+0x8 -_0809BBB0: .4byte gShopData -_0809BBB4: .4byte gStringVar1 -_0809BBB8: .4byte gStringVar4 -_0809BBBC: .4byte gText_TimesStrVar1 - thumb_func_end sub_809BB44 - - thumb_func_start sub_809BBC0 -sub_809BBC0: @ 809BBC0 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _0809BC00 @ =gTasks+0x8 - adds r5, r0, r1 - ldr r0, _0809BC04 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0809BC8E - ldrb r0, [r5, 0xE] - bl ListMenu_ProcessInput - adds r4, r0, 0 - ldrb r0, [r5, 0xE] - ldr r7, _0809BC08 @ =gUnknown_2039942 - subs r2, r7, 0x2 - adds r1, r7, 0 - bl ListMenuGetScrollAndRow - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _0809BC0C - adds r0, 0x1 - cmp r4, r0 - bne _0809BC1A - b _0809BC8E - .align 2, 0 -_0809BC00: .4byte gTasks+0x8 -_0809BC04: .4byte gPaletteFade -_0809BC08: .4byte gUnknown_2039942 -_0809BC0C: - movs r0, 0x5 - bl PlaySE - adds r0, r6, 0 - bl sub_809C004 - b _0809BC8E -_0809BC1A: - movs r0, 0x5 - bl PlaySE - strh r4, [r5, 0xA] - movs r0, 0x5 - bl ClearWindowTilemap - bl sub_809B73C - ldrb r0, [r5, 0xE] - movs r1, 0x2 - bl sub_809B57C - movs r0, 0x1 - bl sub_809B10C - lsls r0, r4, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - bl itemid_get_market_price - adds r1, r0, 0 - adds r0, r7, 0 - subs r0, 0xE - lsls r1, 16 - lsrs r1, 16 - str r1, [r0, 0x8] - ldr r0, _0809BC70 @ =gSaveBlock1Ptr - ldr r0, [r0] - movs r2, 0xA4 - lsls r2, 2 - adds r0, r2 - bl IsEnoughMoney - lsls r0, 24 - cmp r0, 0 - bne _0809BC7C - ldr r1, _0809BC74 @ =gUnknown_8416842 - ldr r2, _0809BC78 @ =sub_809BF98 - adds r0, r6, 0 - bl BuyMenuDisplayMessage - b _0809BC8E - .align 2, 0 -_0809BC70: .4byte gSaveBlock1Ptr -_0809BC74: .4byte gUnknown_8416842 -_0809BC78: .4byte sub_809BF98 -_0809BC7C: - ldr r1, _0809BC94 @ =gStringVar1 - adds r0, r4, 0 - bl CopyItemName - ldr r1, _0809BC98 @ =gUnknown_8416766 - ldr r2, _0809BC9C @ =sub_809BCA0 - adds r0, r6, 0 - bl BuyMenuDisplayMessage -_0809BC8E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809BC94: .4byte gStringVar1 -_0809BC98: .4byte gUnknown_8416766 -_0809BC9C: .4byte sub_809BCA0 - thumb_func_end sub_809BBC0 - - thumb_func_start sub_809BCA0 -sub_809BCA0: @ 809BCA0 - push {r4-r7,lr} - sub sp, 0x14 - lsls r0, 24 - lsrs r7, r0, 24 - lsls r5, r7, 2 - adds r5, r7 - lsls r5, 3 - ldr r0, _0809BD40 @ =gTasks+0x8 - adds r5, r0 - ldrh r0, [r5, 0xA] - bl BagGetQuantityByItemId - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - movs r0, 0x1 - movs r1, 0 - bl BuyMenuQuantityBoxThinBorder - ldr r0, _0809BD44 @ =gStringVar1 - adds r1, r4, 0 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r6, _0809BD48 @ =gStringVar4 - ldr r1, _0809BD4C @ =gUnknown_8416749 - adds r0, r6, 0 - bl StringExpandPlaceholders - movs r0, 0x2 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - movs r4, 0x1 - str r4, [sp, 0x10] - movs r0, 0x1 - movs r1, 0x2 - adds r2, r6, 0 - movs r3, 0 - bl BuyMenuPrint - strh r4, [r5, 0x2] - movs r0, 0x3 - movs r1, 0 - bl BuyMenuQuantityBoxNormalBorder - adds r0, r7, 0 - bl sub_809BB44 - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldr r0, _0809BD50 @ =gSaveBlock1Ptr - ldr r0, [r0] - movs r1, 0xA4 - lsls r1, 2 - adds r0, r1 - bl GetMoney - adds r4, r0, 0 - ldrh r0, [r5, 0xA] - bl itemid_get_market_price - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl __udivsi3 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x63 - bls _0809BD58 - ldr r1, _0809BD54 @ =gShopData - movs r0, 0x63 - b _0809BD5E - .align 2, 0 -_0809BD40: .4byte gTasks+0x8 -_0809BD44: .4byte gStringVar1 -_0809BD48: .4byte gStringVar4 -_0809BD4C: .4byte gUnknown_8416749 -_0809BD50: .4byte gSaveBlock1Ptr -_0809BD54: .4byte gShopData -_0809BD58: - ldr r1, _0809BD80 @ =gShopData - lsls r0, r2, 24 - lsrs r0, 24 -_0809BD5E: - strh r0, [r1, 0x14] - cmp r2, 0x1 - beq _0809BD68 - bl sub_809B6FC -_0809BD68: - ldr r0, _0809BD84 @ =gTasks - lsls r1, r7, 2 - adds r1, r7 - lsls r1, 3 - adds r1, r0 - ldr r0, _0809BD88 @ =sub_809BD8C - str r0, [r1] - add sp, 0x14 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809BD80: .4byte gShopData -_0809BD84: .4byte gTasks -_0809BD88: .4byte sub_809BD8C - thumb_func_end sub_809BCA0 - - thumb_func_start sub_809BD8C -sub_809BD8C: @ 809BD8C - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r7, r5, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0809BDCC @ =gTasks+0x8 - adds r4, r0, r1 - adds r0, r4, 0x2 - ldr r6, _0809BDD0 @ =gShopData - ldrh r1, [r6, 0x14] - bl AdjustQuantityAccordingToDPadInput - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0809BDD4 - ldrh r0, [r4, 0xA] - bl itemid_get_market_price - lsls r0, 16 - lsrs r0, 16 - movs r2, 0x2 - ldrsh r1, [r4, r2] - muls r0, r1 - str r0, [r6, 0x8] - adds r0, r5, 0 - bl sub_809BB44 - b _0809BE88 - .align 2, 0 -_0809BDCC: .4byte gTasks+0x8 -_0809BDD0: .4byte gShopData -_0809BDD4: - ldr r0, _0809BE3C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0809BE54 - movs r0, 0x5 - bl PlaySE - bl sub_809B73C - movs r0, 0x3 - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - movs r0, 0x1 - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - movs r0, 0x3 - bl ClearWindowTilemap - movs r0, 0x1 - bl ClearWindowTilemap - movs r0, 0x4 - bl PutWindowTilemap - ldrh r0, [r4, 0xA] - ldr r1, _0809BE40 @ =gStringVar1 - bl CopyItemName - ldr r0, _0809BE44 @ =gStringVar2 - movs r2, 0x2 - ldrsh r1, [r4, r2] - movs r2, 0 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, _0809BE48 @ =gStringVar3 - ldr r1, [r6, 0x8] - movs r2, 0 - movs r3, 0x8 - bl ConvertIntToDecimalStringN - ldr r1, _0809BE4C @ =gUnknown_841678E - ldr r2, _0809BE50 @ =sub_809BE90 - adds r0, r5, 0 - bl BuyMenuDisplayMessage - b _0809BE88 - .align 2, 0 -_0809BE3C: .4byte gMain -_0809BE40: .4byte gStringVar1 -_0809BE44: .4byte gStringVar2 -_0809BE48: .4byte gStringVar3 -_0809BE4C: .4byte gUnknown_841678E -_0809BE50: .4byte sub_809BE90 -_0809BE54: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0809BE88 - movs r0, 0x5 - bl PlaySE - bl sub_809B73C - movs r0, 0x3 - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - movs r0, 0x1 - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - movs r0, 0x3 - bl ClearWindowTilemap - movs r0, 0x1 - bl ClearWindowTilemap - adds r0, r7, 0 - bl sub_809BF98 -_0809BE88: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_809BD8C - - thumb_func_start sub_809BE90 -sub_809BE90: @ 809BE90 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0809BEA0 @ =gUnknown_83DF0B4 - bl BuyMenuConfirmPurchase - pop {r0} - bx r0 - .align 2, 0 -_0809BEA0: .4byte gUnknown_83DF0B4 - thumb_func_end sub_809BE90 - - thumb_func_start sub_809BEA4 -sub_809BEA4: @ 809BEA4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0809BEE8 @ =gTasks+0x8 - adds r4, r0, r1 - movs r0, 0x4 - bl PutWindowTilemap - ldrh r0, [r4, 0xA] - ldrh r1, [r4, 0x2] - bl AddBagItem - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0809BEF4 - ldr r1, _0809BEEC @ =gUnknown_84167E7 - ldr r2, _0809BEF0 @ =sub_809BF0C - adds r0, r5, 0 - bl BuyMenuDisplayMessage - adds r0, r5, 0 - bl nullsub_52 - ldrh r0, [r4, 0xA] - ldrh r1, [r4, 0x2] - movs r2, 0x1 - bl sub_809C09C - b _0809BEFE - .align 2, 0 -_0809BEE8: .4byte gTasks+0x8 -_0809BEEC: .4byte gUnknown_84167E7 -_0809BEF0: .4byte sub_809BF0C -_0809BEF4: - ldr r1, _0809BF04 @ =gUnknown_8416861 - ldr r2, _0809BF08 @ =sub_809BF98 - adds r0, r5, 0 - bl BuyMenuDisplayMessage -_0809BEFE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809BF04: .4byte gUnknown_8416861 -_0809BF08: .4byte sub_809BF98 - thumb_func_end sub_809BEA4 - - thumb_func_start sub_809BF0C -sub_809BF0C: @ 809BF0C - push {r4-r6,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x26 - bl IncrementGameStat - ldr r6, _0809BF58 @ =gSaveBlock1Ptr - ldr r0, [r6] - movs r5, 0xA4 - lsls r5, 2 - adds r0, r5 - ldr r1, _0809BF5C @ =gShopData - ldr r1, [r1, 0x8] - bl RemoveMoney - movs r0, 0xF8 - bl PlaySE - ldr r0, [r6] - adds r0, r5 - bl GetMoney - adds r1, r0, 0 - movs r0, 0 - movs r2, 0 - bl PrintMoneyAmountInMoneyBox - ldr r1, _0809BF60 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0809BF64 @ =sub_809BF68 - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809BF58: .4byte gSaveBlock1Ptr -_0809BF5C: .4byte gShopData -_0809BF60: .4byte gTasks -_0809BF64: .4byte sub_809BF68 - thumb_func_end sub_809BF0C - - thumb_func_start sub_809BF68 -sub_809BF68: @ 809BF68 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0809BF94 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0809BF82 - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0809BF8E -_0809BF82: - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl sub_809BF98 -_0809BF8E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809BF94: .4byte gMain - thumb_func_end sub_809BF68 - - thumb_func_start sub_809BF98 -sub_809BF98: @ 809BF98 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r5, r1, 3 - ldr r6, _0809BFF8 @ =gTasks+0x8 - adds r4, r5, r6 - movs r0, 0x2 - movs r1, 0 - bl ClearDialogWindowAndFrameToTransparent - ldrb r0, [r4, 0xE] - movs r1, 0x1 - bl sub_809B57C - movs r0, 0 - bl sub_809B10C - movs r0, 0x4 - bl PutWindowTilemap - movs r0, 0x5 - bl PutWindowTilemap - ldr r0, _0809BFFC @ =gShopData - ldrb r1, [r0, 0x16] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x1 - bne _0809BFDC - movs r0, 0x6 - bl PutWindowTilemap -_0809BFDC: - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - bl sub_809B690 - adds r0, r6, 0 - subs r0, 0x8 - adds r0, r5, r0 - ldr r1, _0809C000 @ =sub_809BBC0 - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809BFF8: .4byte gTasks+0x8 -_0809BFFC: .4byte gShopData -_0809C000: .4byte sub_809BBC0 - thumb_func_end sub_809BF98 - - thumb_func_start sub_809C004 -sub_809C004: @ 809C004 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _0809C03C @ =gFieldCallback - ldr r0, _0809C040 @ =sub_809AD74 - str r0, [r1] - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0809C044 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0809C048 @ =sub_809C04C - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809C03C: .4byte gFieldCallback -_0809C040: .4byte sub_809AD74 -_0809C044: .4byte gTasks -_0809C048: .4byte sub_809C04C - thumb_func_end sub_809C004 - - thumb_func_start sub_809C04C -sub_809C04C: @ 809C04C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _0809C088 @ =gTasks+0x8 - adds r2, r0, r1 - ldr r0, _0809C08C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0809C082 - ldrb r0, [r2, 0xE] - movs r1, 0 - movs r2, 0 - bl DestroyListMenuTask - bl sub_809B604 - ldr r0, _0809C090 @ =CB2_ReturnToField - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_0809C082: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809C088: .4byte gTasks+0x8 -_0809C08C: .4byte gPaletteFade -_0809C090: .4byte CB2_ReturnToField - thumb_func_end sub_809C04C - - thumb_func_start nullsub_52 -nullsub_52: @ 809C094 - bx lr - thumb_func_end nullsub_52 - - thumb_func_start nullsub_53 -nullsub_53: @ 809C098 - bx lr - thumb_func_end nullsub_53 - - thumb_func_start sub_809C09C -sub_809C09C: @ 809C09C - push {r4-r6,lr} - lsls r0, 16 - lsrs r3, r0, 16 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r2, 24 - lsrs r5, r2, 24 - ldr r1, _0809C0B8 @ =gUnknown_203996C - ldrb r2, [r1, 0xA] - cmp r2, r5 - bne _0809C0BC - adds r4, r1, 0 - b _0809C0D4 - .align 2, 0 -_0809C0B8: .4byte gUnknown_203996C -_0809C0BC: - ldrb r0, [r1, 0x16] - cmp r0, r5 - bne _0809C0C8 - adds r4, r1, 0 - adds r4, 0xC - b _0809C0D4 -_0809C0C8: - adds r4, r1, 0 - adds r4, 0xC - cmp r2, 0 - bne _0809C0D2 - adds r4, r1, 0 -_0809C0D2: - strb r5, [r4, 0xA] -_0809C0D4: - ldrh r0, [r4, 0x4] - cmp r0, 0 - beq _0809C0DE - movs r0, 0x1 - strb r0, [r4, 0x9] -_0809C0DE: - strh r3, [r4, 0x4] - ldrh r1, [r4, 0x6] - ldr r0, _0809C128 @ =0x000003e6 - cmp r1, r0 - bhi _0809C0F8 - adds r0, r6, r1 - strh r0, [r4, 0x6] - lsls r0, 16 - lsrs r0, 16 - ldr r1, _0809C12C @ =0x000003e7 - cmp r0, r1 - bls _0809C0F8 - strh r1, [r4, 0x6] -_0809C0F8: - ldr r1, [r4] - ldr r0, _0809C130 @ =0x000f423e - cmp r1, r0 - bhi _0809C120 - adds r0, r3, 0 - bl itemid_get_market_price - lsls r0, 16 - lsrs r0, 16 - subs r1, r5, 0x1 - asrs r0, r1 - adds r1, r0, 0 - muls r1, r6 - ldr r0, [r4] - adds r0, r1 - str r0, [r4] - ldr r1, _0809C134 @ =0x000f423f - cmp r0, r1 - bls _0809C120 - str r1, [r4] -_0809C120: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809C128: .4byte 0x000003e6 -_0809C12C: .4byte 0x000003e7 -_0809C130: .4byte 0x000f423e -_0809C134: .4byte 0x000f423f - thumb_func_end sub_809C09C - - thumb_func_start sub_809C138 -sub_809C138: @ 809C138 - push {r4,lr} - ldr r4, _0809C160 @ =gUnknown_203996C - ldrb r0, [r4, 0xA] - cmp r0, 0 - beq _0809C14A - adds r0, 0x24 - adds r1, r4, 0 - bl sub_8113550 -_0809C14A: - ldrb r0, [r4, 0x16] - cmp r0, 0 - beq _0809C15A - adds r0, 0x24 - adds r1, r4, 0 - adds r1, 0xC - bl sub_8113550 -_0809C15A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809C160: .4byte gUnknown_203996C - thumb_func_end sub_809C138 - - thumb_func_start CreatePokemartMenu -CreatePokemartMenu: @ 809C164 - push {r4,lr} - bl sub_809ABD8 - movs r0, 0 - bl sub_809AAB0 - ldr r0, _0809C194 @ =EnableBothScriptContexts - bl sub_809AC04 - bl nullsub_53 - ldr r4, _0809C198 @ =gUnknown_203996C - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x18 - bl memset - ldr r0, _0809C19C @ =gMapHeader - ldrb r0, [r0, 0x14] - strb r0, [r4, 0x8] - strb r0, [r4, 0x14] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809C194: .4byte EnableBothScriptContexts -_0809C198: .4byte gUnknown_203996C -_0809C19C: .4byte gMapHeader - thumb_func_end CreatePokemartMenu - - thumb_func_start CreateDecorationShop1Menu -CreateDecorationShop1Menu: @ 809C1A0 - push {lr} - bl sub_809ABD8 - movs r0, 0x2 - bl sub_809AAB0 - ldr r0, _0809C1B8 @ =EnableBothScriptContexts - bl sub_809AC04 - pop {r0} - bx r0 - .align 2, 0 -_0809C1B8: .4byte EnableBothScriptContexts - thumb_func_end CreateDecorationShop1Menu - - thumb_func_start CreateDecorationShop2Menu -CreateDecorationShop2Menu: @ 809C1BC - push {lr} - bl sub_809ABD8 - movs r0, 0x3 - bl sub_809AAB0 - ldr r0, _0809C1D4 @ =EnableBothScriptContexts - bl sub_809AC04 - pop {r0} - bx r0 - .align 2, 0 -_0809C1D4: .4byte EnableBothScriptContexts - thumb_func_end CreateDecorationShop2Menu - - thumb_func_start sub_809C1D8 -sub_809C1D8: @ 809C1D8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - mov r9, r1 - lsls r0, 24 - lsrs r0, 24 - lsls r2, 16 - lsrs r2, 16 - mov r10, r2 - ldr r2, _0809C26C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldrh r0, [r1, 0x10] - subs r0, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - ldrh r0, [r1, 0x12] - subs r0, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - ldrh r4, [r1, 0xA] - movs r2, 0xC - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _0809C29C - movs r2, 0 - lsls r5, 16 - str r5, [sp, 0xC] - lsls r0, r3, 16 - lsls r1, r4, 16 - asrs r0, 16 - str r0, [sp] - asrs r1, 16 - str r1, [sp, 0x4] - lsls r0, r1, 1 - mov r1, r9 - adds r7, r0, r1 -_0809C22C: - movs r4, 0 - lsls r2, 16 - mov r8, r2 - asrs r0, r2, 16 - ldr r2, [sp] - adds r6, r2, r0 -_0809C238: - ldr r0, [sp, 0xC] - asrs r1, r0, 16 - lsls r4, 16 - asrs r0, r4, 16 - adds r5, r1, r0 - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridGetMetatileIdAt - movs r2, 0 - ldrsh r1, [r7, r2] - lsls r0, 16 - asrs r0, 16 - cmp r1, r0 - bne _0809C280 - ldr r0, [sp, 0x4] - cmp r0, 0x2 - beq _0809C270 - ldrh r0, [r7, 0x2] - mov r2, r10 - orrs r2, r0 - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridSetMetatileIdAt - b _0809C280 - .align 2, 0 -_0809C26C: .4byte gTasks -_0809C270: - mov r1, r9 - ldrh r0, [r1] - mov r2, r10 - orrs r2, r0 - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridSetMetatileIdAt -_0809C280: - movs r2, 0x80 - lsls r2, 9 - adds r0, r4, r2 - lsrs r4, r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _0809C238 - adds r0, r2, 0 - add r0, r8 - lsrs r2, r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _0809C22C - b _0809C324 -_0809C29C: - movs r2, 0 - lsls r5, 16 - str r5, [sp, 0xC] - lsls r0, r3, 16 - lsls r1, r4, 16 - asrs r0, 16 - str r0, [sp, 0x8] - asrs r7, r1, 16 -_0809C2AC: - movs r4, 0 - lsls r2, 16 - mov r8, r2 - asrs r0, r2, 16 - ldr r1, [sp, 0x8] - adds r6, r1, r0 -_0809C2B8: - ldr r2, [sp, 0xC] - asrs r1, r2, 16 - lsls r4, 16 - asrs r0, r4, 16 - adds r5, r1, r0 - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridGetMetatileIdAt - movs r1, 0x2 - subs r1, r7 - lsls r1, 1 - add r1, r9 - movs r2, 0 - ldrsh r1, [r1, r2] - lsls r0, 16 - asrs r0, 16 - cmp r1, r0 - bne _0809C30A - cmp r7, 0x2 - beq _0809C2FA - movs r0, 0x1 - subs r0, r7 - lsls r0, 1 - add r0, r9 - ldrh r0, [r0] - mov r2, r10 - orrs r2, r0 - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridSetMetatileIdAt - b _0809C30A -_0809C2FA: - mov r1, r9 - ldrh r0, [r1, 0x4] - mov r2, r10 - orrs r2, r0 - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridSetMetatileIdAt -_0809C30A: - movs r2, 0x80 - lsls r2, 9 - adds r0, r4, r2 - lsrs r4, r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _0809C2B8 - adds r0, r2, 0 - add r0, r8 - lsrs r2, r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _0809C2AC -_0809C324: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_809C1D8 - - thumb_func_start sub_809C334 -sub_809C334: @ 809C334 - push {r4,r5,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - ldr r1, _0809C35C @ =gTasks+0x8 - adds r4, r0, r1 - movs r0, 0x1 - strh r0, [r4, 0x6] - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x6 - bhi _0809C3CE - lsls r0, 2 - ldr r1, _0809C360 @ =_0809C364 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0809C35C: .4byte gTasks+0x8 -_0809C360: .4byte _0809C364 - .align 2, 0 -_0809C364: - .4byte _0809C380 - .4byte _0809C388 - .4byte _0809C390 - .4byte _0809C398 - .4byte _0809C3A0 - .4byte _0809C3B4 - .4byte _0809C3C4 -_0809C380: - ldr r1, _0809C384 @ =gUnknown_83DF0D4 - b _0809C3B6 - .align 2, 0 -_0809C384: .4byte gUnknown_83DF0D4 -_0809C388: - ldr r1, _0809C38C @ =gUnknown_83DF0DA - b _0809C3B6 - .align 2, 0 -_0809C38C: .4byte gUnknown_83DF0DA -_0809C390: - ldr r1, _0809C394 @ =gUnknown_83DF0E0 - b _0809C3A2 - .align 2, 0 -_0809C394: .4byte gUnknown_83DF0E0 -_0809C398: - ldr r1, _0809C39C @ =gUnknown_83DF0E6 - b _0809C3B6 - .align 2, 0 -_0809C39C: .4byte gUnknown_83DF0E6 -_0809C3A0: - ldr r1, _0809C3B0 @ =gUnknown_83DF0EC -_0809C3A2: - movs r2, 0xC0 - lsls r2, 4 - adds r0, r3, 0 - bl sub_809C1D8 - b _0809C3CE - .align 2, 0 -_0809C3B0: .4byte gUnknown_83DF0EC -_0809C3B4: - ldr r1, _0809C3C0 @ =gUnknown_83DF0F2 -_0809C3B6: - adds r0, r3, 0 - movs r2, 0 - bl sub_809C1D8 - b _0809C3CE - .align 2, 0 -_0809C3C0: .4byte gUnknown_83DF0F2 -_0809C3C4: - ldr r1, _0809C3F8 @ =gUnknown_83DF0F8 - adds r0, r3, 0 - movs r2, 0 - bl sub_809C1D8 -_0809C3CE: - ldrh r0, [r4] - adds r0, 0x1 - movs r1, 0x7 - ands r0, r1 - strh r0, [r4] - adds r5, r0, 0 - cmp r5, 0 - bne _0809C3F2 - bl DrawWholeMapView - movs r1, 0x2 - ldrsh r0, [r4, r1] - adds r0, 0x1 - movs r1, 0x3 - bl __modsi3 - strh r0, [r4, 0x2] - strh r5, [r4, 0x6] -_0809C3F2: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809C3F8: .4byte gUnknown_83DF0F8 - thumb_func_end sub_809C334 - - thumb_func_start sub_809C3FC -sub_809C3FC: @ 809C3FC - push {r4-r7,lr} - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - ldr r6, _0809C440 @ =sub_809C334 - adds r0, r6, 0 - movs r1, 0 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _0809C444 @ =gTasks+0x8 - adds r7, r0, r1 - adds r0, r7, 0 - adds r0, 0x8 - adds r1, r7, 0 - adds r1, 0xA - bl PlayerGetDestCoords - movs r0, 0 - strh r0, [r7] - strh r0, [r7, 0x2] - strh r5, [r7, 0x4] - adds r0, r4, 0 - bl _call_via_r6 - adds r0, r4, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0809C440: .4byte sub_809C334 -_0809C444: .4byte gTasks+0x8 - thumb_func_end sub_809C3FC - - thumb_func_start sub_809C448 -sub_809C448: @ 809C448 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_809C3FC - ldr r1, _0809C45C @ =gUnknown_2039984 - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0809C45C: .4byte gUnknown_2039984 - thumb_func_end sub_809C448 - - thumb_func_start sub_809C460 -sub_809C460: @ 809C460 - push {lr} - ldr r0, _0809C470 @ =gUnknown_2039984 - ldrb r0, [r0] - bl DestroyTask - pop {r0} - bx r0 - .align 2, 0 -_0809C470: .4byte gUnknown_2039984 - thumb_func_end sub_809C460 - - thumb_func_start sub_809C474 -sub_809C474: @ 809C474 - push {lr} - ldr r2, _0809C498 @ =gTasks - ldr r0, _0809C49C @ =gUnknown_2039984 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r1, r0, r2 - movs r2, 0xE - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _0809C4A0 - movs r2, 0xA - ldrsh r0, [r1, r2] - cmp r0, 0x2 - bne _0809C4A0 - movs r0, 0 - b _0809C4A2 - .align 2, 0 -_0809C498: .4byte gTasks -_0809C49C: .4byte gUnknown_2039984 -_0809C4A0: - movs r0, 0x1 -_0809C4A2: - pop {r1} - bx r1 - thumb_func_end sub_809C474 - - thumb_func_start sub_809C4A8 -sub_809C4A8: @ 809C4A8 - push {r4,lr} - ldr r0, _0809C4E0 @ =sub_809C500 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0809C4E4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 - movs r0, 0 - strh r0, [r4, 0x8] - strh r0, [r4, 0xA] - adds r2, 0x8 - adds r1, r2 - adds r0, r1, 0x4 - adds r1, 0x6 - bl PlayerGetDestCoords - ldr r0, _0809C4E8 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0 - bne _0809C4EC - ldrh r0, [r4, 0xC] - adds r0, 0x6 - b _0809C4F0 - .align 2, 0 -_0809C4E0: .4byte sub_809C500 -_0809C4E4: .4byte gTasks -_0809C4E8: .4byte gSpecialVar_0x8004 -_0809C4EC: - ldrh r0, [r4, 0xC] - subs r0, 0x1 -_0809C4F0: - strh r0, [r4, 0xC] - ldrh r0, [r4, 0xE] - subs r0, 0x5 - strh r0, [r4, 0xE] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_809C4A8 - - thumb_func_start sub_809C500 -sub_809C500: @ 809C500 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0809C544 @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0809C588 - ldrh r1, [r4, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0809C550 - movs r2, 0x4 - ldrsh r0, [r4, r2] - movs r2, 0x6 - ldrsh r1, [r4, r2] - ldr r2, _0809C548 @ =0x00000eb5 - bl MapGridSetMetatileIdAt - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - adds r1, 0x2 - ldr r2, _0809C54C @ =0x00000eb7 - bl MapGridSetMetatileIdAt - b _0809C56E - .align 2, 0 -_0809C544: .4byte gTasks+0x8 -_0809C548: .4byte 0x00000eb5 -_0809C54C: .4byte 0x00000eb7 -_0809C550: - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - ldr r2, _0809C5EC @ =0x00000eb6 - bl MapGridSetMetatileIdAt - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - adds r1, 0x2 - ldr r2, _0809C5F0 @ =0x00000eb8 - bl MapGridSetMetatileIdAt -_0809C56E: - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - bl CurrentMapDrawMetatileAt - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - adds r1, 0x2 - bl CurrentMapDrawMetatileAt -_0809C588: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - bne _0809C5E6 - movs r0, 0 - strh r0, [r4] - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xD - bne _0809C5E6 - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - ldr r2, _0809C5F4 @ =0x00000e8a - bl MapGridSetMetatileIdAt - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - adds r1, 0x2 - ldr r2, _0809C5F8 @ =0x00000e96 - bl MapGridSetMetatileIdAt - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - bl CurrentMapDrawMetatileAt - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - adds r1, 0x2 - bl CurrentMapDrawMetatileAt - adds r0, r5, 0 - bl DestroyTask -_0809C5E6: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809C5EC: .4byte 0x00000eb6 -_0809C5F0: .4byte 0x00000eb8 -_0809C5F4: .4byte 0x00000e8a -_0809C5F8: .4byte 0x00000e96 - thumb_func_end sub_809C500 - - thumb_func_start sub_809C5FC -sub_809C5FC: @ 809C5FC - push {r4,lr} - ldr r0, _0809C638 @ =sub_809C640 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0809C63C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 - movs r0, 0 - strh r0, [r4, 0x8] - strh r0, [r4, 0xA] - adds r2, 0x8 - adds r1, r2 - adds r0, r1, 0x4 - adds r1, 0x6 - bl PlayerGetDestCoords - ldrh r0, [r4, 0xC] - adds r0, 0x4 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0xE] - subs r0, 0x5 - strh r0, [r4, 0xE] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809C638: .4byte sub_809C640 -_0809C63C: .4byte gTasks - thumb_func_end sub_809C5FC - - thumb_func_start sub_809C640 -sub_809C640: @ 809C640 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0809C6A8 @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0809C6F2 - movs r2, 0x2 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _0809C6BA - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - ldr r2, _0809C6AC @ =0x00000e85 - bl MapGridSetMetatileIdAt - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - adds r1, 0x1 - ldr r2, _0809C6B0 @ =0x00000eb4 - bl MapGridSetMetatileIdAt - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - bl CurrentMapDrawMetatileAt - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - adds r1, 0x1 - bl CurrentMapDrawMetatileAt - movs r1, 0x2 - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bne _0809C6B4 - adds r0, r5, 0 - bl DestroyTask - b _0809C70A - .align 2, 0 -_0809C6A8: .4byte gTasks+0x8 -_0809C6AC: .4byte 0x00000e85 -_0809C6B0: .4byte 0x00000eb4 -_0809C6B4: - ldrh r0, [r4, 0x4] - subs r0, 0x1 - strh r0, [r4, 0x4] -_0809C6BA: - movs r2, 0x4 - ldrsh r0, [r4, r2] - movs r2, 0x6 - ldrsh r1, [r4, r2] - ldr r2, _0809C710 @ =0x00000eb9 - bl MapGridSetMetatileIdAt - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - adds r1, 0x1 - ldr r2, _0809C714 @ =0x00000eba - bl MapGridSetMetatileIdAt - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - bl CurrentMapDrawMetatileAt - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - adds r1, 0x1 - bl CurrentMapDrawMetatileAt -_0809C6F2: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _0809C70A - movs r0, 0 - strh r0, [r4] - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] -_0809C70A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809C710: .4byte 0x00000eb9 -_0809C714: .4byte 0x00000eba - thumb_func_end sub_809C640 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/shop.s b/data/shop.s deleted file mode 100644 index a675cfae2..000000000 --- a/data/shop.s +++ /dev/null @@ -1,92 +0,0 @@ -#include "constants/maps.h" -#include "constants/species.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnknown_83DF09C:: @ 83DF09C - .4byte gUnknown_8416738, sub_809AC5C - .4byte gUnknown_841673C, sub_809AC98 - .4byte gUnknown_8416741, sub_809ACF8 - -gUnknown_83DF0B4:: @ 83DF0B4 - .4byte sub_809BEA4 - .4byte sub_809BF98 - -gUnknown_83DF0BC:: @ 83DF0BC - .byte 0, 2, 1, 12, 6, 15 - .2byte 0x0008 - @ { - @ .bg = 0, - @ .tilemapLeft = 2, - @ .tilemapTop = 1, - @ .width = 12, - @ .height = 6, - @ .paletteNum = 15, - @ .baseBlock = 0x0008 - @ } - -gUnknown_83DF0C4:: @ 83DF0C4 - .4byte 0x000001f8 - @ { - @ .bg = 0, - @ .charBaseIndex = 2, - @ .mapBaseIndex = 31, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 0, - @ .baseTile = 0x0000 - @ } - .4byte 0x000011e1 - @ { - @ .bg = 1, - @ .charBaseIndex = 0, - @ .mapBaseIndex = 30, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 1, - @ .baseTile = 0x0000 - @ } - .4byte 0x000021d2 - @ { - @ .bg = 2, - @ .charBaseIndex = 0, - @ .mapBaseIndex = 29, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 2, - @ .baseTile = 0x0000 - @ } - .4byte 0x000031c3 - @ { - @ .bg = 3, - @ .charBaseIndex = 0, - @ .mapBaseIndex = 28, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 3, - @ .baseTile = 0x0000 - @ } - -gUnknown_83DF0D4:: @ 83DF0D4 - .2byte 0x0308, 0x030a, 0x02d0 - -gUnknown_83DF0DA:: @ 83DF0DA - .2byte 0x0309, 0x030b, 0x02d1 - -gUnknown_83DF0E0:: @ 83DF0E0 - .2byte 0x0310, 0x0312, 0x02d8 - -gUnknown_83DF0E6:: @ 83DF0E6 - .2byte 0x0311, 0x0313, 0x02d9 - -gUnknown_83DF0EC:: @ 83DF0EC - .2byte 0x02e3, 0x0316, 0x0314 - -gUnknown_83DF0F2:: @ 83DF0F2 - .2byte 0x02e4, 0x0317, 0x0315 - -gUnknown_83DF0F8:: @ 83DF0F8 - .2byte 0x02eb, 0x031e, 0x031c diff --git a/data/strings.s b/data/strings.s index a1892e209..bba9336dc 100644 --- a/data/strings.s +++ b/data/strings.s @@ -475,7 +475,7 @@ gUnknown_8416210:: @ 8416210 gText_ThreeHyphens:: @ 8416213 .string "---$" -gUnknown_8416217:: @ 8416217 +gText_SevenHyphens:: @ 8416217 .string "-------$" gUnknown_841621F:: @ 841621F @@ -720,26 +720,26 @@ gText_TheBerryPouchWillBePutAway:: @ 8416716 .string "The BERRY POUCH will be\n" .string "put away.$" -gUnknown_8416738:: @ 0x8416738 +gText_ShopBuy:: @ 0x8416738 .string "BUY$" -gUnknown_841673C:: @ 0x841673C +gText_ShopSell:: @ 0x841673C .string "SELL$" -gUnknown_8416741:: @ 0x8416741 +gText_ShopQuit:: @ 0x8416741 .string "SEE YA!$" -gUnknown_8416749:: @ 8416749 +gText_InBagVar1:: @ 8416749 .string "IN BAG:{SMALL} {STR_VAR_1}$" -gUnknown_8416757:: @ 8416757 +gText_QuitShopping:: @ 8416757 .string "Quit shopping.$" -gUnknown_8416766:: @ 8416766 +gText_Var1CertainlyHowMany:: @ 8416766 .string "{STR_VAR_1}? Certainly.\n" .string "How many would you like?$" -gUnknown_841678E:: @ 841678E +gText_Var1AndYouWantedVar2:: @ 841678E .string "{STR_VAR_1}, and you want {STR_VAR_2}.\n" .string "That will be ¥{STR_VAR_3}. Okay?$" @@ -751,7 +751,7 @@ gUnknown_84167D0:: @ 0x84167D0 .string "{STR_VAR_1} ですね!\n" .string "{STR_VAR_2}¥ だけど かいますか?$" -gUnknown_84167E7:: @ 84167E7 +gText_HereYouGoThankYou:: @ 84167E7 .string "Here you are!\n" .string "Thank you!$" @@ -763,10 +763,10 @@ gUnknown_8416822:: @ 0x8416822 .string "どうも ありがとう!\n" .string "じたくの パソコンに おくって おくね!$" -gUnknown_8416842:: @ 8416842 +gText_YouDontHaveMoney:: @ 8416842 .string "You don't have enough money.{PAUSE_UNTIL_PRESS}$" -gUnknown_8416861:: @ 8416861 +gText_NoMoreRoomForThis:: @ 8416861 .string "You have no more room for this\n" .string "item.{PAUSE_UNTIL_PRESS}$" @@ -774,7 +774,7 @@ gUnknown_8416888:: @ 0x8416888 .string "{STR_VAR_1}を\n" .string "いれる ばしょが いっぱいです{PAUSE_UNTIL_PRESS}$" -gUnknown_841689E:: @ 841689E +gText_CanIHelpWithAnythingElse:: @ 841689E .string "Is there anything else I can do?$" gUnknown_84168BF:: @ 0x84168BF diff --git a/include/list_menu.h b/include/list_menu.h index df53bb529..54e598d2a 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -30,25 +30,25 @@ struct ListMenu; struct ListMenuTemplate { - const struct ListMenuItem *items; - void (* moveCursorFunc)(s32 itemIndex, bool8 onInit, struct ListMenu *list); - void (* itemPrintFunc)(u8 windowId, s32 itemId, u8 y); - u16 totalItems; - u16 maxShowed; - u8 windowId; - u8 header_X; - u8 item_X; - u8 cursor_X; - u8 upText_Y:4; // x1, x2, x4, x8 = xF - u8 cursorPal:4; // x10, x20, x40, x80 = xF0 - u8 fillValue:4; // x1, x2, x4, x8 = xF - u8 cursorShadowPal:4; // x10, x20, x40, x80 = xF0 - u8 lettersSpacing:3; - u8 itemVerticalPadding:3; - u8 scrollMultiple:2; // x40, x80 = xC0 - u8 fontId:6; // x1, x2, x4, x8, x10, x20 = x3F - u8 cursorKind:2; // x40, x80 -}; + /*0x00*/ const struct ListMenuItem *items; + /*0x04*/ void (* moveCursorFunc)(s32 itemIndex, bool8 onInit, struct ListMenu *list); + /*0x08*/ void (* itemPrintFunc)(u8 windowId, s32 itemId, u8 y); + /*0x0C*/ u16 totalItems; + /*0x0E*/ u16 maxShowed; + /*0x10*/ u8 windowId; + /*0x11*/ u8 header_X; + /*0x12*/ u8 item_X; + /*0x13*/ u8 cursor_X; + /*0x14*/ u8 upText_Y:4; // x1, x2, x4, x8 = xF + u8 cursorPal:4; // x10, x20, x40, x80 = xF0 + /*0x15*/ u8 fillValue:4; // x1, x2, x4, x8 = xF + u8 cursorShadowPal:4; // x10, x20, x40, x80 = xF0 + /*0x16*/ u8 lettersSpacing:3; + u8 itemVerticalPadding:3; + u8 scrollMultiple:2; // x40, x80 = xC0 + /*0x17*/ u8 fontId:6; // x1, x2, x4, x8, x10, x20 = x3F + u8 cursorKind:2; // x40, x80 +}; /* size = 0x18 */ struct ListMenu { diff --git a/include/shop.h b/include/shop.h index 481fd6c76..129839e33 100644 --- a/include/shop.h +++ b/include/shop.h @@ -4,18 +4,43 @@ #include "global.h" #include "menu_helpers.h" +#define MENU_NOTHING_CHOSEN -2 +#define MENU_B_PRESSED -1 + +#define INDEX_CANCEL -2 + +#define NUM_CHARS_PRICE 4 + +// shop view window NPC info enum +enum +{ + EVENT_OBJ_ID, + X_COORD, + Y_COORD, + ANIM_NUM +}; + extern EWRAM_DATA struct ItemSlot gUnknown_02039F80[3]; -void CreatePokemartMenu(const u16 *); +void CreatePokemartMenu(const u16 *itemsForSale); void CreateDecorationShop1Menu(const u16 *); void CreateDecorationShop2Menu(const u16 *); -void sub_809C09C(u16, u16, u8); u8 sub_809B56C(void); +void sub_809C09C(u16 a0, u16 a1, u8 a2); + +// wrong file +void sub_809C1D8(u8 taskId, const u16* a1, u16 a2); +void sub_809C448(u8 a0); +void sub_809C460(void); +bool8 sub_809C474(void); +void sub_809C4A8(void); +void sub_809C5FC(void); + // buy_menu_helper void BuyMenuInitWindows(bool32 isSellingTM); void BuyMenuDrawMoneyBox(void); -void BuyMenuPrint(u8 windowId, u8 font, const u8 *text, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, s8 speed, u8 color); +void BuyMenuPrint(u8 windowId, u8 font, const u8 *text, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 color); void BuyMenuDisplayMessage(u8 taskId, const u8 *text, TaskFunc callback); void BuyMenuQuantityBoxNormalBorder(u8 windowId, bool8 copyToVram); void BuyMenuQuantityBoxThinBorder(u8 windowId, bool8 copyToVram); diff --git a/include/strings.h b/include/strings.h index 7750b271c..29caabae4 100644 --- a/include/strings.h +++ b/include/strings.h @@ -97,6 +97,7 @@ extern const u8 gOtherText_Toss[]; extern const u8 gOtherText_Give[]; extern const u8 gOtherText_Exit[]; extern const u8 gText_ThreeHyphens[]; +extern const u8 gText_SevenHyphens[]; extern const u8 gOtherText_UnkF9_08_Clear_01[]; extern const u8 gText_TimesStrVar1[]; extern const u8 gText_IsSelected[]; @@ -794,4 +795,18 @@ extern const u8 gText_CongratsPkmnEvolved[]; extern const u8 gText_EllipsisQuestionMark[]; extern const u8 gText_PkmnStoppedEvolving[]; +// shop +extern const u8 gText_ShopBuy[]; +extern const u8 gText_ShopSell[]; +extern const u8 gText_ShopQuit[]; +extern const u8 gText_CanIHelpWithAnythingElse[]; +extern const u8 gText_QuitShopping[]; +extern const u8 gText_PokedollarVar1[]; +extern const u8 gText_YouDontHaveMoney[]; +extern const u8 gText_Var1CertainlyHowMany[]; +extern const u8 gText_InBagVar1[]; +extern const u8 gText_Var1AndYouWantedVar2[]; +extern const u8 gText_HereYouGoThankYou[]; +extern const u8 gText_NoMoreRoomForThis[]; + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index 4d2ec3326..acf58b345 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -141,7 +141,6 @@ SECTIONS { src/battle_anim_mon_movement.o(.text); src/item.o(.text); src/shop.o(.text); - asm/shop.o(.text); src/berry.o(.text); src/script_menu.o(.text); asm/naming_screen.o(.text); @@ -443,7 +442,6 @@ SECTIONS { src/battle_anim_mon_movement.o(.rodata); src/item.o(.rodata); src/shop.o(.rodata); - data/shop.o(.rodata); src/berry.o(.rodata); src/script_menu.o(.rodata); data/naming_screen.o(.rodata); diff --git a/src/buy_menu_helpers.c b/src/buy_menu_helpers.c index cf8072977..44de094b5 100644 --- a/src/buy_menu_helpers.c +++ b/src/buy_menu_helpers.c @@ -177,7 +177,7 @@ void BuyMenuDrawMoneyBox(void) PrintMoneyAmountInMoneyBoxWithBorder(0, 0xA, 0xF, GetMoney(&gSaveBlock1Ptr->money)); } -void BuyMenuPrint(u8 windowId, u8 font, const u8 *text, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, s8 speed, u8 color) +void BuyMenuPrint(u8 windowId, u8 font, const u8 *text, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 color) { AddTextPrinterParameterized4(windowId, font, x, y, letterSpacing, lineSpacing, sShopBuyMenuTextColors[color], speed, text); } diff --git a/src/shop.c b/src/shop.c index 3dd9ba102..68e82ea8e 100644 --- a/src/shop.c +++ b/src/shop.c @@ -1,72 +1,294 @@ #include "global.h" +#include "shop.h" #include "menu.h" +#include "data.h" +#include "list_menu.h" #include "new_menu_helpers.h" +#include "party_menu.h" #include "window.h" #include "field_specials.h" +#include "field_weather.h" +#include "field_camera.h" #include "task.h" +#include "text.h" #include "item.h" +#include "item_menu.h" #include "main.h" #include "sound.h" +#include "strings.h" +#include "string_util.h" +#include "overworld.h" +#include "window.h" +#include "palette.h" +#include "field_fadetransition.h" +#include "scanline_effect.h" +#include "item_menu_icons.h" +#include "bg.h" +#include "gpu_regs.h" +#include "malloc.h" +#include "decompress.h" +#include "menu_indicators.h" +#include "field_player_avatar.h" +#include "fieldmap.h" +#include "field_map_obj.h" +#include "money.h" +#include "quest_log.h" +#include "script.h" +#include "event_data.h" +#include "constants/songs.h" +#include "constants/items.h" +#include "constants/game_stat.h" + +#define t0 data[0] +#define tItemCount data[1] +#define tX data[4] +#define tItemId data[5] +#define tListTaskId data[7] + +enum +{ + MART_TYPE_REGULAR = 0, + MART_TYPE_TMHM, + MART_TYPE_DECOR, + MART_TYPE_DECOR2, +}; -// enums // RAM symbols // Function Declarations // Data Definitions - -struct ShopData { +struct ShopData +{ /*0x00*/ void (*callback)(void); /*0x04*/ const u16 *itemList; /*0x08*/ u32 itemPrice; - /*0x0C*/ u16 cursorPos; - /*0x0E*/ u16 _; + /*0x0C*/ u16 selectedRow; + /*0x0E*/ u16 scrollOffset; /*0x10*/ u16 itemCount; /*0x12*/ u16 field12; - /*0x14*/ u16 field14; + /*0x14*/ u16 maxQuantity; /*0x16*/ u16 martType:4; // 0x1 if tm list u16 unk16_4:5; - u16 unk16_9:7; + u16 itemSlot:2; + u16 unk16_11:5; + /*0x18*/ u16 unk18; //INCOMPLETE }; +struct MartHistory +{ + /*0x00*/ u32 unk0; + /*0x04*/ u16 unk4; + /*0x06*/ u16 unk6; + /*0x08*/ u8 unk8; + /*0x09*/ u8 unk9; + /*0x0A*/ u8 unkA; + /*0x0B*/ u8 unkB; + /*0x0C*/ u16 unkC; + /*0x0E*/ u8 unkE[6]; + /*0x14*/ u8 unk14; + /*0x15*/ u8 unk15; + /*0x16*/ u8 unk16; + /*0x17*/ u8 unk17; +}; /* size = 0x18 */ + + EWRAM_DATA struct ShopData gShopData = {0}; -EWRAM_DATA u8 gUnknown_2039950 = 0; +EWRAM_DATA u8 gUnknown_2039950 = 0; //sShopMenuWindowId + +EWRAM_DATA u16 (*gUnknown_2039954)[0x400] = {0}; //gShopTilemapBuffers +EWRAM_DATA u16 (*gUnknown_2039958)[0x400] = {0}; +EWRAM_DATA u16 (*gUnknown_203995C)[0x400] = {0}; +EWRAM_DATA u16 (*gUnknown_2039960)[0x400] = {0}; +/* +EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039954 = 0; //gShopTilemapBuffers +EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039958 = 0; +EWRAM_DATA struct ShopTilemapBuffers *gUnknown_203995C = 0; +EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039960 = 0; +*/ +EWRAM_DATA struct ListMenuItem *gUnknown_2039964 = {0}; +EWRAM_DATA u8 (*gUnknown_2039968)[13] = {0}; //item strings + +EWRAM_DATA s16 gUnknown_20398B4[MAP_OBJECTS_COUNT][4] = {0}; //sViewportMapObjects +EWRAM_DATA struct MartHistory gUnknown_203996C = {0}; + +EWRAM_DATA u8 gUnknown_2039984 = 0; //Function Declarations +static u8 sub_809AAB0(u8 a0); static u8 sub_809AB7C(bool32 a0); +static void sub_809ABD8(const u16 *items); +static void sub_809AC04(MainCallback callback); static void sub_809AC10(u8 taskId); +static void sub_809AC5C(u8 taskId); +static void sub_809AC98(u8 taskId); +static void sub_809ACD4(void); +static void sub_809ACF8(u8 taskId); +static void sub_809AD24(void); +static void sub_809AD40(u8 taskId); +static void sub_809AD74(void); +static void sub_809AD8C(u8 taskId); +static void sub_809ADC0(u8 taskId); //ShowShopMenuAfterExitingBuyOrSellMenu +static void sub_809ADE4(void); +static void sub_809AE00(void); +static void sub_809AE14(void); +static bool8 sub_809AF6C(void); +static void sub_809AFD0(void); //BuyMenuInitBgs +static void sub_809B080(void); +static void sub_809B10C(bool32 a0); +static void sub_809B15C(void); //BuyMenuDrawGraphics(); +static bool8 sub_809B188(void); //BuyMenuBuildListMenuTemplate +static void sub_809B300(struct ListMenuItem *list, u16 index, u8* dst); +static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list); +static void sub_809B408(u8 windowId, s32 itemId, u8 y); +static void sub_809B494(s32 item); +static void sub_809B57C(u8 listTaskId, u8 a1); +static void sub_809B59C(u8 y, u8 a1); +static void sub_809B604(void); +static void sub_809B670(void); +static void sub_809B690(void); +static void sub_809B6FC(void); +static void sub_809B73C(void); +static void sub_809B764(void); +static void sub_809B778(void); +static void sub_809B850(s16 x, s16 y, const u16 *src, u8 metatileLayerType); +static void sub_809B904(u16 *dest, s16 offset1, s16 offset2, const u16 *src); +static void sub_809B92C(void); +static void sub_809BA40(void); +static void sub_809BAFC(void); +static void sub_809BB44(u8 taskId); +static void sub_809BBC0(u8 taskId); +static void sub_809BCA0(u8 taskId); +static void sub_809BD8C(u8 taskId); +static void sub_809BE90(u8 taskId); +static void sub_809BEA4(u8 taskId); +static void sub_809BF0C(u8 taskId); +static void sub_809BF68(u8 taskId); +static void sub_809BF98(u8 taskId); +static void sub_809C004(u8 taskId); +static void sub_809C04C(u8 taskId); +static void nullsub_52(u8 taskId); +static void nullsub_53(void); +static void sub_809C138(void); -// external defines -extern const struct WindowTemplate gUnknown_83DF0BC[]; //sShopMenuWindowTemplates -extern const struct MenuAction gUnknown_83DF09C[]; //sShopMenuActions_BuySellQuit +// new file? +static void sub_809C334(u8 taskId); +static void sub_809C500(u8 taskId); +static void sub_809C640(u8 taskId); -extern void sub_809AC5C(u8 taskId); -extern void sub_809AC98(u8 taskId); -extern void sub_809ACF8(u8 taskId); +// external defines +extern u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y); +extern u16 BagGetQuantityByItemId(u16 item); //Data Definitions -static const struct MenuAction sShopMenuActions_BuySellQuit[] = -{ - {gUnknown_8416738, {.void_u8 = sub_809AC5C}}, - {gUnknown_841673C, {.void_u8 = sub_809AC98}}, - {gUnknown_8416741, {.void_u8 = sub_809ACF8}} - //{ gText_ShopBuy, {.void_u8=Task_HandleShopMenuBuy} }, - //{ gText_ShopSell, {.void_u8=Task_HandleShopMenuSell} }, - //{ gText_ShopQuit, {.void_u8=Task_HandleShopMenuQuit} } +/* +extern const struct MenuAction gUnknown_83DF09C[]; +extern const struct YesNoFuncTable gUnknown_83DF0B4[]; +extern const struct WindowTemplate gUnknown_83DF0BC[]; +extern const struct BgTemplate gUnknown_83DF0C4[]; +extern const u16 gUnknown_83DF0D4[]; +extern const u16 gUnknown_83DF0DA[]; +extern const u16 gUnknown_83DF0E0[]; +extern const u16 gUnknown_83DF0E6[]; +extern const u16 gUnknown_83DF0EC[]; +extern const u16 gUnknown_83DF0F2[]; +extern const u16 gUnknown_83DF0F8[]; +*/ + +//graphics +extern const u32 gUnknown_8E85DC8[]; //gBuyMenuFrame_Gfx[]; +extern const u32 gUnknown_8E85EFC[]; //gBuyMenuFrame_Tilemap +extern const u32 gUnknown_8E86038[]; //gBuyMenuFrame_TmHmTilemap +extern const u32 gUnknown_8E86170[]; //gBuyMenuFrame_Pal + + +static const struct MenuAction gUnknown_83DF09C[] = // sShopMenuActions_BuySellQuit +{ + {gText_ShopBuy, {.void_u8 = sub_809AC5C}}, + {gText_ShopSell, {.void_u8 = sub_809AC98}}, + {gText_ShopQuit, {.void_u8 = sub_809ACF8}} +}; + +static const struct YesNoFuncTable gUnknown_83DF0B4[] = //sShopMenuActions_BuyQuit +{ + sub_809BEA4, //Task_HandleShopMenuBuy, + sub_809BF98 //Task_HandleShopMenuQuit +}; + +static const struct WindowTemplate gUnknown_83DF0BC[] = //sShopMenuWindowTemplates +{ + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 1, + .width = 12, + .height = 6, + .paletteNum = 15, + .baseBlock = 8 + } +}; + +static const struct BgTemplate gUnknown_83DF0C4[] = //sShopBuyMenuBgTemplates +{ + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 28, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + } }; +static const u16 gUnknown_83DF0D4[] = {0x0308, 0x030a, 0x02d0}; +static const u16 gUnknown_83DF0DA[] = {0x0309, 0x030b, 0x02d1}; +static const u16 gUnknown_83DF0E0[] = {0x0310, 0x0312, 0x02d8}; +static const u16 gUnknown_83DF0E6[] = {0x0311, 0x0313, 0x02d9}; +static const u16 gUnknown_83DF0EC[] = {0x02e3, 0x0316, 0x0314}; +static const u16 gUnknown_83DF0F2[] = {0x02e4, 0x0317, 0x0315}; +static const u16 gUnknown_83DF0F8[] = {0x02eb, 0x031e, 0x031c}; + // Functions -u8 sub_809AAB0(u8 a0) +// CreateShopMenu +static u8 sub_809AAB0(u8 a0) { gShopData.martType = sub_809AB7C(a0) & 0xF; - gShopData.cursorPos = 0; + gShopData.selectedRow = 0; if (!(ContextNpcGetTextColor())) gShopData.unk16_4 = 4; else gShopData.unk16_4 = 5; - gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShop + gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShopMenuWindowTemplates SetStdWindowBorderStyle(gUnknown_2039950, 0); PrintTextArray(gUnknown_2039950, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); Menu_InitCursor(gUnknown_2039950, 2, 0, 2, 16, 3, 0); @@ -106,7 +328,7 @@ static u8 sub_809AB7C(u32 a0) } //SetShopItemsForSale -void sub_809ABD8(const u16 *items) //I really don't know what GameFreak was thinking here.. +static void sub_809ABD8(const u16 *items) //I really don't know what GameFreak was thinking here.. { struct ShopData *mart; //u16 i; @@ -127,7 +349,7 @@ void sub_809ABD8(const u16 *items) //I really don't know what GameFreak was thin } //SetShopMenuCallback -void sub_809AC04(MainCallback callback) +static void sub_809AC04(MainCallback callback) { gShopData.callback = callback; } @@ -135,16 +357,1715 @@ void sub_809AC04(MainCallback callback) //Task_ShopMenu static void sub_809AC10(u8 taskId) { - s8 a0 = Menu_ProcessInputNoWrapAround(); - if (a0 == -2) - return; + s8 input = Menu_ProcessInputNoWrapAround(); - if (a0 == -1) + switch (input) { - PlaySE(5); + case MENU_NOTHING_CHOSEN: + break; + case MENU_B_PRESSED: + PlaySE(SE_SELECT); sub_809ACF8(taskId); + break; + default: + gUnknown_83DF09C[Menu_GetCursorPos()].func.void_u8(taskId); + break; + } +} + +//Task_HandleShopMenuBuy +static void sub_809AC5C(u8 taskId) +{ + SetWordTaskArg(taskId, 0xE, (u32)sub_809AE14); + fade_screen(1, 0); + gTasks[taskId].func = sub_809AD40; +} + +//Task_HandleShopMenuSell +static void sub_809AC98(u8 taskId) +{ + SetWordTaskArg(taskId, 0xE, (u32)sub_809ACD4); + fade_screen(1, 0); + gTasks[taskId].func = sub_809AD40; +} + +//CB2_GoToSellMenu +static void sub_809ACD4(void) +{ + sub_8107DB4(2, POCKET_POKE_BALLS, CB2_ReturnToField); + gFieldCallback = sub_809AD74; +} + +//Task_HandleShopMenuQuit +static void sub_809ACF8(u8 taskId) +{ + sub_809AD24(); + sub_809C138(); + DestroyTask(taskId); + if (gShopData.callback != 0) + gShopData.callback(); +} + +static void sub_809AD24(void) +{ + ClearStdWindowAndFrameToTransparent(gUnknown_2039950, 2); + RemoveWindow(gUnknown_2039950); +} + +//Task_GoToBuyOrSellMenu +static void sub_809AD40(u8 taskId) +{ + if (gPaletteFade.active) return; + SetMainCallback2((void *)GetWordTaskArg(taskId, 0xE)); + FreeAllWindowBuffers(); + DestroyTask(taskId); +} + +//MapPostLoadHook_ReturnToShopMenu +static void sub_809AD74(void) +{ + sub_807DC00(); + CreateTask(sub_809AD8C, 8); +} + +//Task_ReturnToShopMenu +static void sub_809AD8C(u8 taskId) +{ + if (field_weather_is_fade_finished() != TRUE) + return; + DisplayItemMessageOnField(taskId, sub_809B56C(), gText_CanIHelpWithAnythingElse, sub_809ADC0); +} + +//ShowShopMenuAfterExitingBuyOrSellMenu +static void sub_809ADC0(u8 taskId) +{ + sub_809AAB0(gShopData.martType); + DestroyTask(taskId); +} + +//CB2_BuyMenu +static void sub_809ADE4(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + DoScheduledBgTilemapCopiesToVram(); +} + +//VBlankCB_BuyMenu +static void sub_809AE00(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +//CB2_InitBuyMenu +static void sub_809AE14(void) +{ + u8 taskId; + switch (gMain.state) + { + case 0: + SetVBlankHBlankCallbacksToNull(); + CpuFastFill(0, (void *)OAM, 0x400); + ScanlineEffect_Stop(); + ResetTempTileDataBuffers(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + ClearScheduledBgCopiesToVram(); + ResetItemMenuIconState(); + if ((!(sub_809AF6C())) || (!(sub_809B188()))) + return; + sub_809AFD0(); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 0x20, 0x20); + FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 0x20, 0x20); + FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20); + BuyMenuInitWindows(gShopData.martType); + sub_809B080(); + gMain.state++; + break; + case 1: + if (FreeTempTileDataBuffersIfPossible()) + return; + gMain.state++; + break; + default: + gShopData.selectedRow = 0; + gShopData.scrollOffset = 0; + sub_809B15C(); //BuyMenuDrawGraphics(); + sub_809B690(); //BuyMenuAddScrollIndicatorArrows(); + taskId = CreateTask(sub_809BBC0, 8); + gTasks[taskId].tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + SetVBlankCallback(sub_809AE00); + SetMainCallback2(sub_809ADE4); + break; } - //gUnknown_83DF09C.func.void_u8(Menu_GetCursorPos()); } +//InitShopData +static bool8 sub_809AF6C(void) +{ + gUnknown_2039954 = Alloc(sizeof(*gUnknown_2039954)); + if (gUnknown_2039954 == 0) + goto CANCEL; + gUnknown_2039958 = Alloc(sizeof(*gUnknown_2039958)); + if (gUnknown_2039958 == 0) + goto CANCEL; + gUnknown_203995C = Alloc(sizeof(*gUnknown_203995C)); + if (gUnknown_203995C == 0) + goto CANCEL; + gUnknown_2039960 = Alloc(sizeof(*gUnknown_2039960)); + if (gUnknown_2039960 == 0) + goto CANCEL; + return TRUE; + + CANCEL: + sub_809B604(); + sub_809B670(); + return FALSE; +} + +#ifdef NONMATCHING +//BuyMenuInitBgs +// this matches but adjusts offsets const for some reason... +static void sub_809AFD0(void) +{ + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_83DF0C4, 4); //NELEMS(gUnknown_83DF0C4)); + SetBgTilemapBuffer(1, gUnknown_2039958); + SetBgTilemapBuffer(2, gUnknown_2039960); + SetBgTilemapBuffer(3, gUnknown_203995C); + SetGpuReg(0x10, 0); + SetGpuReg(0x12, 0); + SetGpuReg(0x14, 0); + SetGpuReg(0x16, 0); + SetGpuReg(0x18, 0); + SetGpuReg(0x1A, 0); + SetGpuReg(0x1C, 0); + SetGpuReg(0x1E, 0); + SetGpuReg(0x50, 0); + SetGpuReg(0, 0x1040); + ShowBg(0); + ShowBg(1); + ShowBg(2); +} +#else +NAKED +static void sub_809AFD0(void) +{ + asm_unified("\tpush {lr}\n" + "\tmovs r0, 0\n" + "\tbl ResetBgsAndClearDma3BusyFlags\n" + "\tldr r1, _0809B070 @ =gUnknown_83DF0C4\n" + "\tmovs r0, 0\n" + "\tmovs r2, 0x4\n" + "\tbl InitBgsFromTemplates\n" + "\tldr r0, _0809B074 @ =gUnknown_2039958\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tbl SetBgTilemapBuffer\n" + "\tldr r0, _0809B078 @ =gUnknown_2039960\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x2\n" + "\tbl SetBgTilemapBuffer\n" + "\tldr r0, _0809B07C @ =gUnknown_203995C\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x3\n" + "\tbl SetBgTilemapBuffer\n" + "\tmovs r0, 0x10\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x12\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x14\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x16\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x18\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x1A\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x1C\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x1E\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x50\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r1, 0x82\n" + "\tlsls r1, 5\n" + "\tmovs r0, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x1\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x2\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x3\n" + "\tbl ShowBg\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0809B070: .4byte gUnknown_83DF0C4\n" + "_0809B074: .4byte gUnknown_2039958\n" + "_0809B078: .4byte gUnknown_2039960\n" + "_0809B07C: .4byte gUnknown_203995C\n"); +} +#endif + +//BuyMenuDecompressBgGraphics +static void sub_809B080(void) +{ + void* pal; + DecompressAndCopyTileDataToVram(1, gUnknown_8E85DC8, 0x480, 0x3DC, 0); + if ((gShopData.martType) != MART_TYPE_TMHM) + LZDecompressWram(gUnknown_8E85EFC, gUnknown_2039954); //gBuyMenuFrame_Tilemap + else + LZDecompressWram(gUnknown_8E86038, gUnknown_2039954); //gBuyMenuFrame_TmHmTilemap + pal = Alloc(0x40); + LZDecompressWram(gUnknown_8E86170, pal); + LoadPalette(pal, 0xB0, 0x20); + LoadPalette(pal + 0x20, 0x60, 0x20); + Free(pal); +} + +static void sub_809B10C(bool32 a0) +{ + u8 v; + if (a0 == FALSE) + v = 0xB; + else + v = 6; + if ((gShopData.martType) != MART_TYPE_TMHM) + SetBgRectPal(1, 0, 0xE, 0x1E, 6, v); + else + SetBgRectPal(1, 0, 0xC, 0x1E, 8, v); + ScheduleBgCopyTilemapToVram(1); +} + +//BuyMenuDrawGraphics +static void sub_809B15C(void) +{ + sub_809B764(); + sub_809BAFC(); + BuyMenuDrawMoneyBox(); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(1); + ScheduleBgCopyTilemapToVram(2); + ScheduleBgCopyTilemapToVram(3); +} + +//BuyMenuBuildListMenuTemplate +static bool8 sub_809B188(void) +{ + u16 i; + u16 v; + struct ListMenuItem **list = &gUnknown_2039964; + struct ShopData *mart = &gShopData; + *list = Alloc((gShopData.itemCount + 1) * sizeof(*gUnknown_2039964)); + if (gUnknown_2039964 == 0) + goto FREE_MEMORY; + + gUnknown_2039968 = Alloc((gShopData.itemCount + 1) * sizeof(*gUnknown_2039968)); + if (gUnknown_2039968 == 0) + { + FREE_MEMORY: + sub_809B604(); + sub_809B670(); + return FALSE; + } + + i = 0; + if (i >= mart->itemCount) + goto ADD_CANCEL; + + for (i = 0; i < mart->itemCount; i++) + { + sub_809B300(&gUnknown_2039964[i], mart->itemList[i], gUnknown_2039968[i]); //PokeMartWriteNameAndIdAt(u16 a0, u16 a1, u8* a2) + } + + ADD_CANCEL: + StringCopy(gUnknown_2039968[i], gFameCheckerText_Cancel); + gUnknown_2039964[i].label = gUnknown_2039968[i]; + gUnknown_2039964[i].index = -2; + gMultiuseListMenuTemplate.items = gUnknown_2039964; + gMultiuseListMenuTemplate.totalItems = gShopData.itemCount + 1; + gMultiuseListMenuTemplate.windowId = 4; + gMultiuseListMenuTemplate.header_X = 0; + gMultiuseListMenuTemplate.item_X = 9; + gMultiuseListMenuTemplate.cursor_X = 1; + gMultiuseListMenuTemplate.lettersSpacing = 0; + gMultiuseListMenuTemplate.itemVerticalPadding = 2; + gMultiuseListMenuTemplate.upText_Y = 2; + gMultiuseListMenuTemplate.fontId = 2; + gMultiuseListMenuTemplate.fillValue = 0; + gMultiuseListMenuTemplate.cursorPal = GetFontAttribute(2, 5); + gMultiuseListMenuTemplate.cursorShadowPal = GetFontAttribute(2, 7); + gMultiuseListMenuTemplate.moveCursorFunc = sub_809B320; + gMultiuseListMenuTemplate.itemPrintFunc = sub_809B408; + gMultiuseListMenuTemplate.scrollMultiple = 0; + gMultiuseListMenuTemplate.cursorKind = 0; + + if (gShopData.martType == MART_TYPE_TMHM) + v = 5; + else + v = 6; + + if ((gShopData.itemCount + 1) > v) + gMultiuseListMenuTemplate.maxShowed = v; + else + gMultiuseListMenuTemplate.maxShowed = gShopData.itemCount + 1; + + gShopData.field12 = gMultiuseListMenuTemplate.maxShowed; + return TRUE; +} + +//PokeMartWriteNameAndIdAt +static void sub_809B300(struct ListMenuItem *list, u16 index, u8* dst) +{ + CopyItemName(index, dst); + list->label = dst; + list->index = index; +} + +//BuyMenuPrintItemDescriptionAndShowItemIcon +static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list) +{ + const u8 *description; + + if (onInit != TRUE) + PlaySE(SE_SELECT); + + if (item != INDEX_CANCEL) + description = ItemId_GetDescription(item); + else + description = gText_QuitShopping; + + FillWindowPixelBuffer(5, PIXEL_FILL(0)); + if (gShopData.martType != 1) + { + DestroyItemMenuIcon(gShopData.itemSlot ^ 1); + if (item != INDEX_CANCEL) + CreateItemMenuIcon(item, gShopData.itemSlot); + else + CreateItemMenuIcon(ITEM_N_A, gShopData.itemSlot); + gShopData.itemSlot ^= 1; + BuyMenuPrint(5, 2, description, 0, 3, 2, 1, 0, 0); + } + else //TM Mart + { + FillWindowPixelBuffer(6, PIXEL_FILL(0)); + sub_809B494(item); + BuyMenuPrint(5, 2, description, 2, 3, 1, 0, 0, 0); + } +} + +//BuyMenuPrintPriceInList +#ifdef NONMATCHING //this function was written very strangely.. +static void sub_809B408(u8 windowId, s32 item, u8 y) +{ + u32 len; + u8* loc; + + if (item != INDEX_CANCEL) + { + ConvertIntToDecimalStringN(gStringVar1, itemid_get_market_price(item), 0, NUM_CHARS_PRICE); + + //len = StringLength(gStringVar1); + len = 4 - StringLength(gStringVar1); + //len = NUM_CHARS_PRICE - len; + loc = gStringVar4; + + while (len != 0) + { + loc[4-len] = 0; + *loc++; + len--; + } + StringExpandPlaceholders(loc, gText_PokedollarVar1); + BuyMenuPrint(windowId, 1, gStringVar4, 0x69, y, 0, 0, TEXT_SPEED_FF, 1); + } +} +#else +NAKED +static void sub_809B408(u8 windowId, s32 item, u8 y) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tsub sp, 0x14\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tlsls r2, 24\n" + "\tlsrs r5, r2, 24\n" + "\tmovs r0, 0x2\n" + "\tnegs r0, r0\n" + "\tcmp r1, r0\n" + "\tbeq _0809B480\n" + "\tldr r4, _0809B488 @ =gStringVar1\n" + "\tlsls r0, r1, 16\n" + "\tlsrs r0, 16\n" + "\tbl itemid_get_market_price\n" + "\tadds r1, r0, 0\n" + "\tlsls r1, 16\n" + "\tlsrs r1, 16\n" + "\tadds r0, r4, 0\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x4\n" + "\tbl ConvertIntToDecimalStringN\n" + "\tadds r0, r4, 0\n" + "\tbl StringLength\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmovs r1, 0x4\n" + "\tsubs r1, r0\n" + "\tldr r2, _0809B48C @ =gStringVar4\n" + "\tadds r0, r1, 0\n" + "\tsubs r1, 0x1\n" + "\tcmp r0, 0\n" + "\tbeq _0809B45C\n" + "\tmovs r3, 0\n" + "_0809B450:\n" + "\tstrb r3, [r2]\n" + "\tadds r2, 0x1\n" + "\tadds r0, r1, 0\n" + "\tsubs r1, 0x1\n" + "\tcmp r0, 0\n" + "\tbne _0809B450\n" + "_0809B45C:\n" + "\tldr r1, _0809B490 @ =gText_PokedollarVar1\n" + "\tadds r0, r2, 0\n" + "\tbl StringExpandPlaceholders\n" + "\tldr r2, _0809B48C @ =gStringVar4\n" + "\tstr r5, [sp]\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp, 0x4]\n" + "\tstr r0, [sp, 0x8]\n" + "\tmovs r0, 0xFF\n" + "\tstr r0, [sp, 0xC]\n" + "\tmovs r0, 0x1\n" + "\tstr r0, [sp, 0x10]\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0x69\n" + "\tbl BuyMenuPrint\n" + "_0809B480:\n" + "\tadd sp, 0x14\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t_0809B488: .4byte gStringVar1\n" + "\t_0809B48C: .4byte gStringVar4\n" + "\t_0809B490: .4byte gText_PokedollarVar1\n"); +} +#endif + + +/*=================================== +MATCHED/TESTED UP UNTIL HERE +===================================*/ + +//LoadTmHmNameInMart +static void sub_809B494(s32 item) +{ + if (item != INDEX_CANCEL) + { + ConvertIntToDecimalStringN(gStringVar1, item - ITEM_DEVON_SCOPE, 2, 2); + StringCopy(gStringVar4, gOtherText_UnkF9_08_Clear_01); + StringAppend(gStringVar4, gStringVar1); + BuyMenuPrint(6, 0, gStringVar4, 0, 0, 0, 0, TEXT_SPEED_FF, 1); + StringCopy(gStringVar4, gMoveNames[ItemIdToBattleMoveId(item)]); + BuyMenuPrint(6, 2, gStringVar4, 0, 0x10, 0, 0, 0, 1); + } + else + { + BuyMenuPrint(6, 0, gText_ThreeHyphens, 0, 0, 0, 0, TEXT_SPEED_FF, 1); + BuyMenuPrint(6, 2, gText_SevenHyphens, 0, 0x10, 0, 0, 0, 1); + } +} + +//GetMartUnk16_4 +u8 sub_809B56C(void) +{ + return gShopData.unk16_4; +} + +//BuyMenuPrintCursor +static void sub_809B57C(u8 listTaskId, u8 a1) +{ + sub_809B59C(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), a1); +} + +static void sub_809B59C(u8 y, u8 a1) +{ + if (a1 == 0xFF) + { + FillWindowPixelRect(4, 0, 1, y, GetFontAttribute(2, FONTATTR_MAX_LETTER_WIDTH), GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); + CopyWindowToVram(4, 2); + } + else + { + BuyMenuPrint(4, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, a1); + } +} + +//BuyMenuFreeMemory +static void sub_809B604(void) +{ + if (gUnknown_2039954 != 0) + Free(gUnknown_2039954); + + if (gUnknown_2039958 != 0) + Free(gUnknown_2039958); + + if (gUnknown_203995C != 0) + Free(gUnknown_203995C); + + if (gUnknown_2039960 != 0) + Free(gUnknown_2039960); + + if (gUnknown_2039964 != 0) + Free(gUnknown_2039964); + + if (gUnknown_2039968 != 0) + Free(gUnknown_2039968); + + FreeAllWindowBuffers(); +} + +//SetShopExitCallback +static void sub_809B670(void) +{ + gFieldCallback = sub_809AD74; + SetMainCallback2(CB2_ReturnToField); +} + + +//BuyMenuAddScrollIndicatorArrows +static void sub_809B690(void) +{ + if (gShopData.martType != MART_TYPE_TMHM) + { + gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 104, + (gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset); + } + else + { + gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 88, + (gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset); + } +} + +//BuyQuantityAddScrollIndicatorArrows +static void sub_809B6FC(void) +{ + gShopData.unk18 = 1; + gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0x98, 0x48, 0x68, 2, 0x6E, 0x6E, &gShopData.unk18); +} + +//BuyMenuRemoveScrollIndicatorArrows +static void sub_809B73C(void) +{ + if ((gShopData.unk16_11) == 0x1F) + return; + + RemoveScrollIndicatorArrowPair(gShopData.unk16_11); + gShopData.unk16_11 = 0x1F; +} + +static void sub_809B764(void) +{ + sub_809B92C(); + sub_809BA40(); + sub_809B778(); +} + +//BuyMenuDrawMapBg +static void sub_809B778(void) +{ + s16 i; + s16 j; + s16 x; + s16 y; + const struct MapData *mapData; + u16 metatile; + u8 metatileLayerType; + + mapData = gMapHeader.mapData; + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + x -= 2; + y -= 3; + + for (j = 0; j < 10; j++) + { + for (i = 0; i < 5; i++) + { + metatile = MapGridGetMetatileIdAt(x + i, y + j); + metatileLayerType = MapGridGetMetatileLayerTypeAt(x + i, y + j); + + if (metatile < NUM_METATILES_IN_PRIMARY) + { + sub_809B850(i, j, (u16*)mapData->primaryTileset->metatiles + metatile * 8, metatileLayerType); + } + else + { + sub_809B850(i, j, (u16*)mapData->secondaryTileset->metatiles + ((metatile - NUM_METATILES_IN_PRIMARY) * 8), metatileLayerType); + } + } + } +} + +//BuyMenuDrawMapMetatile +static void sub_809B850(s16 x, s16 y, const u16 *src, u8 metatileLayerType) +{ + u16 offset1 = x * 2; + u16 offset2 = ((y << 0x16) + 0x400000) >> 0x10; + + switch (metatileLayerType) + { + case 0: + sub_809B904(*gUnknown_2039960, offset1, offset2, src); + sub_809B904(*gUnknown_2039958, offset1, offset2, src + 4); + break; + case 1: + sub_809B904(*gUnknown_203995C, offset1, offset2, src); + sub_809B904(*gUnknown_2039960, offset1, offset2, src + 4); + break; + case 2: + sub_809B904(*gUnknown_203995C, offset1, offset2, src); + sub_809B904(*gUnknown_2039958, offset1, offset2, src + 4); + break; + } +} + +//BuyMenuDrawMapMetatileLayer +static void sub_809B904(u16 *dest, s16 offset1, s16 offset2, const u16 *src) +{ + // This function draws a whole 2x2 metatile. + dest[offset1 + offset2] = src[0]; // top left + dest[offset1 + offset2 + 1] = src[1]; // top right + dest[offset1 + offset2 + 32] = src[2]; // bottom left + dest[offset1 + offset2 + 33] = src[3]; // bottom right +} + + +// BuyMenuCollectEventObjectData(void) +#ifdef NONMATCHING +static void sub_809B92C(void) +{ + s16 facingX; + s16 facingY; + u8 y; + u8 x; + u8 num = 0; + u8 z; + + GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY); + z = PlayerGetZCoord(); + + for (y = 0; y < MAP_OBJECTS_COUNT; y++) + gUnknown_20398B4[y].eventObjId = MAP_OBJECTS_COUNT; + + for (y = 0; y < 5; y++) + { + for (x = 0; x < 7; x++) + { + u8 eventObjId = GetFieldObjectIdByXYZ(facingX - 4 + x, facingY - 2 + y, z); + if (eventObjId != MAP_OBJECTS_COUNT) + { + gUnknown_20398B4[num].eventObjId = eventObjId; + gUnknown_20398B4[num].x = x; + gUnknown_20398B4[num].y = y; + //gUnknown_20398B4[num].layerType = MapGridGetMetatileLayerTypeAt(facingX - 4 + x, facingY - 2 + y); + + switch (gMapObjects[eventObjId].facingDirection) + { + case DIR_SOUTH: + gUnknown_20398B4[num].animNum = 0; + break; + case DIR_NORTH: + gUnknown_20398B4[num].animNum = 1; + break; + case DIR_WEST: + gUnknown_20398B4[num].animNum = 2; + break; + case DIR_EAST: + default: + gUnknown_20398B4[num].animNum = 3; + break; + } + num++; + } + } + } +} +#else +NAKED +static void sub_809B92C(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x8\n" + "\tmovs r0, 0\n" + "\tmov r9, r0\n" + "\tmov r4, sp\n" + "\tadds r4, 0x2\n" + "\tmov r0, sp\n" + "\tadds r1, r4, 0\n" + "\tbl GetXYCoordsOneStepInFrontOfPlayer\n" + "\tbl PlayerGetZCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp, 0x4]\n" + "\tmovs r5, 0\n" + "\tldr r2, _0809B9DC @ =gUnknown_20398B4\n" + "\tmovs r1, 0x10\n" + "_0809B958:\n" + "\tlsls r0, r5, 3\n" + "\tadds r0, r2\n" + "\tstrh r1, [r0]\n" + "\tadds r0, r5, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, 0xF\n" + "\tbls _0809B958\n" + "\tmovs r5, 0\n" + "\tldr r6, _0809B9E0 @ =gUnknown_20398BA\n" + "\tsubs r1, r6, 0x6\n" + "\tmov r8, r1\n" + "_0809B970:\n" + "\tmovs r4, 0\n" + "\tadds r2, r5, 0x1\n" + "\tmov r10, r2\n" + "_0809B976:\n" + "\tmov r1, sp\n" + "\tldr r3, _0809B9E4 @ =0x0000fffd\n" + "\tadds r0, r3, 0\n" + "\tldrh r1, [r1]\n" + "\tadds r0, r1\n" + "\tadds r0, r4\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tldr r2, _0809B9E8 @ =0x0000fffe\n" + "\tadds r1, r2, 0\n" + "\tmov r3, sp\n" + "\tldrh r3, [r3, 0x2]\n" + "\tadds r1, r3\n" + "\tadds r1, r5\n" + "\tlsls r1, 16\n" + "\tlsrs r1, 16\n" + "\tldr r2, [sp, 0x4]\n" + "\tbl GetFieldObjectIdByXYZ\n" + "\tlsls r0, 24\n" + "\tlsrs r3, r0, 24\n" + "\tcmp r3, 0x10\n" + "\tbeq _0809BA1C\n" + "\tmov r0, r9\n" + "\tlsls r2, r0, 3\n" + "\tmov r1, r8\n" + "\tadds r0, r2, r1\n" + "\tmovs r7, 0\n" + "\tstrh r3, [r0]\n" + "\tmov r0, r8\n" + "\tadds r0, 0x2\n" + "\tadds r0, r2, r0\n" + "\tstrh r4, [r0]\n" + "\tldr r1, _0809B9EC @ =gUnknown_20398B8\n" + "\tadds r0, r2, r1\n" + "\tstrh r5, [r0]\n" + "\tldr r1, _0809B9F0 @ =gMapObjects\n" + "\tlsls r0, r3, 3\n" + "\tadds r0, r3\n" + "\tlsls r0, 2\n" + "\tadds r0, r1\n" + "\tldrb r0, [r0, 0x18]\n" + "\tlsls r0, 28\n" + "\tlsrs r0, 28\n" + "\tcmp r0, 0x2\n" + "\tbeq _0809BA00\n" + "\tcmp r0, 0x2\n" + "\tbgt _0809B9F4\n" + "\tcmp r0, 0x1\n" + "\tbeq _0809B9FA\n" + "\tb _0809BA0C\n" + "\t.align 2, 0\n" + "_0809B9DC: .4byte gUnknown_20398B4\n" + "_0809B9E0: .4byte gUnknown_20398BA\n" + "_0809B9E4: .4byte 0x0000fffd\n" + "_0809B9E8: .4byte 0x0000fffe\n" + "_0809B9EC: .4byte gUnknown_20398B8\n" + "_0809B9F0: .4byte gMapObjects\n" + "_0809B9F4:\n" + "\tcmp r0, 0x3\n" + "\tbeq _0809BA06\n" + "\tb _0809BA0C\n" + "_0809B9FA:\n" + "\tadds r0, r2, r6\n" + "\tstrh r7, [r0]\n" + "\tb _0809BA12\n" + "_0809BA00:\n" + "\tadds r1, r2, r6\n" + "\tmovs r0, 0x1\n" + "\tb _0809BA10\n" + "_0809BA06:\n" + "\tadds r1, r2, r6\n" + "\tmovs r0, 0x2\n" + "\tb _0809BA10\n" + "_0809BA0C:\n" + "\tadds r1, r2, r6\n" + "\tmovs r0, 0x3\n" + "_0809BA10:\n" + "\tstrh r0, [r1]\n" + "_0809BA12:\n" + "\tmov r0, r9\n" + "\tadds r0, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r9, r0\n" + "_0809BA1C:\n" + "\tadds r0, r4, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tcmp r4, 0x6\n" + "\tbls _0809B976\n" + "\tmov r2, r10\n" + "\tlsls r0, r2, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, 0x4\n" + "\tbls _0809B970\n" + "\tadd sp, 0x8\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n"); +} +#endif + +//BuyMenuDrawEventObjects +static void sub_809BA40(void) +{ + u8 i; + u8 spriteId; + const struct MapObjectGraphicsInfo *graphicsInfo; + + for (i = 0; i < MAP_OBJECTS_COUNT; i++) + { + if (gUnknown_20398B4[i][EVENT_OBJ_ID] == MAP_OBJECTS_COUNT) + continue; + + graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[gUnknown_20398B4[i][EVENT_OBJ_ID]].graphicsId); + spriteId = AddPseudoEventObject( + gMapObjects[gUnknown_20398B4[i][EVENT_OBJ_ID]].graphicsId, + SpriteCallbackDummy, + (((u16)gUnknown_20398B4[i][X_COORD] << 0x14) + 0xFFF80000) >> 0x10, + (u16)gUnknown_20398B4[i][Y_COORD] * 16 + 48 - graphicsInfo->height / 2, + 2); + StartSpriteAnim(&gSprites[spriteId], gUnknown_20398B4[i][ANIM_NUM]); + } +} + +static void sub_809BAFC(void) +{ + s16 i; + + u16 *dst = *gUnknown_2039958; + u16 *src = *gUnknown_2039954; + + for (i = 0; i < 0x400; i++) + { + if (src[i] == 0) + continue; + dst[i] = src[i] + 0xb3dc; + } +} + +//BuyMenuPrintItemQuantityAndPrice +static void sub_809BB44(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + FillWindowPixelBuffer(3, PIXEL_FILL(1)); + PrintMoneyAmount(3, 0x36, 0xA, gShopData.itemPrice, TEXT_SPEED_FF); + ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, 2); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + BuyMenuPrint(3, 0, gStringVar4, 2, 0xA, 0, 0, 0, 1); +} + +//Task_BuyMenu +static void sub_809BBC0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (!gPaletteFade.active) + { + s32 itemId = ListMenu_ProcessInput(tListTaskId); + ListMenuGetScrollAndRow(tListTaskId, &gShopData.scrollOffset, &gShopData.selectedRow); + switch (itemId) + { + case LIST_NOTHING_CHOSEN: + break; + case LIST_CANCEL: + PlaySE(SE_SELECT); + sub_809C004(taskId); + break; + default: + PlaySE(SE_SELECT); + tItemId = itemId; + ClearWindowTilemap(5); + sub_809B73C(); + sub_809B57C(tListTaskId, 2); + sub_809B10C(1); + gShopData.itemPrice = itemid_get_market_price(itemId); + if (!IsEnoughMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice)) + { + BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, sub_809BF98); + } + else + { + CopyItemName(itemId, gStringVar1); + BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany, sub_809BCA0); + } + } + } +} + +//Task_BuyHowManyDialogueInit +static void sub_809BCA0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + u16 quantityInBag = BagGetQuantityByItemId(tItemId); + u16 maxQuantity; + + BuyMenuQuantityBoxThinBorder(1, 0); + ConvertIntToDecimalStringN(gStringVar1, quantityInBag, STR_CONV_MODE_RIGHT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_InBagVar1); + BuyMenuPrint(1, 2, gStringVar4, 0, 2, 0, 0, 0, 1); + tItemCount = 1; + BuyMenuQuantityBoxNormalBorder(3, 0); + sub_809BB44(taskId); + ScheduleBgCopyTilemapToVram(0); + maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / itemid_get_market_price(tItemId); + if (maxQuantity > 99) + gShopData.maxQuantity = (u8)99; + else + gShopData.maxQuantity = (u8)maxQuantity; + + if (maxQuantity != 1) + sub_809B6FC(); + + gTasks[taskId].func = sub_809BD8C; +} + +//Task_BuyHowManyDialogueHandleInput +static void sub_809BD8C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + + if (AdjustQuantityAccordingToDPadInput(&tItemCount, gShopData.maxQuantity) == TRUE) + { + gShopData.itemPrice = itemid_get_market_price(tItemId) * tItemCount; + sub_809BB44(taskId); + } + else + { + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sub_809B73C(); + ClearStdWindowAndFrameToTransparent(3, 0); + ClearStdWindowAndFrameToTransparent(1, 0); + ClearWindowTilemap(3); + ClearWindowTilemap(1); + PutWindowTilemap(4); + CopyItemName(tItemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar3, gShopData.itemPrice, STR_CONV_MODE_LEFT_ALIGN, 8); + BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, sub_809BE90); + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_809B73C(); + ClearStdWindowAndFrameToTransparent(3, 0); + ClearStdWindowAndFrameToTransparent(1, 0); + ClearWindowTilemap(3); + ClearWindowTilemap(1); + sub_809BF98(taskId); + } + } +} + +//CreateBuyMenuConfirmPurchaseWindow +static void sub_809BE90(u8 taskId) +{ + BuyMenuConfirmPurchase(taskId, gUnknown_83DF0B4); //sShopBuyMenuYesNoWindowTemplates +} + +//BuyMenuTryMakePurchase +static void sub_809BEA4(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + PutWindowTilemap(4); + if (AddBagItem(tItemId, tItemCount) == TRUE) + { + BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, sub_809BF0C); + nullsub_52(taskId); + sub_809C09C(tItemId, tItemCount, 1); + } + else + { + BuyMenuDisplayMessage(taskId, gText_NoMoreRoomForThis, sub_809BF98); + } +} + +//BuyMenuSubtractMoney +static void sub_809BF0C(u8 taskId) +{ + IncrementGameStat(GAME_STAT_SHOPPED); + RemoveMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice); + PlaySE(SE_SHOP); + PrintMoneyAmountInMoneyBox(0, GetMoney(&gSaveBlock1Ptr->money), 0); + gTasks[taskId].func = sub_809BF68; +} + +//Task_ReturnToItemListAfterItemPurchase +static void sub_809BF68(u8 taskId) +{ + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_809BF98(taskId); + } +} + +//BuyMenuReturnToItemList +static void sub_809BF98(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + ClearDialogWindowAndFrameToTransparent(2, 0); + sub_809B57C(tListTaskId, 1); + sub_809B10C(0); + PutWindowTilemap(4); + PutWindowTilemap(5); + if (gShopData.martType == MART_TYPE_TMHM) + PutWindowTilemap(6); + + ScheduleBgCopyTilemapToVram(0); + sub_809B690(); + gTasks[taskId].func = sub_809BBC0; +} + +//ExitBuyMenu +static void sub_809C004(u8 taskId) +{ + gFieldCallback = sub_809AD74; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].func = sub_809C04C; +} + +//Task_ExitBuyMenu +static void sub_809C04C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (!gPaletteFade.active) + { + DestroyListMenuTask(tListTaskId, 0, 0); + sub_809B604(); + SetMainCallback2(CB2_ReturnToField); + DestroyTask(taskId); + } +} + +static void nullsub_52(u8 taskId) +{ +} + +static void nullsub_53(void) +{ +} + +#ifdef NONMATCHING +void sub_809C09C(u16 item, u16 quantity, u8 a2) +{ + struct Purchase *tmp; + + if (gUnknown_203996C.unkA == a2) + { + tmp = &gUnknown_203996C; + } + else + { + if (gUnknown_203996C.unk16 == a2) + { + tmp = &gUnknown_203996C + 12; + } + else + { + tmp = &gUnknown_203996C + 12; + if (gUnknown_203996C.unkA == 0) + { + tmp = &gUnknown_203996C; + gUnknown_203996C.unkA = a2; + } + } + } + if (tmp->unk4 != 0) + { + gUnknown_203996C.unk9 = 1; + } + + gUnknown_203996C.unk4 = item; + if (gUnknown_203996C.unk6 <= 998) + { + gUnknown_203996C.unk6 += item; + if (item > 999) + gUnknown_203996C.unk6 = 999; + } + if (gUnknown_203996C.unk0 < 999998) + { + gUnknown_203996C.unk0 += ((s16)itemid_get_market_price(item) >> (quantity-1))*quantity; + if (gUnknown_203996C.unk0 > 999999) + gUnknown_203996C.unk0 = 999999; + } +} +#else +NAKED +void sub_809C09C(u16 item, u16 quantity, u8 a2) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tlsls r0, 16\n" + "\tlsrs r3, r0, 16\n" + "\tlsls r1, 16\n" + "\tlsrs r6, r1, 16\n" + "\tlsls r2, 24\n" + "\tlsrs r5, r2, 24\n" + "\tldr r1, _0809C0B8 @ =gUnknown_203996C\n" + "\tldrb r2, [r1, 0xA]\n" + "\tcmp r2, r5\n" + "\tbne _0809C0BC\n" + "\tadds r4, r1, 0\n" + "\tb _0809C0D4\n" + "\t.align 2, 0\n" + "_0809C0B8: .4byte gUnknown_203996C\n" + "_0809C0BC:\n" + "\tldrb r0, [r1, 0x16]\n" + "\tcmp r0, r5\n" + "\tbne _0809C0C8\n" + "\tadds r4, r1, 0\n" + "\tadds r4, 0xC\n" + "\tb _0809C0D4\n" + "_0809C0C8:\n" + "\tadds r4, r1, 0\n" + "\tadds r4, 0xC\n" + "\tcmp r2, 0\n" + "\tbne _0809C0D2\n" + "\tadds r4, r1, 0\n" + "_0809C0D2:\n" + "\tstrb r5, [r4, 0xA]\n" + "_0809C0D4:\n" + "\tldrh r0, [r4, 0x4]\n" + "\tcmp r0, 0\n" + "\tbeq _0809C0DE\n" + "\tmovs r0, 0x1\n" + "\tstrb r0, [r4, 0x9]\n" + "_0809C0DE:\n" + "\tstrh r3, [r4, 0x4]\n" + "\tldrh r1, [r4, 0x6]\n" + "\tldr r0, _0809C128 @ =0x000003e6\n" + "\tcmp r1, r0\n" + "\tbhi _0809C0F8\n" + "\tadds r0, r6, r1\n" + "\tstrh r0, [r4, 0x6]\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tldr r1, _0809C12C @ =0x000003e7\n" + "\tcmp r0, r1\n" + "\tbls _0809C0F8\n" + "\tstrh r1, [r4, 0x6]\n" + "_0809C0F8:\n" + "\tldr r1, [r4]\n" + "\tldr r0, _0809C130 @ =0x000f423e\n" + "\tcmp r1, r0\n" + "\tbhi _0809C120\n" + "\tadds r0, r3, 0\n" + "\tbl itemid_get_market_price\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tsubs r1, r5, 0x1\n" + "\tasrs r0, r1\n" + "\tadds r1, r0, 0\n" + "\tmuls r1, r6\n" + "\tldr r0, [r4]\n" + "\tadds r0, r1\n" + "\tstr r0, [r4]\n" + "\tldr r1, _0809C134 @ =0x000f423f\n" + "\tcmp r0, r1\n" + "\tbls _0809C120\n" + "\tstr r1, [r4]\n" + "_0809C120:\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0809C128: .4byte 0x000003e6\n" + "_0809C12C: .4byte 0x000003e7\n" + "_0809C130: .4byte 0x000f423e\n" + "_0809C134: .4byte 0x000f423f\n"); +} +#endif + +//RecordQuestLogItemPurchase +static void sub_809C138(void) +{ + struct MartHistory *history = &gUnknown_203996C; + u16 v; + + v = history->unkA; + if (v != 0) + sub_8113550(v + 0x24, (const u16*)history); + v = history->unk16; + if (v != 0) + { + v += 0x24; + sub_8113550(v, (const u16*)&history->unkC); + } +} + +void CreatePokemartMenu(const u16 *itemsForSale) +{ + sub_809ABD8(itemsForSale); + sub_809AAB0(MART_TYPE_REGULAR); + sub_809AC04(EnableBothScriptContexts); + nullsub_53(); + memset(&gUnknown_203996C, 0, sizeof(struct MartHistory)); + gUnknown_203996C.unk8 = gMapHeader.regionMapSectionId; + gUnknown_203996C.unk14 = gMapHeader.regionMapSectionId; +} + +void CreateDecorationShop1Menu(const u16 *itemsForSale) +{ + sub_809ABD8(itemsForSale); + sub_809AAB0(MART_TYPE_DECOR); + sub_809AC04(EnableBothScriptContexts); +} + +void CreateDecorationShop2Menu(const u16 *itemsForSale) +{ + sub_809ABD8(itemsForSale); + sub_809AAB0(MART_TYPE_DECOR2); + sub_809AC04(EnableBothScriptContexts); +} + + + + +///////////////////////the following functions belong??//////////////////////////// + +#ifdef NONMATCHING +void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) +{ + +} +#else +NAKED +void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x10\n" + "\tmov r9, r1\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tlsls r2, 16\n" + "\tlsrs r2, 16\n" + "\tmov r10, r2\n" + "\tldr r2, _0809C26C @ =gTasks\n" + "\tlsls r1, r0, 2\n" + "\tadds r1, r0\n" + "\tlsls r1, 3\n" + "\tadds r1, r2\n" + "\tldrh r0, [r1, 0x10]\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tldrh r0, [r1, 0x12]\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r3, r0, 16\n" + "\tldrh r4, [r1, 0xA]\n" + "\tmovs r2, 0xC\n" + "\tldrsh r0, [r1, r2]\n" + "\tcmp r0, 0\n" + "\tbne _0809C29C\n" + "\tmovs r2, 0\n" + "\tlsls r5, 16\n" + "\tstr r5, [sp, 0xC]\n" + "\tlsls r0, r3, 16\n" + "\tlsls r1, r4, 16\n" + "\tasrs r0, 16\n" + "\tstr r0, [sp]\n" + "\tasrs r1, 16\n" + "\tstr r1, [sp, 0x4]\n" + "\tlsls r0, r1, 1\n" + "\tmov r1, r9\n" + "\tadds r7, r0, r1\n" + "_0809C22C:\n" + "\tmovs r4, 0\n" + "\tlsls r2, 16\n" + "\tmov r8, r2\n" + "\tasrs r0, r2, 16\n" + "\tldr r2, [sp]\n" + "\tadds r6, r2, r0\n" + "_0809C238:\n" + "\tldr r0, [sp, 0xC]\n" + "\tasrs r1, r0, 16\n" + "\tlsls r4, 16\n" + "\tasrs r0, r4, 16\n" + "\tadds r5, r1, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridGetMetatileIdAt\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r7, r2]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r1, r0\n" + "\tbne _0809C280\n" + "\tldr r0, [sp, 0x4]\n" + "\tcmp r0, 0x2\n" + "\tbeq _0809C270\n" + "\tldrh r0, [r7, 0x2]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tb _0809C280\n" + "\t.align 2, 0\n" + "_0809C26C: .4byte gTasks\n" + "_0809C270:\n" + "\tmov r1, r9\n" + "\tldrh r0, [r1]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "_0809C280:\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 9\n" + "\tadds r0, r4, r2\n" + "\tlsrs r4, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C238\n" + "\tadds r0, r2, 0\n" + "\tadd r0, r8\n" + "\tlsrs r2, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C22C\n" + "\tb _0809C324\n" + "_0809C29C:\n" + "\tmovs r2, 0\n" + "\tlsls r5, 16\n" + "\tstr r5, [sp, 0xC]\n" + "\tlsls r0, r3, 16\n" + "\tlsls r1, r4, 16\n" + "\tasrs r0, 16\n" + "\tstr r0, [sp, 0x8]\n" + "\tasrs r7, r1, 16\n" + "_0809C2AC:\n" + "\tmovs r4, 0\n" + "\tlsls r2, 16\n" + "\tmov r8, r2\n" + "\tasrs r0, r2, 16\n" + "\tldr r1, [sp, 0x8]\n" + "\tadds r6, r1, r0\n" + "_0809C2B8:\n" + "\tldr r2, [sp, 0xC]\n" + "\tasrs r1, r2, 16\n" + "\tlsls r4, 16\n" + "\tasrs r0, r4, 16\n" + "\tadds r5, r1, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridGetMetatileIdAt\n" + "\tmovs r1, 0x2\n" + "\tsubs r1, r7\n" + "\tlsls r1, 1\n" + "\tadd r1, r9\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r1, r2]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r1, r0\n" + "\tbne _0809C30A\n" + "\tcmp r7, 0x2\n" + "\tbeq _0809C2FA\n" + "\tmovs r0, 0x1\n" + "\tsubs r0, r7\n" + "\tlsls r0, 1\n" + "\tadd r0, r9\n" + "\tldrh r0, [r0]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tb _0809C30A\n" + "_0809C2FA:\n" + "\tmov r1, r9\n" + "\tldrh r0, [r1, 0x4]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "_0809C30A:\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 9\n" + "\tadds r0, r4, r2\n" + "\tlsrs r4, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C2B8\n" + "\tadds r0, r2, 0\n" + "\tadd r0, r8\n" + "\tlsrs r2, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C2AC\n" + "_0809C324:\n" + "\tadd sp, 0x10\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n"); +} +#endif + +static void sub_809C334(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 v1; + + data[3] = 1; + switch (data[0]) + { + case 0: + sub_809C1D8(taskId, gUnknown_83DF0D4, 0); + break; + case 1: + sub_809C1D8(taskId, gUnknown_83DF0DA, 0); + break; + case 2: + sub_809C1D8(taskId, gUnknown_83DF0E0, 0xC00); + break; + case 3: + sub_809C1D8(taskId, gUnknown_83DF0E6, 0); + break; + case 4: + sub_809C1D8(taskId, gUnknown_83DF0EC, 0xC00); + break; + case 5: + sub_809C1D8(taskId, gUnknown_83DF0F2, 0); + break; + case 6: + sub_809C1D8(taskId, gUnknown_83DF0F8, 0); + default: + break; + } + data[0] = (data[0] + 1) & 7; + v1 = data[0] & 7; + //ldrh r5, [r4] instead mov r5, r0 somehow + if (v1 == 0) + { + DrawWholeMapView(); + data[1] = (data[1] + 1) % 3; + data[3] = v1; + } +} + +static u8 sub_809C3FC(u16 a0) +{ + u8 taskId; + s16 *data; + + taskId = CreateTask(sub_809C334, 0); + data = gTasks[taskId].data; + PlayerGetDestCoords(&tX, &tItemId); + t0 = 0; + tItemCount = 0; + data[2] = a0; + sub_809C334(taskId); + return taskId; +} + +void sub_809C448(u8 a0) +{ + u8 taskId; + + taskId = sub_809C3FC(a0); + gUnknown_2039984 = taskId; +} + +void sub_809C460(void) +{ + DestroyTask(gUnknown_2039984); +} + +bool8 sub_809C474(void) +{ + if (gTasks[gUnknown_2039984].data[3] == 0) + { + if (gTasks[gUnknown_2039984].data[1] != 2) + return TRUE; + return FALSE; + } + else + { + return TRUE; + } +} + +// special 0x1b5 - creates a tile animaiton one block left two-four up the player +void sub_809C4A8(void) +{ + u8 taskId; + s16 *data; + + taskId = CreateTask(sub_809C500, 0); + + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + + data = gTasks[taskId].data; + PlayerGetDestCoords(&data[2], &data[3]); + if (gSpecialVar_0x8004 == 0) + { + gTasks[taskId].data[2] += 6; + gTasks[taskId].data[3] -= 5; + } + else + { + gTasks[taskId].data[2]--; + gTasks[taskId].data[3] -= 5; + } +} + +static void sub_809C500(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + if ((data[1] & 1) == 0) + { + MapGridSetMetatileIdAt(data[2], data[3], 0xEB5); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB7); + } + else + { + MapGridSetMetatileIdAt(data[2], data[3], 0xEB6); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB8); + } + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 2); + } + + data[0]++; + if (data[0] != 0x10) + return; + data[0] = 0; + + data[0] == 0; + data[1]++; + if (data[1] != 0xD) + return; + + MapGridSetMetatileIdAt(data[2], data[3], 0xE8A); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xE96); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 2); + DestroyTask(taskId); +} + +// special 0x1B7 - creates a tile animation two-six blocks right from the top-left corner of the screen +void sub_809C5FC(void) +{ + u8 taskId; + s16 *data; + + taskId = CreateTask(sub_809C640, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + + data = gTasks[taskId].data; + PlayerGetDestCoords(&data[2], &data[3]); + gTasks[taskId].data[2] += 4; + gTasks[taskId].data[3] -= 5; +} + +static void sub_809C640(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + if (data[1] != 0) + { + MapGridSetMetatileIdAt(data[2], data[3], 0xE85); + MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEB4); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 1); + if (data[1] == 4) + { + DestroyTask(taskId); + return; + } + data[2]--; + } + MapGridSetMetatileIdAt(data[2], data[3], 0xEB9); + MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEBA); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 1); + } + data[0]++; + if (data[0] == 4) + { + data[0] = 0; + data[1]++; + } +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 7a25f1726..f2b58411a 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -315,7 +315,7 @@ gUnknown_20398B8: @ 20398B8 gUnknown_20398BA: @ 20398BA .space 0x7A -gUnknown_2039934: @ 2039934 +gShopData: @ 2039934 .space 0xE gUnknown_2039942: @ 2039942 -- cgit v1.2.3 From 697fabb98aef399d6178051df6a33418b59aa962 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 24 Nov 2019 16:27:26 -0700 Subject: format fix --- src/shop.c | 2304 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 1152 insertions(+), 1152 deletions(-) diff --git a/src/shop.c b/src/shop.c index 68e82ea8e..923c7dc45 100644 --- a/src/shop.c +++ b/src/shop.c @@ -47,10 +47,10 @@ enum { - MART_TYPE_REGULAR = 0, - MART_TYPE_TMHM, - MART_TYPE_DECOR, - MART_TYPE_DECOR2, + MART_TYPE_REGULAR = 0, + MART_TYPE_TMHM, + MART_TYPE_DECOR, + MART_TYPE_DECOR2, }; // RAM symbols @@ -59,57 +59,57 @@ enum struct ShopData { - /*0x00*/ void (*callback)(void); - /*0x04*/ const u16 *itemList; - /*0x08*/ u32 itemPrice; - /*0x0C*/ u16 selectedRow; - /*0x0E*/ u16 scrollOffset; - /*0x10*/ u16 itemCount; - /*0x12*/ u16 field12; - /*0x14*/ u16 maxQuantity; - /*0x16*/ u16 martType:4; // 0x1 if tm list + /*0x00*/ void (*callback)(void); + /*0x04*/ const u16 *itemList; + /*0x08*/ u32 itemPrice; + /*0x0C*/ u16 selectedRow; + /*0x0E*/ u16 scrollOffset; + /*0x10*/ u16 itemCount; + /*0x12*/ u16 field12; + /*0x14*/ u16 maxQuantity; + /*0x16*/ u16 martType:4; // 0x1 if tm list u16 unk16_4:5; u16 itemSlot:2; - u16 unk16_11:5; - /*0x18*/ u16 unk18; - //INCOMPLETE + u16 unk16_11:5; + /*0x18*/ u16 unk18; + //INCOMPLETE }; struct MartHistory { - /*0x00*/ u32 unk0; + /*0x00*/ u32 unk0; /*0x04*/ u16 unk4; /*0x06*/ u16 unk6; /*0x08*/ u8 unk8; /*0x09*/ u8 unk9; - /*0x0A*/ u8 unkA; - /*0x0B*/ u8 unkB; + /*0x0A*/ u8 unkA; + /*0x0B*/ u8 unkB; /*0x0C*/ u16 unkC; /*0x0E*/ u8 unkE[6]; - /*0x14*/ u8 unk14; - /*0x15*/ u8 unk15; - /*0x16*/ u8 unk16; - /*0x17*/ u8 unk17; + /*0x14*/ u8 unk14; + /*0x15*/ u8 unk15; + /*0x16*/ u8 unk16; + /*0x17*/ u8 unk17; }; /* size = 0x18 */ EWRAM_DATA struct ShopData gShopData = {0}; -EWRAM_DATA u8 gUnknown_2039950 = 0; //sShopMenuWindowId +EWRAM_DATA u8 gUnknown_2039950 = 0; //sShopMenuWindowId -EWRAM_DATA u16 (*gUnknown_2039954)[0x400] = {0}; //gShopTilemapBuffers +EWRAM_DATA u16 (*gUnknown_2039954)[0x400] = {0}; //gShopTilemapBuffers EWRAM_DATA u16 (*gUnknown_2039958)[0x400] = {0}; EWRAM_DATA u16 (*gUnknown_203995C)[0x400] = {0}; EWRAM_DATA u16 (*gUnknown_2039960)[0x400] = {0}; /* -EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039954 = 0; //gShopTilemapBuffers +EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039954 = 0; //gShopTilemapBuffers EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039958 = 0; EWRAM_DATA struct ShopTilemapBuffers *gUnknown_203995C = 0; EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039960 = 0; */ EWRAM_DATA struct ListMenuItem *gUnknown_2039964 = {0}; -EWRAM_DATA u8 (*gUnknown_2039968)[13] = {0}; //item strings +EWRAM_DATA u8 (*gUnknown_2039968)[13] = {0}; //item strings -EWRAM_DATA s16 gUnknown_20398B4[MAP_OBJECTS_COUNT][4] = {0}; //sViewportMapObjects +EWRAM_DATA s16 gUnknown_20398B4[MAP_OBJECTS_COUNT][4] = {0}; //sViewportMapObjects EWRAM_DATA struct MartHistory gUnknown_203996C = {0}; EWRAM_DATA u8 gUnknown_2039984 = 0; @@ -128,16 +128,16 @@ static void sub_809AD24(void); static void sub_809AD40(u8 taskId); static void sub_809AD74(void); static void sub_809AD8C(u8 taskId); -static void sub_809ADC0(u8 taskId); //ShowShopMenuAfterExitingBuyOrSellMenu +static void sub_809ADC0(u8 taskId); //ShowShopMenuAfterExitingBuyOrSellMenu static void sub_809ADE4(void); static void sub_809AE00(void); static void sub_809AE14(void); static bool8 sub_809AF6C(void); -static void sub_809AFD0(void); //BuyMenuInitBgs +static void sub_809AFD0(void); //BuyMenuInitBgs static void sub_809B080(void); static void sub_809B10C(bool32 a0); -static void sub_809B15C(void); //BuyMenuDrawGraphics(); -static bool8 sub_809B188(void); //BuyMenuBuildListMenuTemplate +static void sub_809B15C(void); //BuyMenuDrawGraphics(); +static bool8 sub_809B188(void); //BuyMenuBuildListMenuTemplate static void sub_809B300(struct ListMenuItem *list, u16 index, u8* dst); static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list); static void sub_809B408(u8 windowId, s32 itemId, u8 y); @@ -196,75 +196,75 @@ extern const u16 gUnknown_83DF0F8[]; */ //graphics -extern const u32 gUnknown_8E85DC8[]; //gBuyMenuFrame_Gfx[]; -extern const u32 gUnknown_8E85EFC[]; //gBuyMenuFrame_Tilemap -extern const u32 gUnknown_8E86038[]; //gBuyMenuFrame_TmHmTilemap -extern const u32 gUnknown_8E86170[]; //gBuyMenuFrame_Pal +extern const u32 gUnknown_8E85DC8[]; //gBuyMenuFrame_Gfx[]; +extern const u32 gUnknown_8E85EFC[]; //gBuyMenuFrame_Tilemap +extern const u32 gUnknown_8E86038[]; //gBuyMenuFrame_TmHmTilemap +extern const u32 gUnknown_8E86170[]; //gBuyMenuFrame_Pal -static const struct MenuAction gUnknown_83DF09C[] = // sShopMenuActions_BuySellQuit +static const struct MenuAction gUnknown_83DF09C[] = // sShopMenuActions_BuySellQuit { - {gText_ShopBuy, {.void_u8 = sub_809AC5C}}, - {gText_ShopSell, {.void_u8 = sub_809AC98}}, - {gText_ShopQuit, {.void_u8 = sub_809ACF8}} + {gText_ShopBuy, {.void_u8 = sub_809AC5C}}, + {gText_ShopSell, {.void_u8 = sub_809AC98}}, + {gText_ShopQuit, {.void_u8 = sub_809ACF8}} }; -static const struct YesNoFuncTable gUnknown_83DF0B4[] = //sShopMenuActions_BuyQuit +static const struct YesNoFuncTable gUnknown_83DF0B4[] = //sShopMenuActions_BuyQuit { - sub_809BEA4, //Task_HandleShopMenuBuy, - sub_809BF98 //Task_HandleShopMenuQuit + sub_809BEA4, //Task_HandleShopMenuBuy, + sub_809BF98 //Task_HandleShopMenuQuit }; -static const struct WindowTemplate gUnknown_83DF0BC[] = //sShopMenuWindowTemplates +static const struct WindowTemplate gUnknown_83DF0BC[] = //sShopMenuWindowTemplates { { - .bg = 0, - .tilemapLeft = 2, - .tilemapTop = 1, - .width = 12, - .height = 6, - .paletteNum = 15, - .baseBlock = 8 - } -}; - -static const struct BgTemplate gUnknown_83DF0C4[] = //sShopBuyMenuBgTemplates + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 1, + .width = 12, + .height = 6, + .paletteNum = 15, + .baseBlock = 8 + } +}; + +static const struct BgTemplate gUnknown_83DF0C4[] = //sShopBuyMenuBgTemplates { { - .bg = 0, - .charBaseIndex = 2, - .mapBaseIndex = 31, - .screenSize = 0, - .paletteMode = 0, - .priority = 0, - .baseTile = 0 + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 }, { - .bg = 1, - .charBaseIndex = 0, - .mapBaseIndex = 30, - .screenSize = 0, - .paletteMode = 0, - .priority = 1, - .baseTile = 0 + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 }, { - .bg = 2, - .charBaseIndex = 0, - .mapBaseIndex = 29, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0 + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 }, { - .bg = 3, - .charBaseIndex = 0, - .mapBaseIndex = 28, - .screenSize = 0, - .paletteMode = 0, - .priority = 3, - .baseTile = 0 + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 28, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 } }; @@ -281,32 +281,32 @@ static const u16 gUnknown_83DF0F8[] = {0x02eb, 0x031e, 0x031c}; // CreateShopMenu static u8 sub_809AAB0(u8 a0) { - gShopData.martType = sub_809AB7C(a0) & 0xF; - gShopData.selectedRow = 0; - if (!(ContextNpcGetTextColor())) - gShopData.unk16_4 = 4; - else - gShopData.unk16_4 = 5; - - gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShopMenuWindowTemplates - SetStdWindowBorderStyle(gUnknown_2039950, 0); - PrintTextArray(gUnknown_2039950, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); - Menu_InitCursor(gUnknown_2039950, 2, 0, 2, 16, 3, 0); - PutWindowTilemap(gUnknown_2039950); - CopyWindowToVram(gUnknown_2039950, 1); - return CreateTask(sub_809AC10, 8); + gShopData.martType = sub_809AB7C(a0) & 0xF; + gShopData.selectedRow = 0; + if (!(ContextNpcGetTextColor())) + gShopData.unk16_4 = 4; + else + gShopData.unk16_4 = 5; + + gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShopMenuWindowTemplates + SetStdWindowBorderStyle(gUnknown_2039950, 0); + PrintTextArray(gUnknown_2039950, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); + Menu_InitCursor(gUnknown_2039950, 2, 0, 2, 16, 3, 0); + PutWindowTilemap(gUnknown_2039950); + CopyWindowToVram(gUnknown_2039950, 1); + return CreateTask(sub_809AC10, 8); } static u8 sub_809AB7C(u32 a0) -{ - u16 retVal, i; - if (a0) +{ + u16 retVal, i; + if (a0) return (u8)a0; goto MAIN; RETURN_1: return 1; - MAIN: + MAIN: i = 0; if (i >= gShopData.itemCount) goto RETURN_0; @@ -345,192 +345,192 @@ static void sub_809ABD8(const u16 *items) //I really don't know what GameFreak w ++gShopData.itemCount; //i = gShopData.itemCount; //} while (mart->itemList[i]); - } while (mart->itemList[gShopData.itemCount]); + } while (mart->itemList[gShopData.itemCount]); } //SetShopMenuCallback static void sub_809AC04(MainCallback callback) { - gShopData.callback = callback; + gShopData.callback = callback; } //Task_ShopMenu static void sub_809AC10(u8 taskId) { - s8 input = Menu_ProcessInputNoWrapAround(); - - switch (input) - { - case MENU_NOTHING_CHOSEN: - break; - case MENU_B_PRESSED: - PlaySE(SE_SELECT); - sub_809ACF8(taskId); - break; - default: - gUnknown_83DF09C[Menu_GetCursorPos()].func.void_u8(taskId); - break; - } + s8 input = Menu_ProcessInputNoWrapAround(); + + switch (input) + { + case MENU_NOTHING_CHOSEN: + break; + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + sub_809ACF8(taskId); + break; + default: + gUnknown_83DF09C[Menu_GetCursorPos()].func.void_u8(taskId); + break; + } } //Task_HandleShopMenuBuy static void sub_809AC5C(u8 taskId) { - SetWordTaskArg(taskId, 0xE, (u32)sub_809AE14); - fade_screen(1, 0); - gTasks[taskId].func = sub_809AD40; + SetWordTaskArg(taskId, 0xE, (u32)sub_809AE14); + fade_screen(1, 0); + gTasks[taskId].func = sub_809AD40; } //Task_HandleShopMenuSell static void sub_809AC98(u8 taskId) { - SetWordTaskArg(taskId, 0xE, (u32)sub_809ACD4); - fade_screen(1, 0); - gTasks[taskId].func = sub_809AD40; + SetWordTaskArg(taskId, 0xE, (u32)sub_809ACD4); + fade_screen(1, 0); + gTasks[taskId].func = sub_809AD40; } //CB2_GoToSellMenu static void sub_809ACD4(void) { - sub_8107DB4(2, POCKET_POKE_BALLS, CB2_ReturnToField); - gFieldCallback = sub_809AD74; + sub_8107DB4(2, POCKET_POKE_BALLS, CB2_ReturnToField); + gFieldCallback = sub_809AD74; } //Task_HandleShopMenuQuit static void sub_809ACF8(u8 taskId) { - sub_809AD24(); - sub_809C138(); - DestroyTask(taskId); - if (gShopData.callback != 0) - gShopData.callback(); + sub_809AD24(); + sub_809C138(); + DestroyTask(taskId); + if (gShopData.callback != 0) + gShopData.callback(); } static void sub_809AD24(void) { - ClearStdWindowAndFrameToTransparent(gUnknown_2039950, 2); - RemoveWindow(gUnknown_2039950); + ClearStdWindowAndFrameToTransparent(gUnknown_2039950, 2); + RemoveWindow(gUnknown_2039950); } //Task_GoToBuyOrSellMenu static void sub_809AD40(u8 taskId) { - if (gPaletteFade.active) - return; - SetMainCallback2((void *)GetWordTaskArg(taskId, 0xE)); - FreeAllWindowBuffers(); - DestroyTask(taskId); + if (gPaletteFade.active) + return; + SetMainCallback2((void *)GetWordTaskArg(taskId, 0xE)); + FreeAllWindowBuffers(); + DestroyTask(taskId); } //MapPostLoadHook_ReturnToShopMenu static void sub_809AD74(void) { - sub_807DC00(); - CreateTask(sub_809AD8C, 8); + sub_807DC00(); + CreateTask(sub_809AD8C, 8); } //Task_ReturnToShopMenu static void sub_809AD8C(u8 taskId) { - if (field_weather_is_fade_finished() != TRUE) - return; - DisplayItemMessageOnField(taskId, sub_809B56C(), gText_CanIHelpWithAnythingElse, sub_809ADC0); + if (field_weather_is_fade_finished() != TRUE) + return; + DisplayItemMessageOnField(taskId, sub_809B56C(), gText_CanIHelpWithAnythingElse, sub_809ADC0); } //ShowShopMenuAfterExitingBuyOrSellMenu static void sub_809ADC0(u8 taskId) { - sub_809AAB0(gShopData.martType); - DestroyTask(taskId); + sub_809AAB0(gShopData.martType); + DestroyTask(taskId); } //CB2_BuyMenu static void sub_809ADE4(void) { - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); - DoScheduledBgTilemapCopiesToVram(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + DoScheduledBgTilemapCopiesToVram(); } //VBlankCB_BuyMenu static void sub_809AE00(void) { - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); } //CB2_InitBuyMenu static void sub_809AE14(void) { - u8 taskId; - switch (gMain.state) - { - case 0: - SetVBlankHBlankCallbacksToNull(); - CpuFastFill(0, (void *)OAM, 0x400); - ScanlineEffect_Stop(); - ResetTempTileDataBuffers(); - FreeAllSpritePalettes(); - ResetPaletteFade(); - ResetSpriteData(); - ResetTasks(); - ClearScheduledBgCopiesToVram(); - ResetItemMenuIconState(); - if ((!(sub_809AF6C())) || (!(sub_809B188()))) - return; - sub_809AFD0(); + u8 taskId; + switch (gMain.state) + { + case 0: + SetVBlankHBlankCallbacksToNull(); + CpuFastFill(0, (void *)OAM, 0x400); + ScanlineEffect_Stop(); + ResetTempTileDataBuffers(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + ClearScheduledBgCopiesToVram(); + ResetItemMenuIconState(); + if ((!(sub_809AF6C())) || (!(sub_809B188()))) + return; + sub_809AFD0(); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20); - BuyMenuInitWindows(gShopData.martType); - sub_809B080(); - gMain.state++; - break; - case 1: - if (FreeTempTileDataBuffersIfPossible()) - return; - gMain.state++; - break; - default: - gShopData.selectedRow = 0; - gShopData.scrollOffset = 0; - sub_809B15C(); //BuyMenuDrawGraphics(); - sub_809B690(); //BuyMenuAddScrollIndicatorArrows(); - taskId = CreateTask(sub_809BBC0, 8); - gTasks[taskId].tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); - BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); + BuyMenuInitWindows(gShopData.martType); + sub_809B080(); + gMain.state++; + break; + case 1: + if (FreeTempTileDataBuffersIfPossible()) + return; + gMain.state++; + break; + default: + gShopData.selectedRow = 0; + gShopData.scrollOffset = 0; + sub_809B15C(); //BuyMenuDrawGraphics(); + sub_809B690(); //BuyMenuAddScrollIndicatorArrows(); + taskId = CreateTask(sub_809BBC0, 8); + gTasks[taskId].tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); SetVBlankCallback(sub_809AE00); SetMainCallback2(sub_809ADE4); - break; - } + break; + } } //InitShopData static bool8 sub_809AF6C(void) { - gUnknown_2039954 = Alloc(sizeof(*gUnknown_2039954)); - if (gUnknown_2039954 == 0) - goto CANCEL; - gUnknown_2039958 = Alloc(sizeof(*gUnknown_2039958)); - if (gUnknown_2039958 == 0) - goto CANCEL; - gUnknown_203995C = Alloc(sizeof(*gUnknown_203995C)); - if (gUnknown_203995C == 0) - goto CANCEL; - gUnknown_2039960 = Alloc(sizeof(*gUnknown_2039960)); - if (gUnknown_2039960 == 0) - goto CANCEL; - return TRUE; - - CANCEL: - sub_809B604(); - sub_809B670(); - return FALSE; + gUnknown_2039954 = Alloc(sizeof(*gUnknown_2039954)); + if (gUnknown_2039954 == 0) + goto CANCEL; + gUnknown_2039958 = Alloc(sizeof(*gUnknown_2039958)); + if (gUnknown_2039958 == 0) + goto CANCEL; + gUnknown_203995C = Alloc(sizeof(*gUnknown_203995C)); + if (gUnknown_203995C == 0) + goto CANCEL; + gUnknown_2039960 = Alloc(sizeof(*gUnknown_2039960)); + if (gUnknown_2039960 == 0) + goto CANCEL; + return TRUE; + + CANCEL: + sub_809B604(); + sub_809B670(); + return FALSE; } #ifdef NONMATCHING @@ -538,137 +538,137 @@ static bool8 sub_809AF6C(void) // this matches but adjusts offsets const for some reason... static void sub_809AFD0(void) { - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_83DF0C4, 4); //NELEMS(gUnknown_83DF0C4)); - SetBgTilemapBuffer(1, gUnknown_2039958); - SetBgTilemapBuffer(2, gUnknown_2039960); - SetBgTilemapBuffer(3, gUnknown_203995C); - SetGpuReg(0x10, 0); - SetGpuReg(0x12, 0); - SetGpuReg(0x14, 0); - SetGpuReg(0x16, 0); - SetGpuReg(0x18, 0); - SetGpuReg(0x1A, 0); - SetGpuReg(0x1C, 0); - SetGpuReg(0x1E, 0); - SetGpuReg(0x50, 0); - SetGpuReg(0, 0x1040); - ShowBg(0); - ShowBg(1); - ShowBg(2); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_83DF0C4, 4); //NELEMS(gUnknown_83DF0C4)); + SetBgTilemapBuffer(1, gUnknown_2039958); + SetBgTilemapBuffer(2, gUnknown_2039960); + SetBgTilemapBuffer(3, gUnknown_203995C); + SetGpuReg(0x10, 0); + SetGpuReg(0x12, 0); + SetGpuReg(0x14, 0); + SetGpuReg(0x16, 0); + SetGpuReg(0x18, 0); + SetGpuReg(0x1A, 0); + SetGpuReg(0x1C, 0); + SetGpuReg(0x1E, 0); + SetGpuReg(0x50, 0); + SetGpuReg(0, 0x1040); + ShowBg(0); + ShowBg(1); + ShowBg(2); } #else NAKED static void sub_809AFD0(void) { - asm_unified("\tpush {lr}\n" - "\tmovs r0, 0\n" - "\tbl ResetBgsAndClearDma3BusyFlags\n" - "\tldr r1, _0809B070 @ =gUnknown_83DF0C4\n" - "\tmovs r0, 0\n" - "\tmovs r2, 0x4\n" - "\tbl InitBgsFromTemplates\n" - "\tldr r0, _0809B074 @ =gUnknown_2039958\n" - "\tldr r1, [r0]\n" - "\tmovs r0, 0x1\n" - "\tbl SetBgTilemapBuffer\n" - "\tldr r0, _0809B078 @ =gUnknown_2039960\n" - "\tldr r1, [r0]\n" - "\tmovs r0, 0x2\n" - "\tbl SetBgTilemapBuffer\n" - "\tldr r0, _0809B07C @ =gUnknown_203995C\n" - "\tldr r1, [r0]\n" - "\tmovs r0, 0x3\n" - "\tbl SetBgTilemapBuffer\n" - "\tmovs r0, 0x10\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x12\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x14\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x16\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x18\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x1A\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x1C\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x1E\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x50\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r1, 0x82\n" - "\tlsls r1, 5\n" - "\tmovs r0, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0\n" - "\tbl ShowBg\n" - "\tmovs r0, 0x1\n" - "\tbl ShowBg\n" - "\tmovs r0, 0x2\n" - "\tbl ShowBg\n" - "\tmovs r0, 0x3\n" - "\tbl ShowBg\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0809B070: .4byte gUnknown_83DF0C4\n" - "_0809B074: .4byte gUnknown_2039958\n" - "_0809B078: .4byte gUnknown_2039960\n" - "_0809B07C: .4byte gUnknown_203995C\n"); + asm_unified("\tpush {lr}\n" + "\tmovs r0, 0\n" + "\tbl ResetBgsAndClearDma3BusyFlags\n" + "\tldr r1, _0809B070 @ =gUnknown_83DF0C4\n" + "\tmovs r0, 0\n" + "\tmovs r2, 0x4\n" + "\tbl InitBgsFromTemplates\n" + "\tldr r0, _0809B074 @ =gUnknown_2039958\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tbl SetBgTilemapBuffer\n" + "\tldr r0, _0809B078 @ =gUnknown_2039960\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x2\n" + "\tbl SetBgTilemapBuffer\n" + "\tldr r0, _0809B07C @ =gUnknown_203995C\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x3\n" + "\tbl SetBgTilemapBuffer\n" + "\tmovs r0, 0x10\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x12\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x14\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x16\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x18\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x1A\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x1C\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x1E\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x50\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r1, 0x82\n" + "\tlsls r1, 5\n" + "\tmovs r0, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x1\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x2\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x3\n" + "\tbl ShowBg\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0809B070: .4byte gUnknown_83DF0C4\n" + "_0809B074: .4byte gUnknown_2039958\n" + "_0809B078: .4byte gUnknown_2039960\n" + "_0809B07C: .4byte gUnknown_203995C\n"); } #endif //BuyMenuDecompressBgGraphics static void sub_809B080(void) { - void* pal; - DecompressAndCopyTileDataToVram(1, gUnknown_8E85DC8, 0x480, 0x3DC, 0); - if ((gShopData.martType) != MART_TYPE_TMHM) - LZDecompressWram(gUnknown_8E85EFC, gUnknown_2039954); //gBuyMenuFrame_Tilemap - else - LZDecompressWram(gUnknown_8E86038, gUnknown_2039954); //gBuyMenuFrame_TmHmTilemap - pal = Alloc(0x40); - LZDecompressWram(gUnknown_8E86170, pal); - LoadPalette(pal, 0xB0, 0x20); - LoadPalette(pal + 0x20, 0x60, 0x20); - Free(pal); + void* pal; + DecompressAndCopyTileDataToVram(1, gUnknown_8E85DC8, 0x480, 0x3DC, 0); + if ((gShopData.martType) != MART_TYPE_TMHM) + LZDecompressWram(gUnknown_8E85EFC, gUnknown_2039954); //gBuyMenuFrame_Tilemap + else + LZDecompressWram(gUnknown_8E86038, gUnknown_2039954); //gBuyMenuFrame_TmHmTilemap + pal = Alloc(0x40); + LZDecompressWram(gUnknown_8E86170, pal); + LoadPalette(pal, 0xB0, 0x20); + LoadPalette(pal + 0x20, 0x60, 0x20); + Free(pal); } static void sub_809B10C(bool32 a0) { - u8 v; - if (a0 == FALSE) - v = 0xB; - else - v = 6; - if ((gShopData.martType) != MART_TYPE_TMHM) - SetBgRectPal(1, 0, 0xE, 0x1E, 6, v); - else - SetBgRectPal(1, 0, 0xC, 0x1E, 8, v); - ScheduleBgCopyTilemapToVram(1); + u8 v; + if (a0 == FALSE) + v = 0xB; + else + v = 6; + if ((gShopData.martType) != MART_TYPE_TMHM) + SetBgRectPal(1, 0, 0xE, 0x1E, 6, v); + else + SetBgRectPal(1, 0, 0xC, 0x1E, 8, v); + ScheduleBgCopyTilemapToVram(1); } //BuyMenuDrawGraphics static void sub_809B15C(void) { - sub_809B764(); - sub_809BAFC(); - BuyMenuDrawMoneyBox(); - ScheduleBgCopyTilemapToVram(0); - ScheduleBgCopyTilemapToVram(1); - ScheduleBgCopyTilemapToVram(2); - ScheduleBgCopyTilemapToVram(3); + sub_809B764(); + sub_809BAFC(); + BuyMenuDrawMoneyBox(); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(1); + ScheduleBgCopyTilemapToVram(2); + ScheduleBgCopyTilemapToVram(3); } //BuyMenuBuildListMenuTemplate @@ -680,197 +680,197 @@ static bool8 sub_809B188(void) struct ShopData *mart = &gShopData; *list = Alloc((gShopData.itemCount + 1) * sizeof(*gUnknown_2039964)); if (gUnknown_2039964 == 0) - goto FREE_MEMORY; - + goto FREE_MEMORY; + gUnknown_2039968 = Alloc((gShopData.itemCount + 1) * sizeof(*gUnknown_2039968)); if (gUnknown_2039968 == 0) - { - FREE_MEMORY: - sub_809B604(); - sub_809B670(); - return FALSE; - } - + { + FREE_MEMORY: + sub_809B604(); + sub_809B670(); + return FALSE; + } + i = 0; if (i >= mart->itemCount) goto ADD_CANCEL; - - for (i = 0; i < mart->itemCount; i++) - { - sub_809B300(&gUnknown_2039964[i], mart->itemList[i], gUnknown_2039968[i]); //PokeMartWriteNameAndIdAt(u16 a0, u16 a1, u8* a2) - } - + + for (i = 0; i < mart->itemCount; i++) + { + sub_809B300(&gUnknown_2039964[i], mart->itemList[i], gUnknown_2039968[i]); //PokeMartWriteNameAndIdAt(u16 a0, u16 a1, u8* a2) + } + ADD_CANCEL: - StringCopy(gUnknown_2039968[i], gFameCheckerText_Cancel); - gUnknown_2039964[i].label = gUnknown_2039968[i]; + StringCopy(gUnknown_2039968[i], gFameCheckerText_Cancel); + gUnknown_2039964[i].label = gUnknown_2039968[i]; gUnknown_2039964[i].index = -2; gMultiuseListMenuTemplate.items = gUnknown_2039964; gMultiuseListMenuTemplate.totalItems = gShopData.itemCount + 1; - gMultiuseListMenuTemplate.windowId = 4; - gMultiuseListMenuTemplate.header_X = 0; - gMultiuseListMenuTemplate.item_X = 9; - gMultiuseListMenuTemplate.cursor_X = 1; - gMultiuseListMenuTemplate.lettersSpacing = 0; + gMultiuseListMenuTemplate.windowId = 4; + gMultiuseListMenuTemplate.header_X = 0; + gMultiuseListMenuTemplate.item_X = 9; + gMultiuseListMenuTemplate.cursor_X = 1; + gMultiuseListMenuTemplate.lettersSpacing = 0; gMultiuseListMenuTemplate.itemVerticalPadding = 2; - gMultiuseListMenuTemplate.upText_Y = 2; - gMultiuseListMenuTemplate.fontId = 2; + gMultiuseListMenuTemplate.upText_Y = 2; + gMultiuseListMenuTemplate.fontId = 2; gMultiuseListMenuTemplate.fillValue = 0; - gMultiuseListMenuTemplate.cursorPal = GetFontAttribute(2, 5); - gMultiuseListMenuTemplate.cursorShadowPal = GetFontAttribute(2, 7); - gMultiuseListMenuTemplate.moveCursorFunc = sub_809B320; - gMultiuseListMenuTemplate.itemPrintFunc = sub_809B408; - gMultiuseListMenuTemplate.scrollMultiple = 0; - gMultiuseListMenuTemplate.cursorKind = 0; - - if (gShopData.martType == MART_TYPE_TMHM) - v = 5; + gMultiuseListMenuTemplate.cursorPal = GetFontAttribute(2, 5); + gMultiuseListMenuTemplate.cursorShadowPal = GetFontAttribute(2, 7); + gMultiuseListMenuTemplate.moveCursorFunc = sub_809B320; + gMultiuseListMenuTemplate.itemPrintFunc = sub_809B408; + gMultiuseListMenuTemplate.scrollMultiple = 0; + gMultiuseListMenuTemplate.cursorKind = 0; + + if (gShopData.martType == MART_TYPE_TMHM) + v = 5; else v = 6; - - if ((gShopData.itemCount + 1) > v) - gMultiuseListMenuTemplate.maxShowed = v; - else - gMultiuseListMenuTemplate.maxShowed = gShopData.itemCount + 1; - - gShopData.field12 = gMultiuseListMenuTemplate.maxShowed; + + if ((gShopData.itemCount + 1) > v) + gMultiuseListMenuTemplate.maxShowed = v; + else + gMultiuseListMenuTemplate.maxShowed = gShopData.itemCount + 1; + + gShopData.field12 = gMultiuseListMenuTemplate.maxShowed; return TRUE; } //PokeMartWriteNameAndIdAt static void sub_809B300(struct ListMenuItem *list, u16 index, u8* dst) { - CopyItemName(index, dst); - list->label = dst; - list->index = index; + CopyItemName(index, dst); + list->label = dst; + list->index = index; } //BuyMenuPrintItemDescriptionAndShowItemIcon static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list) { const u8 *description; - + if (onInit != TRUE) PlaySE(SE_SELECT); if (item != INDEX_CANCEL) - description = ItemId_GetDescription(item); + description = ItemId_GetDescription(item); else description = gText_QuitShopping; - + FillWindowPixelBuffer(5, PIXEL_FILL(0)); - if (gShopData.martType != 1) - { - DestroyItemMenuIcon(gShopData.itemSlot ^ 1); - if (item != INDEX_CANCEL) - CreateItemMenuIcon(item, gShopData.itemSlot); - else - CreateItemMenuIcon(ITEM_N_A, gShopData.itemSlot); - gShopData.itemSlot ^= 1; - BuyMenuPrint(5, 2, description, 0, 3, 2, 1, 0, 0); - } - else //TM Mart - { - FillWindowPixelBuffer(6, PIXEL_FILL(0)); - sub_809B494(item); - BuyMenuPrint(5, 2, description, 2, 3, 1, 0, 0, 0); - } + if (gShopData.martType != 1) + { + DestroyItemMenuIcon(gShopData.itemSlot ^ 1); + if (item != INDEX_CANCEL) + CreateItemMenuIcon(item, gShopData.itemSlot); + else + CreateItemMenuIcon(ITEM_N_A, gShopData.itemSlot); + gShopData.itemSlot ^= 1; + BuyMenuPrint(5, 2, description, 0, 3, 2, 1, 0, 0); + } + else //TM Mart + { + FillWindowPixelBuffer(6, PIXEL_FILL(0)); + sub_809B494(item); + BuyMenuPrint(5, 2, description, 2, 3, 1, 0, 0, 0); + } } //BuyMenuPrintPriceInList -#ifdef NONMATCHING //this function was written very strangely.. +#ifdef NONMATCHING //this function was written very strangely.. static void sub_809B408(u8 windowId, s32 item, u8 y) { - u32 len; + u32 len; u8* loc; if (item != INDEX_CANCEL) { ConvertIntToDecimalStringN(gStringVar1, itemid_get_market_price(item), 0, NUM_CHARS_PRICE); - - //len = StringLength(gStringVar1); - len = 4 - StringLength(gStringVar1); + + //len = StringLength(gStringVar1); + len = 4 - StringLength(gStringVar1); //len = NUM_CHARS_PRICE - len; loc = gStringVar4; while (len != 0) - { - loc[4-len] = 0; + { + loc[4-len] = 0; *loc++; - len--; - } - StringExpandPlaceholders(loc, gText_PokedollarVar1); + len--; + } + StringExpandPlaceholders(loc, gText_PokedollarVar1); BuyMenuPrint(windowId, 1, gStringVar4, 0x69, y, 0, 0, TEXT_SPEED_FF, 1); - } + } } #else NAKED static void sub_809B408(u8 windowId, s32 item, u8 y) { - asm_unified("\tpush {r4-r6,lr}\n" - "\tsub sp, 0x14\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tlsls r2, 24\n" - "\tlsrs r5, r2, 24\n" - "\tmovs r0, 0x2\n" - "\tnegs r0, r0\n" - "\tcmp r1, r0\n" - "\tbeq _0809B480\n" - "\tldr r4, _0809B488 @ =gStringVar1\n" - "\tlsls r0, r1, 16\n" - "\tlsrs r0, 16\n" - "\tbl itemid_get_market_price\n" - "\tadds r1, r0, 0\n" - "\tlsls r1, 16\n" - "\tlsrs r1, 16\n" - "\tadds r0, r4, 0\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0x4\n" - "\tbl ConvertIntToDecimalStringN\n" - "\tadds r0, r4, 0\n" - "\tbl StringLength\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tmovs r1, 0x4\n" - "\tsubs r1, r0\n" - "\tldr r2, _0809B48C @ =gStringVar4\n" - "\tadds r0, r1, 0\n" - "\tsubs r1, 0x1\n" - "\tcmp r0, 0\n" - "\tbeq _0809B45C\n" - "\tmovs r3, 0\n" - "_0809B450:\n" - "\tstrb r3, [r2]\n" - "\tadds r2, 0x1\n" - "\tadds r0, r1, 0\n" - "\tsubs r1, 0x1\n" - "\tcmp r0, 0\n" - "\tbne _0809B450\n" - "_0809B45C:\n" - "\tldr r1, _0809B490 @ =gText_PokedollarVar1\n" - "\tadds r0, r2, 0\n" - "\tbl StringExpandPlaceholders\n" - "\tldr r2, _0809B48C @ =gStringVar4\n" - "\tstr r5, [sp]\n" - "\tmovs r0, 0\n" - "\tstr r0, [sp, 0x4]\n" - "\tstr r0, [sp, 0x8]\n" - "\tmovs r0, 0xFF\n" - "\tstr r0, [sp, 0xC]\n" - "\tmovs r0, 0x1\n" - "\tstr r0, [sp, 0x10]\n" - "\tadds r0, r6, 0\n" - "\tmovs r1, 0\n" - "\tmovs r3, 0x69\n" - "\tbl BuyMenuPrint\n" - "_0809B480:\n" - "\tadd sp, 0x14\n" - "\tpop {r4-r6}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t_0809B488: .4byte gStringVar1\n" - "\t_0809B48C: .4byte gStringVar4\n" - "\t_0809B490: .4byte gText_PokedollarVar1\n"); + asm_unified("\tpush {r4-r6,lr}\n" + "\tsub sp, 0x14\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tlsls r2, 24\n" + "\tlsrs r5, r2, 24\n" + "\tmovs r0, 0x2\n" + "\tnegs r0, r0\n" + "\tcmp r1, r0\n" + "\tbeq _0809B480\n" + "\tldr r4, _0809B488 @ =gStringVar1\n" + "\tlsls r0, r1, 16\n" + "\tlsrs r0, 16\n" + "\tbl itemid_get_market_price\n" + "\tadds r1, r0, 0\n" + "\tlsls r1, 16\n" + "\tlsrs r1, 16\n" + "\tadds r0, r4, 0\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x4\n" + "\tbl ConvertIntToDecimalStringN\n" + "\tadds r0, r4, 0\n" + "\tbl StringLength\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmovs r1, 0x4\n" + "\tsubs r1, r0\n" + "\tldr r2, _0809B48C @ =gStringVar4\n" + "\tadds r0, r1, 0\n" + "\tsubs r1, 0x1\n" + "\tcmp r0, 0\n" + "\tbeq _0809B45C\n" + "\tmovs r3, 0\n" + "_0809B450:\n" + "\tstrb r3, [r2]\n" + "\tadds r2, 0x1\n" + "\tadds r0, r1, 0\n" + "\tsubs r1, 0x1\n" + "\tcmp r0, 0\n" + "\tbne _0809B450\n" + "_0809B45C:\n" + "\tldr r1, _0809B490 @ =gText_PokedollarVar1\n" + "\tadds r0, r2, 0\n" + "\tbl StringExpandPlaceholders\n" + "\tldr r2, _0809B48C @ =gStringVar4\n" + "\tstr r5, [sp]\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp, 0x4]\n" + "\tstr r0, [sp, 0x8]\n" + "\tmovs r0, 0xFF\n" + "\tstr r0, [sp, 0xC]\n" + "\tmovs r0, 0x1\n" + "\tstr r0, [sp, 0x10]\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0x69\n" + "\tbl BuyMenuPrint\n" + "_0809B480:\n" + "\tadd sp, 0x14\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t_0809B488: .4byte gStringVar1\n" + "\t_0809B48C: .4byte gStringVar4\n" + "\t_0809B490: .4byte gText_PokedollarVar1\n"); } #endif @@ -883,16 +883,16 @@ MATCHED/TESTED UP UNTIL HERE static void sub_809B494(s32 item) { if (item != INDEX_CANCEL) - { - ConvertIntToDecimalStringN(gStringVar1, item - ITEM_DEVON_SCOPE, 2, 2); + { + ConvertIntToDecimalStringN(gStringVar1, item - ITEM_DEVON_SCOPE, 2, 2); StringCopy(gStringVar4, gOtherText_UnkF9_08_Clear_01); StringAppend(gStringVar4, gStringVar1); BuyMenuPrint(6, 0, gStringVar4, 0, 0, 0, 0, TEXT_SPEED_FF, 1); StringCopy(gStringVar4, gMoveNames[ItemIdToBattleMoveId(item)]); BuyMenuPrint(6, 2, gStringVar4, 0, 0x10, 0, 0, 0, 1); } - else - { + else + { BuyMenuPrint(6, 0, gText_ThreeHyphens, 0, 0, 0, 0, TEXT_SPEED_FF, 1); BuyMenuPrint(6, 2, gText_SevenHyphens, 0, 0x10, 0, 0, 0, 1); } @@ -901,102 +901,102 @@ static void sub_809B494(s32 item) //GetMartUnk16_4 u8 sub_809B56C(void) { - return gShopData.unk16_4; + return gShopData.unk16_4; } //BuyMenuPrintCursor static void sub_809B57C(u8 listTaskId, u8 a1) { - sub_809B59C(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), a1); + sub_809B59C(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), a1); } static void sub_809B59C(u8 y, u8 a1) { - if (a1 == 0xFF) - { - FillWindowPixelRect(4, 0, 1, y, GetFontAttribute(2, FONTATTR_MAX_LETTER_WIDTH), GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); - CopyWindowToVram(4, 2); - } - else - { - BuyMenuPrint(4, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, a1); - } + if (a1 == 0xFF) + { + FillWindowPixelRect(4, 0, 1, y, GetFontAttribute(2, FONTATTR_MAX_LETTER_WIDTH), GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); + CopyWindowToVram(4, 2); + } + else + { + BuyMenuPrint(4, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, a1); + } } //BuyMenuFreeMemory static void sub_809B604(void) { - if (gUnknown_2039954 != 0) - Free(gUnknown_2039954); - - if (gUnknown_2039958 != 0) - Free(gUnknown_2039958); - - if (gUnknown_203995C != 0) - Free(gUnknown_203995C); - - if (gUnknown_2039960 != 0) - Free(gUnknown_2039960); - - if (gUnknown_2039964 != 0) - Free(gUnknown_2039964); - - if (gUnknown_2039968 != 0) - Free(gUnknown_2039968); - - FreeAllWindowBuffers(); + if (gUnknown_2039954 != 0) + Free(gUnknown_2039954); + + if (gUnknown_2039958 != 0) + Free(gUnknown_2039958); + + if (gUnknown_203995C != 0) + Free(gUnknown_203995C); + + if (gUnknown_2039960 != 0) + Free(gUnknown_2039960); + + if (gUnknown_2039964 != 0) + Free(gUnknown_2039964); + + if (gUnknown_2039968 != 0) + Free(gUnknown_2039968); + + FreeAllWindowBuffers(); } //SetShopExitCallback static void sub_809B670(void) { - gFieldCallback = sub_809AD74; - SetMainCallback2(CB2_ReturnToField); + gFieldCallback = sub_809AD74; + SetMainCallback2(CB2_ReturnToField); } //BuyMenuAddScrollIndicatorArrows static void sub_809B690(void) { - if (gShopData.martType != MART_TYPE_TMHM) - { - gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 104, - (gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset); - } - else - { - gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 88, - (gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset); - } + if (gShopData.martType != MART_TYPE_TMHM) + { + gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 104, + (gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset); + } + else + { + gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 88, + (gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset); + } } //BuyQuantityAddScrollIndicatorArrows static void sub_809B6FC(void) { - gShopData.unk18 = 1; - gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0x98, 0x48, 0x68, 2, 0x6E, 0x6E, &gShopData.unk18); + gShopData.unk18 = 1; + gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0x98, 0x48, 0x68, 2, 0x6E, 0x6E, &gShopData.unk18); } //BuyMenuRemoveScrollIndicatorArrows static void sub_809B73C(void) { - if ((gShopData.unk16_11) == 0x1F) - return; - - RemoveScrollIndicatorArrowPair(gShopData.unk16_11); + if ((gShopData.unk16_11) == 0x1F) + return; + + RemoveScrollIndicatorArrowPair(gShopData.unk16_11); gShopData.unk16_11 = 0x1F; } static void sub_809B764(void) { - sub_809B92C(); - sub_809BA40(); - sub_809B778(); + sub_809B92C(); + sub_809BA40(); + sub_809B778(); } //BuyMenuDrawMapBg static void sub_809B778(void) -{ +{ s16 i; s16 j; s16 x; @@ -1072,14 +1072,14 @@ static void sub_809B92C(void) u8 y; u8 x; u8 num = 0; - u8 z; + u8 z; GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY); - z = PlayerGetZCoord(); - + z = PlayerGetZCoord(); + for (y = 0; y < MAP_OBJECTS_COUNT; y++) gUnknown_20398B4[y].eventObjId = MAP_OBJECTS_COUNT; - + for (y = 0; y < 5; y++) { for (x = 0; x < 7; x++) @@ -1117,147 +1117,147 @@ static void sub_809B92C(void) NAKED static void sub_809B92C(void) { - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x8\n" - "\tmovs r0, 0\n" - "\tmov r9, r0\n" - "\tmov r4, sp\n" - "\tadds r4, 0x2\n" - "\tmov r0, sp\n" - "\tadds r1, r4, 0\n" - "\tbl GetXYCoordsOneStepInFrontOfPlayer\n" - "\tbl PlayerGetZCoord\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tstr r0, [sp, 0x4]\n" - "\tmovs r5, 0\n" - "\tldr r2, _0809B9DC @ =gUnknown_20398B4\n" - "\tmovs r1, 0x10\n" - "_0809B958:\n" - "\tlsls r0, r5, 3\n" - "\tadds r0, r2\n" - "\tstrh r1, [r0]\n" - "\tadds r0, r5, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r5, r0, 24\n" - "\tcmp r5, 0xF\n" - "\tbls _0809B958\n" - "\tmovs r5, 0\n" - "\tldr r6, _0809B9E0 @ =gUnknown_20398BA\n" - "\tsubs r1, r6, 0x6\n" - "\tmov r8, r1\n" - "_0809B970:\n" - "\tmovs r4, 0\n" - "\tadds r2, r5, 0x1\n" - "\tmov r10, r2\n" - "_0809B976:\n" - "\tmov r1, sp\n" - "\tldr r3, _0809B9E4 @ =0x0000fffd\n" - "\tadds r0, r3, 0\n" - "\tldrh r1, [r1]\n" - "\tadds r0, r1\n" - "\tadds r0, r4\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tldr r2, _0809B9E8 @ =0x0000fffe\n" - "\tadds r1, r2, 0\n" - "\tmov r3, sp\n" - "\tldrh r3, [r3, 0x2]\n" - "\tadds r1, r3\n" - "\tadds r1, r5\n" - "\tlsls r1, 16\n" - "\tlsrs r1, 16\n" - "\tldr r2, [sp, 0x4]\n" - "\tbl GetFieldObjectIdByXYZ\n" - "\tlsls r0, 24\n" - "\tlsrs r3, r0, 24\n" - "\tcmp r3, 0x10\n" - "\tbeq _0809BA1C\n" - "\tmov r0, r9\n" - "\tlsls r2, r0, 3\n" - "\tmov r1, r8\n" - "\tadds r0, r2, r1\n" - "\tmovs r7, 0\n" - "\tstrh r3, [r0]\n" - "\tmov r0, r8\n" - "\tadds r0, 0x2\n" - "\tadds r0, r2, r0\n" - "\tstrh r4, [r0]\n" - "\tldr r1, _0809B9EC @ =gUnknown_20398B8\n" - "\tadds r0, r2, r1\n" - "\tstrh r5, [r0]\n" - "\tldr r1, _0809B9F0 @ =gMapObjects\n" - "\tlsls r0, r3, 3\n" - "\tadds r0, r3\n" - "\tlsls r0, 2\n" - "\tadds r0, r1\n" - "\tldrb r0, [r0, 0x18]\n" - "\tlsls r0, 28\n" - "\tlsrs r0, 28\n" - "\tcmp r0, 0x2\n" - "\tbeq _0809BA00\n" - "\tcmp r0, 0x2\n" - "\tbgt _0809B9F4\n" - "\tcmp r0, 0x1\n" - "\tbeq _0809B9FA\n" - "\tb _0809BA0C\n" - "\t.align 2, 0\n" - "_0809B9DC: .4byte gUnknown_20398B4\n" - "_0809B9E0: .4byte gUnknown_20398BA\n" - "_0809B9E4: .4byte 0x0000fffd\n" - "_0809B9E8: .4byte 0x0000fffe\n" - "_0809B9EC: .4byte gUnknown_20398B8\n" - "_0809B9F0: .4byte gMapObjects\n" - "_0809B9F4:\n" - "\tcmp r0, 0x3\n" - "\tbeq _0809BA06\n" - "\tb _0809BA0C\n" - "_0809B9FA:\n" - "\tadds r0, r2, r6\n" - "\tstrh r7, [r0]\n" - "\tb _0809BA12\n" - "_0809BA00:\n" - "\tadds r1, r2, r6\n" - "\tmovs r0, 0x1\n" - "\tb _0809BA10\n" - "_0809BA06:\n" - "\tadds r1, r2, r6\n" - "\tmovs r0, 0x2\n" - "\tb _0809BA10\n" - "_0809BA0C:\n" - "\tadds r1, r2, r6\n" - "\tmovs r0, 0x3\n" - "_0809BA10:\n" - "\tstrh r0, [r1]\n" - "_0809BA12:\n" - "\tmov r0, r9\n" - "\tadds r0, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tmov r9, r0\n" - "_0809BA1C:\n" - "\tadds r0, r4, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r4, r0, 24\n" - "\tcmp r4, 0x6\n" - "\tbls _0809B976\n" - "\tmov r2, r10\n" - "\tlsls r0, r2, 24\n" - "\tlsrs r5, r0, 24\n" - "\tcmp r5, 0x4\n" - "\tbls _0809B970\n" - "\tadd sp, 0x8\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n"); + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x8\n" + "\tmovs r0, 0\n" + "\tmov r9, r0\n" + "\tmov r4, sp\n" + "\tadds r4, 0x2\n" + "\tmov r0, sp\n" + "\tadds r1, r4, 0\n" + "\tbl GetXYCoordsOneStepInFrontOfPlayer\n" + "\tbl PlayerGetZCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp, 0x4]\n" + "\tmovs r5, 0\n" + "\tldr r2, _0809B9DC @ =gUnknown_20398B4\n" + "\tmovs r1, 0x10\n" + "_0809B958:\n" + "\tlsls r0, r5, 3\n" + "\tadds r0, r2\n" + "\tstrh r1, [r0]\n" + "\tadds r0, r5, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, 0xF\n" + "\tbls _0809B958\n" + "\tmovs r5, 0\n" + "\tldr r6, _0809B9E0 @ =gUnknown_20398BA\n" + "\tsubs r1, r6, 0x6\n" + "\tmov r8, r1\n" + "_0809B970:\n" + "\tmovs r4, 0\n" + "\tadds r2, r5, 0x1\n" + "\tmov r10, r2\n" + "_0809B976:\n" + "\tmov r1, sp\n" + "\tldr r3, _0809B9E4 @ =0x0000fffd\n" + "\tadds r0, r3, 0\n" + "\tldrh r1, [r1]\n" + "\tadds r0, r1\n" + "\tadds r0, r4\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tldr r2, _0809B9E8 @ =0x0000fffe\n" + "\tadds r1, r2, 0\n" + "\tmov r3, sp\n" + "\tldrh r3, [r3, 0x2]\n" + "\tadds r1, r3\n" + "\tadds r1, r5\n" + "\tlsls r1, 16\n" + "\tlsrs r1, 16\n" + "\tldr r2, [sp, 0x4]\n" + "\tbl GetFieldObjectIdByXYZ\n" + "\tlsls r0, 24\n" + "\tlsrs r3, r0, 24\n" + "\tcmp r3, 0x10\n" + "\tbeq _0809BA1C\n" + "\tmov r0, r9\n" + "\tlsls r2, r0, 3\n" + "\tmov r1, r8\n" + "\tadds r0, r2, r1\n" + "\tmovs r7, 0\n" + "\tstrh r3, [r0]\n" + "\tmov r0, r8\n" + "\tadds r0, 0x2\n" + "\tadds r0, r2, r0\n" + "\tstrh r4, [r0]\n" + "\tldr r1, _0809B9EC @ =gUnknown_20398B8\n" + "\tadds r0, r2, r1\n" + "\tstrh r5, [r0]\n" + "\tldr r1, _0809B9F0 @ =gMapObjects\n" + "\tlsls r0, r3, 3\n" + "\tadds r0, r3\n" + "\tlsls r0, 2\n" + "\tadds r0, r1\n" + "\tldrb r0, [r0, 0x18]\n" + "\tlsls r0, 28\n" + "\tlsrs r0, 28\n" + "\tcmp r0, 0x2\n" + "\tbeq _0809BA00\n" + "\tcmp r0, 0x2\n" + "\tbgt _0809B9F4\n" + "\tcmp r0, 0x1\n" + "\tbeq _0809B9FA\n" + "\tb _0809BA0C\n" + "\t.align 2, 0\n" + "_0809B9DC: .4byte gUnknown_20398B4\n" + "_0809B9E0: .4byte gUnknown_20398BA\n" + "_0809B9E4: .4byte 0x0000fffd\n" + "_0809B9E8: .4byte 0x0000fffe\n" + "_0809B9EC: .4byte gUnknown_20398B8\n" + "_0809B9F0: .4byte gMapObjects\n" + "_0809B9F4:\n" + "\tcmp r0, 0x3\n" + "\tbeq _0809BA06\n" + "\tb _0809BA0C\n" + "_0809B9FA:\n" + "\tadds r0, r2, r6\n" + "\tstrh r7, [r0]\n" + "\tb _0809BA12\n" + "_0809BA00:\n" + "\tadds r1, r2, r6\n" + "\tmovs r0, 0x1\n" + "\tb _0809BA10\n" + "_0809BA06:\n" + "\tadds r1, r2, r6\n" + "\tmovs r0, 0x2\n" + "\tb _0809BA10\n" + "_0809BA0C:\n" + "\tadds r1, r2, r6\n" + "\tmovs r0, 0x3\n" + "_0809BA10:\n" + "\tstrh r0, [r1]\n" + "_0809BA12:\n" + "\tmov r0, r9\n" + "\tadds r0, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r9, r0\n" + "_0809BA1C:\n" + "\tadds r0, r4, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tcmp r4, 0x6\n" + "\tbls _0809B976\n" + "\tmov r2, r10\n" + "\tlsls r0, r2, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, 0x4\n" + "\tbls _0809B970\n" + "\tadd sp, 0x8\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n"); } #endif @@ -1273,7 +1273,7 @@ static void sub_809BA40(void) if (gUnknown_20398B4[i][EVENT_OBJ_ID] == MAP_OBJECTS_COUNT) continue; - graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[gUnknown_20398B4[i][EVENT_OBJ_ID]].graphicsId); + graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[gUnknown_20398B4[i][EVENT_OBJ_ID]].graphicsId); spriteId = AddPseudoEventObject( gMapObjects[gUnknown_20398B4[i][EVENT_OBJ_ID]].graphicsId, SpriteCallbackDummy, @@ -1286,7 +1286,7 @@ static void sub_809BA40(void) static void sub_809BAFC(void) { - s16 i; + s16 i; u16 *dst = *gUnknown_2039958; u16 *src = *gUnknown_2039954; @@ -1294,7 +1294,7 @@ static void sub_809BAFC(void) for (i = 0; i < 0x400; i++) { if (src[i] == 0) - continue; + continue; dst[i] = src[i] + 0xb3dc; } } @@ -1302,13 +1302,13 @@ static void sub_809BAFC(void) //BuyMenuPrintItemQuantityAndPrice static void sub_809BB44(u8 taskId) { - s16 *data = gTasks[taskId].data; - - FillWindowPixelBuffer(3, PIXEL_FILL(1)); - PrintMoneyAmount(3, 0x36, 0xA, gShopData.itemPrice, TEXT_SPEED_FF); - ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, 2); - StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - BuyMenuPrint(3, 0, gStringVar4, 2, 0xA, 0, 0, 0, 1); + s16 *data = gTasks[taskId].data; + + FillWindowPixelBuffer(3, PIXEL_FILL(1)); + PrintMoneyAmount(3, 0x36, 0xA, gShopData.itemPrice, TEXT_SPEED_FF); + ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, 2); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + BuyMenuPrint(3, 0, gStringVar4, 2, 0xA, 0, 0, 0, 1); } //Task_BuyMenu @@ -1320,33 +1320,33 @@ static void sub_809BBC0(u8 taskId) { s32 itemId = ListMenu_ProcessInput(tListTaskId); ListMenuGetScrollAndRow(tListTaskId, &gShopData.scrollOffset, &gShopData.selectedRow); - switch (itemId) - { + switch (itemId) + { case LIST_NOTHING_CHOSEN: break; - case LIST_CANCEL: + case LIST_CANCEL: PlaySE(SE_SELECT); sub_809C004(taskId); - break; - default: + break; + default: PlaySE(SE_SELECT); tItemId = itemId; ClearWindowTilemap(5); sub_809B73C(); - sub_809B57C(tListTaskId, 2); - sub_809B10C(1); - gShopData.itemPrice = itemid_get_market_price(itemId); - if (!IsEnoughMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice)) - { - BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, sub_809BF98); - } - else - { - CopyItemName(itemId, gStringVar1); - BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany, sub_809BCA0); - } - } - } + sub_809B57C(tListTaskId, 2); + sub_809B10C(1); + gShopData.itemPrice = itemid_get_market_price(itemId); + if (!IsEnoughMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice)) + { + BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, sub_809BF98); + } + else + { + CopyItemName(itemId, gStringVar1); + BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany, sub_809BCA0); + } + } + } } //Task_BuyHowManyDialogueInit @@ -1356,25 +1356,25 @@ static void sub_809BCA0(u8 taskId) u16 quantityInBag = BagGetQuantityByItemId(tItemId); u16 maxQuantity; - - BuyMenuQuantityBoxThinBorder(1, 0); - ConvertIntToDecimalStringN(gStringVar1, quantityInBag, STR_CONV_MODE_RIGHT_ALIGN, 3); - StringExpandPlaceholders(gStringVar4, gText_InBagVar1); - BuyMenuPrint(1, 2, gStringVar4, 0, 2, 0, 0, 0, 1); - tItemCount = 1; - BuyMenuQuantityBoxNormalBorder(3, 0); - sub_809BB44(taskId); - ScheduleBgCopyTilemapToVram(0); - maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / itemid_get_market_price(tItemId); + + BuyMenuQuantityBoxThinBorder(1, 0); + ConvertIntToDecimalStringN(gStringVar1, quantityInBag, STR_CONV_MODE_RIGHT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_InBagVar1); + BuyMenuPrint(1, 2, gStringVar4, 0, 2, 0, 0, 0, 1); + tItemCount = 1; + BuyMenuQuantityBoxNormalBorder(3, 0); + sub_809BB44(taskId); + ScheduleBgCopyTilemapToVram(0); + maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / itemid_get_market_price(tItemId); if (maxQuantity > 99) gShopData.maxQuantity = (u8)99; else gShopData.maxQuantity = (u8)maxQuantity; - - if (maxQuantity != 1) - sub_809B6FC(); - - gTasks[taskId].func = sub_809BD8C; + + if (maxQuantity != 1) + sub_809B6FC(); + + gTasks[taskId].func = sub_809BD8C; } //Task_BuyHowManyDialogueHandleInput @@ -1393,7 +1393,7 @@ static void sub_809BD8C(u8 taskId) if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - sub_809B73C(); + sub_809B73C(); ClearStdWindowAndFrameToTransparent(3, 0); ClearStdWindowAndFrameToTransparent(1, 0); ClearWindowTilemap(3); @@ -1405,9 +1405,9 @@ static void sub_809BD8C(u8 taskId) BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, sub_809BE90); } else if (JOY_NEW(B_BUTTON)) - { - PlaySE(SE_SELECT); - sub_809B73C(); + { + PlaySE(SE_SELECT); + sub_809B73C(); ClearStdWindowAndFrameToTransparent(3, 0); ClearStdWindowAndFrameToTransparent(1, 0); ClearWindowTilemap(3); @@ -1420,7 +1420,7 @@ static void sub_809BD8C(u8 taskId) //CreateBuyMenuConfirmPurchaseWindow static void sub_809BE90(u8 taskId) { - BuyMenuConfirmPurchase(taskId, gUnknown_83DF0B4); //sShopBuyMenuYesNoWindowTemplates + BuyMenuConfirmPurchase(taskId, gUnknown_83DF0B4); //sShopBuyMenuYesNoWindowTemplates } //BuyMenuTryMakePurchase @@ -1429,26 +1429,26 @@ static void sub_809BEA4(u8 taskId) s16 *data = gTasks[taskId].data; PutWindowTilemap(4); - if (AddBagItem(tItemId, tItemCount) == TRUE) - { - BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, sub_809BF0C); - nullsub_52(taskId); - sub_809C09C(tItemId, tItemCount, 1); - } - else - { - BuyMenuDisplayMessage(taskId, gText_NoMoreRoomForThis, sub_809BF98); - } + if (AddBagItem(tItemId, tItemCount) == TRUE) + { + BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, sub_809BF0C); + nullsub_52(taskId); + sub_809C09C(tItemId, tItemCount, 1); + } + else + { + BuyMenuDisplayMessage(taskId, gText_NoMoreRoomForThis, sub_809BF98); + } } //BuyMenuSubtractMoney static void sub_809BF0C(u8 taskId) { - IncrementGameStat(GAME_STAT_SHOPPED); - RemoveMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice); - PlaySE(SE_SHOP); - PrintMoneyAmountInMoneyBox(0, GetMoney(&gSaveBlock1Ptr->money), 0); - gTasks[taskId].func = sub_809BF68; + IncrementGameStat(GAME_STAT_SHOPPED); + RemoveMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice); + PlaySE(SE_SHOP); + PrintMoneyAmountInMoneyBox(0, GetMoney(&gSaveBlock1Ptr->money), 0); + gTasks[taskId].func = sub_809BF68; } //Task_ReturnToItemListAfterItemPurchase @@ -1457,7 +1457,7 @@ static void sub_809BF68(u8 taskId) if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_809BF98(taskId); + sub_809BF98(taskId); } } @@ -1468,21 +1468,21 @@ static void sub_809BF98(u8 taskId) ClearDialogWindowAndFrameToTransparent(2, 0); sub_809B57C(tListTaskId, 1); - sub_809B10C(0); + sub_809B10C(0); PutWindowTilemap(4); PutWindowTilemap(5); - if (gShopData.martType == MART_TYPE_TMHM) - PutWindowTilemap(6); - - ScheduleBgCopyTilemapToVram(0); - sub_809B690(); - gTasks[taskId].func = sub_809BBC0; + if (gShopData.martType == MART_TYPE_TMHM) + PutWindowTilemap(6); + + ScheduleBgCopyTilemapToVram(0); + sub_809B690(); + gTasks[taskId].func = sub_809BBC0; } //ExitBuyMenu static void sub_809C004(u8 taskId) { - gFieldCallback = sub_809AD74; + gFieldCallback = sub_809AD74; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); gTasks[taskId].func = sub_809C04C; } @@ -1491,14 +1491,14 @@ static void sub_809C004(u8 taskId) static void sub_809C04C(u8 taskId) { s16 *data = gTasks[taskId].data; - - if (!gPaletteFade.active) - { + + if (!gPaletteFade.active) + { DestroyListMenuTask(tListTaskId, 0, 0); - sub_809B604(); - SetMainCallback2(CB2_ReturnToField); - DestroyTask(taskId); - } + sub_809B604(); + SetMainCallback2(CB2_ReturnToField); + DestroyTask(taskId); + } } static void nullsub_52(u8 taskId) @@ -1512,15 +1512,15 @@ static void nullsub_53(void) #ifdef NONMATCHING void sub_809C09C(u16 item, u16 quantity, u8 a2) { - struct Purchase *tmp; - - if (gUnknown_203996C.unkA == a2) - { - tmp = &gUnknown_203996C; - } - else - { - if (gUnknown_203996C.unk16 == a2) + struct Purchase *tmp; + + if (gUnknown_203996C.unkA == a2) + { + tmp = &gUnknown_203996C; + } + else + { + if (gUnknown_203996C.unk16 == a2) { tmp = &gUnknown_203996C + 12; } @@ -1533,7 +1533,7 @@ void sub_809C09C(u16 item, u16 quantity, u8 a2) gUnknown_203996C.unkA = a2; } } - } + } if (tmp->unk4 != 0) { gUnknown_203996C.unk9 = 1; @@ -1551,133 +1551,133 @@ void sub_809C09C(u16 item, u16 quantity, u8 a2) gUnknown_203996C.unk0 += ((s16)itemid_get_market_price(item) >> (quantity-1))*quantity; if (gUnknown_203996C.unk0 > 999999) gUnknown_203996C.unk0 = 999999; - } + } } #else NAKED void sub_809C09C(u16 item, u16 quantity, u8 a2) { - asm_unified("\tpush {r4-r6,lr}\n" - "\tlsls r0, 16\n" - "\tlsrs r3, r0, 16\n" - "\tlsls r1, 16\n" - "\tlsrs r6, r1, 16\n" - "\tlsls r2, 24\n" - "\tlsrs r5, r2, 24\n" - "\tldr r1, _0809C0B8 @ =gUnknown_203996C\n" - "\tldrb r2, [r1, 0xA]\n" - "\tcmp r2, r5\n" - "\tbne _0809C0BC\n" - "\tadds r4, r1, 0\n" - "\tb _0809C0D4\n" - "\t.align 2, 0\n" - "_0809C0B8: .4byte gUnknown_203996C\n" - "_0809C0BC:\n" - "\tldrb r0, [r1, 0x16]\n" - "\tcmp r0, r5\n" - "\tbne _0809C0C8\n" - "\tadds r4, r1, 0\n" - "\tadds r4, 0xC\n" - "\tb _0809C0D4\n" - "_0809C0C8:\n" - "\tadds r4, r1, 0\n" - "\tadds r4, 0xC\n" - "\tcmp r2, 0\n" - "\tbne _0809C0D2\n" - "\tadds r4, r1, 0\n" - "_0809C0D2:\n" - "\tstrb r5, [r4, 0xA]\n" - "_0809C0D4:\n" - "\tldrh r0, [r4, 0x4]\n" - "\tcmp r0, 0\n" - "\tbeq _0809C0DE\n" - "\tmovs r0, 0x1\n" - "\tstrb r0, [r4, 0x9]\n" - "_0809C0DE:\n" - "\tstrh r3, [r4, 0x4]\n" - "\tldrh r1, [r4, 0x6]\n" - "\tldr r0, _0809C128 @ =0x000003e6\n" - "\tcmp r1, r0\n" - "\tbhi _0809C0F8\n" - "\tadds r0, r6, r1\n" - "\tstrh r0, [r4, 0x6]\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tldr r1, _0809C12C @ =0x000003e7\n" - "\tcmp r0, r1\n" - "\tbls _0809C0F8\n" - "\tstrh r1, [r4, 0x6]\n" - "_0809C0F8:\n" - "\tldr r1, [r4]\n" - "\tldr r0, _0809C130 @ =0x000f423e\n" - "\tcmp r1, r0\n" - "\tbhi _0809C120\n" - "\tadds r0, r3, 0\n" - "\tbl itemid_get_market_price\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tsubs r1, r5, 0x1\n" - "\tasrs r0, r1\n" - "\tadds r1, r0, 0\n" - "\tmuls r1, r6\n" - "\tldr r0, [r4]\n" - "\tadds r0, r1\n" - "\tstr r0, [r4]\n" - "\tldr r1, _0809C134 @ =0x000f423f\n" - "\tcmp r0, r1\n" - "\tbls _0809C120\n" - "\tstr r1, [r4]\n" - "_0809C120:\n" - "\tpop {r4-r6}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0809C128: .4byte 0x000003e6\n" - "_0809C12C: .4byte 0x000003e7\n" - "_0809C130: .4byte 0x000f423e\n" - "_0809C134: .4byte 0x000f423f\n"); + asm_unified("\tpush {r4-r6,lr}\n" + "\tlsls r0, 16\n" + "\tlsrs r3, r0, 16\n" + "\tlsls r1, 16\n" + "\tlsrs r6, r1, 16\n" + "\tlsls r2, 24\n" + "\tlsrs r5, r2, 24\n" + "\tldr r1, _0809C0B8 @ =gUnknown_203996C\n" + "\tldrb r2, [r1, 0xA]\n" + "\tcmp r2, r5\n" + "\tbne _0809C0BC\n" + "\tadds r4, r1, 0\n" + "\tb _0809C0D4\n" + "\t.align 2, 0\n" + "_0809C0B8: .4byte gUnknown_203996C\n" + "_0809C0BC:\n" + "\tldrb r0, [r1, 0x16]\n" + "\tcmp r0, r5\n" + "\tbne _0809C0C8\n" + "\tadds r4, r1, 0\n" + "\tadds r4, 0xC\n" + "\tb _0809C0D4\n" + "_0809C0C8:\n" + "\tadds r4, r1, 0\n" + "\tadds r4, 0xC\n" + "\tcmp r2, 0\n" + "\tbne _0809C0D2\n" + "\tadds r4, r1, 0\n" + "_0809C0D2:\n" + "\tstrb r5, [r4, 0xA]\n" + "_0809C0D4:\n" + "\tldrh r0, [r4, 0x4]\n" + "\tcmp r0, 0\n" + "\tbeq _0809C0DE\n" + "\tmovs r0, 0x1\n" + "\tstrb r0, [r4, 0x9]\n" + "_0809C0DE:\n" + "\tstrh r3, [r4, 0x4]\n" + "\tldrh r1, [r4, 0x6]\n" + "\tldr r0, _0809C128 @ =0x000003e6\n" + "\tcmp r1, r0\n" + "\tbhi _0809C0F8\n" + "\tadds r0, r6, r1\n" + "\tstrh r0, [r4, 0x6]\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tldr r1, _0809C12C @ =0x000003e7\n" + "\tcmp r0, r1\n" + "\tbls _0809C0F8\n" + "\tstrh r1, [r4, 0x6]\n" + "_0809C0F8:\n" + "\tldr r1, [r4]\n" + "\tldr r0, _0809C130 @ =0x000f423e\n" + "\tcmp r1, r0\n" + "\tbhi _0809C120\n" + "\tadds r0, r3, 0\n" + "\tbl itemid_get_market_price\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tsubs r1, r5, 0x1\n" + "\tasrs r0, r1\n" + "\tadds r1, r0, 0\n" + "\tmuls r1, r6\n" + "\tldr r0, [r4]\n" + "\tadds r0, r1\n" + "\tstr r0, [r4]\n" + "\tldr r1, _0809C134 @ =0x000f423f\n" + "\tcmp r0, r1\n" + "\tbls _0809C120\n" + "\tstr r1, [r4]\n" + "_0809C120:\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0809C128: .4byte 0x000003e6\n" + "_0809C12C: .4byte 0x000003e7\n" + "_0809C130: .4byte 0x000f423e\n" + "_0809C134: .4byte 0x000f423f\n"); } #endif //RecordQuestLogItemPurchase static void sub_809C138(void) { - struct MartHistory *history = &gUnknown_203996C; - u16 v; + struct MartHistory *history = &gUnknown_203996C; + u16 v; v = history->unkA; - if (v != 0) - sub_8113550(v + 0x24, (const u16*)history); + if (v != 0) + sub_8113550(v + 0x24, (const u16*)history); v = history->unk16; - if (v != 0) + if (v != 0) { v += 0x24; - sub_8113550(v, (const u16*)&history->unkC); + sub_8113550(v, (const u16*)&history->unkC); } } void CreatePokemartMenu(const u16 *itemsForSale) { - sub_809ABD8(itemsForSale); - sub_809AAB0(MART_TYPE_REGULAR); - sub_809AC04(EnableBothScriptContexts); - nullsub_53(); + sub_809ABD8(itemsForSale); + sub_809AAB0(MART_TYPE_REGULAR); + sub_809AC04(EnableBothScriptContexts); + nullsub_53(); memset(&gUnknown_203996C, 0, sizeof(struct MartHistory)); - gUnknown_203996C.unk8 = gMapHeader.regionMapSectionId; - gUnknown_203996C.unk14 = gMapHeader.regionMapSectionId; + gUnknown_203996C.unk8 = gMapHeader.regionMapSectionId; + gUnknown_203996C.unk14 = gMapHeader.regionMapSectionId; } void CreateDecorationShop1Menu(const u16 *itemsForSale) { sub_809ABD8(itemsForSale); - sub_809AAB0(MART_TYPE_DECOR); + sub_809AAB0(MART_TYPE_DECOR); sub_809AC04(EnableBothScriptContexts); } void CreateDecorationShop2Menu(const u16 *itemsForSale) { sub_809ABD8(itemsForSale); - sub_809AAB0(MART_TYPE_DECOR2); + sub_809AAB0(MART_TYPE_DECOR2); sub_809AC04(EnableBothScriptContexts); } @@ -1689,383 +1689,383 @@ void CreateDecorationShop2Menu(const u16 *itemsForSale) #ifdef NONMATCHING void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) { - + } #else NAKED void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) { - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x10\n" - "\tmov r9, r1\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tlsls r2, 16\n" - "\tlsrs r2, 16\n" - "\tmov r10, r2\n" - "\tldr r2, _0809C26C @ =gTasks\n" - "\tlsls r1, r0, 2\n" - "\tadds r1, r0\n" - "\tlsls r1, 3\n" - "\tadds r1, r2\n" - "\tldrh r0, [r1, 0x10]\n" - "\tsubs r0, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r5, r0, 16\n" - "\tldrh r0, [r1, 0x12]\n" - "\tsubs r0, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r3, r0, 16\n" - "\tldrh r4, [r1, 0xA]\n" - "\tmovs r2, 0xC\n" - "\tldrsh r0, [r1, r2]\n" - "\tcmp r0, 0\n" - "\tbne _0809C29C\n" - "\tmovs r2, 0\n" - "\tlsls r5, 16\n" - "\tstr r5, [sp, 0xC]\n" - "\tlsls r0, r3, 16\n" - "\tlsls r1, r4, 16\n" - "\tasrs r0, 16\n" - "\tstr r0, [sp]\n" - "\tasrs r1, 16\n" - "\tstr r1, [sp, 0x4]\n" - "\tlsls r0, r1, 1\n" - "\tmov r1, r9\n" - "\tadds r7, r0, r1\n" - "_0809C22C:\n" - "\tmovs r4, 0\n" - "\tlsls r2, 16\n" - "\tmov r8, r2\n" - "\tasrs r0, r2, 16\n" - "\tldr r2, [sp]\n" - "\tadds r6, r2, r0\n" - "_0809C238:\n" - "\tldr r0, [sp, 0xC]\n" - "\tasrs r1, r0, 16\n" - "\tlsls r4, 16\n" - "\tasrs r0, r4, 16\n" - "\tadds r5, r1, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridGetMetatileIdAt\n" - "\tmovs r2, 0\n" - "\tldrsh r1, [r7, r2]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r1, r0\n" - "\tbne _0809C280\n" - "\tldr r0, [sp, 0x4]\n" - "\tcmp r0, 0x2\n" - "\tbeq _0809C270\n" - "\tldrh r0, [r7, 0x2]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "\tb _0809C280\n" - "\t.align 2, 0\n" - "_0809C26C: .4byte gTasks\n" - "_0809C270:\n" - "\tmov r1, r9\n" - "\tldrh r0, [r1]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "_0809C280:\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 9\n" - "\tadds r0, r4, r2\n" - "\tlsrs r4, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C238\n" - "\tadds r0, r2, 0\n" - "\tadd r0, r8\n" - "\tlsrs r2, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C22C\n" - "\tb _0809C324\n" - "_0809C29C:\n" - "\tmovs r2, 0\n" - "\tlsls r5, 16\n" - "\tstr r5, [sp, 0xC]\n" - "\tlsls r0, r3, 16\n" - "\tlsls r1, r4, 16\n" - "\tasrs r0, 16\n" - "\tstr r0, [sp, 0x8]\n" - "\tasrs r7, r1, 16\n" - "_0809C2AC:\n" - "\tmovs r4, 0\n" - "\tlsls r2, 16\n" - "\tmov r8, r2\n" - "\tasrs r0, r2, 16\n" - "\tldr r1, [sp, 0x8]\n" - "\tadds r6, r1, r0\n" - "_0809C2B8:\n" - "\tldr r2, [sp, 0xC]\n" - "\tasrs r1, r2, 16\n" - "\tlsls r4, 16\n" - "\tasrs r0, r4, 16\n" - "\tadds r5, r1, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridGetMetatileIdAt\n" - "\tmovs r1, 0x2\n" - "\tsubs r1, r7\n" - "\tlsls r1, 1\n" - "\tadd r1, r9\n" - "\tmovs r2, 0\n" - "\tldrsh r1, [r1, r2]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r1, r0\n" - "\tbne _0809C30A\n" - "\tcmp r7, 0x2\n" - "\tbeq _0809C2FA\n" - "\tmovs r0, 0x1\n" - "\tsubs r0, r7\n" - "\tlsls r0, 1\n" - "\tadd r0, r9\n" - "\tldrh r0, [r0]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "\tb _0809C30A\n" - "_0809C2FA:\n" - "\tmov r1, r9\n" - "\tldrh r0, [r1, 0x4]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "_0809C30A:\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 9\n" - "\tadds r0, r4, r2\n" - "\tlsrs r4, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C2B8\n" - "\tadds r0, r2, 0\n" - "\tadd r0, r8\n" - "\tlsrs r2, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C2AC\n" - "_0809C324:\n" - "\tadd sp, 0x10\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n"); + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x10\n" + "\tmov r9, r1\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tlsls r2, 16\n" + "\tlsrs r2, 16\n" + "\tmov r10, r2\n" + "\tldr r2, _0809C26C @ =gTasks\n" + "\tlsls r1, r0, 2\n" + "\tadds r1, r0\n" + "\tlsls r1, 3\n" + "\tadds r1, r2\n" + "\tldrh r0, [r1, 0x10]\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tldrh r0, [r1, 0x12]\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r3, r0, 16\n" + "\tldrh r4, [r1, 0xA]\n" + "\tmovs r2, 0xC\n" + "\tldrsh r0, [r1, r2]\n" + "\tcmp r0, 0\n" + "\tbne _0809C29C\n" + "\tmovs r2, 0\n" + "\tlsls r5, 16\n" + "\tstr r5, [sp, 0xC]\n" + "\tlsls r0, r3, 16\n" + "\tlsls r1, r4, 16\n" + "\tasrs r0, 16\n" + "\tstr r0, [sp]\n" + "\tasrs r1, 16\n" + "\tstr r1, [sp, 0x4]\n" + "\tlsls r0, r1, 1\n" + "\tmov r1, r9\n" + "\tadds r7, r0, r1\n" + "_0809C22C:\n" + "\tmovs r4, 0\n" + "\tlsls r2, 16\n" + "\tmov r8, r2\n" + "\tasrs r0, r2, 16\n" + "\tldr r2, [sp]\n" + "\tadds r6, r2, r0\n" + "_0809C238:\n" + "\tldr r0, [sp, 0xC]\n" + "\tasrs r1, r0, 16\n" + "\tlsls r4, 16\n" + "\tasrs r0, r4, 16\n" + "\tadds r5, r1, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridGetMetatileIdAt\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r7, r2]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r1, r0\n" + "\tbne _0809C280\n" + "\tldr r0, [sp, 0x4]\n" + "\tcmp r0, 0x2\n" + "\tbeq _0809C270\n" + "\tldrh r0, [r7, 0x2]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tb _0809C280\n" + "\t.align 2, 0\n" + "_0809C26C: .4byte gTasks\n" + "_0809C270:\n" + "\tmov r1, r9\n" + "\tldrh r0, [r1]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "_0809C280:\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 9\n" + "\tadds r0, r4, r2\n" + "\tlsrs r4, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C238\n" + "\tadds r0, r2, 0\n" + "\tadd r0, r8\n" + "\tlsrs r2, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C22C\n" + "\tb _0809C324\n" + "_0809C29C:\n" + "\tmovs r2, 0\n" + "\tlsls r5, 16\n" + "\tstr r5, [sp, 0xC]\n" + "\tlsls r0, r3, 16\n" + "\tlsls r1, r4, 16\n" + "\tasrs r0, 16\n" + "\tstr r0, [sp, 0x8]\n" + "\tasrs r7, r1, 16\n" + "_0809C2AC:\n" + "\tmovs r4, 0\n" + "\tlsls r2, 16\n" + "\tmov r8, r2\n" + "\tasrs r0, r2, 16\n" + "\tldr r1, [sp, 0x8]\n" + "\tadds r6, r1, r0\n" + "_0809C2B8:\n" + "\tldr r2, [sp, 0xC]\n" + "\tasrs r1, r2, 16\n" + "\tlsls r4, 16\n" + "\tasrs r0, r4, 16\n" + "\tadds r5, r1, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridGetMetatileIdAt\n" + "\tmovs r1, 0x2\n" + "\tsubs r1, r7\n" + "\tlsls r1, 1\n" + "\tadd r1, r9\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r1, r2]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r1, r0\n" + "\tbne _0809C30A\n" + "\tcmp r7, 0x2\n" + "\tbeq _0809C2FA\n" + "\tmovs r0, 0x1\n" + "\tsubs r0, r7\n" + "\tlsls r0, 1\n" + "\tadd r0, r9\n" + "\tldrh r0, [r0]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tb _0809C30A\n" + "_0809C2FA:\n" + "\tmov r1, r9\n" + "\tldrh r0, [r1, 0x4]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "_0809C30A:\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 9\n" + "\tadds r0, r4, r2\n" + "\tlsrs r4, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C2B8\n" + "\tadds r0, r2, 0\n" + "\tadd r0, r8\n" + "\tlsrs r2, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C2AC\n" + "_0809C324:\n" + "\tadd sp, 0x10\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n"); } #endif static void sub_809C334(u8 taskId) { - s16 *data = gTasks[taskId].data; - u16 v1; - - data[3] = 1; - switch (data[0]) - { - case 0: - sub_809C1D8(taskId, gUnknown_83DF0D4, 0); - break; - case 1: - sub_809C1D8(taskId, gUnknown_83DF0DA, 0); - break; - case 2: - sub_809C1D8(taskId, gUnknown_83DF0E0, 0xC00); - break; - case 3: - sub_809C1D8(taskId, gUnknown_83DF0E6, 0); - break; - case 4: - sub_809C1D8(taskId, gUnknown_83DF0EC, 0xC00); - break; - case 5: - sub_809C1D8(taskId, gUnknown_83DF0F2, 0); - break; - case 6: - sub_809C1D8(taskId, gUnknown_83DF0F8, 0); + s16 *data = gTasks[taskId].data; + u16 v1; + + data[3] = 1; + switch (data[0]) + { + case 0: + sub_809C1D8(taskId, gUnknown_83DF0D4, 0); + break; + case 1: + sub_809C1D8(taskId, gUnknown_83DF0DA, 0); + break; + case 2: + sub_809C1D8(taskId, gUnknown_83DF0E0, 0xC00); + break; + case 3: + sub_809C1D8(taskId, gUnknown_83DF0E6, 0); + break; + case 4: + sub_809C1D8(taskId, gUnknown_83DF0EC, 0xC00); + break; + case 5: + sub_809C1D8(taskId, gUnknown_83DF0F2, 0); + break; + case 6: + sub_809C1D8(taskId, gUnknown_83DF0F8, 0); default: break; - } - data[0] = (data[0] + 1) & 7; - v1 = data[0] & 7; - //ldrh r5, [r4] instead mov r5, r0 somehow - if (v1 == 0) - { - DrawWholeMapView(); - data[1] = (data[1] + 1) % 3; - data[3] = v1; - } + } + data[0] = (data[0] + 1) & 7; + v1 = data[0] & 7; + //ldrh r5, [r4] instead mov r5, r0 somehow + if (v1 == 0) + { + DrawWholeMapView(); + data[1] = (data[1] + 1) % 3; + data[3] = v1; + } } static u8 sub_809C3FC(u16 a0) { - u8 taskId; + u8 taskId; s16 *data; taskId = CreateTask(sub_809C334, 0); data = gTasks[taskId].data; - PlayerGetDestCoords(&tX, &tItemId); + PlayerGetDestCoords(&tX, &tItemId); t0 = 0; tItemCount = 0; data[2] = a0; - sub_809C334(taskId); - return taskId; + sub_809C334(taskId); + return taskId; } void sub_809C448(u8 a0) { - u8 taskId; - - taskId = sub_809C3FC(a0); - gUnknown_2039984 = taskId; + u8 taskId; + + taskId = sub_809C3FC(a0); + gUnknown_2039984 = taskId; } void sub_809C460(void) { - DestroyTask(gUnknown_2039984); + DestroyTask(gUnknown_2039984); } bool8 sub_809C474(void) -{ - if (gTasks[gUnknown_2039984].data[3] == 0) - { - if (gTasks[gUnknown_2039984].data[1] != 2) - return TRUE; - return FALSE; - } - else - { - return TRUE; - } +{ + if (gTasks[gUnknown_2039984].data[3] == 0) + { + if (gTasks[gUnknown_2039984].data[1] != 2) + return TRUE; + return FALSE; + } + else + { + return TRUE; + } } // special 0x1b5 - creates a tile animaiton one block left two-four up the player void sub_809C4A8(void) { - u8 taskId; + u8 taskId; s16 *data; - - taskId = CreateTask(sub_809C500, 0); + + taskId = CreateTask(sub_809C500, 0); gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; + gTasks[taskId].data[1] = 0; data = gTasks[taskId].data; - PlayerGetDestCoords(&data[2], &data[3]); - if (gSpecialVar_0x8004 == 0) + PlayerGetDestCoords(&data[2], &data[3]); + if (gSpecialVar_0x8004 == 0) { - gTasks[taskId].data[2] += 6; + gTasks[taskId].data[2] += 6; gTasks[taskId].data[3] -= 5; } else { - gTasks[taskId].data[2]--; + gTasks[taskId].data[2]--; gTasks[taskId].data[3] -= 5; } } static void sub_809C500(u8 taskId) { - s16 *data = gTasks[taskId].data; - - if (data[0] == 0) - { - if ((data[1] & 1) == 0) - { - MapGridSetMetatileIdAt(data[2], data[3], 0xEB5); - MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB7); - } - else - { - MapGridSetMetatileIdAt(data[2], data[3], 0xEB6); - MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB8); - } - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 2); - } - - data[0]++; - if (data[0] != 0x10) - return; - data[0] = 0; - - data[0] == 0; - data[1]++; - if (data[1] != 0xD) - return; - - MapGridSetMetatileIdAt(data[2], data[3], 0xE8A); - MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xE96); - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 2); - DestroyTask(taskId); + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + if ((data[1] & 1) == 0) + { + MapGridSetMetatileIdAt(data[2], data[3], 0xEB5); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB7); + } + else + { + MapGridSetMetatileIdAt(data[2], data[3], 0xEB6); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB8); + } + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 2); + } + + data[0]++; + if (data[0] != 0x10) + return; + data[0] = 0; + + data[0] == 0; + data[1]++; + if (data[1] != 0xD) + return; + + MapGridSetMetatileIdAt(data[2], data[3], 0xE8A); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xE96); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 2); + DestroyTask(taskId); } // special 0x1B7 - creates a tile animation two-six blocks right from the top-left corner of the screen void sub_809C5FC(void) { - u8 taskId; - s16 *data; - - taskId = CreateTask(sub_809C640, 0); + u8 taskId; + s16 *data; + + taskId = CreateTask(sub_809C640, 0); gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; + gTasks[taskId].data[1] = 0; data = gTasks[taskId].data; - PlayerGetDestCoords(&data[2], &data[3]); - gTasks[taskId].data[2] += 4; - gTasks[taskId].data[3] -= 5; + PlayerGetDestCoords(&data[2], &data[3]); + gTasks[taskId].data[2] += 4; + gTasks[taskId].data[3] -= 5; } static void sub_809C640(u8 taskId) { - s16 *data = gTasks[taskId].data; - - if (data[0] == 0) - { - if (data[1] != 0) - { - MapGridSetMetatileIdAt(data[2], data[3], 0xE85); - MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEB4); - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 1); - if (data[1] == 4) - { - DestroyTask(taskId); - return; - } - data[2]--; - } - MapGridSetMetatileIdAt(data[2], data[3], 0xEB9); - MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEBA); - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 1); - } - data[0]++; - if (data[0] == 4) - { - data[0] = 0; - data[1]++; - } + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + if (data[1] != 0) + { + MapGridSetMetatileIdAt(data[2], data[3], 0xE85); + MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEB4); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 1); + if (data[1] == 4) + { + DestroyTask(taskId); + return; + } + data[2]--; + } + MapGridSetMetatileIdAt(data[2], data[3], 0xEB9); + MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEBA); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 1); + } + data[0]++; + if (data[0] == 4) + { + data[0] = 0; + data[1]++; + } } -- cgit v1.2.3 From 3f92af3651452e873339d721903340003a86c526 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 24 Nov 2019 16:57:31 -0700 Subject: fix mart history struct --- src/shop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shop.c b/src/shop.c index 923c7dc45..43b1361a1 100644 --- a/src/shop.c +++ b/src/shop.c @@ -1512,7 +1512,7 @@ static void nullsub_53(void) #ifdef NONMATCHING void sub_809C09C(u16 item, u16 quantity, u8 a2) { - struct Purchase *tmp; + struct MartHistory *tmp; if (gUnknown_203996C.unkA == a2) { -- cgit v1.2.3 From 10ee4b2cf6c380a2e1b4d1d02bbec3b3682257b1 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 24 Nov 2019 17:01:54 -0700 Subject: remove sea cottage funcs --- src/shop.c | 389 ------------------------------------------------------------- 1 file changed, 389 deletions(-) diff --git a/src/shop.c b/src/shop.c index 43b1361a1..0a96b7eb3 100644 --- a/src/shop.c +++ b/src/shop.c @@ -1680,392 +1680,3 @@ void CreateDecorationShop2Menu(const u16 *itemsForSale) sub_809AAB0(MART_TYPE_DECOR2); sub_809AC04(EnableBothScriptContexts); } - - - - -///////////////////////the following functions belong??//////////////////////////// - -#ifdef NONMATCHING -void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) -{ - -} -#else -NAKED -void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x10\n" - "\tmov r9, r1\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tlsls r2, 16\n" - "\tlsrs r2, 16\n" - "\tmov r10, r2\n" - "\tldr r2, _0809C26C @ =gTasks\n" - "\tlsls r1, r0, 2\n" - "\tadds r1, r0\n" - "\tlsls r1, 3\n" - "\tadds r1, r2\n" - "\tldrh r0, [r1, 0x10]\n" - "\tsubs r0, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r5, r0, 16\n" - "\tldrh r0, [r1, 0x12]\n" - "\tsubs r0, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r3, r0, 16\n" - "\tldrh r4, [r1, 0xA]\n" - "\tmovs r2, 0xC\n" - "\tldrsh r0, [r1, r2]\n" - "\tcmp r0, 0\n" - "\tbne _0809C29C\n" - "\tmovs r2, 0\n" - "\tlsls r5, 16\n" - "\tstr r5, [sp, 0xC]\n" - "\tlsls r0, r3, 16\n" - "\tlsls r1, r4, 16\n" - "\tasrs r0, 16\n" - "\tstr r0, [sp]\n" - "\tasrs r1, 16\n" - "\tstr r1, [sp, 0x4]\n" - "\tlsls r0, r1, 1\n" - "\tmov r1, r9\n" - "\tadds r7, r0, r1\n" - "_0809C22C:\n" - "\tmovs r4, 0\n" - "\tlsls r2, 16\n" - "\tmov r8, r2\n" - "\tasrs r0, r2, 16\n" - "\tldr r2, [sp]\n" - "\tadds r6, r2, r0\n" - "_0809C238:\n" - "\tldr r0, [sp, 0xC]\n" - "\tasrs r1, r0, 16\n" - "\tlsls r4, 16\n" - "\tasrs r0, r4, 16\n" - "\tadds r5, r1, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridGetMetatileIdAt\n" - "\tmovs r2, 0\n" - "\tldrsh r1, [r7, r2]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r1, r0\n" - "\tbne _0809C280\n" - "\tldr r0, [sp, 0x4]\n" - "\tcmp r0, 0x2\n" - "\tbeq _0809C270\n" - "\tldrh r0, [r7, 0x2]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "\tb _0809C280\n" - "\t.align 2, 0\n" - "_0809C26C: .4byte gTasks\n" - "_0809C270:\n" - "\tmov r1, r9\n" - "\tldrh r0, [r1]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "_0809C280:\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 9\n" - "\tadds r0, r4, r2\n" - "\tlsrs r4, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C238\n" - "\tadds r0, r2, 0\n" - "\tadd r0, r8\n" - "\tlsrs r2, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C22C\n" - "\tb _0809C324\n" - "_0809C29C:\n" - "\tmovs r2, 0\n" - "\tlsls r5, 16\n" - "\tstr r5, [sp, 0xC]\n" - "\tlsls r0, r3, 16\n" - "\tlsls r1, r4, 16\n" - "\tasrs r0, 16\n" - "\tstr r0, [sp, 0x8]\n" - "\tasrs r7, r1, 16\n" - "_0809C2AC:\n" - "\tmovs r4, 0\n" - "\tlsls r2, 16\n" - "\tmov r8, r2\n" - "\tasrs r0, r2, 16\n" - "\tldr r1, [sp, 0x8]\n" - "\tadds r6, r1, r0\n" - "_0809C2B8:\n" - "\tldr r2, [sp, 0xC]\n" - "\tasrs r1, r2, 16\n" - "\tlsls r4, 16\n" - "\tasrs r0, r4, 16\n" - "\tadds r5, r1, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridGetMetatileIdAt\n" - "\tmovs r1, 0x2\n" - "\tsubs r1, r7\n" - "\tlsls r1, 1\n" - "\tadd r1, r9\n" - "\tmovs r2, 0\n" - "\tldrsh r1, [r1, r2]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r1, r0\n" - "\tbne _0809C30A\n" - "\tcmp r7, 0x2\n" - "\tbeq _0809C2FA\n" - "\tmovs r0, 0x1\n" - "\tsubs r0, r7\n" - "\tlsls r0, 1\n" - "\tadd r0, r9\n" - "\tldrh r0, [r0]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "\tb _0809C30A\n" - "_0809C2FA:\n" - "\tmov r1, r9\n" - "\tldrh r0, [r1, 0x4]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "_0809C30A:\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 9\n" - "\tadds r0, r4, r2\n" - "\tlsrs r4, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C2B8\n" - "\tadds r0, r2, 0\n" - "\tadd r0, r8\n" - "\tlsrs r2, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C2AC\n" - "_0809C324:\n" - "\tadd sp, 0x10\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n"); -} -#endif - -static void sub_809C334(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - u16 v1; - - data[3] = 1; - switch (data[0]) - { - case 0: - sub_809C1D8(taskId, gUnknown_83DF0D4, 0); - break; - case 1: - sub_809C1D8(taskId, gUnknown_83DF0DA, 0); - break; - case 2: - sub_809C1D8(taskId, gUnknown_83DF0E0, 0xC00); - break; - case 3: - sub_809C1D8(taskId, gUnknown_83DF0E6, 0); - break; - case 4: - sub_809C1D8(taskId, gUnknown_83DF0EC, 0xC00); - break; - case 5: - sub_809C1D8(taskId, gUnknown_83DF0F2, 0); - break; - case 6: - sub_809C1D8(taskId, gUnknown_83DF0F8, 0); - default: - break; - } - data[0] = (data[0] + 1) & 7; - v1 = data[0] & 7; - //ldrh r5, [r4] instead mov r5, r0 somehow - if (v1 == 0) - { - DrawWholeMapView(); - data[1] = (data[1] + 1) % 3; - data[3] = v1; - } -} - -static u8 sub_809C3FC(u16 a0) -{ - u8 taskId; - s16 *data; - - taskId = CreateTask(sub_809C334, 0); - data = gTasks[taskId].data; - PlayerGetDestCoords(&tX, &tItemId); - t0 = 0; - tItemCount = 0; - data[2] = a0; - sub_809C334(taskId); - return taskId; -} - -void sub_809C448(u8 a0) -{ - u8 taskId; - - taskId = sub_809C3FC(a0); - gUnknown_2039984 = taskId; -} - -void sub_809C460(void) -{ - DestroyTask(gUnknown_2039984); -} - -bool8 sub_809C474(void) -{ - if (gTasks[gUnknown_2039984].data[3] == 0) - { - if (gTasks[gUnknown_2039984].data[1] != 2) - return TRUE; - return FALSE; - } - else - { - return TRUE; - } -} - -// special 0x1b5 - creates a tile animaiton one block left two-four up the player -void sub_809C4A8(void) -{ - u8 taskId; - s16 *data; - - taskId = CreateTask(sub_809C500, 0); - - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - - data = gTasks[taskId].data; - PlayerGetDestCoords(&data[2], &data[3]); - if (gSpecialVar_0x8004 == 0) - { - gTasks[taskId].data[2] += 6; - gTasks[taskId].data[3] -= 5; - } - else - { - gTasks[taskId].data[2]--; - gTasks[taskId].data[3] -= 5; - } -} - -static void sub_809C500(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - if (data[0] == 0) - { - if ((data[1] & 1) == 0) - { - MapGridSetMetatileIdAt(data[2], data[3], 0xEB5); - MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB7); - } - else - { - MapGridSetMetatileIdAt(data[2], data[3], 0xEB6); - MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB8); - } - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 2); - } - - data[0]++; - if (data[0] != 0x10) - return; - data[0] = 0; - - data[0] == 0; - data[1]++; - if (data[1] != 0xD) - return; - - MapGridSetMetatileIdAt(data[2], data[3], 0xE8A); - MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xE96); - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 2); - DestroyTask(taskId); -} - -// special 0x1B7 - creates a tile animation two-six blocks right from the top-left corner of the screen -void sub_809C5FC(void) -{ - u8 taskId; - s16 *data; - - taskId = CreateTask(sub_809C640, 0); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - - data = gTasks[taskId].data; - PlayerGetDestCoords(&data[2], &data[3]); - gTasks[taskId].data[2] += 4; - gTasks[taskId].data[3] -= 5; -} - -static void sub_809C640(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - if (data[0] == 0) - { - if (data[1] != 0) - { - MapGridSetMetatileIdAt(data[2], data[3], 0xE85); - MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEB4); - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 1); - if (data[1] == 4) - { - DestroyTask(taskId); - return; - } - data[2]--; - } - MapGridSetMetatileIdAt(data[2], data[3], 0xEB9); - MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEBA); - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 1); - } - data[0]++; - if (data[0] == 4) - { - data[0] = 0; - data[1]++; - } -} -- cgit v1.2.3 From e6a882cc920077f7e555714983a8835fbbe3e4bd Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 24 Nov 2019 17:22:02 -0700 Subject: separate sea cottage anim functions --- include/sea_cottage.h | 13 ++ include/shop.h | 9 - ld_script.txt | 2 + src/sea_cottage_special_anim.c | 417 +++++++++++++++++++++++++++++++++++++++++ src/shop.c | 24 +-- 5 files changed, 433 insertions(+), 32 deletions(-) create mode 100644 include/sea_cottage.h create mode 100644 src/sea_cottage_special_anim.c diff --git a/include/sea_cottage.h b/include/sea_cottage.h new file mode 100644 index 000000000..dce6862ff --- /dev/null +++ b/include/sea_cottage.h @@ -0,0 +1,13 @@ +#ifdndef GUARD_SEA_COTTAGE_H +#define GUARD_SEA_COTTAGE_H + +#include "global.h" + +void sub_809C1D8(u8 taskId, const u16* a1, u16 a2); +void sub_809C448(u8 a0); +void sub_809C460(void); +bool8 sub_809C474(void); +void sub_809C4A8(void); +void sub_809C5FC(void); + +#endif // GUARD_SHOP_H \ No newline at end of file diff --git a/include/shop.h b/include/shop.h index 129839e33..27014580d 100644 --- a/include/shop.h +++ b/include/shop.h @@ -28,15 +28,6 @@ void CreateDecorationShop2Menu(const u16 *); u8 sub_809B56C(void); void sub_809C09C(u16 a0, u16 a1, u8 a2); -// wrong file -void sub_809C1D8(u8 taskId, const u16* a1, u16 a2); -void sub_809C448(u8 a0); -void sub_809C460(void); -bool8 sub_809C474(void); -void sub_809C4A8(void); -void sub_809C5FC(void); - - // buy_menu_helper void BuyMenuInitWindows(bool32 isSellingTM); void BuyMenuDrawMoneyBox(void); diff --git a/ld_script.txt b/ld_script.txt index acf58b345..9f6e7297d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -141,6 +141,7 @@ SECTIONS { src/battle_anim_mon_movement.o(.text); src/item.o(.text); src/shop.o(.text); + src/sea_cottage_special_anim.o(.text); src/berry.o(.text); src/script_menu.o(.text); asm/naming_screen.o(.text); @@ -442,6 +443,7 @@ SECTIONS { src/battle_anim_mon_movement.o(.rodata); src/item.o(.rodata); src/shop.o(.rodata); + src/sea_cottage_special_anim.o(.rodata); src/berry.o(.rodata); src/script_menu.o(.rodata); data/naming_screen.o(.rodata); diff --git a/src/sea_cottage_special_anim.c b/src/sea_cottage_special_anim.c new file mode 100644 index 000000000..e9b05a0fc --- /dev/null +++ b/src/sea_cottage_special_anim.c @@ -0,0 +1,417 @@ +#include "global.h" +#include "event_data.h" +#include "task.h" +#include "menu.h" +#include "field_player_avatar.h" +#include "fieldmap.h" +#include "field_map_obj.h" +#include "field_camera.h" + +// Defines +#define t0 data[0] +#define tX data[4] +#define tListTaskId data[7] + +// RAM +EWRAM_DATA u8 gUnknown_2039984 = 0; + + +// Function Declarations +static void sub_809C334(u8 taskId); +static void sub_809C500(u8 taskId); +static void sub_809C640(u8 taskId); + +// Data Definitions +static const u16 gUnknown_83DF0D4[] = {0x0308, 0x030a, 0x02d0}; +static const u16 gUnknown_83DF0DA[] = {0x0309, 0x030b, 0x02d1}; +static const u16 gUnknown_83DF0E0[] = {0x0310, 0x0312, 0x02d8}; +static const u16 gUnknown_83DF0E6[] = {0x0311, 0x0313, 0x02d9}; +static const u16 gUnknown_83DF0EC[] = {0x02e3, 0x0316, 0x0314}; +static const u16 gUnknown_83DF0F2[] = {0x02e4, 0x0317, 0x0315}; +static const u16 gUnknown_83DF0F8[] = {0x02eb, 0x031e, 0x031c}; + + +// Functions +#ifdef NONMATCHING +void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) +{ + +} +#else +NAKED +void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x10\n" + "\tmov r9, r1\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tlsls r2, 16\n" + "\tlsrs r2, 16\n" + "\tmov r10, r2\n" + "\tldr r2, _0809C26C @ =gTasks\n" + "\tlsls r1, r0, 2\n" + "\tadds r1, r0\n" + "\tlsls r1, 3\n" + "\tadds r1, r2\n" + "\tldrh r0, [r1, 0x10]\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tldrh r0, [r1, 0x12]\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r3, r0, 16\n" + "\tldrh r4, [r1, 0xA]\n" + "\tmovs r2, 0xC\n" + "\tldrsh r0, [r1, r2]\n" + "\tcmp r0, 0\n" + "\tbne _0809C29C\n" + "\tmovs r2, 0\n" + "\tlsls r5, 16\n" + "\tstr r5, [sp, 0xC]\n" + "\tlsls r0, r3, 16\n" + "\tlsls r1, r4, 16\n" + "\tasrs r0, 16\n" + "\tstr r0, [sp]\n" + "\tasrs r1, 16\n" + "\tstr r1, [sp, 0x4]\n" + "\tlsls r0, r1, 1\n" + "\tmov r1, r9\n" + "\tadds r7, r0, r1\n" + "_0809C22C:\n" + "\tmovs r4, 0\n" + "\tlsls r2, 16\n" + "\tmov r8, r2\n" + "\tasrs r0, r2, 16\n" + "\tldr r2, [sp]\n" + "\tadds r6, r2, r0\n" + "_0809C238:\n" + "\tldr r0, [sp, 0xC]\n" + "\tasrs r1, r0, 16\n" + "\tlsls r4, 16\n" + "\tasrs r0, r4, 16\n" + "\tadds r5, r1, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridGetMetatileIdAt\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r7, r2]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r1, r0\n" + "\tbne _0809C280\n" + "\tldr r0, [sp, 0x4]\n" + "\tcmp r0, 0x2\n" + "\tbeq _0809C270\n" + "\tldrh r0, [r7, 0x2]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tb _0809C280\n" + "\t.align 2, 0\n" + "_0809C26C: .4byte gTasks\n" + "_0809C270:\n" + "\tmov r1, r9\n" + "\tldrh r0, [r1]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "_0809C280:\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 9\n" + "\tadds r0, r4, r2\n" + "\tlsrs r4, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C238\n" + "\tadds r0, r2, 0\n" + "\tadd r0, r8\n" + "\tlsrs r2, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C22C\n" + "\tb _0809C324\n" + "_0809C29C:\n" + "\tmovs r2, 0\n" + "\tlsls r5, 16\n" + "\tstr r5, [sp, 0xC]\n" + "\tlsls r0, r3, 16\n" + "\tlsls r1, r4, 16\n" + "\tasrs r0, 16\n" + "\tstr r0, [sp, 0x8]\n" + "\tasrs r7, r1, 16\n" + "_0809C2AC:\n" + "\tmovs r4, 0\n" + "\tlsls r2, 16\n" + "\tmov r8, r2\n" + "\tasrs r0, r2, 16\n" + "\tldr r1, [sp, 0x8]\n" + "\tadds r6, r1, r0\n" + "_0809C2B8:\n" + "\tldr r2, [sp, 0xC]\n" + "\tasrs r1, r2, 16\n" + "\tlsls r4, 16\n" + "\tasrs r0, r4, 16\n" + "\tadds r5, r1, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridGetMetatileIdAt\n" + "\tmovs r1, 0x2\n" + "\tsubs r1, r7\n" + "\tlsls r1, 1\n" + "\tadd r1, r9\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r1, r2]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r1, r0\n" + "\tbne _0809C30A\n" + "\tcmp r7, 0x2\n" + "\tbeq _0809C2FA\n" + "\tmovs r0, 0x1\n" + "\tsubs r0, r7\n" + "\tlsls r0, 1\n" + "\tadd r0, r9\n" + "\tldrh r0, [r0]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tb _0809C30A\n" + "_0809C2FA:\n" + "\tmov r1, r9\n" + "\tldrh r0, [r1, 0x4]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "_0809C30A:\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 9\n" + "\tadds r0, r4, r2\n" + "\tlsrs r4, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C2B8\n" + "\tadds r0, r2, 0\n" + "\tadd r0, r8\n" + "\tlsrs r2, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C2AC\n" + "_0809C324:\n" + "\tadd sp, 0x10\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n"); +} +#endif + +static void sub_809C334(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 v1; + + data[3] = 1; + switch (data[0]) + { + case 0: + sub_809C1D8(taskId, gUnknown_83DF0D4, 0); + break; + case 1: + sub_809C1D8(taskId, gUnknown_83DF0DA, 0); + break; + case 2: + sub_809C1D8(taskId, gUnknown_83DF0E0, 0xC00); + break; + case 3: + sub_809C1D8(taskId, gUnknown_83DF0E6, 0); + break; + case 4: + sub_809C1D8(taskId, gUnknown_83DF0EC, 0xC00); + break; + case 5: + sub_809C1D8(taskId, gUnknown_83DF0F2, 0); + break; + case 6: + sub_809C1D8(taskId, gUnknown_83DF0F8, 0); + default: + break; + } + data[0] = (data[0] + 1) & 7; + v1 = data[0] & 7; + //ldrh r5, [r4] instead mov r5, r0 somehow + if (v1 == 0) + { + DrawWholeMapView(); + data[1] = (data[1] + 1) % 3; + data[3] = v1; + } +} + +static u8 sub_809C3FC(u16 a0) +{ + u8 taskId; + s16 *data; + + taskId = CreateTask(sub_809C334, 0); + data = gTasks[taskId].data; + PlayerGetDestCoords(&tX, &data[5]); + t0 = 0; + data[1] = 0; + data[2] = a0; + sub_809C334(taskId); + return taskId; +} + +void sub_809C448(u8 a0) +{ + u8 taskId; + + taskId = sub_809C3FC(a0); + gUnknown_2039984 = taskId; +} + +void sub_809C460(void) +{ + DestroyTask(gUnknown_2039984); +} + +bool8 sub_809C474(void) +{ + if (gTasks[gUnknown_2039984].data[3] == 0) + { + if (gTasks[gUnknown_2039984].data[1] != 2) + return TRUE; + return FALSE; + } + else + { + return TRUE; + } +} + +// special 0x1b5 - creates a tile animaiton one block left two-four up the player +void sub_809C4A8(void) +{ + u8 taskId; + s16 *data; + + taskId = CreateTask(sub_809C500, 0); + + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + + data = gTasks[taskId].data; + PlayerGetDestCoords(&data[2], &data[3]); + if (gSpecialVar_0x8004 == 0) + { + gTasks[taskId].data[2] += 6; + gTasks[taskId].data[3] -= 5; + } + else + { + gTasks[taskId].data[2]--; + gTasks[taskId].data[3] -= 5; + } +} + +static void sub_809C500(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + if ((data[1] & 1) == 0) + { + MapGridSetMetatileIdAt(data[2], data[3], 0xEB5); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB7); + } + else + { + MapGridSetMetatileIdAt(data[2], data[3], 0xEB6); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB8); + } + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 2); + } + + data[0]++; + if (data[0] != 0x10) + return; + data[0] = 0; + + data[0] == 0; + data[1]++; + if (data[1] != 0xD) + return; + + MapGridSetMetatileIdAt(data[2], data[3], 0xE8A); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xE96); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 2); + DestroyTask(taskId); +} + +// special 0x1B7 - creates a tile animation two-six blocks right from the top-left corner of the screen +void sub_809C5FC(void) +{ + u8 taskId; + s16 *data; + + taskId = CreateTask(sub_809C640, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + + data = gTasks[taskId].data; + PlayerGetDestCoords(&data[2], &data[3]); + gTasks[taskId].data[2] += 4; + gTasks[taskId].data[3] -= 5; +} + +static void sub_809C640(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + if (data[1] != 0) + { + MapGridSetMetatileIdAt(data[2], data[3], 0xE85); + MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEB4); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 1); + if (data[1] == 4) + { + DestroyTask(taskId); + return; + } + data[2]--; + } + MapGridSetMetatileIdAt(data[2], data[3], 0xEB9); + MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEBA); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 1); + } + data[0]++; + if (data[0] == 4) + { + data[0] = 0; + data[1]++; + } +} diff --git a/src/shop.c b/src/shop.c index 0a96b7eb3..55fe7311a 100644 --- a/src/shop.c +++ b/src/shop.c @@ -34,7 +34,6 @@ #include "money.h" #include "quest_log.h" #include "script.h" -#include "event_data.h" #include "constants/songs.h" #include "constants/items.h" #include "constants/game_stat.h" @@ -112,8 +111,6 @@ EWRAM_DATA u8 (*gUnknown_2039968)[13] = {0}; //item strings EWRAM_DATA s16 gUnknown_20398B4[MAP_OBJECTS_COUNT][4] = {0}; //sViewportMapObjects EWRAM_DATA struct MartHistory gUnknown_203996C = {0}; -EWRAM_DATA u8 gUnknown_2039984 = 0; - //Function Declarations static u8 sub_809AAB0(u8 a0); static u8 sub_809AB7C(bool32 a0); @@ -171,11 +168,6 @@ static void nullsub_52(u8 taskId); static void nullsub_53(void); static void sub_809C138(void); -// new file? -static void sub_809C334(u8 taskId); -static void sub_809C500(u8 taskId); -static void sub_809C640(u8 taskId); - // external defines extern u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y); extern u16 BagGetQuantityByItemId(u16 item); @@ -186,13 +178,6 @@ extern const struct MenuAction gUnknown_83DF09C[]; extern const struct YesNoFuncTable gUnknown_83DF0B4[]; extern const struct WindowTemplate gUnknown_83DF0BC[]; extern const struct BgTemplate gUnknown_83DF0C4[]; -extern const u16 gUnknown_83DF0D4[]; -extern const u16 gUnknown_83DF0DA[]; -extern const u16 gUnknown_83DF0E0[]; -extern const u16 gUnknown_83DF0E6[]; -extern const u16 gUnknown_83DF0EC[]; -extern const u16 gUnknown_83DF0F2[]; -extern const u16 gUnknown_83DF0F8[]; */ //graphics @@ -268,14 +253,6 @@ static const struct BgTemplate gUnknown_83DF0C4[] = //sShopBuyMenuBgTemplate } }; -static const u16 gUnknown_83DF0D4[] = {0x0308, 0x030a, 0x02d0}; -static const u16 gUnknown_83DF0DA[] = {0x0309, 0x030b, 0x02d1}; -static const u16 gUnknown_83DF0E0[] = {0x0310, 0x0312, 0x02d8}; -static const u16 gUnknown_83DF0E6[] = {0x0311, 0x0313, 0x02d9}; -static const u16 gUnknown_83DF0EC[] = {0x02e3, 0x0316, 0x0314}; -static const u16 gUnknown_83DF0F2[] = {0x02e4, 0x0317, 0x0315}; -static const u16 gUnknown_83DF0F8[] = {0x02eb, 0x031e, 0x031c}; - // Functions // CreateShopMenu @@ -1680,3 +1657,4 @@ void CreateDecorationShop2Menu(const u16 *itemsForSale) sub_809AAB0(MART_TYPE_DECOR2); sub_809AC04(EnableBothScriptContexts); } + -- cgit v1.2.3 From 30994831130ec41feea5229b787fe76db792d1b1 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 24 Nov 2019 22:04:51 -0700 Subject: match BuyMenuCollectEventObjectData --- src/shop.c | 271 ++++++------------------------------------------------------- 1 file changed, 25 insertions(+), 246 deletions(-) diff --git a/src/shop.c b/src/shop.c index 55fe7311a..340dcf811 100644 --- a/src/shop.c +++ b/src/shop.c @@ -213,7 +213,7 @@ static const struct WindowTemplate gUnknown_83DF0BC[] = //sShopMenuWindowTem } }; -static const struct BgTemplate gUnknown_83DF0C4[] = //sShopBuyMenuBgTemplates +static const struct BgTemplate gUnknown_83DF0C4[4] = //sShopBuyMenuBgTemplates { { .bg = 0, @@ -510,13 +510,11 @@ static bool8 sub_809AF6C(void) return FALSE; } -#ifdef NONMATCHING //BuyMenuInitBgs -// this matches but adjusts offsets const for some reason... static void sub_809AFD0(void) { ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_83DF0C4, 4); //NELEMS(gUnknown_83DF0C4)); + InitBgsFromTemplates(0, gUnknown_83DF0C4, NELEMS(gUnknown_83DF0C4)); SetBgTilemapBuffer(1, gUnknown_2039958); SetBgTilemapBuffer(2, gUnknown_2039960); SetBgTilemapBuffer(3, gUnknown_203995C); @@ -532,79 +530,9 @@ static void sub_809AFD0(void) SetGpuReg(0, 0x1040); ShowBg(0); ShowBg(1); - ShowBg(2); + ShowBg(2); + ShowBg(3); } -#else -NAKED -static void sub_809AFD0(void) -{ - asm_unified("\tpush {lr}\n" - "\tmovs r0, 0\n" - "\tbl ResetBgsAndClearDma3BusyFlags\n" - "\tldr r1, _0809B070 @ =gUnknown_83DF0C4\n" - "\tmovs r0, 0\n" - "\tmovs r2, 0x4\n" - "\tbl InitBgsFromTemplates\n" - "\tldr r0, _0809B074 @ =gUnknown_2039958\n" - "\tldr r1, [r0]\n" - "\tmovs r0, 0x1\n" - "\tbl SetBgTilemapBuffer\n" - "\tldr r0, _0809B078 @ =gUnknown_2039960\n" - "\tldr r1, [r0]\n" - "\tmovs r0, 0x2\n" - "\tbl SetBgTilemapBuffer\n" - "\tldr r0, _0809B07C @ =gUnknown_203995C\n" - "\tldr r1, [r0]\n" - "\tmovs r0, 0x3\n" - "\tbl SetBgTilemapBuffer\n" - "\tmovs r0, 0x10\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x12\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x14\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x16\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x18\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x1A\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x1C\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x1E\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x50\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r1, 0x82\n" - "\tlsls r1, 5\n" - "\tmovs r0, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0\n" - "\tbl ShowBg\n" - "\tmovs r0, 0x1\n" - "\tbl ShowBg\n" - "\tmovs r0, 0x2\n" - "\tbl ShowBg\n" - "\tmovs r0, 0x3\n" - "\tbl ShowBg\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0809B070: .4byte gUnknown_83DF0C4\n" - "_0809B074: .4byte gUnknown_2039958\n" - "_0809B078: .4byte gUnknown_2039960\n" - "_0809B07C: .4byte gUnknown_203995C\n"); -} -#endif //BuyMenuDecompressBgGraphics static void sub_809B080(void) @@ -757,23 +685,23 @@ static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list) #ifdef NONMATCHING //this function was written very strangely.. static void sub_809B408(u8 windowId, s32 item, u8 y) { - u32 len; - u8* loc; + u32 len, x; + u8 *loc; if (item != INDEX_CANCEL) { - ConvertIntToDecimalStringN(gStringVar1, itemid_get_market_price(item), 0, NUM_CHARS_PRICE); - - //len = StringLength(gStringVar1); + ConvertIntToDecimalStringN(gStringVar1, itemid_get_market_price(item), 0, 4); len = 4 - StringLength(gStringVar1); - //len = NUM_CHARS_PRICE - len; loc = gStringVar4; - - while (len != 0) + x = len - 1; + if (x > 0) { - loc[4-len] = 0; - *loc++; - len--; + while (len != 0) + { + *loc = 0; + loc++; + len--; + } } StringExpandPlaceholders(loc, gText_PokedollarVar1); BuyMenuPrint(windowId, 1, gStringVar4, 0x69, y, 0, 0, TEXT_SPEED_FF, 1); @@ -1040,8 +968,7 @@ static void sub_809B904(u16 *dest, s16 offset1, s16 offset2, const u16 *src) } -// BuyMenuCollectEventObjectData(void) -#ifdef NONMATCHING +// BuyMenuCollectEventObjectData static void sub_809B92C(void) { s16 facingX; @@ -1055,34 +982,33 @@ static void sub_809B92C(void) z = PlayerGetZCoord(); for (y = 0; y < MAP_OBJECTS_COUNT; y++) - gUnknown_20398B4[y].eventObjId = MAP_OBJECTS_COUNT; + gUnknown_20398B4[y][EVENT_OBJ_ID] = MAP_OBJECTS_COUNT; for (y = 0; y < 5; y++) { for (x = 0; x < 7; x++) { - u8 eventObjId = GetFieldObjectIdByXYZ(facingX - 4 + x, facingY - 2 + y, z); + u8 eventObjId = GetFieldObjectIdByXYZ(facingX - 3 + x, facingY - 2 + y, z); if (eventObjId != MAP_OBJECTS_COUNT) { - gUnknown_20398B4[num].eventObjId = eventObjId; - gUnknown_20398B4[num].x = x; - gUnknown_20398B4[num].y = y; - //gUnknown_20398B4[num].layerType = MapGridGetMetatileLayerTypeAt(facingX - 4 + x, facingY - 2 + y); + gUnknown_20398B4[num][EVENT_OBJ_ID] = eventObjId; + gUnknown_20398B4[num][X_COORD] = x; + gUnknown_20398B4[num][Y_COORD] = y; switch (gMapObjects[eventObjId].facingDirection) { case DIR_SOUTH: - gUnknown_20398B4[num].animNum = 0; + gUnknown_20398B4[num][ANIM_NUM] = 0; break; case DIR_NORTH: - gUnknown_20398B4[num].animNum = 1; + gUnknown_20398B4[num][ANIM_NUM] = 1; break; case DIR_WEST: - gUnknown_20398B4[num].animNum = 2; + gUnknown_20398B4[num][ANIM_NUM] = 2; break; case DIR_EAST: default: - gUnknown_20398B4[num].animNum = 3; + gUnknown_20398B4[num][ANIM_NUM] = 3; break; } num++; @@ -1090,153 +1016,6 @@ static void sub_809B92C(void) } } } -#else -NAKED -static void sub_809B92C(void) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x8\n" - "\tmovs r0, 0\n" - "\tmov r9, r0\n" - "\tmov r4, sp\n" - "\tadds r4, 0x2\n" - "\tmov r0, sp\n" - "\tadds r1, r4, 0\n" - "\tbl GetXYCoordsOneStepInFrontOfPlayer\n" - "\tbl PlayerGetZCoord\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tstr r0, [sp, 0x4]\n" - "\tmovs r5, 0\n" - "\tldr r2, _0809B9DC @ =gUnknown_20398B4\n" - "\tmovs r1, 0x10\n" - "_0809B958:\n" - "\tlsls r0, r5, 3\n" - "\tadds r0, r2\n" - "\tstrh r1, [r0]\n" - "\tadds r0, r5, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r5, r0, 24\n" - "\tcmp r5, 0xF\n" - "\tbls _0809B958\n" - "\tmovs r5, 0\n" - "\tldr r6, _0809B9E0 @ =gUnknown_20398BA\n" - "\tsubs r1, r6, 0x6\n" - "\tmov r8, r1\n" - "_0809B970:\n" - "\tmovs r4, 0\n" - "\tadds r2, r5, 0x1\n" - "\tmov r10, r2\n" - "_0809B976:\n" - "\tmov r1, sp\n" - "\tldr r3, _0809B9E4 @ =0x0000fffd\n" - "\tadds r0, r3, 0\n" - "\tldrh r1, [r1]\n" - "\tadds r0, r1\n" - "\tadds r0, r4\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tldr r2, _0809B9E8 @ =0x0000fffe\n" - "\tadds r1, r2, 0\n" - "\tmov r3, sp\n" - "\tldrh r3, [r3, 0x2]\n" - "\tadds r1, r3\n" - "\tadds r1, r5\n" - "\tlsls r1, 16\n" - "\tlsrs r1, 16\n" - "\tldr r2, [sp, 0x4]\n" - "\tbl GetFieldObjectIdByXYZ\n" - "\tlsls r0, 24\n" - "\tlsrs r3, r0, 24\n" - "\tcmp r3, 0x10\n" - "\tbeq _0809BA1C\n" - "\tmov r0, r9\n" - "\tlsls r2, r0, 3\n" - "\tmov r1, r8\n" - "\tadds r0, r2, r1\n" - "\tmovs r7, 0\n" - "\tstrh r3, [r0]\n" - "\tmov r0, r8\n" - "\tadds r0, 0x2\n" - "\tadds r0, r2, r0\n" - "\tstrh r4, [r0]\n" - "\tldr r1, _0809B9EC @ =gUnknown_20398B8\n" - "\tadds r0, r2, r1\n" - "\tstrh r5, [r0]\n" - "\tldr r1, _0809B9F0 @ =gMapObjects\n" - "\tlsls r0, r3, 3\n" - "\tadds r0, r3\n" - "\tlsls r0, 2\n" - "\tadds r0, r1\n" - "\tldrb r0, [r0, 0x18]\n" - "\tlsls r0, 28\n" - "\tlsrs r0, 28\n" - "\tcmp r0, 0x2\n" - "\tbeq _0809BA00\n" - "\tcmp r0, 0x2\n" - "\tbgt _0809B9F4\n" - "\tcmp r0, 0x1\n" - "\tbeq _0809B9FA\n" - "\tb _0809BA0C\n" - "\t.align 2, 0\n" - "_0809B9DC: .4byte gUnknown_20398B4\n" - "_0809B9E0: .4byte gUnknown_20398BA\n" - "_0809B9E4: .4byte 0x0000fffd\n" - "_0809B9E8: .4byte 0x0000fffe\n" - "_0809B9EC: .4byte gUnknown_20398B8\n" - "_0809B9F0: .4byte gMapObjects\n" - "_0809B9F4:\n" - "\tcmp r0, 0x3\n" - "\tbeq _0809BA06\n" - "\tb _0809BA0C\n" - "_0809B9FA:\n" - "\tadds r0, r2, r6\n" - "\tstrh r7, [r0]\n" - "\tb _0809BA12\n" - "_0809BA00:\n" - "\tadds r1, r2, r6\n" - "\tmovs r0, 0x1\n" - "\tb _0809BA10\n" - "_0809BA06:\n" - "\tadds r1, r2, r6\n" - "\tmovs r0, 0x2\n" - "\tb _0809BA10\n" - "_0809BA0C:\n" - "\tadds r1, r2, r6\n" - "\tmovs r0, 0x3\n" - "_0809BA10:\n" - "\tstrh r0, [r1]\n" - "_0809BA12:\n" - "\tmov r0, r9\n" - "\tadds r0, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tmov r9, r0\n" - "_0809BA1C:\n" - "\tadds r0, r4, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r4, r0, 24\n" - "\tcmp r4, 0x6\n" - "\tbls _0809B976\n" - "\tmov r2, r10\n" - "\tlsls r0, r2, 24\n" - "\tlsrs r5, r0, 24\n" - "\tcmp r5, 0x4\n" - "\tbls _0809B970\n" - "\tadd sp, 0x8\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n"); -} -#endif //BuyMenuDrawEventObjects static void sub_809BA40(void) -- cgit v1.2.3 From c73f061cc68468c3227be98fd49cba9514bbd567 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 25 Nov 2019 15:04:38 -0700 Subject: update ewram --- asm/item_menu.s | 2 +- include/shop.h | 13 +- src/berry_pouch.c | 2 +- src/buy_menu_helpers.c | 2 +- src/sea_cottage_special_anim.c | 24 +- src/shop.c | 643 +++++++++++++++------------------ src/tm_case.c | 2 +- sym_ewram.txt | 792 ++++++++++++++++++++--------------------- 8 files changed, 697 insertions(+), 783 deletions(-) diff --git a/asm/item_menu.s b/asm/item_menu.s index a8487864a..df609fef5 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -5484,7 +5484,7 @@ sub_810A9D4: @ 810A9D4 mov r2, r8 ldrh r1, [r2, 0x10] movs r2, 0x2 - bl sub_809C09C + bl RecordItemPurchase mov r3, r8 ldrb r0, [r3] ldr r4, _0810AAE4 @ =gUnknown_203ACFC diff --git a/include/shop.h b/include/shop.h index 27014580d..91ce421aa 100644 --- a/include/shop.h +++ b/include/shop.h @@ -11,22 +11,13 @@ #define NUM_CHARS_PRICE 4 -// shop view window NPC info enum -enum -{ - EVENT_OBJ_ID, - X_COORD, - Y_COORD, - ANIM_NUM -}; - extern EWRAM_DATA struct ItemSlot gUnknown_02039F80[3]; void CreatePokemartMenu(const u16 *itemsForSale); void CreateDecorationShop1Menu(const u16 *); void CreateDecorationShop2Menu(const u16 *); -u8 sub_809B56C(void); -void sub_809C09C(u16 a0, u16 a1, u8 a2); +u8 GetMartUnk16_4(void); +void RecordItemPurchase(u16 a0, u16 a1, u8 a2); // buy_menu_helper void BuyMenuInitWindows(bool32 isSellingTM); diff --git a/src/berry_pouch.c b/src/berry_pouch.c index b8b66c0bc..0ecf43b45 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -1384,7 +1384,7 @@ static void Task_SellBerries_PlaySfxAndRemoveBerries(u8 taskId) PlaySE(SE_SHOP); RemoveBagItem(gSpecialVar_ItemId, data[8]); AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]); - sub_809C09C(gSpecialVar_ItemId, data[8], 2); + RecordItemPurchase(gSpecialVar_ItemId, data[8], 2); DestroyListMenuTask(data[0], &sStaticCnt.listMenuScrollOffset, &sStaticCnt.listMenuSelectedRow); SortAndCountBerries(); SanitizeListMenuSelectionParams(); diff --git a/src/buy_menu_helpers.c b/src/buy_menu_helpers.c index 44de094b5..1fd160576 100644 --- a/src/buy_menu_helpers.c +++ b/src/buy_menu_helpers.c @@ -184,7 +184,7 @@ void BuyMenuPrint(u8 windowId, u8 font, const u8 *text, u8 x, u8 y, u8 letterSpa void BuyMenuDisplayMessage(u8 taskId, const u8 *text, TaskFunc callback) { - DisplayMessageAndContinueTask(taskId, 2, 0x13, 0xE, sub_809B56C(), GetTextSpeedSetting(), text, callback); + DisplayMessageAndContinueTask(taskId, 2, 0x13, 0xE, GetMartUnk16_4(), GetTextSpeedSetting(), text, callback); ScheduleBgCopyTilemapToVram(0); } diff --git a/src/sea_cottage_special_anim.c b/src/sea_cottage_special_anim.c index e9b05a0fc..67fc70209 100644 --- a/src/sea_cottage_special_anim.c +++ b/src/sea_cottage_special_anim.c @@ -35,7 +35,29 @@ static const u16 gUnknown_83DF0F8[] = {0x02eb, 0x031e, 0x031c}; #ifdef NONMATCHING void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) { - + s16 v1, v2, v3; + s16 i, j; + + v1 = gTasks[taskId].data[5] - 1; + v2 = gTasks[taskId].data[6] - 1; + v3 = gTasks[taskId].data[2]; + + if (gTasks[taskId].data[3] == 0) + { + for (i = 0; i < 3; i++) + { + for (j = 0; j < 3; j++) + { + MapGridGetMetatileIdAt(v1 + j, v2 + i); + if () + { + + } + + MapGridSetMetatileIdAt + } + } + } } #else NAKED diff --git a/src/shop.c b/src/shop.c index 340dcf811..d0b3994a2 100644 --- a/src/shop.c +++ b/src/shop.c @@ -44,6 +44,7 @@ #define tItemId data[5] #define tListTaskId data[7] +// mart types enum { MART_TYPE_REGULAR = 0, @@ -52,9 +53,14 @@ enum MART_TYPE_DECOR2, }; -// RAM symbols -// Function Declarations -// Data Definitions +// shop view window NPC info enum +enum +{ + EVENT_OBJ_ID, + X_COORD, + Y_COORD, + ANIM_NUM +}; struct ShopData { @@ -71,7 +77,6 @@ struct ShopData u16 itemSlot:2; u16 unk16_11:5; /*0x18*/ u16 unk18; - //INCOMPLETE }; struct MartHistory @@ -92,81 +97,73 @@ struct MartHistory }; /* size = 0x18 */ +EWRAM_DATA s16 sViewportMapObjects[MAP_OBJECTS_COUNT][4] = {0}; EWRAM_DATA struct ShopData gShopData = {0}; -EWRAM_DATA u8 gUnknown_2039950 = 0; //sShopMenuWindowId - -EWRAM_DATA u16 (*gUnknown_2039954)[0x400] = {0}; //gShopTilemapBuffers -EWRAM_DATA u16 (*gUnknown_2039958)[0x400] = {0}; -EWRAM_DATA u16 (*gUnknown_203995C)[0x400] = {0}; -EWRAM_DATA u16 (*gUnknown_2039960)[0x400] = {0}; -/* -EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039954 = 0; //gShopTilemapBuffers -EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039958 = 0; -EWRAM_DATA struct ShopTilemapBuffers *gUnknown_203995C = 0; -EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039960 = 0; -*/ -EWRAM_DATA struct ListMenuItem *gUnknown_2039964 = {0}; -EWRAM_DATA u8 (*gUnknown_2039968)[13] = {0}; //item strings - -EWRAM_DATA s16 gUnknown_20398B4[MAP_OBJECTS_COUNT][4] = {0}; //sViewportMapObjects -EWRAM_DATA struct MartHistory gUnknown_203996C = {0}; +EWRAM_DATA u8 sShopMenuWindowId = 0; +EWRAM_DATA u16 (*gShopTilemapBuffer1)[0x400] = {0}; +EWRAM_DATA u16 (*gShopTilemapBuffer2)[0x400] = {0}; +EWRAM_DATA u16 (*gShopTilemapBuffer3)[0x400] = {0}; +EWRAM_DATA u16 (*gShopTilemapBuffer4)[0x400] = {0}; +EWRAM_DATA struct ListMenuItem *sShopMenuListMenu = {0}; +EWRAM_DATA u8 (*sShopMenuItemStrings)[13] = {0}; +EWRAM_DATA struct MartHistory gShopMenuHistory = {0}; //Function Declarations -static u8 sub_809AAB0(u8 a0); -static u8 sub_809AB7C(bool32 a0); -static void sub_809ABD8(const u16 *items); -static void sub_809AC04(MainCallback callback); -static void sub_809AC10(u8 taskId); -static void sub_809AC5C(u8 taskId); -static void sub_809AC98(u8 taskId); -static void sub_809ACD4(void); -static void sub_809ACF8(u8 taskId); -static void sub_809AD24(void); -static void sub_809AD40(u8 taskId); -static void sub_809AD74(void); -static void sub_809AD8C(u8 taskId); -static void sub_809ADC0(u8 taskId); //ShowShopMenuAfterExitingBuyOrSellMenu -static void sub_809ADE4(void); -static void sub_809AE00(void); -static void sub_809AE14(void); -static bool8 sub_809AF6C(void); -static void sub_809AFD0(void); //BuyMenuInitBgs -static void sub_809B080(void); +static u8 CreateShopMenu(u8 a0); +static u8 GetMartTypeFromItemList(bool32 a0); +static void SetShopItemsForSale(const u16 *items); +static void SetShopMenuCallback(MainCallback callback); +static void Task_ShopMenu(u8 taskId); +static void Task_HandleShopMenuBuy(u8 taskId); +static void Task_HandleShopMenuSell(u8 taskId); +static void CB2_GoToSellMenu(void); +static void Task_HandleShopMenuQuit(u8 taskId); +static void ClearShopMenuWindow(void); +static void Task_GoToBuyOrSellMenu(u8 taskId); +static void MapPostLoadHook_ReturnToShopMenu(void); +static void Task_ReturnToShopMenu(u8 taskId); +static void ShowShopMenuAfterExitingBuyOrSellMenu(u8 taskId); +static void CB2_BuyMenu(void); +static void VBlankCB_BuyMenu(void); +static void CB2_InitBuyMenu(void); +static bool8 InitShopData(void); +static void BuyMenuInitBgs(void); +static void BuyMenuDecompressBgGraphics(void); static void sub_809B10C(bool32 a0); -static void sub_809B15C(void); //BuyMenuDrawGraphics(); -static bool8 sub_809B188(void); //BuyMenuBuildListMenuTemplate -static void sub_809B300(struct ListMenuItem *list, u16 index, u8* dst); -static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list); -static void sub_809B408(u8 windowId, s32 itemId, u8 y); -static void sub_809B494(s32 item); -static void sub_809B57C(u8 listTaskId, u8 a1); -static void sub_809B59C(u8 y, u8 a1); -static void sub_809B604(void); -static void sub_809B670(void); -static void sub_809B690(void); -static void sub_809B6FC(void); -static void sub_809B73C(void); +static void BuyMenuDrawGraphics(void); +static bool8 BuyMenuBuildListMenuTemplate(void); +static void PokeMartWriteNameAndIdAt(struct ListMenuItem *list, u16 index, u8* dst); +static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list); +static void BuyMenuPrintPriceInList(u8 windowId, s32 itemId, u8 y); +static void LoadTmHmNameInMart(s32 item); +static void BuyMenuPrintCursor(u8 listTaskId, u8 a1); +static void BuyMenuPrintCursorAtYPosition(u8 y, u8 a1); +static void BuyMenuFreeMemory(void); +static void SetShopExitCallback(void); +static void BuyMenuAddScrollIndicatorArrows(void); +static void BuyQuantityAddScrollIndicatorArrows(void); +static void BuyMenuRemoveScrollIndicatorArrows(void); static void sub_809B764(void); -static void sub_809B778(void); -static void sub_809B850(s16 x, s16 y, const u16 *src, u8 metatileLayerType); -static void sub_809B904(u16 *dest, s16 offset1, s16 offset2, const u16 *src); -static void sub_809B92C(void); -static void sub_809BA40(void); -static void sub_809BAFC(void); -static void sub_809BB44(u8 taskId); -static void sub_809BBC0(u8 taskId); -static void sub_809BCA0(u8 taskId); -static void sub_809BD8C(u8 taskId); -static void sub_809BE90(u8 taskId); -static void sub_809BEA4(u8 taskId); -static void sub_809BF0C(u8 taskId); -static void sub_809BF68(u8 taskId); -static void sub_809BF98(u8 taskId); -static void sub_809C004(u8 taskId); -static void sub_809C04C(u8 taskId); +static void BuyMenuDrawMapBg(void); +static void BuyMenuDrawMapMetatile(s16 x, s16 y, const u16 *src, u8 metatileLayerType); +static void BuyMenuDrawMapMetatileLayer(u16 *dest, s16 offset1, s16 offset2, const u16 *src); +static void BuyMenuCollectEventObjectData(void); +static void BuyMenuDrawEventObjects(void); +static void BuyMenuCopyTilemapData(void); +static void BuyMenuPrintItemQuantityAndPrice(u8 taskId); +static void Task_BuyMenu(u8 taskId); +static void Task_BuyHowManyDialogueInit(u8 taskId); +static void Task_BuyHowManyDialogueHandleInput(u8 taskId); +static void CreateBuyMenuConfirmPurchaseWindow(u8 taskId); +static void BuyMenuTryMakePurchase(u8 taskId); +static void BuyMenuSubtractMoney(u8 taskId); +static void Task_ReturnToItemListAfterItemPurchase(u8 taskId); +static void BuyMenuReturnToItemList(u8 taskId); +static void ExitBuyMenu(u8 taskId); +static void Task_ExitBuyMenu(u8 taskId); static void nullsub_52(u8 taskId); static void nullsub_53(void); -static void sub_809C138(void); +static void RecordQuestLogItemPurchase(void); // external defines extern u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y); @@ -189,15 +186,15 @@ extern const u32 gUnknown_8E86170[]; //gBuyMenuFrame_Pal static const struct MenuAction gUnknown_83DF09C[] = // sShopMenuActions_BuySellQuit { - {gText_ShopBuy, {.void_u8 = sub_809AC5C}}, - {gText_ShopSell, {.void_u8 = sub_809AC98}}, - {gText_ShopQuit, {.void_u8 = sub_809ACF8}} + {gText_ShopBuy, {.void_u8 = Task_HandleShopMenuBuy}}, + {gText_ShopSell, {.void_u8 = Task_HandleShopMenuSell}}, + {gText_ShopQuit, {.void_u8 = Task_HandleShopMenuQuit}} }; static const struct YesNoFuncTable gUnknown_83DF0B4[] = //sShopMenuActions_BuyQuit { - sub_809BEA4, //Task_HandleShopMenuBuy, - sub_809BF98 //Task_HandleShopMenuQuit + BuyMenuTryMakePurchase, //Task_HandleShopMenuBuy, + BuyMenuReturnToItemList //Task_HandleShopMenuQuit }; static const struct WindowTemplate gUnknown_83DF0BC[] = //sShopMenuWindowTemplates @@ -255,26 +252,25 @@ static const struct BgTemplate gUnknown_83DF0C4[4] = //sShopBuyMenuBgTemplat // Functions -// CreateShopMenu -static u8 sub_809AAB0(u8 a0) +static u8 CreateShopMenu(u8 a0) { - gShopData.martType = sub_809AB7C(a0) & 0xF; + gShopData.martType = GetMartTypeFromItemList(a0) & 0xF; gShopData.selectedRow = 0; if (!(ContextNpcGetTextColor())) gShopData.unk16_4 = 4; else gShopData.unk16_4 = 5; - gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShopMenuWindowTemplates - SetStdWindowBorderStyle(gUnknown_2039950, 0); - PrintTextArray(gUnknown_2039950, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); - Menu_InitCursor(gUnknown_2039950, 2, 0, 2, 16, 3, 0); - PutWindowTilemap(gUnknown_2039950); - CopyWindowToVram(gUnknown_2039950, 1); - return CreateTask(sub_809AC10, 8); + sShopMenuWindowId = AddWindow(gUnknown_83DF0BC); //sShopMenuWindowTemplates + SetStdWindowBorderStyle(sShopMenuWindowId, 0); + PrintTextArray(sShopMenuWindowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); + Menu_InitCursor(sShopMenuWindowId, 2, 0, 2, 16, 3, 0); + PutWindowTilemap(sShopMenuWindowId); + CopyWindowToVram(sShopMenuWindowId, 1); + return CreateTask(Task_ShopMenu, 8); } -static u8 sub_809AB7C(u32 a0) +static u8 GetMartTypeFromItemList(u32 a0) { u16 retVal, i; if (a0) @@ -304,35 +300,27 @@ static u8 sub_809AB7C(u32 a0) return 0; } -//SetShopItemsForSale -static void sub_809ABD8(const u16 *items) //I really don't know what GameFreak was thinking here.. +static void SetShopItemsForSale(const u16 *items) { struct ShopData *mart; - //u16 i; mart = &gShopData; mart->itemList = items; mart->itemCount = 0; - - //i = 0; if (mart->itemList[0] == 0) return; do { ++gShopData.itemCount; - //i = gShopData.itemCount; - //} while (mart->itemList[i]); } while (mart->itemList[gShopData.itemCount]); } -//SetShopMenuCallback -static void sub_809AC04(MainCallback callback) +static void SetShopMenuCallback(MainCallback callback) { gShopData.callback = callback; } -//Task_ShopMenu -static void sub_809AC10(u8 taskId) +static void Task_ShopMenu(u8 taskId) { s8 input = Menu_ProcessInputNoWrapAround(); @@ -342,7 +330,7 @@ static void sub_809AC10(u8 taskId) break; case MENU_B_PRESSED: PlaySE(SE_SELECT); - sub_809ACF8(taskId); + Task_HandleShopMenuQuit(taskId); break; default: gUnknown_83DF09C[Menu_GetCursorPos()].func.void_u8(taskId); @@ -350,47 +338,42 @@ static void sub_809AC10(u8 taskId) } } -//Task_HandleShopMenuBuy -static void sub_809AC5C(u8 taskId) +static void Task_HandleShopMenuBuy(u8 taskId) { - SetWordTaskArg(taskId, 0xE, (u32)sub_809AE14); + SetWordTaskArg(taskId, 0xE, (u32)CB2_InitBuyMenu); fade_screen(1, 0); - gTasks[taskId].func = sub_809AD40; + gTasks[taskId].func = Task_GoToBuyOrSellMenu; } -//Task_HandleShopMenuSell -static void sub_809AC98(u8 taskId) +static void Task_HandleShopMenuSell(u8 taskId) { - SetWordTaskArg(taskId, 0xE, (u32)sub_809ACD4); + SetWordTaskArg(taskId, 0xE, (u32)CB2_GoToSellMenu); fade_screen(1, 0); - gTasks[taskId].func = sub_809AD40; + gTasks[taskId].func = Task_GoToBuyOrSellMenu; } -//CB2_GoToSellMenu -static void sub_809ACD4(void) +static void CB2_GoToSellMenu(void) { sub_8107DB4(2, POCKET_POKE_BALLS, CB2_ReturnToField); - gFieldCallback = sub_809AD74; + gFieldCallback = MapPostLoadHook_ReturnToShopMenu; } -//Task_HandleShopMenuQuit -static void sub_809ACF8(u8 taskId) +static void Task_HandleShopMenuQuit(u8 taskId) { - sub_809AD24(); - sub_809C138(); + ClearShopMenuWindow(); + RecordQuestLogItemPurchase(); DestroyTask(taskId); if (gShopData.callback != 0) gShopData.callback(); } -static void sub_809AD24(void) +static void ClearShopMenuWindow(void) { - ClearStdWindowAndFrameToTransparent(gUnknown_2039950, 2); - RemoveWindow(gUnknown_2039950); + ClearStdWindowAndFrameToTransparent(sShopMenuWindowId, 2); + RemoveWindow(sShopMenuWindowId); } -//Task_GoToBuyOrSellMenu -static void sub_809AD40(u8 taskId) +static void Task_GoToBuyOrSellMenu(u8 taskId) { if (gPaletteFade.active) return; @@ -399,30 +382,26 @@ static void sub_809AD40(u8 taskId) DestroyTask(taskId); } -//MapPostLoadHook_ReturnToShopMenu -static void sub_809AD74(void) +static void MapPostLoadHook_ReturnToShopMenu(void) { sub_807DC00(); - CreateTask(sub_809AD8C, 8); + CreateTask(Task_ReturnToShopMenu, 8); } -//Task_ReturnToShopMenu -static void sub_809AD8C(u8 taskId) +static void Task_ReturnToShopMenu(u8 taskId) { if (field_weather_is_fade_finished() != TRUE) return; - DisplayItemMessageOnField(taskId, sub_809B56C(), gText_CanIHelpWithAnythingElse, sub_809ADC0); + DisplayItemMessageOnField(taskId, GetMartUnk16_4(), gText_CanIHelpWithAnythingElse, ShowShopMenuAfterExitingBuyOrSellMenu); } -//ShowShopMenuAfterExitingBuyOrSellMenu -static void sub_809ADC0(u8 taskId) +static void ShowShopMenuAfterExitingBuyOrSellMenu(u8 taskId) { - sub_809AAB0(gShopData.martType); + CreateShopMenu(gShopData.martType); DestroyTask(taskId); } -//CB2_BuyMenu -static void sub_809ADE4(void) +static void CB2_BuyMenu(void) { RunTasks(); AnimateSprites(); @@ -431,16 +410,14 @@ static void sub_809ADE4(void) DoScheduledBgTilemapCopiesToVram(); } -//VBlankCB_BuyMenu -static void sub_809AE00(void) +static void VBlankCB_BuyMenu(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -//CB2_InitBuyMenu -static void sub_809AE14(void) +static void CB2_InitBuyMenu(void) { u8 taskId; switch (gMain.state) @@ -456,15 +433,15 @@ static void sub_809AE14(void) ResetTasks(); ClearScheduledBgCopiesToVram(); ResetItemMenuIconState(); - if ((!(sub_809AF6C())) || (!(sub_809B188()))) + if ((!(InitShopData())) || (!(BuyMenuBuildListMenuTemplate()))) return; - sub_809AFD0(); + BuyMenuInitBgs(); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20); BuyMenuInitWindows(gShopData.martType); - sub_809B080(); + BuyMenuDecompressBgGraphics(); gMain.state++; break; case 1: @@ -475,49 +452,47 @@ static void sub_809AE14(void) default: gShopData.selectedRow = 0; gShopData.scrollOffset = 0; - sub_809B15C(); //BuyMenuDrawGraphics(); - sub_809B690(); //BuyMenuAddScrollIndicatorArrows(); - taskId = CreateTask(sub_809BBC0, 8); + BuyMenuDrawGraphics(); + BuyMenuAddScrollIndicatorArrows(); + taskId = CreateTask(Task_BuyMenu, 8); gTasks[taskId].tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); - SetVBlankCallback(sub_809AE00); - SetMainCallback2(sub_809ADE4); + SetVBlankCallback(VBlankCB_BuyMenu); + SetMainCallback2(CB2_BuyMenu); break; } } -//InitShopData -static bool8 sub_809AF6C(void) +static bool8 InitShopData(void) { - gUnknown_2039954 = Alloc(sizeof(*gUnknown_2039954)); - if (gUnknown_2039954 == 0) + gShopTilemapBuffer1 = Alloc(sizeof(*gShopTilemapBuffer1)); + if (gShopTilemapBuffer1 == 0) goto CANCEL; - gUnknown_2039958 = Alloc(sizeof(*gUnknown_2039958)); - if (gUnknown_2039958 == 0) + gShopTilemapBuffer2 = Alloc(sizeof(*gShopTilemapBuffer2)); + if (gShopTilemapBuffer2 == 0) goto CANCEL; - gUnknown_203995C = Alloc(sizeof(*gUnknown_203995C)); - if (gUnknown_203995C == 0) + gShopTilemapBuffer3 = Alloc(sizeof(*gShopTilemapBuffer3)); + if (gShopTilemapBuffer3 == 0) goto CANCEL; - gUnknown_2039960 = Alloc(sizeof(*gUnknown_2039960)); - if (gUnknown_2039960 == 0) + gShopTilemapBuffer4 = Alloc(sizeof(*gShopTilemapBuffer4)); + if (gShopTilemapBuffer4 == 0) goto CANCEL; return TRUE; CANCEL: - sub_809B604(); - sub_809B670(); + BuyMenuFreeMemory(); + SetShopExitCallback(); return FALSE; } -//BuyMenuInitBgs -static void sub_809AFD0(void) +static void BuyMenuInitBgs(void) { ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, gUnknown_83DF0C4, NELEMS(gUnknown_83DF0C4)); - SetBgTilemapBuffer(1, gUnknown_2039958); - SetBgTilemapBuffer(2, gUnknown_2039960); - SetBgTilemapBuffer(3, gUnknown_203995C); + SetBgTilemapBuffer(1, gShopTilemapBuffer2); + SetBgTilemapBuffer(2, gShopTilemapBuffer4); + SetBgTilemapBuffer(3, gShopTilemapBuffer3); SetGpuReg(0x10, 0); SetGpuReg(0x12, 0); SetGpuReg(0x14, 0); @@ -531,18 +506,17 @@ static void sub_809AFD0(void) ShowBg(0); ShowBg(1); ShowBg(2); - ShowBg(3); + ShowBg(3); } -//BuyMenuDecompressBgGraphics -static void sub_809B080(void) +static void BuyMenuDecompressBgGraphics(void) { void* pal; DecompressAndCopyTileDataToVram(1, gUnknown_8E85DC8, 0x480, 0x3DC, 0); if ((gShopData.martType) != MART_TYPE_TMHM) - LZDecompressWram(gUnknown_8E85EFC, gUnknown_2039954); //gBuyMenuFrame_Tilemap + LZDecompressWram(gUnknown_8E85EFC, gShopTilemapBuffer1); //gBuyMenuFrame_Tilemap else - LZDecompressWram(gUnknown_8E86038, gUnknown_2039954); //gBuyMenuFrame_TmHmTilemap + LZDecompressWram(gUnknown_8E86038, gShopTilemapBuffer1); //gBuyMenuFrame_TmHmTilemap pal = Alloc(0x40); LZDecompressWram(gUnknown_8E86170, pal); LoadPalette(pal, 0xB0, 0x20); @@ -564,11 +538,10 @@ static void sub_809B10C(bool32 a0) ScheduleBgCopyTilemapToVram(1); } -//BuyMenuDrawGraphics -static void sub_809B15C(void) +static void BuyMenuDrawGraphics(void) { sub_809B764(); - sub_809BAFC(); + BuyMenuCopyTilemapData(); BuyMenuDrawMoneyBox(); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(1); @@ -576,23 +549,22 @@ static void sub_809B15C(void) ScheduleBgCopyTilemapToVram(3); } -//BuyMenuBuildListMenuTemplate -static bool8 sub_809B188(void) +static bool8 BuyMenuBuildListMenuTemplate(void) { u16 i; u16 v; - struct ListMenuItem **list = &gUnknown_2039964; + struct ListMenuItem **list = &sShopMenuListMenu; struct ShopData *mart = &gShopData; - *list = Alloc((gShopData.itemCount + 1) * sizeof(*gUnknown_2039964)); - if (gUnknown_2039964 == 0) + *list = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuListMenu)); + if (sShopMenuListMenu == 0) goto FREE_MEMORY; - gUnknown_2039968 = Alloc((gShopData.itemCount + 1) * sizeof(*gUnknown_2039968)); - if (gUnknown_2039968 == 0) + sShopMenuItemStrings = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuItemStrings)); + if (sShopMenuItemStrings == 0) { FREE_MEMORY: - sub_809B604(); - sub_809B670(); + BuyMenuFreeMemory(); + SetShopExitCallback(); return FALSE; } @@ -602,14 +574,14 @@ static bool8 sub_809B188(void) for (i = 0; i < mart->itemCount; i++) { - sub_809B300(&gUnknown_2039964[i], mart->itemList[i], gUnknown_2039968[i]); //PokeMartWriteNameAndIdAt(u16 a0, u16 a1, u8* a2) + PokeMartWriteNameAndIdAt(&sShopMenuListMenu[i], mart->itemList[i], sShopMenuItemStrings[i]); //PokeMartWriteNameAndIdAt(u16 a0, u16 a1, u8* a2) } ADD_CANCEL: - StringCopy(gUnknown_2039968[i], gFameCheckerText_Cancel); - gUnknown_2039964[i].label = gUnknown_2039968[i]; - gUnknown_2039964[i].index = -2; - gMultiuseListMenuTemplate.items = gUnknown_2039964; + StringCopy(sShopMenuItemStrings[i], gFameCheckerText_Cancel); + sShopMenuListMenu[i].label = sShopMenuItemStrings[i]; + sShopMenuListMenu[i].index = -2; + gMultiuseListMenuTemplate.items = sShopMenuListMenu; gMultiuseListMenuTemplate.totalItems = gShopData.itemCount + 1; gMultiuseListMenuTemplate.windowId = 4; gMultiuseListMenuTemplate.header_X = 0; @@ -622,8 +594,8 @@ static bool8 sub_809B188(void) gMultiuseListMenuTemplate.fillValue = 0; gMultiuseListMenuTemplate.cursorPal = GetFontAttribute(2, 5); gMultiuseListMenuTemplate.cursorShadowPal = GetFontAttribute(2, 7); - gMultiuseListMenuTemplate.moveCursorFunc = sub_809B320; - gMultiuseListMenuTemplate.itemPrintFunc = sub_809B408; + gMultiuseListMenuTemplate.moveCursorFunc = BuyMenuPrintItemDescriptionAndShowItemIcon; + gMultiuseListMenuTemplate.itemPrintFunc = BuyMenuPrintPriceInList; gMultiuseListMenuTemplate.scrollMultiple = 0; gMultiuseListMenuTemplate.cursorKind = 0; @@ -641,16 +613,14 @@ static bool8 sub_809B188(void) return TRUE; } -//PokeMartWriteNameAndIdAt -static void sub_809B300(struct ListMenuItem *list, u16 index, u8* dst) +static void PokeMartWriteNameAndIdAt(struct ListMenuItem *list, u16 index, u8* dst) { CopyItemName(index, dst); list->label = dst; list->index = index; } -//BuyMenuPrintItemDescriptionAndShowItemIcon -static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list) +static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list) { const u8 *description; @@ -676,14 +646,13 @@ static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list) else //TM Mart { FillWindowPixelBuffer(6, PIXEL_FILL(0)); - sub_809B494(item); + LoadTmHmNameInMart(item); BuyMenuPrint(5, 2, description, 2, 3, 1, 0, 0, 0); } } -//BuyMenuPrintPriceInList -#ifdef NONMATCHING //this function was written very strangely.. -static void sub_809B408(u8 windowId, s32 item, u8 y) +#ifdef NONMATCHING +static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y) { u32 len, x; u8 *loc; @@ -709,7 +678,7 @@ static void sub_809B408(u8 windowId, s32 item, u8 y) } #else NAKED -static void sub_809B408(u8 windowId, s32 item, u8 y) +static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y) { asm_unified("\tpush {r4-r6,lr}\n" "\tsub sp, 0x14\n" @@ -779,13 +748,7 @@ static void sub_809B408(u8 windowId, s32 item, u8 y) } #endif - -/*=================================== -MATCHED/TESTED UP UNTIL HERE -===================================*/ - -//LoadTmHmNameInMart -static void sub_809B494(s32 item) +static void LoadTmHmNameInMart(s32 item) { if (item != INDEX_CANCEL) { @@ -803,19 +766,17 @@ static void sub_809B494(s32 item) } } -//GetMartUnk16_4 -u8 sub_809B56C(void) +u8 GetMartUnk16_4(void) { return gShopData.unk16_4; } -//BuyMenuPrintCursor -static void sub_809B57C(u8 listTaskId, u8 a1) +static void BuyMenuPrintCursor(u8 listTaskId, u8 a1) { - sub_809B59C(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), a1); + BuyMenuPrintCursorAtYPosition(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), a1); } -static void sub_809B59C(u8 y, u8 a1) +static void BuyMenuPrintCursorAtYPosition(u8 y, u8 a1) { if (a1 == 0xFF) { @@ -828,40 +789,37 @@ static void sub_809B59C(u8 y, u8 a1) } } -//BuyMenuFreeMemory -static void sub_809B604(void) +static void BuyMenuFreeMemory(void) { - if (gUnknown_2039954 != 0) - Free(gUnknown_2039954); + if (gShopTilemapBuffer1 != 0) + Free(gShopTilemapBuffer1); - if (gUnknown_2039958 != 0) - Free(gUnknown_2039958); + if (gShopTilemapBuffer2 != 0) + Free(gShopTilemapBuffer2); - if (gUnknown_203995C != 0) - Free(gUnknown_203995C); + if (gShopTilemapBuffer3 != 0) + Free(gShopTilemapBuffer3); - if (gUnknown_2039960 != 0) - Free(gUnknown_2039960); + if (gShopTilemapBuffer4 != 0) + Free(gShopTilemapBuffer4); - if (gUnknown_2039964 != 0) - Free(gUnknown_2039964); + if (sShopMenuListMenu != 0) + Free(sShopMenuListMenu); - if (gUnknown_2039968 != 0) - Free(gUnknown_2039968); + if (sShopMenuItemStrings != 0) + Free(sShopMenuItemStrings); FreeAllWindowBuffers(); } -//SetShopExitCallback -static void sub_809B670(void) +static void SetShopExitCallback(void) { - gFieldCallback = sub_809AD74; + gFieldCallback = MapPostLoadHook_ReturnToShopMenu; SetMainCallback2(CB2_ReturnToField); } -//BuyMenuAddScrollIndicatorArrows -static void sub_809B690(void) +static void BuyMenuAddScrollIndicatorArrows(void) { if (gShopData.martType != MART_TYPE_TMHM) { @@ -875,15 +833,13 @@ static void sub_809B690(void) } } -//BuyQuantityAddScrollIndicatorArrows -static void sub_809B6FC(void) +static void BuyQuantityAddScrollIndicatorArrows(void) { gShopData.unk18 = 1; gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0x98, 0x48, 0x68, 2, 0x6E, 0x6E, &gShopData.unk18); } -//BuyMenuRemoveScrollIndicatorArrows -static void sub_809B73C(void) +static void BuyMenuRemoveScrollIndicatorArrows(void) { if ((gShopData.unk16_11) == 0x1F) return; @@ -894,13 +850,12 @@ static void sub_809B73C(void) static void sub_809B764(void) { - sub_809B92C(); - sub_809BA40(); - sub_809B778(); + BuyMenuCollectEventObjectData(); + BuyMenuDrawEventObjects(); + BuyMenuDrawMapBg(); } -//BuyMenuDrawMapBg -static void sub_809B778(void) +static void BuyMenuDrawMapBg(void) { s16 i; s16 j; @@ -924,18 +879,17 @@ static void sub_809B778(void) if (metatile < NUM_METATILES_IN_PRIMARY) { - sub_809B850(i, j, (u16*)mapData->primaryTileset->metatiles + metatile * 8, metatileLayerType); + BuyMenuDrawMapMetatile(i, j, (u16*)mapData->primaryTileset->metatiles + metatile * 8, metatileLayerType); } else { - sub_809B850(i, j, (u16*)mapData->secondaryTileset->metatiles + ((metatile - NUM_METATILES_IN_PRIMARY) * 8), metatileLayerType); + BuyMenuDrawMapMetatile(i, j, (u16*)mapData->secondaryTileset->metatiles + ((metatile - NUM_METATILES_IN_PRIMARY) * 8), metatileLayerType); } } } } -//BuyMenuDrawMapMetatile -static void sub_809B850(s16 x, s16 y, const u16 *src, u8 metatileLayerType) +static void BuyMenuDrawMapMetatile(s16 x, s16 y, const u16 *src, u8 metatileLayerType) { u16 offset1 = x * 2; u16 offset2 = ((y << 0x16) + 0x400000) >> 0x10; @@ -943,22 +897,21 @@ static void sub_809B850(s16 x, s16 y, const u16 *src, u8 metatileLayerType) switch (metatileLayerType) { case 0: - sub_809B904(*gUnknown_2039960, offset1, offset2, src); - sub_809B904(*gUnknown_2039958, offset1, offset2, src + 4); + BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer4, offset1, offset2, src); + BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer2, offset1, offset2, src + 4); break; case 1: - sub_809B904(*gUnknown_203995C, offset1, offset2, src); - sub_809B904(*gUnknown_2039960, offset1, offset2, src + 4); + BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer3, offset1, offset2, src); + BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer4, offset1, offset2, src + 4); break; case 2: - sub_809B904(*gUnknown_203995C, offset1, offset2, src); - sub_809B904(*gUnknown_2039958, offset1, offset2, src + 4); + BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer3, offset1, offset2, src); + BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer2, offset1, offset2, src + 4); break; } } -//BuyMenuDrawMapMetatileLayer -static void sub_809B904(u16 *dest, s16 offset1, s16 offset2, const u16 *src) +static void BuyMenuDrawMapMetatileLayer(u16 *dest, s16 offset1, s16 offset2, const u16 *src) { // This function draws a whole 2x2 metatile. dest[offset1 + offset2] = src[0]; // top left @@ -967,9 +920,7 @@ static void sub_809B904(u16 *dest, s16 offset1, s16 offset2, const u16 *src) dest[offset1 + offset2 + 33] = src[3]; // bottom right } - -// BuyMenuCollectEventObjectData -static void sub_809B92C(void) +static void BuyMenuCollectEventObjectData(void) { s16 facingX; s16 facingY; @@ -982,7 +933,7 @@ static void sub_809B92C(void) z = PlayerGetZCoord(); for (y = 0; y < MAP_OBJECTS_COUNT; y++) - gUnknown_20398B4[y][EVENT_OBJ_ID] = MAP_OBJECTS_COUNT; + sViewportMapObjects[y][EVENT_OBJ_ID] = MAP_OBJECTS_COUNT; for (y = 0; y < 5; y++) { @@ -991,24 +942,24 @@ static void sub_809B92C(void) u8 eventObjId = GetFieldObjectIdByXYZ(facingX - 3 + x, facingY - 2 + y, z); if (eventObjId != MAP_OBJECTS_COUNT) { - gUnknown_20398B4[num][EVENT_OBJ_ID] = eventObjId; - gUnknown_20398B4[num][X_COORD] = x; - gUnknown_20398B4[num][Y_COORD] = y; + sViewportMapObjects[num][EVENT_OBJ_ID] = eventObjId; + sViewportMapObjects[num][X_COORD] = x; + sViewportMapObjects[num][Y_COORD] = y; switch (gMapObjects[eventObjId].facingDirection) { case DIR_SOUTH: - gUnknown_20398B4[num][ANIM_NUM] = 0; + sViewportMapObjects[num][ANIM_NUM] = 0; break; case DIR_NORTH: - gUnknown_20398B4[num][ANIM_NUM] = 1; + sViewportMapObjects[num][ANIM_NUM] = 1; break; case DIR_WEST: - gUnknown_20398B4[num][ANIM_NUM] = 2; + sViewportMapObjects[num][ANIM_NUM] = 2; break; case DIR_EAST: default: - gUnknown_20398B4[num][ANIM_NUM] = 3; + sViewportMapObjects[num][ANIM_NUM] = 3; break; } num++; @@ -1017,8 +968,7 @@ static void sub_809B92C(void) } } -//BuyMenuDrawEventObjects -static void sub_809BA40(void) +static void BuyMenuDrawEventObjects(void) { u8 i; u8 spriteId; @@ -1026,26 +976,26 @@ static void sub_809BA40(void) for (i = 0; i < MAP_OBJECTS_COUNT; i++) { - if (gUnknown_20398B4[i][EVENT_OBJ_ID] == MAP_OBJECTS_COUNT) + if (sViewportMapObjects[i][EVENT_OBJ_ID] == MAP_OBJECTS_COUNT) continue; - graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[gUnknown_20398B4[i][EVENT_OBJ_ID]].graphicsId); + graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[sViewportMapObjects[i][EVENT_OBJ_ID]].graphicsId); spriteId = AddPseudoEventObject( - gMapObjects[gUnknown_20398B4[i][EVENT_OBJ_ID]].graphicsId, + gMapObjects[sViewportMapObjects[i][EVENT_OBJ_ID]].graphicsId, SpriteCallbackDummy, - (((u16)gUnknown_20398B4[i][X_COORD] << 0x14) + 0xFFF80000) >> 0x10, - (u16)gUnknown_20398B4[i][Y_COORD] * 16 + 48 - graphicsInfo->height / 2, + (((u16)sViewportMapObjects[i][X_COORD] << 0x14) + 0xFFF80000) >> 0x10, + (u16)sViewportMapObjects[i][Y_COORD] * 16 + 48 - graphicsInfo->height / 2, 2); - StartSpriteAnim(&gSprites[spriteId], gUnknown_20398B4[i][ANIM_NUM]); + StartSpriteAnim(&gSprites[spriteId], sViewportMapObjects[i][ANIM_NUM]); } } -static void sub_809BAFC(void) +static void BuyMenuCopyTilemapData(void) { s16 i; - u16 *dst = *gUnknown_2039958; - u16 *src = *gUnknown_2039954; + u16 *dst = *gShopTilemapBuffer2; + u16 *src = *gShopTilemapBuffer1; for (i = 0; i < 0x400; i++) { @@ -1055,8 +1005,7 @@ static void sub_809BAFC(void) } } -//BuyMenuPrintItemQuantityAndPrice -static void sub_809BB44(u8 taskId) +static void BuyMenuPrintItemQuantityAndPrice(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -1067,8 +1016,7 @@ static void sub_809BB44(u8 taskId) BuyMenuPrint(3, 0, gStringVar4, 2, 0xA, 0, 0, 0, 1); } -//Task_BuyMenu -static void sub_809BBC0(u8 taskId) +static void Task_BuyMenu(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -1082,31 +1030,30 @@ static void sub_809BBC0(u8 taskId) break; case LIST_CANCEL: PlaySE(SE_SELECT); - sub_809C004(taskId); + ExitBuyMenu(taskId); break; default: PlaySE(SE_SELECT); tItemId = itemId; ClearWindowTilemap(5); - sub_809B73C(); - sub_809B57C(tListTaskId, 2); + BuyMenuRemoveScrollIndicatorArrows(); + BuyMenuPrintCursor(tListTaskId, 2); sub_809B10C(1); gShopData.itemPrice = itemid_get_market_price(itemId); if (!IsEnoughMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice)) { - BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, sub_809BF98); + BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, BuyMenuReturnToItemList); } else { CopyItemName(itemId, gStringVar1); - BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany, sub_809BCA0); + BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany, Task_BuyHowManyDialogueInit); } } } } -//Task_BuyHowManyDialogueInit -static void sub_809BCA0(u8 taskId) +static void Task_BuyHowManyDialogueInit(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -1119,7 +1066,7 @@ static void sub_809BCA0(u8 taskId) BuyMenuPrint(1, 2, gStringVar4, 0, 2, 0, 0, 0, 1); tItemCount = 1; BuyMenuQuantityBoxNormalBorder(3, 0); - sub_809BB44(taskId); + BuyMenuPrintItemQuantityAndPrice(taskId); ScheduleBgCopyTilemapToVram(0); maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / itemid_get_market_price(tItemId); if (maxQuantity > 99) @@ -1128,28 +1075,26 @@ static void sub_809BCA0(u8 taskId) gShopData.maxQuantity = (u8)maxQuantity; if (maxQuantity != 1) - sub_809B6FC(); + BuyQuantityAddScrollIndicatorArrows(); - gTasks[taskId].func = sub_809BD8C; + gTasks[taskId].func = Task_BuyHowManyDialogueHandleInput; } -//Task_BuyHowManyDialogueHandleInput -static void sub_809BD8C(u8 taskId) +static void Task_BuyHowManyDialogueHandleInput(u8 taskId) { s16 *data = gTasks[taskId].data; - if (AdjustQuantityAccordingToDPadInput(&tItemCount, gShopData.maxQuantity) == TRUE) { gShopData.itemPrice = itemid_get_market_price(tItemId) * tItemCount; - sub_809BB44(taskId); + BuyMenuPrintItemQuantityAndPrice(taskId); } else { if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - sub_809B73C(); + BuyMenuRemoveScrollIndicatorArrows(); ClearStdWindowAndFrameToTransparent(3, 0); ClearStdWindowAndFrameToTransparent(1, 0); ClearWindowTilemap(3); @@ -1158,72 +1103,67 @@ static void sub_809BD8C(u8 taskId) CopyItemName(tItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 2); ConvertIntToDecimalStringN(gStringVar3, gShopData.itemPrice, STR_CONV_MODE_LEFT_ALIGN, 8); - BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, sub_809BE90); + BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, CreateBuyMenuConfirmPurchaseWindow); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_809B73C(); + BuyMenuRemoveScrollIndicatorArrows(); ClearStdWindowAndFrameToTransparent(3, 0); ClearStdWindowAndFrameToTransparent(1, 0); ClearWindowTilemap(3); ClearWindowTilemap(1); - sub_809BF98(taskId); + BuyMenuReturnToItemList(taskId); } } } -//CreateBuyMenuConfirmPurchaseWindow -static void sub_809BE90(u8 taskId) +static void CreateBuyMenuConfirmPurchaseWindow(u8 taskId) { - BuyMenuConfirmPurchase(taskId, gUnknown_83DF0B4); //sShopBuyMenuYesNoWindowTemplates + BuyMenuConfirmPurchase(taskId, gUnknown_83DF0B4); } -//BuyMenuTryMakePurchase -static void sub_809BEA4(u8 taskId) +static void BuyMenuTryMakePurchase(u8 taskId) { s16 *data = gTasks[taskId].data; PutWindowTilemap(4); if (AddBagItem(tItemId, tItemCount) == TRUE) { - BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, sub_809BF0C); + BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, BuyMenuSubtractMoney); nullsub_52(taskId); - sub_809C09C(tItemId, tItemCount, 1); + RecordItemPurchase(tItemId, tItemCount, 1); } else { - BuyMenuDisplayMessage(taskId, gText_NoMoreRoomForThis, sub_809BF98); + BuyMenuDisplayMessage(taskId, gText_NoMoreRoomForThis, BuyMenuReturnToItemList); } } -//BuyMenuSubtractMoney -static void sub_809BF0C(u8 taskId) +static void BuyMenuSubtractMoney(u8 taskId) { IncrementGameStat(GAME_STAT_SHOPPED); RemoveMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice); PlaySE(SE_SHOP); PrintMoneyAmountInMoneyBox(0, GetMoney(&gSaveBlock1Ptr->money), 0); - gTasks[taskId].func = sub_809BF68; + gTasks[taskId].func = Task_ReturnToItemListAfterItemPurchase; } -//Task_ReturnToItemListAfterItemPurchase -static void sub_809BF68(u8 taskId) +static void Task_ReturnToItemListAfterItemPurchase(u8 taskId) { if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_809BF98(taskId); + BuyMenuReturnToItemList(taskId); } } -//BuyMenuReturnToItemList -static void sub_809BF98(u8 taskId) +static void BuyMenuReturnToItemList(u8 taskId) { s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrameToTransparent(2, 0); - sub_809B57C(tListTaskId, 1); + BuyMenuPrintCursor(tListTaskId, 1); sub_809B10C(0); PutWindowTilemap(4); PutWindowTilemap(5); @@ -1231,27 +1171,25 @@ static void sub_809BF98(u8 taskId) PutWindowTilemap(6); ScheduleBgCopyTilemapToVram(0); - sub_809B690(); - gTasks[taskId].func = sub_809BBC0; + BuyMenuAddScrollIndicatorArrows(); + gTasks[taskId].func = Task_BuyMenu; } -//ExitBuyMenu -static void sub_809C004(u8 taskId) +static void ExitBuyMenu(u8 taskId) { - gFieldCallback = sub_809AD74; + gFieldCallback = MapPostLoadHook_ReturnToShopMenu; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gTasks[taskId].func = sub_809C04C; + gTasks[taskId].func = Task_ExitBuyMenu; } -//Task_ExitBuyMenu -static void sub_809C04C(u8 taskId) +static void Task_ExitBuyMenu(u8 taskId) { s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { DestroyListMenuTask(tListTaskId, 0, 0); - sub_809B604(); + BuyMenuFreeMemory(); SetMainCallback2(CB2_ReturnToField); DestroyTask(taskId); } @@ -1266,52 +1204,54 @@ static void nullsub_53(void) } #ifdef NONMATCHING -void sub_809C09C(u16 item, u16 quantity, u8 a2) +void RecordItemPurchase(u16 item, u16 quantity, u8 a2) { struct MartHistory *tmp; - if (gUnknown_203996C.unkA == a2) + if (gShopMenuHistory.unkA == a2) { - tmp = &gUnknown_203996C; + tmp = &gShopMenuHistory; } else { - if (gUnknown_203996C.unk16 == a2) + if (gShopMenuHistory.unk16 == a2) { - tmp = &gUnknown_203996C + 12; + tmp = &gShopMenuHistory + 12; } else { - tmp = &gUnknown_203996C + 12; - if (gUnknown_203996C.unkA == 0) + tmp = &gShopMenuHistory + 12; + if (gShopMenuHistory.unkA == 0) { - tmp = &gUnknown_203996C; - gUnknown_203996C.unkA = a2; + tmp = &gShopMenuHistory; + gShopMenuHistory.unkA = a2; } } } + if (tmp->unk4 != 0) { - gUnknown_203996C.unk9 = 1; + gShopMenuHistory.unk9 = 1; } - gUnknown_203996C.unk4 = item; - if (gUnknown_203996C.unk6 <= 998) + gShopMenuHistory.unk4 = item; + if (gShopMenuHistory.unk6 <= 998) { - gUnknown_203996C.unk6 += item; + gShopMenuHistory.unk6 += item; if (item > 999) - gUnknown_203996C.unk6 = 999; + gShopMenuHistory.unk6 = 999; } - if (gUnknown_203996C.unk0 < 999998) + + if (gShopMenuHistory.unk0 < 999998) { - gUnknown_203996C.unk0 += ((s16)itemid_get_market_price(item) >> (quantity-1))*quantity; - if (gUnknown_203996C.unk0 > 999999) - gUnknown_203996C.unk0 = 999999; + gShopMenuHistory.unk0 += ((s16)itemid_get_market_price(item) >> (quantity-1))*quantity; + if (gShopMenuHistory.unk0 > 999999) + gShopMenuHistory.unk0 = 999999; } } #else NAKED -void sub_809C09C(u16 item, u16 quantity, u8 a2) +void RecordItemPurchase(u16 item, u16 quantity, u8 a2) { asm_unified("\tpush {r4-r6,lr}\n" "\tlsls r0, 16\n" @@ -1320,14 +1260,14 @@ void sub_809C09C(u16 item, u16 quantity, u8 a2) "\tlsrs r6, r1, 16\n" "\tlsls r2, 24\n" "\tlsrs r5, r2, 24\n" - "\tldr r1, _0809C0B8 @ =gUnknown_203996C\n" + "\tldr r1, _0809C0B8 @ =gShopMenuHistory\n" "\tldrb r2, [r1, 0xA]\n" "\tcmp r2, r5\n" "\tbne _0809C0BC\n" "\tadds r4, r1, 0\n" "\tb _0809C0D4\n" "\t.align 2, 0\n" - "_0809C0B8: .4byte gUnknown_203996C\n" + "_0809C0B8: .4byte gShopMenuHistory\n" "_0809C0BC:\n" "\tldrb r0, [r1, 0x16]\n" "\tcmp r0, r5\n" @@ -1395,10 +1335,9 @@ void sub_809C09C(u16 item, u16 quantity, u8 a2) } #endif -//RecordQuestLogItemPurchase -static void sub_809C138(void) +static void RecordQuestLogItemPurchase(void) { - struct MartHistory *history = &gUnknown_203996C; + struct MartHistory *history = &gShopMenuHistory; u16 v; v = history->unkA; @@ -1414,26 +1353,26 @@ static void sub_809C138(void) void CreatePokemartMenu(const u16 *itemsForSale) { - sub_809ABD8(itemsForSale); - sub_809AAB0(MART_TYPE_REGULAR); - sub_809AC04(EnableBothScriptContexts); + SetShopItemsForSale(itemsForSale); + CreateShopMenu(MART_TYPE_REGULAR); + SetShopMenuCallback(EnableBothScriptContexts); nullsub_53(); - memset(&gUnknown_203996C, 0, sizeof(struct MartHistory)); - gUnknown_203996C.unk8 = gMapHeader.regionMapSectionId; - gUnknown_203996C.unk14 = gMapHeader.regionMapSectionId; + memset(&gShopMenuHistory, 0, sizeof(struct MartHistory)); + gShopMenuHistory.unk8 = gMapHeader.regionMapSectionId; + gShopMenuHistory.unk14 = gMapHeader.regionMapSectionId; } void CreateDecorationShop1Menu(const u16 *itemsForSale) { - sub_809ABD8(itemsForSale); - sub_809AAB0(MART_TYPE_DECOR); - sub_809AC04(EnableBothScriptContexts); + SetShopItemsForSale(itemsForSale); + CreateShopMenu(MART_TYPE_DECOR); + SetShopMenuCallback(EnableBothScriptContexts); } void CreateDecorationShop2Menu(const u16 *itemsForSale) { - sub_809ABD8(itemsForSale); - sub_809AAB0(MART_TYPE_DECOR2); - sub_809AC04(EnableBothScriptContexts); + SetShopItemsForSale(itemsForSale); + CreateShopMenu(MART_TYPE_DECOR2); + SetShopMenuCallback(EnableBothScriptContexts); } diff --git a/src/tm_case.c b/src/tm_case.c index 25fe9a72c..9e5d32db9 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -1107,7 +1107,7 @@ static void Task_DoSaleOfTMs(u8 taskId) PlaySE(SE_SHOP); RemoveBagItem(gSpecialVar_ItemId, data[8]); AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]); - sub_809C09C(gSpecialVar_ItemId, data[8], 2); + RecordItemPurchase(gSpecialVar_ItemId, data[8], 2); DestroyListMenuTask(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); TMCaseSetup_GetTMCount(); TMCaseSetup_InitListMenuPositions(); diff --git a/sym_ewram.txt b/sym_ewram.txt index f2b58411a..2da51051b 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1,770 +1,732 @@ - .align 2 - .include "src/main.o" - .align 2 - .include "src/malloc.o" - .align 2 - .include "src/text_printer.o" - .align 2 - .include "src/window.o" - .align 2 - .include "src/window_8bpp.o" - .align 2 - .include "src/sprite.o" - .align 2 - .include "src/string_util.o" - .align 2 - .include "src/link.o" - .space 8 - - @ .include "src/link_rfu.o" - .align 2 - .include "src/battle_controllers.o" - .align 2 - .include "src/battle_main.o" - .align 2 - .include "src/pokemon.o" - .align 2 - .include "src/daycare.o" - .align 2 - .include "src/load_save.o" - .align 2 - .include "src/trade.o" - .align 2 - .include "src/trade_scene.o" - .align 2 - .include "src/new_game.o" - - .align 2 + .align 2 + .include "src/main.o" + .align 2 + .include "src/malloc.o" + .align 2 + .include "src/text_printer.o" + .align 2 + .include "src/window.o" + .align 2 + .include "src/window_8bpp.o" + .align 2 + .include "src/sprite.o" + .align 2 + .include "src/string_util.o" + .align 2 + .include "src/link.o" + .space 8 + + @ .include "src/link_rfu.o" + .align 2 + .include "src/battle_controllers.o" + .align 2 + .include "src/battle_main.o" + .align 2 + .include "src/pokemon.o" + .align 2 + .include "src/daycare.o" + .align 2 + .include "src/load_save.o" + .align 2 + .include "src/trade.o" + .align 2 + .include "src/trade_scene.o" + .align 2 + .include "src/new_game.o" + + .align 2 gUnknown_2031DB4: @ 2031DB4 - .space 0x8 + .space 0x8 gUnknown_2031DBC: @ 2031DBC - .space 0x8 + .space 0x8 gUnknown_2031DC4: @ 2031DC4 - .space 0x8 + .space 0x8 gUnknown_2031DCC: @ 2031DCC - .space 0x8 + .space 0x8 gUnknown_2031DD4: @ 2031DD4 - .space 0x4 + .space 0x4 gDisableMapMusicChangeOnMapLoad: @ 2031DD8 - .space 0x2 + .space 0x2 gUnknown_2031DDA: @ 2031DDA - .space 0x2 + .space 0x2 gUnknown_2031DDC: @ 2031DDC - .space 0x4 + .space 0x4 gUnknown_2031DE0: @ 2031DE0 - .space 0x4 + .space 0x4 gUnknown_2031DE4: @ 2031DE4 - .space 0x4 + .space 0x4 gUnknown_2031DE8: @ 2031DE8 - .space 0x2 + .space 0x2 gUnknown_2031DEA: @ 2031DEA - .space 0x2 + .space 0x2 gUnknown_2031DEC: @ 2031DEC - .space 0x10 + .space 0x10 - .align 2 - .include "src/fieldmap.o" + .align 2 + .include "src/fieldmap.o" gUnknown_2036E28: @ 2036E28 - .space 0x4 + .space 0x4 gUnknown_2036E2C: @ 2036E2C - .space 0x4 + .space 0x4 gUnknown_2036E30: @ 2036E30 - .space 0x4 + .space 0x4 gUnknown_2036E34: @ 2036E34 - .space 0x4 + .space 0x4 gMapObjects: @ 2036E38 - .space 0x240 + .space 0x240 gPlayerAvatar: @ 2037078 - .space 0x20 + .space 0x20 gUnknown_2037098: @ 2037098 - .space 0x2 + .space 0x2 gUnknown_203709A: @ 203709A - .space 0x2 + .space 0x2 gUnknown_203709C: @ 203709C - .space 0x4 - - .align 2 - .include "src/script.o" - .align 2 - .include "src/scrcmd.o" - .align 2 - .include "src/event_data.o" - .align 2 - .include "src/start_menu.o" - .align 2 - .include "src/tileset_anims.o" - .align 2 - .include "src/palette.o" - .align 2 - .include "src/sound.o" - - .align 2 + .space 0x4 + + .align 2 + .include "src/script.o" + .align 2 + .include "src/scrcmd.o" + .align 2 + .include "src/event_data.o" + .align 2 + .include "src/start_menu.o" + .align 2 + .include "src/tileset_anims.o" + .align 2 + .include "src/palette.o" + .align 2 + .include "src/sound.o" + + .align 2 gUnknown_2037ED4: @ 2037ED4 - .space 0x4 + .space 0x4 gUnknown_2037ED8: @ 2037ED8 - .space 0x4 + .space 0x4 gAnimScriptCallback: @ 2037EDC - .space 0x4 + .space 0x4 gUnknown_2037EE0: @ 2037EE0 - .space 0x1 + .space 0x1 gAnimScriptActive: @ 2037EE1 - .space 0x1 + .space 0x1 gAnimVisualTaskCount: @ 2037EE2 - .space 0x1 + .space 0x1 gUnknown_2037EE3: @ 2037EE3 - .space 0x1 + .space 0x1 gAnimDisableStructPtr: @ 2037EE4 - .space 0x4 + .space 0x4 gAnimMoveDmg: @ 2037EE8 - .space 0x4 + .space 0x4 gAnimMovePower: @ 2037EEC - .space 0x2 + .space 0x2 gUnknown_2037EEE: @ 2037EEE - .space 0x10 + .space 0x10 gAnimFriendship: @ 2037EFE - .space 0x2 + .space 0x2 gWeatherMoveAnim: @ 2037F00 - .space 0x2 + .space 0x2 gBattleAnimArgs: @ 2037F02 - .space 0x10 + .space 0x10 gUnknown_2037F12: @ 2037F12 - .space 0x2 + .space 0x2 gUnknown_2037F14: @ 2037F14 - .space 0x2 + .space 0x2 gAnimMoveTurn: @ 2037F16 - .space 0x1 + .space 0x1 gUnknown_2037F17: @ 2037F17 - .space 0x1 + .space 0x1 gUnknown_2037F18: @ 2037F18 - .space 0x2 + .space 0x2 gBattleAnimAttacker: @ 2037F1A - .space 0x1 + .space 0x1 gBattleAnimTarget: @ 2037F1B - .space 0x1 + .space 0x1 gAnimBattlerSpecies: @ 2037F1C - .space 0x8 + .space 0x8 gUnknown_2037F24: @ 2037F24 - .space 0x4 + .space 0x4 - .align 2 - .include "src/battle_anim_mons.o" - .align 2 - .include "src/title_screen.o" + .align 2 + .include "src/battle_anim_mons.o" + .align 2 + .include "src/title_screen.o" - .align 2 + .align 2 gUnknown_2037F34: @ 2037F34 - .space 0x200 + .space 0x200 gUnknown_2038134: @ 2038134 - .space 0x260 + .space 0x260 gUnknown_2038394: @ 2038394 - .space 0x2F0 + .space 0x2F0 gUnknown_2038684: @ 2038684 - .space 0x20 + .space 0x20 gUnknown_20386A4: @ 20386A4 - .space 0x4 + .space 0x4 gUnknown_20386A8: @ 20386A8 - .space 0x4 + .space 0x4 - .include "src/battle_setup.o" - .align 2 - .include "src/wild_encounter.o" + .include "src/battle_setup.o" + .align 2 + .include "src/wild_encounter.o" - .align 2 + .align 2 gFieldEffectArguments: @ 20386E0 - .space 0x20 + .space 0x20 - .align 2 - .include "src/scanline_effect.o" + .align 2 + .include "src/scanline_effect.o" - .align 2 - .include "src/option_menu.o" + .align 2 + .include "src/option_menu.o" gTrainerCards: @ 2039624 - .space 0x180 + .space 0x180 gUnknown_20397A4: @ 20397A4 - .space 0x4 + .space 0x4 gUnknown_20397A8: @ 20397A8 - .space 0x4 + .space 0x4 gUnknown_20397AC: @ 20397AC - .space 0x4 + .space 0x4 gUnknown_20397B0: @ 20397B0 - .space 0x4 + .space 0x4 gUnknown_20397B4: @ 20397B4 - .space 0x1 + .space 0x1 gUnknown_20397B5: @ 20397B5 - .space 0x1 + .space 0x1 gUnknown_20397B6: @ 20397B6 - .space 0x1 + .space 0x1 gUnknown_20397B7: @ 20397B7 - .space 0x1 + .space 0x1 gUnknown_20397B8: @ 20397B8 - .space 0x2 + .space 0x2 gUnknown_20397BA: @ 20397BA - .space 0x2 + .space 0x2 gUnknown_20397BC: @ 20397BC - .space 0x64 + .space 0x64 gUnknown_2039820: @ 2039820 - .space 0x1 + .space 0x1 gUnknown_2039821: @ 2039821 - .space 0x1 + .space 0x1 gUnknown_2039822: @ 2039822 - .space 0x1 + .space 0x1 gUnknown_2039823: @ 2039823 - .space 0x1 + .space 0x1 gUnknown_2039824: @ 2039824 - .space 0x1 + .space 0x1 gUnknown_2039825: @ 2039825 - .space 0x1 + .space 0x1 gUnknown_2039826: @ 2039826 - .space 0x2 + .space 0x2 gUnknown_2039828: @ 2039828 - .space 0x4 + .space 0x4 gUnknown_203982C: @ 203982C - .space 0x4 + .space 0x4 gUnknown_2039830: @ 2039830 - .space 0x40 + .space 0x40 gUnknown_2039870: @ 2039870 - .space 0x4 + .space 0x4 gUnknown_2039874: @ 2039874 - .space 0x4 + .space 0x4 - .align 2 - .include "src/item_menu_icons.o" + .align 2 + .include "src/item_menu_icons.o" gBagPockets: @ 203988C - .space 0x28 + .space 0x28 -gUnknown_20398B4: @ 20398B4 - .space 0x4 + .align 2 + .include "src/shop.o" + .align 2 + .include "src/sea_cottage_special_anim.o" + .align 2 + .include "src/script_menu.o" -gUnknown_20398B8: @ 20398B8 - .space 0x2 - -gUnknown_20398BA: @ 20398BA - .space 0x7A - -gShopData: @ 2039934 - .space 0xE - -gUnknown_2039942: @ 2039942 - .space 0xE - -gUnknown_2039950: @ 2039950 - .space 0x4 - -gUnknown_2039954: @ 2039954 - .space 0x4 - -gUnknown_2039958: @ 2039958 - .space 0x4 - -gUnknown_203995C: @ 203995C - .space 0x4 - -gUnknown_2039960: @ 2039960 - .space 0x4 - -gUnknown_2039964: @ 2039964 - .space 0x4 - -gUnknown_2039968: @ 2039968 - .space 0x4 - -gUnknown_203996C: @ 203996C - .space 0x18 - -gUnknown_2039984: @ 2039984 - .space 0x4 - - .align 2 - .include "src/script_menu.o" - - .align 2 + .align 2 gUnknown_203998C: @ 203998C - .space 0x4 + .space 0x4 - .align 2 - .include "src/money.o" + .align 2 + .include "src/money.o" - .align 2 - .include "src/safari_zone.o" - .align 2 - .include "src/item_use.o" + .align 2 + .include "src/safari_zone.o" + .align 2 + .include "src/item_use.o" - .align 2 + .align 2 gUnknown_203999C: @ 203999C - .space 0x8 - - .align 2 - .include "src/dragon.o" - .align 2 - .include "src/battle_anim_utility_funcs.o" - .align 2 - .include "src/battle_intro.o" - .align 2 - .include "src/easy_chat.o" - .align 2 - .include "src/mon_markings.o" - .align 2 - .include "src/mail.o" - .align 2 - .include "src/menu_helpers.o" - - .align 2 + .space 0x8 + + .align 2 + .include "src/dragon.o" + .align 2 + .include "src/battle_anim_utility_funcs.o" + .align 2 + .include "src/battle_intro.o" + .align 2 + .include "src/easy_chat.o" + .align 2 + .include "src/mon_markings.o" + .align 2 + .include "src/mail.o" + .align 2 + .include "src/menu_helpers.o" + + .align 2 gUnknown_20399D4: @ 20399D4 - .space 0x4 + .space 0x4 gUnknown_20399D8: @ 20399D8 - .space 0x4 + .space 0x4 gUnknown_20399DC: @ 20399DC - .space 0x4 + .space 0x4 gUnknown_20399E0: @ 20399E0 - .space 0x4 + .space 0x4 gUnknown_20399E4: @ 20399E4 - .space 0x4 + .space 0x4 gUnknown_20399E8: @ 20399E8 - .space 0x4 + .space 0x4 gUnknown_20399EC: @ 20399EC - .space 0x4 + .space 0x4 gUnknown_20399F0: @ 20399F0 - .space 0xC + .space 0xC gUnknown_20399FC: @ 20399FC - .space 0x4 + .space 0x4 gAIScriptPtr: @ 2039A00 - .space 0x4 + .space 0x4 gPlayerFacingPosition: @ 2039A04 - .space 0x8 - - .align 2 - .include "src/field_specials.o" - .align 2 - .include "src/battle_records.o" - .align 2 - .include "src/evolution_scene.o" - .align 2 - .include "src/coins.o" - .align 2 - .include "src/battle_transition.o" + .space 0x8 + + .align 2 + .include "src/field_specials.o" + .align 2 + .include "src/battle_records.o" + .align 2 + .include "src/evolution_scene.o" + .align 2 + .include "src/coins.o" + .align 2 + .include "src/battle_transition.o" gUnknown_2039A30: @ 2039A30 - .space 0x4 + .space 0x4 gUnknown_2039A34: @ 2039A34 - .space 0x4 + .space 0x4 - .align 2 - .include "src/save.o" - .align 2 - .include "src/mystery_event_script.o" + .align 2 + .include "src/save.o" + .align 2 + .include "src/mystery_event_script.o" gUnknown_203AAB0: @ 203AAB0 - .space 0x4 - - .align 2 - .include "src/learn_move.o" - .align 2 - .include "src/battle_tower.o" - .align 2 - .include "src/player_pc.o" - .align 2 - .include "src/intro.o" - .align 2 - .include "src/hall_of_fame.o" - .align 2 - .include "src/credits.o" - .align 2 - .include "src/diploma.o" - - .align 2 + .space 0x4 + + .align 2 + .include "src/learn_move.o" + .align 2 + .include "src/battle_tower.o" + .align 2 + .include "src/player_pc.o" + .align 2 + .include "src/intro.o" + .align 2 + .include "src/hall_of_fame.o" + .align 2 + .include "src/credits.o" + .align 2 + .include "src/diploma.o" + + .align 2 gUnknown_203AB4C: @ 203AB4C - .space 0x4 + .space 0x4 gUnknown_203AB50: @ 203AB50 - .space 0x4 + .space 0x4 gUnknown_203AB54: @ 203AB54 - .space 0x4 + .space 0x4 - .include "src/new_menu_helpers.o" - .align 2 + .include "src/new_menu_helpers.o" + .align 2 gUnknown_203ABE4: @ 203ABE4 - .space 0x4 + .space 0x4 gUnknown_203ABE8: @ 203ABE8 - .space 0x4 + .space 0x4 - .align 2 - .include "src/map_preview_screen.o" + .align 2 + .include "src/map_preview_screen.o" - .align 2 + .align 2 gUnknown_203ABF0: @ 203ABF0 - .space 0x18 + .space 0x18 gUnknown_203AC08: @ 203AC08 - .space 0xDC + .space 0xDC gUnknown_203ACE4: @ 203ACE4 - .space 0x4 + .space 0x4 gUnknown_203ACE8: @ 203ACE8 - .space 0x4 + .space 0x4 gUnknown_203ACEC: @ 203ACEC - .space 0x4 + .space 0x4 gUnknown_203ACF0: @ 203ACF0 - .space 0x4 + .space 0x4 - .align 2 - .include "src/list_menu.o" - .align 2 + .align 2 + .include "src/list_menu.o" + .align 2 gUnknown_203ACFC: @ 203ACFC - .space 0x6 + .space 0x6 gUnknown_203AD02: @ 203AD02 - .space 0x2 + .space 0x2 gUnknown_203AD04: @ 203AD04 - .space 0x6 + .space 0x6 gUnknown_203AD0A: @ 203AD0A - .space 0x6 + .space 0x6 gUnknown_203AD10: @ 203AD10 - .space 0x4 + .space 0x4 gUnknown_203AD14: @ 203AD14 - .space 0x4 + .space 0x4 gUnknown_203AD18: @ 203AD18 - .space 0x4 + .space 0x4 gUnknown_203AD1C: @ 203AD1C - .space 0x4 + .space 0x4 gUnknown_203AD20: @ 203AD20 - .space 0x4 + .space 0x4 gUnknown_203AD24: @ 203AD24 - .space 0x4 + .space 0x4 gUnknown_203AD28: @ 203AD28 - .space 0x4 + .space 0x4 gUnknown_203AD2C: @ 203AD2C - .space 0x4 + .space 0x4 gSpecialVar_ItemId: @ 203AD30 - .space 0x4 - - .align 2 - .include "src/bag.o" - .align 2 - .include "src/trainer_pokemon_sprites.o" - .align 2 - .include "src/vs_seeker.o" - .align 2 - .include "src/item_pc.o" - .align 2 - .include "src/mailbox_pc.o" - .align 2 - .include "src/menu.o" - .align 2 - .include "src/quest_log.o" - - .align 2 + .space 0x4 + + .align 2 + .include "src/bag.o" + .align 2 + .include "src/trainer_pokemon_sprites.o" + .align 2 + .include "src/vs_seeker.o" + .align 2 + .include "src/item_pc.o" + .align 2 + .include "src/mailbox_pc.o" + .align 2 + .include "src/menu.o" + .align 2 + .include "src/quest_log.o" + + .align 2 gUnknown_203B04C: @ 203B04C - .space 0xC + .space 0xC gUnknown_203B058: @ 203B058 - .space 0x1 + .space 0x1 gUnknown_203B059: @ 203B059 - .space 0x3 + .space 0x3 gUnknown_203B05C: @ 203B05C - .space 0x8 + .space 0x8 gUnknown_203B064: @ 203B064 - .space 0x4 + .space 0x4 gUnknown_203B068: @ 203B068 - .space 0x2 + .space 0x2 gUnknown_203B06A: @ 203B06A - .space 0x2 + .space 0x2 gUnknown_203B06C: @ 203B06C - .space 0x18 + .space 0x18 gUnknown_203B084: @ 203B084 - .space 0x4 + .space 0x4 gUnknown_203B088: @ 203B088 - .space 0x4 + .space 0x4 gUnknown_203B08C: @ 203B08C - .space 0x4 + .space 0x4 gUnknown_203B090: @ 203B090 - .space 0x4 + .space 0x4 gUnknown_203B094: @ 203B094 - .space 0x4 + .space 0x4 gUnknown_203B098: @ 203B098 - .space 0x4 + .space 0x4 gUnknown_203B09C: @ 203B09C - .space 0x4 + .space 0x4 gUnknown_203B0A0: @ 203B0A0 - .space 0x9 + .space 0x9 gUnknown_203B0A9: @ 203B0A9 - .space 0x5 + .space 0x5 gUnknown_203B0AE: @ 203B0AE - .space 0x6 + .space 0x6 gUnknown_203B0B4: @ 203B0B4 - .space 0x4 + .space 0x4 gUnknown_203B0B8: @ 203B0B8 - .space 0x4 + .space 0x4 gUnknown_203B0BC: @ 203B0BC - .space 0x4 + .space 0x4 gUnknown_203B0C0: @ 203B0C0 - .space 0x1 + .space 0x1 gUnknown_203B0C1: @ 203B0C1 - .space 0x3 + .space 0x3 gPostMenuFieldCallback: @ 203B0C4 - .space 0x4 + .space 0x4 gUnknown_203B0C8: @ 203B0C8 - .space 0x4 + .space 0x4 gUnknown_203B0CC: @ 203B0CC - .space 0x4 + .space 0x4 gUnknown_203B0D0: @ 203B0D0 - .space 0x4 + .space 0x4 gSelectedOrderFromParty: @ 203B0D4 - .space 0x4 + .space 0x4 gUnknown_203B0D8: @ 203B0D8 - .space 0x4 + .space 0x4 gUnknown_203B0DC: @ 203B0DC - .space 0x4 + .space 0x4 gUnknown_203B0E0: @ 203B0E0 - .space 0x4 + .space 0x4 gUnknown_203B0E4: @ 203B0E4 - .space 0x4 + .space 0x4 gUnknown_203B0E8: @ 203B0E8 - .space 0x4 - - .align 2 - .include "src/help_system_812B1E0.o" - .align 2 - .include "src/fame_checker.o" - .align 2 - .include "src/oak_speech.o" - .align 2 - .include "src/tm_case.o" - .include "src/menu_indicators.o" + .space 0x4 + + .align 2 + .include "src/help_system_812B1E0.o" + .align 2 + .include "src/fame_checker.o" + .align 2 + .include "src/oak_speech.o" + .align 2 + .include "src/tm_case.o" + .include "src/menu_indicators.o" gUnknown_203B140: @ 203B140 - .space 0x4 + .space 0x4 gUnknown_203B144: @ 203B144 - .space 0x4 + .space 0x4 gUnknown_203B148: @ 203B148 - .space 0x10 + .space 0x10 gUnknown_203B158: @ 203B158 - .space 0x4 + .space 0x4 gUnknown_203B15C: @ 203B15C - .space 0x4 + .space 0x4 gUnknown_203B160: @ 203B160 - .space 0x4 + .space 0x4 gUnknown_203B164: @ 203B164 - .space 0x4 + .space 0x4 gUnknown_203B168: @ 203B168 - .space 0x4 + .space 0x4 gUnknown_203B16C: @ 203B16C - .space 0x1 + .space 0x1 gUnknown_203B16D: @ 203B16D - .space 0x1 + .space 0x1 gUnknown_203B16E: @ 203B16E - .space 0x2 + .space 0x2 gUnknown_203B170: @ 203B170 - .space 0x4 + .space 0x4 - .align 2 - .include "src/help_system.o" - .align 2 - .include "src/dynamic_placeholder_text_util.o" - .align 2 - .include "src/berry_pouch.o" - .align 2 - .include "src/slot_machine.o" + .align 2 + .include "src/help_system.o" + .align 2 + .include "src/dynamic_placeholder_text_util.o" + .align 2 + .include "src/berry_pouch.o" + .align 2 + .include "src/slot_machine.o" sLocationHistory: @ 203F3A8 - .space 0x6 + .space 0x6 sRoamerLocation: @ 203F3AE - .space 0x2 - - .align 2 - .include "src/mystery_gift_menu.o" - .align 2 - .include "src/mevent.o" - .align 2 - .include "src/mevent_server_helpers.o" - .align 2 - .include "src/mevent_client.o" - .align 2 - .include "src/mevent_server.o" - .align 2 - .include "src/mevent_8145654.o" - .align 2 - .include "src/seagallop.o" - - .align 2 + .space 0x2 + + .align 2 + .include "src/mystery_gift_menu.o" + .align 2 + .include "src/mevent.o" + .align 2 + .include "src/mevent_server_helpers.o" + .align 2 + .include "src/mevent_client.o" + .align 2 + .include "src/mevent_server.o" + .align 2 + .include "src/mevent_8145654.o" + .align 2 + .include "src/seagallop.o" + + .align 2 gUnknown_203F3D4: @ 203F3D4 - .space 0x4 + .space 0x4 gUnknown_203F3D8: @ 203F3D8 - .space 0x4 + .space 0x4 gUnknown_203F3DC: @ 203F3DC - .space 0x4 + .space 0x4 gUnknown_203F3E0: @ 203F3E0 - .space 0x4 + .space 0x4 gUnknown_203F3E4: @ 203F3E4 - .space 0x14 + .space 0x14 gUnknown_203F3F8: @ 203F3F8 - .space 0x8 + .space 0x8 gUnknown_203F400: @ 203F400 - .space 0x2C + .space 0x2C gUnknown_203F42C: @ 203F42C - .space 0x10 + .space 0x10 gUnknown_203F43C: @ 203F43C - .space 0x4 + .space 0x4 gUnknown_203F440: @ 203F440 - .space 0x4 - - .align 2 - .include "src/teachy_tv.o" - .align 2 - .include "src/unk_815C980.o" - .align 2 - .include "src/trainer_tower.o" - .align 2 - .include "src/berry_powder.o" + .space 0x4 + + .align 2 + .include "src/teachy_tv.o" + .align 2 + .include "src/unk_815C980.o" + .align 2 + .include "src/trainer_tower.o" + .align 2 + .include "src/berry_powder.o" -- cgit v1.2.3 From d1142b4290e8688a0d42bfc1b95b9d90b1721459 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 26 Nov 2019 11:47:12 -0700 Subject: extract graphics data --- data/graphics.s | 16 +++--- graphics/shop_menu/shop_menu.pal | 35 ++++++++++++ graphics/shop_menu/shop_menu.png | Bin 0 -> 261 bytes graphics/shop_menu/shop_tilemap.bin | Bin 0 -> 316 bytes graphics/shop_menu/shop_tmHmTilemap.bin | Bin 0 -> 312 bytes include/graphics.h | 6 ++ include/sea_cottage.h | 1 - include/shop.h | 2 - src/sea_cottage_special_anim.c | 86 ++++++++++++++++------------ src/shop.c | 98 ++++++++++++++------------------ 10 files changed, 143 insertions(+), 101 deletions(-) create mode 100644 graphics/shop_menu/shop_menu.pal create mode 100644 graphics/shop_menu/shop_menu.png create mode 100644 graphics/shop_menu/shop_tilemap.bin create mode 100644 graphics/shop_menu/shop_tmHmTilemap.bin diff --git a/data/graphics.s b/data/graphics.s index 5eacc0cb2..ec4fc10dd 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -14008,17 +14008,17 @@ gBerryPouchSpritePalette:: @ 8E85C1C gBerryPouchBg1Tilemap:: @ 8E85C44 .incbin "graphics/berry_pouch/unk_8E85C44.bin.lz" -gUnknown_8E85DC8:: @ 8E85DC8 - .incbin "baserom.gba", 0xE85DC8, 0x134 +gBuyMenuFrame_Gfx:: @ 8E85DC8 + .incbin "graphics/shop_menu/shop_menu.4bpp.lz" -gUnknown_8E85EFC:: @ 8E85EFC - .incbin "baserom.gba", 0xE85EFC, 0x13C +gBuyMenuFrame_Tilemap:: @ 8E85EFC + .incbin "graphics/shop_menu/shop_tilemap.bin" -gUnknown_8E86038:: @ 8E86038 - .incbin "baserom.gba", 0xE86038, 0x138 +gBuyMenuFrame_TmHmTilemap:: @ 8E86038 + .incbin "graphics/shop_menu/shop_tmHmTilemap.bin" -gUnknown_8E86170:: @ 8E86170 - .incbin "baserom.gba", 0xE86170, 0x38 +gBuyMenuFrame_Pal:: @ 8E86170 + .incbin "graphics/shop_menu/shop_menu.gbapal.lz" gUnknown_8E861A8:: @ 8E861A8 .incbin "baserom.gba", 0xE861A8, 0x98 diff --git a/graphics/shop_menu/shop_menu.pal b/graphics/shop_menu/shop_menu.pal new file mode 100644 index 000000000..b0fec0a30 --- /dev/null +++ b/graphics/shop_menu/shop_menu.pal @@ -0,0 +1,35 @@ +JASC-PAL +0100 +32 +238 230 172 +222 156 106 +255 189 131 +255 222 164 +255 255 213 +238 230 172 +106 106 106 +189 213 213 +238 255 255 +222 246 255 +255 255 255 +164 222 255 +16 172 222 +0 82 115 +0 115 139 +0 123 197 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +189 213 213 +238 255 255 +222 246 255 +255 255 255 +164 222 255 +24 82 180 +0 90 131 +24 82 180 +24 82 180 diff --git a/graphics/shop_menu/shop_menu.png b/graphics/shop_menu/shop_menu.png new file mode 100644 index 000000000..23af464a2 Binary files /dev/null and b/graphics/shop_menu/shop_menu.png differ diff --git a/graphics/shop_menu/shop_tilemap.bin b/graphics/shop_menu/shop_tilemap.bin new file mode 100644 index 000000000..8d5ab35b7 Binary files /dev/null and b/graphics/shop_menu/shop_tilemap.bin differ diff --git a/graphics/shop_menu/shop_tmHmTilemap.bin b/graphics/shop_menu/shop_tmHmTilemap.bin new file mode 100644 index 000000000..92fbb7dad Binary files /dev/null and b/graphics/shop_menu/shop_tmHmTilemap.bin differ diff --git a/include/graphics.h b/include/graphics.h index 354339235..559036ef7 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4239,4 +4239,10 @@ extern const u16 gUnknown_8E97DDC[]; extern const u32 gUnknown_8E97DFC[]; extern const u32 gUnknown_8E97EC4[]; +// shop menu +extern const u32 gBuyMenuFrame_Gfx[]; +extern const u32 gBuyMenuFrame_Tilemap[]; +extern const u32 gBuyMenuFrame_TmHmTilemap[]; +extern const u32 gBuyMenuFrame_Pal[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/sea_cottage.h b/include/sea_cottage.h index dce6862ff..d9885edd5 100644 --- a/include/sea_cottage.h +++ b/include/sea_cottage.h @@ -3,7 +3,6 @@ #include "global.h" -void sub_809C1D8(u8 taskId, const u16* a1, u16 a2); void sub_809C448(u8 a0); void sub_809C460(void); bool8 sub_809C474(void); diff --git a/include/shop.h b/include/shop.h index 91ce421aa..75e1f7298 100644 --- a/include/shop.h +++ b/include/shop.h @@ -9,8 +9,6 @@ #define INDEX_CANCEL -2 -#define NUM_CHARS_PRICE 4 - extern EWRAM_DATA struct ItemSlot gUnknown_02039F80[3]; void CreatePokemartMenu(const u16 *itemsForSale); diff --git a/src/sea_cottage_special_anim.c b/src/sea_cottage_special_anim.c index 67fc70209..542329893 100644 --- a/src/sea_cottage_special_anim.c +++ b/src/sea_cottage_special_anim.c @@ -7,21 +7,18 @@ #include "field_map_obj.h" #include "field_camera.h" -// Defines #define t0 data[0] #define tX data[4] +#define tY data[5] #define tListTaskId data[7] -// RAM EWRAM_DATA u8 gUnknown_2039984 = 0; - -// Function Declarations +static void sub_809C1D8(u8 taskId, const u16* a1, u16 a2); static void sub_809C334(u8 taskId); static void sub_809C500(u8 taskId); static void sub_809C640(u8 taskId); -// Data Definitions static const u16 gUnknown_83DF0D4[] = {0x0308, 0x030a, 0x02d0}; static const u16 gUnknown_83DF0DA[] = {0x0309, 0x030b, 0x02d1}; static const u16 gUnknown_83DF0E0[] = {0x0310, 0x0312, 0x02d8}; @@ -30,34 +27,52 @@ static const u16 gUnknown_83DF0EC[] = {0x02e3, 0x0316, 0x0314}; static const u16 gUnknown_83DF0F2[] = {0x02e4, 0x0317, 0x0315}; static const u16 gUnknown_83DF0F8[] = {0x02eb, 0x031e, 0x031c}; - // Functions #ifdef NONMATCHING -void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) +// Couldn't get the registers to match. Hard to know where to fix since I'm unsure what the variables are for. +static void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) { s16 v1, v2, v3; - s16 i, j; - - v1 = gTasks[taskId].data[5] - 1; - v2 = gTasks[taskId].data[6] - 1; - v3 = gTasks[taskId].data[2]; - - if (gTasks[taskId].data[3] == 0) - { - for (i = 0; i < 3; i++) - { - for (j = 0; j < 3; j++) - { - MapGridGetMetatileIdAt(v1 + j, v2 + i); - if () - { - - } - - MapGridSetMetatileIdAt - } - } - } + s16 i, j; + const s16* v4; + + v1 = gTasks[taskId].data[4] - 1; + v2 = gTasks[taskId].data[5] - 1; + v3 = gTasks[taskId].data[1]; + + if (gTasks[taskId].data[2] == 0) + { + for (i = 0; i < 3; i++) + { + for (j = 0; j < 3; j++) + { + v4 = &a1[v3]; + if (MapGridGetMetatileIdAt(v1 + j, v2 + i) == v4[0]) + { + if (v3 != 2) + MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | v4[1]); + else + MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | v4[0]); + } + } + } + } + else + { + for (i = 0; i < 3; i++) + { + for (j = 0; j < 3; j++) + { + if (a1[2 - v3] == MapGridGetMetatileIdAt(v1 + j, v2 + i)) + { + if (v3 != 2) + MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | a1[1 - v3]); + else + MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | a1[2]); + } + } + } + } } #else NAKED @@ -275,9 +290,9 @@ static void sub_809C334(u8 taskId) default: break; } + data[0] = (data[0] + 1) & 7; v1 = data[0] & 7; - //ldrh r5, [r4] instead mov r5, r0 somehow if (v1 == 0) { DrawWholeMapView(); @@ -293,7 +308,7 @@ static u8 sub_809C3FC(u16 a0) taskId = CreateTask(sub_809C334, 0); data = gTasks[taskId].data; - PlayerGetDestCoords(&tX, &data[5]); + PlayerGetDestCoords(&tX, &tY); t0 = 0; data[1] = 0; data[2] = a0; @@ -335,10 +350,8 @@ void sub_809C4A8(void) s16 *data; taskId = CreateTask(sub_809C500, 0); - gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - data = gTasks[taskId].data; PlayerGetDestCoords(&data[2], &data[3]); if (gSpecialVar_0x8004 == 0) @@ -376,9 +389,8 @@ static void sub_809C500(u8 taskId) data[0]++; if (data[0] != 0x10) return; - data[0] = 0; - data[0] == 0; + data[0] = 0; data[1]++; if (data[1] != 0xD) return; @@ -399,7 +411,6 @@ void sub_809C5FC(void) taskId = CreateTask(sub_809C640, 0); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - data = gTasks[taskId].data; PlayerGetDestCoords(&data[2], &data[3]); gTasks[taskId].data[2] += 4; @@ -423,6 +434,7 @@ static void sub_809C640(u8 taskId) DestroyTask(taskId); return; } + data[2]--; } MapGridSetMetatileIdAt(data[2], data[3], 0xEB9); @@ -430,6 +442,7 @@ static void sub_809C640(u8 taskId) CurrentMapDrawMetatileAt(data[2], data[3]); CurrentMapDrawMetatileAt(data[2], data[3] + 1); } + data[0]++; if (data[0] == 4) { @@ -437,3 +450,4 @@ static void sub_809C640(u8 taskId) data[1]++; } } + diff --git a/src/shop.c b/src/shop.c index d0b3994a2..a0a8b8eca 100644 --- a/src/shop.c +++ b/src/shop.c @@ -2,6 +2,8 @@ #include "shop.h" #include "menu.h" #include "data.h" +#include "graphics.h" +#include "strings.h" #include "list_menu.h" #include "new_menu_helpers.h" #include "party_menu.h" @@ -15,7 +17,6 @@ #include "item_menu.h" #include "main.h" #include "sound.h" -#include "strings.h" #include "string_util.h" #include "overworld.h" #include "window.h" @@ -38,9 +39,7 @@ #include "constants/items.h" #include "constants/game_stat.h" -#define t0 data[0] #define tItemCount data[1] -#define tX data[4] #define tItemId data[5] #define tListTaskId data[7] @@ -96,7 +95,6 @@ struct MartHistory /*0x17*/ u8 unk17; }; /* size = 0x18 */ - EWRAM_DATA s16 sViewportMapObjects[MAP_OBJECTS_COUNT][4] = {0}; EWRAM_DATA struct ShopData gShopData = {0}; EWRAM_DATA u8 sShopMenuWindowId = 0; @@ -165,39 +163,23 @@ static void nullsub_52(u8 taskId); static void nullsub_53(void); static void RecordQuestLogItemPurchase(void); -// external defines extern u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y); extern u16 BagGetQuantityByItemId(u16 item); -//Data Definitions -/* -extern const struct MenuAction gUnknown_83DF09C[]; -extern const struct YesNoFuncTable gUnknown_83DF0B4[]; -extern const struct WindowTemplate gUnknown_83DF0BC[]; -extern const struct BgTemplate gUnknown_83DF0C4[]; -*/ - -//graphics -extern const u32 gUnknown_8E85DC8[]; //gBuyMenuFrame_Gfx[]; -extern const u32 gUnknown_8E85EFC[]; //gBuyMenuFrame_Tilemap -extern const u32 gUnknown_8E86038[]; //gBuyMenuFrame_TmHmTilemap -extern const u32 gUnknown_8E86170[]; //gBuyMenuFrame_Pal - - -static const struct MenuAction gUnknown_83DF09C[] = // sShopMenuActions_BuySellQuit +static const struct MenuAction sShopMenuActions_BuySellQuit[] = { {gText_ShopBuy, {.void_u8 = Task_HandleShopMenuBuy}}, {gText_ShopSell, {.void_u8 = Task_HandleShopMenuSell}}, {gText_ShopQuit, {.void_u8 = Task_HandleShopMenuQuit}} }; -static const struct YesNoFuncTable gUnknown_83DF0B4[] = //sShopMenuActions_BuyQuit +static const struct YesNoFuncTable sShopMenuActions_BuyQuit[] = { - BuyMenuTryMakePurchase, //Task_HandleShopMenuBuy, - BuyMenuReturnToItemList //Task_HandleShopMenuQuit + BuyMenuTryMakePurchase, + BuyMenuReturnToItemList }; -static const struct WindowTemplate gUnknown_83DF0BC[] = //sShopMenuWindowTemplates +static const struct WindowTemplate sShopMenuWindowTemplates[] = { { .bg = 0, @@ -210,7 +192,7 @@ static const struct WindowTemplate gUnknown_83DF0BC[] = //sShopMenuWindowTem } }; -static const struct BgTemplate gUnknown_83DF0C4[4] = //sShopBuyMenuBgTemplates +static const struct BgTemplate sShopBuyMenuBgTemplates[4] = { { .bg = 0, @@ -250,7 +232,6 @@ static const struct BgTemplate gUnknown_83DF0C4[4] = //sShopBuyMenuBgTemplat } }; - // Functions static u8 CreateShopMenu(u8 a0) { @@ -261,9 +242,9 @@ static u8 CreateShopMenu(u8 a0) else gShopData.unk16_4 = 5; - sShopMenuWindowId = AddWindow(gUnknown_83DF0BC); //sShopMenuWindowTemplates + sShopMenuWindowId = AddWindow(sShopMenuWindowTemplates); SetStdWindowBorderStyle(sShopMenuWindowId, 0); - PrintTextArray(sShopMenuWindowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); + PrintTextArray(sShopMenuWindowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, sShopMenuActions_BuySellQuit); Menu_InitCursor(sShopMenuWindowId, 2, 0, 2, 16, 3, 0); PutWindowTilemap(sShopMenuWindowId); CopyWindowToVram(sShopMenuWindowId, 1); @@ -272,10 +253,12 @@ static u8 CreateShopMenu(u8 a0) static u8 GetMartTypeFromItemList(u32 a0) { - u16 retVal, i; + u16 i; + if (a0) return (u8)a0; goto MAIN; + RETURN_1: return 1; @@ -296,6 +279,7 @@ static u8 GetMartTypeFromItemList(u32 a0) else if (gShopData.itemList[i] == 0) goto RETURN_0; } + RETURN_0: return 0; } @@ -333,7 +317,7 @@ static void Task_ShopMenu(u8 taskId) Task_HandleShopMenuQuit(taskId); break; default: - gUnknown_83DF09C[Menu_GetCursorPos()].func.void_u8(taskId); + sShopMenuActions_BuySellQuit[Menu_GetCursorPos()].func.void_u8(taskId); break; } } @@ -377,6 +361,7 @@ static void Task_GoToBuyOrSellMenu(u8 taskId) { if (gPaletteFade.active) return; + SetMainCallback2((void *)GetWordTaskArg(taskId, 0xE)); FreeAllWindowBuffers(); DestroyTask(taskId); @@ -392,6 +377,7 @@ static void Task_ReturnToShopMenu(u8 taskId) { if (field_weather_is_fade_finished() != TRUE) return; + DisplayItemMessageOnField(taskId, GetMartUnk16_4(), gText_CanIHelpWithAnythingElse, ShowShopMenuAfterExitingBuyOrSellMenu); } @@ -420,6 +406,7 @@ static void VBlankCB_BuyMenu(void) static void CB2_InitBuyMenu(void) { u8 taskId; + switch (gMain.state) { case 0: @@ -469,12 +456,15 @@ static bool8 InitShopData(void) gShopTilemapBuffer1 = Alloc(sizeof(*gShopTilemapBuffer1)); if (gShopTilemapBuffer1 == 0) goto CANCEL; + gShopTilemapBuffer2 = Alloc(sizeof(*gShopTilemapBuffer2)); if (gShopTilemapBuffer2 == 0) goto CANCEL; + gShopTilemapBuffer3 = Alloc(sizeof(*gShopTilemapBuffer3)); if (gShopTilemapBuffer3 == 0) goto CANCEL; + gShopTilemapBuffer4 = Alloc(sizeof(*gShopTilemapBuffer4)); if (gShopTilemapBuffer4 == 0) goto CANCEL; @@ -489,7 +479,7 @@ static bool8 InitShopData(void) static void BuyMenuInitBgs(void) { ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_83DF0C4, NELEMS(gUnknown_83DF0C4)); + InitBgsFromTemplates(0, sShopBuyMenuBgTemplates, NELEMS(sShopBuyMenuBgTemplates)); SetBgTilemapBuffer(1, gShopTilemapBuffer2); SetBgTilemapBuffer(2, gShopTilemapBuffer4); SetBgTilemapBuffer(3, gShopTilemapBuffer3); @@ -512,13 +502,15 @@ static void BuyMenuInitBgs(void) static void BuyMenuDecompressBgGraphics(void) { void* pal; - DecompressAndCopyTileDataToVram(1, gUnknown_8E85DC8, 0x480, 0x3DC, 0); + + DecompressAndCopyTileDataToVram(1, gBuyMenuFrame_Gfx, 0x480, 0x3DC, 0); if ((gShopData.martType) != MART_TYPE_TMHM) - LZDecompressWram(gUnknown_8E85EFC, gShopTilemapBuffer1); //gBuyMenuFrame_Tilemap + LZDecompressWram(gBuyMenuFrame_Tilemap, gShopTilemapBuffer1); else - LZDecompressWram(gUnknown_8E86038, gShopTilemapBuffer1); //gBuyMenuFrame_TmHmTilemap + LZDecompressWram(gBuyMenuFrame_TmHmTilemap, gShopTilemapBuffer1); + pal = Alloc(0x40); - LZDecompressWram(gUnknown_8E86170, pal); + LZDecompressWram(gBuyMenuFrame_Pal, pal); LoadPalette(pal, 0xB0, 0x20); LoadPalette(pal + 0x20, 0x60, 0x20); Free(pal); @@ -527,14 +519,17 @@ static void BuyMenuDecompressBgGraphics(void) static void sub_809B10C(bool32 a0) { u8 v; + if (a0 == FALSE) v = 0xB; else v = 6; + if ((gShopData.martType) != MART_TYPE_TMHM) SetBgRectPal(1, 0, 0xE, 0x1E, 6, v); else SetBgRectPal(1, 0, 0xC, 0x1E, 8, v); + ScheduleBgCopyTilemapToVram(1); } @@ -551,10 +546,10 @@ static void BuyMenuDrawGraphics(void) static bool8 BuyMenuBuildListMenuTemplate(void) { - u16 i; - u16 v; + u16 i, v; struct ListMenuItem **list = &sShopMenuListMenu; struct ShopData *mart = &gShopData; + *list = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuListMenu)); if (sShopMenuListMenu == 0) goto FREE_MEMORY; @@ -574,7 +569,7 @@ static bool8 BuyMenuBuildListMenuTemplate(void) for (i = 0; i < mart->itemCount; i++) { - PokeMartWriteNameAndIdAt(&sShopMenuListMenu[i], mart->itemList[i], sShopMenuItemStrings[i]); //PokeMartWriteNameAndIdAt(u16 a0, u16 a1, u8* a2) + PokeMartWriteNameAndIdAt(&sShopMenuListMenu[i], mart->itemList[i], sShopMenuItemStrings[i]); } ADD_CANCEL: @@ -640,6 +635,7 @@ static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, s CreateItemMenuIcon(item, gShopData.itemSlot); else CreateItemMenuIcon(ITEM_N_A, gShopData.itemSlot); + gShopData.itemSlot ^= 1; BuyMenuPrint(5, 2, description, 0, 3, 2, 1, 0, 0); } @@ -652,6 +648,7 @@ static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, s } #ifdef NONMATCHING +// As simple as this seems, I could not get the while loop to use the correct registers. It should pad the front of gStringVar4 with 0 based on the length of gStringVar1. static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y) { u32 len, x; @@ -857,10 +854,7 @@ static void sub_809B764(void) static void BuyMenuDrawMapBg(void) { - s16 i; - s16 j; - s16 x; - s16 y; + s16 i, j, x, y; const struct MapData *mapData; u16 metatile; u8 metatileLayerType; @@ -913,7 +907,6 @@ static void BuyMenuDrawMapMetatile(s16 x, s16 y, const u16 *src, u8 metatileLaye static void BuyMenuDrawMapMetatileLayer(u16 *dest, s16 offset1, s16 offset2, const u16 *src) { - // This function draws a whole 2x2 metatile. dest[offset1 + offset2] = src[0]; // top left dest[offset1 + offset2 + 1] = src[1]; // top right dest[offset1 + offset2 + 32] = src[2]; // bottom left @@ -922,12 +915,9 @@ static void BuyMenuDrawMapMetatileLayer(u16 *dest, s16 offset1, s16 offset2, con static void BuyMenuCollectEventObjectData(void) { - s16 facingX; - s16 facingY; - u8 y; - u8 x; + s16 facingX, facingY; + u8 x, y, z; u8 num = 0; - u8 z; GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY); z = PlayerGetZCoord(); @@ -970,8 +960,7 @@ static void BuyMenuCollectEventObjectData(void) static void BuyMenuDrawEventObjects(void) { - u8 i; - u8 spriteId; + u8 i, spriteId; const struct MapObjectGraphicsInfo *graphicsInfo; for (i = 0; i < MAP_OBJECTS_COUNT; i++) @@ -993,7 +982,6 @@ static void BuyMenuDrawEventObjects(void) static void BuyMenuCopyTilemapData(void) { s16 i; - u16 *dst = *gShopTilemapBuffer2; u16 *src = *gShopTilemapBuffer1; @@ -1049,6 +1037,7 @@ static void Task_BuyMenu(u8 taskId) CopyItemName(itemId, gStringVar1); BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany, Task_BuyHowManyDialogueInit); } + break; } } } @@ -1056,7 +1045,6 @@ static void Task_BuyMenu(u8 taskId) static void Task_BuyHowManyDialogueInit(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 quantityInBag = BagGetQuantityByItemId(tItemId); u16 maxQuantity; @@ -1120,7 +1108,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId) static void CreateBuyMenuConfirmPurchaseWindow(u8 taskId) { - BuyMenuConfirmPurchase(taskId, gUnknown_83DF0B4); + BuyMenuConfirmPurchase(taskId, sShopMenuActions_BuyQuit); } static void BuyMenuTryMakePurchase(u8 taskId) @@ -1204,6 +1192,7 @@ static void nullsub_53(void) } #ifdef NONMATCHING +// couldn't get registers to match. It should store an address into r4 (what tmp wants to be), and load/store from there, eg. ldrh r0, [r4,#4]. Which indicates an array inside the MartHistory struct, except data sizes are not consistent. void RecordItemPurchase(u16 item, u16 quantity, u8 a2) { struct MartHistory *tmp; @@ -1343,6 +1332,7 @@ static void RecordQuestLogItemPurchase(void) v = history->unkA; if (v != 0) sub_8113550(v + 0x24, (const u16*)history); + v = history->unk16; if (v != 0) { -- cgit v1.2.3 From 5ad5764d4edd275b7ce818570b70bf7679546539 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 26 Nov 2019 14:02:20 -0700 Subject: fix return type --- src/shop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shop.c b/src/shop.c index a8294fd72..b15d6a716 100644 --- a/src/shop.c +++ b/src/shop.c @@ -108,7 +108,7 @@ EWRAM_DATA struct MartHistory gShopMenuHistory = {0}; //Function Declarations static u8 CreateShopMenu(u8 a0); -static u8 GetMartTypeFromItemList(bool32 a0); +static bool8 GetMartTypeFromItemList(bool32 a0); static void SetShopItemsForSale(const u16 *items); static void SetShopMenuCallback(MainCallback callback); static void Task_ShopMenu(u8 taskId); -- cgit v1.2.3 From f4b6a8195a0b5145b58afa81e87a457bda140c11 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 26 Nov 2019 17:05:02 -0700 Subject: match BuyMenuPrintPriceInList --- src/shop.c | 91 ++++---------------------------------------------------------- 1 file changed, 5 insertions(+), 86 deletions(-) diff --git a/src/shop.c b/src/shop.c index b15d6a716..982202da2 100644 --- a/src/shop.c +++ b/src/shop.c @@ -643,103 +643,22 @@ static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, s } } -#ifdef NONMATCHING -// As simple as this seems, I could not get the while loop to use the correct registers. It should pad the front of gStringVar4 with 0 based on the length of gStringVar1. static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y) { - u32 len, x; + s32 x; u8 *loc; if (item != INDEX_CANCEL) { ConvertIntToDecimalStringN(gStringVar1, itemid_get_market_price(item), 0, 4); - len = 4 - StringLength(gStringVar1); + x = 4 - StringLength(gStringVar1); loc = gStringVar4; - x = len - 1; - if (x > 0) - { - while (len != 0) - { - *loc = 0; - loc++; - len--; - } - } + while (x-- != 0) + *loc++ = 0; StringExpandPlaceholders(loc, gText_PokedollarVar1); - BuyMenuPrint(windowId, 1, gStringVar4, 0x69, y, 0, 0, TEXT_SPEED_FF, 1); + BuyMenuPrint(windowId, 0, gStringVar4, 0x69, y, 0, 0, TEXT_SPEED_FF, 1); } } -#else -NAKED -static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y) -{ - asm_unified("\tpush {r4-r6,lr}\n" - "\tsub sp, 0x14\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tlsls r2, 24\n" - "\tlsrs r5, r2, 24\n" - "\tmovs r0, 0x2\n" - "\tnegs r0, r0\n" - "\tcmp r1, r0\n" - "\tbeq _0809B480\n" - "\tldr r4, _0809B488 @ =gStringVar1\n" - "\tlsls r0, r1, 16\n" - "\tlsrs r0, 16\n" - "\tbl itemid_get_market_price\n" - "\tadds r1, r0, 0\n" - "\tlsls r1, 16\n" - "\tlsrs r1, 16\n" - "\tadds r0, r4, 0\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0x4\n" - "\tbl ConvertIntToDecimalStringN\n" - "\tadds r0, r4, 0\n" - "\tbl StringLength\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tmovs r1, 0x4\n" - "\tsubs r1, r0\n" - "\tldr r2, _0809B48C @ =gStringVar4\n" - "\tadds r0, r1, 0\n" - "\tsubs r1, 0x1\n" - "\tcmp r0, 0\n" - "\tbeq _0809B45C\n" - "\tmovs r3, 0\n" - "_0809B450:\n" - "\tstrb r3, [r2]\n" - "\tadds r2, 0x1\n" - "\tadds r0, r1, 0\n" - "\tsubs r1, 0x1\n" - "\tcmp r0, 0\n" - "\tbne _0809B450\n" - "_0809B45C:\n" - "\tldr r1, _0809B490 @ =gText_PokedollarVar1\n" - "\tadds r0, r2, 0\n" - "\tbl StringExpandPlaceholders\n" - "\tldr r2, _0809B48C @ =gStringVar4\n" - "\tstr r5, [sp]\n" - "\tmovs r0, 0\n" - "\tstr r0, [sp, 0x4]\n" - "\tstr r0, [sp, 0x8]\n" - "\tmovs r0, 0xFF\n" - "\tstr r0, [sp, 0xC]\n" - "\tmovs r0, 0x1\n" - "\tstr r0, [sp, 0x10]\n" - "\tadds r0, r6, 0\n" - "\tmovs r1, 0\n" - "\tmovs r3, 0x69\n" - "\tbl BuyMenuPrint\n" - "_0809B480:\n" - "\tadd sp, 0x14\n" - "\tpop {r4-r6}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t_0809B488: .4byte gStringVar1\n" - "\t_0809B48C: .4byte gStringVar4\n" - "\t_0809B490: .4byte gText_PokedollarVar1\n"); -} -#endif static void LoadTmHmNameInMart(s32 item) { -- cgit v1.2.3 From d81a67ea2d4486827e0cb2c066a8d7ae4682ec27 Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 28 Nov 2019 11:04:49 -0500 Subject: fix nonmatchings --- include/sea_cottage.h | 12 -- include/sea_cottage_special_anim.h | 12 ++ src/sea_cottage_special_anim.c | 229 +++---------------------------- src/shop.c | 272 +++++++++++-------------------------- 4 files changed, 108 insertions(+), 417 deletions(-) delete mode 100644 include/sea_cottage.h create mode 100644 include/sea_cottage_special_anim.h diff --git a/include/sea_cottage.h b/include/sea_cottage.h deleted file mode 100644 index bba6286ff..000000000 --- a/include/sea_cottage.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifdndef GUARD_SEA_COTTAGE_H -#define GUARD_SEA_COTTAGE_H - -#include "global.h" - -void sub_809C448(u8 a0); -void sub_809C460(void); -bool8 sub_809C474(void); -void sub_809C4A8(void); -void sub_809C5FC(void); - -#endif // GUARD_SEA_COTTAGE_H diff --git a/include/sea_cottage_special_anim.h b/include/sea_cottage_special_anim.h new file mode 100644 index 000000000..5c939df12 --- /dev/null +++ b/include/sea_cottage_special_anim.h @@ -0,0 +1,12 @@ +#ifndef GUARD_SEA_COTTAGE_SPECIAL_ANIM_H +#define GUARD_SEA_COTTAGE_SPECIAL_ANIM_H + +#include "global.h" + +void sub_809C448(u8 a0); +void sub_809C460(void); +bool8 sub_809C474(void); +void sub_809C4A8(void); +void sub_809C5FC(void); + +#endif // GUARD_SEA_COTTAGE_SPECIAL_ANIM_H diff --git a/src/sea_cottage_special_anim.c b/src/sea_cottage_special_anim.c index bd69a120a..18a8da234 100644 --- a/src/sea_cottage_special_anim.c +++ b/src/sea_cottage_special_anim.c @@ -7,14 +7,9 @@ #include "field_map_obj.h" #include "field_camera.h" -#define t0 data[0] -#define tX data[4] -#define tY data[5] -#define tListTaskId data[7] - static EWRAM_DATA u8 gUnknown_2039984 = 0; -static void sub_809C1D8(u8 taskId, const u16* a1, u16 a2); +static void sub_809C1D8(u8 taskId, const s16 *a1, u16 a2); static void sub_809C334(u8 taskId); static void sub_809C500(u8 taskId); static void sub_809C640(u8 taskId); @@ -28,17 +23,14 @@ static const u16 gUnknown_83DF0F2[] = {0x02e4, 0x0317, 0x0315}; static const u16 gUnknown_83DF0F8[] = {0x02eb, 0x031e, 0x031c}; // Functions -#ifdef NONMATCHING -// Couldn't get the registers to match. Hard to know where to fix since I'm unsure what the variables are for. -static void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) +static void sub_809C1D8(u8 taskId, const s16 *a1, u16 a2) { - s16 v1, v2, v3; + s16 r5, r3, r4; s16 i, j; - const s16* v4; - v1 = gTasks[taskId].data[4] - 1; - v2 = gTasks[taskId].data[5] - 1; - v3 = gTasks[taskId].data[1]; + r5 = gTasks[taskId].data[4] - 1; + r3 = gTasks[taskId].data[5] - 1; + r4 = gTasks[taskId].data[1]; if (gTasks[taskId].data[2] == 0) { @@ -46,13 +38,14 @@ static void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) { for (j = 0; j < 3; j++) { - v4 = &a1[v3]; - if (MapGridGetMetatileIdAt(v1 + j, v2 + i) == v4[0]) + s32 id = MapGridGetMetatileIdAt(r5 + j, r3 + i); + + if (a1[r4] == (s16)id) { - if (v3 != 2) - MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | v4[1]); + if (r4 != 2) + MapGridSetMetatileIdAt(r5 + j, r3 + i, a2 | a1[r4 + 1]); else - MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | v4[0]); + MapGridSetMetatileIdAt(r5 + j, r3 + i, a2 | a1[0]); } } } @@ -63,201 +56,19 @@ static void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) { for (j = 0; j < 3; j++) { - if (a1[2 - v3] == MapGridGetMetatileIdAt(v1 + j, v2 + i)) + s32 id = MapGridGetMetatileIdAt(r5 + j, r3 + i); + + if (a1[2 - r4] == (s16)id) { - if (v3 != 2) - MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | a1[1 - v3]); + if (r4 != 2) + MapGridSetMetatileIdAt(r5 + j, r3 + i, a2 | a1[1 - r4]); else - MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | a1[2]); + MapGridSetMetatileIdAt(r5 + j, r3 + i, a2 | a1[2]); } } } } } -#else -NAKED -void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x10\n" - "\tmov r9, r1\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tlsls r2, 16\n" - "\tlsrs r2, 16\n" - "\tmov r10, r2\n" - "\tldr r2, _0809C26C @ =gTasks\n" - "\tlsls r1, r0, 2\n" - "\tadds r1, r0\n" - "\tlsls r1, 3\n" - "\tadds r1, r2\n" - "\tldrh r0, [r1, 0x10]\n" - "\tsubs r0, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r5, r0, 16\n" - "\tldrh r0, [r1, 0x12]\n" - "\tsubs r0, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r3, r0, 16\n" - "\tldrh r4, [r1, 0xA]\n" - "\tmovs r2, 0xC\n" - "\tldrsh r0, [r1, r2]\n" - "\tcmp r0, 0\n" - "\tbne _0809C29C\n" - "\tmovs r2, 0\n" - "\tlsls r5, 16\n" - "\tstr r5, [sp, 0xC]\n" - "\tlsls r0, r3, 16\n" - "\tlsls r1, r4, 16\n" - "\tasrs r0, 16\n" - "\tstr r0, [sp]\n" - "\tasrs r1, 16\n" - "\tstr r1, [sp, 0x4]\n" - "\tlsls r0, r1, 1\n" - "\tmov r1, r9\n" - "\tadds r7, r0, r1\n" - "_0809C22C:\n" - "\tmovs r4, 0\n" - "\tlsls r2, 16\n" - "\tmov r8, r2\n" - "\tasrs r0, r2, 16\n" - "\tldr r2, [sp]\n" - "\tadds r6, r2, r0\n" - "_0809C238:\n" - "\tldr r0, [sp, 0xC]\n" - "\tasrs r1, r0, 16\n" - "\tlsls r4, 16\n" - "\tasrs r0, r4, 16\n" - "\tadds r5, r1, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridGetMetatileIdAt\n" - "\tmovs r2, 0\n" - "\tldrsh r1, [r7, r2]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r1, r0\n" - "\tbne _0809C280\n" - "\tldr r0, [sp, 0x4]\n" - "\tcmp r0, 0x2\n" - "\tbeq _0809C270\n" - "\tldrh r0, [r7, 0x2]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "\tb _0809C280\n" - "\t.align 2, 0\n" - "_0809C26C: .4byte gTasks\n" - "_0809C270:\n" - "\tmov r1, r9\n" - "\tldrh r0, [r1]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "_0809C280:\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 9\n" - "\tadds r0, r4, r2\n" - "\tlsrs r4, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C238\n" - "\tadds r0, r2, 0\n" - "\tadd r0, r8\n" - "\tlsrs r2, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C22C\n" - "\tb _0809C324\n" - "_0809C29C:\n" - "\tmovs r2, 0\n" - "\tlsls r5, 16\n" - "\tstr r5, [sp, 0xC]\n" - "\tlsls r0, r3, 16\n" - "\tlsls r1, r4, 16\n" - "\tasrs r0, 16\n" - "\tstr r0, [sp, 0x8]\n" - "\tasrs r7, r1, 16\n" - "_0809C2AC:\n" - "\tmovs r4, 0\n" - "\tlsls r2, 16\n" - "\tmov r8, r2\n" - "\tasrs r0, r2, 16\n" - "\tldr r1, [sp, 0x8]\n" - "\tadds r6, r1, r0\n" - "_0809C2B8:\n" - "\tldr r2, [sp, 0xC]\n" - "\tasrs r1, r2, 16\n" - "\tlsls r4, 16\n" - "\tasrs r0, r4, 16\n" - "\tadds r5, r1, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridGetMetatileIdAt\n" - "\tmovs r1, 0x2\n" - "\tsubs r1, r7\n" - "\tlsls r1, 1\n" - "\tadd r1, r9\n" - "\tmovs r2, 0\n" - "\tldrsh r1, [r1, r2]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r1, r0\n" - "\tbne _0809C30A\n" - "\tcmp r7, 0x2\n" - "\tbeq _0809C2FA\n" - "\tmovs r0, 0x1\n" - "\tsubs r0, r7\n" - "\tlsls r0, 1\n" - "\tadd r0, r9\n" - "\tldrh r0, [r0]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "\tb _0809C30A\n" - "_0809C2FA:\n" - "\tmov r1, r9\n" - "\tldrh r0, [r1, 0x4]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "_0809C30A:\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 9\n" - "\tadds r0, r4, r2\n" - "\tlsrs r4, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C2B8\n" - "\tadds r0, r2, 0\n" - "\tadd r0, r8\n" - "\tlsrs r2, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C2AC\n" - "_0809C324:\n" - "\tadd sp, 0x10\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n"); -} -#endif static void sub_809C334(u8 taskId) { @@ -308,8 +119,8 @@ static u8 sub_809C3FC(u16 a0) taskId = CreateTask(sub_809C334, 0); data = gTasks[taskId].data; - PlayerGetDestCoords(&tX, &tY); - t0 = 0; + PlayerGetDestCoords(&data[4], &data[5]); + data[0] = 0; data[1] = 0; data[2] = a0; sub_809C334(taskId); diff --git a/src/shop.c b/src/shop.c index 982202da2..a80cc76d7 100644 --- a/src/shop.c +++ b/src/shop.c @@ -87,13 +87,7 @@ struct MartHistory /*0x09*/ u8 unk9; /*0x0A*/ u8 unkA; /*0x0B*/ u8 unkB; - /*0x0C*/ u16 unkC; - /*0x0E*/ u8 unkE[6]; - /*0x14*/ u8 unk14; - /*0x15*/ u8 unk15; - /*0x16*/ u8 unk16; - /*0x17*/ u8 unk17; -}; /* size = 0x18 */ +}; /* size = 12 */ static EWRAM_DATA s16 sViewportMapObjects[MAP_OBJECTS_COUNT][4] = {0}; EWRAM_DATA struct ShopData gShopData = {0}; @@ -104,11 +98,11 @@ EWRAM_DATA u16 (*gShopTilemapBuffer3)[0x400] = {0}; EWRAM_DATA u16 (*gShopTilemapBuffer4)[0x400] = {0}; EWRAM_DATA struct ListMenuItem *sShopMenuListMenu = {0}; static EWRAM_DATA u8 (*sShopMenuItemStrings)[13] = {0}; -EWRAM_DATA struct MartHistory gShopMenuHistory = {0}; +EWRAM_DATA struct MartHistory gShopMenuHistory[2] = {0}; //Function Declarations static u8 CreateShopMenu(u8 a0); -static bool8 GetMartTypeFromItemList(bool32 a0); +static u8 GetMartTypeFromItemList(u32 a0); static void SetShopItemsForSale(const u16 *items); static void SetShopMenuCallback(MainCallback callback); static void Task_ShopMenu(u8 taskId); @@ -230,7 +224,7 @@ static const struct BgTemplate sShopBuyMenuBgTemplates[4] = // Functions static u8 CreateShopMenu(u8 a0) { - gShopData.martType = GetMartTypeFromItemList(a0) & 0xF; + gShopData.martType = GetMartTypeFromItemList(a0); gShopData.selectedRow = 0; if (ContextNpcGetTextColor() == 0) gShopData.unk16_4 = 4; @@ -246,56 +240,35 @@ static u8 CreateShopMenu(u8 a0) return CreateTask(Task_ShopMenu, 8); } -static bool8 GetMartTypeFromItemList(bool32 a0) +static u8 GetMartTypeFromItemList(u32 a0) { u16 i; if (a0) - return (u8)a0; - goto MAIN; + return a0; - RETURN_1: - return 1; - - MAIN: - i = 0; - if (i >= gShopData.itemCount) - goto RETURN_0; - else if (gShopData.itemList[0] == 0) - goto RETURN_0; - - while (gShopData.itemList[i] != 0) - { + for (i = 0; i < gShopData.itemCount && gShopData.itemList[i] != 0; i++) + { if (ItemId_GetPocket(gShopData.itemList[i]) == POCKET_TM_CASE) - goto RETURN_1; - ++i; - if (i >= gShopData.itemCount) - goto RETURN_0; - else if (gShopData.itemList[i] == 0) - goto RETURN_0; + return 1; } - - RETURN_0: - return 0; + return 0; } static void SetShopItemsForSale(const u16 *items) { - struct ShopData *mart; - - mart = &gShopData; - mart->itemList = items; - mart->itemCount = 0; - if (mart->itemList[0] == 0) + gShopData.itemList = items; + gShopData.itemCount = 0; + if (gShopData.itemList[0] == 0) return; - do + while (gShopData.itemList[gShopData.itemCount]) { ++gShopData.itemCount; - } while (mart->itemList[gShopData.itemCount]); + } } -static void SetShopMenuCallback(MainCallback callback) +static void SetShopMenuCallback(void (*callback)(void)) { gShopData.callback = callback; } @@ -416,7 +389,7 @@ static void CB2_InitBuyMenu(void) ResetTasks(); ClearScheduledBgCopiesToVram(); ResetItemMenuIconState(); - if ((!(InitShopData())) || (!(BuyMenuBuildListMenuTemplate()))) + if (!(InitShopData()) || !(BuyMenuBuildListMenuTemplate())) return; BuyMenuInitBgs(); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); @@ -449,27 +422,39 @@ static void CB2_InitBuyMenu(void) static bool8 InitShopData(void) { - gShopTilemapBuffer1 = Alloc(sizeof(*gShopTilemapBuffer1)); + gShopTilemapBuffer1 = Alloc(sizeof(*gShopTilemapBuffer1)); if (gShopTilemapBuffer1 == NULL) - goto CANCEL; + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } gShopTilemapBuffer2 = Alloc(sizeof(*gShopTilemapBuffer2)); if (gShopTilemapBuffer2 == NULL) - goto CANCEL; + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } gShopTilemapBuffer3 = Alloc(sizeof(*gShopTilemapBuffer3)); if (gShopTilemapBuffer3 == NULL) - goto CANCEL; + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } gShopTilemapBuffer4 = Alloc(sizeof(*gShopTilemapBuffer4)); if (gShopTilemapBuffer4 == NULL) - goto CANCEL; + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } + return TRUE; - - CANCEL: - BuyMenuFreeMemory(); - SetShopExitCallback(); - return FALSE; } static void BuyMenuInitBgs(void) @@ -540,35 +525,25 @@ static void BuyMenuDrawGraphics(void) ScheduleBgCopyTilemapToVram(3); } -static bool8 BuyMenuBuildListMenuTemplate(void) +bool8 BuyMenuBuildListMenuTemplate(void) { u16 i, v; - struct ListMenuItem **list = &sShopMenuListMenu; - struct ShopData *mart = &gShopData; - - *list = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuListMenu)); - if (sShopMenuListMenu == NULL) - goto FREE_MEMORY; - sShopMenuItemStrings = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuItemStrings)); - if (sShopMenuItemStrings == NULL) + sShopMenuListMenu = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuListMenu)); + if (sShopMenuListMenu == NULL + || (sShopMenuItemStrings = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuItemStrings))) == NULL) { - FREE_MEMORY: BuyMenuFreeMemory(); SetShopExitCallback(); return FALSE; } i = 0; - if (i >= mart->itemCount) - goto ADD_CANCEL; - for (i = 0; i < mart->itemCount; i++) + for (i = 0; i < gShopData.itemCount; i++) { - PokeMartWriteNameAndIdAt(&sShopMenuListMenu[i], mart->itemList[i], sShopMenuItemStrings[i]); + PokeMartWriteNameAndIdAt(&sShopMenuListMenu[i], gShopData.itemList[i], sShopMenuItemStrings[i]); } - - ADD_CANCEL: StringCopy(sShopMenuItemStrings[i], gFameCheckerText_Cancel); sShopMenuListMenu[i].label = sShopMenuItemStrings[i]; sShopMenuListMenu[i].index = -2; @@ -801,7 +776,7 @@ static void BuyMenuDrawMapBg(void) static void BuyMenuDrawMapMetatile(s16 x, s16 y, const u16 *src, u8 metatileLayerType) { u16 offset1 = x * 2; - u16 offset2 = ((y << 0x16) + 0x400000) >> 0x10; + u16 offset2 = (y * 64) + 64; switch (metatileLayerType) { @@ -1091,7 +1066,7 @@ static void Task_ExitBuyMenu(u8 taskId) if (!gPaletteFade.active) { - DestroyListMenuTask(tListTaskId, 0, 0); + DestroyListMenuTask(tListTaskId, NULL, NULL); BuyMenuFreeMemory(); SetMainCallback2(CB2_ReturnToField); DestroyTask(taskId); @@ -1106,154 +1081,59 @@ static void nullsub_53(void) { } -#ifdef NONMATCHING -// couldn't get registers to match. It should store an address into r4 (what tmp wants to be), and load/store from there, eg. ldrh r0, [r4,#4]. Which indicates an array inside the MartHistory struct, except data sizes are not consistent. void RecordItemPurchase(u16 item, u16 quantity, u8 a2) { - struct MartHistory *tmp; + struct MartHistory *history; - if (gShopMenuHistory.unkA == a2) + if (gShopMenuHistory[0].unkA == a2) + { + history = &gShopMenuHistory[0]; + } + else if (gShopMenuHistory[1].unkA == a2) { - tmp = &gShopMenuHistory; + history = &gShopMenuHistory[1]; } else { - if (gShopMenuHistory.unk16 == a2) - { - tmp = &gShopMenuHistory + 12; - } + if (gShopMenuHistory[0].unkA == 0) + history = &gShopMenuHistory[0]; else - { - tmp = &gShopMenuHistory + 12; - if (gShopMenuHistory.unkA == 0) - { - tmp = &gShopMenuHistory; - gShopMenuHistory.unkA = a2; - } - } + history = &gShopMenuHistory[1]; + history->unkA = a2; } - if (tmp->unk4 != 0) + if (history->unk4 != 0) { - gShopMenuHistory.unk9 = 1; + history->unk9 = 1; } - gShopMenuHistory.unk4 = item; - if (gShopMenuHistory.unk6 <= 998) + history->unk4 = item; + if (history->unk6 < 999) { - gShopMenuHistory.unk6 += item; - if (item > 999) - gShopMenuHistory.unk6 = 999; + history->unk6 += quantity; + if (history->unk6 > 999) + history->unk6 = 999; } - if (gShopMenuHistory.unk0 < 999998) + if (history->unk0 < 999999) { - gShopMenuHistory.unk0 += ((s16)itemid_get_market_price(item) >> (quantity-1))*quantity; - if (gShopMenuHistory.unk0 > 999999) - gShopMenuHistory.unk0 = 999999; + history->unk0 += (itemid_get_market_price(item) >> (a2 - 1)) * quantity; + if (history->unk0 > 999999) + history->unk0 = 999999; } } -#else -NAKED -void RecordItemPurchase(u16 item, u16 quantity, u8 a2) -{ - asm_unified("\tpush {r4-r6,lr}\n" - "\tlsls r0, 16\n" - "\tlsrs r3, r0, 16\n" - "\tlsls r1, 16\n" - "\tlsrs r6, r1, 16\n" - "\tlsls r2, 24\n" - "\tlsrs r5, r2, 24\n" - "\tldr r1, _0809C0B8 @ =gShopMenuHistory\n" - "\tldrb r2, [r1, 0xA]\n" - "\tcmp r2, r5\n" - "\tbne _0809C0BC\n" - "\tadds r4, r1, 0\n" - "\tb _0809C0D4\n" - "\t.align 2, 0\n" - "_0809C0B8: .4byte gShopMenuHistory\n" - "_0809C0BC:\n" - "\tldrb r0, [r1, 0x16]\n" - "\tcmp r0, r5\n" - "\tbne _0809C0C8\n" - "\tadds r4, r1, 0\n" - "\tadds r4, 0xC\n" - "\tb _0809C0D4\n" - "_0809C0C8:\n" - "\tadds r4, r1, 0\n" - "\tadds r4, 0xC\n" - "\tcmp r2, 0\n" - "\tbne _0809C0D2\n" - "\tadds r4, r1, 0\n" - "_0809C0D2:\n" - "\tstrb r5, [r4, 0xA]\n" - "_0809C0D4:\n" - "\tldrh r0, [r4, 0x4]\n" - "\tcmp r0, 0\n" - "\tbeq _0809C0DE\n" - "\tmovs r0, 0x1\n" - "\tstrb r0, [r4, 0x9]\n" - "_0809C0DE:\n" - "\tstrh r3, [r4, 0x4]\n" - "\tldrh r1, [r4, 0x6]\n" - "\tldr r0, _0809C128 @ =0x000003e6\n" - "\tcmp r1, r0\n" - "\tbhi _0809C0F8\n" - "\tadds r0, r6, r1\n" - "\tstrh r0, [r4, 0x6]\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tldr r1, _0809C12C @ =0x000003e7\n" - "\tcmp r0, r1\n" - "\tbls _0809C0F8\n" - "\tstrh r1, [r4, 0x6]\n" - "_0809C0F8:\n" - "\tldr r1, [r4]\n" - "\tldr r0, _0809C130 @ =0x000f423e\n" - "\tcmp r1, r0\n" - "\tbhi _0809C120\n" - "\tadds r0, r3, 0\n" - "\tbl itemid_get_market_price\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tsubs r1, r5, 0x1\n" - "\tasrs r0, r1\n" - "\tadds r1, r0, 0\n" - "\tmuls r1, r6\n" - "\tldr r0, [r4]\n" - "\tadds r0, r1\n" - "\tstr r0, [r4]\n" - "\tldr r1, _0809C134 @ =0x000f423f\n" - "\tcmp r0, r1\n" - "\tbls _0809C120\n" - "\tstr r1, [r4]\n" - "_0809C120:\n" - "\tpop {r4-r6}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0809C128: .4byte 0x000003e6\n" - "_0809C12C: .4byte 0x000003e7\n" - "_0809C130: .4byte 0x000f423e\n" - "_0809C134: .4byte 0x000f423f\n"); -} -#endif static void RecordQuestLogItemPurchase(void) { - struct MartHistory *history = &gShopMenuHistory; u16 v; - v = history->unkA; + v = gShopMenuHistory[0].unkA; if (v != 0) - sub_8113550(v + 0x24, (const u16*)history); + sub_8113550(v + 0x24, (const u16 *)&gShopMenuHistory[0]); - v = history->unk16; + v = gShopMenuHistory[1].unkA; if (v != 0) - { - v += 0x24; - sub_8113550(v, (const u16*)&history->unkC); - } + sub_8113550(v + 0x24, (const u16 *)&gShopMenuHistory[1]); } void CreatePokemartMenu(const u16 *itemsForSale) @@ -1262,9 +1142,9 @@ void CreatePokemartMenu(const u16 *itemsForSale) CreateShopMenu(MART_TYPE_REGULAR); SetShopMenuCallback(EnableBothScriptContexts); nullsub_53(); - memset(&gShopMenuHistory, 0, sizeof(struct MartHistory)); - gShopMenuHistory.unk8 = gMapHeader.regionMapSectionId; - gShopMenuHistory.unk14 = gMapHeader.regionMapSectionId; + memset(&gShopMenuHistory, 0, sizeof(gShopMenuHistory)); + gShopMenuHistory[0].unk8 = gMapHeader.regionMapSectionId; + gShopMenuHistory[1].unk8 = gMapHeader.regionMapSectionId; } void CreateDecorationShop1Menu(const u16 *itemsForSale) -- cgit v1.2.3 From fe6db41f2b4b31d47c3b7e5eaa2e970379f224b1 Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 28 Nov 2019 11:15:24 -0500 Subject: fix formatting --- src/shop.c | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/shop.c b/src/shop.c index a80cc76d7..4a0ac7fb1 100644 --- a/src/shop.c +++ b/src/shop.c @@ -248,11 +248,11 @@ static u8 GetMartTypeFromItemList(u32 a0) return a0; for (i = 0; i < gShopData.itemCount && gShopData.itemList[i] != 0; i++) - { + { if (ItemId_GetPocket(gShopData.itemList[i]) == POCKET_TM_CASE) return 1; } - return 0; + return 0; } static void SetShopItemsForSale(const u16 *items) @@ -422,38 +422,38 @@ static void CB2_InitBuyMenu(void) static bool8 InitShopData(void) { - gShopTilemapBuffer1 = Alloc(sizeof(*gShopTilemapBuffer1)); + gShopTilemapBuffer1 = Alloc(sizeof(*gShopTilemapBuffer1)); if (gShopTilemapBuffer1 == NULL) - { - BuyMenuFreeMemory(); - SetShopExitCallback(); - return FALSE; - } + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } gShopTilemapBuffer2 = Alloc(sizeof(*gShopTilemapBuffer2)); if (gShopTilemapBuffer2 == NULL) - { - BuyMenuFreeMemory(); - SetShopExitCallback(); - return FALSE; - } + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } gShopTilemapBuffer3 = Alloc(sizeof(*gShopTilemapBuffer3)); if (gShopTilemapBuffer3 == NULL) - { - BuyMenuFreeMemory(); - SetShopExitCallback(); - return FALSE; - } + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } gShopTilemapBuffer4 = Alloc(sizeof(*gShopTilemapBuffer4)); if (gShopTilemapBuffer4 == NULL) - { - BuyMenuFreeMemory(); - SetShopExitCallback(); - return FALSE; - } - + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } + return TRUE; } -- cgit v1.2.3 From 8d0618778125e8260021652d369584d82a8cdf39 Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 30 Nov 2019 10:54:19 -0500 Subject: small typos fix --- src/shop.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/shop.c b/src/shop.c index 4a0ac7fb1..12f3f3263 100644 --- a/src/shop.c +++ b/src/shop.c @@ -537,9 +537,7 @@ bool8 BuyMenuBuildListMenuTemplate(void) SetShopExitCallback(); return FALSE; } - - i = 0; - + for (i = 0; i < gShopData.itemCount; i++) { PokeMartWriteNameAndIdAt(&sShopMenuListMenu[i], gShopData.itemList[i], sShopMenuItemStrings[i]); @@ -776,7 +774,7 @@ static void BuyMenuDrawMapBg(void) static void BuyMenuDrawMapMetatile(s16 x, s16 y, const u16 *src, u8 metatileLayerType) { u16 offset1 = x * 2; - u16 offset2 = (y * 64) + 64; + u16 offset2 = y * 64 + 64; switch (metatileLayerType) { -- cgit v1.2.3