diff options
-rw-r--r-- | asm/shop.s | 130 | ||||
-rw-r--r-- | 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()); +} |