d_a_npc_fa1 100% with weak order, add inlines

This commit is contained in:
LagoLunatic
2025-06-01 19:09:57 -04:00
parent 5369e5f7fa
commit 4e7f5de0f3
9 changed files with 240 additions and 246 deletions
+1 -1
View File
@@ -545,7 +545,7 @@ config.libs = [
Object(NonMatching, "d/actor/d_a_item.cpp"),
Object(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d/actor/d_a_itembase.cpp"),
Object(Matching, "d/actor/d_a_nh.cpp"),
Object(NonMatching, "d/actor/d_a_npc_fa1.cpp"),
Object(Equivalent, "d/actor/d_a_npc_fa1.cpp"), # weak func order
Object(NonMatching, "d/actor/d_a_obj_search.cpp"),
Object(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d/actor/d_a_player.cpp"),
Object(NonMatching, "d/actor/d_a_player_main.cpp"),
+2 -2
View File
@@ -15,7 +15,7 @@ public:
virtual void init(const Vec&, const Mtx&) {}
virtual void recursiveCalc(J3DNode*) {}
virtual void calcTransform(u16, const J3DTransformInfo&) {}
virtual void calc(u16) {}
virtual void calc(u16 jnt_no) {}
void initAnm() {
for (int i = 0; i < 4; i++) {
@@ -68,7 +68,7 @@ public:
}
virtual void recursiveCalc(J3DNode*);
virtual void calcTransform(u16, const J3DTransformInfo&);
virtual void calc(u16);
virtual void calc(u16 jnt_no);
Mtx& getBackupMtx() { return mBackupMtx; }
Vec& getBackupS() { return mBackupS; }
+84 -53
View File
@@ -6,74 +6,105 @@
#include "d/d_bg_s_gnd_chk.h"
#include "d/d_particle.h"
#include "m_Do/m_Do_hostIO.h"
#include "SSystem/SComponent/c_lib.h"
class daNpc_Fa1_McaMorfCallBack1_c : public mDoExt_McaMorfCallBack1_c {
public:
daNpc_Fa1_McaMorfCallBack1_c();
bool execute(unsigned short, J3DTransformInfo*);
bool execute(u16 jnt_no, J3DTransformInfo*);
s16 getNeckAngle() { return mNeckAngle;}
void setNeckAngle(s16 angle) { mNeckAngle = angle; }
u16 getNeckJoint() { return mNeckJoint; }
void setNeckJoint(u16 joint) { mNeckJoint = joint; }
public:
/* 0x04 */ s16 m04;
/* 0x06 */ u16 m06;
/* 0x04 */ s16 mNeckAngle;
/* 0x06 */ u16 mNeckJoint;
};
class daNpc_Fa1_c : public fopNpc_npc_c {
public:
enum ActionType_e {
ActionType_NORMAL_MOVE_e = 0,
ActionType_PLAYER_MOVE_e = 1,
ActionType_ESCAPE_MOVE_e = 2,
ActionType_BOTTLE_APPEAR_MOVE_e = 3,
ActionType_BOTTLE_BABA_WAIT_e = 4,
ActionType_BOTTLE_BABA_MOVE_e = 5,
ActionType_BOTTLE_BABA_MOVE2_e = 6,
ActionType_BIGELF_CHANGE_e = 7,
ActionType_HOVER_MOVE_e = 8,
enum Type_e {
Type_NORMAL_e = 0,
Type_TIMER_e = 1,
Type_LINK_e = 2,
Type_BABA_e = 3,
Type_AREA_e = 4,
Type_LINK_DOWN_e = 5,
Type_HOVER_e = 6,
};
enum MoveType_e {
MoveType_STRAIGHT_e = 0,
MoveType_TURN_e = 1,
MoveType_UP_e = 2,
MoveType_AREAOUTMOVE_e = 3,
enum Mode_e {
Mode_NORMAL_MOVE_e = 0,
Mode_PLAYER_MOVE_e = 1,
Mode_ESCAPE_MOVE_e = 2,
Mode_BOTTLE_APPEAR_MOVE_e = 3,
Mode_BOTTLE_BABA_WAIT_e = 4,
Mode_BOTTLE_BABA_MOVE_e = 5,
Mode_BOTTLE_BABA_MOVE2_e = 6,
Mode_BIGELF_CHANGE_e = 7,
Mode_HOVER_MOVE_e = 8,
};
void checkStatus(unsigned char) {}
void countTime2() {}
void countTimer() {}
void getAngSpeed() {}
void getGroundY() {}
void getMode() {}
void getPlayerR() {}
void getSubMode() {}
void getTimer() {}
void getpLocalPos() {}
enum Normal_SubMode_e {
NormalSubMode_STRAIGHT_e = 0,
NormalSubMode_TURN_e = 1,
NormalSubMode_AREAMOVE_e = 2,
NormalSubMode_AREAOUTMOVE_e = 3,
};
enum Bottle_SubMode_e {
BottleSubMode_UP1_e = 0,
BottleSubMode_DOWN_e = 1,
BottleSubMode_UP2_e = 2,
};
enum BottleBaba_SubMode_e {
BottleBabaSubMode_BABADOWN_e = 0,
BottleBabaSubMode_UP2_e = 1,
};
u8 getMode() { return mMode; }
void setMode(u8 mode) { mMode = mode; }
bool isLinkMode() { return mMode == Mode_PLAYER_MOVE_e; }
void isBabaMode() {}
void isLinkMode() {}
void isTypeArea() {}
void isTypeBaba() {}
void isTypeHover() {}
void isTypeLink() {}
void isTypeLinkDown() {}
void isTypeTimer() {}
void setAngSpeed(short) {}
void setGroundY(float) {}
void setLocalPos(float) {}
void setMode(unsigned char) {}
void setPlayerR(float) {}
void setStatus(unsigned char) {}
void setSubMode(unsigned char) {}
void setTime2(unsigned char) {}
void setTimer(unsigned short) {}
void setTypeNormal() {}
u8 getSubMode() { return mSubMode; }
void setSubMode(u8 submode) { mSubMode = submode; }
bool isTypeTimer() { return mType == Type_TIMER_e; }
bool isTypeLink() { return mType == Type_LINK_e; }
bool isTypeBaba() { return mType == Type_BABA_e; }
bool isTypeArea() { return mType == Type_AREA_e; }
bool isTypeLinkDown() { return mType == Type_LINK_DOWN_e; }
bool isTypeHover() { return mType == Type_HOVER_e; }
void setTypeNormal() { mType = Type_NORMAL_e; }
f32 getGroundY() { return mGroundY; }
void setGroundY(f32 y) { mGroundY = y; }
bool checkStatus(u8 bit) { return cLib_checkBit(mStatus, bit); }
void setStatus(u8 status) { cLib_setBit(mStatus, status); }
void getTimer() {}
void setTimer(u16) {}
void countTimer() {}
void setTime2(u8) {}
void countTime2() {}
void getAngSpeed() {}
void setAngSpeed(s16) {}
f32 getPlayerR() { return mPlayerR; }
void setPlayerR(f32 radius) { mPlayerR = radius; }
void getpLocalPos() {}
void setLocalPos(f32) {}
void setPointLightParam();
int createInit();
BOOL _draw();
BOOL _execute();
BOOL checkBinCatch();
void position_move(float, float);
void position_move(f32, f32);
void BGCheck();
void init_normal_move();
void normal_move();
@@ -133,17 +164,17 @@ public:
/* 0x764 */ fopAc_ac_c* m764;
/* 0x768 */ cXyz m768;
/* 0x774 */ cXyz m774;
/* 0x780 */ f32 m780;
/* 0x784 */ f32 mGroundYPos;
/* 0x780 */ f32 mPlayerR;
/* 0x784 */ f32 mGroundY;
/* 0x788 */ u16 mTimer;
/* 0x78A */ s16 m78A;
/* 0x78C */ s16 m78C;
/* 0x78E */ s16 m78E;
/* 0x790 */ u8 mActionType;
/* 0x790 */ u8 mMode;
/* 0x791 */ u8 mMoveTimer;
/* 0x792 */ u8 mMoveType;
/* 0x793 */ s8 m793;
/* 0x794 */ s8 m794;
/* 0x792 */ u8 mSubMode;
/* 0x793 */ u8 mStatus;
/* 0x794 */ s8 mType;
/* 0x795 */ u8 m795[0x798 - 0x795];
/* 0x798 */ s16 m798;
/* 0x79A */ s16 m79A;
+2 -2
View File
@@ -308,7 +308,7 @@ struct mDoExt_MtxCalcAnmBlendTblOld : public mDoExt_MtxCalcAnmBlendTbl {
class mDoExt_McaMorfCallBack1_c {
public:
virtual ~mDoExt_McaMorfCallBack1_c() {}
virtual bool execute(u16, J3DTransformInfo*) = 0;
virtual bool execute(u16 jnt_no, J3DTransformInfo*) = 0;
};
class mDoExt_McaMorfCallBack2_c {
@@ -334,7 +334,7 @@ public:
virtual ~mDoExt_McaMorf();
void calc();
void calc(u16);
void calc(u16 jnt_no);
void setAnm(J3DAnmTransform* bckAnm, int loopMode, f32 morf, f32 playSpeed, f32 startFrame, f32 endFrame, void* basAnm);
void setMorf(f32);
void update();
+109 -147
View File
@@ -12,7 +12,7 @@
#include "d/d_snap.h"
#include "f_op/f_op_actor_mng.h"
#include "weak_data_1811.h" // IWYU pragma: keep
#include "weak_data_2100_2080.h" // IWYU pragma: keep
/* 800FAFC0-800FB004 .text __ct__16daNpc_Fa1_HIO3_cFv */
@@ -139,26 +139,16 @@ daNpc_Fa1_c::BottleBabaSubFunc_t bottleBabaSubProc[] = {
&daNpc_Fa1_c::up2,
};
/* 800FB174-800FB1BC .text __dt__16daNpc_Fa1_HIO3_cFv */
//daNpc_Fa1_HIO3_c::~daNpc_Fa1_HIO3_c() {
// /* Nonmatching */
//}
//
///* 800FB1BC-800FB204 .text __dt__16daNpc_Fa1_HIO2_cFv */
//daNpc_Fa1_HIO2_c::~daNpc_Fa1_HIO2_c() {
// /* Nonmatching */
//}
/* 800FB204-800FB22C .text __ct__28daNpc_Fa1_McaMorfCallBack1_cFv */
daNpc_Fa1_McaMorfCallBack1_c::daNpc_Fa1_McaMorfCallBack1_c() {
m04 = 0;
m06 = 0;
mNeckAngle = 0;
mNeckJoint = 0;
}
/* 800FB22C-800FB24C .text execute__28daNpc_Fa1_McaMorfCallBack1_cFUsP16J3DTransformInfo */
bool daNpc_Fa1_McaMorfCallBack1_c::execute(unsigned short param_1, J3DTransformInfo* param_2) {
if (param_1 == m06) {
param_2->mRotation.x = m04;
bool daNpc_Fa1_McaMorfCallBack1_c::execute(u16 jnt_no, J3DTransformInfo* param_2) {
if (jnt_no == getNeckJoint()) {
param_2->mRotation.x = mNeckAngle;
}
return TRUE;
}
@@ -176,50 +166,49 @@ void daNpc_Fa1_c::setPointLightParam() {
/* 800FB2B8-800FB514 .text createInit__11daNpc_Fa1_cFv */
int daNpc_Fa1_c::createInit() {
m794 = fopAcM_GetParam(this);
mType = fopAcM_GetParam(this);
m764 = NULL;
// zero() doesn't match.
m768.setall(0.0f);
m793 = 0;
if (m794 == 3) {
setStatus(0);
if (isTypeBaba()) {
init_bottle_baba_wait();
fopAcM_OffStatus(this, fopAcStts_NOCULLEXEC_e);
fopAcM_OnStatus(this, fopAcStts_UNK4000_e);
} else if ((m794 == 2) || (m794 == 5)) {
} else if (isTypeLink() || isTypeLinkDown()) {
init_bottle_appear_move();
fopAcM_OffStatus(this, fopAcStts_NOCULLEXEC_e);
fopAcM_OnStatus(this, fopAcStts_UNK4000_e);
} else if (m794 == 6) {
} else if (isTypeHover()) {
init_hover_move();
fopAcM_OffStatus(this, fopAcStts_NOCULLEXEC_e);
} else {
if (m794 == 4) {
if (isTypeArea()) {
fopAcM_OffStatus(this, fopAcStts_NOCULLEXEC_e);
scale.x = 500.0f;
} else {
scale.x = l_HIO.prm.m10;
}
if (m794 == 1) {
m793 = 1;
if (isTypeTimer()) {
setStatus(1);
fopAcM_OffStatus(this, fopAcStts_NOCULLEXEC_e);
current.angle.y += (s16)(cLib_getRndValue((u16)0, (u16)0xFF) * 0x100);
} else {
m794 = 0;
setTypeNormal();
}
init_normal_move();
}
cXyz local_18(current.pos);
local_18.y += 60.0f;
mGndChk.SetPos(&local_18);
mGroundYPos = dComIfG_Bgsp()->GroundCross(&mGndChk);
if ((m794 != 6) && (mGroundYPos != -G_CM3D_F_INF)) {
home.pos.y = mGroundYPos + 50.0f;
setGroundY(dComIfG_Bgsp()->GroundCross(&mGndChk));
if (!isTypeHover() && getGroundY() != -G_CM3D_F_INF) {
home.pos.y = mGroundY + 50.0f;
}
mStts.Init(0xFF, 0xFF, this);
mCyl.SetStts(&mStts);
mCyl.Set(l_cyl_src);
setMtx();
if (m794 == 3) {
if (isTypeBaba()) {
setPointLightParam();
dKy_efplight_set(&mPointLight);
}
@@ -235,10 +224,9 @@ BOOL daNpc_Fa1_c::_draw() {
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
g_env_light.setLightTevColorType(pJVar1, &tevStr);
mpDoExt_McaMorf->entryDL();
f32 fVar1 = mGroundYPos;
if (fVar1 != -G_CM3D_F_INF) {
dComIfGd_setSimpleShadow(&current.pos, fVar1, 10.0f, &m774, 0, 1.0f,
&dDlst_shadowControl_c::mSimpleTexObj);
if (mGroundY != -G_CM3D_F_INF) {
dComIfGd_setSimpleShadow(&current.pos, mGroundY, 10.0f, &m774, 0, 1.0f,
dDlst_shadowControl_c::getSimpleTex());
}
dSnap_RegistFig(DSNAP_TYPE_FA, this, 1.0f, 1.0f, 1.0f);
return TRUE;
@@ -247,14 +235,14 @@ BOOL daNpc_Fa1_c::_draw() {
/* 800FB5D8-800FB6AC .text _execute__11daNpc_Fa1_cFv */
BOOL daNpc_Fa1_c::_execute() {
cLib_calcTimer(&mTimer);
(this->*moveProc[mActionType])();
(this->*moveProc[getMode()])();
shape_angle.y = current.angle.y;
mpDoExt_McaMorf->play(NULL, 0, 0);
setMtx();
if (m794 == 3) {
if (isTypeBaba()) {
setPointLightParam();
}
if ((mActionType == ActionType_PLAYER_MOVE_e) && (mpEmitter != NULL)) {
if (isLinkMode() && mpEmitter != NULL) {
mpEmitter->mRate = 1.0f;
}
dComIfGp_att_LookRequest(this, 400.0f, 300.0f, -300.0f, 0x6000, 1);
@@ -280,7 +268,7 @@ BOOL daNpc_Fa1_c::checkBinCatch() {
}
/* 800FB730-800FB830 .text position_move__11daNpc_Fa1_cFff */
void daNpc_Fa1_c::position_move(float param_1, float param_2) {
void daNpc_Fa1_c::position_move(f32 param_1, f32 param_2) {
f32 fVar1;
fVar1 = current.pos.y - home.pos.y;
@@ -307,21 +295,14 @@ void daNpc_Fa1_c::position_move(float param_1, float param_2) {
/* 800FB830-800FB904 .text BGCheck__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::BGCheck() {
cM3dGPla* pcVar1;
s32 bVar2;
f32 fVar3;
mGndChk.SetPos(&current.pos);
fVar3 = dComIfG_Bgsp()->GroundCross(&mGndChk);
mGroundYPos = fVar3;
if (fVar3 != -G_CM3D_F_INF) {
pcVar1 = dComIfG_Bgsp()->GetTriPla(mGndChk);
m774.set(pcVar1->mNormal);
bVar2 = dComIfG_Bgsp()->GetRoomId(mGndChk);
current.roomNo = bVar2;
tevStr.mRoomNo = bVar2;
bVar2 = dComIfG_Bgsp()->GetPolyColor(mGndChk);
tevStr.mEnvrIdxOverride = bVar2;
f32 ground_y = dComIfG_Bgsp()->GroundCross(&mGndChk);
setGroundY(ground_y);
if (ground_y != -G_CM3D_F_INF) {
cM3dGPla* pcVar1 = dComIfG_Bgsp()->GetTriPla(mGndChk);
m774.set(*pcVar1->GetNP());
tevStr.mRoomNo = current.roomNo = dComIfG_Bgsp()->GetRoomId(mGndChk);
tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mGndChk);
} else {
m774.set(0.0f, 1.0f, 0.0f);
}
@@ -329,12 +310,12 @@ void daNpc_Fa1_c::BGCheck() {
/* 800FB904-800FB988 .text init_normal_move__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_normal_move() {
mActionType = ActionType_NORMAL_MOVE_e;
setMode(Mode_NORMAL_MOVE_e);
speedF = l_HIO.prm.m08;
gravity = 0.1f;
maxFallSpeed = -1.0f;
mTimer = cLib_getRndValue((u16)l_HIO.prm.m44, (u16)60);
if (m794 == 4) {
if (isTypeArea()) {
init_areaMove();
} else {
init_straight2();
@@ -344,7 +325,7 @@ void daNpc_Fa1_c::init_normal_move() {
/* 800FB988-800FBA68 .text normal_move__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::normal_move() {
speedF = l_HIO.prm.m08;
(this->*moveSubProc[mMoveType])();
(this->*moveSubProc[getSubMode()])();
position_move(10.0f, 1.0f);
BGCheck();
findPlayer();
@@ -352,21 +333,21 @@ void daNpc_Fa1_c::normal_move() {
dComIfG_Ccsp()->Set(&mCyl);
if (mCyl.ChkCoHit()) {
init_get_player_move();
} else if ((!checkBinCatch() && (m793 & 1) != 0) && (mTimer == 0)) {
} else if (!checkBinCatch() && checkStatus(1) && mTimer == 0) {
init_escape_move();
}
}
/* 800FBA68-800FBAB0 .text init_straight__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_straight() {
mMoveType = MoveType_STRAIGHT_e;
setSubMode(NormalSubMode_STRAIGHT_e);
mMoveTimer = cLib_getRndValue((u8)60, (u8)60);
gravity = 0.1f;
}
/* 800FBAB0-800FBAC8 .text init_straight2__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_straight2() {
mMoveType = MoveType_STRAIGHT_e;
setSubMode(NormalSubMode_STRAIGHT_e);
mMoveTimer = 0;
gravity = 1.0f;
}
@@ -384,7 +365,7 @@ void daNpc_Fa1_c::straight() {
/* 800FBBC8-800FBC10 .text init_turn__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_turn() {
mMoveType = MoveType_TURN_e;
setSubMode(NormalSubMode_TURN_e);
mMoveTimer = cLib_getRndValue((u8)60, (u8)60);
gravity = 0.1f;
}
@@ -401,7 +382,7 @@ void daNpc_Fa1_c::turn() {
/* 800FBCA0-800FBCC0 .text init_areaMove__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_areaMove() {
mMoveType = MoveType_UP_e;
setSubMode(NormalSubMode_AREAMOVE_e);
gravity = 1.0f;
m798 = 0;
m79A = 0;
@@ -409,13 +390,11 @@ void daNpc_Fa1_c::init_areaMove() {
/* 800FBCC0-800FBE14 .text areaMove__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::areaMove() {
s16 sVar1;
cXyz local_28 = current.pos - home.pos;
if (local_28.absXZ() > scale.x) {
init_areaOutMove();
} else {
sVar1 = current.angle.y;
s16 sVar1 = current.angle.y;
if (!cLib_calcTimer(&m798)) {
m79A ^= 1;
m798 = cLib_getRndValue(0xF, 0x14) & 0xFF;
@@ -427,7 +406,7 @@ void daNpc_Fa1_c::areaMove() {
/* 800FBE14-800FBE34 .text init_areaOutMove__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_areaOutMove() {
mMoveType = MoveType_AREAOUTMOVE_e;
setSubMode(NormalSubMode_AREAOUTMOVE_e);
gravity = 0.1f;
m798 = 0;
m79A = 0;
@@ -453,15 +432,14 @@ void daNpc_Fa1_c::areaOutMove() {
/* 800FBF94-800FC03C .text init_get_player_move__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_get_player_move() {
mActionType = ActionType_PLAYER_MOVE_e;
setMode(Mode_PLAYER_MOVE_e);
mTimer = l_HIO.prm.m42;
m78A = l_HIO.prm.m3C;
m780 = 60.0f;
setPlayerR(60.0f);
current.angle.y = 0;
mMcaMorfCallback1.m04 = 0;
mMcaMorfCallback1.setNeckAngle(0);
current.pos.y = dComIfGp_getPlayer(0)->current.pos.y;
mDoAud_seStart(JA_SE_OBJ_FAILY_GET, &current.pos, 0,
dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
fopAcM_seStartCurrent(this, JA_SE_OBJ_FAILY_GET, 0);
}
/* 800FC03C-800FC178 .text get_player_move__11daNpc_Fa1_cFv */
@@ -481,12 +459,12 @@ void daNpc_Fa1_c::get_player_move() {
m78A = sVar4;
cXyz* local_18 = &m768;
s16 uVar2 = current.angle.y + 0x4000;
fopAc_ac_c* apdVar3 = dComIfGp_getPlayer(0);
fVar1 = m780;
local_18->x = fVar1 * cM_ssin(uVar2);
local_18->z = fVar1 * cM_scos(uVar2);
fopAc_ac_c* player = dComIfGp_getPlayer(0);
f32 radius = getPlayerR();
local_18->x = radius * cM_ssin(uVar2);
local_18->z = radius * cM_scos(uVar2);
local_18->y += l_HIO.prm.m0C;
current.pos = apdVar3->current.pos + *local_18;
current.pos = player->current.pos + *local_18;
BGCheck();
if (mTimer == 0) {
execItemGet(dItem_RECOVER_FAIRY_e);
@@ -496,7 +474,7 @@ void daNpc_Fa1_c::get_player_move() {
/* 800FC178-800FC1A4 .text init_escape_move__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_escape_move() {
mActionType = ActionType_ESCAPE_MOVE_e;
setMode(Mode_ESCAPE_MOVE_e);
gravity = l_HIO.prm.m18;
maxFallSpeed = l_HIO.prm.m14;
mTimer = l_HIO.prm.m46;
@@ -504,8 +482,6 @@ void daNpc_Fa1_c::init_escape_move() {
/* 800FC1A4-800FC2E0 .text escape_move__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::escape_move() {
s16 sVar2;
speed.y += gravity;
if (speed.y > maxFallSpeed) {
speed.y = maxFallSpeed;
@@ -514,7 +490,7 @@ void daNpc_Fa1_c::escape_move() {
speed.z = speedF * cM_scos(current.angle.y);
fopAcM_posMove(this, NULL);
BGCheck();
sVar2 = mMcaMorfCallback1.m04;
s16 sVar2 = mMcaMorfCallback1.getNeckAngle();
if (sVar2 < 0) {
sVar2 += 0x800;
if (sVar2 > 0) {
@@ -526,7 +502,7 @@ void daNpc_Fa1_c::escape_move() {
sVar2 = 0;
}
}
mMcaMorfCallback1.m04 = sVar2;
mMcaMorfCallback1.setNeckAngle(sVar2);
mCyl.SetC(current.pos);
dComIfG_Ccsp()->Set(&mCyl);
if (mCyl.ChkCoHit()) {
@@ -538,7 +514,7 @@ void daNpc_Fa1_c::escape_move() {
/* 800FC2E0-800FC310 .text init_hover_move__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_hover_move() {
mActionType = ActionType_HOVER_MOVE_e;
setMode(Mode_HOVER_MOVE_e);
gravity = l_HIO.m78.prm.m0C;
maxFallSpeed = -l_HIO.m78.prm.m08;
speedF = 0.0f;
@@ -554,9 +530,9 @@ void daNpc_Fa1_c::hover_move() {
/* 800FC380-800FC3C8 .text init_bottle_appear_move__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_bottle_appear_move() {
mActionType = ActionType_BOTTLE_APPEAR_MOVE_e;
setMode(Mode_BOTTLE_APPEAR_MOVE_e);
init_up1();
if (m794 == 5) {
if (isTypeLinkDown()) {
execItemGet(dItem_RECOVER_FAIRY_e);
}
}
@@ -576,8 +552,8 @@ void daNpc_Fa1_c::bottle_appear_move() {
}
s16 uVar2 = current.angle.y + 0x4000;
fopAc_ac_c* apdVar3 = dComIfGp_getPlayer(0);
m768.x = m780 * cM_ssin(uVar2);
m768.z = m780 * cM_scos(uVar2);
m768.x = mPlayerR * cM_ssin(uVar2);
m768.z = mPlayerR * cM_scos(uVar2);
m768.y += speed.y;
current.pos = apdVar3->current.pos + m768;
if (maxFallSpeed < 0.0f) {
@@ -591,14 +567,14 @@ void daNpc_Fa1_c::bottle_appear_move() {
speed.y = maxFallSpeed;
}
}
m780 += 2.0f;
if (m780 > 60.0f) {
m780 = 60.0f;
mPlayerR += 2.0f;
if (mPlayerR > 60.0f) {
setPlayerR(60.0f);
}
BGCheck();
(this->*bottleMoveSubProc[mMoveType])();
(this->*bottleMoveSubProc[getSubMode()])();
if (mTimer == 0) {
if (m794 != 5) {
if (!isTypeLinkDown()) {
execItemGet(dItem_RECOVER_FAIRY_e);
}
fopAcM_delete(this);
@@ -607,7 +583,7 @@ void daNpc_Fa1_c::bottle_appear_move() {
/* 800FC5A8-800FC6DC .text init_up1__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_up1() {
mMoveType = MoveType_STRAIGHT_e;
setSubMode(BottleSubMode_UP1_e);
mTimer = l_HIO.prm.m4A;
maxFallSpeed = l_HIO.prm.m30;
speed.y = l_HIO.prm.m28;
@@ -617,7 +593,7 @@ void daNpc_Fa1_c::init_up1() {
m78E = 0;
fopAc_ac_c* apdVar3 = dComIfGp_getPlayer(0);
m768 = current.pos - apdVar3->current.pos;
m780 = m768.absXZ();
setPlayerR(m768.absXZ());
current.angle.y = cM_atan2s(m768.x, m768.z) + -0x4000;
}
@@ -630,7 +606,7 @@ void daNpc_Fa1_c::up1() {
/* 800FC70C-800FC730 .text init_down__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_down() {
mMoveType = MoveType_TURN_e;
setSubMode(BottleSubMode_DOWN_e);
m78C = l_HIO.prm.m4C;
m78E = l_HIO.prm.m4E;
}
@@ -644,10 +620,9 @@ void daNpc_Fa1_c::down() {
/* 800FC768-800FC7E0 .text init_up2__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_up2() {
mMoveType = MoveType_UP_e;
setSubMode(BottleSubMode_UP2_e);
maxFallSpeed = l_HIO.prm.m2C;
mDoAud_seStart(JA_SE_OBJ_BOTTLE_FAILY, &current.pos, 0,
dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
fopAcM_seStartCurrent(this, JA_SE_OBJ_BOTTLE_FAILY, 0);
}
/* 800FC7E0-800FC7E4 .text up2__11daNpc_Fa1_cFv */
@@ -657,7 +632,7 @@ void daNpc_Fa1_c::up2() {
/* 800FC7E4-800FC81C .text init_bottle_baba_wait__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_bottle_baba_wait() {
mActionType = ActionType_BOTTLE_BABA_WAIT_e;
setMode(Mode_BOTTLE_BABA_WAIT_e);
speed.setall(0.0f);
speedF = 0.0f;
maxFallSpeed = 0.0f;
@@ -674,7 +649,7 @@ void daNpc_Fa1_c::bottle_baba_wait() {
/* 800FC848-800FC8E4 .text init_bottle_baba_move__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_bottle_baba_move() {
mActionType = ActionType_BOTTLE_BABA_MOVE_e;
setMode(Mode_BOTTLE_BABA_MOVE_e);
fopAcM_SearchByName(PROC_NPC_BA1, &m764);
mTimer = l_HIO.m50.prm.m22;
speedF = l_HIO.m50.prm.m08;
@@ -713,7 +688,7 @@ void daNpc_Fa1_c::bottle_baba_move() {
}
current.pos += speed;
BGCheck();
u8 dVar1 = mMoveType;
u8 dVar1 = getSubMode();
(this->*bottleBabaSubProc[dVar1])();
if ((dVar1 == 1) && (current.pos.y > m764->current.pos.y + 150.0f)) {
fopAcM_delete(this);
@@ -723,7 +698,7 @@ void daNpc_Fa1_c::bottle_baba_move() {
/* 800FCA94-800FCAF4 .text init_bottle_baba_move2__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_bottle_baba_move2() {
mActionType = ActionType_BOTTLE_BABA_MOVE2_e;
setMode(Mode_BOTTLE_BABA_MOVE2_e);
m764 = dComIfGp_getPlayer(0);
speedF = l_HIO.m50.prm.m08;
m798 = 0;
@@ -757,7 +732,7 @@ void daNpc_Fa1_c::bottle_baba_move2() {
}
current.pos += speed;
BGCheck();
(this->*bottleBabaSubProc[mMoveType])();
(this->*bottleBabaSubProc[getSubMode()])();
if ((current.pos.y > m764->current.pos.y + 180.0f)) {
init_bottle_baba_move();
}
@@ -766,13 +741,12 @@ void daNpc_Fa1_c::bottle_baba_move2() {
/* 800FCC94-800FCD28 .text init_baba_down__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_baba_down() {
mMoveType = MoveType_STRAIGHT_e;
setSubMode(BottleBabaSubMode_BABADOWN_e);
speed.y = 0.0f;
maxFallSpeed = m79C;
gravity = l_HIO.m50.prm.m1C;
if (mActionType == ActionType_BOTTLE_BABA_MOVE_e) {
mDoAud_seStart(JA_SE_OBJ_BA_FAILY_2, &current.pos, 0,
dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
if (getMode() == Mode_BOTTLE_BABA_MOVE_e) {
fopAcM_seStartCurrent(this, JA_SE_OBJ_BA_FAILY_2, 0);
}
}
@@ -785,17 +759,16 @@ void daNpc_Fa1_c::baba_down() {
/* 800FCD5C-800FCDD8 .text init_baba_up__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_baba_up() {
mMoveType = MoveType_TURN_e;
setSubMode(BottleBabaSubMode_UP2_e);
maxFallSpeed = m7A0;
if (mActionType == ActionType_BOTTLE_BABA_MOVE2_e) {
mDoAud_seStart(JA_SE_OBJ_BA_FAILY_1, &current.pos, 0,
dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
if (getMode() == Mode_BOTTLE_BABA_MOVE2_e) {
fopAcM_seStartCurrent(this, JA_SE_OBJ_BA_FAILY_1, 0);
}
}
/* 800FCDD8-800FCE7C .text init_bigelf_change__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::init_bigelf_change() {
mActionType = ActionType_BIGELF_CHANGE_e;
setMode(Mode_BIGELF_CHANGE_e);
fopAcM_OnStatus(this, fopAcStts_UNK4000_e);
speedF = l_HIO.m78.prm.m14;
speed.x = speedF * cM_ssin(current.angle.y);
@@ -816,49 +789,43 @@ void daNpc_Fa1_c::bigelf_change() {
/* 800FCF4C-800FD050 .text findPlayer__11daNpc_Fa1_cFv */
void daNpc_Fa1_c::findPlayer() {
/* Nonmatching */
s16 sVar1;
s16 sVar2;
s16 sVar4;
s16 sVar6;
cXyz local_28;
fopAc_ac_c* apdVar3 = dComIfGp_getPlayer(0);
fopAc_ac_c* player = dComIfGp_getPlayer(0);
local_28 = apdVar3->current.pos - current.pos;
sVar2 = cM_atan2s(local_28.x, local_28.z) - current.angle.y;
sVar1 = mMcaMorfCallback1.m04;
if (sVar2 < 0) {
if (sVar2 < -0x4000) {
sVar2 = -0x4000;
cXyz local_28 = player->current.pos - current.pos;
s16 r4 = cM_atan2s(local_28.x, local_28.z) - current.angle.y;
s16 r3 = mMcaMorfCallback1.getNeckAngle();
if (r4 < 0) {
if (r4 < -0x4000) {
r4 = -0x4000;
}
sVar4 = ((sVar2 - sVar1) >> 2);
if (sVar4 < -0x800) {
sVar4 = -0x800;
s16 r0 = ((s16)(r4 - r3) / 4);
if (r0 < -0x800) {
r0 = -0x800;
}
sVar6 = sVar1 + sVar4;
if (sVar6 < sVar2) {
sVar6 = sVar2;
r3 += r0;
if (r3 < r4) {
r3 = r4;
}
} else {
if (sVar2 > 0x4000) {
sVar2 = 0x4000;
if (r4 > 0x4000) {
r4 = 0x4000;
}
sVar4 = ((sVar2 - sVar1) >> 2);
if (sVar4 > 0x800) {
sVar4 = 0x800;
s16 r0 = ((s16)(r4 - r3) / 4);
if (r0 > 0x800) {
r0 = 0x800;
}
sVar6 = sVar1 + sVar4;
if (sVar6 > sVar2) {
sVar6 = sVar2;
r3 += r0;
if (r3 > r4) {
r3 = r4;
}
}
mMcaMorfCallback1.m04 = sVar6;
mMcaMorfCallback1.setNeckAngle(r3);
}
/* 800FD050-800FD0F0 .text _delete__11daNpc_Fa1_cFv */
BOOL daNpc_Fa1_c::_delete() {
mSparklePtclCallback.end();
if (m794 == 3) {
if (isTypeBaba()) {
dKy_efplight_cut(&mPointLight);
}
if (l_hio_counter != 0) {
@@ -915,8 +882,8 @@ int daNpc_Fa1_c::CreateHeap() {
mpDoExt_McaMorf = NULL;
return false;
} else {
mMcaMorfCallback1.m06 = pModelData->getJointName()->getIndex("neck");
mMcaMorfCallback1.m04 = 0;
mMcaMorfCallback1.setNeckJoint(pModelData->getJointName()->getIndex("neck"));
mMcaMorfCallback1.setNeckAngle(0);
return true;
}
}
@@ -925,10 +892,10 @@ int daNpc_Fa1_c::CreateHeap() {
void daNpc_Fa1_c::setMtx() {
J3DModel* pJVar5 = mpDoExt_McaMorf->getModel();
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
mDoMtx_YrotM(mDoMtx_stack_c::get(), shape_angle.y);
mDoMtx_stack_c::YrotM(shape_angle.y);
pJVar5->setBaseTRMtx(mDoMtx_stack_c::get());
mpDoExt_McaMorf->calc();
MtxP pMVar4 = mpDoExt_McaMorf->getModel()->getAnmMtx(mMcaMorfCallback1.m06);
MtxP pMVar4 = mpDoExt_McaMorf->getModel()->getAnmMtx(mMcaMorfCallback1.getNeckJoint());
attention_info.position.set(pMVar4[0][3], pMVar4[1][3], pMVar4[2][3]);
eyePos = attention_info.position;
}
@@ -958,11 +925,6 @@ BOOL daNpc_Fa1_IsDelete(daNpc_Fa1_c*) {
return TRUE;
}
/* 800FD764-800FD7D8 .text __dt__15daNpc_Fa1_HIO_cFv */
//daNpc_Fa1_HIO_c::~daNpc_Fa1_HIO_c() {
// /* Nonmatching */
//}
static actor_method_class l_daNpc_Fa1_Method = {
(process_method_func)daNpc_Fa1_Create,
(process_method_func)daNpc_Fa1_Delete,
+5 -6
View File
@@ -14,6 +14,7 @@
#include "d/actor/d_a_boko.h"
#include "d/actor/d_a_demo_item.h"
#include "d/actor/d_a_itembase.h"
#include "d/actor/d_a_npc_fa1.h"
#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"
@@ -2002,11 +2003,9 @@ BOOL daPy_lk_c::dProcBottleOpenFairy() {
daPy_HIO_bottle_c0::m.field_0xA,
daPy_HIO_bottle_c0::m.field_0x54
);
} else {
if (frameCtrl.checkPass(32.0f)) {
m355E = 0;
mRightHandIdx = 8;
}
} else if (frameCtrl.checkPass(32.0f)) {
m355E = 0;
mRightHandIdx = 8;
}
} else if (frameCtrl.getRate() < 0.01f) {
dComIfGp_evmng_cutEnd(mStaffIdx);
@@ -2021,7 +2020,7 @@ BOOL daPy_lk_c::dProcBottleOpenFairy() {
} else {
dComIfGs_setEquipBottleItemEmpty(dItemBtn_Z_e);
}
fopAcM_fastCreate(PROC_NPC_FA1, 3, &mLeftHandPos, fopAcM_GetRoomNo(this), &shape_angle);
fopAcM_fastCreate(PROC_NPC_FA1, daNpc_Fa1_c::Type_BABA_e, &mLeftHandPos, fopAcM_GetRoomNo(this), &shape_angle);
}
}
}
+2 -1
View File
@@ -10,6 +10,7 @@
#include "d/actor/d_a_player_main.h"
#include "d/actor/d_a_demo_item.h"
#include "d/actor/d_a_npc_fa1.h"
#include "d/actor/d_a_obj_movebox.h"
#include "d/actor/d_a_player_HIO.h"
#include "d/actor/d_a_sea.h"
@@ -5517,7 +5518,7 @@ BOOL daPy_lk_c::changeDeadProc() {
(!checkModeFlg(ModeFlg_DAMAGE)))
{
if (dComIfGs_checkBottle(dItem_FAIRY_BOTTLE_e)) {
makeFairy(&current.pos, 5);
makeFairy(&current.pos, daNpc_Fa1_c::Type_LINK_DOWN_e);
dComIfGs_setBottleItemIn(dItem_FAIRY_BOTTLE_e, dItem_EMPTY_BOTTLE_e);
return false;
}
+4 -3
View File
@@ -4,6 +4,7 @@
//
#include "f_op/f_op_actor_mng.h"
#include "d/actor/d_a_npc_fa1.h"
#include "f_op/f_op_actor.h"
#include "f_op/f_op_scene_mng.h"
#include "f_op/f_op_camera.h"
@@ -986,7 +987,7 @@ fpc_ProcID fopAcM_createItem(cXyz* pos, int i_itemNo, int i_itemBitNo, int roomN
switch (i_itemNo) {
case dItem_RECOVER_FAIRY_e:
return fopAcM_create(PROC_NPC_FA1, 1, pos, roomNo, angle, scale);
return fopAcM_create(PROC_NPC_FA1, daNpc_Fa1_c::Type_TIMER_e, pos, roomNo, angle, scale);
case dItem_TRIPLE_HEART_e:
// Make the two extra hearts first, then fall-through to make the third heart as normal.
for (int i = 0; i < 2; i++) {
@@ -1025,7 +1026,7 @@ void* fopAcM_fastCreateItem2(cXyz* pos, int i_itemNo, int i_itemBitNo, int roomN
switch (i_itemNo) {
case dItem_RECOVER_FAIRY_e:
return fopAcM_fastCreate(PROC_NPC_FA1, 1, pos, roomNo, angle, scale);
return fopAcM_fastCreate(PROC_NPC_FA1, daNpc_Fa1_c::Type_TIMER_e, pos, roomNo, angle, scale);
case dItem_TRIPLE_HEART_e:
// Make the two extra hearts first, then fall-through to make the third heart as normal.
for (i = 0; i < 2; i++) {
@@ -1086,7 +1087,7 @@ void* fopAcM_fastCreateItem(cXyz* pos, int i_itemNo, int roomNo, csXyz* angle, c
csXyz prmAngle;
switch (i_itemNo) {
case dItem_RECOVER_FAIRY_e:
item = (daItem_c*)fopAcM_fastCreate(PROC_NPC_FA1, 1, pos, roomNo, angle, scale);
item = (daItem_c*)fopAcM_fastCreate(PROC_NPC_FA1, daNpc_Fa1_c::Type_TIMER_e, pos, roomNo, angle, scale);
return item;
case dItem_TRIPLE_HEART_e:
// Make the two extra hearts first, then fall-through to make the third heart as normal.
+31 -31
View File
@@ -1233,7 +1233,7 @@ ERROR_EXIT:
}
/* 80012A2C-80012D78 .text calc__14mDoExt_McaMorfFUs */
void mDoExt_McaMorf::calc(u16 param_0) {
void mDoExt_McaMorf::calc(u16 jnt_no) {
if (!mpModel) {
return;
}
@@ -1243,37 +1243,37 @@ void mDoExt_McaMorf::calc(u16 param_0) {
if (mpTransformInfo == NULL) {
infoPtr = &info1;
} else {
infoPtr = &mpTransformInfo[param_0];
infoPtr = &mpTransformInfo[jnt_no];
}
Quaternion quat1;
Quaternion* quatPtr;
if (mpQuat == NULL) {
quatPtr = &quat1;
} else {
quatPtr = &mpQuat[param_0];
quatPtr = &mpQuat[jnt_no];
}
if (!mpAnm) {
*infoPtr = mpModel->getModelData()->getJointNodePointer(param_0)->getTransformInfo();
*infoPtr = mpModel->getModelData()->getJointNodePointer(jnt_no)->getTransformInfo();
if (mpCallback1) {
mpCallback1->execute(param_0, infoPtr);
mpCallback1->execute(jnt_no, infoPtr);
}
JMAEulerToQuat(infoPtr->mRotation.x, infoPtr->mRotation.y, infoPtr->mRotation.z, quatPtr);
calcTransform(param_0, *infoPtr);
calcTransform(jnt_no, *infoPtr);
} else if (mCurMorf >= 1.0f || !mpTransformInfo || !mpQuat) {
mpAnm->getTransform(param_0, infoPtr);
mpAnm->getTransform(jnt_no, infoPtr);
if (mpCallback1) {
mpCallback1->execute(param_0, infoPtr);
mpCallback1->execute(jnt_no, infoPtr);
}
JMAEulerToQuat(infoPtr->mRotation.x, infoPtr->mRotation.y, infoPtr->mRotation.z, quatPtr);
calcTransform(param_0, *infoPtr);
calcTransform(jnt_no, *infoPtr);
} else {
f32 f31 = (mCurMorf - mPrevMorf) / (1.0f - mPrevMorf);
f32 f30 = 1.0f - f31;
J3DTransformInfo info2;
Quaternion quat2;
mpAnm->getTransform(param_0, &info2);
mpAnm->getTransform(jnt_no, &info2);
if (mpCallback1) {
mpCallback1->execute(param_0, &info2);
mpCallback1->execute(jnt_no, &info2);
}
JMAEulerToQuat(info2.mRotation.x, info2.mRotation.y, info2.mRotation.z, &quat2);
JMAQuatLerp(quatPtr, &quat2, f31, quatPtr);
@@ -1285,10 +1285,10 @@ void mDoExt_McaMorf::calc(u16 param_0) {
infoPtr->mScale.x = infoPtr->mScale.x * f30 + info2.mScale.x * f31;
infoPtr->mScale.y = infoPtr->mScale.y * f30 + info2.mScale.y * f31;
infoPtr->mScale.z = infoPtr->mScale.z * f30 + info2.mScale.z * f31;
mDoExt_setJ3DData(mtx, infoPtr, param_0);
mDoExt_setJ3DData(mtx, infoPtr, jnt_no);
}
if (mpCallback2) {
mpCallback2->execute(param_0);
mpCallback2->execute(jnt_no);
}
}
@@ -1521,7 +1521,7 @@ void mDoExt_McaMorf2::ERROR_EXIT() {
}
/* 80013770-80013E50 .text calc__15mDoExt_McaMorf2FUs */
void mDoExt_McaMorf2::calc(u16 param_0) {
void mDoExt_McaMorf2::calc(u16 jnt_no) {
/* Nonmatching - regalloc (fixing the regalloc causes an instruction swap on f30 = mAnmRate) */
if (!mpModel) {
return;
@@ -1534,7 +1534,7 @@ void mDoExt_McaMorf2::calc(u16 param_0) {
if (mpTransformInfo == NULL) {
infoPtr = &sp88;
} else {
infoPtr = &mpTransformInfo[param_0];
infoPtr = &mpTransformInfo[jnt_no];
}
Quaternion sp48[2];
Quaternion sp28[2];
@@ -1544,29 +1544,29 @@ void mDoExt_McaMorf2::calc(u16 param_0) {
if (mpQuat == NULL) {
quatPtr = &sp18;
} else {
quatPtr = &mpQuat[param_0];
quatPtr = &mpQuat[jnt_no];
}
Mtx mtx;
f32 f31;
f32 f30;
if (!mpAnm1) {
*infoPtr = mpModel->getModelData()->getJointNodePointer(param_0)->getTransformInfo();
*infoPtr = mpModel->getModelData()->getJointNodePointer(jnt_no)->getTransformInfo();
if (mpCallback1) {
mpCallback1->execute(param_0, infoPtr);
mpCallback1->execute(jnt_no, infoPtr);
}
JMAEulerToQuat(infoPtr->mRotation.x, infoPtr->mRotation.y, infoPtr->mRotation.z, quatPtr);
calcTransform(param_0, *infoPtr);
calcTransform(jnt_no, *infoPtr);
} else if (mCurMorf >= 1.0f || !mpTransformInfo || !mpQuat) {
mpAnm1->getTransform(param_0, &spD8[0]);
mpAnm1->getTransform(jnt_no, &spD8[0]);
if (!mpAnm2) {
if (mpCallback1) {
mpCallback1->execute(param_0, &spD8[0]);
mpCallback1->execute(jnt_no, &spD8[0]);
}
JMAEulerToQuat(spD8[0].mRotation.x, spD8[0].mRotation.y, spD8[0].mRotation.z, quatPtr);
calcTransform(param_0, spD8[0]);
calcTransform(jnt_no, spD8[0]);
*infoPtr = spD8[0];
} else {
mpAnm2->getTransform(param_0, &spD8[1]);
mpAnm2->getTransform(jnt_no, &spD8[1]);
f31 = 1.0f - mAnmRate;
f30 = mAnmRate;
infoPtr->mScale.x = spD8[0].mScale.x * f31 + spD8[1].mScale.x * f30;
@@ -1580,14 +1580,14 @@ void mDoExt_McaMorf2::calc(u16 param_0) {
}
JMAQuatLerp(&sp48[0], &sp48[1], f30 / (f31 + f30), quatPtr);
mDoMtx_quat(mtx, quatPtr);
mDoExt_setJ3DData(mtx, infoPtr, param_0);
mDoExt_setJ3DData(mtx, infoPtr, jnt_no);
}
} else if (!mpAnm2) {
f30 = (mCurMorf - mPrevMorf) / (1.0f - mPrevMorf);
f31 = 1.0f - f30;
mpAnm1->getTransform(param_0, &sp68);
mpAnm1->getTransform(jnt_no, &sp68);
if (mpCallback1) {
mpCallback1->execute(param_0, &sp68);
mpCallback1->execute(jnt_no, &sp68);
}
JMAEulerToQuat(sp68.mRotation.x, sp68.mRotation.y, sp68.mRotation.z, &sp08);
JMAQuatLerp(quatPtr, &sp08, f30, quatPtr);
@@ -1598,10 +1598,10 @@ void mDoExt_McaMorf2::calc(u16 param_0) {
infoPtr->mScale.x = infoPtr->mScale.x * f31 + sp68.mScale.x * f30;
infoPtr->mScale.y = infoPtr->mScale.y * f31 + sp68.mScale.y * f30;
infoPtr->mScale.z = infoPtr->mScale.z * f31 + sp68.mScale.z * f30;
mDoExt_setJ3DData(mtx, infoPtr, param_0);
mDoExt_setJ3DData(mtx, infoPtr, jnt_no);
} else {
mpAnm1->getTransform(param_0, &spD8[0]);
mpAnm2->getTransform(param_0, &spD8[1]);
mpAnm1->getTransform(jnt_no, &spD8[0]);
mpAnm2->getTransform(jnt_no, &spD8[1]);
f31 = 1.0f - mAnmRate;
f30 = mAnmRate;
sp68.mScale.x = spD8[0].mScale.x * f31 + spD8[1].mScale.x * f30;
@@ -1626,10 +1626,10 @@ void mDoExt_McaMorf2::calc(u16 param_0) {
infoPtr->mScale.y = infoPtr->mScale.y * f30 + sp68.mScale.y * f31;
infoPtr->mScale.z = infoPtr->mScale.z * f30 + sp68.mScale.z * f31;
mDoMtx_quat(mtx, quatPtr);
mDoExt_setJ3DData(mtx, infoPtr, param_0);
mDoExt_setJ3DData(mtx, infoPtr, jnt_no);
}
if (mpCallback2) {
mpCallback2->execute(param_0);
mpCallback2->execute(jnt_no);
}
}