mirror of
https://github.com/zeldaret/tww.git
synced 2026-10-09 05:31:51 -04:00
d_a_obj_vyasi (#1233)
* structure * _create() * stopJointAnimation * so many BOOL * set_collision * sagWind * more process * process fns * JointNodeCallBack * create_heap() * leaf_scale_main() * execute, draw * calc_dif_angle, quaternion_main * renames + enum * configure.py * fix const cast
This commit is contained in:
+1
-1
@@ -1806,7 +1806,7 @@ config.libs = [
|
||||
ActorRel(Matching, "d_a_obj_vmsms"),
|
||||
ActorRel(Matching, "d_a_obj_volcano"),
|
||||
ActorRel(NonMatching, "d_a_obj_vtil"),
|
||||
ActorRel(NonMatching, "d_a_obj_vyasi"),
|
||||
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_vyasi"),
|
||||
ActorRel(Matching, "d_a_obj_xfuta"),
|
||||
ActorRel(Matching, "d_a_obj_zouK"),
|
||||
ActorRel(Matching, "d_a_oship"),
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define D_A_OBJ_VYASI_H
|
||||
|
||||
#include "f_op/f_op_actor.h"
|
||||
#include "d/d_a_obj.h"
|
||||
#include "d/d_cc_d.h"
|
||||
#include "SSystem/SComponent/c_phase.h"
|
||||
|
||||
@@ -11,29 +12,34 @@ class J3DNode;
|
||||
|
||||
namespace daObjVyasi {
|
||||
static BOOL JointNodeCallBack(J3DNode*, int);
|
||||
|
||||
|
||||
class Act_c : public fopAc_ac_c {
|
||||
public:
|
||||
void is_switch() const {}
|
||||
|
||||
void SetStopJointAnimation(J3DAnmTransformKey*, float, float);
|
||||
void PlayStopJointAnimation();
|
||||
virtual ~Act_c() {
|
||||
}
|
||||
|
||||
BOOL is_switch() const {
|
||||
return fopAcM_isSwitch(const_cast<Act_c*>(this), daObj::PrmAbstract(this, 8, 0));
|
||||
}
|
||||
|
||||
BOOL SetStopJointAnimation(J3DAnmTransformKey*, float, float);
|
||||
BOOL PlayStopJointAnimation();
|
||||
void set_first_process();
|
||||
void set_collision();
|
||||
void process_none_init();
|
||||
BOOL process_none_init();
|
||||
void process_none_main();
|
||||
void process_sag_init();
|
||||
BOOL process_sag_init();
|
||||
void process_sag_main();
|
||||
void process_sagWind_init();
|
||||
BOOL process_sagWind_init();
|
||||
void process_sagWind_main();
|
||||
void process_toNormal_init();
|
||||
BOOL process_toNormal_init();
|
||||
void process_toNormal_main();
|
||||
void process_normal_init();
|
||||
BOOL process_normal_init();
|
||||
void process_normal_main();
|
||||
void process_init(int);
|
||||
BOOL process_init(int);
|
||||
void process_main();
|
||||
void solidHeapCB(fopAc_ac_c*);
|
||||
void create_heap();
|
||||
static BOOL solidHeapCB(fopAc_ac_c*);
|
||||
bool create_heap();
|
||||
cPhs_State _create();
|
||||
bool _delete();
|
||||
void set_mtx();
|
||||
@@ -42,39 +48,43 @@ namespace daObjVyasi {
|
||||
void leaf_scale_main();
|
||||
bool _execute();
|
||||
bool _draw();
|
||||
|
||||
|
||||
static char const M_arcname[];
|
||||
|
||||
public:
|
||||
/* 0x0290 */ u8 m0290[0x0294 - 0x0290];
|
||||
/* 0x0294 */ s16 m0294[14];
|
||||
/* 0x02B0 */ s16 m02B0[14];
|
||||
/* 0x0294 */ s16 mAnimWave[14];
|
||||
/* 0x02B0 */ s16 mAnimDir[14];
|
||||
/* 0x02CC */ Quaternion mJointQuat[14];
|
||||
/* 0x03AC */ csXyz m03AC[14];
|
||||
/* 0x0400 */ cXyz m0400[14];
|
||||
/* 0x04A8 */ f32 m04A8;
|
||||
/* 0x04AC */ f32 m04AC;
|
||||
/* 0x04B0 */ f32 m04B0;
|
||||
/* 0x03AC */ csXyz mJointAngle[14];
|
||||
/* 0x0400 */ cXyz mJointPos[14];
|
||||
/* 0x04A8 */ cXyz mLeafScale;
|
||||
/* 0x04B4 */ request_of_phase_process_class mPhs;
|
||||
/* 0x04BC */ Mtx m04BC;
|
||||
/* 0x04BC */ Mtx mMtx;
|
||||
/* 0x04EC */ mDoExt_McaMorf* mpMorf;
|
||||
/* 0x04F0 */ J3DAnmTransformKey* mpBckData;
|
||||
/* 0x04F0 */ J3DAnmTransformKey* M_bck_data;
|
||||
/* 0x04F4 */ cXyz mEkszsPos;
|
||||
/* 0x0500 */ s16 mEkszsRotY;
|
||||
/* 0x0502 */ u8 m0502[0x0504 - 0x0502];
|
||||
/* 0x0504 */ f32 m0504;
|
||||
/* 0x0508 */ u8 m0508[0x0524 - 0x0508];
|
||||
/* 0x0524 */ s16 m0524[15];
|
||||
/* 0x0542 */ u8 m0542[0x0544 - 0x0542];
|
||||
/* 0x0502 */ u8 pad_0x502[0x0504 - 0x0502];
|
||||
/* 0x0504 */ f32 mSagRatio;
|
||||
/* 0x0508 */ s16 mWavePhase[14];
|
||||
/* 0x0524 */ s16 mWaveSpeed[14];
|
||||
/* 0x0540 */ u8 pad_0x540[0x0544 - 0x0540];
|
||||
/* 0x0544 */ s16 mNormalCounter;
|
||||
/* 0x0546 */ u8 m0546[0x0584 - 0x0546];
|
||||
/* 0x0546 */ u8 pad_0x546[0x0548 - 0x0546];
|
||||
/* 0x0548 */ dCcD_Stts mStts;
|
||||
/* 0x0584 */ dCcD_Cyl mCyl;
|
||||
/* 0x06B4 */ u8 m06B4[0x19C4 - 0x06B4];
|
||||
/* 0x19C4 */ int m19C4;
|
||||
/* 0x06B4 */ dCcD_Stts mCpsStts[5];
|
||||
/* 0x07E0 */ dCcD_Cps mCps[5];
|
||||
/* 0x0DF8 */ cM3dGCpsS field_0xDF8[5];
|
||||
/* 0x0E84 */ dCcD_Stts field_0xE84[8];
|
||||
/* 0x1064 */ dCcD_Sph field_0x1064[8];
|
||||
/* 0x19C4 */ int mAnmPlaying;
|
||||
/* 0x19C8 */ int mState;
|
||||
/* 0x19CC */ f32 m19CC;
|
||||
/* 0x19D0 */ s16 m19D0;
|
||||
/* 0x19D2 */ u8 m19D2[0x19D4 - 0x19D2];
|
||||
/* 0x19D4 */ f32 m19D4;
|
||||
};
|
||||
/* 0x19CC */ f32 field_0x19CC;
|
||||
/* 0x19D0 */ s16 field_0x19D0;
|
||||
/* 0x19D2 */ u8 pad_0x19D2[0x19D4 - 0x19D2];
|
||||
/* 0x19D4 */ f32 mWindScale;
|
||||
}; // Size: 0x19D8
|
||||
};
|
||||
|
||||
#endif /* D_A_OBJ_VYASI_H */
|
||||
|
||||
+420
-39
@@ -5,10 +5,51 @@
|
||||
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
#include "d/actor/d_a_obj_vyasi.h"
|
||||
#include "d/d_a_obj.h"
|
||||
#include "d/d_cc_d.h"
|
||||
#include "d/d_kankyo_wether.h"
|
||||
#include "d/d_lib.h"
|
||||
#include "res/Object/Vyasi.h"
|
||||
#include "SSystem/SComponent/c_lib.h"
|
||||
|
||||
namespace daObjVyasi {
|
||||
|
||||
namespace {
|
||||
struct Attr_c {
|
||||
/* 0x00 */ f32 field_0x00;
|
||||
/* 0x04 */ f32 field_0x04;
|
||||
/* 0x08 */ f32 field_0x08;
|
||||
/* 0x0C */ f32 field_0x0C;
|
||||
/* 0x10 */ f32 field_0x10;
|
||||
/* 0x14 */ f32 field_0x14;
|
||||
/* 0x18 */ f32 field_0x18;
|
||||
/* 0x1C */ f32 field_0x1C;
|
||||
/* 0x20 */ s16 field_0x20;
|
||||
/* 0x22 */ s16 field_0x22;
|
||||
/* 0x24 */ f32 field_0x24;
|
||||
/* 0x28 */ f32 field_0x28;
|
||||
/* 0x2C */ f32 field_0x2C;
|
||||
/* 0x30 */ u8 pad[0x84 - 0x30];
|
||||
}; // Size: 0x84
|
||||
|
||||
static Attr_c const L_attr = {
|
||||
1.0f, 79.0f, 250.0f, 0.0f, 0.0f, 0.0f, 0.4f, 1.5f, 2, 0, 700.0f, 1700.0f, 1700.0f, {},
|
||||
};
|
||||
|
||||
inline Attr_c const& attr() {
|
||||
return L_attr;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
enum {
|
||||
STATE_NONE = 0,
|
||||
STATE_SAG,
|
||||
STATE_SAG_WIND,
|
||||
STATE_TO_NORMAL,
|
||||
STATE_NORMAL,
|
||||
STATE_MAX,
|
||||
};
|
||||
|
||||
static const dCcD_SrcCyl M_cyl_src = {
|
||||
// dCcD_SrcGObjInf
|
||||
{
|
||||
@@ -100,142 +141,482 @@ static const dCcD_SrcSph M_sph_src = {
|
||||
}},
|
||||
};
|
||||
|
||||
static u8 joint_kind_table[14] = { 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
}; // namespace daObjVyasi
|
||||
|
||||
|
||||
/* 000000EC-0000015C .text SetStopJointAnimation__Q210daObjVyasi5Act_cFP18J3DAnmTransformKeyff */
|
||||
void daObjVyasi::Act_c::SetStopJointAnimation(J3DAnmTransformKey*, float, float) {
|
||||
/* Nonmatching */
|
||||
BOOL daObjVyasi::Act_c::SetStopJointAnimation(J3DAnmTransformKey* i_key, float i_speed, float i_morf) {
|
||||
if (i_key != NULL) {
|
||||
mpMorf->setAnm(i_key, 0, i_morf, i_speed, 0.0f, -1.0f, NULL);
|
||||
mAnmPlaying = 1;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* 0000015C-00000194 .text PlayStopJointAnimation__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::PlayStopJointAnimation() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjVyasi::Act_c::PlayStopJointAnimation() {
|
||||
if (mpMorf->play(NULL, 0, 0) == 0) {
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* 00000194-0000021C .text set_first_process__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::set_first_process() {
|
||||
/* Nonmatching */
|
||||
process_init(is_switch() ? STATE_NORMAL : STATE_SAG);
|
||||
mNormalCounter = 0;
|
||||
mWindScale = 1.0f;
|
||||
shape_angle.y += 0x8000;
|
||||
}
|
||||
|
||||
/* 0000021C-000005B8 .text set_collision__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::set_collision() {
|
||||
/* Nonmatching */
|
||||
if (mCyl.ChkTgHit()) {
|
||||
mCyl.GetTgHitObj();
|
||||
daObj::HitSeStart(¤t.pos, fopAcM_GetRoomNo(this), &mCyl, 7);
|
||||
daObj::HitEff_kikuzu(this, &mCyl);
|
||||
dKy_Sound_set(current.pos, 4, fopAcM_GetID(this), 100);
|
||||
mCyl.ClrTgHit();
|
||||
} else {
|
||||
mCyl.SetR(79.0f);
|
||||
mCyl.SetH(250.0f);
|
||||
mCyl.SetC(current.pos);
|
||||
dComIfG_Ccsp()->Set(&mCyl);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
if (mCps[i].ChkTgHit()) {
|
||||
mCps[i].GetTgHitObj();
|
||||
daObj::HitSeStart(¤t.pos, fopAcM_GetRoomNo(this), &mCps[i], 7);
|
||||
dKy_Sound_set(current.pos, 4, fopAcM_GetID(this), 100);
|
||||
mCps[i].ClrTgHit();
|
||||
} else {
|
||||
int k = i + 1;
|
||||
field_0xDF8[i].mStart = mJointPos[i];
|
||||
field_0xDF8[i].mEnd = mJointPos[k];
|
||||
field_0xDF8[i].mRadius = 47.4f;
|
||||
mCps[i].cM3dGCps::Set(field_0xDF8[i]);
|
||||
dComIfG_Ccsp()->Set(&mCps[i]);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < 8; i += 2) {
|
||||
int idx = i >> 1;
|
||||
int j = idx + 1;
|
||||
int k = idx + 2;
|
||||
|
||||
cXyz delta((mJointPos[k].x - mJointPos[j].x) * 0.33333f, (mJointPos[k].y - mJointPos[j].y) * 0.33333f, (mJointPos[k].z - mJointPos[j].z) * 0.33333f);
|
||||
|
||||
cXyz pos;
|
||||
pos.x = mJointPos[j].x + delta.x;
|
||||
pos.y = mJointPos[j].y + delta.y;
|
||||
pos.z = mJointPos[j].z + delta.z;
|
||||
field_0x1064[i].SetC(pos);
|
||||
field_0x1064[i].SetR(47.4f);
|
||||
dComIfG_Ccsp()->Set(&field_0x1064[i]);
|
||||
|
||||
pos.x = mJointPos[j].x + delta.x * 2.0f;
|
||||
pos.y = mJointPos[j].y + delta.y * 2.0f;
|
||||
pos.z = mJointPos[j].z + delta.z * 2.0f;
|
||||
field_0x1064[i + 1].SetC(pos);
|
||||
field_0x1064[i + 1].SetR(47.4f);
|
||||
dComIfG_Ccsp()->Set(&field_0x1064[i + 1]);
|
||||
}
|
||||
}
|
||||
|
||||
/* 000005F4-000009B8 .text JointNodeCallBack__10daObjVyasiFP7J3DNodei */
|
||||
BOOL daObjVyasi::JointNodeCallBack(J3DNode*, int) {
|
||||
/* Nonmatching */
|
||||
BOOL daObjVyasi::JointNodeCallBack(J3DNode* i_node, int i_calcTiming) {
|
||||
J3DModel* model = j3dSys.getModel();
|
||||
s32 jntNo = ((J3DJoint*)i_node)->getJntNo();
|
||||
Act_c* i_this = (Act_c*)model->getUserArea();
|
||||
if (i_calcTiming == J3DNodeCBCalcTiming_In) {
|
||||
mDoMtx_stack_c::copy(model->getAnmMtx(jntNo));
|
||||
Mtx mtx;
|
||||
MTXCopy(model->getAnmMtx(jntNo), mtx);
|
||||
cXyz trans(mtx[0][3], mtx[1][3], mtx[2][3]);
|
||||
mtx[0][3] = mtx[1][3] = mtx[2][3] = 0.0f;
|
||||
|
||||
mDoMtx_stack_c::transS(trans);
|
||||
mDoMtx_stack_c::quatM(&i_this->mJointQuat[jntNo]);
|
||||
mDoMtx_stack_c::concat(mtx);
|
||||
model->setAnmMtx(jntNo, mDoMtx_stack_c::get());
|
||||
MTXCopy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
|
||||
|
||||
csXyz angles_table[14] = {
|
||||
csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, 0),
|
||||
csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, 0),
|
||||
};
|
||||
|
||||
csXyz angle = angles_table[jntNo];
|
||||
angle += i_this->mJointAngle[jntNo];
|
||||
mDoMtx_stack_c::copy(model->getAnmMtx(jntNo));
|
||||
mDoMtx_stack_c::ZXYrotM(angle);
|
||||
|
||||
if (joint_kind_table[jntNo] == 0) {
|
||||
mDoMtx_stack_c::scaleM(i_this->mLeafScale.x, i_this->mLeafScale.y, i_this->mLeafScale.z);
|
||||
}
|
||||
|
||||
model->setAnmMtx(jntNo, mDoMtx_stack_c::get());
|
||||
MTXCopy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
|
||||
cXyz src(0.0f, 0.0f, 0.0f);
|
||||
cMtx_multVec(mDoMtx_stack_c::get(), &src, &i_this->mJointPos[jntNo]);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 000009F4-000009FC .text process_none_init__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::process_none_init() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjVyasi::Act_c::process_none_init() {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 000009FC-00000A00 .text process_none_main__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::process_none_main() {
|
||||
/* Nonmatching */
|
||||
return;
|
||||
}
|
||||
|
||||
/* 00000A00-00000A64 .text process_sag_init__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::process_sag_init() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjVyasi::Act_c::process_sag_init() {
|
||||
if (SetStopJointAnimation(M_bck_data, 1.0f, 0.0f) != 0) {
|
||||
mpMorf->setPlaySpeed(0.0f);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* 00000A64-00000AD8 .text process_sag_main__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::process_sag_main() {
|
||||
/* Nonmatching */
|
||||
fopAc_ac_c* actor = fopAcM_SearchByName(fpcNm_Obj_Ekskz_e);
|
||||
if (actor != NULL) {
|
||||
mEkszsPos = actor->current.pos;
|
||||
mEkszsRotY = actor->shape_angle.y;
|
||||
process_init(STATE_SAG_WIND);
|
||||
}
|
||||
}
|
||||
|
||||
/* 00000AD8-00000CC0 .text process_sagWind_init__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::process_sagWind_init() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjVyasi::Act_c::process_sagWind_init() {
|
||||
if (SetStopJointAnimation(M_bck_data, 1.0f, 3.0f)) {
|
||||
f32 dist = mEkszsPos.abs(current.pos);
|
||||
dist = cLib_maxLimit(dist, 2800.0f);
|
||||
dist = cLib_minLimit(dist, 1000.0f);
|
||||
|
||||
mSagRatio = (dist - 2800.0f) / -1800.0f;
|
||||
f32 amp = 5000.0f + 7000.0f * mSagRatio;
|
||||
|
||||
for (int i = 0; i < 14; i++) {
|
||||
if (joint_kind_table[i] == 0) {
|
||||
if (!(i & 1)) {
|
||||
mWaveSpeed[i] = amp + cM_rndF(2000.0f);
|
||||
} else {
|
||||
mWaveSpeed[i] = -(amp + cM_rndF(2000.0f));
|
||||
}
|
||||
} else {
|
||||
mWaveSpeed[i] = 0.5f * amp;
|
||||
}
|
||||
}
|
||||
mpMorf->setPlaySpeed(0.0f);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* 00000CC0-00000D20 .text process_sagWind_main__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::process_sagWind_main() {
|
||||
/* Nonmatching */
|
||||
if (is_switch()) {
|
||||
process_init(STATE_TO_NORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
/* 00000D20-00000D54 .text process_toNormal_init__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::process_toNormal_init() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjVyasi::Act_c::process_toNormal_init() {
|
||||
return SetStopJointAnimation(M_bck_data, 1.0f, 0.0f);
|
||||
}
|
||||
|
||||
/* 00000D54-00000E10 .text process_toNormal_main__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::process_toNormal_main() {
|
||||
/* Nonmatching */
|
||||
if (mAnmPlaying == 0) {
|
||||
if (std::fabsf(field_0x19CC) <= 0.1f && process_init(STATE_NORMAL)) {
|
||||
field_0x19CC = 0.0f;
|
||||
mWindScale = 0.0f;
|
||||
mNormalCounter = 2;
|
||||
}
|
||||
field_0x19CC *= 0.85f;
|
||||
field_0x19D0 += 0x3000;
|
||||
} else {
|
||||
field_0x19CC = -1792.0f * mSagRatio;
|
||||
field_0x19D0 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* 00000E10-00000E74 .text process_normal_init__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::process_normal_init() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjVyasi::Act_c::process_normal_init() {
|
||||
if (SetStopJointAnimation(M_bck_data, -1.0f, 0.0f)) {
|
||||
mpMorf->setPlaySpeed(0.0f);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* 00000E74-00000ED0 .text process_normal_main__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::process_normal_main() {
|
||||
/* Nonmatching */
|
||||
if (mNormalCounter == 0 || mNormalCounter == 1) {
|
||||
mNormalCounter++;
|
||||
}
|
||||
cLib_addCalc(&mWindScale, 1.0f, 0.01f, 1.0f, 0.007f);
|
||||
}
|
||||
|
||||
char const daObjVyasi::Act_c::M_arcname[] = "Vyasi";
|
||||
|
||||
/* 00000ED0-00000FE4 .text process_init__Q210daObjVyasi5Act_cFi */
|
||||
void daObjVyasi::Act_c::process_init(int) {
|
||||
/* Nonmatching */
|
||||
BOOL daObjVyasi::Act_c::process_init(int i_idx) {
|
||||
typedef BOOL (daObjVyasi::Act_c::*initProc)();
|
||||
static initProc init_table[] = {
|
||||
&daObjVyasi::Act_c::process_none_init, &daObjVyasi::Act_c::process_sag_init, &daObjVyasi::Act_c::process_sagWind_init,
|
||||
&daObjVyasi::Act_c::process_toNormal_init, &daObjVyasi::Act_c::process_normal_init,
|
||||
};
|
||||
|
||||
if (i_idx >= 0 && i_idx < STATE_MAX && (this->*init_table[i_idx])()) {
|
||||
mState = i_idx;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* 00000FE4-000010C8 .text process_main__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::process_main() {
|
||||
/* Nonmatching */
|
||||
typedef void (daObjVyasi::Act_c::*mainProc)();
|
||||
static mainProc main_table[] = {
|
||||
&daObjVyasi::Act_c::process_none_main, &daObjVyasi::Act_c::process_sag_main, &daObjVyasi::Act_c::process_sagWind_main,
|
||||
&daObjVyasi::Act_c::process_toNormal_main, &daObjVyasi::Act_c::process_normal_main,
|
||||
};
|
||||
|
||||
if (mState >= 0 && mState < STATE_MAX) {
|
||||
(this->*main_table[mState])();
|
||||
}
|
||||
}
|
||||
|
||||
/* 000010C8-000010EC .text solidHeapCB__Q210daObjVyasi5Act_cFP10fopAc_ac_c */
|
||||
void daObjVyasi::Act_c::solidHeapCB(fopAc_ac_c*) {
|
||||
/* Nonmatching */
|
||||
BOOL daObjVyasi::Act_c::solidHeapCB(fopAc_ac_c* i_this) {
|
||||
return ((daObjVyasi::Act_c*)i_this)->create_heap();
|
||||
}
|
||||
|
||||
/* 000010EC-00001290 .text create_heap__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::create_heap() {
|
||||
/* Nonmatching */
|
||||
bool daObjVyasi::Act_c::create_heap() {
|
||||
J3DModelData* mdl_data = (J3DModelData*)dComIfG_getObjectRes(M_arcname, dRes_INDEX_VYASI_BDL_VYASI_e);
|
||||
JUT_ASSERT(1146, mdl_data != NULL);
|
||||
|
||||
M_bck_data = (J3DAnmTransformKey*)dComIfG_getObjectRes(M_arcname, dRes_INDEX_VYASI_BCK_VYASI_e);
|
||||
JUT_ASSERT(1151, M_bck_data != NULL);
|
||||
|
||||
if (M_bck_data != NULL && mdl_data != NULL) {
|
||||
mpMorf = new mDoExt_McaMorf(mdl_data, NULL, NULL, M_bck_data, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, 1, NULL, 0, 0x11000002);
|
||||
}
|
||||
return M_bck_data != NULL && mpMorf != NULL && mpMorf->getModel() != NULL;
|
||||
}
|
||||
|
||||
/* 00001290-000016E0 .text _create__Q210daObjVyasi5Act_cFv */
|
||||
cPhs_State daObjVyasi::Act_c::_create() {
|
||||
/* Nonmatching */
|
||||
fopAcM_ct(this, daObjVyasi::Act_c);
|
||||
|
||||
cPhs_State res = dComIfG_resLoad(&mPhs, M_arcname);
|
||||
if (res == cPhs_COMPLEATE_e) {
|
||||
if (fopAcM_entrySolidHeap(this, solidHeapCB, 0)) {
|
||||
set_first_process();
|
||||
set_mtx();
|
||||
fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
|
||||
fopAcM_setCullSizeBox(this, -2000.0f, 0.0f, -2000.0f, 2000.0f, 2000.0f, 2000.0f);
|
||||
fopAcM_setCullSizeFar(this, 2.0f);
|
||||
mStts.Init(0xFF, 0xFF, this);
|
||||
mCyl.Set(M_cyl_src);
|
||||
mCyl.SetStts(&mStts);
|
||||
mCyl.SetTgVec((cXyz&)cXyz::Zero);
|
||||
mCyl.OnTgNoHitMark();
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
mCpsStts[i].Init(100, 0xFF, this);
|
||||
mCps[i].Set(M_cps_src);
|
||||
mCps[i].SetStts(&mCpsStts[i]);
|
||||
field_0xDF8[i].mStart = current.pos;
|
||||
field_0xDF8[i].mEnd = current.pos;
|
||||
field_0xDF8[i].mRadius = 100.0f;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
field_0xE84[i].Init(100, 0xFF, this);
|
||||
field_0x1064[i].Set(M_sph_src);
|
||||
field_0x1064[i].SetStts(&field_0xE84[i]);
|
||||
mCyl.SetTgVec((cXyz&)cXyz::Zero);
|
||||
mCyl.OnTgNoHitMark();
|
||||
}
|
||||
|
||||
J3DModel* model = mpMorf->getModel();
|
||||
J3DModelData* modelData = model->getModelData();
|
||||
model->setUserArea((uintptr_t)this);
|
||||
for (u16 i = 0; i < model->getModelData()->getJointNum(); i++) {
|
||||
modelData->getJointNodePointer(i)->setCallBack(JointNodeCallBack);
|
||||
}
|
||||
|
||||
for (u16 i = 0; i < 14; i++) {
|
||||
mJointQuat[i] = ZeroQuat;
|
||||
}
|
||||
|
||||
mLeafScale.set(1.0f, 1.0f, 1.0f);
|
||||
} else {
|
||||
res = cPhs_ERROR_e;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/* 00001D8C-00001DBC .text _delete__Q210daObjVyasi5Act_cFv */
|
||||
bool daObjVyasi::Act_c::_delete() {
|
||||
/* Nonmatching */
|
||||
dComIfG_resDeleteDemo(&mPhs, M_arcname);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 00001DBC-00001E5C .text set_mtx__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::set_mtx() {
|
||||
/* Nonmatching */
|
||||
mpMorf->getModel()->setBaseScale(scale);
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
||||
mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
MTXCopy(mDoMtx_stack_c::get(), mMtx);
|
||||
}
|
||||
|
||||
/* 00001E5C-000025A8 .text calc_dif_angle__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::calc_dif_angle() {
|
||||
/* Nonmatching */
|
||||
for (int i = 0; i < 14; i++) {
|
||||
csXyz target(0, 0, 0);
|
||||
s16 step = 2;
|
||||
if (mState == STATE_SAG_WIND) {
|
||||
if (joint_kind_table[i] == 2) {
|
||||
f32 ratio = mSagRatio * cM_ssin(mWavePhase[i]);
|
||||
target.set(20.0f * ratio, 40.0f * ratio, 40.0f * ratio);
|
||||
} else if (joint_kind_table[i] == 1) {
|
||||
f32 ratio = mSagRatio * cM_ssin(mWavePhase[i]);
|
||||
target.set(120.0f * ratio, 180.0f * ratio, 220.0f * ratio);
|
||||
|
||||
if (i == 1) {
|
||||
target.z += (s16)(-3200.0f + 3200.0f * mSagRatio);
|
||||
}
|
||||
} else if (joint_kind_table[i] == 0) {
|
||||
static csXyz sag_offset_angle[14] = {
|
||||
csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, 0),
|
||||
csXyz(0, 0, 0), csXyz(0, 0, 5000), csXyz(0, 0, 0), csXyz(0, 0, 0), csXyz(0, 0, -5000), csXyz(0, 0, -7000), csXyz(0, 0, -2700),
|
||||
};
|
||||
f32 ratio = mSagRatio * cM_ssin(mWavePhase[i]);
|
||||
target.set(700.0f * ratio, 1700.0f * ratio, 1700.0f * ratio);
|
||||
|
||||
target.x += sag_offset_angle[i].x;
|
||||
target.y += sag_offset_angle[i].y;
|
||||
target.z += sag_offset_angle[i].z;
|
||||
step = 1;
|
||||
}
|
||||
} else if (mState == STATE_TO_NORMAL) {
|
||||
if (mAnmPlaying == 0 && (i == 0 || i == 1 || i == 6)) {
|
||||
target.z = field_0x19CC * cM_ssin(field_0x19D0);
|
||||
}
|
||||
}
|
||||
|
||||
cLib_addCalcAngleS2(&mJointAngle[i].x, target.x, step, 0x4000);
|
||||
cLib_addCalcAngleS2(&mJointAngle[i].y, target.y, step, 0x4000);
|
||||
cLib_addCalcAngleS2(&mJointAngle[i].z, target.z, step, 0x4000);
|
||||
|
||||
if (joint_kind_table[i] == 0) {
|
||||
mWavePhase[i] += (s16)(1.5f * mWaveSpeed[i]);
|
||||
} else {
|
||||
mWavePhase[i] += mWaveSpeed[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 000025A8-00002880 .text quaternion_main__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::quaternion_main() {
|
||||
/* Nonmatching */
|
||||
for (int i = 0; i < 14; i++) {
|
||||
Quaternion quat;
|
||||
quat = ZeroQuat;
|
||||
|
||||
if (mState == STATE_NORMAL && joint_kind_table[i] == 0) {
|
||||
cXyz up(0.0f, 1.0f, 0.0f);
|
||||
cMtx_YrotS(*calc_mtx, -current.angle.y);
|
||||
|
||||
cXyz windDir;
|
||||
MtxPosition(dKyw_get_wind_vec(), &windDir);
|
||||
|
||||
f32 windPow = dKyw_get_wind_pow();
|
||||
cXyz dir = up.outprod(windDir);
|
||||
s16 angle = 1400.0f * windPow * mWindScale;
|
||||
f32 sin = cM_ssin(angle);
|
||||
|
||||
Quaternion windQuat;
|
||||
windQuat.x = sin * dir.x;
|
||||
windQuat.y = sin * dir.y;
|
||||
windQuat.z = sin * dir.z;
|
||||
windQuat.w = cM_scos(angle);
|
||||
|
||||
s16 target = 360.0f * windPow * mWindScale;
|
||||
target = target > 0xDC ? 0xDC : target;
|
||||
cLib_addCalcAngleS2(&mAnimDir[i], target, 4, 0x20);
|
||||
s32 add = (2048.0f * windPow * mWindScale) + cM_rndFX(256.0f);
|
||||
mAnimWave[i] += add;
|
||||
f32 w = cM_ssin(mAnimDir[i]);
|
||||
|
||||
Quaternion animQuat;
|
||||
animQuat.x = w * cM_ssin(mAnimWave[i]);
|
||||
animQuat.y = 0.0f;
|
||||
animQuat.z = w * cM_ssin(mAnimWave[i]);
|
||||
animQuat.w = cM_scos(mAnimDir[i]);
|
||||
mDoMtx_quatMultiply(&windQuat, &animQuat, &quat);
|
||||
}
|
||||
|
||||
if (mNormalCounter == 1) {
|
||||
mJointQuat[i] = quat;
|
||||
} else {
|
||||
mDoMtx_quatSlerp(&mJointQuat[i], &quat, &mJointQuat[i], 0.4f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 00002880-00002938 .text leaf_scale_main__Q210daObjVyasi5Act_cFv */
|
||||
void daObjVyasi::Act_c::leaf_scale_main() {
|
||||
/* Nonmatching */
|
||||
cXyz scale(1.0f, 1.0f, 1.0f);
|
||||
if (mState == STATE_SAG_WIND) {
|
||||
scale.x = 0.35000002f * mSagRatio + 1.0f;
|
||||
scale.y = -0.5f * mSagRatio + 1.0f;
|
||||
scale.z = scale.y;
|
||||
}
|
||||
cLib_addCalc2(&mLeafScale.x, scale.x, 0.5f, 0.5f);
|
||||
cLib_addCalc2(&mLeafScale.y, scale.y, 0.5f, 0.5f);
|
||||
cLib_addCalc2(&mLeafScale.z, scale.z, 0.5f, 0.5f);
|
||||
}
|
||||
|
||||
/* 00002938-000029BC .text _execute__Q210daObjVyasi5Act_cFv */
|
||||
bool daObjVyasi::Act_c::_execute() {
|
||||
/* Nonmatching */
|
||||
if (mState != STATE_NONE) {
|
||||
mAnmPlaying = PlayStopJointAnimation();
|
||||
process_main();
|
||||
set_collision();
|
||||
quaternion_main();
|
||||
calc_dif_angle();
|
||||
leaf_scale_main();
|
||||
set_mtx();
|
||||
fopAcM_rollPlayerCrash(this, 79.0f, 7);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 000029BC-00002A6C .text _draw__Q210daObjVyasi5Act_cFv */
|
||||
bool daObjVyasi::Act_c::_draw() {
|
||||
/* Nonmatching */
|
||||
if (mState != STATE_NONE) {
|
||||
g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &tevStr);
|
||||
g_env_light.setLightTevColorType(mpMorf->getModel(), &tevStr);
|
||||
dComIfGd_setListBG();
|
||||
mpMorf->updateDL();
|
||||
dComIfGd_setList();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
namespace daObjVyasi {
|
||||
|
||||
Reference in New Issue
Block a user