summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHuitzi <73550465+marwernerh@users.noreply.github.com>2025-01-03 17:50:14 -0500
committerGitHub <noreply@github.com>2025-01-03 14:50:14 -0800
commit960b08e88ca705c5953c86bdf3aabf89b0b312ee (patch)
tree1922536fede122cedda81deed6200194b35cd155
parentfac61aaf40fa9b8f868fd3dc179c67b332a747f0 (diff)
d_a_obj_waterPillar + d_a_obj_syRock Equivalent (weak ordering) (#2281)
* d_a_obj_waterPillar + d_a_obj_syRock Equivalent (weak ordering) * Added fake struct padding * Added fake Chk inlines to dBgS_Acch * Added AT_TYPE_100 to cCcD_ObjAtType * Addressed fakematch * Deleted fake Chk inlines from dBgS_Acch * Removed duplicated, but commented, static check for struct size * Renamed two d_a_obj_waterPillar fields according to comments * Removed explicit inline keywords & swapped use of PSMTX for debug-friendly MTX
-rw-r--r--configure.py4
-rw-r--r--include/SSystem/SComponent/c_cc_d.h1
-rw-r--r--include/d/actor/d_a_obj_syRock.h114
-rw-r--r--include/d/actor/d_a_obj_waterPillar.h150
-rw-r--r--include/d/d_bg_s_acch.h2
-rw-r--r--src/d/actor/d_a_obj_syRock.cpp1129
-rw-r--r--src/d/actor/d_a_obj_waterPillar.cpp1274
7 files changed, 1089 insertions, 1585 deletions
diff --git a/configure.py b/configure.py
index 5489fb48c2..f6962c9e59 100644
--- a/configure.py
+++ b/configure.py
@@ -2013,7 +2013,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_obj_swpush2"),
ActorRel(Matching, "d_a_obj_swspinner"),
ActorRel(Matching, "d_a_obj_swturn"),
- ActorRel(NonMatching, "d_a_obj_syRock"),
+ ActorRel(Equivalent, "d_a_obj_syRock"),
ActorRel(NonMatching, "d_a_obj_szbridge"),
ActorRel(NonMatching, "d_a_obj_taFence"),
ActorRel(Matching, "d_a_obj_table"),
@@ -2045,7 +2045,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_obj_warp_kbrg"),
ActorRel(NonMatching, "d_a_obj_warp_obrg"),
ActorRel(NonMatching, "d_a_obj_waterGate"),
- ActorRel(NonMatching, "d_a_obj_waterPillar"),
+ ActorRel(Equivalent, "d_a_obj_waterPillar"),
ActorRel(Matching, "d_a_obj_waterfall"),
ActorRel(NonMatching, "d_a_obj_wchain"),
ActorRel(Matching, "d_a_obj_wdStick"),
diff --git a/include/SSystem/SComponent/c_cc_d.h b/include/SSystem/SComponent/c_cc_d.h
index 00427f85e1..db50a57acd 100644
--- a/include/SSystem/SComponent/c_cc_d.h
+++ b/include/SSystem/SComponent/c_cc_d.h
@@ -37,6 +37,7 @@ enum cCcD_ObjAtType {
/* 0x00000020 */ AT_TYPE_BOMB = (1 << 5),
/* 0x00000040 */ AT_TYPE_40 = (1 << 6),
/* 0x00000080 */ AT_TYPE_SLINGSHOT = (1 << 7),
+ /* 0x00000100 */ AT_TYPE_100 = (1 << 8),
/* 0x00000200 */ AT_TYPE_LANTERN_SWING = (1 << 9),
/* 0x00000400 */ AT_TYPE_CSTATUE_SWING = (1 << 10),
/* 0x00000800 */ AT_TYPE_800 = (1 << 11),
diff --git a/include/d/actor/d_a_obj_syRock.h b/include/d/actor/d_a_obj_syRock.h
index 2a52b4471d..246cc726b3 100644
--- a/include/d/actor/d_a_obj_syRock.h
+++ b/include/d/actor/d_a_obj_syRock.h
@@ -1,57 +1,137 @@
#ifndef D_A_OBJ_SYROCK_H
#define D_A_OBJ_SYROCK_H
-#include "f_op/f_op_actor_mng.h"
+#include "d/actor/d_a_obj_waterPillar.h"
+#include "d/d_bg_s_movebg_actor.h"
/**
* @ingroup actors-objects
* @class daSyRock_c
* @brief Stalactite Rock
*
- * @details
+ * @details Breakable stalactites seen in Lakebed Temple
*
*/
-class daSyRock_c : public fopAc_ac_c {
+struct fakeSyRockPadding {
+ u8 a[8];
+};
+
+class daSyRock_c : public dBgS_MoveBgActor, public fakeSyRockPadding, public dEvLib_callback_c {
public:
+ daSyRock_c() : dEvLib_callback_c(this) {}
+ /* 80D03DAC */ ~daSyRock_c() {};
+
/* 80D0237C */ void setBaseMtx();
- /* 80D02454 */ void CreateHeap();
- /* 80D02584 */ void create();
+ /* 80D02454 */ int CreateHeap();
+ /* 80D02584 */ cPhs__Step create();
/* 80D02AFC */ void setFallStat();
- /* 80D02BE0 */ void Execute(f32 (**)[3][4]);
+ /* 80D02BE0 */ int Execute(Mtx**);
/* 80D02C54 */ void move();
/* 80D02E70 */ void init_modeWait();
/* 80D02E7C */ void modeWait();
- /* 80D02F88 */ void eventStart();
+ /* 80D02F88 */ BOOL eventStart();
/* 80D02FB8 */ void init_modeDropInit();
/* 80D03070 */ void modeDropInit();
- /* 80D030A8 */ void searchWaterPillar(void*, void*);
+ /* 80D030A8 */ static void* searchWaterPillar(void*, void*);
/* 80D03250 */ void init_modeDrop();
/* 80D03384 */ void modeDrop();
/* 80D033D0 */ void init_modeSink();
/* 80D03440 */ void modeSink();
/* 80D034E8 */ void init_modeMove();
/* 80D035F8 */ void modeMove();
- /* 80D036B8 */ void chkWaterLineIn();
+ /* 80D036B8 */ BOOL chkWaterLineIn();
/* 80D036DC */ void bgCheck();
/* 80D03984 */ void init_modeDropEnd();
/* 80D03A48 */ void modeDropEnd();
- /* 80D03A4C */ void Draw();
- /* 80D03B08 */ void Delete();
- /* 80D03DAC */ ~daSyRock_c();
+ /* 80D03A4C */ int Draw();
+ /* 80D03B08 */ int Delete();
- static u8 const mCcDObjInfo[48];
- static u8 mCcDCyl[68];
+ static dCcD_SrcGObjInf const mCcDObjInfo;
+ static dCcD_SrcCyl mCcDCyl;
private:
- /* 0x568 */ u8 field_0x568[0x9a0 - 0x568];
+ /* 0x5B8 */ request_of_phase_process_class mPhase;
+ /* 0x5C0 */ J3DModel* mpModels[2];
+ /* 0x5C8 */ u8 mMode;
+ /* 0x5C9 */ u8 mDropAutomaticallySwitchNo;
+ /* 0x5CC */ dCcD_Stts mStts;
+ /* 0x608 */ dCcD_Cyl mUnbrokenCylinderCollider; // Collider used to check for bomb/bomb arrow for breaking stalactite
+ /* 0x744 */ u8 mWaitFrames;
+ /* 0x748 */ u32 mShakeOscillationAngleStep;
+ /* 0x74C */ csXyz mShakeXZAngleOffset;
+ /* 0x754 */ f32 mShakeAmplitude;
+ /* 0x758 */ f32 mShakeXOscillationAngle;
+ /* 0x75C */ f32 mShakeZOscillationAngle;
+ /* 0x760 */ f32 mShakeDamping;
+ /* 0x764 */ f32 mShakeMaxDecay;
+ /* 0x768 */ f32 mShakeMinDecay;
+ /* 0x76C */ cXyz mUnderwaterRotatedStalactiteOffset;
+ /* 0x778 */ bool mInWaterPreviousFrame;
+ /* 0x779 */ u8 field_0x779; // Redundant variable, thus left unnamed
+ /* 0x77C */ dBgS_AcchCir mAcchCir;
+ /* 0x7BC */ dBgS_ObjAcch mAcch;
+ /* 0x994 */ daWtPillar_c* mpWaterPillar;
+ /* 0x998 */ dBgW* mpBrokenCollision; // Collision of broken stalactite
+ /* 0x99C */ u8 mIsUnbroken;
+
+ // Stalactite should search for an associated water pillar on creation
+ BOOL getArg0() {
+ return shape_angle.x & 0xF;
+ }
+
+ // Switch to determine whether or not the stalactite has been broken
+ u32 getSwBit1() {
+ return fopAcM_GetParamBit(this, 0, 8);
+ }
+
+ // Switch to determine whether or not the stalactite should be broken automatically when player is in range
+ u32 getSwBit2() {
+ return fopAcM_GetParamBit(this, 8, 8);
+ }
+
+ // Event ID for Midna to stop and note the stalactite that fell by itself
+ s32 getEvetID() {
+ return fopAcM_GetParamBit(this, 16, 8);
+ }
+
+ enum Mode_e {
+ MODE_WAIT,
+ MODE_DROP_INIT,
+ MODE_DROP,
+ MODE_SINK,
+ MODE_MOVE,
+ MODE_DROP_END
+ };
};
STATIC_ASSERT(sizeof(daSyRock_c) == 0x9a0);
-class daSyRock_HIO_c {
+class daSyRock_HIO_c : public mDoHIO_entry_c {
public:
/* 80D022AC */ daSyRock_HIO_c();
- /* 80D03C44 */ ~daSyRock_HIO_c();
+ /* 80D03C44 */ ~daSyRock_HIO_c() {};
+
+ /* 0x04 */ f32 mShakeAmplitude; // "揺れ強さ" "Shake strength" | Slider
+ /* 0x08 */ f32 mShakeXOscillationAngle; // "振幅X" "Amplitude X" | Slider
+ /* 0x0C */ f32 mShakeZOscillationAngle; // "振幅Z" "Amplitude Z" | Slider
+ /* 0x10 */ f32 mShakeDamping; // "揺れ減衰" "Shake damping" | Slider
+ /* 0x14 */ f32 mShakeMaxDecay; // "最大減衰量" "Maximum decay" | Slider
+ /* 0x18 */ f32 mShakeMinDecay; // "最小減衰量" "Minimum decay" | Slider
+ /* 0x1C */ f32 mFallAcceleration; // "落下速度" "Fall speed" | Slider
+ /* 0x20 */ f32 mMaxFallSpeed; // "最大落下速度" "Maximum falling speed" | Slider
+ /* 0x24 */ u8 mWaitFrames; // "wait time" | Slider (unused)
+ /* 0x25 */ u8 mShockStrength; // "振動" "Vibration" | Combo Box
+ /* "強さ1" "Strength 1"
+ "強さ2" "Strength 2"
+ "強さ3" "Strength 3"
+ "強さ4" "Strength 4"
+ "強さ5" "Strength 5"
+ "強さ6" "Strength 6"
+ "強さ7" "Strength 7"
+ "強さ8" "Strength 8" */
+ /* 0x28 */ f32 mEffectScale; // "eff scale" | Slider
+ /* 0x2C */ f32 mFallWaterBouyancy; // "sink speed" | Slider
+ /* 0x30 */ f32 mMaxWaterPillarRange; // "renge" | "Range" | Slider
};
diff --git a/include/d/actor/d_a_obj_waterPillar.h b/include/d/actor/d_a_obj_waterPillar.h
index ecf3b19e48..af54ca5c79 100644
--- a/include/d/actor/d_a_obj_waterPillar.h
+++ b/include/d/actor/d_a_obj_waterPillar.h
@@ -1,29 +1,40 @@
#ifndef D_A_OBJ_WATERPILLAR_H
#define D_A_OBJ_WATERPILLAR_H
+#include "d/d_bg_s_acch.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 daWtPillar_c
- * @brief Water Column
+ * @brief Water Column/Pillar
*
- * @details
+ * @details Water columns that can carry broken stalactites (see d_a_obj_syrock)
*
*/
-class daWtPillar_c : public fopAc_ac_c {
+
+struct fakeWtPillarPadding {
+ u8 a[8];
+};
+
+class daWtPillar_c : public fopAc_ac_c, public fakeWtPillarPadding, public dEvLib_callback_c {
public:
+ daWtPillar_c();
+ ~daWtPillar_c() {}
+
/* 80D2C7B0 */ void setBaseMtx();
- /* 80D2C838 */ void createHeapCallBack(fopAc_ac_c*);
- /* 80D2C858 */ void CreateHeap();
- /* 80D2C960 */ void create();
- /* 80D2CC0C */ void execute();
+ /* 80D2C838 */ static int createHeapCallBack(fopAc_ac_c*);
+ /* 80D2C858 */ int CreateHeap();
+ /* 80D2C960 */ cPhs__Step create();
+ /* 80D2CC0C */ int execute();
/* 80D2CE4C */ void actionMain();
/* 80D2CF98 */ void effectSet();
/* 80D2D278 */ void effectSet2();
/* 80D2D3FC */ void actionSwWaitInit();
/* 80D2D408 */ void actionSwWait();
- /* 80D2D488 */ void eventStart();
+ /* 80D2D488 */ virtual BOOL eventStart();
/* 80D2D4AC */ void actionWaitInit();
/* 80D2D588 */ void actionWait();
/* 80D2D5C0 */ void actionUpFirstInit();
@@ -42,27 +53,124 @@ public:
/* 80D2DC2C */ void actionRockOn();
/* 80D2DD0C */ void actionEndInit();
/* 80D2DD18 */ void actionEnd();
- /* 80D2DDB0 */ void getPillarHeight();
- /* 80D2DDB8 */ void draw();
- /* 80D2DE84 */ void _delete();
- /* 80D2E054 */ daWtPillar_c();
- /* 80D2E430 */ ~daWtPillar_c();
+ /* 80D2DDB0 */ f32 getPillarHeight();
+ /* 80D2DDB8 */ int draw();
+ /* 80D2DE84 */ int _delete();
+
+ static dCcD_SrcGObjInf const mCcDObjInfo;
+ static dCcD_SrcGObjInf const mCcDObjCoInfo;
+ static dCcD_SrcCps mCcDCps;
+ static dCcD_SrcCyl mCcDCyl;
+
+ void onRockFlag() {
+ mIsCarryingStalactite = true;
+ }
+
+ cXyz getPos() {
+ return mTopPos;
+ }
+
+ u8 isRockYure() {
+ return mStalactiteShouldStartShaking;
+ }
- static u8 const mCcDObjInfo[48];
- static u8 const mCcDObjCoInfo[48];
- static u8 mCcDCps[76];
- static u8 mCcDCyl[68];
+ void clearRockYure() {
+ mStalactiteShouldStartShaking = false;
+ }
private:
- /* 0x568 */ u8 field_0x568[0xb7c - 0x568];
+ /* 0x584 */ request_of_phase_process_class mPhase;
+ /* 0x58C */ J3DModel* mpModel;
+ /* 0x590 */ mDoExt_btkAnm mVerticalTextureScrollAnimation;
+ /* 0x5A8 */ mDoExt_bckAnm mModelRotationAnimation;
+ /* 0x5C4 */ dBgS_ObjAcch mAcch;
+ /* 0x79C */ dBgS_AcchCir mAcchCir;
+ /* 0x7DC */ dCcD_Stts mStts;
+ /* 0x818 */ dCcD_Cps mCapsuleCollider;
+ /* 0x95C */ dCcD_Cyl mCylinderCollider;
+ /* 0xA98 */ u8 pad0[0x3C];
+ /* 0xAD4 */ f32 mScaleX; // Modified but never read; unused?
+ /* 0xAD8 */ u8 pad1[0x4];
+ /* 0xADC */ f32 mScaleZ; // Modified but never read; unused?
+ /* 0xAE0 */ f32 mCurrentHeight;
+ /* 0xAE4 */ cM3dGCpsS mCapsuleSource;
+ /* 0xB00 */ u8 mAction;
+ /* 0xB02 */ u16 mWaitFrameDelay;
+ /* 0xB04 */ f32 mTargetMaxSpeed;
+ /* 0xB08 */ u8 mSwitchNo;
+ /* 0xB09 */ u8 mType;
+ /* 0xB0A */ u8 pad2[0x6];
+ /* 0xB10 */ f32 mFirstTargetHeight;
+ /* 0xB14 */ f32 mMaxHeight;
+ /* 0xB18 */ f32 mTargetHeightStalactiteOffset;
+ /* 0xB1C */ f32 mRelativeWaterHeight;
+ /* 0xB20 */ u32 mEffectOscillationAngleStep;
+ /* 0xB24 */ cXyz mEffectOscillationVerticalOffset;
+ /* 0xB30 */ f32 mEffectOscillationAngle;
+ /* 0xB34 */ f32 mEffectOscillationAmplitude;
+ /* 0xB38 */ f32 mEffectOscillationDampingScale;
+ /* 0xB3C */ f32 mEffectOscillationMaxDecay;
+ /* 0xB40 */ f32 mEffectOscillationMinDecay;
+ /* 0xB44 */ u8 field_0xB44; // Modified, but never read; unused?
+ /* 0xB45 */ u8 mStartedRisingOrDoesNotRiseAndFall;
+ /* 0xB46 */ u8 mPillarIsPreparingToRise;
+ /* 0xB48 */ u32 mBottomAndTopParticleEmmitters[7];
+ /* 0xB64 */ u32 mWaterSurfaceParticleEmitters[2];
+ /* 0xB6C */ cXyz mTopPos;
+ /* 0xB78 */ s8 mStalactiteShouldStartShaking; // Modified by d_a_obj_syRock
+ /* 0xB79 */ u8 mIsCarryingStalactite; // Modified by d_a_obj_syRock
+
+ s32 getEventID() {
+ return shape_angle.x & 0xFF;
+ }
+
+ s32 getParam(u8 shift, u8 bit) {
+ return fopAcM_GetParamBit(this, shift, bit);
+ }
+
+ enum Action_e {
+ ACTION_SW_WAIT,
+ ACTION_WAIT,
+ ACTION_UP_FIRST, ACTION_UP_FIRST_WAIT,
+ ACTION_UP, ACTION_UP_WAIT,
+ ACTION_DOWN,
+ ACTION_ROCK_WAIT, ACTION_ROCK_ON,
+ ACTION_END
+ };
+
+ enum Type_e {
+ STATIC,
+ RISES_AND_FALLS
+ };
};
+
STATIC_ASSERT(sizeof(daWtPillar_c) == 0xb7c);
-class daWtPillar_HIO_c {
-public:
+struct daWtPillar_HIO_c : public mDoHIO_entry_c {
/* 80D2C6CC */ daWtPillar_HIO_c();
- /* 80D2DF34 */ ~daWtPillar_HIO_c();
+ /* 80D2DF34 */ ~daWtPillar_HIO_c() {};
+
+ /* 0x04 */ cXyz field_0x04;
+ /* 0x10 */ csXyz field_0x10;
+ /* 0x16 */ s8 mForTesting; // "----------- テスト用 ----------" "----------- For Testing ----------" | Checkbox
+ /* 0x17 */ s8 mDisableDrawing; // "モデル描画OFF" "Model Drawing OFF" | Checkbox
+ /* 0x18 */ s8 mStopTime; // "停止時間" "Stop time" | Slider
+ /* 0x19 */ u8 mUpFirstWaitFrames; // "待ち時間" "Waiting time" | Slider
+ /* 0x1A */ u8 field_0x1A[6];
+ /* 0x20 */ f32 field_0x20; // "速度" "Velocity" | Slider
+ /* 0x24 */ u8 field_0x24[4];
+ /* 0x28 */ f32 field_0x28; // mColliderUpdateScaleFactor?
+ /* 0x2C */ u8 mUpWaitFrames; // "待ち時間" "Waiting time" | Slider
+ /* 0x2D */ u8 field_0x2D[4];
+ /* 0x34 */ f32 field_0x34; // "速度" "Velocity" | Slider
+ /* 0x38 */ u8 field_0x38[8];
+ /* 0x40 */ f32 mDownwardSpeedUnitsPerSecond; // "速度" "Velocity" | Slider
+ /* 0x44 */ f32 mEffectOscillationAngle; // "振幅Y" "Y Amplitude" | Slider
+ /* 0x48 */ f32 mEffectOscillationAmplitude; // "移動強さ" "Moving strength" | Slider
+ /* 0x4C */ f32 mEffectOscillationDampingScale; // "揺れ減衰" "Sway damping" | Slider
+ /* 0x50 */ f32 mEffectOscillationMaxDecay; // "最大減衰量" "Maximum decay" | Slider
+ /* 0x54 */ f32 mEffectOscillationMinDecay; // "最小減衰量" "Minimum decay" | Slider
};
diff --git a/include/d/d_bg_s_acch.h b/include/d/d_bg_s_acch.h
index 264cf90850..512a3c9b62 100644
--- a/include/d/d_bg_s_acch.h
+++ b/include/d/d_bg_s_acch.h
@@ -194,7 +194,7 @@ public:
// inline dupe
void i_ClrGroundHit() { m_flags &= ~GROUND_HIT; }
u32 i_ChkGroundHit() const { return m_flags & GROUND_HIT; }
-
+
public:
/* 0x02C */ u32 m_flags;
/* 0x030 */ cXyz* pm_pos;
diff --git a/src/d/actor/d_a_obj_syRock.cpp b/src/d/actor/d_a_obj_syRock.cpp
index 2a2110b132..429d12ca1a 100644
--- a/src/d/actor/d_a_obj_syRock.cpp
+++ b/src/d/actor/d_a_obj_syRock.cpp
@@ -4,717 +4,467 @@
*/
#include "d/actor/d_a_obj_syRock.h"
-#include "dol2asm.h"
-
-
-
-
-//
-// Forward References:
-//
-
-extern "C" void __ct__14daSyRock_HIO_cFv();
-extern "C" void __dt__14mDoHIO_entry_cFv();
-extern "C" void setBaseMtx__10daSyRock_cFv();
-extern "C" void CreateHeap__10daSyRock_cFv();
-extern "C" void create__10daSyRock_cFv();
-extern "C" void __dt__12dBgS_ObjAcchFv();
-extern "C" void __dt__12dBgS_AcchCirFv();
-extern "C" void __dt__8cM3dGCylFv();
-extern "C" void __dt__8cM3dGAabFv();
-extern "C" void __dt__10dCcD_GSttsFv();
-extern "C" void setFallStat__10daSyRock_cFv();
-extern "C" void Execute__10daSyRock_cFPPA3_A4_f();
-extern "C" void move__10daSyRock_cFv();
-extern "C" void init_modeWait__10daSyRock_cFv();
-extern "C" void modeWait__10daSyRock_cFv();
-extern "C" void eventStart__10daSyRock_cFv();
-extern "C" void init_modeDropInit__10daSyRock_cFv();
-extern "C" void modeDropInit__10daSyRock_cFv();
-extern "C" void searchWaterPillar__10daSyRock_cFPvPv();
-extern "C" void init_modeDrop__10daSyRock_cFv();
-extern "C" void modeDrop__10daSyRock_cFv();
-extern "C" void init_modeSink__10daSyRock_cFv();
-extern "C" void modeSink__10daSyRock_cFv();
-extern "C" void init_modeMove__10daSyRock_cFv();
-extern "C" void modeMove__10daSyRock_cFv();
-extern "C" void chkWaterLineIn__10daSyRock_cFv();
-extern "C" void bgCheck__10daSyRock_cFv();
-extern "C" void init_modeDropEnd__10daSyRock_cFv();
-extern "C" void modeDropEnd__10daSyRock_cFv();
-extern "C" void Draw__10daSyRock_cFv();
-extern "C" void Delete__10daSyRock_cFv();
-extern "C" static void daSyRock_Draw__FP10daSyRock_c();
-extern "C" static void daSyRock_Execute__FP10daSyRock_c();
-extern "C" static void daSyRock_Delete__FP10daSyRock_c();
-extern "C" static void daSyRock_Create__FP10fopAc_ac_c();
-extern "C" void __dt__10cCcD_GSttsFv();
-extern "C" void __dt__14daSyRock_HIO_cFv();
-extern "C" void __sinit_d_a_obj_syRock_cpp();
-extern "C" static void func_80D03D10();
-extern "C" static void func_80D03D18();
-extern "C" static void func_80D03D20();
-extern "C" static void func_80D03D28();
-extern "C" void __dt__17dEvLib_callback_cFv();
-extern "C" bool eventStart__17dEvLib_callback_cFv();
-extern "C" bool eventRun__17dEvLib_callback_cFv();
-extern "C" bool eventEnd__17dEvLib_callback_cFv();
-extern "C" void getPos__12daWtPillar_cFv();
-extern "C" void __dt__10daSyRock_cFv();
-extern "C" u8 const mCcDObjInfo__10daSyRock_c[48];
-extern "C" extern char const* const d_a_obj_syRock__stringBase0;
-extern "C" u8 mCcDCyl__10daSyRock_c[68];
-
-//
-// External References:
-//
-
-extern "C" void mDoMtx_ZXYrotM__FPA4_fsss();
-extern "C" void transM__14mDoMtx_stack_cFfff();
-extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
-extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
-extern "C" void __dt__10fopAc_ac_cFv();
-extern "C" void fopAc_IsActor__FPv();
-extern "C" void fopAcIt_Judge__FPFPvPv_PvPv();
-extern "C" void fopAcM_create__FsUlPC4cXyziPC5csXyzPC4cXyzSc();
-extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData();
-extern "C" void fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz();
-extern "C" void fopKyM_createWpillar__FPC4cXyzfi();
-extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfGp_getReverb__Fi();
-extern "C" void onSwitch__10dSv_info_cFii();
-extern "C" void isSwitch__10dSv_info_cCFii();
-extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
-extern "C" void eventUpdate__17dEvLib_callback_cFv();
-extern "C" void orderEvent__17dEvLib_callback_cFiii();
-extern "C" void
-set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
-extern "C" void StartShock__12dVibration_cFii4cXyz();
-extern "C" void Release__4cBgSFP9dBgW_Base();
-extern "C" void Regist__4dBgSFP9dBgW_BaseP10fopAc_ac_c();
-extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
-extern "C" void __ct__12dBgS_AcchCirFv();
-extern "C" void SetWall__12dBgS_AcchCirFff();
-extern "C" void __dt__9dBgS_AcchFv();
-extern "C" void __ct__9dBgS_AcchFv();
-extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz();
-extern "C" void CrrPos__9dBgS_AcchFR4dBgS();
-extern "C" void __ct__16dBgS_MoveBgActorFv();
-extern "C" bool Create__16dBgS_MoveBgActorFv();
-extern "C" bool IsDelete__16dBgS_MoveBgActorFv();
-extern "C" bool ToFore__16dBgS_MoveBgActorFv();
-extern "C" bool ToBack__16dBgS_MoveBgActorFv();
-extern "C" void
-MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f();
-extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv();
-extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv();
-extern "C" void SetObj__16dBgS_PolyPassChkFv();
-extern "C" void Set__4cBgWFP6cBgD_tUlPA3_A4_f();
-extern "C" void __ct__4dBgWFv();
-extern "C" void Move__4dBgWFv();
-extern "C" void __ct__10dCcD_GSttsFv();
-extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
-extern "C" void __ct__12dCcD_GObjInfFv();
-extern "C" void __dt__12dCcD_GObjInfFv();
-extern "C" void ChkTgHit__12dCcD_GObjInfFv();
-extern "C" void GetTgHitGObj__12dCcD_GObjInfFv();
-extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl();
-extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
-extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
-extern "C" void Set__4cCcSFP8cCcD_Obj();
-extern "C" void __mi__4cXyzCFRC3Vec();
-extern "C" void __dt__13cBgS_PolyInfoFv();
-extern "C" void ChkUsed__9cBgW_BgIdCFv();
-extern "C" void __dt__8cM3dGCirFv();
-extern "C" void SetC__8cM3dGCylFRC4cXyz();
-extern "C" void SetH__8cM3dGCylFf();
-extern "C" void SetR__8cM3dGCylFf();
-extern "C" void cLib_addCalc__FPfffff();
-extern "C" void cLib_addCalcAngleS__FPsssss();
-extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void* __nw__FUl();
-extern "C" void __dl__FPv();
-extern "C" void __ptmf_scall();
-extern "C" void _savegpr_26();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_26();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" extern void* __vt__16dBgS_MoveBgActor[10];
-extern "C" extern void* __vt__8dCcD_Cyl[36];
-extern "C" extern void* __vt__9dCcD_Stts[11];
-extern "C" extern void* __vt__12cCcD_CylAttr[25];
-extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
-extern "C" extern void* __vt__9cCcD_Stts[8];
-extern "C" u8 now__14mDoMtx_stack_c[48];
-extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" u8 sincosTable___5JMath[65536];
-extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
-extern "C" void __register_global_object();
-extern "C" void getPillarHeight__12daWtPillar_cFv();
-
-//
-// Declarations:
-//
-
-/* ############################################################################################## */
-/* 80D03F90-80D03F94 000000 0004+00 6/6 0/0 0/0 .rodata @3662 */
-SECTION_RODATA static f32 const lit_3662 = 450.0f;
-COMPILER_STRIP_GATE(0x80D03F90, &lit_3662);
-
-/* 80D03F94-80D03F98 000004 0004+00 0/1 0/0 0/0 .rodata @3663 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3663 = 90.0f;
-COMPILER_STRIP_GATE(0x80D03F94, &lit_3663);
-#pragma pop
-
-/* 80D03F98-80D03F9C 000008 0004+00 0/1 0/0 0/0 .rodata @3664 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3664 = 45.0f;
-COMPILER_STRIP_GATE(0x80D03F98, &lit_3664);
-#pragma pop
-
-/* 80D03F9C-80D03FA0 00000C 0004+00 0/1 0/0 0/0 .rodata @3665 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3665 = 1.0f / 20.0f;
-COMPILER_STRIP_GATE(0x80D03F9C, &lit_3665);
-#pragma pop
-
-/* 80D03FA0-80D03FA4 000010 0004+00 0/1 0/0 0/0 .rodata @3666 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3666 = 5.0f;
-COMPILER_STRIP_GATE(0x80D03FA0, &lit_3666);
-#pragma pop
-
-/* 80D03FA4-80D03FA8 000014 0004+00 0/1 0/0 0/0 .rodata @3667 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3667 = 1.0f / 10.0f;
-COMPILER_STRIP_GATE(0x80D03FA4, &lit_3667);
-#pragma pop
-
-/* 80D03FA8-80D03FAC 000018 0004+00 0/1 0/0 0/0 .rodata @3668 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3668 = 10.0f;
-COMPILER_STRIP_GATE(0x80D03FA8, &lit_3668);
-#pragma pop
-
-/* 80D03FAC-80D03FB0 00001C 0004+00 1/2 0/0 0/0 .rodata @3669 */
-SECTION_RODATA static f32 const lit_3669 = 200.0f;
-COMPILER_STRIP_GATE(0x80D03FAC, &lit_3669);
-
-/* 80D03FB0-80D03FB4 000020 0004+00 0/1 0/0 0/0 .rodata @3670 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3670 = 4.0f;
-COMPILER_STRIP_GATE(0x80D03FB0, &lit_3670);
-#pragma pop
-
-/* 80D03FB4-80D03FB8 000024 0004+00 0/2 0/0 0/0 .rodata @3671 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3671 = 3.0f;
-COMPILER_STRIP_GATE(0x80D03FB4, &lit_3671);
-#pragma pop
+#include "d/actor/d_a_obj_eff.h"
+#include "d/d_bg_w.h"
+#include "d/d_com_inf_game.h"
+#include "f_op/f_op_kankyo_mng.h"
+#include "SSystem/SComponent/c_math.h"
+
+typedef void (daSyRock_c::*actionFunc)();
/* 80D0403C-80D04048 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */
-SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
+UNK_REL_DATA
-/* 80D04048-80D0405C 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
- 0x02000201,
- /* padding */
- 0x40080000,
- 0x00000000,
- 0x3FE00000,
- 0x00000000,
-};
-#pragma pop
+/* 80D0426C-80D042A0 000014 0034+00 8/8 0/0 0/0 .bss l_HIO */
+static daSyRock_HIO_c l_HIO;
/* 80D0405C-80D040A0 000020 0044+00 2/2 0/0 0/0 .data mCcDCyl__10daSyRock_c */
-SECTION_DATA u8 daSyRock_c::mCcDCyl[68] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-/* 80D040A0-80D040AC -00001 000C+00 0/1 0/0 0/0 .data @3922 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3922[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)modeWait__10daSyRock_cFv,
-};
-#pragma pop
-
-/* 80D040AC-80D040B8 -00001 000C+00 0/1 0/0 0/0 .data @3923 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3923[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)modeDropInit__10daSyRock_cFv,
-};
-#pragma pop
-
-/* 80D040B8-80D040C4 -00001 000C+00 0/1 0/0 0/0 .data @3924 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3924[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)modeDrop__10daSyRock_cFv,
-};
-#pragma pop
-
-/* 80D040C4-80D040D0 -00001 000C+00 0/1 0/0 0/0 .data @3925 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3925[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)modeSink__10daSyRock_cFv,
-};
-#pragma pop
-
-/* 80D040D0-80D040DC -00001 000C+00 0/1 0/0 0/0 .data @3926 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3926[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)modeMove__10daSyRock_cFv,
-};
-#pragma pop
-
-/* 80D040DC-80D040E8 -00001 000C+00 0/1 0/0 0/0 .data @3927 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3927[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)modeDropEnd__10daSyRock_cFv,
-};
-#pragma pop
-
-/* 80D040E8-80D04130 0000AC 0048+00 0/1 0/0 0/0 .data mode_proc$3921 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 mode_proc[72] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-#pragma pop
-
-/* 80D04130-80D04150 -00001 0020+00 1/0 0/0 0/0 .data l_daSyRock_Method */
-static actor_method_class l_daSyRock_Method = {
- (process_method_func)daSyRock_Create__FP10fopAc_ac_c,
- (process_method_func)daSyRock_Delete__FP10daSyRock_c,
- (process_method_func)daSyRock_Execute__FP10daSyRock_c,
- 0,
- (process_method_func)daSyRock_Draw__FP10daSyRock_c,
-};
-
-/* 80D04150-80D04180 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_SyRock */
-extern actor_process_profile_definition g_profile_Obj_SyRock = {
- fpcLy_CURRENT_e, // mLayerID
- 3, // mListID
- fpcPi_CURRENT_e, // mListPrio
- PROC_Obj_SyRock, // mProcName
- &g_fpcLf_Method.base, // sub_method
- sizeof(daSyRock_c), // mSize
- 0, // mSizeOther
- 0, // mParameters
- &g_fopAc_Method.base, // sub_method
- 515, // mPriority
- &l_daSyRock_Method, // sub_method
- 0x00040100, // mStatus
- fopAc_ACTOR_e, // mActorType
- fopAc_CULLBOX_CUSTOM_e, // cullType
-};
-
-/* 80D04180-80D0418C 000144 000C+00 3/3 0/0 0/0 .data __vt__10cCcD_GStts */
-SECTION_DATA extern void* __vt__10cCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10cCcD_GSttsFv,
-};
-
-/* 80D0418C-80D04198 000150 000C+00 2/2 0/0 0/0 .data __vt__10dCcD_GStts */
-SECTION_DATA extern void* __vt__10dCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10dCcD_GSttsFv,
-};
-
-/* 80D04198-80D041A4 00015C 000C+00 2/2 0/0 0/0 .data __vt__12dBgS_AcchCir */
-SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12dBgS_AcchCirFv,
-};
-
-/* 80D041A4-80D041C8 000168 0024+00 3/3 0/0 0/0 .data __vt__12dBgS_ObjAcch */
-SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12dBgS_ObjAcchFv,
- (void*)NULL,
- (void*)NULL,
- (void*)func_80D03D28,
- (void*)NULL,
- (void*)NULL,
- (void*)func_80D03D20,
-};
-
-/* 80D041C8-80D041D4 00018C 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGCyl */
-SECTION_DATA extern void* __vt__8cM3dGCyl[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGCylFv,
-};
-
-/* 80D041D4-80D041E0 000198 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGAab */
-SECTION_DATA extern void* __vt__8cM3dGAab[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGAabFv,
-};
-
-/* 80D041E0-80D041F8 0001A4 0018+00 3/3 0/0 0/0 .data __vt__17dEvLib_callback_c */
-SECTION_DATA extern void* __vt__17dEvLib_callback_c[6] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__17dEvLib_callback_cFv,
- (void*)eventStart__17dEvLib_callback_cFv,
- (void*)eventRun__17dEvLib_callback_cFv,
- (void*)eventEnd__17dEvLib_callback_cFv,
-};
-
-/* 80D041F8-80D04240 0001BC 0048+00 2/2 0/0 0/0 .data __vt__10daSyRock_c */
-SECTION_DATA extern void* __vt__10daSyRock_c[18] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)CreateHeap__10daSyRock_cFv,
- (void*)Create__16dBgS_MoveBgActorFv,
- (void*)Execute__10daSyRock_cFPPA3_A4_f,
- (void*)Draw__10daSyRock_cFv,
- (void*)Delete__10daSyRock_cFv,
- (void*)IsDelete__16dBgS_MoveBgActorFv,
- (void*)ToFore__16dBgS_MoveBgActorFv,
- (void*)ToBack__16dBgS_MoveBgActorFv,
- (void*)NULL,
- (void*)NULL,
- (void*)func_80D03D18,
- (void*)func_80D03D10,
- (void*)eventRun__17dEvLib_callback_cFv,
- (void*)eventEnd__17dEvLib_callback_cFv,
- (void*)__dt__10daSyRock_cFv,
- (void*)eventStart__10daSyRock_cFv,
-};
-
-/* 80D04240-80D0424C 000204 000C+00 2/2 0/0 0/0 .data __vt__14daSyRock_HIO_c */
-SECTION_DATA extern void* __vt__14daSyRock_HIO_c[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__14daSyRock_HIO_cFv,
-};
-
-/* 80D0424C-80D04258 000210 000C+00 3/3 0/0 0/0 .data __vt__14mDoHIO_entry_c */
-SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__14mDoHIO_entry_cFv,
-};
+dCcD_SrcCyl daSyRock_c::mCcDCyl = {mCcDObjInfo};
/* 80D022AC-80D02334 0000EC 0088+00 1/1 0/0 0/0 .text __ct__14daSyRock_HIO_cFv */
daSyRock_HIO_c::daSyRock_HIO_c() {
- // NONMATCHING
-}
-
-/* 80D02334-80D0237C 000174 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */
-// mDoHIO_entry_c::~mDoHIO_entry_c() {
-extern "C" void __dt__14mDoHIO_entry_cFv() {
- // NONMATCHING
+ mShakeAmplitude = 450.0f;
+ mShakeXOscillationAngle = 90.0f;
+ mShakeZOscillationAngle = 45.0f;
+ mShakeDamping = 1.0f / 20.0f;
+ mShakeMaxDecay = 5.0f;
+ mShakeMinDecay = 1.0f / 10.0f;
+ mFallAcceleration = 10.0f;
+ mMaxFallSpeed = 200.0f;
+ mWaitFrames = 30;
+ mEffectScale = 4.0f;
+ mShockStrength = 4;
+ mFallWaterBouyancy = 3.0f;
+ mMaxWaterPillarRange = 5.0f;
}
/* 80D0237C-80D02454 0001BC 00D8+00 2/2 0/0 0/0 .text setBaseMtx__10daSyRock_cFv */
void daSyRock_c::setBaseMtx() {
- // NONMATCHING
-}
+ mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
+ mDoMtx_stack_c::ZXYrotM(0, shape_angle.y, shape_angle.z);
+ mDoMtx_stack_c::ZXYrotM(mShakeXZAngleOffset.x, mShakeXZAngleOffset.y, mShakeXZAngleOffset.z);
+ mDoMtx_stack_c::transM(mUnderwaterRotatedStalactiteOffset.x, mUnderwaterRotatedStalactiteOffset.y, mUnderwaterRotatedStalactiteOffset.z);
-/* ############################################################################################## */
-/* 80D04030-80D04030 0000A0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80D04030 = "syourock";
-#pragma pop
+ mpModels[mIsUnbroken]->setBaseScale(scale);
-/* 80D02454-80D02584 000294 0130+00 1/0 0/0 0/0 .text CreateHeap__10daSyRock_cFv */
-void daSyRock_c::CreateHeap() {
- // NONMATCHING
+ // Set base transform matrix of current model and the background matrix both to the contents of now
+ mpModels[mIsUnbroken]->setBaseTRMtx(mDoMtx_stack_c::get());
+ MTXCopy(mDoMtx_stack_c::get(), mBgMtx);
}
-/* ############################################################################################## */
-/* 80D03FB8-80D03FE8 000028 0030+00 1/1 0/0 0/0 .rodata mCcDObjInfo__10daSyRock_c */
-SECTION_RODATA u8 const daSyRock_c::mCcDObjInfo[48] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
- 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x79, 0x01, 0x00, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D03FB8, &daSyRock_c::mCcDObjInfo);
-
-/* 80D03FE8-80D03FEC 000058 0004+00 2/5 0/0 0/0 .rodata @3805 */
-SECTION_RODATA static f32 const lit_3805 = 150.0f;
-COMPILER_STRIP_GATE(0x80D03FE8, &lit_3805);
-
-/* 80D03FEC-80D03FF0 00005C 0004+00 0/1 0/0 0/0 .rodata @3806 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3806 = 10000.0f;
-COMPILER_STRIP_GATE(0x80D03FEC, &lit_3806);
-#pragma pop
-
-/* 80D03FF0-80D03FF4 000060 0004+00 2/5 0/0 0/0 .rodata @3807 */
-SECTION_RODATA static u8 const lit_3807[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
+/* 80D02454-80D02584 000294 0130+00 1/0 0/0 0/0 .text CreateHeap__10daSyRock_cFv */
+int daSyRock_c::CreateHeap() {
+ J3DModelData* modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("syourock", 4));
+ JUT_ASSERT(271, modelData != 0);
+ mpModels[0] = mDoExt_J3DModel__create(modelData, 1 << 19, 0x11000084);
+
+ if(!mpModels[0])
+ return 0;
+
+ modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("syourock", 5));
+ JUT_ASSERT(282, modelData != 0);
+ mpModels[1] = mDoExt_J3DModel__create(modelData, 1 << 19, 0x11000084);
+
+ if(!mpModels[1])
+ return 0;
+
+ mpBrokenCollision = new dBgW;
+
+ if(!mpBrokenCollision || mpBrokenCollision->Set(static_cast<cBgD_t*>(dComIfG_getObjectRes("syourock", 9)), 1, &mBgMtx)) {
+ mpBrokenCollision = NULL;
+ return 0;
+ }
+
+ return 1;
+}
+
+dCcD_SrcGObjInf const daSyRock_c::mCcDObjInfo = {
+ {0x0, {{AT_TYPE_BOMB, 0x1, 0x1F}, {AT_TYPE_IRON_BALL | AT_TYPE_BOMB, 0x11}, 0x79}}, // mObj
+ {dCcD_SE_SWORD, 0x0, 0x1, dCcD_MTRL_NONE, 0x0}, // mGObjAt
+ {dCcD_SE_STONE, 0x0, 0x0, dCcD_MTRL_NONE, 0x2}, // mGObjTg
+ {}, // mGObjCo
};
-COMPILER_STRIP_GATE(0x80D03FF0, &lit_3807);
/* 80D02584-80D02930 0003C4 03AC+00 1/1 0/0 0/0 .text create__10daSyRock_cFv */
-void daSyRock_c::create() {
- // NONMATCHING
+cPhs__Step daSyRock_c::create() {
+ fopAcM_SetupActor(this, daSyRock_c);
+
+ if(getArg0() == TRUE) {
+ mpWaterPillar = static_cast<daWtPillar_c*>(fopAcIt_Judge(searchWaterPillar, this));
+
+ if(!mpWaterPillar)
+ return cPhs_INIT_e;
+ }
+
+ const cPhs__Step requestedPhaseProcess = static_cast<cPhs__Step>(dComIfG_resLoad(&mPhase, "syourock"));
+ if(requestedPhaseProcess == cPhs_COMPLEATE_e) {
+ const cPhs__Step bgCreatePhaseProcess = static_cast<cPhs__Step>(MoveBGCreate("syourock", 0x8, dBgS_MoveBGProc_TypicalRotY, 0x2100, NULL));
+ if(bgCreatePhaseProcess == cPhs_ERROR_e)
+ return cPhs_ERROR_e;
+
+ mAcchCir.SetWall(150.0f, 150.0f);
+ mAcch.Set(&current.pos, &old.pos, this, 0x1, &mAcchCir, &speed, NULL, NULL);
+ mAcch.SetWaterCheckOffset(10000.0f);
+ mShakeOscillationAngleStep = 0;
+ mShakeXZAngleOffset.setall(0);
+
+ mShakeXOscillationAngle = mShakeZOscillationAngle = mShakeAmplitude = 0.0f;
+ mShakeMinDecay = mShakeMaxDecay = mShakeDamping = 0.0f;
+ mUnderwaterRotatedStalactiteOffset.setall(0.0f);
+
+ mStts.Init(0xFF, 0xFF, this);
+ mUnbrokenCylinderCollider.Set(mCcDCyl);
+ mUnbrokenCylinderCollider.SetStts(&mStts);
+ mUnbrokenCylinderCollider.OffAtSetBit();
+
+ const u32 wasBrokenSwitchNo = getSwBit1();
+ if(dComIfGs_isSwitch(wasBrokenSwitchNo, fopAcM_GetHomeRoomNo(this))) {
+ mIsUnbroken = false;
+ mUnbrokenCylinderCollider.OffCoSetBit();
+ if(mpBrokenCollision && mpBrokenCollision->ChkUsed()) {
+ dComIfG_Bgsp().Release(mpBrokenCollision);
+ mpBrokenCollision->Move();
+ }
+
+ // Snap already broken stalactite to its appropriate location and set its mode accordingly
+ setFallStat();
+ }
+ else {
+ mIsUnbroken = true;
+
+ if(mpBgW)
+ dComIfG_Bgsp().Release(mpBgW);
+
+ if(mpBrokenCollision) {
+ dComIfG_Bgsp().Regist(mpBrokenCollision, this);
+ mpBrokenCollision->Move();
+ }
+
+ mDropAutomaticallySwitchNo = getSwBit2();
+ init_modeWait();
+
+ }
+
+ field_0x779 = 2;
+ fopAcM_SetMtx(this, mpModels[mIsUnbroken]->getBaseTRMtx());
+ fopAcM_setCullSizeBox2(this, mpModels[mIsUnbroken]->getModelData());
+ setBaseMtx();
+ }
+
+ return requestedPhaseProcess;
}
-/* 80D02930-80D029A0 000770 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */
-// dBgS_ObjAcch::~dBgS_ObjAcch() {
-extern "C" void __dt__12dBgS_ObjAcchFv() {
- // NONMATCHING
+/* 80D02AFC-80D02BE0 00093C 00E4+00 1/1 0/0 0/0 .text setFallStat__10daSyRock_cFv */
+void daSyRock_c::setFallStat() {
+ mpWaterPillar = static_cast<daWtPillar_c*>(fopAcIt_Judge(searchWaterPillar, this));
+ if(mpWaterPillar) {
+ mpWaterPillar->onRockFlag();
+ mMode = MODE_MOVE;
+ }
+ else {
+ mAcch.CrrPos(dComIfG_Bgsp());
+
+ if(mAcch.ChkWaterHit()) {
+ if(mAcch.m_wtr.GetHeight() - mAcch.GetGroundH() >= 200.0f) {
+ mUnderwaterRotatedStalactiteOffset.x = 150.0f;
+ shape_angle.z = 0x4000;
+ }
+ current.pos.y = mAcch.GetGroundH();
+ }
+ else {
+ current.pos.y = mAcch.GetGroundH();
+ }
+
+ mAcch.CrrPos(dComIfG_Bgsp());
+ mMode = MODE_DROP_END;
+ }
}
-/* 80D029A0-80D02A10 0007E0 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */
-// dBgS_AcchCir::~dBgS_AcchCir() {
-extern "C" void __dt__12dBgS_AcchCirFv() {
- // NONMATCHING
-}
+/* 80D02BE0-80D02C54 000A20 0074+00 1/0 0/0 0/0 .text Execute__10daSyRock_cFPPA3_A4_f */
+int daSyRock_c::Execute(Mtx** i_mtx) {
+ eventUpdate();
+ move();
-/* 80D02A10-80D02A58 000850 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */
-// cM3dGCyl::~cM3dGCyl() {
-extern "C" void __dt__8cM3dGCylFv() {
- // NONMATCHING
-}
+ *i_mtx = &mpModels[mIsUnbroken]->getBaseTRMtx();
-/* 80D02A58-80D02AA0 000898 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */
-// cM3dGAab::~cM3dGAab() {
-extern "C" void __dt__8cM3dGAabFv() {
- // NONMATCHING
-}
+ mInWaterPreviousFrame = mAcch.ChkWaterIn();
+ setBaseMtx();
-/* 80D02AA0-80D02AFC 0008E0 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */
-// dCcD_GStts::~dCcD_GStts() {
-extern "C" void __dt__10dCcD_GSttsFv() {
- // NONMATCHING
+ return 1;
}
-/* 80D02AFC-80D02BE0 00093C 00E4+00 1/1 0/0 0/0 .text setFallStat__10daSyRock_cFv */
-void daSyRock_c::setFallStat() {
- // NONMATCHING
-}
+/* 80D02C54-80D02E70 000A94 021C+00 1/1 0/0 0/0 .text move__10daSyRock_cFv */
+void daSyRock_c::move() {
+ static actionFunc mode_proc[] = {
+ &daSyRock_c::modeWait, &daSyRock_c::modeDropInit,
+ &daSyRock_c::modeDrop, &daSyRock_c::modeSink,
+ &daSyRock_c::modeMove, &daSyRock_c::modeDropEnd
+ };
-/* 80D02BE0-80D02C54 000A20 0074+00 1/0 0/0 0/0 .text Execute__10daSyRock_cFPPA3_A4_f */
-void daSyRock_c::Execute(f32 (**param_0)[3][4]) {
- // NONMATCHING
-}
+ (this->*mode_proc[mMode])();
-/* ############################################################################################## */
-/* 80D03FF4-80D03FF8 000064 0004+00 0/1 0/0 0/0 .rodata @3948 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u32 const lit_3948 = 0x43360B61;
-COMPILER_STRIP_GATE(0x80D03FF4, &lit_3948);
-#pragma pop
-
-/* 80D03FF8-80D03FFC 000068 0004+00 0/1 0/0 0/0 .rodata @3949 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3949 = 680.0f;
-COMPILER_STRIP_GATE(0x80D03FF8, &lit_3949);
-#pragma pop
-
-/* 80D03FFC-80D04000 00006C 0004+00 0/1 0/0 0/0 .rodata @3950 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3950 = 250.0f;
-COMPILER_STRIP_GATE(0x80D03FFC, &lit_3950);
-#pragma pop
-
-/* 80D04260-80D0426C 000008 000C+00 1/1 0/0 0/0 .bss @3656 */
-static u8 lit_3656[12];
+ mShakeXZAngleOffset.x = mShakeAmplitude * cM_ssin(mShakeOscillationAngleStep * cM_deg2s(mShakeXOscillationAngle));
+ mShakeXZAngleOffset.z = mShakeAmplitude * cM_scos(mShakeOscillationAngleStep * cM_deg2s(mShakeZOscillationAngle));
-/* 80D0426C-80D042A0 000014 0034+00 8/8 0/0 0/0 .bss l_HIO */
-static u8 l_HIO[52];
+ cLib_addCalc(&mShakeAmplitude, 0.0f, mShakeDamping, mShakeMaxDecay, mShakeMinDecay);
-/* 80D042A0-80D042A4 000048 0004+00 1/1 0/0 0/0 .bss None */
-static u8 data_80D042A0[4];
+ mShakeOscillationAngleStep++;
-/* 80D02C54-80D02E70 000A94 021C+00 1/1 0/0 0/0 .text move__10daSyRock_cFv */
-void daSyRock_c::move() {
- // NONMATCHING
+ mUnbrokenCylinderCollider.SetR(150.0f);
+ mUnbrokenCylinderCollider.SetH(680.0f);
+
+ cXyz currentPos = current.pos;
+ currentPos.y -= 250.0f;
+
+ mUnbrokenCylinderCollider.SetC(currentPos);
+
+ dComIfG_Ccsp()->Set(&mUnbrokenCylinderCollider);
}
/* 80D02E70-80D02E7C 000CB0 000C+00 1/1 0/0 0/0 .text init_modeWait__10daSyRock_cFv */
void daSyRock_c::init_modeWait() {
- // NONMATCHING
+ mMode = MODE_WAIT;
}
/* 80D02E7C-80D02F88 000CBC 010C+00 1/0 0/0 0/0 .text modeWait__10daSyRock_cFv */
void daSyRock_c::modeWait() {
- // NONMATCHING
+ if(mDropAutomaticallySwitchNo != 0xFF && dComIfGs_isSwitch(mDropAutomaticallySwitchNo, fopAcM_GetHomeRoomNo(this))) {
+ field_0x779 = 0;
+ if(getEvetID() != 0xFF){
+ orderEvent(getEvetID(), 0xFF, 1);
+ } else {
+ eventStart();
+ }
+ }
+ else if(mUnbrokenCylinderCollider.ChkTgHit()) {
+ if(mUnbrokenCylinderCollider.GetTgHitGObj()->GetAtType() == AT_TYPE_BOMB) {
+ field_0x779 = 0;
+ if(getEvetID() != 0xFF)
+ orderEvent(getEvetID(), 0xFF, 1);
+ else {
+ eventStart();
+ }
+ }
+ mUnbrokenCylinderCollider.ClrTgHit();
+ }
}
/* 80D02F88-80D02FB8 000DC8 0030+00 2/1 0/0 0/0 .text eventStart__10daSyRock_cFv */
-void daSyRock_c::eventStart() {
- // NONMATCHING
-}
+BOOL daSyRock_c::eventStart() {
+ // field_0x779 is always 0 when eventStart() is called (see modeWait())
+ if(!field_0x779)
+ init_modeDropInit();
-/* ############################################################################################## */
-/* 80D04000-80D04004 000070 0004+00 4/5 0/0 0/0 .rodata @4014 */
-SECTION_RODATA static f32 const lit_4014 = 1.0f;
-COMPILER_STRIP_GATE(0x80D04000, &lit_4014);
-
-/* 80D04004-80D04008 000074 0004+00 2/3 0/0 0/0 .rodata @4015 */
-SECTION_RODATA static f32 const lit_4015 = -1.0f;
-COMPILER_STRIP_GATE(0x80D04004, &lit_4015);
+ return TRUE;
+}
/* 80D02FB8-80D03070 000DF8 00B8+00 1/1 0/0 0/0 .text init_modeDropInit__10daSyRock_cFv
*/
void daSyRock_c::init_modeDropInit() {
- // NONMATCHING
+ fopAcM_seStartCurrent(this, Z2SE_OBJ_STALAC_BREAK, 0);
+
+ mUnbrokenCylinderCollider.OffCoSetBit();
+ mUnbrokenCylinderCollider.OffTgSetBit();
+
+ mWaitFrames = 0;
+
+ mpWaterPillar = static_cast<daWtPillar_c*>(fopAcIt_Judge(searchWaterPillar, this));
+
+ mMode = MODE_DROP_INIT;
}
/* 80D03070-80D030A8 000EB0 0038+00 1/0 0/0 0/0 .text modeDropInit__10daSyRock_cFv */
void daSyRock_c::modeDropInit() {
- // NONMATCHING
+ if(mWaitFrames)
+ mWaitFrames--;
+ else
+ init_modeDrop();
}
-/* ############################################################################################## */
-/* 80D04008-80D04010 000078 0008+00 0/1 0/0 0/0 .rodata @4078 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4078[8] = {
- 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D04008, &lit_4078);
-#pragma pop
-
-/* 80D04010-80D04018 000080 0008+00 0/1 0/0 0/0 .rodata @4079 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4079[8] = {
- 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D04010, &lit_4079);
-#pragma pop
-
-/* 80D04018-80D04020 000088 0008+00 0/1 0/0 0/0 .rodata @4080 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4080[8] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D04018, &lit_4080);
-#pragma pop
-
/* 80D030A8-80D03250 000EE8 01A8+00 3/3 0/0 0/0 .text searchWaterPillar__10daSyRock_cFPvPv */
-void daSyRock_c::searchWaterPillar(void* param_0, void* param_1) {
- // NONMATCHING
+void* daSyRock_c::searchWaterPillar(void* i_proc, void* i_this) {
+ daSyRock_c* const syRock = static_cast<daSyRock_c*>(i_this);
+ daWtPillar_c* const wtPillar = static_cast<daWtPillar_c*>(i_proc);
+
+ if(wtPillar && fopAcM_IsActor(wtPillar) && fopAcM_GetProfName(wtPillar) == PROC_Obj_WaterPillar) {
+ const cXyz vectorToWaterPillar = fopAcM_GetPosition(syRock) - fopAcM_GetPosition(wtPillar);
+ const f32 horizontalDistanceToWaterPillar = sqrtf(vectorToWaterPillar.getMagXZ());
+
+ if(horizontalDistanceToWaterPillar <= l_HIO.mMaxWaterPillarRange)
+ return wtPillar;
+ else
+ return NULL;
+ }
+ return NULL;
}
/* 80D03250-80D03384 001090 0134+00 1/1 0/0 0/0 .text init_modeDrop__10daSyRock_cFv */
void daSyRock_c::init_modeDrop() {
- // NONMATCHING
+ gravity = -l_HIO.mFallAcceleration;
+ maxFallSpeed = -l_HIO.mMaxFallSpeed;
+ speedF = 0.0f;
+
+ if(mpBrokenCollision) {
+ dComIfG_Bgsp().Release(mpBrokenCollision);
+ mpBrokenCollision->Move();
+ }
+
+ mIsUnbroken = false;
+ fopAcM_SetMtx(this, mpModels[mIsUnbroken]->getBaseTRMtx());
+ fopAcM_setCullSizeBox2(this, mpModels[mIsUnbroken]->getModelData());
+
+ const cXyz particlePos = current.pos;
+ dComIfGp_particle_set(0x8616, &particlePos, NULL, NULL);
+ mUnbrokenCylinderCollider.OnAtSetBit();
+ mMode = MODE_DROP;
}
/* 80D03384-80D033D0 0011C4 004C+00 1/0 0/0 0/0 .text modeDrop__10daSyRock_cFv */
void daSyRock_c::modeDrop() {
- // NONMATCHING
+ fopAcM_posMoveF(this, mStts.GetCCMoveP());
+ mAcch.CrrPos(dComIfG_Bgsp());
+ bgCheck();
}
-/* ############################################################################################## */
-/* 80D04020-80D04024 000090 0004+00 1/3 0/0 0/0 .rodata @4138 */
-SECTION_RODATA static f32 const lit_4138 = -15.0f;
-COMPILER_STRIP_GATE(0x80D04020, &lit_4138);
-
-/* 80D04024-80D04028 000094 0004+00 1/2 0/0 0/0 .rodata @4139 */
-SECTION_RODATA static f32 const lit_4139 = 13.0f;
-COMPILER_STRIP_GATE(0x80D04024, &lit_4139);
-
/* 80D033D0-80D03440 001210 0070+00 1/1 0/0 0/0 .text init_modeSink__10daSyRock_cFv */
void daSyRock_c::init_modeSink() {
- // NONMATCHING
+ gravity = -l_HIO.mFallAcceleration + l_HIO.mFallWaterBouyancy;
+ speed.y = cLib_minMaxLimit(speed.y, -15.0f, 13.0f);
+
+ if(!mpWaterPillar)
+ mUnderwaterRotatedStalactiteOffset.x = 150.0f;
+
+ mMode = MODE_SINK;
}
/* 80D03440-80D034E8 001280 00A8+00 1/0 0/0 0/0 .text modeSink__10daSyRock_cFv */
void daSyRock_c::modeSink() {
- // NONMATCHING
+ if(!mpWaterPillar)
+ cLib_addCalcAngleS(&shape_angle.z, 0x4000, 1, 0x444, 1);
+
+ speed.y = cLib_minMaxLimit(speed.y, -15.0f, 13.0f);
+
+ fopAcM_posMoveF(this, mStts.GetCCMoveP());
+ mAcch.CrrPos(dComIfG_Bgsp());
+
+ bgCheck();
}
/* 80D034E8-80D035F8 001328 0110+00 1/1 0/0 0/0 .text init_modeMove__10daSyRock_cFv */
void daSyRock_c::init_modeMove() {
- // NONMATCHING
-}
+ fopAcM_seStartCurrent(this, Z2SE_OBJ_STALAC_LAND_WATER, 0);
+
+ if(mpBgW)
+ dComIfG_Bgsp().Regist(mpBgW, this);
+
+ mpWaterPillar->onRockFlag();
-/* ############################################################################################## */
-/* 80D04028-80D0402C 000098 0004+00 1/2 0/0 0/0 .rodata @4197 */
-SECTION_RODATA static f32 const lit_4197 = 50.0f;
-COMPILER_STRIP_GATE(0x80D04028, &lit_4197);
+ mShakeAmplitude = l_HIO.mShakeAmplitude;
+ mShakeZOscillationAngle = l_HIO.mShakeZOscillationAngle;
+ mShakeXOscillationAngle = l_HIO.mShakeXOscillationAngle;
+ mShakeDamping = l_HIO.mShakeDamping;
+ mShakeMaxDecay = l_HIO.mShakeMaxDecay;
+ mShakeMinDecay = l_HIO.mShakeMinDecay;
+
+ mUnbrokenCylinderCollider.OffAtSetBit();
+
+ const u32 swBit = getSwBit1();
+ dComIfGs_onSwitch(swBit, fopAcM_GetHomeRoomNo(this));
+
+ mMode = MODE_MOVE;
+}
/* 80D035F8-80D036B8 001438 00C0+00 1/0 0/0 0/0 .text modeMove__10daSyRock_cFv */
void daSyRock_c::modeMove() {
- // NONMATCHING
+ mpWaterPillar->onRockFlag();
+
+ current.pos = mpWaterPillar->getPos();
+ current.pos.y -= 50.0f;
+
+ if(mpWaterPillar->isRockYure()) {
+ mShakeAmplitude = l_HIO.mShakeAmplitude;
+ mShakeZOscillationAngle = l_HIO.mShakeZOscillationAngle;
+ mShakeXOscillationAngle = l_HIO.mShakeXOscillationAngle;
+ mShakeDamping = l_HIO.mShakeDamping;
+ mShakeMaxDecay = l_HIO.mShakeMaxDecay;
+ mShakeMinDecay = l_HIO.mShakeMinDecay;
+
+ mpWaterPillar->clearRockYure();
+ }
}
/* 80D036B8-80D036DC 0014F8 0024+00 1/1 0/0 0/0 .text chkWaterLineIn__10daSyRock_cFv */
-void daSyRock_c::chkWaterLineIn() {
- // NONMATCHING
+BOOL daSyRock_c::chkWaterLineIn() {
+ return mAcch.m_wtr.GetHeight() > current.pos.y + 150.0f;
}
-/* ############################################################################################## */
-/* 80D0402C-80D04030 00009C 0004+00 0/1 0/0 0/0 .rodata @4275 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4275 = 5.0f / 3.0f;
-COMPILER_STRIP_GATE(0x80D0402C, &lit_4275);
-#pragma pop
-
/* 80D036DC-80D03984 00151C 02A8+00 2/2 0/0 0/0 .text bgCheck__10daSyRock_cFv */
void daSyRock_c::bgCheck() {
- // NONMATCHING
+ // Note stack ordering issues arise if fopAcM_seStartCurrent() is used instead of mDoAud_seStart()
+ const u32 hitGround = mAcch.ChkGroundHit() ? TRUE : FALSE;
+ const u32 hitWater = mAcch.ChkWaterHit() ? TRUE : FALSE;
+ const u32 inWater = mAcch.ChkWaterIn() ? TRUE : FALSE;
+ bool inWaterPillar = false;
+
+ if(mMode == MODE_DROP) {
+ if(mpWaterPillar) {
+ const f32 waterPillarHeight = mpWaterPillar->getPillarHeight();
+ const f32 waterPillarVerticalPos = fopAcM_GetPosition(mpWaterPillar).y;
+ if(waterPillarVerticalPos + waterPillarHeight - 50.0f >= current.pos.y)
+ inWaterPillar = true;
+ }
+
+ const f32 waterHeight = mAcch.m_wtr.GetHeight();
+ if(hitWater) {
+ const f32 verticalSpeed = speed.y;
+
+ if(chkWaterLineIn())
+ init_modeSink();
+
+ if(inWater && !mInWaterPreviousFrame) {
+ cXyz currentRockPos = current.pos;
+ currentRockPos.y = waterHeight;
+ fopKyM_createWpillar(&currentRockPos, l_HIO.mEffectScale, 3);
+
+ if(verticalSpeed < -15.0f)
+ fopAcM_seStart(this, Z2SE_OBJ_FALL_WATER_M, 0);
+ else
+ mDoAud_seStart(Z2SE_OBJ_STALAC_LAND_WATER, &current.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ }
+ }
+
+ if(inWaterPillar)
+ init_modeMove();
+ }
+
+ if(hitGround) {
+ if(!hitWater && !mpWaterPillar) {
+ mDoAud_seStart(Z2SE_OBJ_STALAC_LAND, &current.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ daObjEff::Act_c::make_land_smoke(&current.pos, l_HIO.mEffectScale);
+ }
+
+ if(mpWaterPillar)
+ init_modeMove();
+ else
+ init_modeDropEnd();
+ }
}
/* 80D03984-80D03A48 0017C4 00C4+00 1/1 0/0 0/0 .text init_modeDropEnd__10daSyRock_cFv */
void daSyRock_c::init_modeDropEnd() {
- // NONMATCHING
+ if(!mAcch.ChkWaterIn()) {
+ dComIfGp_getVibration().StartShock(l_HIO.mShockStrength, 0xF, cXyz(0.0f, 1.0f, 0.0f));
+ }
+
+ if(mpBgW)
+ dComIfG_Bgsp().Regist(mpBgW, this);
+
+ mUnbrokenCylinderCollider.OffAtSetBit();
+
+ const u32 switchBitIndex = getSwBit1();
+ dComIfGs_onSwitch(switchBitIndex, fopAcM_GetHomeRoomNo(this));
+
+ mMode = MODE_DROP_END;
}
/* 80D03A48-80D03A4C 001888 0004+00 1/0 0/0 0/0 .text modeDropEnd__10daSyRock_cFv */
@@ -723,110 +473,71 @@ void daSyRock_c::modeDropEnd() {
}
/* 80D03A4C-80D03B08 00188C 00BC+00 1/0 0/0 0/0 .text Draw__10daSyRock_cFv */
-void daSyRock_c::Draw() {
- // NONMATCHING
+int daSyRock_c::Draw() {
+ g_env_light.settingTevStruct(0x10, fopAcM_GetPosition_p(this), &tevStr);
+ g_env_light.setLightTevColorType_MAJI(mpModels[mIsUnbroken], &tevStr);
+
+ dComIfGd_setListBG();
+ mDoExt_modelUpdateDL(mpModels[mIsUnbroken]);
+ dComIfGd_setList();
+
+ return 1;
}
/* 80D03B08-80D03B70 001948 0068+00 1/0 0/0 0/0 .text Delete__10daSyRock_cFv */
-void daSyRock_c::Delete() {
- // NONMATCHING
+int daSyRock_c::Delete() {
+ dComIfG_resDelete(&mPhase, "syourock");
+
+ if(mpBrokenCollision && mpBrokenCollision->ChkUsed())
+ dComIfG_Bgsp().Release(mpBrokenCollision);
+
+ return 1;
}
/* 80D03B70-80D03B9C 0019B0 002C+00 1/0 0/0 0/0 .text daSyRock_Draw__FP10daSyRock_c */
-static void daSyRock_Draw(daSyRock_c* param_0) {
- // NONMATCHING
+static int daSyRock_Draw(daSyRock_c* i_this) {
+ return i_this->Draw();
+ return 1;
}
/* 80D03B9C-80D03BBC 0019DC 0020+00 1/0 0/0 0/0 .text daSyRock_Execute__FP10daSyRock_c */
-static void daSyRock_Execute(daSyRock_c* param_0) {
- // NONMATCHING
+static int daSyRock_Execute(daSyRock_c* i_this) {
+ return i_this->MoveBGExecute();
}
/* 80D03BBC-80D03BDC 0019FC 0020+00 1/0 0/0 0/0 .text daSyRock_Delete__FP10daSyRock_c */
-static void daSyRock_Delete(daSyRock_c* param_0) {
- // NONMATCHING
+static int daSyRock_Delete(daSyRock_c* i_this) {
+ return i_this->MoveBGDelete();
}
/* 80D03BDC-80D03BFC 001A1C 0020+00 1/0 0/0 0/0 .text daSyRock_Create__FP10fopAc_ac_c */
-static void daSyRock_Create(fopAc_ac_c* param_0) {
- // NONMATCHING
-}
-
-/* 80D03BFC-80D03C44 001A3C 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */
-// cCcD_GStts::~cCcD_GStts() {
-extern "C" void __dt__10cCcD_GSttsFv() {
- // NONMATCHING
+static int daSyRock_Create(fopAc_ac_c* i_this) {
+ return static_cast<daSyRock_c*>(i_this)->create();
}
-/* 80D03C44-80D03CA0 001A84 005C+00 2/1 0/0 0/0 .text __dt__14daSyRock_HIO_cFv */
-daSyRock_HIO_c::~daSyRock_HIO_c() {
- // NONMATCHING
-}
-
-/* 80D03CA0-80D03D10 001AE0 0070+00 0/0 1/0 0/0 .text __sinit_d_a_obj_syRock_cpp */
-void __sinit_d_a_obj_syRock_cpp() {
- // NONMATCHING
-}
-
-#pragma push
-#pragma force_active on
-REGISTER_CTORS(0x80D03CA0, __sinit_d_a_obj_syRock_cpp);
-#pragma pop
-
-/* 80D03D10-80D03D18 001B50 0008+00 1/0 0/0 0/0 .text @1448@eventStart__10daSyRock_cFv */
-static void func_80D03D10() {
- // NONMATCHING
-}
-
-/* 80D03D18-80D03D20 001B58 0008+00 1/0 0/0 0/0 .text @1448@__dt__10daSyRock_cFv */
-static void func_80D03D18() {
- // NONMATCHING
-}
-
-/* 80D03D20-80D03D28 001B60 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */
-static void func_80D03D20() {
- // NONMATCHING
-}
-
-/* 80D03D28-80D03D30 001B68 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */
-static void func_80D03D28() {
- // NONMATCHING
-}
-
-/* 80D03D30-80D03D78 001B70 0048+00 1/0 0/0 0/0 .text __dt__17dEvLib_callback_cFv */
-// dEvLib_callback_c::~dEvLib_callback_c() {
-extern "C" void __dt__17dEvLib_callback_cFv() {
- // NONMATCHING
-}
-
-/* 80D03D78-80D03D80 001BB8 0008+00 1/0 0/0 0/0 .text eventStart__17dEvLib_callback_cFv
- */
-// bool dEvLib_callback_c::eventStart() {
-extern "C" bool eventStart__17dEvLib_callback_cFv() {
- return true;
-}
-
-/* 80D03D80-80D03D88 001BC0 0008+00 2/0 0/0 0/0 .text eventRun__17dEvLib_callback_cFv */
-// bool dEvLib_callback_c::eventRun() {
-extern "C" bool eventRun__17dEvLib_callback_cFv() {
- return true;
-}
-
-/* 80D03D88-80D03D90 001BC8 0008+00 2/0 0/0 0/0 .text eventEnd__17dEvLib_callback_cFv */
-// bool dEvLib_callback_c::eventEnd() {
-extern "C" bool eventEnd__17dEvLib_callback_cFv() {
- return true;
-}
-
-/* 80D03D90-80D03DAC 001BD0 001C+00 1/1 0/0 0/0 .text getPos__12daWtPillar_cFv */
-// void daWtPillar_c::getPos() {
-extern "C" void getPos__12daWtPillar_cFv() {
- // NONMATCHING
-}
-
-/* 80D03DAC-80D03F7C 001BEC 01D0+00 2/1 0/0 0/0 .text __dt__10daSyRock_cFv */
-daSyRock_c::~daSyRock_c() {
- // NONMATCHING
-}
+/* 80D04130-80D04150 -00001 0020+00 1/0 0/0 0/0 .data l_daSyRock_Method */
+static actor_method_class l_daSyRock_Method = {
+ (process_method_func)daSyRock_Create,
+ (process_method_func)daSyRock_Delete,
+ (process_method_func)daSyRock_Execute,
+ 0,
+ (process_method_func)daSyRock_Draw,
+};
-/* 80D04030-80D04030 0000A0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+/* 80D04150-80D04180 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_SyRock */
+extern actor_process_profile_definition g_profile_Obj_SyRock = {
+ fpcLy_CURRENT_e, // mLayerID
+ 3, // mListID
+ fpcPi_CURRENT_e, // mListPrio
+ PROC_Obj_SyRock, // mProcName
+ &g_fpcLf_Method.base, // sub_method
+ sizeof(daSyRock_c), // mSize
+ 0, // mSizeOther
+ 0, // mParameters
+ &g_fopAc_Method.base, // sub_method
+ 515, // mPriority
+ &l_daSyRock_Method, // sub_method
+ 0x00040100, // mStatus
+ fopAc_ACTOR_e, // mActorType
+ fopAc_CULLBOX_CUSTOM_e, // cullType
+};
diff --git a/src/d/actor/d_a_obj_waterPillar.cpp b/src/d/actor/d_a_obj_waterPillar.cpp
index 62fe182adc..da7598471e 100644
--- a/src/d/actor/d_a_obj_waterPillar.cpp
+++ b/src/d/actor/d_a_obj_waterPillar.cpp
@@ -4,1006 +4,610 @@
*/
#include "d/actor/d_a_obj_waterPillar.h"
-#include "dol2asm.h"
-
-
-
-//
-// Forward References:
-//
-
-extern "C" void __ct__16daWtPillar_HIO_cFv();
-extern "C" void __dt__14mDoHIO_entry_cFv();
-extern "C" void setBaseMtx__12daWtPillar_cFv();
-extern "C" void createHeapCallBack__12daWtPillar_cFP10fopAc_ac_c();
-extern "C" void CreateHeap__12daWtPillar_cFv();
-extern "C" void create__12daWtPillar_cFv();
-extern "C" void execute__12daWtPillar_cFv();
-extern "C" void actionMain__12daWtPillar_cFv();
-extern "C" void effectSet__12daWtPillar_cFv();
-extern "C" void effectSet2__12daWtPillar_cFv();
-extern "C" void actionSwWaitInit__12daWtPillar_cFv();
-extern "C" void actionSwWait__12daWtPillar_cFv();
-extern "C" void eventStart__12daWtPillar_cFv();
-extern "C" void actionWaitInit__12daWtPillar_cFv();
-extern "C" void actionWait__12daWtPillar_cFv();
-extern "C" void actionUpFirstInit__12daWtPillar_cFv();
-extern "C" void actionUpFirst__12daWtPillar_cFv();
-extern "C" void actionUpFirstWaitInit__12daWtPillar_cFv();
-extern "C" void actionUpFirstWait__12daWtPillar_cFv();
-extern "C" void actionUpInit__12daWtPillar_cFv();
-extern "C" void actionUp__12daWtPillar_cFv();
-extern "C" void actionUpWaitInit__12daWtPillar_cFv();
-extern "C" void actionUpWait__12daWtPillar_cFv();
-extern "C" void actionDownInit__12daWtPillar_cFv();
-extern "C" void actionDown__12daWtPillar_cFv();
-extern "C" void actionRockWaitInit__12daWtPillar_cFv();
-extern "C" void actionRockWait__12daWtPillar_cFv();
-extern "C" void actionRockOnInit__12daWtPillar_cFv();
-extern "C" void actionRockOn__12daWtPillar_cFv();
-extern "C" void actionEndInit__12daWtPillar_cFv();
-extern "C" void actionEnd__12daWtPillar_cFv();
-extern "C" void getPillarHeight__12daWtPillar_cFv();
-extern "C" void draw__12daWtPillar_cFv();
-extern "C" void _delete__12daWtPillar_cFv();
-extern "C" static void daWtPillar_Draw__FP12daWtPillar_c();
-extern "C" static void daWtPillar_Execute__FP12daWtPillar_c();
-extern "C" static void daWtPillar_Delete__FP12daWtPillar_c();
-extern "C" static void daWtPillar_Create__FP10fopAc_ac_c();
-extern "C" void __dt__16daWtPillar_HIO_cFv();
-extern "C" void __sinit_d_a_obj_waterPillar_cpp();
-extern "C" static void func_80D2E034();
-extern "C" static void func_80D2E03C();
-extern "C" static void func_80D2E044();
-extern "C" static void func_80D2E04C();
-extern "C" void __ct__12daWtPillar_cFv();
-extern "C" void __dt__8cM3dGCylFv();
-extern "C" void __dt__8cM3dGAabFv();
-extern "C" void __dt__10dCcD_GSttsFv();
-extern "C" void __dt__12dBgS_AcchCirFv();
-extern "C" void __dt__12dBgS_ObjAcchFv();
-extern "C" void __dt__12J3DFrameCtrlFv();
-extern "C" void __dt__12daWtPillar_cFv();
-extern "C" void __dt__10cCcD_GSttsFv();
-extern "C" void __dt__17dEvLib_callback_cFv();
-extern "C" bool eventRun__17dEvLib_callback_cFv();
-extern "C" bool eventEnd__17dEvLib_callback_cFv();
-extern "C" bool eventStart__17dEvLib_callback_cFv();
-extern "C" u8 const mCcDObjInfo__12daWtPillar_c[48];
-extern "C" u8 const mCcDObjCoInfo__12daWtPillar_c[48];
-extern "C" extern char const* const d_a_obj_waterPillar__stringBase0;
-extern "C" u8 mCcDCps__12daWtPillar_c[76];
-extern "C" u8 mCcDCyl__12daWtPillar_c[68];
-
-//
-// External References:
-//
-
-extern "C" void mDoMtx_ZXYrotS__FPA4_fsss();
-extern "C" void transM__14mDoMtx_stack_cFfff();
-extern "C" void play__14mDoExt_baseAnmFv();
-extern "C" void init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifss();
-extern "C" void entry__13mDoExt_btkAnmFP16J3DMaterialTablef();
-extern "C" void init__13mDoExt_bckAnmFP15J3DAnmTransformiifssb();
-extern "C" void entry__13mDoExt_bckAnmFP12J3DModelDataf();
-extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
-extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
-extern "C" void __ct__10fopAc_ac_cFv();
-extern "C" void __dt__10fopAc_ac_cFv();
-extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
-extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff();
-extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfGp_getReverb__Fi();
-extern "C" void isSwitch__10dSv_info_cCFii();
-extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
-extern "C" void eventUpdate__17dEvLib_callback_cFv();
-extern "C" void orderEvent__17dEvLib_callback_cFiii();
-extern "C" void
-set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
-extern "C" void __ct__12dBgS_AcchCirFv();
-extern "C" void SetWall__12dBgS_AcchCirFff();
-extern "C" void __dt__9dBgS_AcchFv();
-extern "C" void __ct__9dBgS_AcchFv();
-extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz();
-extern "C" void CrrPos__9dBgS_AcchFR4dBgS();
-extern "C" void SetObj__16dBgS_PolyPassChkFv();
-extern "C" void __ct__10dCcD_GSttsFv();
-extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
-extern "C" void __ct__12dCcD_GObjInfFv();
-extern "C" void __dt__12dCcD_GObjInfFv();
-extern "C" void Set__8dCcD_CpsFRC11dCcD_SrcCps();
-extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl();
-extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
-extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
-extern "C" void Set__4cCcSFP8cCcD_Obj();
-extern "C" void __pl__4cXyzCFRC3Vec();
-extern "C" void __dt__13cBgS_PolyInfoFv();
-extern "C" void __dt__8cM3dGCirFv();
-extern "C" void __ct__8cM3dGCpsFv();
-extern "C" void __dt__8cM3dGCpsFv();
-extern "C" void Set__8cM3dGCpsFRC9cM3dGCpsS();
-extern "C" void SetC__8cM3dGCylFRC4cXyz();
-extern "C" void SetH__8cM3dGCylFf();
-extern "C" void SetR__8cM3dGCylFf();
-extern "C" void cLib_addCalc__FPfffff();
-extern "C" void cLib_chaseF__FPfff();
-extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void __dl__FPv();
-extern "C" void init__12J3DFrameCtrlFs();
-extern "C" void __ptmf_scall();
-extern "C" void __cvt_fp2unsigned();
-extern "C" void _savegpr_24();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_24();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" extern void* __vt__8dCcD_Cyl[36];
-extern "C" extern void* __vt__8dCcD_Cps[36];
-extern "C" extern void* __vt__9dCcD_Stts[11];
-extern "C" extern void* __vt__12cCcD_CylAttr[25];
-extern "C" extern void* __vt__12cCcD_CpsAttr[25];
-extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
-extern "C" extern void* __vt__9cCcD_Stts[8];
-extern "C" u8 now__14mDoMtx_stack_c[48];
-extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" u8 sincosTable___5JMath[65536];
-extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
-extern "C" void __register_global_object();
-
-//
-// Declarations:
-//
-
-/* ############################################################################################## */
-/* 80D2E770-80D2E774 000000 0004+00 16/16 0/0 0/0 .rodata @3645 */
-SECTION_RODATA static f32 const lit_3645 = 1.0f;
-COMPILER_STRIP_GATE(0x80D2E770, &lit_3645);
-
-/* 80D2E774-80D2E778 000004 0004+00 0/1 0/0 0/0 .rodata @3646 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3646 = 2000.0f;
-COMPILER_STRIP_GATE(0x80D2E774, &lit_3646);
-#pragma pop
-
-/* 80D2E778-80D2E77C 000008 0004+00 0/1 0/0 0/0 .rodata @3647 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3647 = 5000.0f;
-COMPILER_STRIP_GATE(0x80D2E778, &lit_3647);
-#pragma pop
-
-/* 80D2E77C-80D2E780 00000C 0004+00 0/1 0/0 0/0 .rodata @3648 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3648 = 1000.0f;
-COMPILER_STRIP_GATE(0x80D2E77C, &lit_3648);
-#pragma pop
-
-/* 80D2E780-80D2E784 000010 0004+00 0/1 0/0 0/0 .rodata @3649 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3649 = 20.0f;
-COMPILER_STRIP_GATE(0x80D2E780, &lit_3649);
-#pragma pop
-
-/* 80D2E784-80D2E788 000014 0004+00 0/1 0/0 0/0 .rodata @3650 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3650 = 25.0f;
-COMPILER_STRIP_GATE(0x80D2E784, &lit_3650);
-#pragma pop
-
-/* 80D2E788-80D2E78C 000018 0004+00 0/1 0/0 0/0 .rodata @3651 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3651 = 1.0f / 100.0f;
-COMPILER_STRIP_GATE(0x80D2E788, &lit_3651);
-#pragma pop
-
-/* 80D2E78C-80D2E790 00001C 0004+00 0/2 0/0 0/0 .rodata @3652 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3652 = 1.0f / 20.0f;
-COMPILER_STRIP_GATE(0x80D2E78C, &lit_3652);
-#pragma pop
+#include "d/d_com_inf_game.h"
+#include "SSystem/SComponent/c_math.h"
-/* 80D2E84C-80D2E858 000000 000C+00 2/2 0/0 0/0 .data cNullVec__6Z2Calc */
-SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
+typedef void (daWtPillar_c::*actionFunc)();
-/* 80D2E858-80D2E86C 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
- 0x02000201,
- /* padding */
- 0x40080000,
- 0x00000000,
- 0x3FE00000,
- 0x00000000,
-};
-#pragma pop
+int daWtPillar_Draw(daWtPillar_c* i_this);
+int daWtPillar_Execute(daWtPillar_c* i_this);
+int daWtPillar_Delete(daWtPillar_c* i_this);
+int daWtPillar_Create(fopAc_ac_c* i_this);
-/* 80D2E86C-80D2E884 000020 0018+00 0/1 0/0 0/0 .data l_cull_box */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_cull_box[24] = {
- 0xC1, 0xF0, 0x00, 0x00, 0xC1, 0x20, 0x00, 0x00, 0xC1, 0xF0, 0x00, 0x00,
- 0x41, 0xF0, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x41, 0xF0, 0x00, 0x00,
-};
-#pragma pop
+/* 80D2C6CC-80D2C768 0000EC 009C+00 1/1 0/0 0/0 .text __ct__16daWtPillar_HIO_cFv */
+daWtPillar_HIO_c::daWtPillar_HIO_c() {
+ field_0x04.setall(1.0f);
+ field_0x10.setall(0);
+ mDisableDrawing = mForTesting = false;
+ mStopTime = 30;
+ field_0x20 = 2000.0f;
+ mUpFirstWaitFrames = 30;
+ field_0x34 = 5000.0f;
+ mUpWaitFrames = 60;
+ mDownwardSpeedUnitsPerSecond = 1000.0f;
+ mEffectOscillationAngle = 20.0f;
+ mEffectOscillationAmplitude = 25.0f;
+ mEffectOscillationDampingScale = 1.0f / 100.0f;
+ mEffectOscillationMaxDecay = 1.0f / 20.0f;
+ mEffectOscillationMinDecay = 1.0f / 100.0f;
+}
-/* 80D2E884-80D2E8D0 000038 004C+00 1/2 0/0 0/0 .data mCcDCps__12daWtPillar_c */
-SECTION_DATA u8 daWtPillar_c::mCcDCps[76] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x44, 0x89, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x16, 0x00, 0x00,
-};
+/* 80D2C7B0-80D2C838 0001D0 0088+00 2/2 0/0 0/0 .text setBaseMtx__12daWtPillar_cFv */
+void daWtPillar_c::setBaseMtx() {
+ mDoMtx_stack_c::transS(current.pos.x, current.pos.y + mCurrentHeight, current.pos.z);
+ mDoMtx_stack_c::transM(mEffectOscillationVerticalOffset.x, mEffectOscillationVerticalOffset.y, mEffectOscillationVerticalOffset.z);
-/* 80D2E8D0-80D2E914 000084 0044+00 1/2 0/0 0/0 .data mCcDCyl__12daWtPillar_c */
-SECTION_DATA u8 daWtPillar_c::mCcDCyl[68] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
+ mpModel->setBaseScale(scale);
+ mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
+}
-/* 80D2E914-80D2E920 -00001 000C+00 0/1 0/0 0/0 .data @3954 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3954[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionSwWait__12daWtPillar_cFv,
-};
-#pragma pop
-
-/* 80D2E920-80D2E92C -00001 000C+00 0/1 0/0 0/0 .data @3955 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3955[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionWait__12daWtPillar_cFv,
-};
-#pragma pop
-
-/* 80D2E92C-80D2E938 -00001 000C+00 0/1 0/0 0/0 .data @3956 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3956[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionUpFirst__12daWtPillar_cFv,
-};
-#pragma pop
-
-/* 80D2E938-80D2E944 -00001 000C+00 0/1 0/0 0/0 .data @3957 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3957[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionUpFirstWait__12daWtPillar_cFv,
-};
-#pragma pop
-
-/* 80D2E944-80D2E950 -00001 000C+00 0/1 0/0 0/0 .data @3958 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3958[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionUp__12daWtPillar_cFv,
-};
-#pragma pop
-
-/* 80D2E950-80D2E95C -00001 000C+00 0/1 0/0 0/0 .data @3959 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3959[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionUpWait__12daWtPillar_cFv,
-};
-#pragma pop
-
-/* 80D2E95C-80D2E968 -00001 000C+00 0/1 0/0 0/0 .data @3960 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3960[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionDown__12daWtPillar_cFv,
-};
-#pragma pop
-
-/* 80D2E968-80D2E974 -00001 000C+00 0/1 0/0 0/0 .data @3961 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3961[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionRockWait__12daWtPillar_cFv,
-};
-#pragma pop
-
-/* 80D2E974-80D2E980 -00001 000C+00 0/1 0/0 0/0 .data @3962 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3962[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionRockOn__12daWtPillar_cFv,
-};
-#pragma pop
-
-/* 80D2E980-80D2E98C -00001 000C+00 0/1 0/0 0/0 .data @3963 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3963[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionEnd__12daWtPillar_cFv,
-};
-#pragma pop
-
-/* 80D2E98C-80D2EA04 000140 0078+00 0/1 0/0 0/0 .data l_func$3953 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_func[120] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-#pragma pop
+/* 80D2C838-80D2C858 000258 0020+00 1/1 0/0 0/0 .text
+ * createHeapCallBack__12daWtPillar_cFP10fopAc_ac_c */
+int daWtPillar_c::createHeapCallBack(fopAc_ac_c* i_this) {
+ return static_cast<daWtPillar_c*>(i_this)->CreateHeap();
+}
-/* 80D2EA04-80D2EA14 0001B8 000E+02 1/1 0/0 0/0 .data l_eff$3970 */
-SECTION_DATA static u8 l_eff[14 + 2 /* padding */] = {
- 0x86,
- 0xE3,
- 0x86,
- 0xE4,
- 0x86,
- 0xE7,
- 0x86,
- 0xE6,
- 0x86,
- 0xE5,
- 0x86,
- 0xEB,
- 0x86,
- 0xEA,
- /* padding */
- 0x00,
- 0x00,
-};
+/* 80D2C858-80D2C960 000278 0108+00 1/1 0/0 0/0 .text CreateHeap__12daWtPillar_cFv */
+int daWtPillar_c::CreateHeap() {
+ J3DModelData* modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("efWater", 8));
+ JUT_ASSERT(369, modelData != 0);
+ mpModel = mDoExt_J3DModel__create(modelData, J3DMdlFlag_Unk80000, 0x11000284);
-/* 80D2EA14-80D2EA34 -00001 0020+00 1/0 0/0 0/0 .data l_daWtPillar_Method */
-static actor_method_class l_daWtPillar_Method = {
- (process_method_func)daWtPillar_Create__FP10fopAc_ac_c,
- (process_method_func)daWtPillar_Delete__FP12daWtPillar_c,
- (process_method_func)daWtPillar_Execute__FP12daWtPillar_c,
- 0,
- (process_method_func)daWtPillar_Draw__FP12daWtPillar_c,
-};
+ if(!mpModel)
+ return 0;
-/* 80D2EA34-80D2EA64 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_WaterPillar */
-extern actor_process_profile_definition g_profile_Obj_WaterPillar = {
- fpcLy_CURRENT_e, // mLayerID
- 3, // mListID
- fpcPi_CURRENT_e, // mListPrio
- PROC_Obj_WaterPillar, // mProcName
- &g_fpcLf_Method.base, // sub_method
- sizeof(daWtPillar_c), // mSize
- 0, // mSizeOther
- 0, // mParameters
- &g_fopAc_Method.base, // sub_method
- 520, // mPriority
- &l_daWtPillar_Method, // sub_method
- 0x00040000, // mStatus
- fopAc_ACTOR_e, // mActorType
- fopAc_CULLBOX_CUSTOM_e, // cullType
-};
+ J3DAnmTransform* anmTransform = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes("efWater", 5));
+ int res = mModelRotationAnimation.init(anmTransform, 1, 2, 1.0f, 0, -1, false);
+ JUT_ASSERT(385, res == 1)
-/* 80D2EA64-80D2EA8C 000218 0028+00 2/2 0/0 0/0 .data __vt__12daWtPillar_c */
-SECTION_DATA extern void* __vt__12daWtPillar_c[10] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)NULL,
- (void*)NULL,
- (void*)func_80D2E04C,
- (void*)func_80D2E044,
- (void*)eventRun__17dEvLib_callback_cFv,
- (void*)eventEnd__17dEvLib_callback_cFv,
- (void*)__dt__12daWtPillar_cFv,
- (void*)eventStart__12daWtPillar_cFv,
-};
+ J3DAnmTextureSRTKey* anmSRTKey = static_cast<J3DAnmTextureSRTKey*>(dComIfG_getObjectRes("efWater", 11));
+ res = mVerticalTextureScrollAnimation.init(modelData, anmSRTKey, 1, 2, 1.0f, 0, -1);
+ JUT_ASSERT(395, res == 1)
-/* 80D2EA8C-80D2EA98 000240 000C+00 2/2 0/0 0/0 .data __vt__12dBgS_AcchCir */
-SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12dBgS_AcchCirFv,
-};
+ return 1;
+}
-/* 80D2EA98-80D2EAA4 00024C 000C+00 3/3 0/0 0/0 .data __vt__10cCcD_GStts */
-SECTION_DATA extern void* __vt__10cCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10cCcD_GSttsFv,
-};
+/* 80D2E84C-80D2E858 000000 000C+00 2/2 0/0 0/0 .data cNullVec__6Z2Calc */
+UNK_REL_DATA
-/* 80D2EAA4-80D2EAB0 000258 000C+00 2/2 0/0 0/0 .data __vt__10dCcD_GStts */
-SECTION_DATA extern void* __vt__10dCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10dCcD_GSttsFv,
+/* 80D2E86C-80D2E884 000020 0018+00 0/1 0/0 0/0 .data l_cull_box */
+Vec l_cull_box[2] = {
+ {-30.0f, -10.0f, -30.0f},
+ {30.0f, 60.0f, 30.0f}
};
-/* 80D2EAB0-80D2EABC 000264 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGCyl */
-SECTION_DATA extern void* __vt__8cM3dGCyl[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGCylFv,
+const dCcD_SrcGObjInf daWtPillar_c::mCcDObjInfo = {
+ {0x0, {{AT_TYPE_100, 0x0, 0x1D}, {AT_TYPE_0, 0x0}, 0x0}}, // mObj
+ {dCcD_SE_SWORD, 0x0, 0x0, dCcD_MTRL_NONE, 0x0}, // mGObjAt
+ {dCcD_SE_STONE, 0x0, 0x0, dCcD_MTRL_NONE, 0x0}, // mGObjTg
+ {}, // mGObjCo
};
-
-/* 80D2EABC-80D2EAC8 000270 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGAab */
-SECTION_DATA extern void* __vt__8cM3dGAab[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGAabFv,
+const dCcD_SrcGObjInf daWtPillar_c::mCcDObjCoInfo = {
+ {0x0, {{AT_TYPE_0, 0x0, 0x0}, {0x00, 0x0}, 0x79}}, // mObj
+ {dCcD_SE_SWORD, 0x0, 0x0, dCcD_MTRL_NONE, 0x0}, // mGObjAt
+ {dCcD_SE_STONE, 0x0, 0x0, dCcD_MTRL_NONE, 0x0}, // mGObjTg
+ {}, // mGObjCo
};
-/* 80D2EAC8-80D2EAEC 00027C 0024+00 3/3 0/0 0/0 .data __vt__12dBgS_ObjAcch */
-SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12dBgS_ObjAcchFv,
- (void*)NULL,
- (void*)NULL,
- (void*)func_80D2E03C,
- (void*)NULL,
- (void*)NULL,
- (void*)func_80D2E034,
-};
+/* 80D2EB3C-80D2EB94 000014 0058+00 5/5 0/0 0/0 .bss l_HIO */
+daWtPillar_HIO_c l_HIO;
-/* 80D2EAEC-80D2EAF8 0002A0 000C+00 3/3 0/0 0/0 .data __vt__12J3DFrameCtrl */
-SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12J3DFrameCtrlFv,
+/* 80D2E884-80D2E8D0 000038 004C+00 1/2 0/0 0/0 .data mCcDCps__12daWtPillar_c */
+dCcD_SrcCps daWtPillar_c::mCcDCps = {
+ daWtPillar_c::mCcDObjInfo,
+ { { {0.0f, 0.0f, 0.0f}, {0.0f,1100.0f, 0.0f}, 150.0f }}
};
-/* 80D2EAF8-80D2EB10 0002AC 0018+00 3/3 0/0 0/0 .data __vt__17dEvLib_callback_c */
-SECTION_DATA extern void* __vt__17dEvLib_callback_c[6] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__17dEvLib_callback_cFv,
- (void*)eventStart__17dEvLib_callback_cFv,
- (void*)eventRun__17dEvLib_callback_cFv,
- (void*)eventEnd__17dEvLib_callback_cFv,
-};
+/* 80D2E8D0-80D2E914 000084 0044+00 1/2 0/0 0/0 .data mCcDCyl__12daWtPillar_c */
+dCcD_SrcCyl daWtPillar_c::mCcDCyl = {daWtPillar_c::mCcDObjCoInfo};
-/* 80D2EB10-80D2EB1C 0002C4 000C+00 2/2 0/0 0/0 .data __vt__16daWtPillar_HIO_c */
-SECTION_DATA extern void* __vt__16daWtPillar_HIO_c[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__16daWtPillar_HIO_cFv,
-};
+/* 80D2C960-80D2CC0C 000380 02AC+00 1/1 0/0 0/0 .text create__12daWtPillar_cFv */
+cPhs__Step daWtPillar_c::create() {
+ fopAcM_SetupActor(this, daWtPillar_c);
+ const cPhs__Step phase = static_cast<cPhs__Step>(dComIfG_resLoad(&mPhase, "efWater"));
+
+ if(phase == cPhs_COMPLEATE_e) {
+ if(!fopAcM_entrySolidHeap(this, createHeapCallBack, 0x2000))
+ return cPhs_ERROR_e;
+
+ mStts.Init(0xFE, 0xFF, this);
+ mCylinderCollider.Set(mCcDCyl);
+ mCylinderCollider.SetStts(&mStts);
+ mCapsuleCollider.Set(mCcDCps);
+ mCapsuleCollider.SetStts(&mStts);
+
+ //! @bug maxY is used as maxZ for setting cull size box, making it larger than intended
+ const f32 minX = l_cull_box[0].x * scale.x;
+ const f32 minY = l_cull_box[0].y * scale.y;
+ const f32 minZ = l_cull_box[0].z * scale.x;
+ const f32 maxX = l_cull_box[1].x * scale.x;
+ const f32 maxY = l_cull_box[1].y * scale.y;
+ fopAcM_setCullSizeBox(this, minX, minY, minZ, maxX, maxY, maxY);
+
+ mAcchCir.SetWall(150.0f, 5.0f);
+ mAcch.Set(&current.pos, &old.pos, this, 1, &mAcchCir, &speed, 0, 0);
+ mAcch.ClrWaterNone();
+ mAcch.SetWaterCheckOffset(10000.0f);
+ mAcch.OnLineCheckNone();
+
+ mStalactiteShouldStartShaking = mIsCarryingStalactite = false;
+
+ mSwitchNo = getParam(0, 8);
+ mType = getParam(8, 4);
+
+ mMaxHeight = getParam(27, 6) * 100.0f;
+
+ // "== Maximum height %f ==\n"
+ OS_REPORT("== 最大の高さ %f ==\n", mMaxHeight);
+
+ mAcch.CrrPos(dComIfG_Bgsp());
+
+ /**
+ * @bug Adjustments to the water pillar's target height are only made when the object
+ * is created, leading to inconsistent behavior if the water height is changed
+ * after the object is created.
+ *
+ * See the east room in B1 of the Lakebed Temple as an example:
+ * When first entering entering the room after redirecting water towards it, a
+ * cutscene plays showing the water level rising;
+ * the bottom of the oscillating water pillar in this room starts above water,
+ * but ends up below water after the cutscene, resulting in its target height never being modified.
+ * However, exiting and re-entering the room does not result in the cutscene playing again,
+ * so its target height is modified upon subsequent entries to the room
+ */
+ if(mAcch.ChkWaterHit() && mType == RISES_AND_FALLS) {
+ mRelativeWaterHeight = mAcch.m_wtr.GetHeight() - current.pos.y;
+ mMaxHeight += mRelativeWaterHeight;
+
+ // "== Underwater (%f) (%f) type: %d ==\n"
+ OS_REPORT("== 水中にある (%f) (%f) type:%d ==\n", mMaxHeight, mRelativeWaterHeight, mRisesAndFalls);
+ }
+
+ mEffectOscillationAngleStep = mPillarIsPreparingToRise = mStartedRisingOrDoesNotRiseAndFall = field_0xB44 = 0;
+ mEffectOscillationVerticalOffset.set(0.0f, 0.0f, 0.0f);
+ mCurrentHeight = mEffectOscillationMinDecay = mEffectOscillationMaxDecay = mEffectOscillationDampingScale = mEffectOscillationAngle = mEffectOscillationAmplitude = 0.0f;
+
+ if(mSwitchNo != 0xFF) {
+ actionSwWaitInit();
+ }
+ else if(mType == STATIC) {
+ mCurrentHeight = mMaxHeight;
+ mStartedRisingOrDoesNotRiseAndFall = field_0xB44 = true;
+ actionRockWaitInit();
+ }
+ else {
+ actionUpFirstInit();
+ }
+
+ setBaseMtx();
+
+ // TODO:
+ // "Water column"
+ // entryHIO(&l_HIO, "水柱");
+ }
+
+ return phase;
+}
-/* 80D2EB1C-80D2EB28 0002D0 000C+00 3/3 0/0 0/0 .data __vt__14mDoHIO_entry_c */
-SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__14mDoHIO_entry_cFv,
-};
+/* 80D2CC0C-80D2CE4C 00062C 0240+00 1/1 0/0 0/0 .text execute__12daWtPillar_cFv */
+int daWtPillar_c::execute() {
+ mModelRotationAnimation.play();
+ mVerticalTextureScrollAnimation.play();
-/* 80D2C6CC-80D2C768 0000EC 009C+00 1/1 0/0 0/0 .text __ct__16daWtPillar_HIO_cFv */
-daWtPillar_HIO_c::daWtPillar_HIO_c() {
- // NONMATCHING
-}
+ eventUpdate();
+ actionMain();
-/* 80D2C768-80D2C7B0 000188 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */
-// mDoHIO_entry_c::~mDoHIO_entry_c() {
-extern "C" void __dt__14mDoHIO_entry_cFv() {
- // NONMATCHING
-}
+ mAcch.CrrPos(dComIfG_Bgsp());
+ effectSet();
+ effectSet2();
-/* 80D2C7B0-80D2C838 0001D0 0088+00 2/2 0/0 0/0 .text setBaseMtx__12daWtPillar_cFv */
-void daWtPillar_c::setBaseMtx() {
- // NONMATCHING
-}
+ mScaleX = scale.x;
+ mScaleZ = scale.z;
-/* 80D2C838-80D2C858 000258 0020+00 1/1 0/0 0/0 .text
- * createHeapCallBack__12daWtPillar_cFP10fopAc_ac_c */
-void daWtPillar_c::createHeapCallBack(fopAc_ac_c* param_0) {
- // NONMATCHING
-}
+ cXyz currentHeightVector(0.0f, 1.0f, 0.0f);
+ currentHeightVector.y *= mCurrentHeight;
-/* ############################################################################################## */
-/* 80D2E844-80D2E844 0000D4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80D2E844 = "efWater";
-#pragma pop
-/* 80D2C858-80D2C960 000278 0108+00 1/1 0/0 0/0 .text CreateHeap__12daWtPillar_cFv */
-void daWtPillar_c::CreateHeap() {
- // NONMATCHING
-}
+ mDoMtx_stack_c::ZXYrotS(current.angle.x, current.angle.y, current.angle.z);
+ mDoMtx_stack_c::multVec(&currentHeightVector, &currentHeightVector);
-/* ############################################################################################## */
-/* 80D2E790-80D2E7C0 000020 0030+00 1/1 0/0 0/0 .rodata mCcDObjInfo__12daWtPillar_c */
-SECTION_RODATA u8 const daWtPillar_c::mCcDObjInfo[48] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D2E790, &daWtPillar_c::mCcDObjInfo);
+ cXyz currentPos = current.pos;
+ currentPos.y -= 150.0f;
-/* 80D2E7C0-80D2E7F0 000050 0030+00 1/1 0/0 0/0 .rodata mCcDObjCoInfo__12daWtPillar_c */
-SECTION_RODATA u8 const daWtPillar_c::mCcDObjCoInfo[48] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D2E7C0, &daWtPillar_c::mCcDObjCoInfo);
-
-/* 80D2E7F0-80D2E7F4 000080 0004+00 0/2 0/0 0/0 .rodata @3742 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3742 = 150.0f;
-COMPILER_STRIP_GATE(0x80D2E7F0, &lit_3742);
-#pragma pop
-
-/* 80D2E7F4-80D2E7F8 000084 0004+00 0/3 0/0 0/0 .rodata @3743 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3743 = 5.0f;
-COMPILER_STRIP_GATE(0x80D2E7F4, &lit_3743);
-#pragma pop
-
-/* 80D2E7F8-80D2E7FC 000088 0004+00 0/1 0/0 0/0 .rodata @3744 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3744 = 10000.0f;
-COMPILER_STRIP_GATE(0x80D2E7F8, &lit_3744);
-#pragma pop
-
-/* 80D2E7FC-80D2E800 00008C 0004+00 0/4 0/0 0/0 .rodata @3745 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3745 = 100.0f;
-COMPILER_STRIP_GATE(0x80D2E7FC, &lit_3745);
-#pragma pop
-
-/* 80D2E800-80D2E808 000090 0004+04 2/11 0/0 0/0 .rodata @3746 */
-SECTION_RODATA static u8 const lit_3746[4 + 4 /* padding */] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- /* padding */
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-COMPILER_STRIP_GATE(0x80D2E800, &lit_3746);
+ mCapsuleSource.mStart = currentPos;
-/* 80D2E808-80D2E810 000098 0008+00 0/4 0/0 0/0 .rodata @3748 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3748[8] = {
- 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D2E808, &lit_3748);
-#pragma pop
-/* 80D2C960-80D2CC0C 000380 02AC+00 1/1 0/0 0/0 .text create__12daWtPillar_cFv */
-void daWtPillar_c::create() {
- // NONMATCHING
-}
+ mCapsuleSource.mEnd = currentHeightVector + currentPos;
+ mCapsuleSource.mRadius = scale.x * 140.0f;
-/* ############################################################################################## */
-/* 80D2E810-80D2E814 0000A0 0004+00 0/1 0/0 0/0 .rodata @3947 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3947 = 140.0f;
-COMPILER_STRIP_GATE(0x80D2E810, &lit_3947);
-#pragma pop
+ if(mCurrentHeight / 100.0f > scale.y * l_HIO.field_0x28) {
+ cM3dGCps& cps = mCapsuleCollider;
+ cps.Set(mCapsuleSource);
+ dComIfG_Ccsp()->Set(&mCapsuleCollider);
+ }
-/* 80D2E814-80D2E818 0000A4 0004+00 0/1 0/0 0/0 .rodata @3948 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u32 const lit_3948 = 0x43360B61;
-COMPILER_STRIP_GATE(0x80D2E814, &lit_3948);
-#pragma pop
+ mCylinderCollider.SetR(scale.x * 140.0f);
+ mCylinderCollider.SetH(mCurrentHeight);
+ mCylinderCollider.SetC(current.pos);
+ dComIfG_Ccsp()->Set(&mCylinderCollider);
-/* 80D2EB30-80D2EB3C 000008 000C+00 1/1 0/0 0/0 .bss @3635 */
-static u8 lit_3635[12];
+ mEffectOscillationVerticalOffset.y = mEffectOscillationAmplitude * cM_ssin(mEffectOscillationAngleStep * cM_deg2s(mEffectOscillationAngle));
-/* 80D2EB3C-80D2EB94 000014 0058+00 5/5 0/0 0/0 .bss l_HIO */
-static u8 l_HIO[88];
+ cLib_addCalc(&mEffectOscillationAmplitude, 0.0f, mEffectOscillationDampingScale, mEffectOscillationMaxDecay, mEffectOscillationMinDecay);
-/* 80D2CC0C-80D2CE4C 00062C 0240+00 1/1 0/0 0/0 .text execute__12daWtPillar_cFv */
-void daWtPillar_c::execute() {
- // NONMATCHING
-}
+ mEffectOscillationAngleStep++;
-/* ############################################################################################## */
-/* 80D2EB94-80D2EB98 00006C 0004+00 1/1 0/0 0/0 .bss None */
-static u8 data_80D2EB94[4];
+ setBaseMtx();
+
+ return 1;
+}
/* 80D2CE4C-80D2CF98 00086C 014C+00 1/1 0/0 0/0 .text actionMain__12daWtPillar_cFv */
void daWtPillar_c::actionMain() {
- // NONMATCHING
+ static actionFunc l_func[] = {
+ &daWtPillar_c::actionSwWait, &daWtPillar_c::actionWait,
+ &daWtPillar_c::actionUpFirst, &daWtPillar_c::actionUpFirstWait,
+ &daWtPillar_c::actionUp, &daWtPillar_c::actionUpWait,
+ &daWtPillar_c::actionDown, &daWtPillar_c::actionRockWait,
+ &daWtPillar_c::actionRockOn, &daWtPillar_c::actionEnd
+ };
+
+ (this->*l_func[mAction])();
}
+/* 80D2EA04-80D2EA14 0001B8 000E+02 1/1 0/0 0/0 .data l_eff$3970 */
+static u16 l_eff[7] = {
+ 0x86E3, // Smoke-like water foam particles, placed at pillar top
+ 0x86E4, // Large paint splatter-type water foam particles, placed at pillar top
+ 0x86E7, // Small paint splash-type water foam particles, placed at pillar top
+ 0x86E6, // Small paint splatter-type water foam particles, placed at pillar top
+ 0x86E5, // Large paint splash-type water foam particles, placed at pillar bottom
+ 0x86EB, // Water splash particles, placed at pillar bottom
+ 0x86EA // Water splash particles, placed at pillar top
+};
+
/* 80D2CF98-80D2D278 0009B8 02E0+00 1/1 0/0 0/0 .text effectSet__12daWtPillar_cFv */
void daWtPillar_c::effectSet() {
- // NONMATCHING
-}
+ // Create foam particles at the bottom and top of the pillar
+ cXyz effectOscillationOffset;
+ effectOscillationOffset.setall(0.0f);
+
+ mDoMtx_stack_c::transS(mEffectOscillationVerticalOffset.x, mEffectOscillationVerticalOffset.y, mEffectOscillationVerticalOffset.z);
+ mDoMtx_stack_c::multVec(&effectOscillationOffset, &effectOscillationOffset);
+
+ cXyz currentPosWithOscillationOffset = current.pos + effectOscillationOffset;
-/* ############################################################################################## */
-/* 80D2E818-80D2E81C 0000A8 0004+00 0/1 0/0 0/0 .rodata @4088 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4088 = 500.0f;
-COMPILER_STRIP_GATE(0x80D2E818, &lit_4088);
-#pragma pop
+ mTopPos = currentPosWithOscillationOffset;
+ mTopPos.y += mCurrentHeight;
+
+ for(int i = 0; i < 3; i++)
+ mBottomAndTopParticleEmmitters[i] = dComIfGp_particle_set(mBottomAndTopParticleEmmitters[i],l_eff[i], &mTopPos, NULL, NULL);
+
+ if(!mIsCarryingStalactite)
+ mBottomAndTopParticleEmmitters[3] = dComIfGp_particle_set(mBottomAndTopParticleEmmitters[3],l_eff[3], &mTopPos, NULL, NULL);
+
+ if(mStartedRisingOrDoesNotRiseAndFall)
+ mBottomAndTopParticleEmmitters[4] = dComIfGp_particle_set(mBottomAndTopParticleEmmitters[4],l_eff[4], &current.pos, NULL, NULL);
+
+ if(mPillarIsPreparingToRise) {
+ mBottomAndTopParticleEmmitters[5] = dComIfGp_particle_set(mBottomAndTopParticleEmmitters[5],l_eff[5], &current.pos, NULL, NULL);
+ }
+
+ if(mIsCarryingStalactite)
+ mBottomAndTopParticleEmmitters[6] = dComIfGp_particle_set(mBottomAndTopParticleEmmitters[6],l_eff[6], &mTopPos, NULL, NULL);
+}
/* 80D2D278-80D2D3FC 000C98 0184+00 1/1 0/0 0/0 .text effectSet2__12daWtPillar_cFv */
void daWtPillar_c::effectSet2() {
- // NONMATCHING
+
+ /* If the bottom of the pillar is at least 500.0 units underwater and the
+ current height of the pillar makes the top be above water,
+ create foam particles at the horizontal position of the pillar, but at
+ the water surface
+ */
+
+ // Can be observed in Lakebed Temple, when water level is raised in certain rooms
+ if(mAcch.m_wtr.GetHeight() - current.pos.y >= 500.0f &&
+ current.pos.y + mCurrentHeight >= mAcch.m_wtr.GetHeight())
+ {
+ cXyz effectOscillationOffset;
+ effectOscillationOffset.setall(0.0f);
+
+ mDoMtx_stack_c::transS(mEffectOscillationVerticalOffset.x, mEffectOscillationVerticalOffset.y, mEffectOscillationVerticalOffset.z);
+ mDoMtx_stack_c::multVec(&effectOscillationOffset, &effectOscillationOffset);
+
+ cXyz currentPosWithVerticalOffset = current.pos + effectOscillationOffset;
+ currentPosWithVerticalOffset.y = mAcch.m_wtr.GetHeight();
+
+ mWaterSurfaceParticleEmitters[0] = dComIfGp_particle_set(mWaterSurfaceParticleEmitters[0], 0x888F, &currentPosWithVerticalOffset, NULL, NULL);
+ mWaterSurfaceParticleEmitters[1] = dComIfGp_particle_set(mWaterSurfaceParticleEmitters[1], 0x8890, &currentPosWithVerticalOffset, NULL, NULL);
+ }
}
/* 80D2D3FC-80D2D408 000E1C 000C+00 1/1 0/0 0/0 .text actionSwWaitInit__12daWtPillar_cFv
*/
void daWtPillar_c::actionSwWaitInit() {
- // NONMATCHING
+ mAction = ACTION_SW_WAIT;
}
/* 80D2D408-80D2D488 000E28 0080+00 1/0 0/0 0/0 .text actionSwWait__12daWtPillar_cFv */
void daWtPillar_c::actionSwWait() {
- // NONMATCHING
+ if(dComIfGs_isSwitch(mSwitchNo, fopAcM_GetHomeRoomNo(this))) {
+ if(getEventID() != 0xFF)
+ orderEvent(getEventID(), 0xFF, 1);
+ else
+ eventStart();
+ }
}
/* 80D2D488-80D2D4AC 000EA8 0024+00 2/1 0/0 0/0 .text eventStart__12daWtPillar_cFv */
-void daWtPillar_c::eventStart() {
- // NONMATCHING
+BOOL daWtPillar_c::eventStart() {
+ actionUpFirstInit();
+ return TRUE;
}
-/* ############################################################################################## */
-/* 80D2E81C-80D2E820 0000AC 0004+00 0/6 0/0 0/0 .rodata @4124 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4124 = 30.0f;
-COMPILER_STRIP_GATE(0x80D2E81C, &lit_4124);
-#pragma pop
-
-/* 80D2E820-80D2E824 0000B0 0004+00 0/1 0/0 0/0 .rodata @4125 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4125 = 0.5f;
-COMPILER_STRIP_GATE(0x80D2E820, &lit_4125);
-#pragma pop
-
-/* 80D2E824-80D2E828 0000B4 0004+00 3/8 0/0 0/0 .rodata @4126 */
-SECTION_RODATA static f32 const lit_4126 = -1.0f;
-COMPILER_STRIP_GATE(0x80D2E824, &lit_4126);
-
/* 80D2D4AC-80D2D588 000ECC 00DC+00 1/1 0/0 0/0 .text actionWaitInit__12daWtPillar_cFv */
void daWtPillar_c::actionWaitInit() {
- // NONMATCHING
+ mWaitFrameDelay = getParam(12, 5) * 0.5f * 30.0f;
+ mStartedRisingOrDoesNotRiseAndFall = field_0xB44 = false;
+
+ fopAcM_seStartCurrent(this, Z2SE_OBJ_WTR_CLMN_WAIT, 0);
+
+ mAction = ACTION_WAIT;
}
/* 80D2D588-80D2D5C0 000FA8 0038+00 1/0 0/0 0/0 .text actionWait__12daWtPillar_cFv */
void daWtPillar_c::actionWait() {
- // NONMATCHING
+ if(mWaitFrameDelay)
+ mWaitFrameDelay--;
+ else
+ actionUpFirstInit();
}
-/* ############################################################################################## */
-/* 80D2E828-80D2E82C 0000B8 0004+00 0/1 0/0 0/0 .rodata @4151 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4151 = 50.0f;
-COMPILER_STRIP_GATE(0x80D2E828, &lit_4151);
-#pragma pop
-
-/* 80D2E82C-80D2E830 0000BC 0004+00 0/1 0/0 0/0 .rodata @4152 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4152 = 300.0f;
-COMPILER_STRIP_GATE(0x80D2E82C, &lit_4152);
-#pragma pop
-
/* 80D2D5C0-80D2D6C4 000FE0 0104+00 3/3 0/0 0/0 .text actionUpFirstInit__12daWtPillar_cFv
*/
void daWtPillar_c::actionUpFirstInit() {
- // NONMATCHING
-}
+ mTargetMaxSpeed = (getParam(17, 5) * 100.0f * 5.0f) / 30.0f;
+
+ if(mIsCarryingStalactite)
+ mFirstTargetHeight = 50.0f;
+ else
+ mFirstTargetHeight = 300.0f;
-/* ############################################################################################## */
-/* 80D2E830-80D2E834 0000C0 0004+00 0/4 0/0 0/0 .rodata @4161 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4161 = 1.0f / 10.0f;
-COMPILER_STRIP_GATE(0x80D2E830, &lit_4161);
-#pragma pop
+ speedF = 0.0f;
+
+ mStalactiteShouldStartShaking = mPillarIsPreparingToRise = field_0xB44 = TRUE;
+
+ fopAcM_seStartCurrent(this, Z2SE_OBJ_WTR_CLMN_READY, 0);
+
+ mAction = ACTION_UP_FIRST;
+}
/* 80D2D6C4-80D2D73C 0010E4 0078+00 1/0 0/0 0/0 .text actionUpFirst__12daWtPillar_cFv */
void daWtPillar_c::actionUpFirst() {
- // NONMATCHING
+ cLib_chaseF(&speedF, mTargetMaxSpeed, mTargetMaxSpeed / 30.0f);
+
+ const f32 differenceBetweenCurrentAndFirstTargetHeight = cLib_addCalc(&mCurrentHeight, mFirstTargetHeight, 1.0f, speedF, 1.0f / 10.0f);
+
+ if(differenceBetweenCurrentAndFirstTargetHeight == 0.0f)
+ actionUpFirstWaitInit();
}
/* 80D2D73C-80D2D780 00115C 0044+00 1/1 0/0 0/0 .text actionUpFirstWaitInit__12daWtPillar_cFv */
void daWtPillar_c::actionUpFirstWaitInit() {
- // NONMATCHING
+ mWaitFrameDelay = l_HIO.mUpFirstWaitFrames;
+ mEffectOscillationAmplitude = l_HIO.mEffectOscillationAmplitude;
+ mEffectOscillationAngle = l_HIO.mEffectOscillationAngle;
+ mEffectOscillationDampingScale = l_HIO.mEffectOscillationDampingScale;
+ mEffectOscillationMaxDecay = l_HIO.mEffectOscillationMaxDecay;
+ mEffectOscillationMinDecay = l_HIO.mEffectOscillationMinDecay;
+ mAction = ACTION_UP_FIRST_WAIT;
}
/* 80D2D780-80D2D7B8 0011A0 0038+00 1/0 0/0 0/0 .text actionUpFirstWait__12daWtPillar_cFv
*/
void daWtPillar_c::actionUpFirstWait() {
- // NONMATCHING
+ if(mWaitFrameDelay)
+ mWaitFrameDelay--;
+ else
+ actionUpInit();
}
-/* ############################################################################################## */
-/* 80D2E834-80D2E838 0000C4 0004+00 0/1 0/0 0/0 .rodata @4182 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4182 = -250.0f;
-COMPILER_STRIP_GATE(0x80D2E834, &lit_4182);
-#pragma pop
-
/* 80D2D7B8-80D2D850 0011D8 0098+00 1/1 0/0 0/0 .text actionUpInit__12daWtPillar_cFv */
void daWtPillar_c::actionUpInit() {
- // NONMATCHING
+ mTargetMaxSpeed = getParam(22, 5) * 100.0f * 5.0f / 30.0f;
+
+ if(mIsCarryingStalactite)
+ mTargetHeightStalactiteOffset = -250.0f;
+ else
+ mTargetHeightStalactiteOffset = 0.0f;
+
+ mPillarIsPreparingToRise = false;
+
+ mStalactiteShouldStartShaking = mStartedRisingOrDoesNotRiseAndFall = true;
+
+ speedF = 0.0f;
+
+ mAction = ACTION_UP;
}
/* 80D2D850-80D2D95C 001270 010C+00 1/0 0/0 0/0 .text actionUp__12daWtPillar_cFv */
void daWtPillar_c::actionUp() {
- // NONMATCHING
+ cLib_chaseF(&speedF, mTargetMaxSpeed, mTargetMaxSpeed / 30.0f);
+
+ const f32 differenceBetweenCurrentAndMaxHeightWithStalactiteWeight = cLib_addCalc(&mCurrentHeight, mMaxHeight + mTargetHeightStalactiteOffset, 1.0f, speedF, 1.0f / 10.0f);
+
+ mDoAud_seStartLevel(Z2SE_OBJ_WTR_CLMN_UP, &mTopPos, mMaxHeight + mTargetHeightStalactiteOffset, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+
+ if(differenceBetweenCurrentAndMaxHeightWithStalactiteWeight == 0.0f) {
+ if(mType == STATIC)
+ actionRockWaitInit();
+ else
+ actionUpWaitInit();
+ }
+
}
/* 80D2D95C-80D2D9A0 00137C 0044+00 1/1 0/0 0/0 .text actionUpWaitInit__12daWtPillar_cFv
*/
void daWtPillar_c::actionUpWaitInit() {
- // NONMATCHING
+ mWaitFrameDelay = l_HIO.mUpWaitFrames;
+ mEffectOscillationAmplitude = l_HIO.mEffectOscillationAmplitude;
+ mEffectOscillationAngle = l_HIO.mEffectOscillationAngle;
+ mEffectOscillationDampingScale = l_HIO.mEffectOscillationDampingScale;
+ mEffectOscillationMaxDecay = l_HIO.mEffectOscillationMaxDecay;
+ mEffectOscillationMinDecay = l_HIO.mEffectOscillationMinDecay;
+ mAction = ACTION_UP_WAIT;
}
/* 80D2D9A0-80D2DA58 0013C0 00B8+00 1/0 0/0 0/0 .text actionUpWait__12daWtPillar_cFv */
void daWtPillar_c::actionUpWait() {
- // NONMATCHING
+ mDoAud_seStartLevel(Z2SE_OBJ_WTR_CLMN_UP, &mTopPos, mMaxHeight + mTargetHeightStalactiteOffset, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+
+ if(mWaitFrameDelay)
+ mWaitFrameDelay--;
+ else
+ actionDownInit();
}
/* 80D2DA58-80D2DA78 001478 0020+00 1/1 0/0 0/0 .text actionDownInit__12daWtPillar_cFv */
void daWtPillar_c::actionDownInit() {
- // NONMATCHING
+ speedF = 0.0f;
+ mStalactiteShouldStartShaking = true;
+ mAction = ACTION_DOWN;
}
/* 80D2DA78-80D2DB68 001498 00F0+00 1/0 0/0 0/0 .text actionDown__12daWtPillar_cFv */
void daWtPillar_c::actionDown() {
- // NONMATCHING
+ cLib_chaseF(&speedF, l_HIO.mDownwardSpeedUnitsPerSecond / 30.0f, (l_HIO.mDownwardSpeedUnitsPerSecond / 30.0f) / 30.0f);
+
+ const f32 diff = cLib_addCalc(&mCurrentHeight, 0.0f, 1.0f, speedF, 0.1f);
+
+ mDoAud_seStartLevel(Z2SE_OBJ_WTR_CLMN_DOWN, &mTopPos, mCurrentHeight, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+
+ if(diff == 0.0f)
+ actionWaitInit();
}
/* 80D2DB68-80D2DB74 001588 000C+00 2/2 0/0 0/0 .text actionRockWaitInit__12daWtPillar_cFv */
void daWtPillar_c::actionRockWaitInit() {
- // NONMATCHING
+ mAction = ACTION_ROCK_WAIT;
}
/* 80D2DB74-80D2DC20 001594 00AC+00 1/0 0/0 0/0 .text actionRockWait__12daWtPillar_cFv */
void daWtPillar_c::actionRockWait() {
- // NONMATCHING
+ mDoAud_seStartLevel(Z2SE_OBJ_WTR_CLMN_UP, &mTopPos, mMaxHeight + mTargetHeightStalactiteOffset, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+
+ if(mIsCarryingStalactite)
+ actionRockOnInit();
}
/* 80D2DC20-80D2DC2C 001640 000C+00 1/1 0/0 0/0 .text actionRockOnInit__12daWtPillar_cFv
*/
void daWtPillar_c::actionRockOnInit() {
- // NONMATCHING
-}
-
-/* ############################################################################################## */
-/* 80D2E838-80D2E83C 0000C8 0004+00 0/1 0/0 0/0 .rodata @4271 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4271 = 250.0f;
-COMPILER_STRIP_GATE(0x80D2E838, &lit_4271);
-#pragma pop
-
-/* 80D2E83C-80D2E840 0000CC 0004+00 0/1 0/0 0/0 .rodata @4272 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4272 = 3.0f / 5.0f;
-COMPILER_STRIP_GATE(0x80D2E83C, &lit_4272);
-#pragma pop
-
-/* 80D2E840-80D2E844 0000D0 0004+00 0/1 0/0 0/0 .rodata @4273 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4273 = 10.0f;
-COMPILER_STRIP_GATE(0x80D2E840, &lit_4273);
-#pragma pop
+ mAction = ACTION_ROCK_ON;
+}
/* 80D2DC2C-80D2DD0C 00164C 00E0+00 1/0 0/0 0/0 .text actionRockOn__12daWtPillar_cFv */
void daWtPillar_c::actionRockOn() {
- // NONMATCHING
+ const f32 differenceBetweenCurrentAndMaxHeightWithStalactiteWeight = cLib_addCalc(&mCurrentHeight, mMaxHeight - 250.0f, 3.0f / 5.0f, 10.0f, 0.1f);
+
+ mDoAud_seStartLevel(Z2SE_OBJ_WTR_CLMN_UP, &mTopPos, mMaxHeight + mTargetHeightStalactiteOffset, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+
+ if(differenceBetweenCurrentAndMaxHeightWithStalactiteWeight == 0.0f)
+ actionEndInit();
}
/* 80D2DD0C-80D2DD18 00172C 000C+00 1/1 0/0 0/0 .text actionEndInit__12daWtPillar_cFv */
void daWtPillar_c::actionEndInit() {
- // NONMATCHING
+ mAction = ACTION_END;
}
/* 80D2DD18-80D2DDB0 001738 0098+00 1/0 0/0 0/0 .text actionEnd__12daWtPillar_cFv */
void daWtPillar_c::actionEnd() {
- // NONMATCHING
+ mDoAud_seStartLevel(Z2SE_OBJ_WTR_CLMN_UP, &mTopPos, mMaxHeight + mTargetHeightStalactiteOffset, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
}
/* 80D2DDB0-80D2DDB8 0017D0 0008+00 0/0 0/0 1/1 .text getPillarHeight__12daWtPillar_cFv
*/
-void daWtPillar_c::getPillarHeight() {
- // NONMATCHING
+f32 daWtPillar_c::getPillarHeight() {
+ return mCurrentHeight;
}
/* 80D2DDB8-80D2DE84 0017D8 00CC+00 1/1 0/0 0/0 .text draw__12daWtPillar_cFv */
-void daWtPillar_c::draw() {
- // NONMATCHING
+int daWtPillar_c::draw() {
+ g_env_light.settingTevStruct(0x10, &current.pos, &tevStr);
+ g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr);
+
+ J3DModelData* const modelData = mpModel->getModelData();
+ mModelRotationAnimation.entry(modelData);
+ mVerticalTextureScrollAnimation.entry(modelData);
+
+ dComIfGd_setListBG();
+ mDoExt_modelUpdateDL(mpModel);
+ dComIfGd_setList();
+
+ return 1;
}
/* 80D2DE84-80D2DEB4 0018A4 0030+00 1/1 0/0 0/0 .text _delete__12daWtPillar_cFv */
-void daWtPillar_c::_delete() {
- // NONMATCHING
+int daWtPillar_c::_delete() {
+ dComIfG_resDelete(&mPhase, "efWater");
+ return 1;
}
/* 80D2DEB4-80D2DED4 0018D4 0020+00 1/0 0/0 0/0 .text daWtPillar_Draw__FP12daWtPillar_c
*/
-static void daWtPillar_Draw(daWtPillar_c* param_0) {
- // NONMATCHING
+int daWtPillar_Draw(daWtPillar_c* i_this) {
+ return i_this->draw();
}
/* 80D2DED4-80D2DEF4 0018F4 0020+00 1/0 0/0 0/0 .text daWtPillar_Execute__FP12daWtPillar_c */
-static void daWtPillar_Execute(daWtPillar_c* param_0) {
- // NONMATCHING
+int daWtPillar_Execute(daWtPillar_c* i_this) {
+ return i_this->execute();
}
/* 80D2DEF4-80D2DF14 001914 0020+00 1/0 0/0 0/0 .text daWtPillar_Delete__FP12daWtPillar_c
*/
-static void daWtPillar_Delete(daWtPillar_c* param_0) {
- // NONMATCHING
+int daWtPillar_Delete(daWtPillar_c* i_this) {
+ return i_this->_delete();
}
/* 80D2DF14-80D2DF34 001934 0020+00 1/0 0/0 0/0 .text daWtPillar_Create__FP10fopAc_ac_c
*/
-static void daWtPillar_Create(fopAc_ac_c* param_0) {
- // NONMATCHING
-}
-
-/* 80D2DF34-80D2DF90 001954 005C+00 2/1 0/0 0/0 .text __dt__16daWtPillar_HIO_cFv */
-daWtPillar_HIO_c::~daWtPillar_HIO_c() {
- // NONMATCHING
-}
-
-/* 80D2DF90-80D2E034 0019B0 00A4+00 0/0 1/0 0/0 .text __sinit_d_a_obj_waterPillar_cpp */
-void __sinit_d_a_obj_waterPillar_cpp() {
- // NONMATCHING
-}
-
-#pragma push
-#pragma force_active on
-REGISTER_CTORS(0x80D2DF90, __sinit_d_a_obj_waterPillar_cpp);
-#pragma pop
-
-/* 80D2E034-80D2E03C 001A54 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */
-static void func_80D2E034() {
- // NONMATCHING
-}
-
-/* 80D2E03C-80D2E044 001A5C 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */
-static void func_80D2E03C() {
- // NONMATCHING
-}
-
-/* 80D2E044-80D2E04C 001A64 0008+00 1/0 0/0 0/0 .text @1392@eventStart__12daWtPillar_cFv
- */
-static void func_80D2E044() {
- // NONMATCHING
-}
-
-/* 80D2E04C-80D2E054 001A6C 0008+00 1/0 0/0 0/0 .text @1392@__dt__12daWtPillar_cFv */
-static void func_80D2E04C() {
- // NONMATCHING
+int daWtPillar_Create(fopAc_ac_c* i_this) {
+ return static_cast<daWtPillar_c*>(i_this)->create();
}
/* 80D2E054-80D2E21C 001A74 01C8+00 1/1 0/0 0/0 .text __ct__12daWtPillar_cFv */
-daWtPillar_c::daWtPillar_c() {
- // NONMATCHING
-}
-
-/* 80D2E21C-80D2E264 001C3C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */
-// cM3dGCyl::~cM3dGCyl() {
-extern "C" void __dt__8cM3dGCylFv() {
- // NONMATCHING
-}
-
-/* 80D2E264-80D2E2AC 001C84 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */
-// cM3dGAab::~cM3dGAab() {
-extern "C" void __dt__8cM3dGAabFv() {
- // NONMATCHING
-}
-
-/* 80D2E2AC-80D2E308 001CCC 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */
-// dCcD_GStts::~dCcD_GStts() {
-extern "C" void __dt__10dCcD_GSttsFv() {
- // NONMATCHING
-}
-
-/* 80D2E308-80D2E378 001D28 0070+00 1/0 0/0 0/0 .text __dt__12dBgS_AcchCirFv */
-// dBgS_AcchCir::~dBgS_AcchCir() {
-extern "C" void __dt__12dBgS_AcchCirFv() {
- // NONMATCHING
-}
-
-/* 80D2E378-80D2E3E8 001D98 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */
-// dBgS_ObjAcch::~dBgS_ObjAcch() {
-extern "C" void __dt__12dBgS_ObjAcchFv() {
- // NONMATCHING
-}
-
-/* 80D2E3E8-80D2E430 001E08 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */
-// J3DFrameCtrl::~J3DFrameCtrl() {
-extern "C" void __dt__12J3DFrameCtrlFv() {
- // NONMATCHING
-}
-
-/* 80D2E430-80D2E6B4 001E50 0284+00 2/1 0/0 0/0 .text __dt__12daWtPillar_cFv */
-daWtPillar_c::~daWtPillar_c() {
- // NONMATCHING
-}
-
-/* 80D2E6B4-80D2E6FC 0020D4 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */
-// cCcD_GStts::~cCcD_GStts() {
-extern "C" void __dt__10cCcD_GSttsFv() {
- // NONMATCHING
-}
-
-/* 80D2E6FC-80D2E744 00211C 0048+00 1/0 0/0 0/0 .text __dt__17dEvLib_callback_cFv */
-// dEvLib_callback_c::~dEvLib_callback_c() {
-extern "C" void __dt__17dEvLib_callback_cFv() {
- // NONMATCHING
-}
-
-/* 80D2E744-80D2E74C 002164 0008+00 2/0 0/0 0/0 .text eventRun__17dEvLib_callback_cFv */
-// bool dEvLib_callback_c::eventRun() {
-extern "C" bool eventRun__17dEvLib_callback_cFv() {
- return true;
+daWtPillar_c::daWtPillar_c() : dEvLib_callback_c(this) {
+ // Empty
+ // Having this in the header file results in inlining...
}
-/* 80D2E74C-80D2E754 00216C 0008+00 2/0 0/0 0/0 .text eventEnd__17dEvLib_callback_cFv */
-// bool dEvLib_callback_c::eventEnd() {
-extern "C" bool eventEnd__17dEvLib_callback_cFv() {
- return true;
-}
-
-/* 80D2E754-80D2E75C 002174 0008+00 1/0 0/0 0/0 .text eventStart__17dEvLib_callback_cFv
- */
-// bool dEvLib_callback_c::eventStart() {
-extern "C" bool eventStart__17dEvLib_callback_cFv() {
- return true;
-}
+/* 80D2EA14-80D2EA34 -00001 0020+00 1/0 0/0 0/0 .data l_daWtPillar_Method */
+actor_method_class l_daWtPillar_Method = {
+ (process_method_func)daWtPillar_Create,
+ (process_method_func)daWtPillar_Delete,
+ (process_method_func)daWtPillar_Execute,
+ 0,
+ (process_method_func)daWtPillar_Draw,
+};
-/* 80D2E844-80D2E844 0000D4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+/* 80D2EA34-80D2EA64 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_WaterPillar */
+extern actor_process_profile_definition g_profile_Obj_WaterPillar = {
+ fpcLy_CURRENT_e, // mLayerID
+ 3, // mListID
+ fpcPi_CURRENT_e, // mListPrio
+ PROC_Obj_WaterPillar, // mProcName
+ &g_fpcLf_Method.base, // sub_method
+ sizeof(daWtPillar_c), // mSize
+ 0, // mSizeOther
+ 0, // mParameters
+ &g_fopAc_Method.base, // sub_method
+ 520, // mPriority
+ &l_daWtPillar_Method, // sub_method
+ 0x00040000, // mStatus
+ fopAc_ACTOR_e, // mActorType
+ fopAc_CULLBOX_CUSTOM_e, // cullType
+};