diff options
-rw-r--r-- | asm/buy_menu_helpers.s | 220 | ||||
-rw-r--r-- | asm/shop.s | 40 | ||||
-rw-r--r-- | data/buy_menu_helpers.s | 14 | ||||
-rw-r--r-- | include/shop.h | 11 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/buy_menu_helpers.c | 216 |
6 files changed, 249 insertions, 256 deletions
diff --git a/asm/buy_menu_helpers.s b/asm/buy_menu_helpers.s deleted file mode 100644 index 1eba8e42e..000000000 --- a/asm/buy_menu_helpers.s +++ /dev/null @@ -1,220 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_813F66C -sub_813F66C: @ 813F66C - push {r4,lr} - adds r4, r0, 0 - cmp r4, 0x1 - beq _0813F680 - ldr r0, _0813F67C @ =gUnknown_8464804 - bl InitWindows - b _0813F686 - .align 2, 0 -_0813F67C: .4byte gUnknown_8464804 -_0813F680: - ldr r0, _0813F6CC @ =gUnknown_846483C - bl InitWindows -_0813F686: - bl DeactivateAllTextPrinters - movs r0, 0 - movs r1, 0x1 - movs r2, 0xD0 - bl TextWindow_SetUserSelectedFrame - movs r0, 0 - movs r1, 0x13 - movs r2, 0xE0 - bl TextWindow_LoadResourcesStdFrame0 - movs r0, 0 - movs r1, 0xA - movs r2, 0xF0 - bl TextWindow_SetStdFrame0_WithPal - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x4 - bl PutWindowTilemap - movs r0, 0x5 - bl PutWindowTilemap - cmp r4, 0x1 - bne _0813F6C4 - movs r0, 0x6 - bl PutWindowTilemap -_0813F6C4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813F6CC: .4byte gUnknown_846483C - thumb_func_end sub_813F66C - - thumb_func_start sub_813F6D0 -sub_813F6D0: @ 813F6D0 - push {lr} - ldr r0, _0813F6F0 @ =gSaveBlock1Ptr - ldr r0, [r0] - movs r1, 0xA4 - lsls r1, 2 - adds r0, r1 - bl GetMoney - adds r3, r0, 0 - movs r0, 0 - movs r1, 0xA - movs r2, 0xF - bl PrintMoneyAmountInMoneyBoxWithBorder - pop {r0} - bx r0 - .align 2, 0 -_0813F6F0: .4byte gSaveBlock1Ptr - thumb_func_end sub_813F6D0 - - thumb_func_start sub_813F6F4 -sub_813F6F4: @ 813F6F4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x14 - mov r9, r3 - ldr r3, [sp, 0x30] - ldr r4, [sp, 0x34] - ldr r6, [sp, 0x38] - ldr r5, [sp, 0x3C] - mov r8, r5 - ldr r5, [sp, 0x40] - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r7, r9 - lsls r7, 24 - lsrs r7, 24 - mov r9, r7 - lsls r3, 24 - lsrs r3, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r6, 24 - lsrs r6, 24 - lsls r5, 24 - lsrs r5, 24 - str r4, [sp] - str r6, [sp, 0x4] - lsls r4, r5, 1 - adds r4, r5 - ldr r5, _0813F758 @ =gUnknown_8464884 - adds r4, r5 - str r4, [sp, 0x8] - mov r4, r8 - lsls r4, 24 - asrs r4, 24 - str r4, [sp, 0xC] - str r2, [sp, 0x10] - mov r2, r9 - bl AddTextPrinterParameterized4 - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813F758: .4byte gUnknown_8464884 - thumb_func_end sub_813F6F4 - - thumb_func_start sub_813F75C -sub_813F75C: @ 813F75C - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x10 - adds r5, r0, 0 - adds r6, r1, 0 - mov r8, r2 - lsls r5, 24 - lsrs r5, 24 - bl sub_809B56C - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl GetTextSpeedSetting - lsls r0, 24 - lsrs r0, 24 - str r4, [sp] - str r0, [sp, 0x4] - str r6, [sp, 0x8] - mov r0, r8 - str r0, [sp, 0xC] - adds r0, r5, 0 - movs r1, 0x2 - movs r2, 0x13 - movs r3, 0xE - bl DisplayMessageAndContinueTask - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_813F75C - - thumb_func_start sub_813F7A8 -sub_813F7A8: @ 813F7A8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0x1 - movs r3, 0xD - bl SetWindowBorderStyle - pop {r0} - bx r0 - thumb_func_end sub_813F7A8 - - thumb_func_start sub_813F7C0 -sub_813F7C0: @ 813F7C0 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0xA - movs r3, 0xF - bl SetWindowBorderStyle - pop {r0} - bx r0 - thumb_func_end sub_813F7C0 - - thumb_func_start sub_813F7D8 -sub_813F7D8: @ 813F7D8 - push {lr} - sub sp, 0x10 - adds r3, r1, 0 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0813F800 @ =gUnknown_846487C - movs r2, 0x2 - str r2, [sp] - movs r2, 0x1 - str r2, [sp, 0x4] - movs r2, 0xD - str r2, [sp, 0x8] - str r3, [sp, 0xC] - movs r2, 0x2 - movs r3, 0 - bl CreateYesNoMenuWithCallbacks - add sp, 0x10 - pop {r0} - bx r0 - .align 2, 0 -_0813F800: .4byte gUnknown_846487C - thumb_func_end sub_813F7D8 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/shop.s b/asm/shop.s index 51955f88d..0ef2de1c0 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -572,7 +572,7 @@ _0809AEAC: ldrb r0, [r0, 0x16] lsls r0, 28 lsrs r0, 28 - bl sub_813F66C + bl BuyMenuInitWindows bl sub_809B080 b _0809AF5E .align 2, 0 @@ -819,7 +819,7 @@ sub_809B15C: @ 809B15C push {lr} bl sub_809B764 bl sub_809BAFC - bl sub_813F6D0 + bl BuyMenuDrawMoneyBox movs r0, 0 bl ScheduleBgCopyTilemapToVram movs r0, 0x1 @@ -1116,7 +1116,7 @@ _0809B398: movs r1, 0x2 adds r2, r7, 0 movs r3, 0 - bl sub_813F6F4 + bl BuyMenuPrint b _0809B400 .align 2, 0 _0809B3D0: .4byte 0x00000177 @@ -1138,7 +1138,7 @@ _0809B3D8: movs r1, 0x2 adds r2, r7, 0 movs r3, 0x2 - bl sub_813F6F4 + bl BuyMenuPrint _0809B400: add sp, 0x14 pop {r4-r7} @@ -1204,7 +1204,7 @@ _0809B45C: adds r0, r6, 0 movs r1, 0 movs r3, 0x69 - bl sub_813F6F4 + bl BuyMenuPrint _0809B480: add sp, 0x14 pop {r4-r6} @@ -1251,7 +1251,7 @@ sub_809B494: @ 809B494 movs r1, 0 adds r2, r5, 0 movs r3, 0 - bl sub_813F6F4 + bl BuyMenuPrint lsls r0, r7, 16 lsrs r0, 16 bl ItemIdToBattleMoveId @@ -1273,7 +1273,7 @@ sub_809B494: @ 809B494 movs r1, 0x2 adds r2, r5, 0 movs r3, 0 - bl sub_813F6F4 + bl BuyMenuPrint b _0809B55C .align 2, 0 _0809B514: .4byte gStringVar1 @@ -1294,7 +1294,7 @@ _0809B528: movs r0, 0x6 movs r1, 0 movs r3, 0 - bl sub_813F6F4 + bl BuyMenuPrint ldr r2, _0809B568 @ =gUnknown_8416217 movs r0, 0x10 str r0, [sp] @@ -1305,7 +1305,7 @@ _0809B528: movs r0, 0x6 movs r1, 0x2 movs r3, 0 - bl sub_813F6F4 + bl BuyMenuPrint _0809B55C: add sp, 0x14 pop {r4-r7} @@ -1388,7 +1388,7 @@ _0809B5E0: movs r0, 0x4 movs r1, 0x2 movs r3, 0x1 - bl sub_813F6F4 + bl BuyMenuPrint _0809B5F8: add sp, 0x14 pop {r4,r5} @@ -2134,7 +2134,7 @@ sub_809BB44: @ 809BB44 movs r1, 0 adds r2, r4, 0 movs r3, 0x2 - bl sub_813F6F4 + bl BuyMenuPrint add sp, 0x14 pop {r4} pop {r0} @@ -2223,7 +2223,7 @@ _0809BC1A: ldr r1, _0809BC74 @ =gUnknown_8416842 ldr r2, _0809BC78 @ =sub_809BF98 adds r0, r6, 0 - bl sub_813F75C + bl BuyMenuDisplayMessage b _0809BC8E .align 2, 0 _0809BC70: .4byte gSaveBlock1Ptr @@ -2236,7 +2236,7 @@ _0809BC7C: ldr r1, _0809BC98 @ =gUnknown_8416766 ldr r2, _0809BC9C @ =sub_809BCA0 adds r0, r6, 0 - bl sub_813F75C + bl BuyMenuDisplayMessage _0809BC8E: pop {r4-r7} pop {r0} @@ -2265,7 +2265,7 @@ sub_809BCA0: @ 809BCA0 lsrs r4, 16 movs r0, 0x1 movs r1, 0 - bl sub_813F7C0 + bl BuyMenuQuantityBoxThinBorder ldr r0, _0809BD44 @ =gStringVar1 adds r1, r4, 0 movs r2, 0x1 @@ -2287,11 +2287,11 @@ sub_809BCA0: @ 809BCA0 movs r1, 0x2 adds r2, r6, 0 movs r3, 0 - bl sub_813F6F4 + bl BuyMenuPrint strh r4, [r5, 0x2] movs r0, 0x3 movs r1, 0 - bl sub_813F7A8 + bl BuyMenuQuantityBoxNormalBorder adds r0, r7, 0 bl sub_809BB44 movs r0, 0 @@ -2423,7 +2423,7 @@ _0809BDD4: ldr r1, _0809BE4C @ =gUnknown_841678E ldr r2, _0809BE50 @ =sub_809BE90 adds r0, r5, 0 - bl sub_813F75C + bl BuyMenuDisplayMessage b _0809BE88 .align 2, 0 _0809BE3C: .4byte gMain @@ -2464,7 +2464,7 @@ sub_809BE90: @ 809BE90 lsls r0, 24 lsrs r0, 24 ldr r1, _0809BEA0 @ =gUnknown_83DF0B4 - bl sub_813F7D8 + bl BuyMenuConfirmPurchase pop {r0} bx r0 .align 2, 0 @@ -2493,7 +2493,7 @@ sub_809BEA4: @ 809BEA4 ldr r1, _0809BEEC @ =gUnknown_84167E7 ldr r2, _0809BEF0 @ =sub_809BF0C adds r0, r5, 0 - bl sub_813F75C + bl BuyMenuDisplayMessage adds r0, r5, 0 bl nullsub_52 ldrh r0, [r4, 0xA] @@ -2509,7 +2509,7 @@ _0809BEF4: ldr r1, _0809BF04 @ =gUnknown_8416861 ldr r2, _0809BF08 @ =sub_809BF98 adds r0, r5, 0 - bl sub_813F75C + bl BuyMenuDisplayMessage _0809BEFE: pop {r4,r5} pop {r0} diff --git a/data/buy_menu_helpers.s b/data/buy_menu_helpers.s deleted file mode 100644 index a59b8e069..000000000 --- a/data/buy_menu_helpers.s +++ /dev/null @@ -1,14 +0,0 @@ - .section .rodata - .align 2 - -gUnknown_8464804:: @ 8464804 - .incbin "baserom.gba", 0x464804, 0x38 - -gUnknown_846483C:: @ 846483C - .incbin "baserom.gba", 0x46483C, 0x40 - -gUnknown_846487C:: @ 846487C - .incbin "baserom.gba", 0x46487C, 0x8 - -gUnknown_8464884:: @ 8464884 - .incbin "baserom.gba", 0x464884, 0xC diff --git a/include/shop.h b/include/shop.h index 05f5160e6..481fd6c76 100644 --- a/include/shop.h +++ b/include/shop.h @@ -2,6 +2,7 @@ #define GUARD_SHOP_H #include "global.h" +#include "menu_helpers.h" extern EWRAM_DATA struct ItemSlot gUnknown_02039F80[3]; @@ -9,5 +10,15 @@ void CreatePokemartMenu(const u16 *); void CreateDecorationShop1Menu(const u16 *); void CreateDecorationShop2Menu(const u16 *); void sub_809C09C(u16, u16, u8); +u8 sub_809B56C(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 BuyMenuDisplayMessage(u8 taskId, const u8 *text, TaskFunc callback); +void BuyMenuQuantityBoxNormalBorder(u8 windowId, bool8 copyToVram); +void BuyMenuQuantityBoxThinBorder(u8 windowId, bool8 copyToVram); +void BuyMenuConfirmPurchase(u8 taskId, const struct YesNoFuncTable *yesNo); #endif // GUARD_SHOP_H diff --git a/ld_script.txt b/ld_script.txt index ca5115630..dcd00c32c 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -254,7 +254,7 @@ SECTIONS { asm/unk_text_util.o(.text); asm/berry_pouch.o(.text); asm/itemfinder.o(.text); - asm/buy_menu_helpers.o(.text); + src/buy_menu_helpers.o(.text); asm/slot_machine.o(.text); src/roamer.o(.text); src/mystery_gift_menu.o(.text); @@ -445,7 +445,7 @@ SECTIONS { data/unk_text_util.o(.rodata); data/berry_pouch.o(.rodata); data/itemfinder.o(.rodata); - data/buy_menu_helpers.o(.rodata); + src/buy_menu_helpers.o(.rodata); data/slot_machine.o(.rodata); src/roamer.o(.rodata); src/mystery_gift_menu.o(.rodata); diff --git a/src/buy_menu_helpers.c b/src/buy_menu_helpers.c new file mode 100644 index 000000000..4febb8209 --- /dev/null +++ b/src/buy_menu_helpers.c @@ -0,0 +1,216 @@ +#include "global.h" +#include "task.h" +#include "text.h" +#include "window.h" +#include "text_window.h" +#include "money.h" +#include "menu_helpers.h" +#include "new_menu_helpers.h" +#include "menu.h" +#include "shop.h" + +static const struct WindowTemplate sShopBuyMenuWindowTemplatesNormal[] = +{ + { + .bg = 0x0, + .tilemapLeft = 0x1, + .tilemapTop = 0x1, + .width = 0x8, + .height = 0x3, + .paletteNum = 0xF, + .baseBlock = 0x27, + }, + { + .bg = 0x0, + .tilemapLeft = 0x1, + .tilemapTop = 0xB, + .width = 0xD, + .height = 0x2, + .paletteNum = 0xF, + .baseBlock = 0x3F, + }, + { + .bg = 0x0, + .tilemapLeft = 0x2, + .tilemapTop = 0xF, + .width = 0x1A, + .height = 0x4, + .paletteNum = 0xE, + .baseBlock = 0x59, + }, + { + .bg = 0x0, + .tilemapLeft = 0x11, + .tilemapTop = 0x9, + .width = 0xC, + .height = 0x4, + .paletteNum = 0xE, + .baseBlock = 0xC1, + }, + { + .bg = 0x0, + .tilemapLeft = 0xB, + .tilemapTop = 0x1, + .width = 0x11, + .height = 0xC, + .paletteNum = 0xE, + .baseBlock = 0xF1, + }, + { + .bg = 0x0, + .tilemapLeft = 0x5, + .tilemapTop = 0xE, + .width = 0x19, + .height = 0x6, + .paletteNum = 0xF, + .baseBlock = 0x1BD, + }, + DUMMY_WIN_TEMPLATE, +}; + +// firered uses different layout when selling TMs +static const struct WindowTemplate sShopBuyMenuWindowTemplatesTM[] = +{ + { + .bg = 0x0, + .tilemapLeft = 0x1, + .tilemapTop = 0x1, + .width = 0x8, + .height = 0x3, + .paletteNum = 0xF, + .baseBlock = 0x27, + }, + { + .bg = 0x0, + .tilemapLeft = 0x1, + .tilemapTop = 0xB, + .width = 0xD, + .height = 0x2, + .paletteNum = 0xF, + .baseBlock = 0x3F, + }, + { + .bg = 0x0, + .tilemapLeft = 0x2, + .tilemapTop = 0xF, + .width = 0x1A, + .height = 0x4, + .paletteNum = 0xE, + .baseBlock = 0x59, + }, + { + .bg = 0x0, + .tilemapLeft = 0x11, + .tilemapTop = 0x9, + .width = 0xC, + .height = 0x4, + .paletteNum = 0xE, + .baseBlock = 0xC1, + }, + { + .bg = 0x0, + .tilemapLeft = 0xB, + .tilemapTop = 0x1, + .width = 0x11, + .height = 0xA, + .paletteNum = 0xE, + .baseBlock = 0xF1, + }, + { + .bg = 0x0, + .tilemapLeft = 0xC, + .tilemapTop = 0xC, + .width = 0x12, + .height = 0x8, + .paletteNum = 0xE, + .baseBlock = 0x19B, + }, + { + .bg = 0x0, + .tilemapLeft = 0x1, + .tilemapTop = 0xE, + .width = 0xA, + .height = 0x4, + .paletteNum = 0xE, + .baseBlock = 0x22B, + }, + DUMMY_WIN_TEMPLATE, +}; + +static const struct WindowTemplate sShopBuyMenuYesNoWindowTemplate = +{ + .bg = 0x0, + .tilemapLeft = 0x15, + .tilemapTop = 0x9, + .width = 0x6, + .height = 0x4, + .paletteNum = 0xE, + .baseBlock = 0xC1, +}; + +static const struct TextColor sShopBuyMenuTextColors[] = +{ + { + .fgColor = 0, + .bgColor = 1, + .shadowColor = 2, + }, + { + .fgColor = 0, + .bgColor = 2, + .shadowColor = 3, + }, + { + .fgColor = 0, + .bgColor = 3, + .shadowColor = 2, + }, +}; + +void BuyMenuInitWindows(bool32 isSellingTM) +{ + if (isSellingTM != TRUE) + InitWindows(sShopBuyMenuWindowTemplatesNormal); + else + InitWindows(sShopBuyMenuWindowTemplatesTM); + DeactivateAllTextPrinters(); + TextWindow_SetUserSelectedFrame(0, 0x1, 0xD0); + TextWindow_LoadResourcesStdFrame0(0, 0x13, 0xE0); + TextWindow_SetStdFrame0_WithPal(0, 0xA, 0xF0); + PutWindowTilemap(0); + PutWindowTilemap(4); + PutWindowTilemap(5); + if (isSellingTM == TRUE) + PutWindowTilemap(6); +} + +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) +{ + AddTextPrinterParameterized4(windowId, font, x, y, letterSpacing, lineSpacing, &sShopBuyMenuTextColors[color], speed, text); +} + +void BuyMenuDisplayMessage(u8 taskId, const u8 *text, TaskFunc callback) +{ + DisplayMessageAndContinueTask(taskId, 2, 0x13, 0xE, sub_809B56C(), GetTextSpeedSetting(), text, callback); + ScheduleBgCopyTilemapToVram(0); +} + +void BuyMenuQuantityBoxNormalBorder(u8 windowId, bool8 copyToVram) +{ + SetWindowBorderStyle(windowId, copyToVram, 0x1, 0xD); +} + +void BuyMenuQuantityBoxThinBorder(u8 windowId, bool8 copyToVram) +{ + SetWindowBorderStyle(windowId, copyToVram, 0xA, 0xF); +} + +void BuyMenuConfirmPurchase(u8 taskId, const struct YesNoFuncTable *yesNo) +{ + CreateYesNoMenuWithCallbacks(taskId, &sShopBuyMenuYesNoWindowTemplate, 2, 0, 2, 1, 0xD, yesNo); +} |