summaryrefslogtreecommitdiff
path: root/include/d
diff options
context:
space:
mode:
authorHuitzi <73550465+marwernerh@users.noreply.github.com>2025-01-23 14:48:23 -0500
committerGitHub <noreply@github.com>2025-01-23 21:48:23 +0200
commitc11cd855d5ba38a7dac138e79f0e46055eac09a0 (patch)
treeedcd1797b0b5bf2c144213cca05905718e8ed660 /include/d
parentfa7821c4bb3d77ac54bb2d5edb25684f0cff8e06 (diff)
d_a_obj_kwheel00, 01, & d_a_obj_klift00 Equivalent (weak func and/or vtable order) (#2291)
* d_a_obj_kwheel00, 01, & d_a_obj_klift00 Equivalent (weak func and/or vtable order) * Three rels equivalent * Basic documentation for the three rels * Define explicit constructor for dMdl_obj_c (needed for proper array creation in d_a_obj_klift00) * Modify d_a_obj_bky_rock to account for new explicit constructor of dMdl_obj_c * Specify weak func and/or vtable orders for rels in config.py * Cleanup includes and dol2asm artifacts * * Fix debug build * Restore incorrectly removed l_bmdidx * Fix US retail equivalency
Diffstat (limited to 'include/d')
-rw-r--r--include/d/actor/d_a_obj_bky_rock.h2
-rw-r--r--include/d/actor/d_a_obj_klift00.h79
-rw-r--r--include/d/actor/d_a_obj_kwheel00.h74
-rw-r--r--include/d/actor/d_a_obj_kwheel01.h74
-rw-r--r--include/d/d_model.h1
5 files changed, 187 insertions, 43 deletions
diff --git a/include/d/actor/d_a_obj_bky_rock.h b/include/d/actor/d_a_obj_bky_rock.h
index 2771435fb5..55768efc7e 100644
--- a/include/d/actor/d_a_obj_bky_rock.h
+++ b/include/d/actor/d_a_obj_bky_rock.h
@@ -17,8 +17,6 @@ class daBkyRock_c : public fopAc_ac_c, public request_of_phase_process_class {
public:
struct _pieceData {
public:
- /* 80BB6914 */ _pieceData() { mMdlObj.mpObj = NULL; }
-
/* 0x00 */ dMdl_obj_c mMdlObj;
/* 0x34 */ Vec position;
/* 0x40 */ f32 targetX;
diff --git a/include/d/actor/d_a_obj_klift00.h b/include/d/actor/d_a_obj_klift00.h
index 5e5fb3ee86..96a1f2d951 100644
--- a/include/d/actor/d_a_obj_klift00.h
+++ b/include/d/actor/d_a_obj_klift00.h
@@ -1,37 +1,86 @@
#ifndef D_A_OBJ_KLIFT00_H
#define D_A_OBJ_KLIFT00_H
+#include "d/d_bg_s_movebg_actor.h"
+#include "d/d_cc_d.h"
+#include "d/d_model.h"
#include "f_op/f_op_actor_mng.h"
/**
* @ingroup actors-objects
* @class daObjKLift00_c
- * @brief Water Wheel Lift?
+ * @brief Water Wheel/Gear Lift
*
- * @details
+ * @details Lakebed temple lifts connected to large water wheels/gears (see d_a_obj_kwheel01) by chains
*
*/
-class daObjKLift00_c : public fopAc_ac_c {
+class daObjKLift00_c : public dBgS_MoveBgActor, public request_of_phase_process_class {
public:
- struct ChainPos {
- /* 8058C338 */ ~ChainPos();
- /* 8058C374 */ ChainPos();
- };
-
- /* 8058B02C */ void create1st();
+ /* 8058B02C */ cPhs__Step create1st();
/* 8058B0D0 */ void setMtx();
/* 8058B4B0 */ void rideActor(fopAc_ac_c*);
- /* 8058B5EC */ void CreateHeap();
- /* 8058B77C */ void Create();
- /* 8058B97C */ void Execute(f32 (**)[3][4]);
- /* 8058BEEC */ void Draw();
- /* 8058C014 */ void Delete();
+ /* 8058B5EC */ int CreateHeap();
+ /* 8058B77C */ int Create();
+ /* 8058B97C */ int Execute(Mtx**);
+ /* 8058BEEC */ int Draw();
+ /* 8058C014 */ int Delete();
+
+ enum Param_e {
+ LOCK_e = (1 << 6), NO_BASE_DISP = (1 << 7)
+ };
private:
- /* 0x568 */ u8 field_0x568[0x1160 - 0x568];
+ struct ChainPos {
+ cXyz mDeltaPosVector;
+ cXyz mCurrentPos;
+ cXyz mPrevPos;
+ };
+
+ /* 0x05A8 */ Mtx mNewBgMtx;
+ /* 0x05D8 */ Mtx mCullMtx;
+ /* 0x0608 */ J3DModel* mpLiftPlatform;
+ /* 0x060C */ J3DModel* mpChainBase;
+ /* 0x0610 */ J3DModelData* mChainModelData; // JUT_ASSERT string shows this was called mChainModelData
+ /* 0x0614 */ int mNumChains; // Foundation "chain" is the bottom-most "chain" (doesn't have an associated chain model), and is used to transform the platform itself; = 1 + mNumChainModels
+ /* 0x0618 */ ChainPos* mChainPositions;
+ /* 0x061C */ int mNumChainModels;
+ /* 0x0620 */ dMdl_obj_c* mChainMdlObjs;
+ /* 0x0624 */ dCcD_Stts mStts;
+ /* 0x0660 */ dCcD_Sph mChainSphereColliders[8];
+ /* 0x1020 */ dCcD_Cyl mCylinderCollider;
+ /* 0x115C */ s32 mStopSwingingFrames;
+
+ // Number of chain models
+ u32 getArg0() {
+ return fopAcM_GetParamBit(this, 0, 6);
+ }
+
+ // Determines whether lift swinging should be dampened upon creation
+ u32 getLock() {
+ return fopAcM_GetParamBit(this, 6, 1);
+ }
+
+ // Determines whether the metal base from which the chain hands should be drawn (Drawn if 0)
+ u32 getNoBaseDisp() {
+ return fopAcM_GetParamBit(this, 7, 1);
+ }
};
STATIC_ASSERT(sizeof(daObjKLift00_c) == 0x1160);
+struct daObjKLift00_HIO_c : public mDoHIO_entry_c {
+ daObjKLift00_HIO_c();
+ ~daObjKLift00_HIO_c() {};
+
+ void genMessage(JORMContext*);
+
+ /* 0x04 */ f32 mChainGravity;
+ /* 0x08 */ f32 mRideParameters;
+ /* 0x0C */ f32 mWindSwayOccuranceFactor;
+ /* 0x10 */ f32 mWindMagnitudeChain;
+ /* 0x14 */ f32 mWindMagnitudeFoundation;
+ /* 0x18 */ f32 mChainHitSpeed;
+ /* 0x1C */ f32 field_0x1C;
+};
#endif /* D_A_OBJ_KLIFT00_H */
diff --git a/include/d/actor/d_a_obj_kwheel00.h b/include/d/actor/d_a_obj_kwheel00.h
index 303c94d8bf..d9a24d388a 100644
--- a/include/d/actor/d_a_obj_kwheel00.h
+++ b/include/d/actor/d_a_obj_kwheel00.h
@@ -1,33 +1,81 @@
#ifndef D_A_OBJ_KWHEEL00_H
#define D_A_OBJ_KWHEEL00_H
+#include "d/d_bg_s_movebg_actor.h"
+#include "d/d_cc_d.h"
+#include "d/d_event_lib.h"
#include "f_op/f_op_actor_mng.h"
/**
* @ingroup actors-objects
* @class daObjKWheel00_c
- * @brief Water Wheel 00?
- *
- * @details
+ * @brief Water Wheel/Gear
*
+ * @details Lakebed temple water wheels/gears without clawshot targets.
+ * There are two types:
+ * 1.) Larger gold-colored ones that are completely solid and lie near the end of the long axle
+ * 2.) Smaller dark-colored ones where the largest gear teeth are grated and lie centered on a short axle (seen on bridges to/from central room)
*/
-class daObjKWheel00_c : public fopAc_ac_c {
+
+class daObjKWheel00_c : public dBgS_MoveBgActor, public request_of_phase_process_class, public dEvLib_callback_c {
public:
- /* 80C4D6F8 */ void create1st();
+ daObjKWheel00_c() : dEvLib_callback_c(this) {}
+ ~daObjKWheel00_c() {}
+
+ /* 80C4D6F8 */ int create1st();
/* 80C4D86C */ void setMtx();
- /* 80C4D9B8 */ void CreateHeap();
- /* 80C4DA38 */ void Create();
- /* 80C4DBBC */ void Execute(f32 (**)[3][4]);
- /* 80C4E1B0 */ void Draw();
- /* 80C4E254 */ void Delete();
- /* 80C4E298 */ void eventStart();
- /* 80C4E6E4 */ ~daObjKWheel00_c();
+ /* 80C4D9B8 */ int CreateHeap();
+ /* 80C4DA38 */ int Create();
+ /* 80C4DBBC */ int Execute(Mtx**);
+ /* 80C4E1B0 */ int Draw();
+ /* 80C4E254 */ int Delete();
+ /* 80C4E298 */ BOOL eventStart();
+
+ int getSwNo() {
+ return fopAcM_GetParamBit(this, 0, 8);
+ }
+
+ u32 getType() {
+ return fopAcM_GetParamBit(this,17,1);
+ }
+
+ enum Type_e { TYPE_LARGE_GOLD, TYPE_SMALL_PLATINUM };
private:
- /* 0x568 */ u8 field_0x568[0xb44 - 0x568];
+ enum QuadrantalAngle_e { DEG_INVALID = -1, DEG_0, DEG_90, DEG_180, DEG_270, DEG_MAX};
+
+ /* 0x5B8 */ Mtx mNewBgMtx;
+ /* 0x5E8 */ Mtx mTransformMtx;
+ /* 0x618 */ J3DModel* mpModel;
+ /* 0x61C */ s16 mZAngularVelocity;
+ /* 0x620 */ Type_e m_type; // JUT_ASSERT string shows this was called m_type
+ /* 0x624 */ dCcD_Stts mStts;
+ /* 0x660 */ dCcD_Sph mLargeGearTeethSphereColliders[4];
+ /* 0xB40 */ QuadrantalAngle_e mPrevQuadrantalZAngle;
+
+ // Determines rotational direction of gear; 0 = counter-clockwise, 1 = clockwise
+ u32 getArg0() {
+ return fopAcM_GetParamBit(this, 8, 1);
+ }
+
+ s32 getEvent() {
+ return fopAcM_GetParamBit(this, 9, 8);
+ }
+
+
};
+
STATIC_ASSERT(sizeof(daObjKWheel00_c) == 0xb44);
+struct daObjKWheel00_HIO_c : public mDoHIO_entry_c {
+ daObjKWheel00_HIO_c();
+ ~daObjKWheel00_HIO_c();
+
+ void genMessage(JORMContext*);
+
+ /* 0x4 */ s16 mTargetZAngularSpeed;
+ /* 0x6 */ s16 mZAngularAcceleration;
+};
#endif /* D_A_OBJ_KWHEEL00_H */
diff --git a/include/d/actor/d_a_obj_kwheel01.h b/include/d/actor/d_a_obj_kwheel01.h
index a1615407bd..cc94891fd5 100644
--- a/include/d/actor/d_a_obj_kwheel01.h
+++ b/include/d/actor/d_a_obj_kwheel01.h
@@ -1,33 +1,81 @@
#ifndef D_A_OBJ_KWHEEL01_H
#define D_A_OBJ_KWHEEL01_H
+
+#include "d/d_bg_s_movebg_actor.h"
+#include "d/d_event_lib.h"
#include "f_op/f_op_actor_mng.h"
/**
* @ingroup actors-objects
* @class daObjKWheel01_c
- * @brief Water Wheel 01?
- *
- * @details
+ * @brief Water Wheel/Gear
*
+ * @details Lakebed temple large water wheels/gears with clawshot targets and/or lifts
*/
-class daObjKWheel01_c : public fopAc_ac_c {
+class daObjKWheel01_c : public dBgS_MoveBgActor, public request_of_phase_process_class, public dEvLib_callback_c {
public:
- /* 80C4EA78 */ void create1st();
+ daObjKWheel01_c() : dEvLib_callback_c(this) {}
+ ~daObjKWheel01_c() {};
+
+ /* 80C4EA78 */ cPhs__Step create1st();
/* 80C4EC54 */ void setMtx();
- /* 80C4EDCC */ void CreateHeap();
- /* 80C4EF38 */ void Create();
- /* 80C4F048 */ void Execute(f32 (**)[3][4]);
- /* 80C4F344 */ void Draw();
- /* 80C4F3E8 */ void Delete();
- /* 80C4F498 */ void eventStart();
- /* 80C4F60C */ ~daObjKWheel01_c();
+ /* 80C4EDCC */ int CreateHeap();
+ /* 80C4EF38 */ int Create();
+ /* 80C4F048 */ int Execute(Mtx**);
+ /* 80C4F344 */ int Draw();
+ /* 80C4F3E8 */ int Delete();
+ /* 80C4F498 */ BOOL eventStart();
private:
- /* 0x568 */ u8 field_0x568[0x704 - 0x568];
+ /* 0x5B8 */ Mtx mNewBgMtx;
+ /* 0x5E8 */ Mtx mTransformMtx;
+ /* 0x618 */ J3DModel* mpModel;
+ /* 0x61C */ s16 mYAngularVelocity;
+ /* 0x620 */ fpc_ProcID m_klift_pid[4]; // JUT_ASSERT debug string shows this was called m_klift_pid
+ /* 0x630 */ dBgW* mKLiftCollisions[4];
+ /* 0x640 */ Mtx mKLiftBaseMatrices[4];
+ /* 0x700 */ u8 mCreatedKLifts;
+
+ // Switch number to check if water is flowing and the gear should turn, and whether the gear should accelerate to the target speed or start off at it
+ int getSwNo() {
+ return fopAcM_GetParamBit(this, 0, 8);
+ }
+
+ // Determines rotational direction of gear; 0 = counter-clockwise, 1 = clockwise
+ u32 getArg0() {
+ return fopAcM_GetParamBit(this, 8, 1);
+ }
+
+ int getEvent() {
+ return fopAcM_GetParamBit(this, 9, 8);
+ }
+
+ // Determines the number of chain models each lift should use
+ u32 getArg2() {
+ return fopAcM_GetParamBit(this, 17, 6);
+ }
+
+ // Determines whether each of 4 potential lifts should be created and/or updated
+ u32 getArg4567() {
+ return fopAcM_GetParamBit(this, 23, 4);
+ }
+
+ u32 getOut() {
+ return fopAcM_GetParamBit(this, 27, 1);
+ }
};
STATIC_ASSERT(sizeof(daObjKWheel01_c) == 0x704);
+struct daObjKWheel01_HIO_c : public mDoHIO_entry_c {
+ daObjKWheel01_HIO_c();
+ ~daObjKWheel01_HIO_c() {};
+
+ void genMessage(JORMContext*);
+
+ /* 0x4 */ s16 mTargetYAngularSpeed;
+ /* 0x6 */ s16 mYAngularAcceleration;
+};
#endif /* D_A_OBJ_KWHEEL01_H */
diff --git a/include/d/d_model.h b/include/d/d_model.h
index 0215637e3d..4640324f9f 100644
--- a/include/d/d_model.h
+++ b/include/d/d_model.h
@@ -9,6 +9,7 @@ class dKy_tevstr_c;
class dMdl_obj_c {
public:
+ dMdl_obj_c() : mpObj(NULL) {}
MtxP getMtx() { return mMtx; }
void setMtx(Mtx mtx) { cMtx_copy(mtx, mMtx); }