Document and cleanup some decoration code

This commit is contained in:
Marcus Huderle
2019-04-06 12:41:55 -05:00
committed by huderlem
parent 6a14cd418e
commit fe12f2f4b3
12 changed files with 1020 additions and 1080 deletions
+36 -38
View File
@@ -1,7 +1,8 @@
#ifndef GUARD_DECORATION_H #ifndef GUARD_DECORATION_H
#define GUARD_DECORATION_H #define GUARD_DECORATION_H
enum DecorPerm { enum DecorationPermission
{
/* /*
* The nomenclature here describes collision and placement permissions, in that order. * The nomenclature here describes collision and placement permissions, in that order.
*/ */
@@ -9,13 +10,11 @@ enum DecorPerm {
DECORPERM_PASS_FLOOR, DECORPERM_PASS_FLOOR,
DECORPERM_BEHIND_FLOOR, DECORPERM_BEHIND_FLOOR,
DECORPERM_NA_WALL, DECORPERM_NA_WALL,
DECORPERM_SPRITE DECORPERM_SPRITE,
}; };
enum DecorShape { enum DecorationShape
/* {
* Width-x-height
*/
DECORSHAPE_1x1, DECORSHAPE_1x1,
DECORSHAPE_2x1, DECORSHAPE_2x1,
DECORSHAPE_3x1, // unused DECORSHAPE_3x1, // unused
@@ -25,53 +24,52 @@ enum DecorShape {
DECORSHAPE_1x3, // unused DECORSHAPE_1x3, // unused
DECORSHAPE_2x4, DECORSHAPE_2x4,
DECORSHAPE_3x3, DECORSHAPE_3x3,
DECORSHAPE_3x2 DECORSHAPE_3x2,
}; };
enum DecorCat { enum DecorationCategory
/* {
* In which category you can find the decoration in the PC. DECORCAT_DESK,
*/ DECORCAT_CHAIR,
/*0*/ DECORCAT_DESK, DECORCAT_PLANT,
/*1*/ DECORCAT_CHAIR, DECORCAT_ORNAMENT,
/*2*/ DECORCAT_PLANT, DECORCAT_MAT,
/*3*/ DECORCAT_ORNAMENT, DECORCAT_POSTER,
/*4*/ DECORCAT_MAT, DECORCAT_DOLL,
/*5*/ DECORCAT_POSTER, DECORCAT_CUSHION,
/*6*/ DECORCAT_DOLL, DECORCAT_COUNT,
/*7*/ DECORCAT_CUSHION
}; };
struct Decoration struct Decoration
{ {
/*0x00*/ u8 id; u8 id;
/*0x01*/ u8 name[16]; u8 name[16];
/*0x11*/ u8 permission; u8 permission;
/*0x12*/ u8 shape; u8 shape;
/*0x13*/ u8 category; u8 category;
/*0x14*/ u16 price; u16 price;
/*0x18*/ const u8 *description; const u8 *description;
/*0x1c*/ const u16 *tiles; const u16 *tiles;
}; };
struct DecorPCPointers struct DecorationPCContext
{ {
/* 0x00 */ u8 *items; u8 *items;
/* 0x04 */ u8 *pos; u8 *pos;
/* 0x08 */ u8 size; u8 size;
/* 0x09 */ u8 isPlayerRoom; u8 isPlayerRoom;
}; };
extern const struct Decoration gDecorations[]; extern const struct Decoration gDecorations[];
extern EWRAM_DATA u8 *gCurDecorInventoryItems; extern EWRAM_DATA u8 *gCurDecorationItems;
extern EWRAM_DATA u8 gCurDecorationIndex; extern EWRAM_DATA u8 gCurDecorationIndex;
void sub_8126968(void); void InitDecorationContextItems(void);
void sub_8126AD8(u8 taskId); void DoSecretBaseDecorationMenu(u8 taskId);
void ShowDecorationOnMap(u16 mapX, u16 mapY, u16 decor); void ShowDecorationOnMap(u16 mapX, u16 mapY, u16 decor);
void sub_8126B2C(u8 taskId); void DoPlayerRoomDecorationMenu(u8 taskId);
void sub_8127208(u8 taskId); void ShowDecorationCategoriesWindow(u8 taskId);
void sub_8127250(u8 *dest, u8 decorCat); void CopyDecorationCategoryName(u8 *dest, u8 decorCat);
bool8 IsSelectedDecorInThePC(void); bool8 IsSelectedDecorInThePC(void);
u8 AddDecorationIconObject(u8 decor, s16 x, s16 y, u8 priority, u16 tilesTag, u16 paletteTag); u8 AddDecorationIconObject(u8 decor, s16 x, s16 y, u8 priority, u16 tilesTag, u16 paletteTag);
+4 -4
View File
@@ -11,13 +11,13 @@ extern struct DecorationInventory gDecorationInventories[];
void SetDecorationInventoriesPointers(void); void SetDecorationInventoriesPointers(void);
void ClearDecorationInventories(void); void ClearDecorationInventories(void);
s8 GetFirstEmptyDecorSlot(u8 idx); s8 GetFirstEmptyDecorSlot(u8 category);
u8 CheckHasDecoration(u8); u8 CheckHasDecoration(u8);
u8 DecorationAdd(u8); u8 DecorationAdd(u8);
u8 DecorationCheckSpace(u8); u8 DecorationCheckSpace(u8);
s8 DecorationRemove(u8); s8 DecorationRemove(u8);
void CondenseDecorationCategoryN(u8); void CondenseDecorationsInCategory(u8 category);
u8 CountDecorationCategoryN(u8 idx); u8 GetNumOwnedDecorationsInCategory(u8 category);
u8 CountDecorations(void); u8 GetNumOwnedDecorations(void);
#endif // GUARD_DECORATION_INVENTORY_H #endif // GUARD_DECORATION_INVENTORY_H
+2 -2
View File
@@ -107,8 +107,8 @@ struct OamData
#define SPRITE_SIZE_16x32 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_V_RECTANGLE)) #define SPRITE_SIZE_16x32 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_V_RECTANGLE))
#define SPRITE_SIZE_32x64 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_V_RECTANGLE)) #define SPRITE_SIZE_32x64 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_V_RECTANGLE))
#define SPRITE_SIZE(dim) (SPRITE_SIZE_##dim >> 2) #define SPRITE_SIZE(dim) ((SPRITE_SIZE_##dim >> 2) & 0x03)
#define SPRITE_SHAPE(dim) (SPRITE_SIZE_##dim & 0xFF) #define SPRITE_SHAPE(dim) (SPRITE_SIZE_##dim & 0x03)
struct BgAffineSrcData struct BgAffineSrcData
{ {
+1 -1
View File
@@ -30,7 +30,7 @@ bool8 itemid_80BF6D8_mail_related(u16 itemId);
bool8 sub_81221AC(void); bool8 sub_81221AC(void);
bool8 sub_81221EC(void); bool8 sub_81221EC(void);
void sub_812220C(struct ItemSlot *slots, u8 count, u8 *arg2, u8 *usedSlotsCount, u8 maxUsedSlotsCount); void sub_812220C(struct ItemSlot *slots, u8 count, u8 *arg2, u8 *usedSlotsCount, u8 maxUsedSlotsCount);
void sub_812225C(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3); void sub_812225C(u16 *scrollOffset, u16 *cursorPos, u8 maxShownItems, u8 numItems);
void sub_8122298(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3, u8 arg4); void sub_8122298(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3, u8 arg4);
void LoadListMenuArrowsGfx(void); void LoadListMenuArrowsGfx(void);
void sub_8122344(u8 *spriteIds, u8 count); void sub_8122344(u8 *spriteIds, u8 count);
+1 -1
View File
@@ -6,7 +6,7 @@
#define GUARD_TRADER_H #define GUARD_TRADER_H
void sub_8133DA0(u8 taskId); void sub_8133DA0(u8 taskId);
void sub_8133E1C(u8 taskId); void ExitTraderMenu(u8 taskId);
void TraderSetup(void); void TraderSetup(void);
void Trader_ResetFlag(void); void Trader_ResetFlag(void);
+938 -995
View File
File diff suppressed because it is too large Load Diff
+22 -23
View File
@@ -32,7 +32,7 @@ void SetDecorationInventoriesPointers(void)
SET_DECOR_INV(5, gSaveBlock1Ptr->decorPoster); SET_DECOR_INV(5, gSaveBlock1Ptr->decorPoster);
SET_DECOR_INV(6, gSaveBlock1Ptr->decorDoll); SET_DECOR_INV(6, gSaveBlock1Ptr->decorDoll);
SET_DECOR_INV(7, gSaveBlock1Ptr->decorCushion); SET_DECOR_INV(7, gSaveBlock1Ptr->decorCushion);
sub_8126968(); InitDecorationContextItems();
} }
static void ClearDecorationInventory(u8 idx) static void ClearDecorationInventory(u8 idx)
@@ -120,7 +120,7 @@ bool8 DecorationCheckSpace(u8 decor)
s8 DecorationRemove(u8 decor) s8 DecorationRemove(u8 decor)
{ {
u8 i; u8 i;
u8 idx; u8 category;
i = 0; i = 0;
if (decor == DECOR_NONE) if (decor == DECOR_NONE)
@@ -129,38 +129,38 @@ s8 DecorationRemove(u8 decor)
} }
for (i = 0; i < gDecorationInventories[gDecorations[decor].category].size; i ++) for (i = 0; i < gDecorationInventories[gDecorations[decor].category].size; i ++)
{ {
idx = gDecorations[decor].category; category = gDecorations[decor].category;
if (gDecorationInventories[idx].items[i] == decor) if (gDecorationInventories[category].items[i] == decor)
{ {
gDecorationInventories[idx].items[i] = DECOR_NONE; gDecorationInventories[category].items[i] = DECOR_NONE;
CondenseDecorationCategoryN(idx); CondenseDecorationsInCategory(category);
return 1; return 1;
} }
} }
return 0; return 0;
} }
void CondenseDecorationCategoryN(u8 idx) void CondenseDecorationsInCategory(u8 category)
{ {
u8 i; u8 i;
u8 j; u8 j;
u8 tmp; u8 tmp;
for (i = 0; i < gDecorationInventories[idx].size; i ++) for (i = 0; i < gDecorationInventories[category].size; i ++)
{ {
for (j = i + 1; j < gDecorationInventories[idx].size; j ++) for (j = i + 1; j < gDecorationInventories[category].size; j ++)
{ {
if (gDecorationInventories[idx].items[j] != DECOR_NONE && (gDecorationInventories[idx].items[i] == DECOR_NONE || gDecorationInventories[idx].items[i] > gDecorationInventories[idx].items[j])) if (gDecorationInventories[category].items[j] != DECOR_NONE && (gDecorationInventories[category].items[i] == DECOR_NONE || gDecorationInventories[category].items[i] > gDecorationInventories[category].items[j]))
{ {
tmp = gDecorationInventories[idx].items[i]; tmp = gDecorationInventories[category].items[i];
gDecorationInventories[idx].items[i] = gDecorationInventories[idx].items[j]; gDecorationInventories[category].items[i] = gDecorationInventories[category].items[j];
gDecorationInventories[idx].items[j] = tmp; gDecorationInventories[category].items[j] = tmp;
} }
} }
} }
} }
u8 CountDecorationCategoryN(u8 idx) u8 GetNumOwnedDecorationsInCategory(u8 idx)
{ {
u8 i; u8 i;
u8 ct; u8 ct;
@@ -176,15 +176,14 @@ u8 CountDecorationCategoryN(u8 idx)
return ct; return ct;
} }
u8 CountDecorations(void) u8 GetNumOwnedDecorations(void)
{ {
u8 idx; u8 category;
u8 ct; u8 count;
ct = 0; count = 0;
for (idx = 0; idx < 8; idx ++) for (category = 0; category < DECORCAT_COUNT; category++)
{ count += GetNumOwnedDecorationsInCategory(category);
ct += CountDecorationCategoryN(idx);
} return count;
return ct;
} }
+7 -7
View File
@@ -344,17 +344,17 @@ void sub_812220C(struct ItemSlot *slots, u8 count, u8 *arg2, u8 *usedSlotsCount,
*arg2 = (*usedSlotsCount); *arg2 = (*usedSlotsCount);
} }
void sub_812225C(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3) void sub_812225C(u16 *scrollOffset, u16 *cursorPos, u8 maxShownItems, u8 numItems)
{ {
if ((*arg0) != 0 && (*arg0) + arg2 > arg3) if (*scrollOffset != 0 && *scrollOffset + maxShownItems > numItems)
(*arg0) = arg3 - arg2; *scrollOffset = numItems - maxShownItems;
if ((*arg0) + (*arg1) >= arg3) if (*scrollOffset + *cursorPos >= numItems)
{ {
if (arg3 == 0) if (numItems == 0)
(*arg1) = 0; *cursorPos = 0;
else else
(*arg1) = arg3 - 1; *cursorPos = numItems - 1;
} }
} }
+2 -2
View File
@@ -412,9 +412,9 @@ static void PlayerPC_Mailbox(u8 taskId)
} }
} }
static void PlayerPC_Decoration(u8 var) static void PlayerPC_Decoration(u8 taskId)
{ {
sub_8126B2C(var); //DoPlayerPCDecoration(var); DoPlayerRoomDecorationMenu(taskId);
} }
static void PlayerPC_TurnOff(u8 taskId) static void PlayerPC_TurnOff(u8 taskId)
+2 -2
View File
@@ -854,7 +854,7 @@ void GetCurSecretBaseRegistrationValidity(void)
{ {
if (IsSecretBaseRegistered(VarGet(VAR_CURRENT_SECRET_BASE)) == TRUE) if (IsSecretBaseRegistered(VarGet(VAR_CURRENT_SECRET_BASE)) == TRUE)
gSpecialVar_Result = 1; gSpecialVar_Result = 1;
else if (GetNumRegisteredSecretBases() > 9) else if (GetNumRegisteredSecretBases() >= 10)
gSpecialVar_Result = 2; gSpecialVar_Result = 2;
else else
gSpecialVar_Result = 0; gSpecialVar_Result = 0;
@@ -868,7 +868,7 @@ void ToggleCurSecretBaseRegistry(void)
void ShowSecretBaseDecorationMenu(void) void ShowSecretBaseDecorationMenu(void)
{ {
CreateTask(sub_8126AD8, 0); CreateTask(DoSecretBaseDecorationMenu, 0);
} }
void ShowSecretBaseRegistryMenu(void) void ShowSecretBaseRegistryMenu(void)
+5 -5
View File
@@ -142,7 +142,7 @@ void ScrSpecial_DoesPlayerHaveNoDecorations(void)
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
if (CountDecorationCategoryN(i)) if (GetNumOwnedDecorationsInCategory(i))
{ {
gSpecialVar_Result = FALSE; gSpecialVar_Result = FALSE;
return; return;
@@ -157,21 +157,21 @@ void ScrSpecial_IsDecorationFull(void)
if (gDecorations[gSpecialVar_0x8004].category != gDecorations[gSpecialVar_0x8006].category if (gDecorations[gSpecialVar_0x8004].category != gDecorations[gSpecialVar_0x8006].category
&& GetFirstEmptyDecorSlot(gDecorations[gSpecialVar_0x8004].category) == -1) && GetFirstEmptyDecorSlot(gDecorations[gSpecialVar_0x8004].category) == -1)
{ {
sub_8127250(gStringVar2, gDecorations[gSpecialVar_0x8004].category); CopyDecorationCategoryName(gStringVar2, gDecorations[gSpecialVar_0x8004].category);
gSpecialVar_Result = TRUE; gSpecialVar_Result = TRUE;
} }
} }
void ScrSpecial_TraderMenuGiveDecoration(void) void ScrSpecial_TraderMenuGiveDecoration(void)
{ {
CreateTask(sub_8127208, 0); CreateTask(ShowDecorationCategoriesWindow, 0);
} }
void sub_8133DA0(u8 taskId) void sub_8133DA0(u8 taskId)
{ {
if (IsSelectedDecorInThePC() == TRUE) if (IsSelectedDecorInThePC() == TRUE)
{ {
gSpecialVar_0x8006 = gCurDecorInventoryItems[gCurDecorationIndex]; gSpecialVar_0x8006 = gCurDecorationItems[gCurDecorationIndex];
StringCopy(gStringVar3, gDecorations[gSpecialVar_0x8004].name); StringCopy(gStringVar3, gDecorations[gSpecialVar_0x8004].name);
StringCopy(gStringVar2, gDecorations[gSpecialVar_0x8006].name); StringCopy(gStringVar2, gDecorations[gSpecialVar_0x8006].name);
} }
@@ -183,7 +183,7 @@ void sub_8133DA0(u8 taskId)
EnableBothScriptContexts(); EnableBothScriptContexts();
} }
void sub_8133E1C(u8 taskId) void ExitTraderMenu(u8 taskId)
{ {
gSpecialVar_0x8006 = 0; gSpecialVar_0x8006 = 0;
DestroyTask(taskId); DestroyTask(taskId);