summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/buy_menu_helpers.s220
-rw-r--r--asm/shop.s40
-rw-r--r--data/buy_menu_helpers.s14
-rw-r--r--include/shop.h11
-rw-r--r--ld_script.txt4
-rw-r--r--src/buy_menu_helpers.c216
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);
+}