mirror of
https://github.com/pret/pmd-red.git
synced 2026-06-16 21:50:21 -05:00
* decompile sub_8091290 * decompile sub_80912c8 * rename functions / struct field * more names * decompile 80913A0 * decompile GetItemMove * decompile sub_80913E0 * rename function * decompile CanSellItem function * rename inventory struct * add some item check functions * fix renaming stuff * this file shouldnt have been here * forgot merge conflict * decompile more item functions * rename some stuff * fix HM/TM naming * Update src/code_801AFA4.c Use enum value for USED_TM * Fix incorrect value * decompile sub_80915F4 * decompile HasGummiItem * decompiled another function and renamed stuff * decompile 2 smaller functions * more functions * more decompiling and renaming * redo change that was undone in the merge
298 lines
6.5 KiB
C
298 lines
6.5 KiB
C
#include "global.h"
|
|
#include "file_system.h"
|
|
#include "item.h"
|
|
#include "team_inventory.h"
|
|
#include "random.h"
|
|
#include "pokemon.h"
|
|
|
|
extern struct TeamInventory *gTeamInventory_203B460;
|
|
extern struct TeamInventory gUnknown_20389A8;
|
|
extern struct FileArchive gSystemFileArchive;
|
|
extern const char gUnknown_8109764;
|
|
extern u16 *gGummiStatBoostLUT;
|
|
|
|
EWRAM_DATA struct OpenedFile *gItemParametersFile;
|
|
EWRAM_DATA struct Item *gItemParametersData;
|
|
|
|
extern u8 GetItemType(u8);
|
|
extern u32 GetItemUnkThrow(u8, u32);
|
|
extern bool8 CanSellItem(u8);
|
|
extern void sub_8090F58(void*, u8 *, struct ItemSlot *, u32);
|
|
|
|
void LoadItemParameters(void)
|
|
{
|
|
gTeamInventory_203B460 = &gUnknown_20389A8;
|
|
gItemParametersFile = OpenFileAndGetFileDataPtr(&gUnknown_8109764,&gSystemFileArchive);
|
|
gItemParametersData = (struct Item *) gItemParametersFile->data;
|
|
}
|
|
|
|
struct TeamInventory *GetMoneyItemsInfo(void)
|
|
{
|
|
return &gUnknown_20389A8;
|
|
}
|
|
|
|
void InitializeMoneyItems(void)
|
|
{
|
|
s32 i;
|
|
|
|
for(i = 0; i < INVENTORY_SIZE; i++)
|
|
{
|
|
gTeamInventory_203B460->teamItems[i].unk0 = 0;
|
|
}
|
|
|
|
for(i = 0; i < 0xF0; i++)
|
|
{
|
|
gTeamInventory_203B460->teamStorage[i] = 0;
|
|
}
|
|
|
|
for(i = 0; i < 8; i++)
|
|
{
|
|
xxx_init_unk230_substruct(i);
|
|
}
|
|
gTeamInventory_203B460->teamMoney = 0;
|
|
gTeamInventory_203B460->teamSavings = 0;
|
|
}
|
|
|
|
s32 GetNumberOfFilledInventorySlots(void)
|
|
{
|
|
s32 i;
|
|
s32 count;
|
|
|
|
count = 0;
|
|
for(i = 0; i < INVENTORY_SIZE; i++)
|
|
{
|
|
if ((gTeamInventory_203B460->teamItems[i].unk0 & 1) != 0) {
|
|
count++;
|
|
}
|
|
}
|
|
return count;
|
|
}
|
|
|
|
bool8 IsThrowableItem(u8 itemIndex)
|
|
{
|
|
if ((GetItemType(itemIndex) != ITEM_TYPE_THROWABLE) && (GetItemType(itemIndex) != ITEM_TYPE_ROCK)) {
|
|
return FALSE;
|
|
}
|
|
else {
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
void sub_8090A8C(struct ItemSlot *param_1,u8 itemIndex,u8 param_3)
|
|
{
|
|
u32 uVar3;
|
|
u32 uVar4;
|
|
|
|
if (itemIndex != ITEM_ID_NOTHING) {
|
|
param_1->unk0 = 1;
|
|
param_1->itemIndex = itemIndex;
|
|
if (IsThrowableItem(itemIndex)) {
|
|
uVar3 = GetItemUnkThrow(itemIndex,0);
|
|
uVar4 = GetItemUnkThrow(itemIndex,1);
|
|
param_1->numItems = RandomRange(uVar3,uVar4);
|
|
}
|
|
else {
|
|
if (GetItemType(itemIndex) == ITEM_TYPE_MONEY) {
|
|
param_1->numItems = 1;
|
|
}
|
|
else {
|
|
param_1->numItems = 0;
|
|
}
|
|
}
|
|
if (param_3 != 0) {
|
|
param_1->unk0 |= 8;
|
|
}
|
|
}
|
|
else {
|
|
param_1->unk0 = 0;
|
|
param_1->itemIndex = ITEM_ID_NOTHING;
|
|
param_1->numItems = 0;
|
|
}
|
|
}
|
|
|
|
void sub_8090B08(struct ItemSlot_ALT *param_1,u8 itemIndex)
|
|
{
|
|
u32 uVar2;
|
|
u32 uVar3;
|
|
|
|
if (itemIndex != ITEM_ID_NOTHING) {
|
|
param_1->itemIndex = itemIndex;
|
|
if (IsThrowableItem(itemIndex)) {
|
|
uVar2 = GetItemUnkThrow(itemIndex,0);
|
|
uVar3 = GetItemUnkThrow(itemIndex,1);
|
|
param_1->numItems = RandomRange(uVar2,uVar3);
|
|
} else {
|
|
if (GetItemType(itemIndex) == ITEM_TYPE_MONEY) {
|
|
param_1->numItems = 1;
|
|
}
|
|
else {
|
|
param_1->numItems = 0;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
param_1->itemIndex = 0;
|
|
param_1->numItems = 0;
|
|
}
|
|
}
|
|
|
|
void sub_8090B64(struct ItemSlot *param_1, struct ItemSlot_ALT *param_2)
|
|
{
|
|
u8 r6;
|
|
|
|
if(param_2->itemIndex != ITEM_ID_NOTHING)
|
|
{
|
|
param_1->unk0 = 1;
|
|
param_1->itemIndex = param_2->itemIndex;
|
|
r6 = IsThrowableItem(param_1->itemIndex);
|
|
if(r6 != 0 || GetItemType(param_1->itemIndex) == ITEM_TYPE_MONEY)
|
|
{
|
|
param_1->numItems = param_2->numItems;
|
|
}
|
|
else
|
|
{
|
|
if(param_1->itemIndex == ITEM_ID_USED_TM)
|
|
{
|
|
param_1->numItems = param_2->numItems;
|
|
}
|
|
else
|
|
{
|
|
param_1->numItems = r6;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
param_1->itemIndex = ITEM_ID_NOTHING;
|
|
param_1->numItems = 0;
|
|
param_1->unk0 = 0;
|
|
}
|
|
}
|
|
|
|
void sub_8090BB0(struct ItemSlot_ALT *param_1,struct ItemSlot *param_2)
|
|
{
|
|
if ((param_2->unk0 & 1) != 0) {
|
|
param_1->itemIndex = param_2->itemIndex;
|
|
param_1->numItems = param_2->numItems;
|
|
}
|
|
else {
|
|
param_1->itemIndex = ITEM_ID_NOTHING;
|
|
}
|
|
}
|
|
|
|
u8 GetItemType(u8 index)
|
|
{
|
|
return gItemParametersData[index].type;
|
|
}
|
|
|
|
s32 GetStackBuyValue(struct ItemSlot *param_1)
|
|
{
|
|
if (param_1->itemIndex == ITEM_ID_POKE) {
|
|
return GetMoneyValue(param_1);
|
|
}
|
|
else {
|
|
if (IsThrowableItem(param_1->itemIndex)) {
|
|
return gItemParametersData[param_1->itemIndex].buyPrice * param_1->numItems;
|
|
}
|
|
else {
|
|
return gItemParametersData[param_1->itemIndex].buyPrice;
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 GetStackSellValue(struct ItemSlot *param_1)
|
|
{
|
|
if (param_1->itemIndex == ITEM_ID_POKE) {
|
|
return GetMoneyValue(param_1);
|
|
}
|
|
else {
|
|
if (IsThrowableItem(param_1->itemIndex)) {
|
|
return gItemParametersData[param_1->itemIndex].sellPrice * param_1->numItems;
|
|
}
|
|
else {
|
|
return gItemParametersData[param_1->itemIndex].sellPrice;
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 GetStackBuyPrice(struct ItemSlot *param_1)
|
|
{
|
|
if (!CanSellItem(param_1->itemIndex)) {
|
|
return 0;
|
|
}
|
|
else {
|
|
if (IsThrowableItem(param_1->itemIndex)) {
|
|
return gItemParametersData[param_1->itemIndex].buyPrice * param_1->numItems;
|
|
}
|
|
else {
|
|
return gItemParametersData[param_1->itemIndex].buyPrice;
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 GetStackSellPrice(struct ItemSlot *param_1)
|
|
{
|
|
if (!CanSellItem(param_1->itemIndex)) {
|
|
return 0;
|
|
}
|
|
else {
|
|
if (IsThrowableItem(param_1->itemIndex)) {
|
|
return gItemParametersData[param_1->itemIndex].sellPrice * param_1->numItems;
|
|
}
|
|
else {
|
|
return gItemParametersData[param_1->itemIndex].sellPrice;
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 GetItemBuyPrice(u8 itemIndex)
|
|
{
|
|
return gItemParametersData[itemIndex].buyPrice;
|
|
}
|
|
|
|
s32 GetItemSellPrice(u8 itemIndex)
|
|
{
|
|
return gItemParametersData[itemIndex].sellPrice;
|
|
}
|
|
|
|
s32 GetItemOrder(u8 itemIndex)
|
|
{
|
|
return gItemParametersData[itemIndex].order;
|
|
}
|
|
|
|
u8 GetItemPalette(u8 itemIndex)
|
|
{
|
|
return gItemParametersData[itemIndex].palette;
|
|
}
|
|
|
|
u8 GetItemCategory(u8 itemIndex)
|
|
{
|
|
return gItemParametersData[itemIndex].category;
|
|
}
|
|
|
|
u32 GetItemUnkThrow(u8 itemIndex, u32 r1)
|
|
{
|
|
return gItemParametersData[itemIndex].unkThrow1B[r1];
|
|
}
|
|
|
|
u8 *GetItemDescription(u8 itemIndex)
|
|
{
|
|
return gItemParametersData[itemIndex].descriptionPointer;
|
|
}
|
|
|
|
u32 GetItemUnkFood(u8 itemIndex, u32 r1)
|
|
{
|
|
return gItemParametersData[itemIndex].unkFood1[r1];
|
|
}
|
|
|
|
void sub_8090DC4(void* param_1,u8 itemIndex,u32 param_3)
|
|
{
|
|
char acStack104 [80];
|
|
struct ItemSlot unkItem;
|
|
|
|
strncpy(acStack104,gItemParametersData[itemIndex].namePointer,0x50);
|
|
sub_8090A8C(&unkItem,itemIndex,0);
|
|
unkItem.numItems = 1;
|
|
sub_8090F58(param_1,acStack104,&unkItem,param_3);
|
|
}
|