Merge pull request #985 from mrgriffin/decoration

Document decoration.c
This commit is contained in:
PikalaxALT
2020-03-17 10:39:37 -04:00
committed by GitHub
13 changed files with 590 additions and 595 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,71 +1,51 @@
// Includes
#include "global.h"
#include "constants/decorations.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
EWRAM_DATA struct DecorationInventory gDecorationInventories[DECORCAT_COUNT] = {};
#define SET_DECOR_INV(i, ptr) {\
gDecorationInventories[i].items = ptr;\
gDecorationInventories[i].size = sizeof(ptr);\
gDecorationInventories[i].size = ARRAY_COUNT(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);
SET_DECOR_INV(DECORCAT_DESK, gSaveBlock1Ptr->decorationDesks);
SET_DECOR_INV(DECORCAT_CHAIR, gSaveBlock1Ptr->decorationChairs);
SET_DECOR_INV(DECORCAT_PLANT, gSaveBlock1Ptr->decorationPlants);
SET_DECOR_INV(DECORCAT_ORNAMENT, gSaveBlock1Ptr->decorationOrnaments);
SET_DECOR_INV(DECORCAT_MAT, gSaveBlock1Ptr->decorationMats);
SET_DECOR_INV(DECORCAT_POSTER, gSaveBlock1Ptr->decorationPosters);
SET_DECOR_INV(DECORCAT_DOLL, gSaveBlock1Ptr->decorationDolls);
SET_DECOR_INV(DECORCAT_CUSHION, gSaveBlock1Ptr->decorationCushions);
InitDecorationContextItems();
}
static void ClearDecorationInventory(u8 idx)
static void ClearDecorationInventory(u8 category)
{
u8 i;
for (i = 0; i < gDecorationInventories[idx].size; i ++)
{
gDecorationInventories[idx].items[i] = DECOR_NONE;
}
for (i = 0; i < gDecorationInventories[category].size; i ++)
gDecorationInventories[category].items[i] = DECOR_NONE;
}
void ClearDecorationInventories(void)
{
u8 idx;
for (idx = 0; idx < 8; idx ++)
{
ClearDecorationInventory(idx);
}
u8 category;
for (category = 0; category < 8; category++)
ClearDecorationInventory(category);
}
s8 GetFirstEmptyDecorSlot(u8 idx)
s8 GetFirstEmptyDecorSlot(u8 category)
{
s8 i;
for (i = 0; i < (s8)gDecorationInventories[idx].size; i ++)
for (i = 0; i < (s8)gDecorationInventories[category].size; i++)
{
if (gDecorationInventories[idx].items[i] == DECOR_NONE)
{
if (gDecorationInventories[category].items[i] == DECOR_NONE)
return i;
}
}
return -1;
}
@@ -78,10 +58,9 @@ bool8 CheckHasDecoration(u8 decor)
for (i = 0; i < gDecorationInventories[category].size; i ++)
{
if (gDecorationInventories[category].items[i] == decor)
{
return TRUE;
}
}
return FALSE;
}
@@ -91,15 +70,11 @@ bool8 DecorationAdd(u8 decor)
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;
}
@@ -107,13 +82,9 @@ bool8 DecorationAdd(u8 decor)
bool8 DecorationCheckSpace(u8 decor)
{
if (decor == DECOR_NONE)
{
return FALSE;
}
if (GetFirstEmptyDecorSlot(gDecorations[decor].category) == -1)
{
return FALSE;
}
return TRUE;
}
@@ -124,9 +95,8 @@ s8 DecorationRemove(u8 decor)
i = 0;
if (decor == DECOR_NONE)
{
return 0;
}
for (i = 0; i < gDecorationInventories[gDecorations[decor].category].size; i ++)
{
category = gDecorations[decor].category;
@@ -137,6 +107,7 @@ s8 DecorationRemove(u8 decor)
return 1;
}
}
return 0;
}
@@ -160,19 +131,18 @@ void CondenseDecorationsInCategory(u8 category)
}
}
u8 GetNumOwnedDecorationsInCategory(u8 idx)
u8 GetNumOwnedDecorationsInCategory(u8 category)
{
u8 i;
u8 ct;
ct = 0;
for (i = 0; i < gDecorationInventories[idx].size; i ++)
for (i = 0; i < gDecorationInventories[category].size; i++)
{
if (gDecorationInventories[idx].items[i] != DECOR_NONE)
{
ct ++;
}
if (gDecorationInventories[category].items[i] != DECOR_NONE)
ct++;
}
return ct;
}

View File

