summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2026-05-02 18:21:12 +0200
committerrobojumper <robojumper@gmail.com>2026-05-10 20:05:47 +0200
commit6046f9bd7cb506cfff17aa1327a3f135867c8ed5 (patch)
tree3713e0e382f118b6cd111e4f706e7331bd379db4 /include
parentf0d98002982bfed70817a0d2c110c55dd7b55231 (diff)
dAcItem_c::{create, createHeap} OK
Diffstat (limited to 'include')
-rw-r--r--include/d/a/d_a_base.h5
-rw-r--r--include/d/a/d_a_item.h402
-rw-r--r--include/d/a/d_a_itembase.h11
-rw-r--r--include/d/col/bg/d_bg_s_acch.h2
-rw-r--r--include/d/col/c/c_cc_d.h39
-rw-r--r--include/d/t/d_t_force_get_flag.h13
-rw-r--r--include/toBeSorted/item_mdl.h1
-rw-r--r--include/toBeSorted/item_mdl_misc.h1
8 files changed, 428 insertions, 46 deletions
diff --git a/include/d/a/d_a_base.h b/include/d/a/d_a_base.h
index 2eae40a1..f063e4e2 100644
--- a/include/d/a/d_a_base.h
+++ b/include/d/a/d_a_base.h
@@ -8,6 +8,7 @@
#include "m/m_allocator.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
+#include "sized_string.h"
#include "toBeSorted/actor_info.h"
#include "toBeSorted/raii_ptr.h"
#include "toBeSorted/sound_info.h"
@@ -109,8 +110,7 @@ public:
/* 0xEE */ u8 mPolyAttr0;
/* 0xEF */ u8 mPolyAttr1;
/* 0xF0 */ u32 mJStudioActor;
- /* 0xF4 */ char someStr[4];
- /* 0xF8 */ char field_0xf8[0xfc - 0xf8];
+ /* 0xF4 */ SizedString<8> mSomeStr;
public:
/* vt 0x08 */ virtual int create();
@@ -240,6 +240,7 @@ public:
void setParams2UpperByte(u32 val);
static u32 buildParams2(u32 lower, u32 upper);
u32 getParams2Lower() const;
+ u32 getFirstBitParams2() const;
static dAcBase_c *findActor(char *objName, dAcBase_c *parent);
static dAcBase_c *searchActor(dAcBase_c *parent);
// Kinda performs the code of the first param on every actor (second param is optional parent)
diff --git a/include/d/a/d_a_item.h b/include/d/a/d_a_item.h
index cdaa3115..c6a22cd1 100644
--- a/include/d/a/d_a_item.h
+++ b/include/d/a/d_a_item.h
@@ -18,10 +18,76 @@
#include "toBeSorted/actor_event.h"
#include "toBeSorted/d_emitter.h"
#include "toBeSorted/dowsing_target.h"
+#include "toBeSorted/item_mdl.h"
class dAcItem_0xB34 {
public:
- virtual ~dAcItem_0xB34();
+ virtual ~dAcItem_0xB34() {}
+ virtual void vt_0x0C() = 0;
+ virtual void vt_0x10() = 0;
+};
+
+class dAcItem_0xB34_1 : public dAcItem_0xB34 {
+public:
+ virtual ~dAcItem_0xB34_1() {}
+ virtual void vt_0x0C() override;
+ virtual void vt_0x10() override;
+};
+
+class dAcItem_0xB34_2 : public dAcItem_0xB34 {
+public:
+ virtual ~dAcItem_0xB34_2() {}
+ virtual void vt_0x0C() override;
+ virtual void vt_0x10() override;
+
+private:
+ /* 0x04 */ u8 _0x04[0x0C - 0x04];
+};
+
+class dAcItem_0xB3C {
+public:
+ virtual ~dAcItem_0xB3C() {}
+ virtual void vt_0x0C(u16) = 0;
+ virtual void vt_0x10() = 0;
+ virtual void vt_0x14() = 0;
+ virtual void vt_0x18() = 0;
+
+protected:
+ /* 0x04 */ u8 _0x04[0x08 - 0x04];
+};
+
+class dAcItem_0xB3C_1 : public dAcItem_0xB3C {
+public:
+ dAcItem_0xB3C_1(u16, u16) {}
+ virtual ~dAcItem_0xB3C_1();
+ virtual void vt_0x0C(u16) override;
+ virtual void vt_0x10() override;
+ virtual void vt_0x14() override;
+ virtual void vt_0x18() override;
+};
+
+class dAcItem_0xB3C_2 : public dAcItem_0xB3C {
+public:
+ dAcItem_0xB3C_2(u16 a1, u16 a2) {
+ mCb1 = sCb1s[a1];
+ mCb2 = sCb2s[a2];
+ }
+ virtual ~dAcItem_0xB3C_2();
+ virtual void vt_0x0C(u16) override;
+ virtual void vt_0x10() override;
+ virtual void vt_0x14() override;
+ virtual void vt_0x18() override;
+
+public:
+ typedef void (dAcItem_0xB3C_2::*Callback1)();
+ typedef bool (dAcItem_0xB3C_2::*Callback2)();
+
+ static Callback1 sCb1s[2];
+ static Callback2 sCb2s[3];
+
+ /* 0x08 */ Callback1 mCb1;
+ /* 0x14 */ Callback2 mCb2;
+ /* 0x20 */ u8 _0x20[0x24 - 0x20];
};
class dAcItem_c : public dAcItemBase_c {
@@ -29,6 +95,12 @@ public:
dAcItem_c();
virtual ~dAcItem_c();
+ virtual int create() override;
+ virtual bool createHeap() override;
+
+ virtual u16 getItemIdFromParams() override;
+ virtual void setItemId(u16 id);
+
STATE_FUNC_DECLARE(dAcItem_c, Wait);
STATE_FUNC_DECLARE(dAcItem_c, Carry);
STATE_FUNC_DECLARE(dAcItem_c, GetBeetle);
@@ -84,11 +156,35 @@ public:
static bool isSlingshot(ITEM_ID item);
static bool isRupee(ITEM_ID item);
static bool isKeyPiece(ITEM_ID item);
+ static bool isTreasure2(ITEM_ID item);
static bool isTreasure(ITEM_ID item);
static bool isTear(ITEM_ID item);
+ bool isLightFruit() const;
bool isSingleArrow() const;
+ bool isArrowBundle() const;
bool isTriforce() const;
+ bool isGratitudeCrystal() const;
+ bool is5GratitudeCrystals() const;
+ bool isHeart() const;
+ bool isSmallKey() const;
+ bool isGreenRupee() const;
+ bool isBlueRupee() const;
+ bool isRedRupee() const;
+ bool isRupoor() const;
+ bool isSilverRupee() const;
+ bool isGoldRupee() const;
+ bool isSlingshot() const;
+ bool isEldinOre() const;
+ bool isJellyBlob() const;
+ bool isUnkTreasureGroup1() const;
+ bool isHeartPiece() const;
+ bool isTreasure3() const;
+ bool isInsect() const;
+ bool isHeart2() const;
+ bool isAnyRupee() const;
+ bool isAnyTear() const;
+ bool isBabyRattle() const;
u32 getParams2Lower_shift1_0x7() const;
@@ -138,7 +234,238 @@ private:
static bool sIsPerformingInitialCollection;
static s32 sCollectionCurrentCount;
- /* 0x334 */ UNKTYPE *mpMdl; // Model has its own handling system
+ static s32 sGetItemPouchSlot;
+ static s32 sGetItemQuantity;
+
+ static const mVec3_c sFreestandingDowsingOffset;
+
+ typedef bool (dAcItem_c::*sStaticPtmf)();
+ static const sStaticPtmf sStaticPtmfs[];
+
+ static const ItemInitStruct *getItemInitStructForId(u16 itemId);
+ const ItemInitStruct *getItemInitStruct() const;
+ bool isItemDropFromEnemy() const;
+ static u16 determineActualItemIdFromItem(u16);
+ u16 getItemId2() const;
+ static s32 getSubtypeFromParam(u32 params);
+ void setupUnkColliderFlags2();
+ static bool hitCallback(dAcObjBase_c *i_actorA, cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB);
+ void fn_80253F90(bool);
+ void fn_80256790();
+ void fn_802567D0();
+ void onTouchLink();
+ void fn_80255DF0();
+ void fn_80254BB0();
+ void setDespawnTimer(u16 timer);
+ void applyBoundingBox();
+ s32 getTearIdx();
+ void setFreestandingYOffset(f32);
+ void fn_8024DF30(u32 flags);
+
+ // static PTMF callbacks
+ bool fn_80248020();
+ bool fn_80248010();
+ bool fn_80255B30();
+ bool fn_80255BA0();
+ bool fn_80248040();
+ bool fn_80248030();
+ bool fn_80255BD0();
+ bool fn_80255C40();
+
+ // PTMF callbacks
+ f32 fn_80254DE0();
+ f32 fn_80254DF0();
+
+ f32 getSmallKeyFreestandingScale();
+ f32 getLowValueRupeeFreestandingScale();
+ f32 getHighValueRupeeFreestandingScale();
+ f32 getSlingshotFreestandingScale();
+ f32 getEldinOreFreestandingScale();
+ f32 getJellyBlobFreestandingScale();
+ f32 getUnkTreasureGroup1FreestandingScale();
+ f32 getHeartPieceFreestandingScale();
+ f32 getGratitudeCrystalFreestandingScale();
+ f32 getDefaultFreestandingScale();
+
+ f32 callGetFreestandingModelScale();
+
+ f32 getTreasure3Scale();
+ f32 getInsectScale();
+ f32 getDefaultScale();
+
+ f32 getHighValueRupeePickupScale();
+ f32 getDefaultPickupScale();
+
+ void moveNormal0();
+ void moveNormal1();
+ void moveSpecial();
+
+ void fn_802555D0();
+ void fn_802555F0();
+
+ void bounceNone();
+ void bounceNormal();
+ void bounceRupee();
+
+ void fn_802558F0();
+ void fn_80255AE0();
+ void fn_802558E0();
+
+ bool fn_80248060();
+ bool fn_80248050();
+ bool fn_80255D50();
+ bool fn_80255DB0();
+
+ void setLowValueRupeeBoundingBox();
+ void setHighValueRupeeBoundingBox();
+ void setArrowBundleBoundingBox();
+ void setDefaultBoundingBox();
+
+ f32 getSmallKeyGravity1();
+ f32 getGreenRupeeGravity1();
+ f32 getBlueRupeeGravity1();
+ f32 getRedRupeeGravity1();
+ f32 getHeartGravity1();
+ f32 getSingleArrowGravity1();
+ f32 getArrowBundleGravity1();
+ f32 getSilverRupeeGravity1();
+ f32 getGoldRupeeGravity1();
+ f32 getRupoorGravity1();
+ f32 get5BombsGravity1();
+ f32 get10BombsGravity1();
+ f32 getFaroreTearGravity1();
+ f32 get5SeedsGravity1();
+ f32 getDefaultGravity1();
+
+ f32 getHeartGravity2();
+
+ f32 getGreenRupeeGravity3();
+ f32 getBlueRupeeGravity3();
+ f32 getRedRupeeGravity3();
+ f32 getRupoorGravity3();
+ f32 getSilverRupeeGravity3();
+ f32 getGoldRupeeGravity3();
+
+ f32 getSmallKeyGravity4();
+ f32 getGreenRupeeGravity4();
+ f32 getBlueRupeeGravity4();
+ f32 getRedRupeeGravity4();
+ f32 getHeartGravity4();
+ f32 getSingleArrowGravity4();
+ f32 getArrowBundleGravity4();
+ f32 getSilverRupeeGravity4();
+ f32 getGoldRupeeGravity4();
+ f32 getRupoorGravity4();
+ f32 get5BombsGravity4();
+ f32 get10BombsGravity4();
+ f32 getFaroreTearGravity4();
+ f32 get5SeedsGravity4();
+ f32 getDefaultGravit4();
+
+ f32 getGreenRupeeDirHitKnockback();
+ f32 getBlueRupeeDirHitKnockback();
+ f32 getRedRupeeDirHitKnockback();
+ f32 getSilverRupeeDirHitKnockback();
+ f32 getGoldRupeeDirHitKnockback();
+ f32 getRupoorDirHitKnockback();
+
+ f32 getGreenRupeeDirHitKnockbackRand();
+ f32 getBlueRupeeDirHitKnockbackRand();
+ f32 getRedRupeeDirHitKnockbackRand();
+ f32 getSilverRupeeDirHitKnockbackRand();
+ f32 getGoldRupeeDirHitKnockbackRand();
+ f32 getRupoorDirHitKnockbackRand();
+
+ f32 getGreenRupeeHitKnockback();
+ f32 getBlueRupeeHitKnockback();
+ f32 getRedRupeeHitKnockback();
+ f32 getSilverRupeeHitKnockback();
+ f32 getGoldRupeeHitKnockback();
+ f32 getRupoorHitKnockback();
+
+ f32 getGreenRupeeHitKnockbackRand();
+ f32 getBlueRupeeHitKnockbackRand();
+ f32 getRedRupeeHitKnockbackRand();
+ f32 getSilverRupeeHitKnockbackRand();
+ f32 getGoldRupeeHitKnockbackRand();
+ f32 getRupoorHitKnockbackRand();
+
+ f32 getGreenRupeeHitSquareDistance2();
+ f32 getBlueRupeeHitSquareDistance2();
+ f32 getRedRupeeHitSquareDistance2();
+ f32 getSilverRupeeHitSquareDistance2();
+ f32 getGoldRupeeHitSquareDistance2();
+ f32 getRupoorHitSquareDistance2();
+ f32 getHeartHitSquareDistance2();
+
+ f32 getGreenRupeeDirHitKnockback2();
+ f32 getBlueRupeeDirHitKnockback2();
+ f32 getRedRupeeDirHitKnockback2();
+ f32 getSilverRupeeDirHitKnockback2();
+ f32 getGoldRupeeDirHitKnockback2();
+ f32 getRupoorDirHitKnockback2();
+ f32 getHeartDirHitKnockback2();
+
+ f32 getGreenRupeeDirHitKnockbackRand2();
+ f32 getBlueRupeeDirHitKnockbackRand2();
+ f32 getRedRupeeDirHitKnockbackRand2();
+ f32 getSilverRupeeDirHitKnockbackRand2();
+ f32 getGoldRupeeDirHitKnockbackRand2();
+ f32 getRupoorDirHitKnockbackRand2();
+ f32 getHeartDirHitKnockbackRand2();
+
+ f32 getGreenRupeeHitKnockback2();
+ f32 getBlueRupeeHitKnockback2();
+ f32 getRedRupeeHitKnockback2();
+ f32 getSilverRupeeHitKnockback2();
+ f32 getGoldRupeeHitKnockback2();
+ f32 getRupoorHitKnockback2();
+ f32 getHeartHitKnockback2();
+
+ f32 getGreenRupeeHitKnockbackRand2();
+ f32 getBlueRupeeHitKnockbackRand2();
+ f32 getRedRupeeHitKnockbackRand2();
+ f32 getSilverRupeeHitKnockbackRand2();
+ f32 getGoldRupeeHitKnockbackRand2();
+ f32 getRupoorHitKnockbackRand2();
+ f32 getHeartHitKnockbackRand2();
+
+ f32 getGreenRupeeDirHitKnockback3();
+ f32 getBlueRupeeDirHitKnockback3();
+ f32 getRedRupeeDirHitKnockback3();
+ f32 getSilverRupeeDirHitKnockback3();
+ f32 getGoldRupeeDirHitKnockback3();
+ f32 getRupoorDirHitKnockback3();
+ f32 getHeartDirHitKnockback3();
+
+ f32 getGreenRupeeDirHitKnockbackRand3();
+ f32 getBlueRupeeDirHitKnockbackRand3();
+ f32 getRedRupeeDirHitKnockbackRand3();
+ f32 getSilverRupeeDirHitKnockbackRand3();
+ f32 getGoldRupeeDirHitKnockbackRand3();
+ f32 getRupoorDirHitKnockbackRand3();
+ f32 getHeartDirHitKnockbackRand3();
+
+ f32 getGreenRupeeHitKnockback3();
+ f32 getBlueRupeeHitKnockback3();
+ f32 getRedRupeeHitKnockback3();
+ f32 getSilverRupeeHitKnockback3();
+ f32 getGoldRupeeHitKnockback3();
+ f32 getRupoorHitKnockback3();
+ f32 getHeartHitKnockback3();
+
+ f32 getGreenRupeeHitKnockbackRand3();
+ f32 getBlueRupeeHitKnockbackRand3();
+ f32 getRedRupeeHitKnockbackRand3();
+ f32 getSilverRupeeHitKnockbackRand3();
+ f32 getGoldRupeeHitKnockbackRand3();
+ f32 getRupoorHitKnockbackRand3();
+ f32 getHeartHitKnockbackRand3();
+
+ f32 fn_802577C0();
+ f32 fn_802577D0();
+
+ /* 0x334 */ dItemMdl_c *mpMdl;
/* 0x338 */ dShadowCircle_c mShdw;
/* 0x340 */ mVec3_c field_0x340;
/* 0x34C */ nw4r::ut::Color mColorFilter;
@@ -157,45 +484,45 @@ private:
/* 0xA2C */ dEmitter_c mEff_0xA2C;
/* 0xA60 */ dEmitter_c mEff_0xA60;
/* 0xA94 */ dAcRef_c<dAcOScatterSand> mCoveredSand;
- /* 0xAA0 */ dAcRef_c<dAcObjBase_c> mUnkRef;
+ /* 0xAA0 */ dAcRef_c<dAcObjBase_c> mForceSignRef;
/* 0xAAC */ mVec3_c posCopy;
/* 0xAB8 */ fLiNdBa_c mNode;
/* 0xAC4 */ ActorEventRelated mEventRelated;
/* 0xB14 */ DowsingTarget mDowsingTarget;
/* 0xB34 */ dAcItem_0xB34 *field_0xB34[2];
- /* 0xB34 */ dAcItem_0xB34 *field_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);
+ /* 0xB34 */ dAcItem_0xB3C *field_0xB3C;
+ /* 0xB40 */ void (dAcItem_c::*mFnAction)();
+ /* 0xB4C */ void (dAcItem_c::*mFnBounce)();
+ /* 0xB58 */ void (dAcItem_c::*mFunc_0xB58)();
+ /* 0xB64 */ void (dAcItem_c::*mFnAction3)();
+ /* 0xB70 */ bool (dAcItem_c::*mFnAction4)();
+ /* 0xB7C */ f32 (dAcItem_c::*mFnGetGravity1)();
+ /* 0xB88 */ f32 (dAcItem_c::*mFnGetHeartGravity)();
+ /* 0xB94 */ f32 (dAcItem_c::*mFnGetRupeeGravity)();
+ /* 0xBA0 */ f32 (dAcItem_c::*mFnGetGravity4)();
/* 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);
+ /* 0xBC4 */ f32 (dAcItem_c::*mFnGetFreestandingScale)();
+ /* 0xBD0 */ f32 (dAcItem_c::*mFnGetScale)();
+ /* 0xBDC */ f32 (dAcItem_c::*mFnGetPickupDemoScale)();
+ /* 0xBE8 */ f32 (dAcItem_c::*mFnCallGetFreestandingScale)();
+ /* 0xBF4 */ f32 (dAcItem_c::*mFnGetDirHitKnockback)();
+ /* 0xC00 */ f32 (dAcItem_c::*mFnGetDirHitKnockbackRand)();
+ /* 0xC0C */ f32 (dAcItem_c::*mFnGetHitKnockback)();
+ /* 0xC18 */ f32 (dAcItem_c::*mFnGetHitKnockbackRand)();
+ /* 0xC24 */ f32 (dAcItem_c::*mFnGetHitSquareDistance2)();
+ /* 0xC30 */ f32 (dAcItem_c::*mFnGetDirHitKnockback2)();
+ /* 0xC3C */ f32 (dAcItem_c::*mFnGetDirHitKnockbackRand2)();
+ /* 0xC48 */ f32 (dAcItem_c::*mFnGetHitKnockback2)();
+ /* 0xC54 */ f32 (dAcItem_c::*mFnGetHitKnockbackRand2)();
+ /* 0xC60 */ f32 (dAcItem_c::*mFnGetDirHitKnockback3)();
+ /* 0xC6C */ f32 (dAcItem_c::*mFnGetDirHitKnockbackRand3)();
+ /* 0xC78 */ f32 (dAcItem_c::*mFnGetHitKnockback3)();
+ /* 0xC84 */ f32 (dAcItem_c::*mFnGetHitKnockbackRand3)();
+ /* 0xC90 */ f32 (dAcItem_c::*mFn_0xC90)();
/* 0xC9C */ UNKTYPE (dAcItem_c::*mFunc_0xC9C)(UNKTYPE);
- /* 0xCA8 */ UNKTYPE (dAcItem_c::*mFunc_0xCA8)(UNKTYPE);
- /* 0xCB4 */ UNKTYPE (dAcItem_c::*mFunc_0xCB4)(UNKTYPE);
+ /* 0xCA8 */ void (dAcItem_c::*mFnSetBoundingBox)();
+ /* 0xCB4 */ f32 (dAcItem_c::*mFn_0xCB4)(void);
/* 0xCC0 */ dAcRef_c<dAcItem_c> mItemQueuePrev;
/* 0xCCC */ dAcRef_c<dAcItem_c> mItemQueueNext;
/* 0xCD8 */ f32 field_0xCD8;
@@ -210,11 +537,11 @@ private:
/* 0xD08 */ u8 _D08[0xD14 - 0xD08];
/* 0xD14 */ f32 mFreestandingOffsetH;
/* 0xD18 */ f32 field_0xD18;
- /* 0xD1C */ int mGetItemPouchSlot;
- /* 0xD20 */ int field_0xD20;
+ /* 0xD1C */ s32 mGetItemPouchSlot;
+ /* 0xD20 */ s32 field_0xD20;
/* 0xD24 */ u8 _D24[0xD2C - 0xD24];
/* 0xD2C */ u32 mFramesInAir;
- /* 0xD30 */ int mItemQuantity;
+ /* 0xD30 */ s32 mItemQuantity;
/* 0xD34 */ u32 mItemFlags;
/* 0xD38 */ mAng3_c field_0xD38;
/* 0xD3E */ u16 field_0xD3E;
@@ -222,8 +549,7 @@ private:
/* 0xD42 */ s16 field_0xD42;
/* 0xD44 */ u16 mRealItemId;
/* 0xD46 */ s16 mDespawnTimer;
- /* 0xD48 */ u8 field_0xD48;
- /* 0xD49 */ u8 field_0xD49;
+ /* 0xD48 */ u16 field_0xD48;
/* 0xD4A */ u8 field_0xD4A;
/* 0xD4B */ u8 field_0xD4B;
/* 0xD4C */ u8 field_0xD4C;
diff --git a/include/d/a/d_a_itembase.h b/include/d/a/d_a_itembase.h
index 9f91e60d..23f64926 100644
--- a/include/d/a/d_a_itembase.h
+++ b/include/d/a/d_a_itembase.h
@@ -234,11 +234,17 @@ struct ItemFlagStruct {
u8 mFlagKind;
u8 field_0x07;
};
+
+struct ItemInitStruct {
+ u8 _0x00[0x0D - 0x00];
+};
+
class dAcItemBase_c : public dAcObjBase_c {
public:
dAcItemBase_c() {}
virtual ~dAcItemBase_c() {}
virtual u16 getItemId();
+ virtual u16 getItemIdFromParams() = 0;
static bool isValidItemTypeIdx(int itemId);
static bool getItemTypeFromId(u16 itemID, u32 *pOutType);
@@ -254,9 +260,12 @@ public:
return mId;
}
-private:
+protected:
u16 mId;
+ const ItemFlagStruct* getItemFlagStruct() const;
+ static const ItemFlagStruct* getItemFlagStruct(u16 id);
+
static const ItemFlagStruct sDefaultFlagStruct;
static const ItemFlagStruct sItemFlagStructs[167];
static const u32 sItemTypeFlags[MAX_ITEM_ID - 1];
diff --git a/include/d/col/bg/d_bg_s_acch.h b/include/d/col/bg/d_bg_s_acch.h
index 0d12de5d..6756420f 100644
--- a/include/d/col/bg/d_bg_s_acch.h
+++ b/include/d/col/bg/d_bg_s_acch.h
@@ -388,7 +388,7 @@ public:
// bool ChkRoofHit() {
// return MaskRoofHit();
// }
- void OffClrSpeedY() {
+ void SetClrSpeedY() {
mFlags |= CLR_SPEED_Y;
}
bool ChkClrSpeedY() {
diff --git a/include/d/col/c/c_cc_d.h b/include/d/col/c/c_cc_d.h
index 58bf05e9..23e88d40 100644
--- a/include/d/col/c/c_cc_d.h
+++ b/include/d/col/c/c_cc_d.h
@@ -461,6 +461,10 @@ public:
void OffRPrm(u32 m) {
mRPrm = (mRPrm & ~m) | m;
}
+
+ void SetCallback(cCcD_HitCallback cb) {
+ mHit_cb = cb;
+ }
};
class cCcD_ObjAt : public cCcD_GAtTgCoCommonBase {
@@ -491,10 +495,6 @@ public:
return MskSPrm(1);
}
- void SetCallback(cCcD_HitCallback cb) {
- mHit_cb = cb;
- }
-
u32 MskType(u32 mask) const {
return mSrc.mType & mask;
}
@@ -657,6 +657,10 @@ public:
field_0x4B = val;
}
+ void SetSrcField_0x0C(u16 val) {
+ mSrc.field_0x0C = val;
+ }
+
void SetInfo_0x1(u8 val) {
mSrc.mInfo.field_0x1 = val;
}
@@ -665,6 +669,10 @@ public:
mSrc.mInfo.field_0x2 = val;
}
+ void OnInfo_0x2(u16 val) {
+ mSrc.mInfo.field_0x2 |= val;
+ }
+
public:
/* 0x1C */ cCcD_SrcGObjTg mSrc;
/* 0x2C */ mVec3_c mAtHitDir;
@@ -858,6 +866,10 @@ public:
mTg.SetFlag_0xA(flag);
}
+ void SetTgSrcField_0x0C(u16 val) {
+ mTg.SetSrcField_0x0C(val);
+ }
+
bool ChkTgHit() {
return mTg.MskRPrm(1) != 0 && mTg.GetActor() != nullptr;
}
@@ -917,6 +929,10 @@ public:
mAt.SetCallback(cb);
}
+ void SetCoCallback(cCcD_HitCallback cb) {
+ mCo.SetCallback(cb);
+ }
+
u32 ChkTgNoAtHitInfSet() const {
return mTg.MskSPrm(0x40);
}
@@ -997,6 +1013,12 @@ public:
void OnTgElectric() {
return mTg.OnSPrm(0x40000);
}
+ void OnTg_0x800000() {
+ return mTg.OnSPrm(0x800000);
+ }
+ void OnTg_0x1000000() {
+ return mTg.OnSPrm(0x1000000);
+ }
void OnTg_0x8000000() {
return mTg.OnSPrm(0x8000000);
}
@@ -1006,6 +1028,9 @@ public:
void ClrTg_0x10000() {
return mTg.OffSPrm(0x10000);
}
+ void ClrTg_0x800000() {
+ return mTg.OffSPrm(0x800000);
+ }
void ClrTg_0x8000000() {
return mTg.OffSPrm(0x8000000);
}
@@ -1016,6 +1041,9 @@ public:
void OnTg_0x200000() {
mTg.OnSPrm(0x200000);
}
+ void ClrTg_0x200000() {
+ mTg.OffSPrm(0x200000);
+ }
void SetTg_0x4B(u8 val) {
mTg.Set_0x4B(val);
@@ -1026,6 +1054,9 @@ public:
void SetTgInfo_0x2(u16 val) {
mTg.SetInfo_0x2(val);
}
+ void OnTgInfo_0x2(u16 val) {
+ mTg.OnInfo_0x2(val);
+ }
void SetTg_0x40000000() {
mTg.OnSPrm(0x40000000);
}
diff --git a/include/d/t/d_t_force_get_flag.h b/include/d/t/d_t_force_get_flag.h
new file mode 100644
index 00000000..b2dbcba5
--- /dev/null
+++ b/include/d/t/d_t_force_get_flag.h
@@ -0,0 +1,13 @@
+#ifndef D_T_FORCE_GET_FLAG_H
+#define D_T_FORCE_GET_FLAG_H
+
+#include "d/t/d_tg.h"
+
+class dTgForceGetFlag_c : public dTg_c {
+public:
+ static u32 tearIdxToParam(s32 tearNumber);
+
+private:
+};
+
+#endif
diff --git a/include/toBeSorted/item_mdl.h b/include/toBeSorted/item_mdl.h
index 107f9980..d4771617 100644
--- a/include/toBeSorted/item_mdl.h
+++ b/include/toBeSorted/item_mdl.h
@@ -14,6 +14,7 @@ class dAcItem_c;
// vtable at 80533eb0
class dItemMdl_c : public dMdl_c {
public:
+ dItemMdl_c() : field_0x14(ITEM_MDL_UNK0x14_0) {}
/* 0x08 */ virtual ~dItemMdl_c() {}
/* 0x0C */ virtual bool init(u16 itemId, dAcItem_c *item, mAllocator_c *allocator) = 0;
/* 0x10 */ virtual void vt_0x10(u8) = 0;
diff --git a/include/toBeSorted/item_mdl_misc.h b/include/toBeSorted/item_mdl_misc.h
index a595fbcb..d34c9ff1 100644
--- a/include/toBeSorted/item_mdl_misc.h
+++ b/include/toBeSorted/item_mdl_misc.h
@@ -69,6 +69,7 @@ private:
// Maybe a bad name because fairies etc. are also supported
class dItemMdlBottle_c : public dItemMdl_c {
public:
+ dItemMdlBottle_c() : mFlags(0) {}
/* 0x08 */ virtual ~dItemMdlBottle_c() {}
/* 0x0C */ virtual bool init(u16 itemId, dAcItem_c *item, mAllocator_c *allocator) override;
/* 0x10 */ virtual void vt_0x10(u8) override;