mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-26 23:47:11 -04:00
224b83ed8c
Co-authored-by: < >
422 lines
14 KiB
C++
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 */
|