@@ -543,23 +543,23 @@ void InitSecretBaseDecorationSprites(void)
objectEventId = 0;
if (!CurMapIsSecretBase())
{
decorations = gSaveBlock1Ptr->playerRoomDecor;
decorationPositions = gSaveBlock1Ptr->playerRoomDecorPos;
numDecorations = 12;
decorations = gSaveBlock1Ptr->playerRoomDecorations;
decorationPositions = gSaveBlock1Ptr->playerRoomDecorationPositions;
numDecorations = DECOR_MAX_PLAYERS_HOUSE;
}
else
{
u16 secretBaseId = VarGet(VAR_CURRENT_SECRET_BASE);
decorations = gSaveBlock1Ptr->secretBases[secretBaseId].decorations;
decorationPositions = gSaveBlock1Ptr->secretBases[secretBaseId].decorationPositions;
numDecorations = 16;
numDecorations = DECOR_MAX_SECRET_BASE;
}
for (i = 0; i < numDecorations; i++)
{
if (decorations[i] == DECOR_NONE)
continue;
permission = gDecorations[decorations[i]].permission;
category = gDecorations[decorations[i]].category;
if (permission == DECORPERM_SPRITE)

View File

@@ -42,7 +42,7 @@ void TraderSetup(void)
for (i = 0; i < 4; i++)
{
StringCopy(trader->playerNames[i], sDefaultTraderNames[i]);
trader->decorIds[i] = sDefaultTraderDecorations[i];
trader->decorations[i] = sDefaultTraderDecorations[i];
trader->language[i] = GAME_LANGUAGE;
}
}
@@ -64,10 +64,10 @@ void CreateAvailableDecorationsMenu(u8 taskId)
for (i = 0; i < 4; i++)
{
s32 curWidth;
if (trader->decorIds[i] > NUM_DECORATIONS)
if (trader->decorations[i] > NUM_DECORATIONS)
curWidth = fiveMarksWidth;
else
curWidth = GetStringWidth(1, gDecorations[trader->decorIds[i]].name, 0);
curWidth = GetStringWidth(1, gDecorations[trader->decorations[i]].name, 0);
if (curWidth > windowWidth)
windowWidth = curWidth;
}
@@ -76,10 +76,10 @@ void CreateAvailableDecorationsMenu(u8 taskId)
DrawStdFrameWithCustomTileAndPalette(data[3], FALSE, 0x214, 14);
for (i = 0; i < 4; i++)
{
if (trader->decorIds[i] > NUM_DECORATIONS)
if (trader->decorations[i] > NUM_DECORATIONS)
AddTextPrinterParameterized(data[3], 1, gText_FiveMarks, 8, 16 * i + 1, 255, NULL);
else
AddTextPrinterParameterized(data[3], 1, gDecorations[trader->decorIds[i]].name, 8, 16 * i + 1, 255, NULL);
AddTextPrinterParameterized(data[3], 1, gDecorations[trader->decorations[i]].name, 8, 16 * i + 1, 255, NULL);
}
AddTextPrinterParameterized(data[3], 1, gText_Exit, 8, 16 * i + 1, 255, NULL);
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[3], 5, 0);
@@ -125,7 +125,7 @@ void Task_HandleGetDecorationMenuInput(u8 taskId)
gSpecialVar_0x8005 = input;
StringCopy(gStringVar1, trader->playerNames[input]);
ConvertInternationalString(gStringVar1, trader->language[input]);
Task_BufferDecorSelectionAndCloseWindow(taskId, trader->decorIds[input]);
Task_BufferDecorSelectionAndCloseWindow(taskId, trader->decorations[input]);
break;
}
}
@@ -167,7 +167,7 @@ void ScrSpecial_TraderMenuGiveDecoration(void)
CreateTask(ShowDecorationCategoriesWindow, 0);
}
void sub_8133DA0(u8 taskId)
void DecorationItemsMenuAction_Trade(u8 taskId)
{
if (IsSelectedDecorInThePC() == TRUE)
{
@@ -197,7 +197,7 @@ void ScrSpecial_TraderDoDecorationTrade(void)
DecorationRemove(gSpecialVar_0x8006);
DecorationAdd(gSpecialVar_0x8004);
StringCopy(trader->playerNames[gSpecialVar_0x8005], gSaveBlock2Ptr->playerName);
trader->decorIds[gSpecialVar_0x8005] = gSpecialVar_0x8006;
trader->decorations[gSpecialVar_0x8005] = gSpecialVar_0x8006;
trader->language[gSpecialVar_0x8005] = GAME_LANGUAGE;
trader->alreadyTraded = TRUE;
}