diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-02-12 23:37:09 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-02-12 20:37:09 -0800 |
commit | 75b580b370ae19e13ea80cc4d2441dbfc97d47cb (patch) | |
tree | a880adf76ac363d80a61ff5667abf16d1df3a9dd | |
parent | 3a6c13999d63d2a123a30587942b984c7af33580 (diff) |
start decompiling shop.c (#234)
-rw-r--r-- | asm/shop.s | 434 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/shop.c | 199 |
3 files changed, 200 insertions, 434 deletions
diff --git a/asm/shop.s b/asm/shop.s index d59f9584e..b23b07003 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -6,440 +6,6 @@ .text - thumb_func_start CreateShopMenu -CreateShopMenu: @ 80B2D54 - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl ScriptContext2_Enable - ldr r1, _080B2D90 @ =gUnknown_03000708 - movs r0, 0 - strb r4, [r1, 0xC] - strb r0, [r1, 0x9] - cmp r4, 0 - bne _080B2D9C - movs r0, 0x2 - strb r0, [r1, 0xA] - movs r0, 0 - movs r1, 0 - movs r2, 0xA - movs r3, 0x7 - bl MenuDrawTextWindow - ldr r3, _080B2D94 @ =gUnknown_083CC6D0 - ldr r0, _080B2D98 @ =gUnknown_083CC6E8 - str r0, [sp] - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0x3 - bl PrintMenuItemsReordered - b _080B2DBC - .align 2, 0 -_080B2D90: .4byte gUnknown_03000708 -_080B2D94: .4byte gUnknown_083CC6D0 -_080B2D98: .4byte gUnknown_083CC6E8 -_080B2D9C: - movs r0, 0x1 - strb r0, [r1, 0xA] - movs r0, 0 - movs r1, 0 - movs r2, 0xA - movs r3, 0x5 - bl MenuDrawTextWindow - ldr r3, _080B2DEC @ =gUnknown_083CC6D0 - ldr r0, _080B2DF0 @ =gUnknown_083CC6EB - str r0, [sp] - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0x2 - bl PrintMenuItemsReordered -_080B2DBC: - ldr r0, _080B2DF4 @ =gUnknown_03000708 - ldrb r3, [r0, 0xA] - adds r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - movs r0, 0 - str r0, [sp] - movs r0, 0x9 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl InitMenu - ldr r0, _080B2DF8 @ =sub_80B2E38 - movs r1, 0x8 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080B2DEC: .4byte gUnknown_083CC6D0 -_080B2DF0: .4byte gUnknown_083CC6EB -_080B2DF4: .4byte gUnknown_03000708 -_080B2DF8: .4byte sub_80B2E38 - thumb_func_end CreateShopMenu - - thumb_func_start SetShopMenuCallback -SetShopMenuCallback: @ 80B2DFC - ldr r1, _080B2E04 @ =gUnknown_03000708 - str r0, [r1] - bx lr - .align 2, 0 -_080B2E04: .4byte gUnknown_03000708 - thumb_func_end SetShopMenuCallback - - thumb_func_start SetShopItemsForSale -SetShopItemsForSale: @ 80B2E08 - push {lr} - adds r1, r0, 0 - movs r2, 0 - ldr r3, _080B2E34 @ =gUnknown_03000708 - str r1, [r3, 0x4] - strb r2, [r3, 0x8] - ldrh r0, [r1] - cmp r0, 0 - beq _080B2E30 -_080B2E1A: - ldrb r0, [r3, 0x8] - adds r0, 0x1 - strb r0, [r3, 0x8] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - lsls r0, r2, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0 - bne _080B2E1A -_080B2E30: - pop {r0} - bx r0 - .align 2, 0 -_080B2E34: .4byte gUnknown_03000708 - thumb_func_end SetShopItemsForSale - - thumb_func_start sub_80B2E38 -sub_80B2E38: @ 80B2E38 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r2, _080B2E60 @ =gMain - ldrh r1, [r2, 0x30] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080B2E68 - ldr r4, _080B2E64 @ =gUnknown_03000708 - ldrb r0, [r4, 0x9] - cmp r0, 0 - beq _080B2EF4 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - negs r0, r0 - b _080B2E82 - .align 2, 0 -_080B2E60: .4byte gMain -_080B2E64: .4byte gUnknown_03000708 -_080B2E68: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080B2E90 - ldr r4, _080B2E8C @ =gUnknown_03000708 - ldrb r0, [r4, 0x9] - ldrb r1, [r4, 0xA] - cmp r0, r1 - beq _080B2EF4 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 -_080B2E82: - bl MoveMenuCursor - strb r0, [r4, 0x9] - b _080B2EF4 - .align 2, 0 -_080B2E8C: .4byte gUnknown_03000708 -_080B2E90: - ldrh r1, [r2, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080B2EE0 - movs r0, 0x5 - bl PlaySE - ldr r3, _080B2EB0 @ =gUnknown_03000708 - ldrb r0, [r3, 0xC] - cmp r0, 0 - bne _080B2EBC - ldr r1, _080B2EB4 @ =gUnknown_083CC6D0 - ldr r2, _080B2EB8 @ =gUnknown_083CC6E8 - b _080B2EC0 - .align 2, 0 -_080B2EB0: .4byte gUnknown_03000708 -_080B2EB4: .4byte gUnknown_083CC6D0 -_080B2EB8: .4byte gUnknown_083CC6E8 -_080B2EBC: - ldr r1, _080B2ED8 @ =gUnknown_083CC6D0 - ldr r2, _080B2EDC @ =gUnknown_083CC6EB -_080B2EC0: - ldrb r0, [r3, 0x9] - adds r0, r2 - ldrb r0, [r0] - lsls r0, 3 - adds r1, 0x4 - adds r0, r1 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - b _080B2EF4 - .align 2, 0 -_080B2ED8: .4byte gUnknown_083CC6D0 -_080B2EDC: .4byte gUnknown_083CC6EB -_080B2EE0: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080B2EF4 - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl HandleShopMenuQuit -_080B2EF4: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B2E38 - - thumb_func_start sub_80B2EFC -sub_80B2EFC: @ 80B2EFC - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080B2F24 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r2, _080B2F28 @ =BuyMenuDrawGraphics - lsrs r0, r2, 16 - strh r0, [r1, 0x18] - strh r2, [r1, 0x1A] - ldr r0, _080B2F2C @ =sub_80B2FA0 - str r0, [r1] - movs r0, 0x1 - movs r1, 0 - bl fade_screen - pop {r0} - bx r0 - .align 2, 0 -_080B2F24: .4byte gTasks -_080B2F28: .4byte BuyMenuDrawGraphics -_080B2F2C: .4byte sub_80B2FA0 - thumb_func_end sub_80B2EFC - - thumb_func_start sub_80B2F30 -sub_80B2F30: @ 80B2F30 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080B2F58 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r2, _080B2F5C @ =sub_80A6300 - lsrs r0, r2, 16 - strh r0, [r1, 0x18] - strh r2, [r1, 0x1A] - ldr r0, _080B2F60 @ =sub_80B2FA0 - str r0, [r1] - movs r0, 0x1 - movs r1, 0 - bl fade_screen - pop {r0} - bx r0 - .align 2, 0 -_080B2F58: .4byte gTasks -_080B2F5C: .4byte sub_80A6300 -_080B2F60: .4byte sub_80B2FA0 - thumb_func_end sub_80B2F30 - - thumb_func_start HandleShopMenuQuit -HandleShopMenuQuit: @ 80B2F64 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_8072DEC - movs r0, 0 - movs r1, 0 - movs r2, 0xB - movs r3, 0x8 - bl MenuZeroFillWindowRect - bl sub_80BE3BC - bl ScriptContext2_Disable - adds r0, r4, 0 - bl DestroyTask - ldr r0, _080B2F9C @ =gUnknown_03000708 - ldr r0, [r0] - cmp r0, 0 - beq _080B2F96 - bl _call_via_r0 -_080B2F96: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B2F9C: .4byte gUnknown_03000708 - thumb_func_end HandleShopMenuQuit - - thumb_func_start sub_80B2FA0 -sub_80B2FA0: @ 80B2FA0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080B2FD4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080B2FCE - ldr r0, _080B2FD8 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x18] - lsls r0, 16 - ldrh r1, [r1, 0x1A] - orrs r0, r1 - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_080B2FCE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B2FD4: .4byte gPaletteFade -_080B2FD8: .4byte gTasks - thumb_func_end sub_80B2FA0 - - thumb_func_start ReturnToShopMenuAfterExitingSellMenu -ReturnToShopMenuAfterExitingSellMenu: @ 80B2FDC - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080B2FF8 @ =gUnknown_03000708 - ldrb r0, [r0, 0xC] - bl CreateShopMenu - adds r0, r4, 0 - bl DestroyTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B2FF8: .4byte gUnknown_03000708 - thumb_func_end ReturnToShopMenuAfterExitingSellMenu - - thumb_func_start Task_ExitSellMenu -Task_ExitSellMenu: @ 80B2FFC - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - bl sub_807D770 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080B3040 - ldr r0, _080B3028 @ =gUnknown_03000708 - ldrb r0, [r0, 0xC] - cmp r0, 0x2 - bne _080B3034 - ldr r1, _080B302C @ =gOtherText_CanIHelpYou - ldr r2, _080B3030 @ =ReturnToShopMenuAfterExitingSellMenu - adds r0, r4, 0 - movs r3, 0 - bl DisplayItemMessageOnField - b _080B3040 - .align 2, 0 -_080B3028: .4byte gUnknown_03000708 -_080B302C: .4byte gOtherText_CanIHelpYou -_080B3030: .4byte ReturnToShopMenuAfterExitingSellMenu -_080B3034: - ldr r1, _080B3048 @ =gOtherText_AnythingElse - ldr r2, _080B304C @ =ReturnToShopMenuAfterExitingSellMenu - adds r0, r5, 0 - movs r3, 0 - bl DisplayItemMessageOnField -_080B3040: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B3048: .4byte gOtherText_AnythingElse -_080B304C: .4byte ReturnToShopMenuAfterExitingSellMenu - thumb_func_end Task_ExitSellMenu - - thumb_func_start sub_80B3050 -sub_80B3050: @ 80B3050 - push {lr} - bl pal_fill_black - ldr r0, _080B3064 @ =Task_ExitSellMenu - movs r1, 0x8 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080B3064: .4byte Task_ExitSellMenu - thumb_func_end sub_80B3050 - - thumb_func_start sub_80B3068 -sub_80B3068: @ 80B3068 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl Task_ExitSellMenu - pop {r0} - bx r0 - thumb_func_end sub_80B3068 - - thumb_func_start unref_sub_80B3078 -unref_sub_80B3078: @ 80B3078 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080B308C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _080B3090 @ =Task_ExitSellMenu - str r0, [r1] - bx lr - .align 2, 0 -_080B308C: .4byte gTasks -_080B3090: .4byte Task_ExitSellMenu - thumb_func_end unref_sub_80B3078 - - thumb_func_start sub_80B3094 -sub_80B3094: @ 80B3094 - push {lr} - bl AnimateSprites - bl BuildOamBuffer - bl RunTasks - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_80B3094 - thumb_func_start sub_80B30AC sub_80B30AC: @ 80B30AC push {r4,lr} diff --git a/ld_script.txt b/ld_script.txt index 4e364d6bc..28de8a235 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -147,6 +147,7 @@ SECTIONS { src/item.o(.text); src/matsuda_debug_menu.o(.text); asm/contest.o(.text); + src/shop.o(.text); asm/shop.o(.text); src/berry.o(.text); src/script_menu.o(.text); diff --git a/src/shop.c b/src/shop.c new file mode 100644 index 000000000..bab67daba --- /dev/null +++ b/src/shop.c @@ -0,0 +1,199 @@ +#include "global.h" +#include "menu.h" +#include "script.h" +#include "task.h" +#include "main.h" +#include "sound.h" +#include "weather.h" +#include "palette.h" +#include "sprite.h" + +extern void sub_80B2FA0(u8); +extern void BuyMenuDrawGraphics(void); +extern void sub_80A6300(void); +extern void sub_80BE3BC(void); +extern void DisplayItemMessageOnField(u8, u8*, TaskFunc, u16); +extern u8 sub_807D770(void); +extern void pal_fill_black(void); + +struct UnknownShopStruct +{ + /* 0x0 */ void (* callback) (void); + /* 0x4 */ u16 *itemList; + /* 0x8 */ u8 itemCount; + /* 0x9 */ u8 unk9; + /* 0xA */ u8 unkA; + u8 unkB; + /* 0xC */ bool8 unkC; + // unknown size +}; + +extern struct UnknownShopStruct gUnknown_03000708; +extern struct MenuAction gUnknown_083CC6D0[]; + +extern u8 gUnknown_083CC6E8[]; +extern u8 gUnknown_083CC6EB[]; +extern u8 gOtherText_CanIHelpYou[]; +extern u8 gOtherText_AnythingElse[]; + +void sub_80B2E38(u8); +void HandleShopMenuQuit(u8); + +u8 CreateShopMenu(bool8 var) +{ + ScriptContext2_Enable(); + gUnknown_03000708.unkC = var; + gUnknown_03000708.unk9 = 0; + + if(var == FALSE) + { + gUnknown_03000708.unkA = 2; + MenuDrawTextWindow(0, 0, 10, 7); + PrintMenuItemsReordered(1, 1, 3, gUnknown_083CC6D0, (u8 *)gUnknown_083CC6E8); + } + else + { + gUnknown_03000708.unkA = 1; + MenuDrawTextWindow(0, 0, 10, 5); + PrintMenuItemsReordered(1, 1, 2, gUnknown_083CC6D0, (u8 *)gUnknown_083CC6EB); + } + InitMenu(0, 1, 1, gUnknown_03000708.unkA + 1, 0, 9); + + return CreateTask(sub_80B2E38, 8); +} + +void SetShopMenuCallback(void *callbackPtr) +{ + gUnknown_03000708.callback = callbackPtr; +} + +void SetShopItemsForSale(u16 *items) +{ + u16 i = 0; + + gUnknown_03000708.itemList = items; + gUnknown_03000708.itemCount = 0; + + while (gUnknown_03000708.itemList[i]) + { + gUnknown_03000708.itemCount++; + i++; + } +} + +void sub_80B2E38(u8 var) +{ + const u8 local = var; + + if(gMain.newAndRepeatedKeys & 0x40) + { + if(gUnknown_03000708.unk9) + { + PlaySE(0x5); + gUnknown_03000708.unk9 = MoveMenuCursor(-1); + } + } + else if(gMain.newAndRepeatedKeys & 0x80) + { + if(gUnknown_03000708.unk9 != gUnknown_03000708.unkA) + { + PlaySE(0x5); + gUnknown_03000708.unk9 = MoveMenuCursor(1); + } + } + else if (gMain.newKeys & 1) + { + PlaySE(0x5); + if(!gUnknown_03000708.unkC) + { + gUnknown_083CC6D0[gUnknown_083CC6E8[gUnknown_03000708.unk9]].func(local); + } + else + { + gUnknown_083CC6D0[gUnknown_083CC6EB[gUnknown_03000708.unk9]].func(local); + } + } + else if(gMain.newKeys & 2) + { + PlaySE(0x5); + HandleShopMenuQuit(local); + } +} + +void sub_80B2EFC(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)BuyMenuDrawGraphics >> 16; + gTasks[taskId].data[9] = (u32)BuyMenuDrawGraphics; + gTasks[taskId].func = sub_80B2FA0; + fade_screen(1, 0); +} + +void sub_80B2F30(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_80A6300 >> 16; + gTasks[taskId].data[9] = (u32)sub_80A6300; + gTasks[taskId].func = sub_80B2FA0; + fade_screen(1, 0); +} + +void HandleShopMenuQuit(u8 taskId) +{ + sub_8072DEC(); + MenuZeroFillWindowRect(0, 0, 11, 8); + sub_80BE3BC(); // in tv.s? + ScriptContext2_Disable(); + DestroyTask(taskId); + + if(gUnknown_03000708.callback) + gUnknown_03000708.callback(); // run the callback if it exists. +} + +void sub_80B2FA0(u8 taskId) +{ + if(!gPaletteFade.active) + { + SetMainCallback2((void *)((u16)gTasks[taskId].data[8] << 16 | (u16)gTasks[taskId].data[9])); + DestroyTask(taskId); + } +} + +void ReturnToShopMenuAfterExitingSellMenu(u8 taskId) +{ + CreateShopMenu(gUnknown_03000708.unkC); + DestroyTask(taskId); +} + +void Task_ExitSellMenu(u8 taskId) +{ + if(sub_807D770() == 1) + { + if(gUnknown_03000708.unkC == 2) + DisplayItemMessageOnField(taskId, gOtherText_CanIHelpYou, ReturnToShopMenuAfterExitingSellMenu, 0); + else + DisplayItemMessageOnField(taskId, gOtherText_AnythingElse, ReturnToShopMenuAfterExitingSellMenu, 0); + } +} + +void sub_80B3050(void) +{ + pal_fill_black(); + CreateTask(Task_ExitSellMenu, 0x8); +} + +void sub_80B3068(u8 taskId) +{ + Task_ExitSellMenu(taskId); +} + +void unref_sub_80B3078(u8 taskId) +{ + gTasks[taskId].func = Task_ExitSellMenu; +} + +void sub_80B3094(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTasks(); + UpdatePaletteFade(); +} |