tp/include/d/actor/d_a_obj_carry.h

416 lines
13 KiB
C++

#ifndef D_A_OBJ_CARRY_H
#define D_A_OBJ_CARRY_H
#include "f_op/f_op_actor_mng.h"
#include "d/actor/d_a_player.h"
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
#include "d/d_jnt_col.h"
struct daObjCarry_dt_t {
/* 0x00 */ f32 m_throwInitSpeedY;
/* 0x04 */ f32 m_throwInitSpeedXZ;
/* 0x08 */ f32 m_wolfThrowInitSpeedY;
/* 0x0C */ f32 m_wolfThrowInitSpeedXZ;
/* 0x10 */ f32 field_0x10;
/* 0x14 */ f32 field_0x14;
/* 0x18 */ f32 m_gravity;
/* 0x1C */ f32 m_Buoyancy;
/* 0x20 */ f32 m_urnWindEffRatio;
/* 0x24 */ f32 field_0x24;
/* 0x28 */ f32 field_0x28;
/* 0x2C */ f32 field_0x2c;
/* 0x30 */ f32 scale;
/* 0x34 */ u8 m_carry_attn_dist;
/* 0x35 */ u8 m_flags;
/* 0x36 */ u8 m_colliderWeight;
/* 0x37 */ u8 m_cyl_atp;
/* 0x38 */ f32 m_cullsph_min_x;
/* 0x3C */ f32 m_cullsph_min_y;
/* 0x40 */ f32 m_cullsph_min_z;
/* 0x44 */ f32 field_0x44;
/* 0x48 */ f32 field_0x48;
/* 0x4C */ f32 m_height;
/* 0x50 */ f32 m_radius;
/* 0x54 */ f32 field_0x54;
/* 0x58 */ f32 field_0x58;
/* 0x5C */ u32 m_breakSound;
/* 0x60 */ u32 m_putSound;
/* 0x64 */ u32 m_putWaterSound;
/* 0x68 */ u32 m_fallSound;
/* 0x6C */ u32 m_fallWaterSound;
/* 0x70 */ u32 field_0x70;
/* 0x74 */ f32 field_0x74;
/* 0x78 */ s16 m_rollAngle;
/* 0x7A */ s16 m_urnRotateFactor;
/* 0x7C */ s16 field_0x7c;
/* 0x80 */ f32 m_slopeInfluence;
/* 0x84 */ f32 m_friction;
/* 0x88 */ f32 field_0x88;
/* 0x8C */ f32 field_0x8c;
/* 0x90 */ u32 m_heapSize;
};
/**
* @ingroup actors-objects
* @class daObjCarry_c
* @brief Carryable Object
*
* @details This is a multi-use class for carryable objects.
* It's used by: small and large blue pot, small and large red pot, box, cannon ball, barrel, skull,
* deku nut, Sols, small and large Twilight pots.
*
*/
class daObjCarry_c : public fopAc_ac_c {
public:
enum {
/* 0x0 */ TYPE_TSUBO, /**< Small Blue Pot */
/* 0x1 */ TYPE_OOTSUBO, /**< Big Red Pot */
/* 0x2 */ TYPE_KIBAKO, /**< Box */
/* 0x3 */ TYPE_IRON_BALL, /**< Cannon Ball */
/* 0x4 */ TYPE_TARU, /**< Barrel */
/* 0x5 */ TYPE_DOKURO, /**< Skull */
/* 0x6 */ TYPE_BOKKURI, /**< Deku Nut */
/* 0x7 */ TYPE_TSUBO_2, /**< Small Red Pot */
/* 0x8 */ TYPE_BALL_S, /**< Light Ball A */
/* 0x9 */ TYPE_BALL_S_2, /**< Light Ball B */
/* 0xA */ TYPE_AOTSUBO, /**< Big Blue Pot */
/* 0xB */ TYPE_LV8_BALL, /**< Light Ball? Probably unused */
/* 0xC */ TYPE_TSUBO_S, /**< Small pot - Twilight */
/* 0xD */ TYPE_TSUBO_B, /**< Big pot - Twilight */
};
enum {
MODE_WAIT,
MODE_WALK,
MODE_CARRY,
MODE_DROP,
MODE_FLOAT,
MODE_SINK,
MODE_YOGAN,
MODE_MAGNE,
MODE_MAGNE_CARRY,
MODE_BOOM_CARRY,
MODE_GROWTH,
MODE_DB_DROP,
MODE_HOOK_CARRY,
MODE_END,
MODE_FIT,
MODE_CONTROLED,
MODE_RESET_LIGHTBALL,
};
static void clrSaveFlag();
static void setSaveFlag();
static bool chkSaveFlag();
static const cXyz& getPos(int);
static void savePos(int, cXyz);
static void onSttsFlag(int, u8);
static void offSttsFlag(int, u8);
static u8 chkSttsFlag(int, u8);
static void setRoomNo(int, s8);
static s8 getRoomNo(int);
const daObjCarry_dt_t& data();
char* getArcName();
char* getBmdName();
BOOL checkFlag(u8);
void initBaseMtx();
void setBaseMtx();
int preInit();
daObjCarry_c();
BOOL checkBreakWolfAttack();
BOOL checkCarryBoomerang();
BOOL checkCarryHookshot();
BOOL checkCarryWolf();
BOOL checkCarryOneHand();
int Create();
int CreateInit_tsubo();
int CreateInit_ootubo();
int CreateInit_kibako();
int CreateInit_ironball();
int CreateInit_taru();
int CreateInit_dokuro();
int CreateInit_bokkuri();
int CreateInit_LightBall();
int CreateInit_Lv8Ball();
int CreateHeap();
int create();
int checkCreate_LightBallA();
int checkCreate_LightBallB();
int checkCreate_Lv8Ball();
void resetIconPosForLightBallA();
void setIconPosForLightBallAAtR00();
void setIconPosForLightBallBAtR00();
void resetIconPosForLightBallB();
int execute();
BOOL checkCulling();
int draw();
void debugDraw();
int _delete();
void crr_pos();
int check_sink(f32*);
f32 calc_gravity();
BOOL checkRollAngle();
void mode_proc_call();
void mode_init_wait();
int mode_proc_wait();
void mode_init_walk(u8);
int mode_proc_walk();
void mode_init_carry();
int mode_proc_carry();
void mode_init_drop(u8);
int mode_proc_drop();
void mode_init_float();
int mode_proc_float();
void mode_init_sink();
int mode_proc_sink();
void mode_init_yogan();
int mode_proc_yogan();
int mode_proc_magne();
int mode_proc_magneCarry();
void mode_init_boomCarry();
int mode_proc_boomCarry();
void mode_init_growth();
int mode_proc_growth();
int mode_proc_end();
void mode_init_dbDrop(u8);
int mode_proc_dbDrop();
void mode_init_hookCarry();
int mode_proc_hookCarry();
void mode_init_fit();
int mode_proc_fit();
int mode_proc_controled();
void mode_init_resetLightBall();
int mode_proc_resetLightBall();
BOOL chkSinkAll();
BOOL chkWaterLineIn();
BOOL chkSinkObj();
void bg_check();
bool check_bg_damage_proc_base();
bool bg_damage_proc_kotubo();
bool bg_damage_proc_ootubo();
bool bg_damage_proc_kibako();
bool bg_damage_proc_ironball();
bool bg_damage_proc_taru();
bool bg_damage_proc_dokuro();
bool bg_damage_proc_bokkuri();
bool bg_damage_proc_LightBall();
bool bg_damage_proc_Lv8Ball();
void obj_break(bool, bool, bool);
bool check_cc_damage_proc_base(bool);
bool cc_damage_proc_kotubo();
bool cc_damage_proc_ootubo();
bool cc_damage_proc_kibako();
bool cc_damage_proc_ironball();
bool cc_damage_proc_taru();
bool cc_damage_proc_dokuro();
bool cc_damage_proc_bokkuri();
bool cc_damage_proc_LightBall();
bool cc_damage_proc_Lv8Ball();
void eff_break_tuboBmd(u16, cXyz);
void eff_break_kibakoBmd(cXyz);
void eff_break_tsubo();
void eff_break_ootubo();
void eff_break_kibako();
void eff_break_ironball();
void eff_break_taru();
void eff_break_dokuro();
void eff_break_bokkuri();
void eff_break_kotubo2();
void eff_break_LightBall();
void eff_break_ootubo2();
void eff_break_Lv8Ball();
void eff_break_tsuboL8();
void eff_break_ootuboL8();
void se_break(cBgS_PolyInfo*);
void se_put(cBgS_PolyInfo*);
void se_put_water();
void se_fall_water();
void calc_rot_axis_base(u8);
void calc_rot_axis_tsubo();
void calc_rot_axis_ootubo();
void calc_rot_axis_kibako();
void calc_rot_axis_ironball();
void calc_rot_axis_taru();
void calc_rot_axis_dokuro();
void calc_rot_axis_bokkuri();
void calc_rot_axis_kotubo2();
void calc_rot_axis_LightBall();
void calc_rot_axis_Lv8Ball();
void set_wind_power();
void exec_proc_tsubo();
void exec_proc_ootubo();
void exec_proc_kibako();
void exec_proc_ironball();
void exec_proc_taru();
void exec_proc_dokuro();
void exec_proc_bokkuri();
void exec_proc_LightBall();
void exec_proc_Lv8Ball();
void bg_damage_proc_call();
void cc_damage_proc_call();
void eff_break_call();
void calc_rot_call();
void obj_execute_proc_call();
void setTgHitCallBack();
void setCoHitCallBack();
int CreateInitCall();
s32 getType() { return mType; }
u8 getSwbit() { return fopAcM_GetParamBit(this, 6, 8); }
u32 getSwbit2() { return fopAcM_GetParamBit(this, 14, 8); }
s8 getRoomNo() { return fopAcM_GetParamBit(this, 0, 6); }
u32 checkOnMoveBg() { return ~((field_0xd18 >> 0xc) & 1); }
u32 checkCrashRoll() { return field_0xd18 >> 6 & 1; }
u8 getItemNo() { return mItemNo; }
u8 getItemBit() { return mItemNo >> 8; }
u8 getItemType() { return field_0xd18 & 1; }
u8 getSaveID() { return getItemNo(); }
u8 getTrboxBit() { return (mItemNo >> 8) & 0x3F; }
u32 getSetType() { return (field_0xd18 >> 13) & 0x7; }
bool prm_chk_type_ironball() { return getType() == TYPE_IRON_BALL; }
bool prm_chk_type_lightball() { return getType() == TYPE_BALL_S || getType() == TYPE_BALL_S_2; }
void startCtrl() { mCtrl = 1; }
void endCtrl() { mCtrl = 0; }
void setDrop() { field_0xcf2 = 3; }
void offDraw() { mDraw = 1; }
void onDraw() { mDraw = 0; }
bool isDraw() { return mDraw == false; }
void onCarryHookOK() { mCarryHookOK = 1; }
void offCarryHookOK() { mCarryHookOK = 0; }
BOOL checkRecover() { return mRecover; }
void reset() { mReset = 1; }
void setPower(fopAc_ac_c* cannon_actor, f32 my_0xde0, f32 my_0xde4, s16 my_0xde8) {
mpCannonActor = cannon_actor;
field_0xde0 = my_0xde0;
field_0xde4 = my_0xde4;
field_0xde8 = my_0xde8;
field_0xdea = 1;
}
int checkCannon() {
return mCannon;
}
static void make_prm(u32* o_params, csXyz* o_paramsEx, u8 param_2, u8 i_itemNo, u8 i_itemBit, u8 i_itemType, u8 param_6) {
o_paramsEx->x = (i_itemBit << 8) | (i_itemNo & 0xFF);
o_paramsEx->z = (param_6 << 13) | (param_2 << 1) | i_itemType;
}
static void make_prm_bokkuri(u32* o_params, csXyz* o_paramsEx, u8 i_itemNo, u8 i_itemBit, u8 i_itemType, u8 param_5) {
make_prm(o_params, o_paramsEx, 6, i_itemNo, i_itemBit, i_itemType, param_5);
}
static const daObjCarry_dt_t mData[];
static cXyz mPos[5];
static u8 mSttsFlag[5];
static s8 mRoomNo[5];
static bool mSaveFlag;
public:
/* 0x568 */ request_of_phase_process_class mPhaseReq;
/* 0x570 */ J3DModel* mpModel;
/* 0x574 */ dBgS_ObjAcch mAcch;
/* 0x74C */ dBgS_AcchCir mAcchCir;
/* 0x78C */ dCcD_Stts mStts;
/* 0x7C8 */ dCcD_Cyl mCyl;
/* 0x904 */ dCcD_Sph mLightAtSph;
/* 0xA3C */ dCcD_Cps mAtCps;
/* 0xB80 */ dCcD_Cyl mTgCyl;
/* 0xCBC */ u8 field_0xCBC[0xCEC - 0xCBC];
/* 0xCEC */ f32 field_0xcec;
/* 0xCF0 */ u8 mType;
/* 0xCF1 */ u8 mMode;
/* 0xCF2 */ u8 field_0xcf2;
/* 0xCF3 */ u8 field_0xcf3;
/* 0xCF4 */ cXyz mRotAxis;
/* 0xD00 */ s16 mRotation;
/* 0xD02 */ u8 field_0xD02[0xD04 - 0xD02];
/* 0xD04 */ s16 field_0xd04;
/* 0xD08 */ cXyz field_0xd08;
/* 0xD14 */ u8 field_0xd14;
/* 0xD15 */ bool mInitParams;
/* 0xD16 */ u16 mItemNo;
/* 0xD18 */ u16 field_0xd18;
/* 0xD1A */ u8 field_0xD1A[0xD1C - 0xD1A];
/* 0xD1C */ cXyz field_0xd1c;
/* 0xD28 */ daPy_boomerangMove_c mBoomerangMove;
/* 0xD34 */ u8 field_0xD34[0xD3C - 0xD34];
/* 0xD3C */ Quaternion field_0xd3c;
/* 0xD4C */ Quaternion field_0xd4c;
/* 0xD5C */ f32 field_0xd5c;
/* 0xD60 */ f32 field_0xd60;
/* 0xD64 */ s16 field_0xd64;
/* 0xD66 */ s16 field_0xd66;
/* 0xD68 */ s16 field_0xd68;
/* 0xD6A */ s16 field_0xd6a;
/* 0xD6C */ f32 field_0xd6c;
/* 0xD70 */ f32 field_0xd70;
/* 0xD74 */ u8 field_0xd74;
/* 0xD75 */ u8 field_0xd75;
/* 0xD76 */ u8 field_0xd76;
/* 0xD77 */ u8 field_0xd77;
/* 0xD78 */ u8 field_0xD78[0xD79 - 0xD78];
/* 0xD79 */ u8 field_0xd79;
/* 0xD7A */ u8 field_0xd7a;
/* 0xD7B */ s8 field_0xd7b;
/* 0xD7C */ csXyz field_0xd7c;
/* 0xD82 */ u8 field_0xD82[0xD84 - 0xD82];
/* 0xD84 */ f32 field_0xd84;
/* 0xD88 */ Z2SoundObjSimple mSound;
/* 0xDA8 */ u8 field_0xda8;
/* 0xDA9 */ u8 field_0xda9;
/* 0xDAA */ u8 field_0xdaa;
/* 0xDAB */ u8 field_0xdab;
/* 0xDAC */ u8 field_0xdac;
/* 0xDAD */ u8 field_0xdad;
/* 0xDAE */ u8 field_0xdae;
/* 0xDAF */ u8 field_0xdaf;
/* 0xDB0 */ u8 field_0xdb0;
/* 0xDB1 */ u8 field_0xdb1;
/* 0xDB2 */ u8 mOnMoveBG;
/* 0xDB3 */ u8 field_0xdb3;
/* 0xDB4 */ u8 field_0xdb4;
/* 0xDB5 */ bool mCanCrashRoll;
/* 0xDB6 */ u8 mDeleteTimer;
/* 0xDB7 */ bool mDraw;
/* 0xDB8 */ u8 mCtrl;
/* 0xDB9 */ u8 field_0xdb9;
/* 0xDBA */ bool mReset;
/* 0xDBB */ u8 mCarryHookOK;
/* 0xDBC */ u8 mRecover;
/* 0xDBD */ u8 field_0xDBD[0xDC4 - 0xDBD];
/* 0xDC4 */ int field_0xdc4;
/* 0xDC8 */ f32 field_0xdc8;
/* 0xDCC */ f32 field_0xdcc;
/* 0xDD0 */ fopAc_ac_c* mpCannonActor;
/* 0xDD4 */ u32 field_0xdd4;
/* 0xDD8 */ u8 field_0xDD8[0xDDC - 0xDD8];
/* 0xDDC */ f32 field_0xddc;
/* 0xDE0 */ f32 field_0xde0;
/* 0xDE4 */ f32 field_0xde4;
/* 0xDE8 */ s16 field_0xde8;
/* 0xDEA */ u8 field_0xdea;
/* 0xDEB */ bool mCannon;
/* 0xDEC */ cXyz field_0xdec;
/* 0xDF8 */ DALKMIST_INFLUENCE mDalkmistInf;
/* 0xE0C */ u8 field_0xe0c;
/* 0xE0D */ u8 field_0xe0d;
/* 0xE0E */ u8 field_0xE0E[0xE10 - 0xE0E];
/* 0xE10 */ dJntCol_c mJntCol;
/* 0xE20 */ f32 field_0xe20;
/* 0xE24 */ s8 field_0xe24;
/* 0xE25 */ u8 field_0xe25;
/* 0xE26 */ u8 field_0xe26;
/* 0xE27 */ u8 field_0xe27;
private:
u16 getType_private() { return field_0xd18 >> 1 & 0x1f; }
};
STATIC_ASSERT(sizeof(daObjCarry_c) == 0xE28);
#endif /* D_A_OBJ_CARRY_H */