daPy_lk_c::procShipCrane

This commit is contained in:
LagoLunatic
2025-06-15 15:43:35 -04:00
parent 0146d0b91f
commit 25b9aeae03
5 changed files with 181 additions and 40 deletions
+6 -5
View File
@@ -8,6 +8,11 @@ class dSalvage_control_c;
class daSalvage_c : public fopAc_ac_c {
public:
static int getSalvageId() { return mSalvageId; }
void setSalvageId(int) {}
static BOOL isValidSalvageId() { return mSalvageId != -1 ? TRUE : FALSE; }
void getSalvageKind() {}
void checkRegist(int) {}
void checkUsed(int) {}
void clrFlag(int, u8) {}
@@ -24,20 +29,16 @@ public:
void getR(int) {}
void getRoomNo(int) {}
void getSRoomNo() {}
void getSalvageId() {}
void getSalvageKind() {}
void getSaveNo(int) {}
void getScale(int) {}
void getSwitchNo(int) {}
void getType(int) {}
void init_one(int) {}
void isValidSalvageId() {}
void setDrawMode(int, int) {}
void setFlag(int, u8) {}
void setNowAlpha(int, u8) {}
void setPos(int, cXyz) {}
void setSRoomNo(s8) {}
void setSalvageId(int) {}
void CreateHeap();
void CreateInit();
@@ -76,7 +77,7 @@ public:
static const u16 m_savelabel[];
static dSalvage_control_c* mTagData_p;
static s8 mNowRoomNo;
static s32 mSalvageId;
static int mSalvageId;
public:
/* Place member variables here */
+22 -6
View File
@@ -35,7 +35,7 @@ public:
daSFLG_UNK8000_e = 0x00008000,
daSFLG_UNK10000_e = 0x00010000,
daSFLG_SHOOT_CANNON_e = 0x00020000,
daSFLG_UNK40000_e = 0x00040000,
daSFLG_CRANE_UP_END_e = 0x00040000,
daSFLG_UNK80000_e = 0x00080000,
daSFLG_UNK100000_e = 0x00100000,
daSFLG_HEAD_NO_DRAW_e = 0x00200000,
@@ -75,6 +75,21 @@ public:
PART_CRANE_e = 3,
};
enum DemoMode_e {
DEMO_INIT_e = 0,
DEMO_MOVE_e = 1,
DEMO_SALVAGE_e = 2,
DEMO_UNK03_e = 3,
DEMO_RACE_FAIL_e = 4,
DEMO_KEEP_e = 5,
DEMO_NECK_e = 6,
DEMO_THROW_e = 7,
DEMO_OPEN_e = 8,
DEMO_TORNADO_S_e = 9,
DEMO_HWARP_UP_e = 10,
DEMO_HWARP_DOWN_e = 11,
};
typedef BOOL (daShip_c::*ProcFunc)();
u32 checkStateFlg(daSHIP_SFLG flag) const { return mStateFlag & flag; }
@@ -85,6 +100,7 @@ public:
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 checkCraneUpEnd() const { return checkStateFlg(daSFLG_CRANE_UP_END_e); }
BOOL checkHeadNoDraw() const { return checkStateFlg(daSFLG_HEAD_NO_DRAW_e); }
void setSteerMove() { mNextMode = MODE_STEER_MOVE_e; }
@@ -99,6 +115,8 @@ public:
void setTactWarp() { mNextMode = MODE_TACT_WARP_e; }
void setStartModeThrow() { mNextMode = MODE_START_MODE_THROW_e; }
BOOL checkSalvageDemo() const { return m0351 == DEMO_SALVAGE_e; }
int getTactWarpPosNum() const { return mTactWarpPosNum; }
void setTactWarpPosNum(int num) { mTactWarpPosNum = num; }
u32 getTactWarpID() { return mTactWarpID; }
@@ -107,7 +125,6 @@ public:
Mtx& getBodyMtx() { return mpBodyAnm->getModel()->getBaseTRMtx(); }
void checkCraneMode() const {}
void checkCraneUpEnd() const {}
#if VERSION == VERSION_DEMO
BOOL checkForceMove() { return getTornadoActor() || getWhirlActor(); }
daTornado_c* getTornadoActor() { return mTornadoActor; }
@@ -117,9 +134,6 @@ public:
daTornado_c* getTornadoActor() const { return mTornadoActor; }
fopAc_ac_c* getWhirlActor() const { return mWhirlActor; }
#endif
void checkRopeCntMax() const {}
void checkRopeDownStart() const {}
void checkSalvageDemo() const {}
void checkTornadoFlg() const {}
void checkTornadoUp() const {}
f32 getBeltSpeed() const { return m1044.absXZ(); }
@@ -136,6 +150,8 @@ public:
f32 getJumpRate() { return mJumpRate; }
u8 getPart() const { return mPart; }
s16 getRopeCnt() const { return mRopeCnt; }
BOOL checkRopeDownStart() const { return mRopeCnt > 20; }
BOOL checkRopeCntMax() const { return mRopeCnt == 250; }
s16 getSailAngle() { return mSailAngle; }
void getTactJntMtx() {}
f32 getTillerAngleRate() { return mTillerAngleRate; }
@@ -304,7 +320,7 @@ public:
/* 0x0392 */ u16 m0392; // file idx
/* 0x0394 */ s16 m0394;
/* 0x0396 */ s16 m0396;
/* 0x0398 */ s16 m0398;
/* 0x0398 */ s16 m0398; // CraneAngle
/* 0x039A */ s16 mCraneBaseAngle;
/* 0x039C */ s16 m039C;
/* 0x039E */ s16 mRopeCnt;
+130 -6
View File
@@ -15,10 +15,12 @@
#include "d/actor/d_a_player_HIO.h"
#include "d/actor/d_a_player_main.h"
#include "d/actor/d_a_player_main_data.h"
#include "d/actor/d_a_salvage.h"
#include "d/actor/d_a_ship.h"
#include "d/d_com_inf_game.h"
#include "d/d_kankyo_wether.h"
#include "d/d_procname.h"
#include "d/d_salvage.h"
#include "f_op/f_op_camera_mng.h"
/* 8013F848-8013F8AC .text shipSpecialDemoStart__9daPy_lk_cFv */
@@ -1020,12 +1022,134 @@ BOOL daPy_lk_c::procShipCrane_init() {
/* 80142458-80142920 .text procShipCrane__9daPy_lk_cFv */
BOOL daPy_lk_c::procShipCrane() {
/* Nonmatching */
// The following daShip_c inlines are used in this function:
// checkRopeDownStart
// checkRopeCntMax
// checkCraneUpEnd
// checkSalvageDemo
daShip_c* ship = dComIfGp_getShipActor();
if (ship == NULL) {
return checkNextMode(0);
}
dComIfGp_setRStatus(dActStts_CRUISE_e);
#if VERSION == VERSION_DEMO
if (dComIfGp_getDoStatus() == dActStts_BLANK_e && ship->speedF >= 3.0f) {
dComIfGp_setDoStatus(dActStts_STOP_e);
}
#endif
if (!checkNoUpperAnime()) {
if (changeShipEndProc()) {
return TRUE;
}
if (ship->getRopeCnt() != 0) {
resetActAnimeUpper(UPPER_MOVE2_e, -1.0f);
initShipCraneAnime();
}
#if VERSION > VERSION_DEMO
if (dComIfGp_getDoStatus() == dActStts_BLANK_e && ship->speedF >= 3.0f) {
dComIfGp_setDoStatus(dActStts_STOP_e);
}
#endif
} else if (ship->checkSalvageDemo()) {
if (m34D4 == 0 && ship->checkCraneUpEnd()) {
m34D4 = 1;
daPy_ANM anm;
if (ship->getCraneBaseAngle() > 0) {
// TODO: is this salvage type stuff an inline?
int type;
if (daSalvage_c::isValidSalvageId()) {
type = daSalvage_c::mTagData_p->getType(daSalvage_c::getSalvageId());
} else {
type = -1;
}
if (type == 1) {
anm = ANM_SALVRGOOD;
} else {
anm = ANM_SALVRBAD;
}
} else {
int type;
if (daSalvage_c::isValidSalvageId()) {
type = daSalvage_c::mTagData_p->getType(daSalvage_c::getSalvageId());
} else {
type = -1;
}
if (type == 1) {
anm = ANM_SALVLGOOD;
} else {
anm = ANM_SALVLBAD;
}
}
offModeFlg(ModeFlg_00000100);
onModeFlg(ModeFlg_00000400);
setSingleMoveAnime(anm, 1.0f, 0.0f, -1, 5.0f);
} else if (mProcVar0.m3570 == 0) {
if (ship->getCraneBaseAngle() > 0) {
setSingleMoveAnime(ANM_SALVRWAIT, 1.0f, 0.0f, -1, 5.0f);
mProcVar0.m3570 = 3;
} else {
setSingleMoveAnime(ANM_SALVLWAIT, 1.0f, 0.0f, -1, 5.0f);
mProcVar0.m3570 = 2;
}
}
} else {
if (changeShipEndProc()) {
return TRUE;
}
#if VERSION > VERSION_DEMO
if (dComIfGp_getDoStatus() == dActStts_BLANK_e && ship->speedF >= 3.0f) {
dComIfGp_setDoStatus(dActStts_STOP_e);
}
#endif
if (mProcVar0.m3570 == 3 && ship->getCraneBaseAngle() < 0) {
mProcVar0.m3570 = 0;
setSingleMoveAnime(ANM_SALVLR, 1.0f, 0.0f, -1, 5.0f);
offModeFlg(ModeFlg_00000100);
onModeFlg(ModeFlg_00000400);
m3574 = 2;
} else if (mProcVar0.m3570 == 2 && ship->getCraneBaseAngle() > 0) {
mProcVar0.m3570 = 0;
setSingleMoveAnime(ANM_SALVLR, -1.0f, 0.0f, -1, 5.0f);
offModeFlg(ModeFlg_00000100);
onModeFlg(ModeFlg_00000400);
m3574 = 3;
} else if (mProcVar0.m3570 == 0) {
if (std::fabsf(mFrameCtrlUnder[UNDER_MOVE0_e].getRate()) < 0.01f) {
if (m3574 == 3) {
setSingleMoveAnime(ANM_SALVRWAIT, 1.0f, 0.0f, -1, 5.0f);
mProcVar0.m3570 = 3;
onModeFlg(ModeFlg_00000100);
offModeFlg(ModeFlg_00000400);
} else {
setSingleMoveAnime(ANM_SALVLWAIT, 1.0f, 0.0f, -1, 5.0f);
mProcVar0.m3570 = 2;
onModeFlg(ModeFlg_00000100);
offModeFlg(ModeFlg_00000400);
}
} else if ((m3574 == 3 && ship->getCraneBaseAngle() < 0) || (m3574 == 2 && ship->getCraneBaseAngle() > 0)) {
mFrameCtrlUnder[UNDER_MOVE0_e].setRate(-1.0f * mFrameCtrlUnder[UNDER_MOVE0_e].getRate());
if (m3574 == 3) {
m3574 = 2;
} else {
m3574 = 3;
}
}
} else if (ship->checkRopeCntMax()) {
setTextureAnime(9, 0);
} else if (ship->checkRopeDownStart()) {
setTextureAnime(6, 0);
} else {
setTextureAnime(0, 0);
}
}
if (checkModeFlg(ModeFlg_00000100) || mProcVar0.m3570 == 0) {
onModeFlg(ModeFlg_00000080 | ModeFlg_08000000);
} else {
offModeFlg(ModeFlg_00000080 | ModeFlg_08000000);
}
setShipRidePos(1);
return TRUE;
}
/* 80142920-80142A5C .text procShipGetOff_init__9daPy_lk_cFv */
+22 -22
View File
@@ -872,7 +872,7 @@ void daShip_c::setYPos() {
m03F4 = getWaterY();
if (!checkStateFlg(daSFLG_UNK10_e)) {
onStateFlg(daSFLG_UNK10_e);
if (mCurMode != MODE_START_MODE_WARP_e && mCurMode != MODE_START_MODE_THROW_e && m0351 != 11) {
if (mCurMode != MODE_START_MODE_WARP_e && mCurMode != MODE_START_MODE_THROW_e && m0351 != DEMO_HWARP_DOWN_e) {
current.pos.y = m03F4;
}
}
@@ -1124,7 +1124,7 @@ void daShip_c::changeDemoEndProc() {
mpHeadAnm->setPlaySpeed(-1.0f);
offStateFlg(daSFLG_UNK80000_e);
}
if ((m0351 == 8) || checkStateFlg(daSFLG_UNK4000000_e)) {
if (m0351 == DEMO_OPEN_e || checkStateFlg(daSFLG_UNK4000000_e)) {
m0366 = 0;
offStateFlg(daSFLG_UNK4000000_e);
}
@@ -1952,7 +1952,7 @@ BOOL daShip_c::procCraneUp_init() {
mRipple.setRate(1.0f);
offStateFlg(daSFLG_UNK40000_e);
offStateFlg(daSFLG_CRANE_UP_END_e);
dComIfGp_getVibration().StartShock(7, -0x31, cXyz(0.0f, 1.0f, 0.0f));
dComIfGp_getVibration().StartQuake(4, 1, cXyz(0.0f, 1.0f, 0.0f));
@@ -1977,7 +1977,7 @@ BOOL daShip_c::procCraneUp() {
cLib_addCalcAngleS(&m039C, sVar1, 5, 0x1800, 0x100);
if (mRipple.getEmitter() == NULL) {
setControllAngle(0);
onStateFlg(daSFLG_UNK40000_e);
onStateFlg(daSFLG_CRANE_UP_END_e);
dComIfGp_getVibration().StopQuake(-1);
}
else {
@@ -2095,7 +2095,7 @@ BOOL daShip_c::procZevDemo() {
m0428 = dComIfGp_evmng_getMyXyzP(mEvtStaffId, "atn_pos");
}
if (m0351 && partP && (m0350 == 4 || m0350 != *partP)) {
if (m0351 != DEMO_INIT_e && partP && (m0350 == 4 || m0350 != *partP)) {
m0350 = *partP;
setPartAnimeInit(*partP);
}
@@ -2119,7 +2119,7 @@ BOOL daShip_c::procZevDemo() {
daPy_getPlayerLinkActorClass()->offNoResetFlg1(daPy_py_c::daPyFlg1_SHIP_TACT);
}
if (m0351 == 0 || m0351 == 8) {
if (m0351 == DEMO_INIT_e || m0351 == DEMO_OPEN_e) {
if (angleP) {
sVar15 = (s16)*angleP;
}
@@ -2138,8 +2138,8 @@ BOOL daShip_c::procZevDemo() {
speedF = *speedP;
}
if (partP || m0351 == 8) {
if (m0351 == 8) {
if (partP || m0351 == DEMO_OPEN_e) {
if (m0351 == DEMO_OPEN_e) {
m0350 = 0;
}
else {
@@ -2168,12 +2168,12 @@ BOOL daShip_c::procZevDemo() {
setControllAngle(0);
dComIfGp_evmng_cutEnd(mEvtStaffId);
}
else if (m0351 == 1 || m0351 == 3) {
else if (m0351 == DEMO_MOVE_e || m0351 == DEMO_UNK03_e) {
if (posP == NULL) {
posP = dComIfGp_evmng_getGoal();
}
if (m0351 == 1) {
if (m0351 == DEMO_MOVE_e) {
local_7c = *posP - current.pos;
}
else {
@@ -2257,7 +2257,7 @@ BOOL daShip_c::procZevDemo() {
setControllAngle(0);
}
}
else if (m0351 == 4) {
else if (m0351 == DEMO_RACE_FAIL_e) {
if (!checkStateFlg(daSFLG_UNK10000_e)) {
mpHeadAnm->setAnm((J3DAnmTransform *)dComIfG_getObjectRes(l_arcName, SHIP_BCK_FN_LOSE1), J3DFrameCtrl::EMode_NONE, 5.0f, 1.0f, 0.0f, -1.0f, NULL);
onStateFlg(daSFLG_UNK10000_e);
@@ -2271,14 +2271,14 @@ BOOL daShip_c::procZevDemo() {
dComIfGp_evmng_cutEnd(mEvtStaffId);
}
}
else if (m0351 == 5) {
else if (m0351 == DEMO_KEEP_e) {
if (speedP) {
firstDecrementShipSpeed(*speedP);
}
setControllAngle(0);
dComIfGp_evmng_cutEnd(mEvtStaffId);
}
else if (m0351 == 6) {
else if (m0351 == DEMO_NECK_e) {
partP = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "prm0");
u16 fileIndex;
@@ -2312,7 +2312,7 @@ BOOL daShip_c::procZevDemo() {
dComIfGp_evmng_cutEnd(mEvtStaffId);
}
}
else if (m0351 == 7) {
else if (m0351 == DEMO_THROW_e) {
speedF = 150.0f;
speedP = dComIfGp_evmng_getMyFloatP(mEvtStaffId, "gravity");
if (speedP) {
@@ -2329,7 +2329,7 @@ BOOL daShip_c::procZevDemo() {
shape_angle.y += 4500;
dComIfGp_evmng_cutEnd(mEvtStaffId);
}
else if (m0351 == 10) {
else if (m0351 == DEMO_HWARP_UP_e) {
cLib_addCalcAngleS(&m0370, 0, 10, 0x1000, 0x200);
cLib_addCalcAngleS(&m0372, 0, 10, 0x1000, 0x200);
cLib_addCalcAngleS(&m0384, 0, 10, 0x1000, 0x200);
@@ -2351,7 +2351,7 @@ BOOL daShip_c::procZevDemo() {
dComIfGp_evmng_cutEnd(mEvtStaffId);
}
else {
if (m0351 == 11) {
if (m0351 == DEMO_HWARP_DOWN_e) {
if (m03F4 > current.pos.y && gravity >= 0.0f) {
offStateFlg(daSFLG_FLY_e);
m03F4 = current.pos.y;
@@ -3520,7 +3520,7 @@ BOOL daShip_c::execute() {
f32 prev_fwdvel = mFwdVel;
f32 prev_speedF = speedF;
m0351 = 0xFF;
m0351 = -1;
m0404 = 0.0f;
m0428 = NULL;
@@ -3624,10 +3624,10 @@ BOOL daShip_c::execute() {
if (demoActor) {
procToolDemo_init();
}
else if(mEvtStaffId != -1 && m0351 != 2 && m0351 != 9) {
else if(mEvtStaffId != -1 && m0351 != DEMO_SALVAGE_e && m0351 != DEMO_TORNADO_S_e) {
procZevDemo_init();
}
else if (m0351 == 2) {
else if (m0351 == DEMO_SALVAGE_e) {
procCraneUp_init();
}
@@ -3643,7 +3643,7 @@ BOOL daShip_c::execute() {
}
BOOL r24;
if (m0351 == 8 || checkStateFlg(daSFLG_UNK4000000_e)) {
if (m0351 == DEMO_OPEN_e || checkStateFlg(daSFLG_UNK4000000_e)) {
r24 = TRUE;
}
else {
@@ -3654,7 +3654,7 @@ BOOL daShip_c::execute() {
(this->*mProc)();
}
if (m0351 == 8 || checkStateFlg(daSFLG_UNK4000000_e)) {
if (m0351 == DEMO_OPEN_e || checkStateFlg(daSFLG_UNK4000000_e)) {
m0366 = -0x2000;
sVar26 = m0366;
}
@@ -3869,7 +3869,7 @@ BOOL daShip_c::execute() {
}
else {
speed.x = (speedF * cM_ssin(current.angle.y)) * cM_scos(m0370);
if (m0351 != 7 && m0351 != 10 && m0351 != 11) {
if (m0351 != DEMO_THROW_e && m0351 != DEMO_HWARP_UP_e && m0351 != DEMO_HWARP_DOWN_e) {
speed.y = -speedF * cM_ssin(m0370);
}
speed.z = (speedF * cM_scos(current.angle.y)) * cM_scos(m0370);
+1 -1
View File
@@ -125,7 +125,7 @@ const u16 daSalvage_c::m_savelabel[] = {
};
dSalvage_control_c* daSalvage_c::mTagData_p;
s8 daSalvage_c::mNowRoomNo;
s32 daSalvage_c::mSalvageId;
int daSalvage_c::mSalvageId;
/* 80056760-80056790 .text init_room__11daSalvage_cFSc */
void daSalvage_c::init_room(s8 roomNo) {