summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2017-08-25 19:09:46 -0400
committerProjectRevoTPP <projectrevotpp@hotmail.com>2017-08-25 19:09:46 -0400
commit1ab4ed75e7daae4b17cfca2970e935f653236014 (patch)
tree26479c621691c189799a5374ed703bb35d3d98b5
parent7a26678cc022f466cbee26ae8a9e7011f01b7fb3 (diff)
decompile up to nonmatching sub_80B4470
-rw-r--r--asm/shop.s218
-rw-r--r--src/shop.c174
2 files changed, 171 insertions, 221 deletions
diff --git a/asm/shop.s b/asm/shop.s
index cd88636f4..105407e01 100644
--- a/asm/shop.s
+++ b/asm/shop.s
@@ -6,224 +6,6 @@
.text
- thumb_func_start sub_80B4378
-sub_80B4378: @ 80B4378
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- movs r1, 0xE
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- movs r0, 0
- movs r1, 0xA
- movs r2, 0xD
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- ldr r0, _080B43E4 @ =gBGTilemapBuffers + 0x800
- movs r1, 0x2
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- movs r1, 0x1
- movs r2, 0xB
- movs r3, 0xC
- bl sub_80A3FA0
- bl sub_80B3420
- movs r0, 0x6
- movs r1, 0x7
- bl sub_80B3764
- bl sub_80B37EC
- movs r0, 0
- bl StartVerticalScrollIndicators
- movs r0, 0x1
- bl StartVerticalScrollIndicators
- bl sub_80B32A4
- ldr r1, _080B43E8 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080B43EC @ =sub_80B40E8
- str r1, [r0]
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B43E4: .4byte gBGTilemapBuffers + 0x800
-_080B43E8: .4byte gTasks
-_080B43EC: .4byte sub_80B40E8
- thumb_func_end sub_80B4378
-
- thumb_func_start sub_80B43F0
-sub_80B43F0: @ 80B43F0
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _080B4428 @ =gFieldCallback
- ldr r0, _080B442C @ =sub_80B3050
- 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, _080B4430 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080B4434 @ =Task_ExitBuyMenu
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B4428: .4byte gFieldCallback
-_080B442C: .4byte sub_80B3050
-_080B4430: .4byte gTasks
-_080B4434: .4byte Task_ExitBuyMenu
- thumb_func_end sub_80B43F0
-
- thumb_func_start Task_ExitBuyMenu
-Task_ExitBuyMenu: @ 80B4438
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080B4468 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080B4462
- movs r0, 0
- movs r1, 0
- bl RemoveMoneyLabelObject
- bl BuyMenuFreeMemory
- ldr r0, _080B446C @ =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
-_080B4462:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B4468: .4byte gPaletteFade
-_080B446C: .4byte c2_exit_to_overworld_2_switch
- thumb_func_end Task_ExitBuyMenu
-
- thumb_func_start sub_80B4470
-sub_80B4470: @ 80B4470
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r2, 0
- ldr r0, _080B44C8 @ =gUnknown_02038724
- mov r12, r0
- ldr r6, _080B44CC @ =gMartInfo
- mov r8, r12
- adds r4, r6, 0
- ldr r1, _080B44D0 @ =gTasks
- mov r9, r1
- lsls r0, r5, 2
- adds r0, r5
- lsls r7, r0, 3
-_080B4492:
- lsls r0, r2, 2
- mov r1, r8
- adds r3, r0, r1
- ldrb r0, [r4, 0xB]
- ldrb r1, [r4, 0x9]
- adds r0, r1
- ldr r1, [r4, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r3]
- ldrh r0, [r0]
- cmp r1, r0
- bne _080B44DC
- ldrh r0, [r3, 0x2]
- cmp r0, 0
- beq _080B44DC
- adds r2, r0, 0
- mov r4, r9
- adds r1, r7, r4
- movs r4, 0xA
- ldrsh r0, [r1, r4]
- adds r0, r2, r0
- cmp r0, 0xFF
- ble _080B44D4
- movs r0, 0xFF
- strh r0, [r3, 0x2]
- b _080B451E
- .align 2, 0
-_080B44C8: .4byte gUnknown_02038724
-_080B44CC: .4byte gMartInfo
-_080B44D0: .4byte gTasks
-_080B44D4:
- ldrh r0, [r1, 0xA]
- adds r0, r2, r0
- strh r0, [r3, 0x2]
- b _080B451E
-_080B44DC:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x2
- bls _080B4492
- ldr r3, _080B452C @ =gUnknown_02038730
- ldrb r0, [r3]
- cmp r0, 0x2
- bhi _080B451E
- adds r2, r0, 0
- lsls r2, 2
- add r2, r12
- ldrb r0, [r6, 0xB]
- ldrb r1, [r6, 0x9]
- adds r0, r1
- ldr r1, [r6, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r2]
- ldrb r1, [r3]
- lsls r1, 2
- add r1, r12
- ldr r2, _080B4530 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r2
- ldrh r0, [r0, 0xA]
- strh r0, [r1, 0x2]
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
-_080B451E:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B452C: .4byte gUnknown_02038730
-_080B4530: .4byte gTasks
- thumb_func_end sub_80B4470
-
thumb_func_start ClearItemPurchases
ClearItemPurchases: @ 80B4534
push {lr}
diff --git a/src/shop.c b/src/shop.c
index 110b5cdea..b053e3f2e 100644
--- a/src/shop.c
+++ b/src/shop.c
@@ -26,9 +26,6 @@
#include "rom4.h"
#include "decoration_inventory.h"
-extern void sub_80B4378(u8);
-extern void sub_80B43F0(u8);
-extern void sub_80B4470(u8);
extern bool8 sub_80A52C4(u8, u8);
enum
@@ -53,6 +50,7 @@ struct MartInfo
extern struct MartInfo gMartInfo;
extern struct MenuAction gUnknown_083CC6D0[];
extern struct YesNoFuncTable gUnknown_083CC708[];
+extern struct ItemSlot gUnknown_02038724[3];
extern u32 gMartTotalCost; // the total cost of a purchase before checking out.
@@ -74,6 +72,8 @@ enum
ANIM_NUM
};
+extern u8 gUnknown_02038730;
+
extern s16 gUnknown_020386A4[][4]; // game freak barely uses 2d arrays wtf?
extern u16 gBuyMenuFrame_Tilemap[];
@@ -82,6 +82,10 @@ extern u16 gUnknown_083CC710[2];
void sub_80B39D0(int var1, int var2, bool32 hasControlCode);
void sub_80B3A70(void);
+void sub_80B4378(u8);
+void sub_80B43F0(u8);
+void Task_ExitBuyMenu(u8);
+void sub_80B4470(u8);
u8 CreateShopMenu(u8 martType)
{
@@ -1058,3 +1062,167 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
}
}
}
+
+void sub_80B4378(u8 taskId)
+{
+ MenuZeroFillWindowRect(0, 0xE, 0x1D, 0x13);
+ MenuZeroFillWindowRect(0, 0xA, 0xD, 0xD);
+ sub_80A3FA0(gBGTilemapBuffers[1], 0x1, 0xB, 0xC, 0x2, 0);
+ sub_80B3420();
+ sub_80B3764(6, 7);
+ sub_80B37EC();
+ StartVerticalScrollIndicators(0);
+ StartVerticalScrollIndicators(1);
+ sub_80B32A4();
+ gTasks[taskId].func = sub_80B40E8;
+}
+
+void sub_80B43F0(u8 taskId)
+{
+ gFieldCallback = sub_80B3050;
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskId].func = Task_ExitBuyMenu;
+}
+
+void Task_ExitBuyMenu(u8 taskId)
+{
+ if(!gPaletteFade.active)
+ {
+ RemoveMoneyLabelObject(0, 0);
+ BuyMenuFreeMemory();
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+ DestroyTask(taskId);
+ }
+}
+
+// in the for loop, the loop prologue is not correct and loads choicesabove + cursor immediately instead of setting up the gUnknown_02038724 struct.
+#ifdef NONMATCHING
+void sub_80B4470(u8 taskId)
+{
+ u16 i;
+
+ for(i = 0; i < 3; i++)
+ {
+ if(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor] != gUnknown_02038724[i].itemId || gUnknown_02038724[i].quantity == 0)
+ continue;
+
+ if(gTasks[taskId].data[1] + gUnknown_02038724[i].quantity > 255)
+ gUnknown_02038724[i].quantity = 255;
+ else
+ gUnknown_02038724[i].quantity += gTasks[taskId].data[1];
+ return;
+ }
+
+ if(gUnknown_02038730 < 3)
+ {
+ gUnknown_02038724[gUnknown_02038730].itemId = gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor];
+ gUnknown_02038724[gUnknown_02038730].quantity = gTasks[taskId].data[1];
+ gUnknown_02038730++;
+ }
+}
+#else
+__attribute__((naked))
+void sub_80B4470(u8 taskId)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ movs r2, 0\n\
+ ldr r0, _080B44C8 @ =gUnknown_02038724\n\
+ mov r12, r0\n\
+ ldr r6, _080B44CC @ =gMartInfo\n\
+ mov r8, r12\n\
+ adds r4, r6, 0\n\
+ ldr r1, _080B44D0 @ =gTasks\n\
+ mov r9, r1\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r7, r0, 3\n\
+_080B4492:\n\
+ lsls r0, r2, 2\n\
+ mov r1, r8\n\
+ adds r3, r0, r1\n\
+ ldrb r0, [r4, 0xB]\n\
+ ldrb r1, [r4, 0x9]\n\
+ adds r0, r1\n\
+ ldr r1, [r4, 0x4]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldrh r1, [r3]\n\
+ ldrh r0, [r0]\n\
+ cmp r1, r0\n\
+ bne _080B44DC\n\
+ ldrh r0, [r3, 0x2]\n\
+ cmp r0, 0\n\
+ beq _080B44DC\n\
+ adds r2, r0, 0\n\
+ mov r4, r9\n\
+ adds r1, r7, r4\n\
+ movs r4, 0xA\n\
+ ldrsh r0, [r1, r4]\n\
+ adds r0, r2, r0\n\
+ cmp r0, 0xFF\n\
+ ble _080B44D4\n\
+ movs r0, 0xFF\n\
+ strh r0, [r3, 0x2]\n\
+ b _080B451E\n\
+ .align 2, 0\n\
+_080B44C8: .4byte gUnknown_02038724\n\
+_080B44CC: .4byte gMartInfo\n\
+_080B44D0: .4byte gTasks\n\
+_080B44D4:\n\
+ ldrh r0, [r1, 0xA]\n\
+ adds r0, r2, r0\n\
+ strh r0, [r3, 0x2]\n\
+ b _080B451E\n\
+_080B44DC:\n\
+ adds r0, r2, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ cmp r2, 0x2\n\
+ bls _080B4492\n\
+ ldr r3, _080B452C @ =gUnknown_02038730\n\
+ ldrb r0, [r3]\n\
+ cmp r0, 0x2\n\
+ bhi _080B451E\n\
+ adds r2, r0, 0\n\
+ lsls r2, 2\n\
+ add r2, r12\n\
+ ldrb r0, [r6, 0xB]\n\
+ ldrb r1, [r6, 0x9]\n\
+ adds r0, r1\n\
+ ldr r1, [r6, 0x4]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r2]\n\
+ ldrb r1, [r3]\n\
+ lsls r1, 2\n\
+ add r1, r12\n\
+ ldr r2, _080B4530 @ =gTasks\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 3\n\
+ adds r0, r2\n\
+ ldrh r0, [r0, 0xA]\n\
+ strh r0, [r1, 0x2]\n\
+ ldrb r0, [r3]\n\
+ adds r0, 0x1\n\
+ strb r0, [r3]\n\
+_080B451E:\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080B452C: .4byte gUnknown_02038730\n\
+_080B4530: .4byte gTasks\n\
+ .syntax divided");
+}
+#endif