Files
tww/include/d/actor/d_a_ship.h
T
123456789758 224b83ed8c d_a_player_main - 96% matching (#750)
Co-authored-by: ‎ ‎ ‎ <‎ ‎ ‎>
2025-05-07 19:08:04 -04:00

422 lines
14 KiB
C++

#ifndef D_A_SHIP_H
#define D_A_SHIP_H
#include "f_op/f_op_actor.h"
#include "d/d_cc_d.h"
#include "d/d_bg_s_acch.h"
#include "d/d_particle.h"
#include "SSystem/SComponent/c_phase.h"
#include "f_op/f_op_msg.h"
class camera_class;
class daGrid_c;
class daTornado_c;
class daPy_FLG1;
class daBomb_c;
class daShip_c : public fopAc_ac_c {
public:
enum daSHIP_SFLG {
daSFLG_FLY_e = 0x00000001,
daSFLG_UNK2_e = 0x00000002,
daSFLG_UNK4_e = 0x00000004,
daSFLG_UNK8_e = 0x00000008,
daSFLG_UNK10_e = 0x00000010,
daSFLG_UNK20_e = 0x00000020,
daSFLG_JUMP_e = 0x00000040,
daSFLG_LAND_e = 0x00000080,
daSFLG_UNK100_e = 0x00000100,
daSFLG_SAIL_ON_e = 0x00000200,
daSFLG_UNK400_e = 0x00000400,
daSFLG_UNK800_e = 0x00000800,
daSFLG_UNK1000_e = 0x00001000,
daSFLG_JUMP_RIDE_e = 0x00002000,
daSFLG_JUMP_OK_e = 0x00004000,
daSFLG_UNK8000_e = 0x00008000,
daSFLG_UNK10000_e = 0x00010000,
daSFLG_SHOOT_CANNON_e = 0x00020000,
daSFLG_UNK40000_e = 0x00040000,
daSFLG_UNK80000_e = 0x00080000,
daSFLG_UNK100000_e = 0x00100000,
daSFLG_HEAD_NO_DRAW_e = 0x00200000,
daSFLG_UNK400000_e = 0x00400000,
daSFLG_UNK800000_e = 0x00800000,
daSFLG_UNK1000000_e = 0x01000000,
daSFLG_UNK2000000_e = 0x02000000,
daSFLG_UNK4000000_e = 0x04000000,
daSFLG_UNK8000000_e = 0x08000000,
daSFLG_UNK10000000_e = 0x10000000,
daSFLG_UNK20000000_e = 0x20000000,
daSFLG_UNK40000000_e = 0x40000000,
daSFLG_UNK80000000_e = 0x80000000
};
enum Mode_e {
MODE_WAIT_e = 0,
MODE_STEER_MOVE_e = 1,
MODE_PADDLE_MOVE_e = 2,
MODE_READY_FIRST_e = 3,
MODE_READY_SECOND_e = 4,
MODE_GET_OFF_FIRST_e = 5,
MODE_GET_OFF_SECOND_e = 6,
MODE_TALK_e = 8,
MODE_CANNON_e = 9,
MODE_CRANE_e = 10,
MODE_CRANE_UP_e = 11,
MODE_START_MODE_WARP_e = 13,
MODE_TACT_WARP_e = 14,
MODE_START_MODE_THROW_e = 16,
};
enum Part_e {
PART_WAIT_e = 0,
PART_STEER_e = 1,
PART_CANNON_e = 2,
PART_CRANE_e = 3,
};
typedef BOOL (daShip_c::*ProcFunc)();
bool checkStateFlg(daSHIP_SFLG flag) const { return mStateFlag & flag; }
bool getFlyFlg() { return checkStateFlg(daSFLG_FLY_e); }
bool getJumpFlg() const { return checkStateFlg(daSFLG_JUMP_e); }
bool getLandFlg() const { return checkStateFlg(daSFLG_LAND_e); }
bool getSailOn() { return checkStateFlg(daSFLG_SAIL_ON_e); }
void onJumpRideFlg() { onStateFlg(daSFLG_JUMP_RIDE_e); }
bool checkJumpOkFlg() const { return checkStateFlg(daSFLG_JUMP_OK_e); }
bool checkShootCannon() const { return checkStateFlg(daSFLG_SHOOT_CANNON_e); }
bool checkHeadNoDraw() const { return checkStateFlg(daSFLG_HEAD_NO_DRAW_e); }
void setSteerMove() { mNextMode = MODE_STEER_MOVE_e; }
void setPaddleMove() { mNextMode = MODE_PADDLE_MOVE_e; }
void setReadyFirst() { mNextMode = MODE_READY_FIRST_e; }
void setReadySecond() { mNextMode = MODE_READY_SECOND_e; }
void setGetOffFirst() { mNextMode = MODE_GET_OFF_FIRST_e; }
void setGetOffSecond() { mNextMode = MODE_GET_OFF_SECOND_e; }
void setCannon() { mNextMode = MODE_CANNON_e; }
void setCrane() { mNextMode = MODE_CRANE_e; }
void setStartModeWarp() { mNextMode = MODE_START_MODE_WARP_e; }
void setTactWarp() { mNextMode = MODE_TACT_WARP_e; }
void setStartModeThrow() { mNextMode = MODE_START_MODE_THROW_e; }
int getTactWarpPosNum() const { return mTactWarpPosNum; }
void setTactWarpPosNum(int num) { mTactWarpPosNum = num; }
u32 getTactWarpID() { return mTactWarpID; }
void setTactWarpID(u32 warpID) { mTactWarpID = warpID; }
Mtx& getBodyMtx() { return mpBodyAnm->getModel()->getBaseTRMtx(); }
void checkCraneMode() const {}
void checkCraneUpEnd() const {}
BOOL checkForceMove() const { return getTornadoActor() || getWhirlActor(); }
void checkRopeCntMax() const {}
void checkRopeDownStart() const {}
void checkSalvageDemo() const {}
void checkTornadoFlg() const {}
void checkTornadoUp() const {}
f32 getBeltSpeed() const { return m1044.absXZ(); }
s16 getCannonAngleX() const { return shape_angle.x + m0396 - 0x4000; }
s16 getCannonAngleY() const { return shape_angle.y + m0394; }
void getCraneAngle() const {}
s16 getCraneBaseAngle() const { return mCraneBaseAngle; }
void getCraneHookAngleY() const {}
void getCraneRipplePosX() const {}
void getCraneRipplePosY() const {}
void getCraneRipplePosZ() const {}
void getCraneTop() {}
void getHeadJntMtx() {}
f32 getJumpRate() { return mJumpRate; }
u8 getPart() const { return mPart; }
s16 getRopeCnt() const { return mRopeCnt; }
s16 getSailAngle() { return mSailAngle; }
void getTactJntMtx() {}
f32 getTillerAngleRate() { return mTillerAngleRate; }
cXyz* getTillerTopPosP() { return &mTillerTopPos; }
daTornado_c* getTornadoActor() const { return mTornadoActor; }
fopAc_ac_c* getWhirlActor() const { return mWhirlActor; }
void offCraneHookFlg() {}
void offFantomGanonBattle() {}
void offStateFlg(daSHIP_SFLG flag) { mStateFlag &= ~flag;}
void offTornadoFlg() {
mTornadoID = fpcM_ERROR_PROCESS_ID_e;
mTornadoActor = NULL;
}
void offWhirlFlg() {
mWhirlID = fpcM_ERROR_PROCESS_ID_e;
mWhirlActor = NULL;
}
void onCb1Ride() {}
void onCraneHookFlg() {}
void onCrashFlg() {}
void onFantomGanonBattle() {}
//TODO: Is this right?
void onLinkSit() { onStateFlg(daSFLG_UNK4000000_e); }
void onSceneChange() { onStateFlg(daSFLG_UNK20000000_e); }
void onShortHitFlg() {}
void onStateFlg(daSHIP_SFLG flag) { mStateFlag |= flag; }
void onTornadoFlg(u32 tornadoID) { mTornadoID = tornadoID; }
void onWhirlFlg(u32, s16) {}
void onWhirlFlgDirect(u32, s16) {}
void setAtnPos(const cXyz*) {}
BOOL bodyJointCallBack(int);
BOOL cannonJointCallBack(int);
BOOL craneJointCallBack();
BOOL headJointCallBack0();
BOOL headJointCallBack1(int);
BOOL draw();
BOOL checkForceMessage();
void setInitMessage();
BOOL setNextMessage(msg_class*);
void seStart(u32, cXyz*);
void setSailAngle();
void setControllAngle(s16);
void getMaxWaterY(cXyz*);
void setWaveAngle(s16*, s16*);
f32 getWaterY();
void setYPos();
BOOL checkOutRange();
void decrementShipSpeed(f32);
void firstDecrementShipSpeed(f32);
s16 getAimControllAngle(s16);
void setMoveAngle(s16);
void changeDemoEndProc();
void setCrashData(s16);
BOOL checkNextMode(int);
void setPartOnAnime(u8);
void setPartOffAnime();
void setPartAnimeInit(u8);
void setSelfMove(int);
BOOL procWait_init();
BOOL procWait();
BOOL procReady_init();
BOOL procReady();
BOOL procGetOff_init();
BOOL procGetOff();
BOOL procPaddleMove_init();
BOOL procPaddleMove();
BOOL procSteerMove_init();
BOOL procSteerMove();
BOOL procCannonReady_init();
BOOL procCannonReady();
BOOL procCannon_init();
BOOL procCannon();
BOOL procCraneReady_init();
BOOL procCraneReady();
BOOL procCrane_init();
BOOL procCrane();
BOOL procCraneUp_init();
BOOL procCraneUp();
BOOL procToolDemo_init();
BOOL procToolDemo();
BOOL procZevDemo_init();
BOOL procZevDemo();
BOOL procTalkReady_init();
BOOL procTalkReady();
BOOL procTalk_init();
BOOL procTalk();
BOOL procTurn_init();
BOOL procTurn();
BOOL procTornadoUp_init();
BOOL procTornadoUp();
BOOL procStartModeWarp_init();
BOOL procStartModeWarp();
BOOL procTactWarp_init();
BOOL procTactWarp();
BOOL procWhirlDown_init();
BOOL procWhirlDown();
BOOL procStartModeThrow_init();
BOOL procStartModeThrow();
void setEffectData(f32, s16);
void setRoomInfo();
void incRopeCnt(int, int);
void setRopePos();
f32 getAnglePartRate();
void setTornadoActor();
void setWhirlActor();
void setHeadAnm();
BOOL execute();
BOOL shipDelete();
BOOL createHeap();
cPhs_State create();
void initStartPos(cXyz const*, s16);
static cXyz l_rope_base_vec;
public:
/* 0x0290 */ request_of_phase_process_class mPhs;
/* 0x0298 */ mDoExt_McaMorf* mpBodyAnm;
/* 0x029C */ mDoExt_McaMorf* mpHeadAnm;
/* 0x02A0 */ J3DTexMtx* m02A0;
/* 0x02A4 */ J3DTexMtx* m02A4;
/* 0x02A8 */ Mtx m02A8;
/* 0x02D8 */ u8 m02D8[0x02E8 - 0x02D8];
/* 0x02E8 */ J3DAnmTransform* mAnmTransform;
/* 0x02EC */ J3DFrameCtrl mFrameCtrl;
/* 0x0300 */ J3DModel* mpCannonModel;
/* 0x0304 */ J3DModel* mpSalvageArmModel;
/* 0x0308 */ J3DModel* mpLinkModel;
/* 0x030C */ mDoExt_3DlineMat1_c mRopeLine;
/* 0x0348 */ u8 m0348[0x034A - 0x0348];
/* 0x034A */ s8 m034A;
/* 0x034B */ u8 m034B;
/* 0x034C */ u8 mCurMode;
/* 0x034D */ u8 mNextMode;
/* 0x034E */ u8 mPart;
/* 0x034F */ u8 m034F;
/* 0x0350 */ u8 m0350;
/* 0x0351 */ u8 m0351;
/* 0x0352 */ u8 m0352;
/* 0x0353 */ u8 m0353;
/* 0x0354 */ int mEvtStaffId;
/* 0x0358 */ u32 mStateFlag;
/* 0x035C */ u32 mNextMessageNo;
/* 0x0360 */ u32 mShadowId;
/* 0x0364 */ s16 mSailAngle;
/* 0x0366 */ s16 m0366;
/* 0x0368 */ u8 m0368[0x036C - 0x0368];
/* 0x036C */ s16 m036C;
/* 0x036E */ s16 m036E;
/* 0x0370 */ s16 m0370;
/* 0x0372 */ s16 m0372;
/* 0x0374 */ s16 m0374;
/* 0x0376 */ s16 m0376;
/* 0x0378 */ s16 m0378;
/* 0x037A */ s16 m037A;
/* 0x037C */ s16 m037C;
/* 0x037E */ s16 m037E;
/* 0x0380 */ s16 m0380;
/* 0x0382 */ s16 m0382;
/* 0x0384 */ s16 m0384;
/* 0x0386 */ s16 m0386;
/* 0x0388 */ s16 m0388;
/* 0x038A */ u16 m038A; // file idx
/* 0x038C */ s16 m038C;
/* 0x038E */ s16 m038E;
/* 0x0390 */ u16 m0390;
/* 0x0392 */ u16 m0392; // file idx
/* 0x0394 */ s16 m0394;
/* 0x0396 */ s16 m0396;
/* 0x0398 */ s16 m0398;
/* 0x039A */ s16 mCraneBaseAngle;
/* 0x039C */ s16 m039C;
/* 0x039E */ s16 mRopeCnt;
/* 0x03A0 */ s16 m03A0;
/* 0x03A2 */ s16 m03A2;
/* 0x03A4 */ s16 mStickMAng;
/* 0x03A6 */ s16 m03A6;
/* 0x03A8 */ s16 m03A8;
/* 0x03AA */ s16 m03AA;
/* 0x03AC */ s16 m03AC;
/* 0x03AE */ s16 m03AE;
/* 0x03B0 */ s16 m03B0;
/* 0x03B2 */ s16 m03B2;
/* 0x03B4 */ u16 m03B4; // file idx
/* 0x03B6 */ s16 m03B6;
/* 0x03B8 */ s16 m03B8;
/* 0x03BA */ s16 m03BA;
/* 0x03BC */ csXyz m03BC;
/* 0x03C2 */ s16 m03C2;
/* 0x03C4 */ int m03C4;
/* 0x03C8 */ int mTactWarpPosNum;
/* 0x03CC */ int m03CC;
/* 0x03D0 */ f32 m03D0;
/* 0x03D4 */ f32 m03D4;
/* 0x03D8 */ f32 m03D8;
/* 0x03DC */ f32 mTillerAngleRate;
/* 0x03E0 */ f32 m03E0;
/* 0x03E4 */ f32 mJumpRate;
/* 0x03E8 */ f32 m03E8;
/* 0x03EC */ f32 mStickMVal;
/* 0x03F0 */ u8 m03F0[0x03F4 - 0x03F0];
/* 0x03F4 */ f32 m03F4;
/* 0x03F8 */ f32 m03F8;
/* 0x03FC */ f32 mFwdVel;
/* 0x0400 */ f32 m0400;
/* 0x0404 */ f32 m0404;
/* 0x0408 */ f32 m0408;
/* 0x040C */ f32 m040C;
/* 0x0410 */ fpc_ProcID mGridID;
/* 0x0414 */ daGrid_c* mpGrid;
/* 0x0418 */ fpc_ProcID mTornadoID;
/* 0x041C */ daTornado_c* mTornadoActor;
/* 0x0420 */ fpc_ProcID mWhirlID;
/* 0x0424 */ fopAc_ac_c* mWhirlActor;
/* 0x0428 */ cXyz* m0428;
/* 0x042C */ fpc_ProcID mTactWarpID;
/* 0x0430 */ fpc_ProcID m0430;
/* 0x0434 */ cXyz* m0434;
/* 0x0438 */ cXyz mTillerTopPos;
/* 0x0444 */ cXyz m0444;
/* 0x0450 */ cXyz m0450;
/* 0x045C */ cXyz m045C;
/* 0x0468 */ cXyz mRopeLineSegments[250];
/* 0x1020 */ cXyz m1020;
/* 0x102C */ cXyz m102C;
/* 0x1038 */ cXyz m1038;
/* 0x1044 */ cXyz m1044;
/* 0x1050 */ cXyz m1050;
/* 0x105C */ cXyz mEffPos;
/* 0x1068 */ cXyz m1068;
/* 0x1074 */ cXyz m1074;
/* 0x1080 */ dBgS_AcchCir mAcchCir[4];
/* 0x1180 */ dBgS_ObjAcch mAcch;
/* 0x1344 */ dCcD_Stts mStts;
/* 0x1380 */ dCcD_Cyl mCyl[3];
/* 0x1710 */ dCcD_Sph mSph;
/* 0x183C */ dPa_waveEcallBack mWaveR;
/* 0x18A0 */ dPa_waveEcallBack mWaveL;
/* 0x1904 */ dPa_splashEcallBack mSplash;
/* 0x1920 */ dPa_trackEcallBack mTrack;
/* 0x1970 */ dPa_rippleEcallBack mRipple;
/* 0x1984 */ dPa_followEcallBack m1984;
/* 0x1998 */ dPa_followEcallBack m1998;
/* 0x19AC */ dPa_followEcallBack m19AC;
/* 0x19C0 */ dPa_rippleEcallBack m19C0;
/* 0x19D4 */ ProcFunc mProc;
};
class daShip_HIO_c0 {
public:
~daShip_HIO_c0() {}
/* 0x00 */ static const s16 tiller_speed;
/* 0x02 */ static const s16 cannon_no_gravity_timer;
/* 0x04 */ static const s16 throw_start_angle_speed;
/* 0x06 */ static const s16 throw_return_angle_speed;
/* 0x08 */ static const f32 paddle_speed;
/* 0x0C */ static const f32 min_speed;
/* 0x10 */ static const f32 wind_inc_speed;
/* 0x14 */ static const f32 r_inc_speed;
/* 0x18 */ static const f32 r_wind_inc_speed;
/* 0x1C */ static const f32 fly_rate;
/* 0x20 */ static const f32 wind_rate;
/* 0x24 */ static const f32 ef_dis_speed;
/* 0x28 */ static const f32 ef_speed_rate;
/* 0x2C */ static const f32 ef_front_x;
/* 0x30 */ static const f32 ef_front_y;
/* 0x34 */ static const f32 ef_front_z;
/* 0x38 */ static const f32 ef_back_x;
/* 0x3C */ static const f32 ef_back_y;
/* 0x40 */ static const f32 ef_back_z;
/* 0x44 */ static const f32 ef_sp_max_speed;
/* 0x48 */ static const f32 ef_pitch;
/* 0x4C */ static const f32 ef_ind_scroll;
/* 0x50 */ static const f32 ef_ind_scale;
/* 0x54 */ static const f32 cannon_speed;
/* 0x58 */ static const f32 cannon_gravity;
/* 0x5C */ static const f32 whirl_init_speed;
/* 0x60 */ static const f32 whirl_inc_speed;
/* 0x64 */ static const f32 whirl_distance;
/* 0x68 */ static const f32 tornado_init_speed;
/* 0x6C */ static const f32 tornado_inc_speed;
/* 0x70 */ static const f32 tornado_distance;
/* 0x74 */ static const f32 tornado_pull_speed;
/* 0x78 */ static const f32 throw_start_speedF;
/* 0x7C */ static const f32 throw_start_speed_y;
public:
};
#endif /* D_A_SHIP_H */