mirror of https://github.com/zeldaret/tp.git
257 lines
7.5 KiB
C++
257 lines
7.5 KiB
C++
#ifndef D_A_OBJ_MOVEBOX_H
|
|
#define D_A_OBJ_MOVEBOX_H
|
|
|
|
#include "d/d_a_obj.h"
|
|
#include "d/d_bg_s_movebg_actor.h"
|
|
#include "d/d_bg_w.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
|
|
|
|
/**
|
|
* @ingroup actors-objects
|
|
* @class daObjMovebox
|
|
* @brief Multi-Purpose Moving Box
|
|
*
|
|
* @details Multi-purpose moving box actor.
|
|
* Used for: Goron Mines Push Block, Death Mountain Block,
|
|
* Large Wooden Crate, Sacred Grove Block,
|
|
* Arbiter's Grounds Block (2 of them), Kakariko Graveyard Gravestone
|
|
*
|
|
*/
|
|
namespace daObjMovebox {
|
|
|
|
enum Type_e { pp_field = 3 };
|
|
|
|
struct Attr_c {
|
|
struct sMinMax { // fabricated
|
|
s16 min;
|
|
s16 max;
|
|
};
|
|
/* 0x00 */ s16 mFirstPushStopTime;
|
|
/* 0x02 */ s16 mRepeatPushStopTime;
|
|
/* 0x04 */ s16 mPushMoveTime;
|
|
/* 0x06 */ s16 mFirstPullStopTime;
|
|
/* 0x08 */ s16 mRepeatPullStopTime;
|
|
/* 0x0A */ s16 mPullMoveTime;
|
|
/* 0x0C */ f32 mUnitDistance;
|
|
/* 0x10 */ f32 mShadowSize;
|
|
/* 0x14 */ f32 mGravity;
|
|
/* 0x18 */ f32 mViscosityResistance;
|
|
/* 0x1C */ f32 mInertiaResistance;
|
|
/* 0x20 */ f32 mFallYInitSpeed;
|
|
/* 0x24 */ f32 mLandSmokeScale;
|
|
/* 0x28 */ f32 mBuoyancy;
|
|
/* 0x2C */ f32 mPlayerGravity;
|
|
/* 0x30 */ f32 mMiscGravity;
|
|
/* 0x34 */ f32 mWaterOscillationAccel;
|
|
/* 0x38 */ s16 mWaterOscillationAngleSpeed;
|
|
/* 0x3C */ f32 mWaterViscoscityResistance;
|
|
/* 0x40 */ f32 mWaterInertiaResistance;
|
|
/* 0x44 */ f32 mPlayerTiltPower;
|
|
/* 0x48 */ f32 mMiscTiltPower;
|
|
/* 0x4C */ f32 mMaxTiltPower;
|
|
/* 0x50 */ f32 mTiltSpringFactor;
|
|
/* 0x54 */ f32 mTiltViscoscityResistance;
|
|
/* 0x58 */ int field_0x58;
|
|
/* 0x5C */ int field_0x5c;
|
|
/* 0x60 */ u32 field_0x60;
|
|
/* 0x64 */ f32 field_0x64;
|
|
/* 0x68 */ f32 field_0x68;
|
|
/* 0x6C */ f32 field_0x6c;
|
|
/* 0x70 */ f32 field_0x70;
|
|
/* 0x74 */ f32 field_0x74;
|
|
/* 0x78 */ f32 field_0x78;
|
|
/* 0x7C */ u32 field_0x7c;
|
|
/* 0x80 */ u32 field_0x80;
|
|
/* 0x84 */ u32 field_0x84;
|
|
/* 0x88 */ u32 field_0x88;
|
|
/* 0x8C */ int field_0x8c;
|
|
/* 0x90 */ sMinMax mCullX;
|
|
/* 0x94 */ sMinMax mCullY;
|
|
/* 0x98 */ sMinMax mCullZ;
|
|
/* 0x9C */ u8 field_0x9c;
|
|
/* 0x9D */ u8 field_0x9d;
|
|
/* 0x9E */ u8 field_0x9e;
|
|
};
|
|
|
|
struct Hio_c : JORReflexible {
|
|
Hio_c(daObjMovebox::Type_e);
|
|
void default_set();
|
|
void ct();
|
|
void dt();
|
|
void genMessage(JORMContext*);
|
|
|
|
static u8 M_flag_bgc[8];
|
|
static const char* const M_name[];
|
|
|
|
/* 0x4 */ Type_e mType;
|
|
/* 0x8 */ int mCount;
|
|
/* 0xC */ daObjMovebox::Attr_c mAttr;
|
|
};
|
|
|
|
struct BgcSrc_c {
|
|
/* 0x0 */ f32 field_0x0;
|
|
/* 0x4 */ f32 field_0x4;
|
|
/* 0x8 */ f32 field_0x8;
|
|
/* 0xC */ f32 field_0xc;
|
|
};
|
|
|
|
class Act_c;
|
|
|
|
struct Bgc_c {
|
|
enum State_e {
|
|
STATE_0_e = 0x0,
|
|
STATE_1_e = 0x1,
|
|
STATE_2_e = 0x2,
|
|
STATE_4_e = 0x4,
|
|
STATE_8_e = 0x8,
|
|
STATE_10_e = 0x10,
|
|
STATE_20_e = 0x20,
|
|
STATE_40_e = 0x40,
|
|
};
|
|
|
|
Bgc_c();
|
|
void gnd_pos(daObjMovebox::Act_c const*, daObjMovebox::BgcSrc_c const*, int, f32);
|
|
void wrt_pos(cXyz const&);
|
|
void wall_pos(daObjMovebox::Act_c const*, daObjMovebox::BgcSrc_c const*, int, s16, f32);
|
|
void proc_vertical(daObjMovebox::Act_c*);
|
|
bool chk_wall_pre(daObjMovebox::Act_c const*, daObjMovebox::BgcSrc_c const*, int, s16);
|
|
bool chk_wall_touch(daObjMovebox::Act_c const*, daObjMovebox::BgcSrc_c const*, s16);
|
|
bool chk_wall_touch2(daObjMovebox::Act_c const*, daObjMovebox::BgcSrc_c const*, int, s16);
|
|
|
|
static const daObjMovebox::BgcSrc_c M_lin5[];
|
|
static const daObjMovebox::BgcSrc_c M_lin20[];
|
|
|
|
static dBgS_ObjGndChk M_gnd_work[23];
|
|
static dBgS_WtrChk M_wrt_work;
|
|
static dBgS_ObjLinChk M_wall_work[23];
|
|
|
|
/* 0x000 */ f32 field_0x0[23];
|
|
/* 0x05C */ int field_0x5c;
|
|
/* 0x060 */ f32 field_0x60;
|
|
/* 0x064 */ cXyz field_0x64[23];
|
|
/* 0x178 */ int field_0x178;
|
|
/* 0x17C */ f32 field_0x17c;
|
|
/* 0x180 */ State_e mState;
|
|
#if DEBUG
|
|
/* 0x184 */ cXyz field_0x184[92];
|
|
/* 0x184 */ cXyz field_0x5D4[92];
|
|
/* 0xA24 */ int field_0xA24;
|
|
/* 0xA28 */ int field_0xA28;
|
|
#endif
|
|
};
|
|
|
|
struct Act_c : public dBgS_MoveBgActor {
|
|
enum Prm_e {
|
|
PRM_4_e = 0x4,
|
|
PRM_8_e = 0x8,
|
|
PRM_18_e = 0x18,
|
|
PRM_1C_e = 0x1C,
|
|
};
|
|
|
|
int prm_get_swSave1() const;
|
|
void prmZ_init();
|
|
void prmX_init();
|
|
const daObjMovebox::Attr_c& attr() const;
|
|
void set_mtx();
|
|
void init_mtx();
|
|
void path_init();
|
|
void path_save();
|
|
static void RideCallBack(dBgW*, fopAc_ac_c*, fopAc_ac_c*);
|
|
static fopAc_ac_c* PPCallBack(fopAc_ac_c*, fopAc_ac_c*, s16, dBgW_Base::PushPullLabel);
|
|
void afl_sway();
|
|
int check_to_walk();
|
|
void clr_moment_cnt();
|
|
bool chk_appear() const;
|
|
void eff_smoke_slip_start();
|
|
void mode_wait_init();
|
|
void mode_wait();
|
|
void mode_walk_init();
|
|
void mode_walk();
|
|
void mode_afl_init();
|
|
void mode_afl();
|
|
void sound_slip();
|
|
void sound_limit();
|
|
void sound_land();
|
|
void vib_land();
|
|
void eff_land_smoke();
|
|
|
|
virtual int CreateHeap();
|
|
virtual int Create();
|
|
virtual int Execute(Mtx**);
|
|
virtual int Draw();
|
|
virtual int Delete();
|
|
|
|
inline void mode_proc_call();
|
|
inline int Mthd_Create();
|
|
inline int Mthd_Delete();
|
|
|
|
int prm_get_swSave() const { return daObj::PrmAbstract(this, PRM_8_e, PRM_8_e); }
|
|
int prmZ_get_swSave2() const { return (u8)(mPrmZ >> 8); }
|
|
int prm_get_dmy() const { return 0; }
|
|
int prmZ_get_pathId() const { return mPrmZ & 0xFF; }
|
|
u8 prm_get_answer() const { return daObj::PrmAbstract(this, PRM_4_e, PRM_1C_e); }
|
|
int prm_get_type() const { return daObj::PrmAbstract(this, PRM_4_e, PRM_18_e); }
|
|
|
|
bool is_switch1() const { return fopAcM_isSwitch(this, prm_get_swSave1()); }
|
|
int is_switch2() const { return fopAcM_isSwitch(this, prmZ_get_swSave2()) != 0; }
|
|
|
|
void on_switch1() const { fopAcM_onSwitch(this, prm_get_swSave1()); }
|
|
void on_switch2() const { fopAcM_onSwitch(this, prmZ_get_swSave2()); }
|
|
void off_switch1() const { fopAcM_offSwitch(this, prm_get_swSave1()); }
|
|
void off_switch2() const { fopAcM_offSwitch(this, prmZ_get_swSave2()); }
|
|
|
|
int getType() { return prm_get_type(); }
|
|
|
|
static const s16 M_dir_base[4];
|
|
static const char* const M_arcname[8];
|
|
static const dCcD_SrcCyl M_cyl_src;
|
|
|
|
static const daObjMovebox::Attr_c M_attr[8];
|
|
|
|
/* 0x5A0 */ request_of_phase_process_class mPhase;
|
|
/* 0x5A8 */ J3DModel* mpModel;
|
|
/* 0x5AC */ int field_0x5ac;
|
|
/* 0x5B0 */ dCcD_Stts mCcStts;
|
|
/* 0x5EC */ dCcD_Cyl mCcCyl;
|
|
/* 0x728 */ Bgc_c mBgc;
|
|
/* 0x8AC */ int mType;
|
|
/* 0x8B0 */ u16 mPrmZ;
|
|
/* 0x8B2 */ u16 mPrmX;
|
|
/* 0x8B4 */ dPath* mpPath;
|
|
/* 0x8B8 */ s16 field_0x8b8;
|
|
/* 0x8BC */ f32 field_0x8bc;
|
|
/* 0x8C0 */ f32 field_0x8c0;
|
|
/* 0x8C4 */ f32 field_0x8c4;
|
|
/* 0x8C8 */ f32 field_0x8c8;
|
|
/* 0x8CC */ f32 field_0x8cc;
|
|
/* 0x8D0 */ f32 field_0x8d0;
|
|
/* 0x8D4 */ f32 field_0x8d4;
|
|
/* 0x8D8 */ f32 field_0x8d8;
|
|
/* 0x8DC */ int field_0x8dc;
|
|
/* 0x8E0 */ int field_0x8e0;
|
|
/* 0x8E4 */ f32 field_0x8e4;
|
|
/* 0x8E8 */ int field_0x8e8;
|
|
/* 0x8EC */ dBgW::PushPullLabel mPPLabel;
|
|
/* 0x8F0 */ s16 field_0x8f0[4];
|
|
/* 0x8F8 */ s16 field_0x8f8;
|
|
/* 0x8FA */ s16 field_0x8fa;
|
|
/* 0x8FC */ s16 field_0x8fc;
|
|
/* 0x8FE */ u8 field_0x8fe;
|
|
/* 0x8FF */ s8 mReverb;
|
|
/* 0x900 */ u8 field_0x900;
|
|
/* 0x901 */ u8 field_0x901;
|
|
/* 0x902 */ u8 field_0x902;
|
|
/* 0x904 */ int field_0x904;
|
|
/* 0x908 */ s8 field_0x908;
|
|
#if DEBUG
|
|
static daObjMovebox::Hio_c M_hio[];
|
|
#endif
|
|
};
|
|
}; // namespace daObjMovebox
|
|
|
|
STATIC_ASSERT(sizeof(daObjMovebox::Act_c) == 0x90C);
|
|
|
|
#endif /* D_A_OBJ_MOVEBOX_H */
|