#ifndef D_A_ITEM_H #define D_A_ITEM_H #include "common.h" #include "d/a/d_a_base.h" #include "d/a/d_a_itembase.h" #include "d/a/obj/d_a_obj_scattersand.h" #include "d/col/bg/d_bg_s_acch.h" #include "d/col/c/c_cc_d.h" #include "d/col/cc/d_cc_d.h" #include "d/d_shadow.h" #include "f/f_list_mg.h" #include "f/f_list_nd.h" #include "m/m_angle.h" #include "m/m_vec.h" #include "nw4r/ut/ut_Color.h" #include "s/s_State.hpp" #include "toBeSorted/actor_event.h" #include "toBeSorted/dowsing_target.h" #include "toBeSorted/effects_struct.h" class dAcItem_0xB34 { public: virtual ~dAcItem_0xB34(); }; class dAcItem_c : public dAcItemBase_c { public: dAcItem_c(); virtual ~dAcItem_c(); STATE_FUNC_DECLARE(dAcItem_c, Wait); STATE_FUNC_DECLARE(dAcItem_c, Carry); STATE_FUNC_DECLARE(dAcItem_c, GetBeetle); STATE_FUNC_DECLARE(dAcItem_c, WaitGet); STATE_FUNC_DECLARE(dAcItem_c, Get); STATE_FUNC_DECLARE(dAcItem_c, WaitGetDemo); STATE_FUNC_DECLARE(dAcItem_c, WaitForcedGetDemo); STATE_FUNC_DECLARE(dAcItem_c, GetDemo); STATE_FUNC_DECLARE(dAcItem_c, WaitTBoxGetDemo); STATE_FUNC_DECLARE(dAcItem_c, ResurgeWait); STATE_FUNC_DECLARE(dAcItem_c, WaitTurnOff); STATE_FUNC_DECLARE(dAcItem_c, WaitSacredDewGetEffect); static u32 createItemParams(u16 itemId, u32 subType, u32 unk, u8 unk2, u8, u8); static void spawnItem(u16 item, u32 room, const mVec3_c &pos, const mAng3_c &rot, u32 params, u32 arg); static void spawnDrop(u16 item, u32 room, const mVec3_c &pos, const mAng3_c &rot); static u32 checkFlag(u32 flag); void setItemPosition(const mVec3_c &); void getItemFromBWheelItem(); bool isStateWait(); static s32 getTotalBombCount(); static s32 getTotalArrowCount(); static s32 getTotalSeedCount(); static s32 getTotalBombCapacity(); static s32 getTotalSeedCapacity(); static s32 getTotalArrowCapacity(); static u32 getKeyPieceCount(); static u32 getSmallKeyCount(); static bool isRupee(ITEM_ID item); static bool isKeyPiece(ITEM_ID item); static bool isTreasure(ITEM_ID item); static bool getItemGetEventName(u16 item, const char **outName); static void itemGetEventStart(dAcBase_c *); static void itemGetEventEnd(dAcBase_c *); enum Trial_e { TRIAL_SKYLOFT, TRIAL_FARON, TRIAL_ELDIN, TRIAL_LANAYRU, TRIAL_NONE, }; static Trial_e getCurrentTrial(); static void healLink(u32 amount, bool); // move to dAcPy_c private: /* 0x334 */ UNKTYPE *mpMdl; // Model has its own handling system /* 0x338 */ dShadowCircle_c mShdw; /* 0x340 */ mVec3_c mField_0x340; /* 0x34C */ nw4r::ut::Color mColorFilter; /* 0x350 */ f32 mLightLevelMaybe; /* 0x354 */ u8 _354[0x35C - 0x354]; /* 0x35C */ dBgS_AcchCir mAcchCir; /* 0x3B8 */ dBgS_ObjAcch mObjAcch; /* 0x768 */ dCcD_Cyl mCyl; /* 0x8B8 */ STATE_MGR_DECLARE(dAcItem_c); /* 0x8F4 */ EffectsStruct mEff_0x8F4; /* 0x928 */ EffectsStruct mEff_0x928; /* 0x95C */ EffectsStruct mEff_0x95C; /* 0x990 */ EffectsStruct mEff_0x990; /* 0x9C4 */ EffectsStruct mEff_0x9C4; /* 0x9F8 */ EffectsStruct mEff_0x9F8; /* 0xA2C */ EffectsStruct mEff_0xA2C; /* 0xA60 */ EffectsStruct mEff_0xA60; /* 0xA94 */ dAcRef_c mCoveredSand; /* 0xAA0 */ dAcRef_c mUnkRef; /* 0xAAC */ mVec3_c posCopy; /* 0xAB8 */ fLiNdBa_c mNode; /* 0xAC4 */ ActorEventRelated mEventRelated; /* 0xB14 */ DowsingTarget mDowsingTarget; /* 0xB34 */ dAcItem_0xB34 *mField_0xB34[2]; /* 0xB34 */ dAcItem_0xB34 *mField_0xB3C; /* 0xB40 */ UNKTYPE (dAcItem_c::*mFunc_0xB40)(UNKTYPE); /* 0xB4C */ UNKTYPE (dAcItem_c::*mFunc_0xB4C)(UNKTYPE); /* 0xB58 */ UNKTYPE (dAcItem_c::*mFunc_0xB58)(UNKTYPE); /* 0xB64 */ UNKTYPE (dAcItem_c::*mFunc_0xB64)(UNKTYPE); /* 0xB70 */ UNKTYPE (dAcItem_c::*mFunc_0xB70)(UNKTYPE); /* 0xB7C */ UNKTYPE (dAcItem_c::*mFunc_0xB7C)(UNKTYPE); /* 0xB88 */ UNKTYPE (dAcItem_c::*mFunc_0xB88)(UNKTYPE); /* 0xB94 */ UNKTYPE (dAcItem_c::*mFunc_0xB94)(UNKTYPE); /* 0xBA0 */ UNKTYPE (dAcItem_c::*mFunc_0xBA0)(UNKTYPE); /* 0xBAC */ UNKTYPE (dAcItem_c::*mFunc_0xBAC)(UNKTYPE); /* 0xBB8 */ UNKTYPE (dAcItem_c::*mFunc_0xBB8)(UNKTYPE); /* 0xBC4 */ UNKTYPE (dAcItem_c::*mFunc_0xBC4)(UNKTYPE); /* 0xBD0 */ UNKTYPE (dAcItem_c::*mFunc_0xBD0)(UNKTYPE); /* 0xBDC */ UNKTYPE (dAcItem_c::*mFunc_0xBDC)(UNKTYPE); /* 0xBE8 */ UNKTYPE (dAcItem_c::*mFunc_0xBE8)(UNKTYPE); /* 0xBF4 */ UNKTYPE (dAcItem_c::*mFunc_0xBF4)(UNKTYPE); /* 0xC00 */ UNKTYPE (dAcItem_c::*mFunc_0xC00)(UNKTYPE); /* 0xC0C */ UNKTYPE (dAcItem_c::*mFunc_0xC0C)(UNKTYPE); /* 0xC18 */ UNKTYPE (dAcItem_c::*mFunc_0xC18)(UNKTYPE); /* 0xC24 */ UNKTYPE (dAcItem_c::*mFunc_0xC24)(UNKTYPE); /* 0xC30 */ UNKTYPE (dAcItem_c::*mFunc_0xC30)(UNKTYPE); /* 0xC3C */ UNKTYPE (dAcItem_c::*mFunc_0xC3C)(UNKTYPE); /* 0xC48 */ UNKTYPE (dAcItem_c::*mFunc_0xC48)(UNKTYPE); /* 0xC54 */ UNKTYPE (dAcItem_c::*mFunc_0xC54)(UNKTYPE); /* 0xC60 */ UNKTYPE (dAcItem_c::*mFunc_0xC60)(UNKTYPE); /* 0xC6C */ UNKTYPE (dAcItem_c::*mFunc_0xC6C)(UNKTYPE); /* 0xC78 */ UNKTYPE (dAcItem_c::*mFunc_0xC78)(UNKTYPE); /* 0xC84 */ UNKTYPE (dAcItem_c::*mFunc_0xC84)(UNKTYPE); /* 0xC90 */ UNKTYPE (dAcItem_c::*mFunc_0xC90)(UNKTYPE); /* 0xC9C */ UNKTYPE (dAcItem_c::*mFunc_0xC9C)(UNKTYPE); /* 0xCA8 */ UNKTYPE (dAcItem_c::*mFunc_0xCA8)(UNKTYPE); /* 0xCB4 */ UNKTYPE (dAcItem_c::*mFunc_0xCB4)(UNKTYPE); /* 0xCC0 */ dAcRef_c mItemQueuePrev; /* 0xCCC */ dAcRef_c mItemQueueNext; /* 0xCD8 */ f32 mField_0xCD8; /* 0xCDC */ f32 mBaseScale; /* 0xCE0 */ f32 mCurrentScale; /* 0xCE4 */ f32 mField_0xCE4; /* 0xCE8 */ f32 mField_0xCE8; /* 0xCEC */ f32 mField_0xCEC; /* 0xCF0 */ u8 _CF0[0xD00 - 0xCF0]; /* 0xD00 */ f32 mField_0xD00; /* 0xD04 */ f32 mField_0xD04; /* 0xD08 */ u8 _D08[0xD14 - 0xD08]; /* 0xD14 */ f32 mFreestandingOffsetH; /* 0xD18 */ f32 mField_0xD18; /* 0xD1C */ int mGetItemPouchSlot; /* 0xD20 */ int mField_0xD20; /* 0xD24 */ u8 _D24[0xD2C - 0xD24]; /* 0xD2C */ u32 mFramesInAir; /* 0xD30 */ int mItemQuantity; /* 0xD34 */ u32 mItemFlags; /* 0xD38 */ mAng3_c mField_0xD38; /* 0xD3E */ u16 mField_0xD3E; /* 0xD40 */ mAng mMdlRotY; /* 0xD42 */ s16 mField_0xD42; /* 0xD44 */ u16 mRealItemId; /* 0xD46 */ s16 mDespawnTimer; /* 0xD48 */ u8 mField_0xD48; /* 0xD49 */ u8 mField_0xD49; /* 0xD4A */ u8 mField_0xD4A; /* 0xD4B */ u8 mField_0xD4B; /* 0xD4C */ u8 mField_0xD4C; /* 0xD4D */ u8 mField_0xD4D; /* 0xD4E */ u8 mMdlScaleType; /* 0xD4F */ u8 mbNoDespawn; /* 0xD50 */ u8 mbNoGravity; /* 0xD51 */ u8 mField_0xD51; /* 0xD52 */ u8 mField_0xD52; /* 0xD53 */ u8 mField_0xD53; /* 0xD54 */ u8 mbIsWaiting; /* 0xD55 */ u8 mField_0xD55; /* 0xD56 */ u8 mField_0xD56; /* 0xD57 */ u8 mField_0xD57; /* 0xD58 */ u8 mField_0xD58; /* 0xD59 */ u8 mField_0xD59; /* 0xD5A */ u8 mField_0xD5A; /* 0xD5B */ u8 mField_0xD5B; /* 0xD5C */ u8 mField_0xD5C; /* 0xD5D */ bool mbShowItemLighting; /* 0xD5E */ u8 mField_0xD5E; /* 0xD5F */ u8 mField_0xD5F; /* 0xD60 */ u8 mField_0xD60; /* 0xD61 */ u8 mField_0xD61; /* 0xD62 */ u8 mField_0xD62; /* 0xD63 */ u8 mField_0xD63; /* 0xD64 */ u8 mField_0xD64; /* 0xD65 */ u8 mField_0xD65; /* 0xD66 */ u8 mField_0xD66; /* 0xD67 */ u8 mField_0xD67; public: static fLiMgBa_c sItemList; }; #endif