salvage_tbox demo match and fix inlines

This commit is contained in:
LagoLunatic
2026-08-03 17:54:03 -04:00
parent 8a602cb87f
commit 1d57f04689
10 changed files with 202 additions and 195 deletions
+2 -2
View File
@@ -1796,8 +1796,8 @@ config.libs = [
ActorRel(NonMatching, "d_a_pt"),
ActorRel(NonMatching, "d_a_pw"),
ActorRel(NonMatching, "d_a_pz"),
ActorRel(Matching, "d_a_sail"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_salvage_tbox"),
ActorRel(Matching, "d_a_sail"),
ActorRel(Matching, "d_a_salvage_tbox"),
ActorRel(Matching, "d_a_scene_change"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_shutter"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_shutter2"),
+1 -1
View File
@@ -285,6 +285,7 @@ public:
void quitImmortalEmitter() { clearStatus(JPAEmtrStts_Immortal); }
void becomeContinuousParticle() { mMaxFrame = 0; }
bool isContinuousParticle() { return mMaxFrame == 0; }
void becomeInvalidEmitter() {
mMaxFrame = -1;
stopCreateParticle();
@@ -324,7 +325,6 @@ public:
void drawCB() {}
void drawEmitterCallBack() {}
void getgReRDirection(JGeometry::TVec3<f32>&) {}
void isContinuousParticle() {}
void setEmitterRotation(const JGeometry::TVec3<s16>&) {}
static JPAEmitterInfo emtrInfo;
+41 -24
View File
@@ -3,37 +3,48 @@
#include "f_op/f_op_actor.h"
#include "d/d_particle.h"
#include "f_op/f_op_actor_mng.h"
class daSTBox_shadowEcallBack_c : public dPa_levelEcallBack {
public:
void deleteCallBack() {}
JPABaseEmitter* getEmitter() { return mpEmitter; }
void setEmitter(JPABaseEmitter* emitter) { mpEmitter = emitter; }
void setDepth(float depth) { mpDepth = depth; }
void setWaterFlatY(float waterFlatY) { mpWaterFlatY = waterFlatY; }
void setWaterY(float waterY) { mpWaterY = waterY; }
void setField0x48(float field) { field_0x48 = field; }
void setup(JPABaseEmitter* emitter, const cXyz*, const csXyz* angle, signed char) {
void setWaterY(f32 waterY) { mWaterY = waterY; }
void setWaterFlatY(f32 waterFlatY) { mWaterFlatY = waterFlatY; }
void setDepth(f32 depth) { mDepth = depth; }
void setup(JPABaseEmitter* emitter, const cXyz*, const csXyz* angle, s8) {
field_0x4 = 0;
mpAngle = const_cast<csXyz*>(angle);
mpAngle = angle;
mpEmitter = emitter;
}
void setIndirectTexData(f32 exTransY, f32 exScaleY) {
mExTransY = exTransY;
mExScaleY = exScaleY;
}
void setPos(cXyz& pos) { mPos = pos; }
void deleteCallBack() {
if (mpEmitter != NULL) {
mpEmitter->setEmitterCallBackPtr(NULL);
mpEmitter->becomeInvalidEmitter();
}
mpEmitter = NULL;
}
~daSTBox_shadowEcallBack_c() {}
void getMaxWaterY(JGeometry::TVec3<f32>*);
void execute(JPABaseEmitter*);
void draw(JPABaseEmitter*);
private:
/* 0x04 */ s16 field_0x4;
/* 0x06 */ s16 field_0x6;
/* 0x08 */ f32 mpWaterFlatY;
/* 0x0C */ f32 field_0x0C;
/* 0x10 */ f32 mpWaterY;
/* 0x14 */ JGeometry::TVec3<f32> mPos[3];
/* 0x38 */ cXyz position;
/* 0x44 */ csXyz* mpAngle;
/* 0x48 */ f32 field_0x48;
/* 0x4C */ f32 mpDepth;
/* 0x08 */ f32 mWaterY;
/* 0x0C */ f32 mWaterFlatY;
/* 0x10 */ f32 mDepth;
/* 0x14 */ JGeometry::TVec3<f32> field_0x14[3];
/* 0x38 */ cXyz mPos;
/* 0x44 */ const csXyz* mpAngle;
/* 0x48 */ f32 mExTransY;
/* 0x4C */ f32 mExScaleY;
/* 0x50 */ f32 field_0x50;
/* 0x54 */ JPABaseEmitter* mpEmitter;
}; // Size: 0x58
@@ -69,22 +80,28 @@ public:
static const f32 m_shadow_scale;
public:
/* 0x290 */ request_of_phase_process_class field_0x290;
/* 0x290 */ request_of_phase_process_class mPhase;
/* 0x298 */ J3DModel* mpModel;
/* 0x29C */ JPABaseEmitter* field_0x29C[2];
/* 0x2A4 */ JPABaseEmitter* field_0x2A4;
/* 0x29C */ JPABaseEmitter* field_0x29C[3];
/* 0x2A8 */ u8 field_0x2A8[0x2AC - 0x2A8];
/* 0x2AC */ dPa_rippleEcallBack mRippleCallBack;
/* 0x2C0 */ daSTBox_shadowEcallBack_c shadowCallback;
/* 0x318 */ cXyz position;
/* 0x2C0 */ daSTBox_shadowEcallBack_c mShadowCallback;
/* 0x318 */ cXyz mParticlePos;
/* 0x324 */ cXyz field_0x324;
/* 0x330 */ u8 field_0x330;
/* 0x331 */ u8 field_0x331;
/* 0x332 */ s16 field_0x332;
/* 0x334 */ u8 field_0x334;
/* 0x335 */ u8 field_0x335;
#if VERSION > VERSION_DEMO
/* 0x336 */ u8 field_0x336;
/* 0x337 */ u8 field_0x337[0x338 - 0x337];
/* 0x338 */ s32 field_0x338;
/* 0x338 */ fpc_ProcID mItemPID;
#endif
}; // Size: 0x33C
namespace daSTBox_prm {
inline u32 getBoxType(daSTBox_c* i_this) { return (fopAcM_GetParam(i_this) >> 8) & 0xF; }
inline u32 getItemNo(daSTBox_c* i_this) { return fopAcM_GetParam(i_this) & 0xFF; }
};
#endif /* D_A_SALVAGE_TBOX_H */
+7 -7
View File
@@ -151,11 +151,11 @@ public:
s16 getCannonAngleY() const { return shape_angle.y + m0394; }
s16 getCraneAngle() const { return m0398; }
s16 getCraneBaseAngle() const { return mCraneBaseAngle; }
void getCraneHookAngleY() const {}
void getCraneRipplePosX() const {}
void getCraneRipplePosY() const {}
void getCraneRipplePosZ() const {}
cXyz* getCraneTop() { return m0434; }
s16 getCraneHookAngleY() const { return shape_angle.y; }
cXyz* getCraneTop() { return mCraneTop; }
f32 getCraneRipplePosX() const { return mCraneRipplePos.x; }
f32 getCraneRipplePosY() const { return mCraneRipplePos.y; }
f32 getCraneRipplePosZ() const { return mCraneRipplePos.z; }
MtxP getHeadJntMtx() { return mpHeadAnm->getModel()->getAnmMtx(FN_HEAD_H_JNT_J_FN_ATAMA_e); }
f32 getJumpRate() { return mJumpRate; }
u8 getPart() const { return mPart; }
@@ -386,13 +386,13 @@ public:
/* 0x0428 */ cXyz* m0428;
/* 0x042C */ fpc_ProcID mTactWarpID;
/* 0x0430 */ fpc_ProcID m0430;
/* 0x0434 */ cXyz* m0434;
/* 0x0434 */ cXyz* mCraneTop;
/* 0x0438 */ cXyz mTillerTopPos;
/* 0x0444 */ cXyz m0444;
/* 0x0450 */ cXyz m0450;
/* 0x045C */ cXyz m045C;
/* 0x0468 */ cXyz mRopeLineSegments[250];
/* 0x1020 */ cXyz m1020;
/* 0x1020 */ cXyz mCraneRipplePos;
/* 0x102C */ cXyz m102C;
/* 0x1038 */ cXyz m1038;
/* 0x1044 */ cXyz m1044;
+2
View File
@@ -222,6 +222,8 @@ public:
dMc_HIO_c();
virtual ~dMc_HIO_c() {}
void genMessage(JORMContext* ctx) {}
public:
/* 0x00 */ // vtable
/* 0x04 */ u8 m04[0x44 - 0x04];
+4
View File
@@ -141,6 +141,10 @@ inline void mDoMtx_quat(Mtx m, const Quaternion* q) {
MTXQuat(m, q);
}
inline void cMtx_identity(Mtx mtx) {
mDoMtx_identity(mtx);
}
inline void cMtx_inverse(const Mtx a, Mtx b) {
mDoMtx_inverse(a, b);
}
+124 -140
View File
@@ -20,85 +20,80 @@ const f32 daSTBox_c::m_shadow_depth = 2000.0f;
const f32 daSTBox_c::m_shadow_scroll = -0.1f;
const f32 daSTBox_c::m_shadow_scale = 4.0f;
/* 00000078-00000128 .text getMaxWaterY__25daSTBox_shadowEcallBack_cFPQ29JGeometry8TVec3<f> */
void daSTBox_shadowEcallBack_c::getMaxWaterY(JGeometry::TVec3<float>* shipPos) {
void daSTBox_shadowEcallBack_c::getMaxWaterY(JGeometry::TVec3<f32>* shipPos) {
if (daSea_ChkArea(shipPos->x, shipPos->z)) {
f32 wave = daSea_calcWave(shipPos->x, shipPos->z);
shipPos->y = wave + 2.0f;
f32 waterY = field_0x0C;
f32 waterY = mWaterFlatY;
if (waterY > shipPos->y) {
shipPos->y = waterY + 2.0f;
}
}
else {
if (field_0x0C != -G_CM3D_F_INF ) {
shipPos->y = field_0x0C + 2.0f;
if (mWaterFlatY != -G_CM3D_F_INF ) {
shipPos->y = mWaterFlatY + 2.0f;
}
else {
shipPos->y = mpWaterFlatY;
shipPos->y = mWaterY;
}
}
}
/* 00000128-000002F4 .text execute__25daSTBox_shadowEcallBack_cFP14JPABaseEmitter */
void daSTBox_shadowEcallBack_c::execute(JPABaseEmitter* emitter) {
GXColor diff;
GXColor amb;
s16 yAngle;
u8 alpha;
f32 waterY;
s16 alpha_arr[2];
dKy_get_seacolor(&diff, &amb);
emitter->setGlobalPrmColor(diff.r, diff.g, diff.b);
GXColor diff;
dKy_get_seacolor(&amb, &diff);
emitter->setGlobalPrmColor(amb.r, amb.g, amb.b);
if (field_0x4 != 0) {
emitter->setMaxFrame(-1);
emitter->stopCreateParticle();
emitter->becomeInvalidEmitter();
mpEmitter = NULL;
}
if (emitter->mMaxFrame == 0 && field_0x4 == 0) {
f32 scaleY = position.y;
f32 scaleZ = position.z;
emitter->setGlobalTranslation(position.x, scaleY, scaleZ);
if (emitter->isContinuousParticle() && field_0x4 == 0) {
JGeometry::TVec3<f32> trans(mPos.x, mPos.y, mPos.z);
emitter->setGlobalTranslation(trans);
s16 yAngle;
if (field_0x50 >= 0.0f) {
yAngle = mpAngle->y;
} else {
yAngle = (s16)(mpAngle->y + 0x8000);
}
JGeometry::TVec3<s16> rotation((s16)0, yAngle, (s16)0);
JGeometry::TVec3<s16> rotation;
rotation.x = 0;
rotation.y = yAngle;
rotation.z = 0;
emitter->setGlobalRotation(rotation);
waterY = mpWaterY;
if (waterY < 0.0f || waterY > 2000.0f) {
f32 f3 = 2000.0f;
u8 alpha;
if (mDepth < 0.0f || mDepth > f3) {
alpha = 0;
} else {
alpha = (double)(((2000.0f - waterY) * 120.0f) / 2000.0f);
u32 r0 = 120;
alpha = ((f32)r0 * (f3 - mDepth)) / f3;
}
emitter->setGlobalAlpha(alpha);
} else {
JGeometry::TVec3<f32> trans;
emitter->getGlobalTranslation(trans);
trans.y = mpWaterFlatY;
trans.y = mWaterY;
emitter->setGlobalTranslation(trans);
alpha_arr[0] = emitter->getGlobalAlpha();
cLib_chaseS(alpha_arr, 0, 5);
alpha_arr[0] = 0xff;
emitter->setGlobalAlpha(alpha_arr[0]);
s16 alpha = emitter->getGlobalAlpha();
cLib_chaseS(&alpha, 0, 5);
alpha = 0xFF;
emitter->setGlobalAlpha(alpha);
}
JSUPtrLink* link = emitter->getParticleList()->getFirstLink();
JSULink<JPABaseParticle>* link = emitter->getParticleList()->getFirst();
while(link != 0) {
JSUPtrLink* next = link->getNext();
JSULink<JPABaseParticle>* nextLink = link->getNext();
JPABaseParticle* ptcl = (JPABaseParticle*)link->getObjectPtr();
JPABaseParticle* ptcl = link->getObject();
JGeometry::TVec3<f32> ptclPos;
ptcl->getOffsetPosition(ptclPos);
getMaxWaterY(&ptclPos);
ptcl->setOffsetPosition(ptclPos);
link = next;
link = nextLink;
}
}
@@ -106,22 +101,21 @@ void daSTBox_shadowEcallBack_c::execute(JPABaseEmitter* emitter) {
void daSTBox_shadowEcallBack_c::draw(JPABaseEmitter* emitter) {
f32 fVar2;
f32 fVar1;
f32 fVar3;
u32 particleCount = emitter->getParticleList()->getNumLinks();
if (particleCount >= 6){
if (dPa_control_c::isStatus(1)) {
GXSetZMode(GX_FALSE, GX_NEVER, GX_FALSE);
}
u32 steps = (u32)((f32)particleCount * 0.33333334f);
u32 stepsMinusOne = steps - 1;
fVar3 = (1.0f / (f32)stepsMinusOne);
f32 f30 = 0.5f;
f32 fVar3 = (1.0f / (f32)(steps - 1));
GXSetCullMode(GX_CULL_NONE);
Mtx mtx;
PSMTXIdentity(mtx);
mtx[1][1] = mpDepth;
mtx[1][3] = field_0x48 * emitter->getFrame();
cMtx_identity(mtx);
mtx[1][1] = mExScaleY;
mtx[1][3] = mExTransY * emitter->getFrame();
GXLoadTexMtxImm(mtx, GX_TEXMTX1, GX_MTX2x4);
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, GX_TEXMTX1, GX_FALSE, GX_PTIDENTITY);
GXSetTexCoordGen(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, GX_TEXMTX1);
JSULink<JPABaseParticle>* link = emitter->getParticleList()->getFirst();
u32 i = 0;
fVar1 = 0.0f;
@@ -130,22 +124,22 @@ void daSTBox_shadowEcallBack_c::draw(JPABaseEmitter* emitter) {
GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 6);
u32 j = 0;
fVar2 = 0.0f;
for(; j < 3; j++) {
for(; j < ARRAY_SIZE(field_0x14); j++) {
JGeometry::TVec3<f32> ptclPos;
link->getObject()->getGlobalPosition(ptclPos);
getMaxWaterY(&ptclPos);
GXPosition3f32(ptclPos.x, ptclPos.y, ptclPos.z);
GXTexCoord2f32(fVar2, fVar1);
GXPosition3f32(mPos[j].x, mPos[j].y, mPos[j].z);
GXPosition3f32(field_0x14[j].x, field_0x14[j].y, field_0x14[j].z);
GXTexCoord2f32(fVar2, fVar1 - fVar3);
mPos[j].set(ptclPos);
fVar2 += 0.5f;
field_0x14[j].set(ptclPos);
fVar2 += f30;
link = link->getNext();
}
GXEnd();
} else {
for (int j = 0; j < 3; j++) {
link->getObject()->getGlobalPosition(mPos[j]);
for (int j = 0; j < ARRAY_SIZE(field_0x14); j++) {
link->getObject()->getGlobalPosition(field_0x14[j]);
link = link->getNext();
}
}
@@ -154,7 +148,7 @@ void daSTBox_shadowEcallBack_c::draw(JPABaseEmitter* emitter) {
}
/* 00000570-000005D8 .text getWaterY__F4cXyz */
f32 getWaterY(cXyz shipPos) {
static f32 getWaterY(cXyz shipPos) {
f32 waterY;
shipPos.y += 500.0f;
if (daSea_ChkArea(shipPos.x, shipPos.z)) {
@@ -168,7 +162,7 @@ f32 getWaterY(cXyz shipPos) {
/* 000005D8-000006E8 .text _delete__9daSTBox_cFv */
bool daSTBox_c::_delete() {
for (int i = 0; i < 3; i++) {
for (int i = 0; i < ARRAY_SIZE(field_0x29C); i++) {
if (field_0x29C[i] != NULL) {
field_0x29C[i]->quitImmortalEmitter();
field_0x29C[i]->becomeInvalidEmitter();
@@ -176,19 +170,12 @@ bool daSTBox_c::_delete() {
}
}
mRippleCallBack.end();
JPABaseEmitter* callbackEmitter = shadowCallback.getEmitter();
if (callbackEmitter != NULL) {
callbackEmitter->mpEmitterCallBack = NULL;
callbackEmitter = shadowCallback.getEmitter();
callbackEmitter->setMaxFrame(-1);
callbackEmitter->stopCreateParticle();
}
shadowCallback.setEmitter(NULL);
dComIfG_resDelete(&field_0x290, m_arcname);
mShadowCallback.deleteCallBack();
dComIfG_resDelete(&mPhase, m_arcname);
u8 eventReg = dComIfGs_getEventReg(dSv_event_flag_c::UNK_ADFF);
eventReg += 1;
if (field_0x331 == 2){
dComIfGs_setEventReg(dSv_event_flag_c::UNK_ADFF,eventReg);
eventReg += 1;
dComIfGs_setEventReg(dSv_event_flag_c::UNK_ADFF, eventReg);
}
return TRUE;
}
@@ -202,7 +189,7 @@ static BOOL CheckCreateHeap(fopAc_ac_c* i_actor) {
/* 00000708-000007D4 .text CreateHeap__9daSTBox_cFv */
BOOL daSTBox_c::CreateHeap() {
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(m_arcname, m_bdlidx[field_0x331]);
JUT_ASSERT(0x1cd, modelData != NULL);
JUT_ASSERT(461, modelData != NULL);
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
if (mpModel == NULL) {
return FALSE;
@@ -223,70 +210,71 @@ void daSTBox_c::CreateInit() {
field_0x324.x = craneTop.x;
field_0x324.y = craneTop.y;
field_0x324.z = craneTop.z;
cullMtx = mpModel->getBaseTRMtx();
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
fopAcM_setCullSizeBox(this, -150.0f, -0.0f, -150.0f, 150.0f, 150.0f, 150.0f);
set_mtx();
field_0x330 = base.base.mParameters;
field_0x330 = daSTBox_prm::getItemNo(this);
field_0x334 = 0;
#if VERSION > VERSION_DEMO
field_0x336 = 0;
#endif
for (int i = 0; i < 2; i++) {
JPABaseEmitter* emitter = dComIfGp_particle_set(dPa_name::ID_IT_JN_LK_NURE_POTA00, &current.pos,
&current.angle, NULL, 0xff, NULL, -1,
NULL, NULL, NULL);
field_0x29C[i] = emitter;
field_0x29C[i] = dComIfGp_particle_set(dPa_name::ID_IT_JN_LK_NURE_POTA00, &current.pos, &current.angle);
}
if (field_0x331 == 1 || field_0x331 == 2) {
JPABaseEmitter* emitter = dComIfGp_particle_set(dPa_name::ID_IT_JN_LK_NURE_POTA00, &current.pos,
&current.angle, NULL, 0xff, NULL, -1,
NULL, NULL, NULL);
field_0x2A4 = emitter;
field_0x29C[2] = dComIfGp_particle_set(dPa_name::ID_IT_JN_LK_NURE_POTA00, &current.pos, &current.angle);
for (int i = 0; i < 3; i++) {
f32 f1 = 3.0f;
f32 f2 = 1.0f;
f32 f3 = 0.0f;
f32 f4 = 20.0f;
for (int i = 0; i < ARRAY_SIZE(field_0x29C); i++) {
if (field_0x29C[i] != NULL) {
field_0x29C[i]->becomeImmortalEmitter();
JGeometry::TVec3<f32> globalScale(1.5f, 1.5f, 1.0f);
field_0x29C[i]->setGlobalParticleScale(globalScale);
JGeometry::TVec3<f32> emitterScale(3.0f, 1.0f, 3.0f);
field_0x29C[i]->setGlobalParticleScale(1.5f, 1.5f);
JGeometry::TVec3<f32> emitterScale(f1, f2, f1);
field_0x29C[i]->setEmitterScale(emitterScale);
JGeometry::TVec3<f32> translation(0.0f, 20.0f, 0.0f);
JGeometry::TVec3<f32> translation(f3, f4, f3);
field_0x29C[i]->setEmitterTranslation(translation);
}
}
if (shadowCallback.getEmitter() == NULL) {
JPABaseEmitter* emitter = dComIfGp_particle_setShipTail(dPa_name::ID_AK_JN_SALVAGE00, &field_0x324,
&current.angle, NULL, 0, &shadowCallback, -1,
NULL, NULL, NULL);
shadowCallback.position = field_0x324;
shadowCallback.setField0x48(-0.1f);
shadowCallback.setDepth(4.0f);
if (mShadowCallback.getEmitter() == NULL) {
dComIfGp_particle_setShipTail(dPa_name::ID_AK_JN_SALVAGE00, &field_0x324, &current.angle, NULL, 0, &mShadowCallback);
mShadowCallback.setPos(field_0x324);
mShadowCallback.setIndirectTexData(-0.1f, 4.0f);
}
} else if (field_0x331 == 0) {
f32 f1 = 3.5f;
f32 f2 = 1.0f;
f32 f3 = 0.0f;
f32 f4 = -20.0f;
for (int i = 0; i < 2; i++) {
if (field_0x29C[i] != NULL) {
#if VERSION > VERSION_DEMO
field_0x29C[i]->becomeImmortalEmitter();
JGeometry::TVec3<f32> globalScale(1.5f, 1.5f, 1.0f);
field_0x29C[i]->setGlobalParticleScale(globalScale);
JGeometry::TVec3<f32> emitterScale(3.5f, 1.0f, 3.5f);
#endif
field_0x29C[i]->setGlobalParticleScale(1.5f, 1.5f);
JGeometry::TVec3<f32> emitterScale(f1, f2, f1);
field_0x29C[i]->setEmitterScale(emitterScale);
JGeometry::TVec3<f32> translation(0.0f, -20.0f, 0.0f);
JGeometry::TVec3<f32> translation(f3, f4, f3);
field_0x29C[i]->setEmitterTranslation(translation);
}
}
}
field_0x338 = -1;
#if VERSION > VERSION_DEMO
mItemPID = -1;
#endif
}
/* 00000ADC-00000BFC .text _create__9daSTBox_cFv */
cPhs_State daSTBox_c::_create() {
fopAcM_ct(this, daSTBox_c);
field_0x331 = base.base.mParameters >> 8 & 0xf;
cPhs_State phs_state = dComIfG_resLoad(&field_0x290, m_arcname);
field_0x331 = daSTBox_prm::getBoxType(this);
cPhs_State phs_state = dComIfG_resLoad(&mPhase, m_arcname);
if (phs_state == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, m_heapsize[field_0x331])) {
return cPhs_ERROR_e;
@@ -300,7 +288,7 @@ cPhs_State daSTBox_c::_create() {
/* 00000BFC-00000C7C .text set_mtx__9daSTBox_cFv */
void daSTBox_c::set_mtx() {
mpModel->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
mDoMtx_stack_c::YrotM(current.angle.y);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
@@ -328,17 +316,17 @@ bool daSTBox_c::_execute() {
static char* action_table[] = {"WAIT", "WAIT02", "WAIT_GETITEM", "WAIT_DUMMY", "DROP"};
int staffIdx = dComIfGp_evmng_getMyStaffId("STBox");
daShip_c* ship = (daShip_c*)dComIfGp_getShipActor();
f32 waterY = 0.0;
f32 waterY = 0.0f;
cXyz m1020Pos;
int actIdx;
if (ship != NULL) {
m1020Pos = ship->m1020;
m1020Pos.x = ship->getCraneRipplePosX();
m1020Pos.y = ship->getCraneRipplePosY();
m1020Pos.z = ship->getCraneRipplePosZ();
waterY = getWaterY(m1020Pos);
}
if ((dComIfGp_event_runCheck())
&& !eventInfo.checkCommandTalk()
&& staffIdx != -1) {
actIdx = dComIfGp_evmng_getMyActIdx(staffIdx, action_table, 5, 0, 0);
if ((dComIfGp_event_runCheck()) && !eventInfo.checkCommandTalk() && staffIdx != -1) {
actIdx = dComIfGp_evmng_getMyActIdx(staffIdx, action_table, ARRAY_SIZE(action_table), FALSE, 0);
if(actIdx == -1){
dComIfGp_evmng_cutEnd(staffIdx);
} else {
@@ -359,20 +347,12 @@ bool daSTBox_c::_execute() {
}
if (current.pos.y < waterY) {
shadowCallback.setWaterFlatY(waterY + 2.0f);
shadowCallback.field_0x0C = waterY + 2.0f;
shadowCallback.setWaterY(waterY - current.pos.y);
shadowCallback.position = m1020Pos;
mShadowCallback.setWaterY(waterY + 2.0f);
mShadowCallback.setWaterFlatY(waterY + 2.0f);
mShadowCallback.setDepth(waterY - current.pos.y);
mShadowCallback.setPos(m1020Pos);
} else {
JPABaseEmitter* emitter = shadowCallback.getEmitter();
if (emitter != NULL) {
emitter->setEmitterCallBackPtr(NULL);
emitter = shadowCallback.getEmitter();
emitter->setMaxFrame(-1);
emitter->stopCreateParticle();
}
shadowCallback.setEmitter(NULL);
mShadowCallback.deleteCallBack();
}
set_mtx();
return TRUE;
@@ -386,11 +366,17 @@ void daSTBox_c::initWait(int) {
/* 00000EBC-00000EC8 .text initWait02__9daSTBox_cFi */
void daSTBox_c::initWait02(int) {
field_0x332 = 20;
#if VERSION == VERSION_DEMO
fpc_ProcID itemPID = fopAcM_createItemForTrBoxDemo(&current.pos, field_0x330, -1, dComIfGp_roomControl_getStayNo());
if (itemPID != fpcM_ERROR_PROCESS_ID_e) {
dComIfGp_event_setItemPartnerId(itemPID);
}
#endif
}
/* 00000EC8-00000F50 .text initWaitGetItem__9daSTBox_cFi */
void daSTBox_c::initWaitGetItem(int) {
fopDwTg_DrawQTo(&draw_tag);
fopAcM_offDraw(this);
for(int i = 0; i < 3; i++) {
if (field_0x29C[i] != NULL) {
field_0x29C[i]->quitImmortalEmitter();
@@ -408,7 +394,7 @@ void daSTBox_c::initWaitDummy(int) {
/* 00000F54-00000F64 .text initDrop__9daSTBox_cFi */
void daSTBox_c::initDrop(int) {
gravity = -4.0f;
fopAcM_SetGravity(this, -4.0f);
}
const f32 crane_offset[] = {80.0f, 125.0f, 125.0f};
@@ -417,46 +403,46 @@ const f32 crane_offset[] = {80.0f, 125.0f, 125.0f};
BOOL daSTBox_c::actWait(int) {
daShip_c* ship = (daShip_c*)dComIfGp_getShipActor();
if (ship == NULL) {
JUT_ASSERT(0x32b, FALSE);
JUT_ASSERT(DEMO_SELECT(804, 811), FALSE);
}
cXyz* craneTop = ship->getCraneTop();
if (craneTop == NULL) {
JUT_ASSERT(0x332, FALSE);
JUT_ASSERT(DEMO_SELECT(811, 818), FALSE);
}
#if VERSION > VERSION_DEMO
cXyz craneTopPos = *craneTop;
craneTopPos.y += 5000.0f;
f32 waterY = getWaterY(craneTopPos);
current.angle.y = ship->shape_angle.y;
#endif
current.angle.y = ship->getCraneHookAngleY();
cXyz craneTopPos2 = *craneTop;
craneTopPos2.y -= crane_offset[field_0x331];
current.pos = craneTopPos2;
attention_info.position = current.pos;
if ((field_0x331 == 1 || field_0x331 == 2)
&& current.pos.y > waterY && (field_0x336 == 0)) {
#if VERSION > VERSION_DEMO
if ((field_0x331 == 1 || field_0x331 == 2) && current.pos.y > waterY && (field_0x336 == 0)) {
mDoAud_subBgmStart(JA_BGM_BGN_GET_BOX);
field_0x336 = 1;
}
#endif
if (field_0x335 == 0) {
position = current.pos;
position.y += 2500.0f;
position.y = dBgS_GetWaterHeight(position);
if (current.pos.y >position.y - 10.0f) {
dComIfGp_particle_setShipTail(0x35c, &position,
NULL, &scale, 0xff,
&mRippleCallBack, -1,
NULL, NULL, NULL);
mParticlePos = current.pos;
mParticlePos.y += 2500.0f;
mParticlePos.y = dBgS_GetWaterHeight(mParticlePos);
if (current.pos.y > mParticlePos.y - 10.0f) {
dComIfGp_particle_setShipTail(dPa_name::ID_IT_JN_HAMON01, &mParticlePos, NULL, &scale, 0xff, &mRippleCallBack);
mRippleCallBack.setRate(12.0f);
field_0x335 = 1;
}
}
if ((field_0x331 == 1 || field_0x331 == 2) && ((field_0x338) == 0xffffffff)) {
field_0x338 = fopAcM_createItemForTrBoxDemo(&current.pos,
field_0x330, 0xffffffff,
dStage_roomControl_c::mStayNo, 0, 0);
if (field_0x338 != 0xffffffff) {
g_dComIfG_gameInfo.play.mEvtCtrl.mPtItem = field_0x338;
#if VERSION > VERSION_DEMO
if ((field_0x331 == 1 || field_0x331 == 2) && (mItemPID == fpcM_ERROR_PROCESS_ID_e)) {
mItemPID = fopAcM_createItemForTrBoxDemo(&current.pos, field_0x330, -1, dComIfGp_roomControl_getStayNo());
if (mItemPID != fpcM_ERROR_PROCESS_ID_e) {
dComIfGp_event_setItemPartnerId(mItemPID);
}
}
#endif
return FALSE;
}
@@ -468,9 +454,8 @@ BOOL daSTBox_c::actDrop(int) {
}
if(current.pos.y < getWaterY(current.pos)) {
if(field_0x334 == 0) {
s8 reverb = dComIfGp_getReverb(current.roomNo);
mDoAud_seStart(JA_SE_OBJ_FALL_WATER_M, &eyePos, 0, reverb);
fopKyM_createWpillar(&current.pos, 0.8, 1.0, 0);
fopAcM_seStart(this, JA_SE_OBJ_FALL_WATER_M, 0);
fopKyM_createWpillar(&current.pos, 0.8f, 1.0f, 0);
field_0x334 = 1;
}
mRippleCallBack.end();
@@ -483,8 +468,7 @@ BOOL daSTBox_c::actWait02(int) {
cXyz* pos = dComIfGp_getShipActor()->getCraneTop();
if (pos != NULL) {
cXyz cranePos = *pos;
f32 offset = crane_offset[field_0x331];
cranePos.y -= offset;
cranePos.y -= crane_offset[field_0x331];
current.pos = cranePos;
}
return FALSE;
+14 -14
View File
@@ -3317,20 +3317,20 @@ void daShip_c::setRopePos() {
}
}
m1020.x = r3->x;
m1020.y = fVar2;
m1020.z = r3->z;
mCraneRipplePos.x = r3->x;
mCraneRipplePos.y = fVar2;
mCraneRipplePos.z = r3->z;
if (mRipple.getEmitter() == NULL) {
dComIfGp_particle_setShipTail(dPa_name::ID_AK_JN_HAMON00, &m1020, NULL, &ripple_scale, 0xFF, &mRipple);
dComIfGp_particle_setShipTail(dPa_name::ID_AK_JN_HAMON00, &mCraneRipplePos, NULL, &ripple_scale, 0xFF, &mRipple);
if (mRipple.getEmitter() != NULL) {
mRipple.setRate(0.0f);
if (m034F == 0) {
fopKyM_createWpillar(&m1020, 0.7f, 0.7f, 0);
fopKyM_createWpillar(&mCraneRipplePos, 0.7f, 0.7f, 0);
seStart(JA_SE_LK_SHIP_CRANE_DROP, &m1020);
seStart(JA_SE_LK_SHIP_CRANE_DROP, &mCraneRipplePos);
dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f));
}
@@ -3341,7 +3341,7 @@ void daShip_c::setRopePos() {
if (fVar17 < fVar2 && !m034F && mRopeCnt >= 20) {
m034F = 20;
seStart(JA_SE_LK_SHIP_CRANE_LIFTUP, &m1020);
seStart(JA_SE_LK_SHIP_CRANE_LIFTUP, &mCraneRipplePos);
if (mCurMode != MODE_CRANE_UP_e) {
if (m19AC.getEmitter() == NULL) {
@@ -3356,7 +3356,7 @@ void daShip_c::setRopePos() {
}
}
fopKyM_createWpillar(&m1020, 0.5f, 0.7f, 0);
fopKyM_createWpillar(&mCraneRipplePos, 0.5f, 0.7f, 0);
dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f));
@@ -3988,10 +3988,10 @@ BOOL daShip_c::execute() {
setRopePos();
mDoMtx_multVecZero(mpSalvageArmModel->getAnmMtx(VFNCR_JNT_V_CRANE_ROTATION_e), &m102C);
if (mProc == &daShip_c::procCrane || mProc == &daShip_c::procCraneUp) {
m0434 = mRopeLine.getPos(0);
mCraneTop = mRopeLine.getPos(0);
}
else {
m0434 = NULL;
mCraneTop = NULL;
}
}
else {
@@ -4001,7 +4001,7 @@ BOOL daShip_c::execute() {
mRopeCnt = 0;
m0434 = NULL;
mCraneTop = NULL;
if (mPart == PART_CANNON_e) {
mDoMtx_multVecZero(mpCannonModel->getAnmMtx(VFNCN_JNT_CANON2_e), &m1038);
@@ -4127,8 +4127,8 @@ BOOL daShip_c::execute() {
spC0 = *m0428 - eyePos;
r23_2 = TRUE;
}
else if ((mCurMode == 10 || mCurMode == 11) && m0434 && mRopeCnt > 0) {
spC0 = *m0434 - eyePos;
else if ((mCurMode == 10 || mCurMode == 11) && mCraneTop && mRopeCnt > 0) {
spC0 = *mCraneTop - eyePos;
r23_2 = TRUE;
}
else if (mCurMode == 8 || distXz > 125.0f) {
@@ -4379,7 +4379,7 @@ BOOL daShip_c::shipDelete() {
mDoAud_seDeleteObject(&mTillerTopPos);
mDoAud_seDeleteObject(&m0444);
mDoAud_seDeleteObject(&m102C);
mDoAud_seDeleteObject(&m1020);
mDoAud_seDeleteObject(&mCraneRipplePos);
mDoAud_seDeleteObject(&m1038);
dComIfGp_clearPlayerStatus1(0, daPyStts1_SAIL_e);
dComIfG_resDelete(&mPhs, l_arcName);
+5 -5
View File
@@ -562,7 +562,7 @@ s32 daTbox_c::boxCheck() {
cXyz playerChestDiff = player->current.pos - home.pos;
if (playerChestDiff.abs2XZ() < SQUARE(100.0f)) {
if (fopAcM_seenActorAngleY(this, dComIfGp_getPlayer(0)) < 0x2000 && fopAcM_seenActorAngleY(player, this) < 0x2000) {
if (fopAcM_seenPlayerAngleY(this) < 0x2000 && fopAcM_seenActorAngleY(player, this) < 0x2000) {
return TRUE;
}
}
@@ -611,19 +611,19 @@ void daTbox_c::darkProc() {
/* 0000172C-000017CC .text volmProc__8daTbox_cFv */
void daTbox_c::volmProc() {
if (mOpenTimer == 36) {
mSmokeEmitter->mGlobalPrmColor.a = 0xFF;
mSmokeEmitter->setGlobalAlpha(0xFF);
}
else if (mOpenTimer >= 0xB5) {
dKy_plight_cut(&mPLight);
dKy_efplight_cut(&mEfLight);
mSmokeEmitter->mGlobalPrmColor.a = 0;
mSmokeEmitter->setGlobalAlpha(0);
mSmokeEmitter->becomeInvalidEmitter();
mSmokeEmitter = NULL;
}
else if (mOpenTimer > 0x9C) {
mSmokeEmitter->mGlobalPrmColor.a = (0xB5 - mOpenTimer) * 0x0A;
mSmokeEmitter->setGlobalAlpha((0xB5 - mOpenTimer) * 0x0A);
}
}
@@ -896,7 +896,7 @@ void daTbox_c::OpenInit() {
mSmokeEmitter = dComIfGp_particle_set(dPa_name::ID_IT_JN_TAKARA_VOLM, &current.pos, &current.angle);
if (mSmokeEmitter != NULL) {
mSmokeEmitter->mGlobalPrmColor.a = 0;
mSmokeEmitter->setGlobalAlpha(0);
}
}
+2 -2
View File
@@ -250,8 +250,8 @@ dMagma_packet_c::dMagma_packet_c() {
ResTIMG* col = (ResTIMG*)dComIfG_getObjectRes("Magma", dRes_INDEX_MAGMA_BTI_MAG_COL_e);
mDoLib_setResTimgObj(col, &mColTexObj, 0, NULL);
mDoMtx_identity(mFloorMtx);
mDoMtx_identity(mBallMtx);
cMtx_identity(mFloorMtx);
cMtx_identity(mBallMtx);
mTimer = 0.0f;
}