summaryrefslogtreecommitdiff
path: root/src/decoration_inventory.c
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2017-10-22 18:55:07 -0400
committerDiegoisawesome <Diegoisawesome@users.noreply.github.com>2017-10-22 17:55:07 -0500
commitc042e5148b9fa3a51a4010922c3f9cd6ba11b51e (patch)
tree9006d66739fda70b8216f1dcb151f5e296809e08 /src/decoration_inventory.c
parent1bab62e1cd127e5e01adf839f1d74c5e59ce16bb (diff)
Decoration + decoration_inventory (#89)
* SetDecorationInventoriesPointers * ClearDecorationInventories * CheckHasDecoration * DecorationAdd * DecorationCheckSpace * DecorationRemove * sub_8161A38 * CountDecorations; Funcion renaming * Disassemble decoration data structs, tilemaps, and descriptions * sub_8126968 * sub_81269D4 * through sub_8126A88 * through sub_8126B2C * sub_8126B80 * sub_8126C08 * sub_8126C48 * sub_8126CA4 * sub_8126D10 * sub_8126E44 * sub_8126E8C * sub_8126F68 * sub_8127058 * sub_8127088 * sub_81270E8 * through sub_8127208 * through sub_8127268 * sub_8127284 * through sub_81272F8 * sub_8127330 * through sub_8127480 * sub_81274A0 * sub_8127500; makefile now tells scaninc to scan headers * Actual real fix to mapfile being in build/emerald instead of wd * through sub_812759C * through sub_812764C * through sub_8127744 * through sub_81277BC * sub_81277E8 * sub_8127814 * through sub_81279C4 * through sub_8127ACC * sub_8127B04 * sub_8127B54 * sub_8127B90 * sub_8127D38 * sub_8127E18 * sub_8127F68 * sub_8128060 * ConfigureCameraObjectForPlacingDecoration * SetUpPlacingDecorationPlayerAvatar * sub_812826C * through sub_8128414 * through sub_81284F4 * sub_812853C * sub_8128950 * through sub_8128AAC * through sub_8128BBC * c1_overworld_prev_quest * sub_8128C64 * sub_8128CD4 * sub_8128D10 * sub_8128DB4 * through sub_8128E18 * through sub_8129068 * sub_8129088 * through sub_81291E8 * sub_812925C * sub_81292D0 * sub_81292E8 * gpu_pal_decompress_alloc_tag_and_upload * AddDecorationIconObjectFromIconTable * GetDecorationIconPicOrPalette * AddDecorationIconObjectFromFieldObject * AddDecorationIconObject * through sub_8129708 * sub_81297F8 * sub_81298EC * SetUpPuttingAwayDecorationPlayerAvatar * sub_8129ABC * sub_8129B34 * sub_8129BCC * through sub_8129C74 * through sub_8129D8C * sub_8129E0C * sub_8129E74 * sub_8129F20 * sub_8129FC8 * sub_812A040 * nonmatching sub_812A0E8 * through sub_812A22C * sub_812A25C * sub_812A2C4 * through sub_812A39C * Remaining fns in decoration.s * Decompile decoration headers * Decompile all remaining decoration data that had already been disassembled * Disassemble two data objects * Suggest structure of list menu template * decompile through decoration list menu template * Disassemble decoration icon graphics table * Rip icon gfx * Decompile deco icon table * Decompile more data related to drawing decorations * Decompile gUnknown_085A7250 structs * Decompile two sprite templates * Decompile remaining data in decoration.s * Decompile decoration ewram * deco -> decor
Diffstat (limited to 'src/decoration_inventory.c')
-rw-r--r--src/decoration_inventory.c189
1 files changed, 189 insertions, 0 deletions
diff --git a/src/decoration_inventory.c b/src/decoration_inventory.c
new file mode 100644
index 000000000..03ab6c00c
--- /dev/null
+++ b/src/decoration_inventory.c
@@ -0,0 +1,189 @@
+
+// Includes
+#include "global.h"
+#include "decoration.h"
+#include "decoration_inventory.h"
+
+// Static type declarations
+
+// Static RAM declarations
+
+EWRAM_DATA struct DecorationInventory gDecorationInventories[8] = {};
+
+// Static ROM declarations
+
+// .rodata
+
+// .text
+
+#define SET_DECOR_INV(i, ptr) {\
+ gDecorationInventories[i].items = ptr;\
+ gDecorationInventories[i].size = sizeof(ptr);\
+}
+
+void SetDecorationInventoriesPointers(void)
+{
+ SET_DECOR_INV(0, gSaveBlock1Ptr->decorDesk);
+ SET_DECOR_INV(1, gSaveBlock1Ptr->decorChair);
+ SET_DECOR_INV(2, gSaveBlock1Ptr->decorPlant);
+ SET_DECOR_INV(3, gSaveBlock1Ptr->decorOrnament);
+ SET_DECOR_INV(4, gSaveBlock1Ptr->decorMat);
+ SET_DECOR_INV(5, gSaveBlock1Ptr->decorPoster);
+ SET_DECOR_INV(6, gSaveBlock1Ptr->decorDoll);
+ SET_DECOR_INV(7, gSaveBlock1Ptr->decorCushion);
+ sub_8126968();
+}
+
+static void ClearDecorationInventory(u8 idx)
+{
+ u8 i;
+
+ for (i = 0; i < gDecorationInventories[idx].size; i ++)
+ {
+ gDecorationInventories[idx].items[i] = DECOR_NONE;
+ }
+}
+
+void ClearDecorationInventories(void)
+{
+ u8 idx;
+
+ for (idx = 0; idx < 8; idx ++)
+ {
+ ClearDecorationInventory(idx);
+ }
+}
+
+s8 GetFirstEmptyDecorSlot(u8 idx)
+{
+ s8 i;
+
+ for (i = 0; i < (s8)gDecorationInventories[idx].size; i ++)
+ {
+ if (gDecorationInventories[idx].items[i] == DECOR_NONE)
+ {
+ return i;
+ }
+ }
+ return -1;
+}
+
+bool8 CheckHasDecoration(u8 decor)
+{
+ u8 i;
+ u8 category;
+
+ category = gDecorations[decor].category;
+ for (i = 0; i < gDecorationInventories[category].size; i ++)
+ {
+ if (gDecorationInventories[category].items[i] == decor)
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+bool8 DecorationAdd(u8 decor)
+{
+ u8 category;
+ s8 idx;
+
+ if (decor == DECOR_NONE)
+ {
+ return FALSE;
+ }
+ category = gDecorations[decor].category;
+ idx = GetFirstEmptyDecorSlot(category);
+ if (idx == -1)
+ {
+ return FALSE;
+ }
+ gDecorationInventories[category].items[idx] = decor;
+ return TRUE;
+}
+
+bool8 DecorationCheckSpace(u8 decor)
+{
+ if (decor == DECOR_NONE)
+ {
+ return FALSE;
+ }
+ if (GetFirstEmptyDecorSlot(gDecorations[decor].category) == -1)
+ {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+s8 DecorationRemove(u8 decor)
+{
+ u8 i;
+ u8 idx;
+
+ i = 0;
+ if (decor == DECOR_NONE)
+ {
+ return 0;
+ }
+ for (i = 0; i < gDecorationInventories[gDecorations[decor].category].size; i ++)
+ {
+ idx = gDecorations[decor].category;
+ if (gDecorationInventories[idx].items[i] == decor)
+ {
+ gDecorationInventories[idx].items[i] = DECOR_NONE;
+ CondenseDecorationCategoryN(idx);
+ return 1;
+ }
+ }
+ return 0;
+}
+
+void CondenseDecorationCategoryN(u8 idx)
+{
+ u8 i;
+ u8 j;
+ u8 tmp;
+
+ for (i = 0; i < gDecorationInventories[idx].size; i ++)
+ {
+ for (j = i + 1; j < gDecorationInventories[idx].size; j ++)
+ {
+ if (gDecorationInventories[idx].items[j] != DECOR_NONE && (gDecorationInventories[idx].items[i] == DECOR_NONE || gDecorationInventories[idx].items[i] > gDecorationInventories[idx].items[j]))
+ {
+ tmp = gDecorationInventories[idx].items[i];
+ gDecorationInventories[idx].items[i] = gDecorationInventories[idx].items[j];
+ gDecorationInventories[idx].items[j] = tmp;
+ }
+ }
+ }
+}
+
+u8 CountDecorationCategoryN(u8 idx)
+{
+ u8 i;
+ u8 ct;
+
+ ct = 0;
+ for (i = 0; i < gDecorationInventories[idx].size; i ++)
+ {
+ if (gDecorationInventories[idx].items[i] != DECOR_NONE)
+ {
+ ct ++;
+ }
+ }
+ return ct;
+}
+
+u8 CountDecorations(void)
+{
+ u8 idx;
+ u8 ct;
+
+ ct = 0;
+ for (idx = 0; idx < 8; idx ++)
+ {
+ ct += CountDecorationCategoryN(idx);
+ }
+ return ct;
+}