diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2017-10-22 18:55:07 -0400 |
---|---|---|
committer | Diegoisawesome <Diegoisawesome@users.noreply.github.com> | 2017-10-22 17:55:07 -0500 |
commit | c042e5148b9fa3a51a4010922c3f9cd6ba11b51e (patch) | |
tree | 9006d66739fda70b8216f1dcb151f5e296809e08 /src/decoration_inventory.c | |
parent | 1bab62e1cd127e5e01adf839f1d74c5e59ce16bb (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.c | 189 |
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; +} |