mirror of
https://github.com/zeldaret/ph
synced 2026-05-24 23:21:37 -04:00
Update Inventory struct
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
class Navi;
|
||||
+189
-45
@@ -2,63 +2,207 @@
|
||||
|
||||
#include "types.h"
|
||||
#include "SysNew.hpp"
|
||||
|
||||
typedef u32 EquipItem;
|
||||
enum EquipItem_ {
|
||||
EquipItem_None = -1,
|
||||
EquipItem_Boomerang = 2,
|
||||
EquipItem_Shovel = 3,
|
||||
EquipItem_Bomb = 4,
|
||||
EquipItem_Bow = 5,
|
||||
EquipItem_GrapplingHook = 6,
|
||||
EquipItem_Bombchu = 7,
|
||||
EquipItem_Hammer = 8,
|
||||
EquipItem_COUNT = 11,
|
||||
};
|
||||
|
||||
enum ItemId {
|
||||
|
||||
#include "Player/EquipItem.hpp"
|
||||
#include "Actors/Navi/Navi.hpp"
|
||||
|
||||
typedef u32 FairyId;
|
||||
enum FairyId_ {
|
||||
FairyId_None = -1,
|
||||
FairyId_Courage = 0,
|
||||
FairyId_Power = 1,
|
||||
FairyId_Wisdom = 2,
|
||||
};
|
||||
|
||||
enum Gem {
|
||||
Gem_Courage,
|
||||
Gem_Power,
|
||||
Gem_Wisdom,
|
||||
Gem_COUNT,
|
||||
};
|
||||
|
||||
typedef u32 ShipPart;
|
||||
enum ShipPart_ {
|
||||
ShipPart_Anchor,
|
||||
ShipPart_Prow,
|
||||
ShipPart_Hull,
|
||||
ShipPart_Cannon,
|
||||
ShipPart_Handrail,
|
||||
ShipPart_Wheel,
|
||||
ShipPart_Chimney,
|
||||
ShipPart_Bridge,
|
||||
ShipPart_COUNT,
|
||||
};
|
||||
|
||||
typedef u32 ShipType;
|
||||
enum ShipType_ {
|
||||
ShipType_Linebeck,
|
||||
ShipType_Bright,
|
||||
ShipType_Iron,
|
||||
ShipType_Stone,
|
||||
ShipType_Vintage,
|
||||
ShipType_Demon,
|
||||
ShipType_Tropical,
|
||||
ShipType_Dignified,
|
||||
ShipType_Golden,
|
||||
ShipType_COUNT,
|
||||
};
|
||||
|
||||
typedef u32 ShipItem;
|
||||
#define SHIP_ITEM(part, ship) (ShipPart_ ## part * ShipPart_COUNT + ShipType_ ## type)
|
||||
#define ShipItem_COUNT (ShipPart_COUNT * ShipType_COUNT)
|
||||
|
||||
typedef u32 Treasure;
|
||||
enum Treasure_ {
|
||||
Treasure_PinkCoral,
|
||||
Treasure_WhitePearlLoop,
|
||||
Treasure_DarkPearlLoop,
|
||||
Treasure_ZoraScale,
|
||||
Treasure_GoronAmber,
|
||||
Treasure_RutoCrown,
|
||||
Treasure_HelmarocPlume,
|
||||
Treasure_RegalRing,
|
||||
|
||||
Treasure_COUNT,
|
||||
};
|
||||
|
||||
#define NUM_POTIONS 2
|
||||
typedef u8 Potion;
|
||||
enum Potion_ {
|
||||
Potion_None,
|
||||
Potion_Red,
|
||||
Potion_Blue,
|
||||
Potion_Yellow,
|
||||
Potion_COUNT,
|
||||
};
|
||||
|
||||
typedef u32 ItemFlag;
|
||||
enum ItemFlag_ {
|
||||
ItemFlag_None = -1,
|
||||
ItemFlag_OshusSword = 0,
|
||||
ItemFlag_WoodenShield = 1,
|
||||
ItemFlag_Boomerang = 2,
|
||||
ItemFlag_Shovel = 3,
|
||||
ItemFlag_BombBag = 4,
|
||||
ItemFlag_Bow = 5,
|
||||
ItemFlag_GrapplingHook = 6,
|
||||
ItemFlag_BombchuBag = 7,
|
||||
ItemFlag_Hammer = 8,
|
||||
ItemFlag_PotionA = 9,
|
||||
ItemFlag_PotionB = 10,
|
||||
ItemFlag_EQUIP_START = ItemFlag_OshusSword,
|
||||
ItemFlag_EQUIP_END = ItemFlag_PotionB + 1,
|
||||
ItemFlag_EQUIP_COUNT = ItemFlag_EQUIP_END - ItemFlag_EQUIP_START,
|
||||
|
||||
ItemFlag_SpiritOfCourage = 20,
|
||||
ItemFlag_SpiritOfPower = 21,
|
||||
ItemFlag_SpiritOfWisdom = 22,
|
||||
ItemFlag_CourageLv1 = 23,
|
||||
ItemFlag_PowerLv1 = 24,
|
||||
ItemFlag_WisdomLv1 = 25,
|
||||
ItemFlag_CourageLv2 = 26,
|
||||
ItemFlag_PowerLv2 = 27,
|
||||
ItemFlag_WisdomLv2 = 28,
|
||||
|
||||
ItemFlag_Hourglass = 32,
|
||||
ItemFlag_SeaChartSW = 33,
|
||||
ItemFlag_SeaChartNW = 34,
|
||||
ItemFlag_SeaChartSE = 35,
|
||||
ItemFlag_SeaChartNE = 36,
|
||||
ItemFlag_PhantomSword = 37,
|
||||
ItemFlag_SunKey = 38,
|
||||
|
||||
ItemFlag_KingsKey = 42,
|
||||
ItemFlag_GhostKey = 43,
|
||||
|
||||
ItemFlag_SwordsmansScroll = 45,
|
||||
|
||||
ItemFlag_COUNT = 128,
|
||||
};
|
||||
|
||||
struct ItemFlags {
|
||||
/* 00 */ u32 flags[CEIL_DIV(ItemFlag_COUNT, 32)];
|
||||
/* 10 */
|
||||
};
|
||||
|
||||
struct ShipPartPricesShown {
|
||||
/* 0 */ u32 flags[CEIL_DIV(ShipItem_COUNT, 32)];
|
||||
/* c */
|
||||
};
|
||||
|
||||
struct ShipParts {
|
||||
/* 0 */ u8 parts[ShipType_COUNT];
|
||||
/* 9 */
|
||||
};
|
||||
|
||||
struct SaveInventory {
|
||||
/* 00 */ ItemFlags itemFlags;
|
||||
/* 10 */ u32 salvagedTreasureFlags;
|
||||
/* 14 */ ShipPartPricesShown shipPartPricesShown;
|
||||
/* 20 */ u32 treasurePriceShownFlags[CEIL_DIV(Treasure_COUNT, 32)];
|
||||
/* 24 */ u8 equippedShipParts[ShipPart_COUNT];
|
||||
/* 2c */ ShipParts shipParts[ShipPart_COUNT];
|
||||
/* 74 */ s8 treasure[Treasure_COUNT];
|
||||
/* 7c */ unk8 unk_7c[4];
|
||||
/* 80 */ u16 hourglassSeconds;
|
||||
/* 82 */ unk16 unk_82[6];
|
||||
/* 8e */ u16 numRupees;
|
||||
/* 90 */ unk8 unk_90;
|
||||
/* 91 */ unk8 unk_91;
|
||||
/* 92 */ unk8 unk_92;
|
||||
/* 93 */ u8 numBombs;
|
||||
/* 94 */ u8 numBombchus;
|
||||
/* 95 */ u8 numArrows;
|
||||
/* 96 */ u8 equippedItem;
|
||||
/* 97 */ Potion potions[NUM_POTIONS];
|
||||
/* 99 */ u8 numGems[Gem_COUNT];
|
||||
/* 9c */ u8 quiverSize;
|
||||
/* 9d */ u8 bombBagSize;
|
||||
/* 9e */ u8 bombchuBagSize;
|
||||
/* 9f */ unk8 unk_9f[6];
|
||||
/* a5 */ u8 equippedFairy;
|
||||
/* a6 */
|
||||
};
|
||||
|
||||
class Inventory : public SysObject {
|
||||
private:
|
||||
/* 000 */ EquipItem mEquippedItem;
|
||||
/* 004 */ EquipItem mPrevEquippedItem;
|
||||
/* 008 */ u32 mUnk_008;
|
||||
/* 00c */ u32 mUnk_00c;
|
||||
/* 010 */ u32 mUnk_010;
|
||||
/* 014 */ void *mUnk_014;
|
||||
/* 018 */ void *mUnk_018;
|
||||
/* 01c */ void *mUnk_01c;
|
||||
/* 000 */ ItemFlag mEquippedItem;
|
||||
/* 004 */ ItemFlag mPrevEquippedItem;
|
||||
/* 008 */ ItemFlag mForcedItem; // game crashes when any item besides this one is equipped
|
||||
/* 00c */ u32 mHourglassSandFrames;
|
||||
/* 010 */ FairyId mEquippedFairy;
|
||||
/* 014 */ Navi *mNaviCourage;
|
||||
/* 018 */ Navi *mNaviPower;
|
||||
/* 01c */ Navi *mNaviWisdom;
|
||||
/* 020 */ u16 mEquipLoadTimer;
|
||||
/* 022 */ u16 mNumRupees;
|
||||
/* 024 */ u8 mNumCourageGems;
|
||||
/* 025 */ u8 mNumPowerGems;
|
||||
/* 026 */ u8 mNumWisdomGems;
|
||||
/* 027 */ u8 mUnk_027;
|
||||
/* 028 */ u8 mUnk_028[0x20];
|
||||
/* 048 */ s32 mUnk_048[0x14];
|
||||
/* 098 */ s32 mUnk_098;
|
||||
/* 09c */ s32 mUnk_09c;
|
||||
/* 0a0 */ s32 mUnk_0a0;
|
||||
/* 0a4 */ s32 mUnk_0a4;
|
||||
/* 0a8 */ s32 mUnk_0a8;
|
||||
/* 0ac */ void *(*mItemInfo)[EquipItem_COUNT];
|
||||
/* 0b0 */ u16 (*mAmmo)[EquipItem_COUNT];
|
||||
/* 024 */ u8 mNumGems[Gem_COUNT];
|
||||
/* 027 */ unk8 mUnk_027; // padding?
|
||||
/* 028 */ ShipType mEquippedShipParts[ShipPart_COUNT];
|
||||
/* 048 */ ShipParts mShipParts[ShipPart_COUNT];
|
||||
/* 090 */ s8 mTreasure[Treasure_COUNT];
|
||||
/* 098 */ u8 mUnk_098[6];
|
||||
/* 09e */ u16 mUnk_09e[6]; // corresponds with mUnk_098
|
||||
/* 0a6 */ unk16 mUnk_0a6; // padding?
|
||||
/* 0ac */ EquipItem *(*mEquipItems)[ItemFlag_EQUIP_COUNT];
|
||||
/* 0b0 */ u16 (*mAmmo)[ItemFlag_EQUIP_COUNT];
|
||||
/* 0b4 */ u16 mQuiverSize;
|
||||
/* 0b6 */ u16 mBombBagSize;
|
||||
/* 0b8 */ u16 mBombchuBagSize;
|
||||
/* 0ba */ u16 mUnk_0ba;
|
||||
/* 0bc */ u8 mUnk_0bc[4];
|
||||
/* 0c0 */ void *mUnk_0c0[16];
|
||||
/* 100 */ s32 mUnk_100[5];
|
||||
/* 0ba */ unk16 mUnk_0ba; // only between 0 and 9
|
||||
/* 0bc */ Potion mPotions[2];
|
||||
/* 0be */ unk8 mUnk_0be[2]; // padding?
|
||||
/* 0c0 */ void *mIslandData[16];
|
||||
/* 100 */ void *mDungeonData[5]; // non-null in dungeons/caves, similar struct to mIslandData
|
||||
/* 114 */ void *mUnk_114;
|
||||
/* 118 */ s32 mUnk_118;
|
||||
/* 11c */ s32 mUnk_11c;
|
||||
/* 118 */ unk32 mUnk_118;
|
||||
/* 11c */ unk32 mUnk_11c;
|
||||
/* 120 */ void *mUnk_120;
|
||||
/* 124 */ void *mUnk_124;
|
||||
/* 128 */ u32 mItemFlags[4]; // Todo (aetias): Set this to ceil(ItemId::COUNT / 32)
|
||||
/* 138 */ u8 mUnk_138[0x18];
|
||||
/* 128 */ ItemFlags mItemFlags;
|
||||
/* 138 */ u32 mSalvagedTreasureFlags;
|
||||
/* 13c */ ShipPartPricesShown mShipPartPricesShown;
|
||||
/* 148 */ u32 mTreasurePriceShownFlags[CEIL_DIV(Treasure_COUNT, 32)];
|
||||
/* 14c */ unk8 mUnk_14c[0x4];
|
||||
/* 150 */
|
||||
|
||||
public:
|
||||
|
||||
+18
-12
@@ -1,12 +1,18 @@
|
||||
#ifndef PH_TYPES_H
|
||||
#define PH_TYPES_H
|
||||
|
||||
typedef unsigned int u32;
|
||||
typedef unsigned short u16;
|
||||
typedef unsigned char u8;
|
||||
|
||||
typedef int s32;
|
||||
typedef short s16;
|
||||
typedef char s8;
|
||||
|
||||
#endif
|
||||
#ifndef PH_TYPES_H
|
||||
#define PH_TYPES_H
|
||||
|
||||
typedef unsigned int u32;
|
||||
typedef unsigned short u16;
|
||||
typedef unsigned char u8;
|
||||
|
||||
typedef int s32;
|
||||
typedef short s16;
|
||||
typedef char s8;
|
||||
|
||||
typedef u8 unk8;
|
||||
typedef u16 unk16;
|
||||
typedef u32 unk32;
|
||||
|
||||
#define CEIL_DIV(a, b) (((a) + (b) - 1) / (b))
|
||||
|
||||
#endif
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ void Inventory::Destroy() {
|
||||
|
||||
#pragma interworking on
|
||||
void Inventory::ClearPrevEquippedItem() {
|
||||
this->mPrevEquippedItem = EquipItem_None;
|
||||
this->mPrevEquippedItem = ItemFlag_None;
|
||||
}
|
||||
#pragma interworking off
|
||||
|
||||
|
||||
Reference in New Issue
Block a user