diff --git a/configure.py b/configure.py index 5489fb48c24..f6962c9e59e 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 00427f85e18..db50a57acdb 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 2a52b4471dd..246cc726b36 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 ecf3b19e48a..af54ca5c797 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 u8 const mCcDObjInfo[48]; - static u8 const mCcDObjCoInfo[48]; - static u8 mCcDCps[76]; - static u8 mCcDCyl[68]; + 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; + } + + 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 264cf90850a..512a3c9b629 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 2a2110b132c..429d12ca1a7 100644 --- a/src/d/actor/d_a_obj_syRock.cpp +++ b/src/d/actor/d_a_obj_syRock.cpp @@ -4,332 +4,524 @@ */ #include "d/actor/d_a_obj_syRock.h" -#include "dol2asm.h" +#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" - - - -// -// 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 +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, +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() { + 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() { + 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); + + mpModels[mIsUnbroken]->setBaseScale(scale); + + // 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); +} + +/* 80D02454-80D02584 000294 0130+00 1/0 0/0 0/0 .text CreateHeap__10daSyRock_cFv */ +int daSyRock_c::CreateHeap() { + J3DModelData* modelData = static_cast(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(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(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 }; -/* 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 +/* 80D02584-80D02930 0003C4 03AC+00 1/1 0/0 0/0 .text create__10daSyRock_cFv */ +cPhs__Step daSyRock_c::create() { + fopAcM_SetupActor(this, daSyRock_c); -/* 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 + if(getArg0() == TRUE) { + mpWaterPillar = static_cast(fopAcIt_Judge(searchWaterPillar, this)); -/* 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 + if(!mpWaterPillar) + return cPhs_INIT_e; + } -/* 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 + const cPhs__Step requestedPhaseProcess = static_cast(dComIfG_resLoad(&mPhase, "syourock")); + if(requestedPhaseProcess == cPhs_COMPLEATE_e) { + const cPhs__Step bgCreatePhaseProcess = static_cast(MoveBGCreate("syourock", 0x8, dBgS_MoveBGProc_TypicalRotY, 0x2100, NULL)); + if(bgCreatePhaseProcess == cPhs_ERROR_e) + return cPhs_ERROR_e; -/* 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 + mAcchCir.SetWall(150.0f, 150.0f); + mAcch.Set(¤t.pos, &old.pos, this, 0x1, &mAcchCir, &speed, NULL, NULL); + mAcch.SetWaterCheckOffset(10000.0f); + mShakeOscillationAngleStep = 0; + mShakeXZAngleOffset.setall(0); -/* 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 + mShakeXOscillationAngle = mShakeZOscillationAngle = mShakeAmplitude = 0.0f; + mShakeMinDecay = mShakeMaxDecay = mShakeDamping = 0.0f; + mUnderwaterRotatedStalactiteOffset.setall(0.0f); -/* 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 + 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; +} + +/* 80D02AFC-80D02BE0 00093C 00E4+00 1/1 0/0 0/0 .text setFallStat__10daSyRock_cFv */ +void daSyRock_c::setFallStat() { + mpWaterPillar = static_cast(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; + } +} + +/* 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(); + + *i_mtx = &mpModels[mIsUnbroken]->getBaseTRMtx(); + + mInWaterPreviousFrame = mAcch.ChkWaterIn(); + setBaseMtx(); + + return 1; +} + +/* 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 + }; + + (this->*mode_proc[mMode])(); + + mShakeXZAngleOffset.x = mShakeAmplitude * cM_ssin(mShakeOscillationAngleStep * cM_deg2s(mShakeXOscillationAngle)); + mShakeXZAngleOffset.z = mShakeAmplitude * cM_scos(mShakeOscillationAngleStep * cM_deg2s(mShakeZOscillationAngle)); + + cLib_addCalc(&mShakeAmplitude, 0.0f, mShakeDamping, mShakeMaxDecay, mShakeMinDecay); + + mShakeOscillationAngleStep++; + + 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() { + mMode = MODE_WAIT; +} + +/* 80D02E7C-80D02F88 000CBC 010C+00 1/0 0/0 0/0 .text modeWait__10daSyRock_cFv */ +void daSyRock_c::modeWait() { + 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 */ +BOOL daSyRock_c::eventStart() { + // field_0x779 is always 0 when eventStart() is called (see modeWait()) + if(!field_0x779) + init_modeDropInit(); + + return TRUE; +} + +/* 80D02FB8-80D03070 000DF8 00B8+00 1/1 0/0 0/0 .text init_modeDropInit__10daSyRock_cFv + */ +void daSyRock_c::init_modeDropInit() { + fopAcM_seStartCurrent(this, Z2SE_OBJ_STALAC_BREAK, 0); + + mUnbrokenCylinderCollider.OffCoSetBit(); + mUnbrokenCylinderCollider.OffTgSetBit(); + + mWaitFrames = 0; + + mpWaterPillar = static_cast(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() { + if(mWaitFrames) + mWaitFrames--; + else + init_modeDrop(); +} + +/* 80D030A8-80D03250 000EE8 01A8+00 3/3 0/0 0/0 .text searchWaterPillar__10daSyRock_cFPvPv */ +void* daSyRock_c::searchWaterPillar(void* i_proc, void* i_this) { + daSyRock_c* const syRock = static_cast(i_this); + daWtPillar_c* const wtPillar = static_cast(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() { + 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() { + fopAcM_posMoveF(this, mStts.GetCCMoveP()); + mAcch.CrrPos(dComIfG_Bgsp()); + bgCheck(); +} + +/* 80D033D0-80D03440 001210 0070+00 1/1 0/0 0/0 .text init_modeSink__10daSyRock_cFv */ +void daSyRock_c::init_modeSink() { + 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() { + 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() { + fopAcM_seStartCurrent(this, Z2SE_OBJ_STALAC_LAND_WATER, 0); + + if(mpBgW) + dComIfG_Bgsp().Regist(mpBgW, this); + + mpWaterPillar->onRockFlag(); + + 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() { + 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 */ +BOOL daSyRock_c::chkWaterLineIn() { + return mAcch.m_wtr.GetHeight() > current.pos.y + 150.0f; +} + +/* 80D036DC-80D03984 00151C 02A8+00 2/2 0/0 0/0 .text bgCheck__10daSyRock_cFv */ +void daSyRock_c::bgCheck() { + // 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(¤tRockPos, 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, ¤t.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + } + } + + if(inWaterPillar) + init_modeMove(); + } + + if(hitGround) { + if(!hitWater && !mpWaterPillar) { + mDoAud_seStart(Z2SE_OBJ_STALAC_LAND, ¤t.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + daObjEff::Act_c::make_land_smoke(¤t.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() { + 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 */ +void daSyRock_c::modeDropEnd() { + /* empty function */ +} + +/* 80D03A4C-80D03B08 00188C 00BC+00 1/0 0/0 0/0 .text Draw__10daSyRock_cFv */ +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 */ +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 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 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 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 int daSyRock_Create(fopAc_ac_c* i_this) { + return static_cast(i_this)->create(); +} /* 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, + (process_method_func)daSyRock_Create, + (process_method_func)daSyRock_Delete, + (process_method_func)daSyRock_Execute, 0, - (process_method_func)daSyRock_Draw__FP10daSyRock_c, + (process_method_func)daSyRock_Draw, }; /* 80D04150-80D04180 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_SyRock */ @@ -349,484 +541,3 @@ extern actor_process_profile_definition g_profile_Obj_SyRock = { 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, -}; - -/* 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 -} - -/* 80D0237C-80D02454 0001BC 00D8+00 2/2 0/0 0/0 .text setBaseMtx__10daSyRock_cFv */ -void daSyRock_c::setBaseMtx() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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 - -/* 80D02454-80D02584 000294 0130+00 1/0 0/0 0/0 .text CreateHeap__10daSyRock_cFv */ -void daSyRock_c::CreateHeap() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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, -}; -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 -} - -/* 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 -} - -/* 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 -} - -/* 80D02A10-80D02A58 000850 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 80D02A58-80D02AA0 000898 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 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 -} - -/* 80D02AFC-80D02BE0 00093C 00E4+00 1/1 0/0 0/0 .text setFallStat__10daSyRock_cFv */ -void daSyRock_c::setFallStat() { - // NONMATCHING -} - -/* 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 -} - -/* ############################################################################################## */ -/* 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]; - -/* 80D0426C-80D042A0 000014 0034+00 8/8 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[52]; - -/* 80D042A0-80D042A4 000048 0004+00 1/1 0/0 0/0 .bss None */ -static u8 data_80D042A0[4]; - -/* 80D02C54-80D02E70 000A94 021C+00 1/1 0/0 0/0 .text move__10daSyRock_cFv */ -void daSyRock_c::move() { - // NONMATCHING -} - -/* 80D02E70-80D02E7C 000CB0 000C+00 1/1 0/0 0/0 .text init_modeWait__10daSyRock_cFv */ -void daSyRock_c::init_modeWait() { - // NONMATCHING -} - -/* 80D02E7C-80D02F88 000CBC 010C+00 1/0 0/0 0/0 .text modeWait__10daSyRock_cFv */ -void daSyRock_c::modeWait() { - // NONMATCHING -} - -/* 80D02F88-80D02FB8 000DC8 0030+00 2/1 0/0 0/0 .text eventStart__10daSyRock_cFv */ -void daSyRock_c::eventStart() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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); - -/* 80D02FB8-80D03070 000DF8 00B8+00 1/1 0/0 0/0 .text init_modeDropInit__10daSyRock_cFv - */ -void daSyRock_c::init_modeDropInit() { - // NONMATCHING -} - -/* 80D03070-80D030A8 000EB0 0038+00 1/0 0/0 0/0 .text modeDropInit__10daSyRock_cFv */ -void daSyRock_c::modeDropInit() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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 -} - -/* 80D03250-80D03384 001090 0134+00 1/1 0/0 0/0 .text init_modeDrop__10daSyRock_cFv */ -void daSyRock_c::init_modeDrop() { - // NONMATCHING -} - -/* 80D03384-80D033D0 0011C4 004C+00 1/0 0/0 0/0 .text modeDrop__10daSyRock_cFv */ -void daSyRock_c::modeDrop() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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 -} - -/* 80D03440-80D034E8 001280 00A8+00 1/0 0/0 0/0 .text modeSink__10daSyRock_cFv */ -void daSyRock_c::modeSink() { - // NONMATCHING -} - -/* 80D034E8-80D035F8 001328 0110+00 1/1 0/0 0/0 .text init_modeMove__10daSyRock_cFv */ -void daSyRock_c::init_modeMove() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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); - -/* 80D035F8-80D036B8 001438 00C0+00 1/0 0/0 0/0 .text modeMove__10daSyRock_cFv */ -void daSyRock_c::modeMove() { - // NONMATCHING -} - -/* 80D036B8-80D036DC 0014F8 0024+00 1/1 0/0 0/0 .text chkWaterLineIn__10daSyRock_cFv */ -void daSyRock_c::chkWaterLineIn() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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 -} - -/* 80D03984-80D03A48 0017C4 00C4+00 1/1 0/0 0/0 .text init_modeDropEnd__10daSyRock_cFv */ -void daSyRock_c::init_modeDropEnd() { - // NONMATCHING -} - -/* 80D03A48-80D03A4C 001888 0004+00 1/0 0/0 0/0 .text modeDropEnd__10daSyRock_cFv */ -void daSyRock_c::modeDropEnd() { - /* empty function */ -} - -/* 80D03A4C-80D03B08 00188C 00BC+00 1/0 0/0 0/0 .text Draw__10daSyRock_cFv */ -void daSyRock_c::Draw() { - // NONMATCHING -} - -/* 80D03B08-80D03B70 001948 0068+00 1/0 0/0 0/0 .text Delete__10daSyRock_cFv */ -void daSyRock_c::Delete() { - // NONMATCHING -} - -/* 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 -} - -/* 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 -} - -/* 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 -} - -/* 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 -} - -/* 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 -} - -/* 80D04030-80D04030 0000A0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_obj_waterPillar.cpp b/src/d/actor/d_a_obj_waterPillar.cpp index 62fe182adc2..da7598471ea 100644 --- a/src/d/actor/d_a_obj_waterPillar.cpp +++ b/src/d/actor/d_a_obj_waterPillar.cpp @@ -4,401 +4,594 @@ */ #include "d/actor/d_a_obj_waterPillar.h" -#include "dol2asm.h" +#include "d/d_com_inf_game.h" +#include "SSystem/SComponent/c_math.h" +typedef void (daWtPillar_c::*actionFunc)(); +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); -// -// Forward References: -// +/* 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; +} -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]; +/* 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); -// -// External References: -// + mpModel->setBaseScale(scale); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); +} -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(); +/* 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(i_this)->CreateHeap(); +} -// -// Declarations: -// +/* 80D2C858-80D2C960 000278 0108+00 1/1 0/0 0/0 .text CreateHeap__12daWtPillar_cFv */ +int daWtPillar_c::CreateHeap() { + J3DModelData* modelData = static_cast(dComIfG_getObjectRes("efWater", 8)); + JUT_ASSERT(369, modelData != 0); + mpModel = mDoExt_J3DModel__create(modelData, J3DMdlFlag_Unk80000, 0x11000284); -/* ############################################################################################## */ -/* 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); + if(!mpModel) + return 0; -/* 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 + J3DAnmTransform* anmTransform = static_cast(dComIfG_getObjectRes("efWater", 5)); + int res = mModelRotationAnimation.init(anmTransform, 1, 2, 1.0f, 0, -1, false); + JUT_ASSERT(385, res == 1) -/* 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 + J3DAnmTextureSRTKey* anmSRTKey = static_cast(dComIfG_getObjectRes("efWater", 11)); + res = mVerticalTextureScrollAnimation.init(modelData, anmSRTKey, 1, 2, 1.0f, 0, -1); + JUT_ASSERT(395, res == 1) -/* 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 + return 1; +} /* 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, -}; - -/* 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 +UNK_REL_DATA /* 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, +Vec l_cull_box[2] = { + {-30.0f, -10.0f, -30.0f}, + {30.0f, 60.0f, 30.0f} }; -#pragma pop + +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 +}; +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 +}; + +/* 80D2EB3C-80D2EB94 000014 0058+00 5/5 0/0 0/0 .bss l_HIO */ +daWtPillar_HIO_c l_HIO; /* 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, +dCcD_SrcCps daWtPillar_c::mCcDCps = { + daWtPillar_c::mCcDObjInfo, + { { {0.0f, 0.0f, 0.0f}, {0.0f,1100.0f, 0.0f}, 150.0f }} }; /* 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, -}; +dCcD_SrcCyl daWtPillar_c::mCcDCyl = {daWtPillar_c::mCcDObjCoInfo}; -/* 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 +/* 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(dComIfG_resLoad(&mPhase, "efWater")); -/* 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 + 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); -/* 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 + //! @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); -/* 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 + mAcchCir.SetWall(150.0f, 5.0f); + mAcch.Set(¤t.pos, &old.pos, this, 1, &mAcchCir, &speed, 0, 0); + mAcch.ClrWaterNone(); + mAcch.SetWaterCheckOffset(10000.0f); + mAcch.OnLineCheckNone(); -/* 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 + mStalactiteShouldStartShaking = mIsCarryingStalactite = false; -/* 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 + mSwitchNo = getParam(0, 8); + mType = getParam(8, 4); -/* 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 + mMaxHeight = getParam(27, 6) * 100.0f; -/* 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 + // "== Maximum height %f ==\n" + OS_REPORT("== 最大の高さ %f ==\n", mMaxHeight); -/* 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 + mAcch.CrrPos(dComIfG_Bgsp()); -/* 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 + /** + * @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; -/* 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 + // "== 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; +} + +/* 80D2CC0C-80D2CE4C 00062C 0240+00 1/1 0/0 0/0 .text execute__12daWtPillar_cFv */ +int daWtPillar_c::execute() { + mModelRotationAnimation.play(); + mVerticalTextureScrollAnimation.play(); + + eventUpdate(); + actionMain(); + + mAcch.CrrPos(dComIfG_Bgsp()); + effectSet(); + effectSet2(); + + mScaleX = scale.x; + mScaleZ = scale.z; + + cXyz currentHeightVector(0.0f, 1.0f, 0.0f); + currentHeightVector.y *= mCurrentHeight; + + + mDoMtx_stack_c::ZXYrotS(current.angle.x, current.angle.y, current.angle.z); + mDoMtx_stack_c::multVec(¤tHeightVector, ¤tHeightVector); + + cXyz currentPos = current.pos; + currentPos.y -= 150.0f; + + mCapsuleSource.mStart = currentPos; + + + mCapsuleSource.mEnd = currentHeightVector + currentPos; + mCapsuleSource.mRadius = scale.x * 140.0f; + + if(mCurrentHeight / 100.0f > scale.y * l_HIO.field_0x28) { + cM3dGCps& cps = mCapsuleCollider; + cps.Set(mCapsuleSource); + dComIfG_Ccsp()->Set(&mCapsuleCollider); + } + + mCylinderCollider.SetR(scale.x * 140.0f); + mCylinderCollider.SetH(mCurrentHeight); + mCylinderCollider.SetC(current.pos); + dComIfG_Ccsp()->Set(&mCylinderCollider); + + mEffectOscillationVerticalOffset.y = mEffectOscillationAmplitude * cM_ssin(mEffectOscillationAngleStep * cM_deg2s(mEffectOscillationAngle)); + + cLib_addCalc(&mEffectOscillationAmplitude, 0.0f, mEffectOscillationDampingScale, mEffectOscillationMaxDecay, mEffectOscillationMinDecay); + + mEffectOscillationAngleStep++; + + setBaseMtx(); + + return 1; +} + +/* 80D2CE4C-80D2CF98 00086C 014C+00 1/1 0/0 0/0 .text actionMain__12daWtPillar_cFv */ +void daWtPillar_c::actionMain() { + 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 */ -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, +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() { + // 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; + + 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], ¤t.pos, NULL, NULL); + + if(mPillarIsPreparingToRise) { + mBottomAndTopParticleEmmitters[5] = dComIfGp_particle_set(mBottomAndTopParticleEmmitters[5],l_eff[5], ¤t.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() { + + /* 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, ¤tPosWithVerticalOffset, NULL, NULL); + mWaterSurfaceParticleEmitters[1] = dComIfGp_particle_set(mWaterSurfaceParticleEmitters[1], 0x8890, ¤tPosWithVerticalOffset, NULL, NULL); + } +} + +/* 80D2D3FC-80D2D408 000E1C 000C+00 1/1 0/0 0/0 .text actionSwWaitInit__12daWtPillar_cFv + */ +void daWtPillar_c::actionSwWaitInit() { + mAction = ACTION_SW_WAIT; +} + +/* 80D2D408-80D2D488 000E28 0080+00 1/0 0/0 0/0 .text actionSwWait__12daWtPillar_cFv */ +void daWtPillar_c::actionSwWait() { + 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 */ +BOOL daWtPillar_c::eventStart() { + actionUpFirstInit(); + return TRUE; +} + +/* 80D2D4AC-80D2D588 000ECC 00DC+00 1/1 0/0 0/0 .text actionWaitInit__12daWtPillar_cFv */ +void daWtPillar_c::actionWaitInit() { + 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() { + if(mWaitFrameDelay) + mWaitFrameDelay--; + else + actionUpFirstInit(); +} + +/* 80D2D5C0-80D2D6C4 000FE0 0104+00 3/3 0/0 0/0 .text actionUpFirstInit__12daWtPillar_cFv + */ +void daWtPillar_c::actionUpFirstInit() { + mTargetMaxSpeed = (getParam(17, 5) * 100.0f * 5.0f) / 30.0f; + + if(mIsCarryingStalactite) + mFirstTargetHeight = 50.0f; + else + mFirstTargetHeight = 300.0f; + + 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() { + 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() { + 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() { + if(mWaitFrameDelay) + mWaitFrameDelay--; + else + actionUpInit(); +} + +/* 80D2D7B8-80D2D850 0011D8 0098+00 1/1 0/0 0/0 .text actionUpInit__12daWtPillar_cFv */ +void daWtPillar_c::actionUpInit() { + 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() { + 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() { + 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() { + 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() { + 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() { + 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() { + mAction = ACTION_ROCK_WAIT; +} + +/* 80D2DB74-80D2DC20 001594 00AC+00 1/0 0/0 0/0 .text actionRockWait__12daWtPillar_cFv */ +void daWtPillar_c::actionRockWait() { + 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() { + mAction = ACTION_ROCK_ON; +} + +/* 80D2DC2C-80D2DD0C 00164C 00E0+00 1/0 0/0 0/0 .text actionRockOn__12daWtPillar_cFv */ +void daWtPillar_c::actionRockOn() { + 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() { + mAction = ACTION_END; +} + +/* 80D2DD18-80D2DDB0 001738 0098+00 1/0 0/0 0/0 .text actionEnd__12daWtPillar_cFv */ +void daWtPillar_c::actionEnd() { + 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 + */ +f32 daWtPillar_c::getPillarHeight() { + return mCurrentHeight; +} + +/* 80D2DDB8-80D2DE84 0017D8 00CC+00 1/1 0/0 0/0 .text draw__12daWtPillar_cFv */ +int daWtPillar_c::draw() { + g_env_light.settingTevStruct(0x10, ¤t.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 */ +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 + */ +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 */ +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 + */ +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 + */ +int daWtPillar_Create(fopAc_ac_c* i_this) { + return static_cast(i_this)->create(); +} + +/* 80D2E054-80D2E21C 001A74 01C8+00 1/1 0/0 0/0 .text __ct__12daWtPillar_cFv */ +daWtPillar_c::daWtPillar_c() : dEvLib_callback_c(this) { + // Empty + // Having this in the header file results in inlining... +} + /* 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, +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__FP12daWtPillar_c, + (process_method_func)daWtPillar_Draw, }; /* 80D2EA34-80D2EA64 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_WaterPillar */ @@ -418,592 +611,3 @@ extern actor_process_profile_definition g_profile_Obj_WaterPillar = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 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, -}; - -/* 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, -}; - -/* 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, -}; - -/* 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, -}; - -/* 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, -}; - -/* 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, -}; - -/* 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, -}; - -/* 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, -}; - -/* 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, -}; - -/* 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, -}; - -/* 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, -}; - -/* 80D2C6CC-80D2C768 0000EC 009C+00 1/1 0/0 0/0 .text __ct__16daWtPillar_HIO_cFv */ -daWtPillar_HIO_c::daWtPillar_HIO_c() { - // NONMATCHING -} - -/* 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 -} - -/* 80D2C7B0-80D2C838 0001D0 0088+00 2/2 0/0 0/0 .text setBaseMtx__12daWtPillar_cFv */ -void daWtPillar_c::setBaseMtx() { - // NONMATCHING -} - -/* 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 -} - -/* ############################################################################################## */ -/* 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 -} - -/* ############################################################################################## */ -/* 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); - -/* 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); - -/* 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 -} - -/* ############################################################################################## */ -/* 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 - -/* 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 - -/* 80D2EB30-80D2EB3C 000008 000C+00 1/1 0/0 0/0 .bss @3635 */ -static u8 lit_3635[12]; - -/* 80D2EB3C-80D2EB94 000014 0058+00 5/5 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[88]; - -/* 80D2CC0C-80D2CE4C 00062C 0240+00 1/1 0/0 0/0 .text execute__12daWtPillar_cFv */ -void daWtPillar_c::execute() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80D2EB94-80D2EB98 00006C 0004+00 1/1 0/0 0/0 .bss None */ -static u8 data_80D2EB94[4]; - -/* 80D2CE4C-80D2CF98 00086C 014C+00 1/1 0/0 0/0 .text actionMain__12daWtPillar_cFv */ -void daWtPillar_c::actionMain() { - // NONMATCHING -} - -/* 80D2CF98-80D2D278 0009B8 02E0+00 1/1 0/0 0/0 .text effectSet__12daWtPillar_cFv */ -void daWtPillar_c::effectSet() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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 - -/* 80D2D278-80D2D3FC 000C98 0184+00 1/1 0/0 0/0 .text effectSet2__12daWtPillar_cFv */ -void daWtPillar_c::effectSet2() { - // NONMATCHING -} - -/* 80D2D3FC-80D2D408 000E1C 000C+00 1/1 0/0 0/0 .text actionSwWaitInit__12daWtPillar_cFv - */ -void daWtPillar_c::actionSwWaitInit() { - // NONMATCHING -} - -/* 80D2D408-80D2D488 000E28 0080+00 1/0 0/0 0/0 .text actionSwWait__12daWtPillar_cFv */ -void daWtPillar_c::actionSwWait() { - // NONMATCHING -} - -/* 80D2D488-80D2D4AC 000EA8 0024+00 2/1 0/0 0/0 .text eventStart__12daWtPillar_cFv */ -void daWtPillar_c::eventStart() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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 -} - -/* 80D2D588-80D2D5C0 000FA8 0038+00 1/0 0/0 0/0 .text actionWait__12daWtPillar_cFv */ -void daWtPillar_c::actionWait() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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 -} - -/* ############################################################################################## */ -/* 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 - -/* 80D2D6C4-80D2D73C 0010E4 0078+00 1/0 0/0 0/0 .text actionUpFirst__12daWtPillar_cFv */ -void daWtPillar_c::actionUpFirst() { - // NONMATCHING -} - -/* 80D2D73C-80D2D780 00115C 0044+00 1/1 0/0 0/0 .text actionUpFirstWaitInit__12daWtPillar_cFv */ -void daWtPillar_c::actionUpFirstWaitInit() { - // NONMATCHING -} - -/* 80D2D780-80D2D7B8 0011A0 0038+00 1/0 0/0 0/0 .text actionUpFirstWait__12daWtPillar_cFv - */ -void daWtPillar_c::actionUpFirstWait() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 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 -} - -/* 80D2D850-80D2D95C 001270 010C+00 1/0 0/0 0/0 .text actionUp__12daWtPillar_cFv */ -void daWtPillar_c::actionUp() { - // NONMATCHING -} - -/* 80D2D95C-80D2D9A0 00137C 0044+00 1/1 0/0 0/0 .text actionUpWaitInit__12daWtPillar_cFv - */ -void daWtPillar_c::actionUpWaitInit() { - // NONMATCHING -} - -/* 80D2D9A0-80D2DA58 0013C0 00B8+00 1/0 0/0 0/0 .text actionUpWait__12daWtPillar_cFv */ -void daWtPillar_c::actionUpWait() { - // NONMATCHING -} - -/* 80D2DA58-80D2DA78 001478 0020+00 1/1 0/0 0/0 .text actionDownInit__12daWtPillar_cFv */ -void daWtPillar_c::actionDownInit() { - // NONMATCHING -} - -/* 80D2DA78-80D2DB68 001498 00F0+00 1/0 0/0 0/0 .text actionDown__12daWtPillar_cFv */ -void daWtPillar_c::actionDown() { - // NONMATCHING -} - -/* 80D2DB68-80D2DB74 001588 000C+00 2/2 0/0 0/0 .text actionRockWaitInit__12daWtPillar_cFv */ -void daWtPillar_c::actionRockWaitInit() { - // NONMATCHING -} - -/* 80D2DB74-80D2DC20 001594 00AC+00 1/0 0/0 0/0 .text actionRockWait__12daWtPillar_cFv */ -void daWtPillar_c::actionRockWait() { - // NONMATCHING -} - -/* 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 - -/* 80D2DC2C-80D2DD0C 00164C 00E0+00 1/0 0/0 0/0 .text actionRockOn__12daWtPillar_cFv */ -void daWtPillar_c::actionRockOn() { - // NONMATCHING -} - -/* 80D2DD0C-80D2DD18 00172C 000C+00 1/1 0/0 0/0 .text actionEndInit__12daWtPillar_cFv */ -void daWtPillar_c::actionEndInit() { - // NONMATCHING -} - -/* 80D2DD18-80D2DDB0 001738 0098+00 1/0 0/0 0/0 .text actionEnd__12daWtPillar_cFv */ -void daWtPillar_c::actionEnd() { - // NONMATCHING -} - -/* 80D2DDB0-80D2DDB8 0017D0 0008+00 0/0 0/0 1/1 .text getPillarHeight__12daWtPillar_cFv - */ -void daWtPillar_c::getPillarHeight() { - // NONMATCHING -} - -/* 80D2DDB8-80D2DE84 0017D8 00CC+00 1/1 0/0 0/0 .text draw__12daWtPillar_cFv */ -void daWtPillar_c::draw() { - // NONMATCHING -} - -/* 80D2DE84-80D2DEB4 0018A4 0030+00 1/1 0/0 0/0 .text _delete__12daWtPillar_cFv */ -void daWtPillar_c::_delete() { - // NONMATCHING -} - -/* 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 -} - -/* 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 -} - -/* 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 -} - -/* 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 -} - -/* 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; -} - -/* 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; -} - -/* 80D2E844-80D2E844 0000D4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */