summaryrefslogtreecommitdiff
path: root/src/d/actor/d_a_ship.cpp
diff options
context:
space:
mode:
authorLagoLunatic <LagoLunatic@users.noreply.github.com>2025-06-04 16:50:49 -0400
committerGitHub <noreply@github.com>2025-06-04 16:50:49 -0400
commite24cbed36724b9ae422875a6da46b8c10d69ca19 (patch)
tree144d0841819533767ff69dc541bd655f7adeaab4 /src/d/actor/d_a_ship.cpp
parent08571c4865fed64bb39c422ae0b973f977af93b4 (diff)
Demo work (#786)
* Demo work * Fix PAL * Fix d_door weak func order and link it * Fix d_door for demo * JKernel OK on demo + misc * tag_attention 100% on demo * More demo work and fix some retail fakematches
Diffstat (limited to 'src/d/actor/d_a_ship.cpp')
-rw-r--r--src/d/actor/d_a_ship.cpp80
1 files changed, 50 insertions, 30 deletions
diff --git a/src/d/actor/d_a_ship.cpp b/src/d/actor/d_a_ship.cpp
index 13830969..d0a08511 100644
--- a/src/d/actor/d_a_ship.cpp
+++ b/src/d/actor/d_a_ship.cpp
@@ -341,9 +341,11 @@ void daShip_c::setInitMessage() {
else if (checkForceMessage()) {
return;
}
+#if VERSION > VERSION_DEMO
else if (dComIfGs_isEventBit(0x2110) && !dComIfGs_checkGetItem(dItem_BOMB_BAG_e)) {
mNextMessageNo = 0x623;
}
+#endif
else if (checkStateFlg(daSFLG_UNK800000_e)) {
mNextMessageNo = 0x636;
}
@@ -612,7 +614,9 @@ BOOL daShip_c::setNextMessage(msg_class* msg) {
}
else if (currMessageNo == 0x1682) {
dComIfGs_onEventBit(0x3d04);
+#if VERSION > VERSION_DEMO
mNextMessageNo = 0;
+#endif
}
else if (currMessageNo == 0x1688) {
dComIfGs_onEventBit(0x3f80);
@@ -826,7 +830,7 @@ void daShip_c::setWaveAngle(short* param1, short* param2) {
/* 00002314-000023E0 .text getWaterY__8daShip_cFv */
f32 daShip_c::getWaterY() {
- float waterY;
+ f32 waterY;
BOOL waterHit = mAcch.ChkWaterHit();
if (waterHit) {
m03F8 = mAcch.m_wtr.GetHeight();
@@ -844,6 +848,9 @@ f32 daShip_c::getWaterY() {
waterY = m03F8;
}
else {
+#if VERSION == VERSION_DEMO
+ waterY = m03F4;
+#else
daPy_lk_c* link = daPy_getPlayerLinkActorClass();
if (link && link->mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK44_e ) {
waterY = 0.0f;
@@ -851,6 +858,7 @@ f32 daShip_c::getWaterY() {
else {
waterY = m03F4;
}
+#endif
}
return waterY;
}
@@ -1087,32 +1095,23 @@ s16 daShip_c::getAimControllAngle(short referenceAngle) {
/* 00002D90-00002EE0 .text setMoveAngle__8daShip_cFs */
void daShip_c::setMoveAngle(short moveAngle) {
- float turnRate;
- float maxTurnRate;
- float minTurnRate;
- short initialAngle;
- bool cannotMove = FALSE;
- if (mTornadoActor || mWhirlActor != 0) {
- cannotMove = TRUE;
- }
- if (!cannotMove) {
- initialAngle = shape_angle.y;
- turnRate = 4.0f - std::abs(speedF) / 55.0f * 3.0f;
- maxTurnRate = 3.6f;
- minTurnRate = 0.1f;
- if (turnRate > maxTurnRate) {
- turnRate = maxTurnRate;
- }
- else if (turnRate < minTurnRate) {
- turnRate = minTurnRate;
+ if (!checkForceMove()) {
+ s16 initialAngle = shape_angle.y;
+ f32 turnRate = 4.0f - std::abs(speedF) / 55.0f * 3.0f;
+ if (turnRate > 3.6f) {
+ turnRate = 3.6f;
+ }
+ else if (turnRate < 0.1f) {
+ turnRate = 0.1f;
}
if (m0388 >= 0xF) {
- turnRate = maxTurnRate;
+ turnRate = 3.6f;
}
else {
turnRate += ((3.6f - turnRate) * m0388) / 15.0f;
}
- shape_angle.y += (s32)(-turnRate * (moveAngle >> 6));
+ s16 temp = -turnRate * (moveAngle >> 6);
+ shape_angle.y += temp;
setControllAngle(getAimControllAngle(initialAngle));
current.angle.y = shape_angle.y;
}
@@ -1958,7 +1957,10 @@ BOOL daShip_c::procCraneUp_init() {
dComIfGp_getVibration().StartShock(7, -0x31, cXyz(0.0f, 1.0f, 0.0f));
dComIfGp_getVibration().StartQuake(4, 1, cXyz(0.0f, 1.0f, 0.0f));
+#if VERSION > VERSION_DEMO
speedF = 0.0f;
+#endif
+
return TRUE;
}
@@ -2180,7 +2182,7 @@ BOOL daShip_c::procZevDemo() {
fVar17 = local_70.absXZ();
if (!dComIfGp_evmng_getMyFloatP(mEvtStaffId, "rad")) {
- JUT_ASSERT(0xE9D, 0);
+ JUT_ASSERT(VERSION_SELECT(3722, 3741, 3741, 3741), 0);
}
fVar3 = *dComIfGp_evmng_getMyFloatP(mEvtStaffId, "rad");
@@ -3449,7 +3451,10 @@ void daShip_c::setHeadAnm() {
mCurMode == 9) {
newFileIndex = SHIP_BCK_KYAKKAN1;
}
- else if ((!dComIfGs_isEventBit(0x3910) || dComIfGs_isEventBit(0x2D02)) &&
+ else if (
+#if VERSION > VERSION_DEMO
+ (!dComIfGs_isEventBit(0x3910) || dComIfGs_isEventBit(0x2D02)) &&
+#endif
(mSph.ChkTgHit() || mCyl[0].ChkTgHit() ||
mCyl[1].ChkTgHit() || mCyl[2].ChkTgHit())) {
m03B4 = SHIP_BCK_FN_LOOK_L;
@@ -3460,7 +3465,10 @@ void daShip_c::setHeadAnm() {
}
}
else {
- if ((!dComIfGs_isEventBit(0x3910) || dComIfGs_isEventBit(0x2D02)) &&
+ if (
+#if VERSION > VERSION_DEMO
+ (!dComIfGs_isEventBit(0x3910) || dComIfGs_isEventBit(0x2D02)) &&
+#endif
(mSph.ChkTgHit() || mCyl[0].ChkTgHit() ||
mCyl[1].ChkTgHit() || mCyl[2].ChkTgHit())) {
m03B4 = SHIP_BCK_FN_LOOK_L;
@@ -3474,7 +3482,9 @@ void daShip_c::setHeadAnm() {
else if ((m03B4 == SHIP_BCK_FN_LOOK_L || m03B4 == SHIP_BCK_FN_LOOK_R) &&
std::fabsf(mpHeadAnm->getPlaySpeed()) < 0.01f &&
cM_rnd() < 0.4f && (g_Counter.mTimer & 0x1FF) == 0x1FF &&
+#if VERSION > VERSION_DEMO
(!dComIfGs_isEventBit(0x3910) || dComIfGs_isEventBit(0x2D02)) &&
+#endif
!checkStateFlg(daSFLG_UNK40000000_e)) {
newFileIndex = SHIP_BCK_AKIBI1;
}
@@ -4373,7 +4383,7 @@ BOOL daShip_c::createHeap() {
m0392 = SHIP_BCK_FN_MAST_OFF2;
}
modelData = (J3DModelData *)dComIfG_getObjectRes(l_arcName, SHIP_BDL_FN_BODY);
- JUT_ASSERT(0x1B5C, modelData != 0);
+ JUT_ASSERT(VERSION_SELECT(6969, 7004, 7004, 7004), modelData != 0);
mpBodyAnm = new mDoExt_McaMorf(
modelData, NULL, NULL,
@@ -4398,7 +4408,7 @@ BOOL daShip_c::createHeap() {
}
modelData = (J3DModelData *)dComIfG_getObjectRes(l_arcName, SHIP_BDL_VFNCN);
- JUT_ASSERT(0x1B81, modelData != 0);
+ JUT_ASSERT(VERSION_SELECT(7006, 7041, 7041, 7041), modelData != 0);
mpCannonModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000002);
if (mpCannonModel == NULL) {
@@ -4406,7 +4416,7 @@ BOOL daShip_c::createHeap() {
}
modelData = (J3DModelData *)dComIfG_getObjectRes(l_arcName, SHIP_BDL_VFNCR);
- JUT_ASSERT(0x1B8E, modelData != 0);
+ JUT_ASSERT(VERSION_SELECT(7019, 7054, 7054, 7054), modelData != 0);
mpSalvageArmModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000002);
if (mpSalvageArmModel == NULL) {
@@ -4414,7 +4424,7 @@ BOOL daShip_c::createHeap() {
}
modelData = (J3DModelData *)dComIfG_getObjectRes("Link", LINK_BDL_ROPEEND);
- JUT_ASSERT(0x1B9B, modelData != 0);
+ JUT_ASSERT(VERSION_SELECT(7032, 7067, 7067, 7067), modelData != 0);
mpLinkModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000002);
if (mpLinkModel == NULL) {
@@ -4422,7 +4432,7 @@ BOOL daShip_c::createHeap() {
}
modelData = (J3DModelData *)dComIfG_getObjectRes(l_arcName, SHIP_BDL_FN_HEAD_H);
- JUT_ASSERT(0x1BA8, modelData != 0);
+ JUT_ASSERT(VERSION_SELECT(7045, 7080, 7080, 7080), modelData != 0);
m03B4 = SHIP_BCK_FN_LOOK_L;
@@ -4602,9 +4612,13 @@ cPhs_State daShip_c::create() {
mWhirlID = fpcM_ERROR_PROCESS_ID_e;
mWhirlActor = NULL;
+#if VERSION == VERSION_DEMO
+ mTactWarpID = fpcM_ERROR_PROCESS_ID_e;
+#else
if (mNextMode != MODE_START_MODE_WARP_e) {
mTactWarpID = fpcM_ERROR_PROCESS_ID_e;
}
+#endif
if (checkStateFlg(daSFLG_SAIL_ON_e) != 0) {
mPart = PART_STEER_e;
@@ -4625,7 +4639,13 @@ cPhs_State daShip_c::create() {
}
}
- if ((dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_SEA_e) || !strcmp(dComIfGp_getStartStageName(), "Hyrule") || !strcmp(dComIfGp_getStartStageName(), "Ocean")) {
+ if (
+ (dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_SEA_e)
+ || !strcmp(dComIfGp_getStartStageName(), "Hyrule")
+#if VERSION > VERSION_DEMO
+ || !strcmp(dComIfGp_getStartStageName(), "Ocean")
+#endif
+ ) {
m03CC = 4;
}
else {