Files
pmd-red/src/kangaskhan_storage_3.c
T
Seth Barberee 561ea52847 Luminous cave (#72)
* fully decomp luminous cave

* remove header file. this one isn't ready yet

* doc few fields and func

* doc more of luminous cave
2021-11-10 08:43:51 -08:00

378 lines
10 KiB
C

#include "global.h"
#include "item.h"
#include "kangaskhan_storage.h"
#include "team_inventory.h"
extern struct unkStruct_203B20C *gUnknown_203B20C;
extern u32 sub_801B410();
extern void sub_801B450();
extern void sub_8017F10(u32);
extern u8 sub_801CF14(u32);
struct HeldItem_Alt {
union tempHeld
{
struct HeldItem norm;
u32 full_bits;
} temp;
};
extern u8 sub_8012FD8(u32 *r0);
extern void sub_8013114(u32 *, s32 *);
extern void sub_801CBB8(void);
extern void sub_8017F10(u32);
extern void sub_8012EA4(u32 *, u32);
extern u8 sub_801ADA0(s32);
extern void sub_801A928(void);
extern void sub_8099690(u32);
extern u32 sub_801A6E8(u32);
extern u32 sub_8013BBC(u32 *);
extern u32 sub_801CA08(u32);
extern void sub_8018280(void);
extern void sub_801CF94(void);
extern u8 sub_801CB24();
extern u32 sub_801CFB8(void);
extern void sub_801AD34(u32);
extern u32 sub_801CFE0(u8);
extern u32 sub_801A8AC(void);
extern u32 sub_801AEA8(void);
extern u32 sub_801AED0(u32);
extern void sub_801AE84(void);
extern u8 sub_801CF50(u32);
void sub_8018588(void)
{
s32 temp;
temp = 0;
if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0)
{
sub_8013114(&gUnknown_203B20C->unk70, &temp);
if(temp != 1) gUnknown_203B20C->unk14 = temp;
}
switch(temp)
{
case 2:
if((GetNumberOfFilledInventorySlots() != 0) && sub_801CF50(0) == 0)
sub_8017F10(4);
else
sub_8012EA4(&gUnknown_203B20C->unk70, 1);;
break;
case 3:
if(sub_801CF14(1) != 0)
sub_8012EA4(&gUnknown_203B20C->unk70, 1);
else
sub_8017F10(0xA);
break;
case 1:
sub_8017F10(3);
break;
}
}
void sub_8018620(void)
{
s32 iVar6;
switch(sub_801A6E8(1))
{
case 3:
if(sub_801AEA8() != 0)
{
for(iVar6 = 0; iVar6 < INVENTORY_SIZE; iVar6++)
{
if(sub_801AED0(iVar6) != 0)
{
MoveToStorage(&gTeamInventory_203B460->teamItems[iVar6]);
gTeamInventory_203B460->teamItems[iVar6].itemIndex = 0;
gTeamInventory_203B460->teamItems[iVar6].itemFlags = 0;
}
}
FillInventoryGaps();
sub_801AE84();
if(GetNumberOfFilledInventorySlots() == 0)
{
sub_801A928();
sub_8017F10(1);
}
else
{
sub_8017F10(5);
}
}
else
{
gUnknown_203B20C->unkC = sub_801A8AC();
gUnknown_203B20C->unk8 = gTeamInventory_203B460->teamItems[gUnknown_203B20C->unkC];
sub_8017F10(6);
}
break;
case 4:
gUnknown_203B20C->unkC = sub_801A8AC();
gUnknown_203B20C->unk8 = gTeamInventory_203B460->teamItems[gUnknown_203B20C->unkC];
sub_8017F10(7);
break;
case 2:
sub_801A928();
sub_8017F10(1);
break;
}
}
void sub_80186F8(void)
{
struct HeldItem_Alt item;
u16 cast;
s32 iVar6;
u8 iVar6_32;
switch(sub_801CA08(1))
{
case 3:
if(sub_801CFB8() != 0)
{
for(iVar6 = 0; iVar6 < NUMBER_OF_ITEM_IDS; iVar6++)
{
iVar6_32 = iVar6; // dumb cast needed to match
if(sub_801CFE0(iVar6) != 0)
{
item.temp.full_bits = (item.temp.full_bits & 0xffffff00) | iVar6_32;
if(IsThrowableItem(item.temp.norm.itemIndex))
if(gTeamInventory_203B460->teamStorage[item.temp.norm.itemIndex] > 0x63)
{
item.temp.full_bits = (item.temp.full_bits & 0xffff00ff) | (0xC6 << 7);
}
else
{
cast = gTeamInventory_203B460->teamStorage[item.temp.norm.itemIndex] << 8;
item.temp.full_bits = (item.temp.full_bits & 0xffff00ff) | cast;
}
else
{
item.temp.full_bits = (item.temp.full_bits & 0xffff00ff) | (0x80 << 1);
}
gTeamInventory_203B460->teamStorage[item.temp.norm.itemIndex] -= item.temp.norm.numItems;
sub_8091274((struct HeldItem *)&item);
}
}
FillInventoryGaps();
sub_801CF94();
if((sub_801CF14(1) == 0) && (GetNumberOfFilledInventorySlots() < INVENTORY_SIZE))
sub_8017F10(0xB);
else
{
sub_801CBB8();
sub_8017F10(1);
}
}
else
{
gUnknown_203B20C->itemIndex = sub_801CB24();
xxx_init_itemslot_8090A8C(&gUnknown_203B20C->unk8, gUnknown_203B20C->itemIndex, 0);
gUnknown_203B20C->unk8.numItems = 1;
sub_8017F10(0xD);
}
break;
case 4:
gUnknown_203B20C->itemIndex = sub_801CB24();
xxx_init_itemslot_8090A8C(&gUnknown_203B20C->unk8, gUnknown_203B20C->itemIndex, 0);
gUnknown_203B20C->unk8.numItems = 1;
sub_8017F10(0xE);
break;
case 2:
sub_801CBB8();
sub_8017F10(1);
break;
case 1:
sub_801AD34(0);
break;
}
}
void sub_8018854(void)
{
struct HeldItem_Alt item;
u32 itemsCast;
u32 indexCast;
sub_801CA08(0);
sub_8012FD8(&gUnknown_203B20C->unk70);
switch(sub_8013BBC(&gUnknown_203B20C->unkC0))
{
case 3:
gUnknown_203B20C->unk8.numItems = gUnknown_203B20C->unkC0;
gTeamInventory_203B460->teamStorage[gUnknown_203B20C->unk8.itemIndex] -= gUnknown_203B20C->unk8.numItems;
indexCast = gUnknown_203B20C->unk8.itemIndex;
item.temp.full_bits = (item.temp.full_bits & 0xffffff00) | indexCast;
itemsCast = (gUnknown_203B20C->unk8.numItems << 8);
item.temp.full_bits = (item.temp.full_bits & 0xffff00ff) | itemsCast;
sub_8091274((struct HeldItem *)&item);
if(sub_801CF14(1) == 0)
if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)
{
error:
sub_801CBB8();
sub_8017F10(0x1);
}
else
sub_8017F10(0xB);
else
goto error;
break;
case 2:
sub_8017F10(0xB);
break;
case 1:
sub_8018280();
break;
case 0:
break;
}
}
void sub_8018904(void)
{
s32 temp;
temp = 0;
sub_801A6E8(0);
if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0)
{
sub_8013114(&gUnknown_203B20C->unk70, &temp);
if(temp != 1) gUnknown_203B20C->unk18 = temp;
}
switch(temp)
{
case 2:
if(IsNotMoneyOrUsedTMItem(gUnknown_203B20C->unk8.itemIndex))
if(sub_801ADA0(gUnknown_203B20C->unkC) == 0)
error:
sub_8012EA4(&gUnknown_203B20C->unk70, 1);
else
{
MoveToStorage(&gUnknown_203B20C->unk8);
ShiftItemsDownFrom(gUnknown_203B20C->unkC);
FillInventoryGaps();
if(GetNumberOfFilledInventorySlots() == 0)
{
sub_801A928();
sub_8017F10(1);
}
else
sub_8017F10(5);
}
else
goto error;
break;
case 4:
sub_8099690(0);
sub_8017F10(7);
break;
case 1:
sub_8017F10(5);
break;
}
}
void sub_80189C8(void)
{
struct HeldItem_Alt item;
s32 temp;
u32 itemsCast;
u32 indexCast;
temp = 0;
sub_801CA08(0);
if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0)
{
sub_8013114(&gUnknown_203B20C->unk70, &temp);
if(temp != 1) gUnknown_203B20C->unk1C = temp;
}
switch(temp)
{
case 3:
if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)
sub_8012EA4(&gUnknown_203B20C->unk70, 1);
else if(IsThrowableItem(gUnknown_203B20C->unk8.itemIndex))
sub_8017F10(0xC);
else
{
gTeamInventory_203B460->teamStorage[gUnknown_203B20C->unk8.itemIndex] -= gUnknown_203B20C->unk8.numItems;
indexCast = gUnknown_203B20C->unk8.itemIndex;
item.temp.full_bits = (item.temp.full_bits & 0xffffff00) | indexCast;
itemsCast = (gUnknown_203B20C->unk8.numItems << 8);
item.temp.full_bits = (item.temp.full_bits & 0xffff00ff) | itemsCast;
sub_8091274((struct HeldItem *)&item);
if(sub_801CF14(1) == 0)
if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)
{
error:
sub_801CBB8();
sub_8017F10(1);
}
else
{
sub_8017F10(0xB);
}
else
goto error;
}
break;
case 4:
sub_8017F10(0xE);
break;
case 1:
sub_8017F10(0xB);
break;
}
}
void sub_8018AC8(void)
{
switch(sub_801B410())
{
case 2:
case 3:
sub_801B450();
sub_8017F10(0x5);
break;
case 0:
case 1:
default:
break;
}
}
void sub_8018AE4(void)
{
switch(sub_801B410())
{
case 2:
case 3:
sub_801B450();
sub_8017F10(0xB);
break;
case 0:
case 1:
default:
break;
}
}