summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2017-08-25 20:30:35 -0400
committerProjectRevoTPP <projectrevotpp@hotmail.com>2017-08-25 20:30:35 -0400
commitefd3e208f10ed2db25871bab49b9462ab7efb903 (patch)
treec915cc692a162e2913b671d0e28065a7bb5bb06d /src
parent1ab4ed75e7daae4b17cfca2970e935f653236014 (diff)
finish decompiling shop.c except for a few indented functions
Diffstat (limited to 'src')
-rw-r--r--src/shop.c295
1 files changed, 295 insertions, 0 deletions
diff --git a/src/shop.c b/src/shop.c
index b053e3f2e..737d0e2bd 100644
--- a/src/shop.c
+++ b/src/shop.c
@@ -25,6 +25,7 @@
#include "songs.h"
#include "rom4.h"
#include "decoration_inventory.h"
+#include "field_camera.h"
extern bool8 sub_80A52C4(u8, u8);
@@ -73,6 +74,7 @@ enum
};
extern u8 gUnknown_02038730;
+extern u8 gUnknown_02038731;
extern s16 gUnknown_020386A4[][4]; // game freak barely uses 2d arrays wtf?
@@ -1226,3 +1228,296 @@ _080B4530: .4byte gTasks\n\
.syntax divided");
}
#endif
+
+void ClearItemPurchases(void)
+{
+ gUnknown_02038730 = 0;
+ ClearItemSlots(gUnknown_02038724, 3);
+}
+
+void CreatePokemartMenu(u16 *itemList)
+{
+ CreateShopMenu(MART_TYPE_0);
+ SetShopItemsForSale(itemList);
+ ClearItemPurchases();
+ SetShopMenuCallback(EnableBothScriptContexts);
+}
+
+void CreateDecorationShop1Menu(u16 *itemList)
+{
+ CreateShopMenu(MART_TYPE_1);
+ SetShopItemsForSale(itemList);
+ SetShopMenuCallback(EnableBothScriptContexts);
+}
+
+void CreateDecorationShop2Menu(u16 *itemList)
+{
+ CreateShopMenu(MART_TYPE_2);
+ SetShopItemsForSale(itemList);
+ SetShopMenuCallback(EnableBothScriptContexts);
+}
+
+// no.
+__attribute__((naked))
+void sub_80B45B4(u8 taskId, u16 *list, int var3)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x10\n\
+ mov r9, r1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r2, 16\n\
+ lsrs r2, 16\n\
+ mov r10, r2\n\
+ ldr r2, _080B4648 @ =gTasks\n\
+ lsls r1, r0, 2\n\
+ adds r1, r0\n\
+ lsls r1, 3\n\
+ adds r1, r2\n\
+ ldrh r0, [r1, 0x10]\n\
+ subs r0, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ ldrh r0, [r1, 0x12]\n\
+ subs r0, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ ldrh r4, [r1, 0xA]\n\
+ movs r2, 0xC\n\
+ ldrsh r0, [r1, r2]\n\
+ cmp r0, 0\n\
+ bne _080B4678\n\
+ movs r2, 0\n\
+ lsls r5, 16\n\
+ str r5, [sp, 0xC]\n\
+ lsls r0, r3, 16\n\
+ lsls r1, r4, 16\n\
+ asrs r0, 16\n\
+ str r0, [sp]\n\
+ asrs r1, 16\n\
+ str r1, [sp, 0x4]\n\
+ lsls r0, r1, 1\n\
+ mov r1, r9\n\
+ adds r7, r0, r1\n\
+_080B4608:\n\
+ movs r4, 0\n\
+ lsls r2, 16\n\
+ mov r8, r2\n\
+ asrs r0, r2, 16\n\
+ ldr r2, [sp]\n\
+ adds r6, r2, r0\n\
+_080B4614:\n\
+ ldr r0, [sp, 0xC]\n\
+ asrs r1, r0, 16\n\
+ lsls r4, 16\n\
+ asrs r0, r4, 16\n\
+ adds r5, r1, r0\n\
+ adds r0, r5, 0\n\
+ adds r1, r6, 0\n\
+ bl MapGridGetMetatileIdAt\n\
+ movs r2, 0\n\
+ ldrsh r1, [r7, r2]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r1, r0\n\
+ bne _080B465C\n\
+ ldr r0, [sp, 0x4]\n\
+ cmp r0, 0x2\n\
+ beq _080B464C\n\
+ ldrh r0, [r7, 0x2]\n\
+ mov r2, r10\n\
+ orrs r2, r0\n\
+ adds r0, r5, 0\n\
+ adds r1, r6, 0\n\
+ bl MapGridSetMetatileIdAt\n\
+ b _080B465C\n\
+ .align 2, 0\n\
+_080B4648: .4byte gTasks\n\
+_080B464C:\n\
+ mov r1, r9\n\
+ ldrh r0, [r1]\n\
+ mov r2, r10\n\
+ orrs r2, r0\n\
+ adds r0, r5, 0\n\
+ adds r1, r6, 0\n\
+ bl MapGridSetMetatileIdAt\n\
+_080B465C:\n\
+ movs r2, 0x80\n\
+ lsls r2, 9\n\
+ adds r0, r4, r2\n\
+ lsrs r4, r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x2\n\
+ ble _080B4614\n\
+ adds r0, r2, 0\n\
+ add r0, r8\n\
+ lsrs r2, r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x2\n\
+ ble _080B4608\n\
+ b _080B4700\n\
+_080B4678:\n\
+ movs r2, 0\n\
+ lsls r5, 16\n\
+ str r5, [sp, 0xC]\n\
+ lsls r0, r3, 16\n\
+ lsls r1, r4, 16\n\
+ asrs r0, 16\n\
+ str r0, [sp, 0x8]\n\
+ asrs r7, r1, 16\n\
+_080B4688:\n\
+ movs r4, 0\n\
+ lsls r2, 16\n\
+ mov r8, r2\n\
+ asrs r0, r2, 16\n\
+ ldr r1, [sp, 0x8]\n\
+ adds r6, r1, r0\n\
+_080B4694:\n\
+ ldr r2, [sp, 0xC]\n\
+ asrs r1, r2, 16\n\
+ lsls r4, 16\n\
+ asrs r0, r4, 16\n\
+ adds r5, r1, r0\n\
+ adds r0, r5, 0\n\
+ adds r1, r6, 0\n\
+ bl MapGridGetMetatileIdAt\n\
+ movs r1, 0x2\n\
+ subs r1, r7\n\
+ lsls r1, 1\n\
+ add r1, r9\n\
+ movs r2, 0\n\
+ ldrsh r1, [r1, r2]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r1, r0\n\
+ bne _080B46E6\n\
+ cmp r7, 0x2\n\
+ beq _080B46D6\n\
+ movs r0, 0x1\n\
+ subs r0, r7\n\
+ lsls r0, 1\n\
+ add r0, r9\n\
+ ldrh r0, [r0]\n\
+ mov r2, r10\n\
+ orrs r2, r0\n\
+ adds r0, r5, 0\n\
+ adds r1, r6, 0\n\
+ bl MapGridSetMetatileIdAt\n\
+ b _080B46E6\n\
+_080B46D6:\n\
+ mov r1, r9\n\
+ ldrh r0, [r1, 0x4]\n\
+ mov r2, r10\n\
+ orrs r2, r0\n\
+ adds r0, r5, 0\n\
+ adds r1, r6, 0\n\
+ bl MapGridSetMetatileIdAt\n\
+_080B46E6:\n\
+ movs r2, 0x80\n\
+ lsls r2, 9\n\
+ adds r0, r4, r2\n\
+ lsrs r4, r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x2\n\
+ ble _080B4694\n\
+ adds r0, r2, 0\n\
+ add r0, r8\n\
+ lsrs r2, r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x2\n\
+ ble _080B4688\n\
+_080B4700:\n\
+ add sp, 0x10\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided");
+}
+
+extern u16 gUnknown_083CC714[];
+extern u16 gUnknown_083CC71A[];
+extern u16 gUnknown_083CC720[];
+extern u16 gUnknown_083CC726[];
+extern u16 gUnknown_083CC72C[];
+extern u16 gUnknown_083CC732[];
+extern u16 gUnknown_083CC738[];
+
+void sub_80B4710(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ data[3] = 1;
+
+ switch(data[0])
+ {
+ case 0:
+ sub_80B45B4(taskId, gUnknown_083CC714, 0);
+ break;
+ case 1:
+ sub_80B45B4(taskId, gUnknown_083CC71A, 0);
+ break;
+ case 2:
+ sub_80B45B4(taskId, gUnknown_083CC720, 0xC00);
+ break;
+ case 3:
+ sub_80B45B4(taskId, gUnknown_083CC726, 0);
+ break;
+ case 4:
+ sub_80B45B4(taskId, gUnknown_083CC72C, 0xC00);
+ break;
+ case 5:
+ sub_80B45B4(taskId, gUnknown_083CC732, 0);
+ break;
+ case 6:
+ sub_80B45B4(taskId, gUnknown_083CC738, 0);
+ break;
+ }
+
+ data[0] = (data[0] + 1) & 7;
+ if(!data[0])
+ {
+ DrawWholeMapView();
+ data[1] = (data[1] + 1) % 3;
+ data[3] = 0;
+ }
+}
+
+u8 sub_80B47D8(u16 var)
+{
+ u8 taskId = CreateTask(sub_80B4710, 0);
+ s16 *data = gTasks[taskId].data;
+
+ PlayerGetDestCoords(&data[4], &data[5]);
+ data[0] = 0;
+ data[1] = 0;
+ data[2] = var;
+ sub_80B4710(taskId);
+ return taskId;
+}
+
+void sub_80B4824(u8 var)
+{
+ gUnknown_02038731 = sub_80B47D8(var);
+}
+
+void sub_80B483C(void)
+{
+ DestroyTask(gUnknown_02038731);
+}
+
+bool8 sub_80B4850(void)
+{
+ if(gTasks[gUnknown_02038731].data[3] == 0 && gTasks[gUnknown_02038731].data[1] == 2)
+ return FALSE;
+ else
+ return TRUE;
+}