summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
author123456789758 <205478182+123456789758@users.noreply.github.com>2026-05-22 00:21:27 -0400
committerGitHub <noreply@github.com>2026-05-22 00:21:27 -0400
commit02b81a670b1ee28c1fbb172fc2d43bfb659e06b7 (patch)
tree4cdfb8b48a84321c62b0e5cc77cd5a3dcd110602 /src
parentab5659b2016b4040424198f2f33080e125182f21 (diff)
d_a_npc_md - 99% matching (#896)
Co-authored-by: ‎ ‎ ‎ <‎ ‎ ‎>
Diffstat (limited to 'src')
-rw-r--r--src/d/actor/d_a_npc_md.cpp4467
1 files changed, 3590 insertions, 877 deletions
diff --git a/src/d/actor/d_a_npc_md.cpp b/src/d/actor/d_a_npc_md.cpp
index be79909f..b1347911 100644
--- a/src/d/actor/d_a_npc_md.cpp
+++ b/src/d/actor/d_a_npc_md.cpp
@@ -1,6 +1,6 @@
/**
* d_a_npc_md.cpp
- * Player - Medli
+ * Player - Medli / リト族(メドリ) ("Rito (Medli)" (Ritozoku (Medli)))
*/
#include "d/dolzel_rel.h" // IWYU pragma: keep
@@ -13,6 +13,7 @@
#include "m_Do/m_Do_mtx.h"
#include "d/actor/d_a_player_main.h"
#include "d/d_snap.h"
+#include "f_op/f_op_camera.h"
#include "d/actor/d_a_ship.h"
#include "d/d_kankyo_wether.h"
#include "d/d_camera.h"
@@ -160,7 +161,6 @@ static dCcD_SrcCyl l_wind_cyl_src = {
}},
};
-
/* 000000EC-0000013C .text __ct__15daNpc_Md_HIO6_cFv */
daNpc_Md_HIO6_c::daNpc_Md_HIO6_c() {
m04 = 500.0f;
@@ -182,14 +182,13 @@ daNpc_Md_HIO5_c::daNpc_Md_HIO5_c() {
/* 00000164-00000188 .text __ct__15daNpc_Md_HIO4_cFv */
daNpc_Md_HIO4_c::daNpc_Md_HIO4_c() {
- /* Nonmatching */
m4 = 86.0f;
m8 = 0;
}
/* 00000188-000001F4 .text __ct__15daNpc_Md_HIO3_cFv */
daNpc_Md_HIO3_c::daNpc_Md_HIO3_c() {
- m04 = 0.8f;
+ m04 = DEMO_SELECT(1.0f, 0.8f);
m08 = 0.2f;
m0C = -5.0f;
m10 = -5.0f;
@@ -197,10 +196,10 @@ daNpc_Md_HIO3_c::daNpc_Md_HIO3_c() {
m18 = 0;
m1A = 0;
m1C = 0;
- m1E = 3800;
- m20 = 5800;
+ m1E = DEMO_SELECT(3000, 3800);
+ m20 = DEMO_SELECT(6000, 5800);
m22 = 0x7FFF;
- m24 = -0x7FFF;
+ m24 = DEMO_SELECT(5800, -0x7FFF);
}
/* 000001F4-00000274 .text __ct__15daNpc_Md_HIO2_cFv */
@@ -331,7 +330,7 @@ s16 daNpc_Md_c::XyCheckCB(int i_itemBtn) {
return TRUE;
}
if (selectItemNo == dItem_GOLDEN_FEATHER_e) {
- if (!dComIfGs_isEventBit(dSv_event_flag_c::UNK_2E40) || (dComIfGs_isEventBit(dSv_event_flag_c::UNK_2E40) && m_seaTalk)) {
+ if (!dComIfGs_isEventBit(dSv_event_flag_c::UNK_2E40) || (dComIfGs_isEventBit(dSv_event_flag_c::UNK_2E40) && isSeaTalk())) {
return TRUE;
}
}
@@ -373,11 +372,11 @@ cPhs_State daNpc_Md_c::create() {
m313D = 0;
strcpy(mModelArcName, l_arc_name);
int heapSizeIdx = 0;
-
+
fopAcM_ct_Retail(this, daNpc_Md_c);
-
- mType = fopAcM_GetParam(this) >> 0x08;
- if ((int)mType == -2) { // Bug: Comparing unsigned value with -2 is always false.
+
+ setTalkType(fopAcM_GetParam(this) >> 0x08);
+ if ((int)getTalkType() == -2) { // !@bug: Comparing unsigned value with -2 is always false.
dComIfGs_onEventBit(dSv_event_flag_c::UNK_1620);
} else {
if (dComIfGs_isCollect(0, 2)) {
@@ -418,22 +417,22 @@ cPhs_State daNpc_Md_c::create() {
return cPhs_ERROR_e;
}
}
-
+
if (!dComIfGs_isEventBit(dSv_event_flag_c::UNK_2E04) && dComIfGs_isEventBit(dSv_event_flag_c::UNK_1608)) {
setTypeShipRide();
strcpy(mModelArcName, l_arc_name_ship);
heapSizeIdx = 1;
}
-
+
cPhs_State phase_state = dComIfG_resLoad(&mPhase, mModelArcName);
m313D = 1;
if (phase_state == cPhs_COMPLEATE_e) {
fopAcM_ct_Demo(this, daNpc_Md_c);
-
+
if (dComIfGp_getCb1Player() != NULL) {
return cPhs_ERROR_e;
}
-
+
static int l_heep_size[] = {
0x7660,
0x61C0,
@@ -446,35 +445,30 @@ cPhs_State daNpc_Md_c::create() {
#endif
return cPhs_ERROR_e;
}
-
+
if (isTypeM_Dai()) {
u8 flag = dComIfGs_getPlayerPriestFlag();
if (flag == 2) {
- dComIfGs_setRestartOption(
- &dComIfGs_getPlayerPriestPos(),
- dComIfGs_getPlayerPriestRotate(),
- dComIfGs_getPlayerPriestRoomNo(),
- 2
- );
+ dComIfGs_setRestartOption(&dComIfGs_getPlayerPriestPos(), dComIfGs_getPlayerPriestRotate(), dComIfGs_getPlayerPriestRoomNo(), 2);
}
checkRestart(2);
}
-
- fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
-
+
+ fopAcM_SetMtx(this, getModel()->getBaseTRMtx());
+
if (l_HIO.mNo < 0) {
l_HIO.mNo = mDoHIO_createChild("リト族(メドリ)", &l_HIO); // "Rito (Medli)" (Ritozoku (Medli))
l_HIO.mpActor = this;
}
-
+
if (!init()) {
return cPhs_ERROR_e;
}
-
+
setBaseMtx();
fopAcM_setStageLayer(this);
}
-
+
return phase_state;
}
@@ -487,7 +481,7 @@ static BOOL nodeCallBack(J3DNode* node, int calcTiming) {
if (i_this) {
static cXyz l_offsetAttPos(0.0f, 0.0f, 0.0f);
static cXyz l_offsetEyePos(15.0f, 0.0f, 0.0f);
-
+
s32 jntNo = joint->getJntNo();
mDoMtx_stack_c::copy(model->getAnmMtx(jntNo));
mDoMtx_stack_c::multVec(&l_offsetAttPos, &i_this->getAttentionBasePos());
@@ -517,7 +511,8 @@ static BOOL waistNodeCallBack(J3DNode* node, int calcTiming) {
daNpc_Md_c* i_this = (daNpc_Md_c*)model->getUserArea();
if (i_this) {
s32 jntNo = joint->getJntNo();
- mDoMtx_multVecArray(model->getAnmMtx(jntNo), waistVecDat, i_this->getPHairWall(), ARRAY_SIZE(waistVecDat));
+ MtxP r3 = model->getAnmMtx(jntNo);
+ mDoMtx_multVecArray(r3, waistVecDat, i_this->getPHairWall(), ARRAY_SIZE(waistVecDat));
mDoMtx_stack_c::copy(model->getAnmMtx(jntNo));
if (i_this->checkStatus(daNpc_Md_c::daMdStts_UNK4000)) {
mDoMtx_stack_c::XrotM(i_this->getWaistRotY());
@@ -561,10 +556,10 @@ static BOOL armNodeCallBack(J3DNode* node, int calcTiming) {
static BOOL hairCross(cXyz* i_r3, cXyz* i_r4, cXyz* i_r5) {
cM3dGTri r1_198(&i_r3[0], &i_r3[1], &i_r3[2]);
cM3dGTri r1_160(&i_r3[1], &i_r3[3], &i_r3[2]);
-
+
cM3dGLin r1_144;
r1_144.SetStartEnd(*i_r4, *i_r5);
-
+
cXyz r1_138;
if (r1_198.cross(&r1_144, &r1_138, true, false)) {
r1_198.Up(2.0f);
@@ -595,7 +590,7 @@ static BOOL hairCross(cXyz* i_r3, cXyz* i_r4, cXyz* i_r5) {
return TRUE;
}
}
-
+
return FALSE;
}
@@ -667,7 +662,7 @@ static BOOL hairNodeCallBack(J3DNode* node, int calcTiming) {
if (i_this->getHairJntNum(i) != jntNo) {
continue;
}
-
+
MtxP mtx = model->getAnmMtx(jntNo);
if (!i_this->checkBitHairMode(HairModeMaskData[i])) {
i_this->setBitHairMode(HairModeMaskData[i]);
@@ -675,12 +670,12 @@ static BOOL hairNodeCallBack(J3DNode* node, int calcTiming) {
hairPos->set(mtx[0][3], mtx[1][3], mtx[2][3]);
f32* hairDist = i_this->getPHairDist(i);
cXyz* r29 = i_this->getPHairVec(i);
- *r29 = (*hairPos - *i_this->getPHairPos(i-1));
+ *r29 = (*hairPos - *i_this->getPHairPos(i - 1));
*hairDist = r29->abs();
break;
}
-
- cXyz* r25 = i_this->getPHairPos(i-1);
+
+ cXyz* r25 = i_this->getPHairPos(i - 1);
cXyz* r28 = i_this->getPHairPos(i);
cXyz* r24 = i_this->getPHairVec(i);
if (i <= 1) {
@@ -690,9 +685,9 @@ static BOOL hairNodeCallBack(J3DNode* node, int calcTiming) {
*r24 = (*r28 - *r25);
break;
}
-
+
f32* hairDist = i_this->getPHairDist(i);
- cXyz* r22 = i_this->getPHairVec(i-1);
+ cXyz* r22 = i_this->getPHairVec(i - 1);
cXyz r1_e8;
cXyz r1_dc;
cXyz r1_d0 = *r28;
@@ -713,8 +708,8 @@ static BOOL hairNodeCallBack(J3DNode* node, int calcTiming) {
r1_c4 = *r24;
*r28 = r1_c4 * *hairDist + *r25;
}
-
- s16 prevHaitJntNo = i_this->getHairJntNum(i-1);
+
+ s16 prevHaitJntNo = i_this->getHairJntNum(i - 1);
cXyz r1_b8 = r22->normZP();
Mtx r1_124;
cM3d_UpMtx_Base(r1_b8, r1_c4, r1_124);
@@ -759,62 +754,73 @@ BOOL daNpc_Md_c::createHeap() {
strcpy(wait_anim_name, "md_wait01.bck");
strcpy(arm_wait_anim_name, "mdarm_wait01.bck");
}
-
+
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(mModelArcName, "md.bdl");
- JUT_ASSERT(1995, modelData != NULL);
-
+ JUT_ASSERT(DEMO_SELECT(1960, 1995), modelData != NULL);
+
mpMorf = new mDoExt_McaMorf2(
modelData,
- NULL, NULL,
+ NULL,
+ NULL,
(J3DAnmTransformKey*)dComIfG_getObjectRes(mModelArcName, wait_anim_name),
NULL,
- J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1,
+ J3DFrameCtrl::EMode_LOOP,
+ 1.0f,
+ 0,
+ -1,
+ 1,
NULL,
0x00080000,
0x11020022
);
- if (!mpMorf || !mpMorf->getModel()) {
+ if (!mpMorf || !getModel()) {
return FALSE;
}
-
+
m_backbone1_jnt_num = modelData->getJointName()->getIndex("backbone1");
- JUT_ASSERT(2013, m_backbone1_jnt_num >= 0);
+ JUT_ASSERT(DEMO_SELECT(1978, 2013), m_backbone1_jnt_num >= 0);
m_backbone2_jnt_num = modelData->getJointName()->getIndex("backbone2");
- JUT_ASSERT(2016, m_backbone2_jnt_num >= 0);
+ JUT_ASSERT(DEMO_SELECT(1981, 2016), m_backbone2_jnt_num >= 0);
m_armR_jnt_num = modelData->getJointName()->getIndex("armR");
- JUT_ASSERT(2019, m_armR_jnt_num >= 0);
+ JUT_ASSERT(DEMO_SELECT(1984, 2019), m_armR_jnt_num >= 0);
m_armL_jnt_num = modelData->getJointName()->getIndex("armL");
- JUT_ASSERT(2022, m_armL_jnt_num >= 0);
+ JUT_ASSERT(DEMO_SELECT(1987, 2022), m_armL_jnt_num >= 0);
m_neck_jnt_num = modelData->getJointName()->getIndex("neck");
- JUT_ASSERT(2025, m_neck_jnt_num >= 0);
-
+ JUT_ASSERT(DEMO_SELECT(1990, 2025), m_neck_jnt_num >= 0);
+
s16 head_jnt_num = modelData->getJointName()->getIndex("head");
if (head_jnt_num >= 0) {
modelData->getJointNodePointer(head_jnt_num)->setCallBack(nodeCallBack);
}
modelData->getJointNodePointer(m_backbone1_jnt_num)->setCallBack(waistNodeCallBack);
- m_hair_jnt_nums[0] = modelData->getJointName()->getIndex(hairName[0]);
- if (m_hair_jnt_nums[0] >= 0) {
- modelData->getJointNodePointer(m_hair_jnt_nums[0])->setCallBack(hairTopNodeCallBack);
+ int i = 0;
+ m_hair_jnt_nums[i] = modelData->getJointName()->getIndex(hairName[i]);
+ if (m_hair_jnt_nums[i] >= 0) {
+ modelData->getJointNodePointer(m_hair_jnt_nums[i])->setCallBack(hairTopNodeCallBack);
}
- for (int i = 1; i < (int)ARRAY_SIZE(hairName); i++) {
+ for (i = 1; i < (int)ARRAY_SIZE(hairName); i++) {
m_hair_jnt_nums[i] = modelData->getJointName()->getIndex(hairName[i]);
if (m_hair_jnt_nums[i] >= 0) {
modelData->getJointNodePointer(m_hair_jnt_nums[i])->setCallBack(hairNodeCallBack);
}
}
-
- mpMorf->getModel()->setUserArea((u32)this);
-
+
+ getModel()->setUserArea((u32)this);
+
modelData = (J3DModelData*)dComIfG_getObjectRes(mModelArcName, "mdarm.bdl");
- JUT_ASSERT(2051, modelData != NULL);
-
+ JUT_ASSERT(DEMO_SELECT(2016, 2051), modelData != NULL);
+
mpArmMorf = new mDoExt_McaMorf2(
modelData,
- NULL, NULL,
+ NULL,
+ NULL,
(J3DAnmTransformKey*)dComIfG_getObjectRes(mModelArcName, arm_wait_anim_name),
NULL,
- J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 0,
+ J3DFrameCtrl::EMode_LOOP,
+ 1.0f,
+ 0,
+ -1,
+ 0,
NULL,
0x00000000,
0x11020203
@@ -822,28 +828,33 @@ BOOL daNpc_Md_c::createHeap() {
if (!mpArmMorf || !mpArmMorf->getModel()) {
return FALSE;
}
-
+
m_armRloc_jnt_num = modelData->getJointName()->getIndex("armRloc");
- JUT_ASSERT(2065, m_armRloc_jnt_num >= 0);
+ JUT_ASSERT(DEMO_SELECT(2028, 2065), m_armRloc_jnt_num >= 0);
m_armLloc_jnt_num = modelData->getJointName()->getIndex("armLloc");
- JUT_ASSERT(2068, m_armLloc_jnt_num >= 0);
+ JUT_ASSERT(DEMO_SELECT(2031, 2068), m_armLloc_jnt_num >= 0);
m_handL_jnt_num = modelData->getJointName()->getIndex("handL");
- JUT_ASSERT(2071, m_handL_jnt_num >= 0);
-
+ JUT_ASSERT(DEMO_SELECT(2034, 2071), m_handL_jnt_num >= 0);
+
modelData->getJointNodePointer(m_armRloc_jnt_num)->setCallBack(armNodeCallBack);
modelData->getJointNodePointer(m_armLloc_jnt_num)->setCallBack(armNodeCallBack);
-
+
mpArmMorf->getModel()->setUserArea((u32)this);
-
+
if (!isTypeShipRide()) {
modelData = (J3DModelData*)dComIfG_getObjectRes(mModelArcName, "mdwing.bdl");
- JUT_ASSERT(2083, modelData != NULL);
-
+ JUT_ASSERT(DEMO_SELECT(2046, 2083), modelData != NULL);
+
mpWingMorf = new mDoExt_McaMorf(
modelData,
- NULL, NULL,
+ NULL,
+ NULL,
(J3DAnmTransformKey*)dComIfG_getObjectRes(mModelArcName, "mdwing_wait01.bck"),
- J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 0,
+ J3DFrameCtrl::EMode_LOOP,
+ 1.0f,
+ 0,
+ -1,
+ 0,
NULL,
0x00000000,
0x11020203
@@ -851,53 +862,53 @@ BOOL daNpc_Md_c::createHeap() {
if (!mpWingMorf || !mpWingMorf->getModel()) {
return FALSE;
}
-
+
m_wingRloc_jnt_num = modelData->getJointName()->getIndex("wingRloc");
- JUT_ASSERT(2097, m_wingRloc_jnt_num >= 0);
+ JUT_ASSERT(DEMO_SELECT(2058, 2097), m_wingRloc_jnt_num >= 0);
m_wingLloc_jnt_num = modelData->getJointName()->getIndex("wingLloc");
- JUT_ASSERT(2100, m_wingLloc_jnt_num >= 0);
+ JUT_ASSERT(DEMO_SELECT(2061, 2100), m_wingLloc_jnt_num >= 0);
m_wingR2_jnt_num = modelData->getJointName()->getIndex("wingR2");
- JUT_ASSERT(2103, m_wingR2_jnt_num >= 0);
+ JUT_ASSERT(DEMO_SELECT(2064, 2103), m_wingR2_jnt_num >= 0);
m_wingL2_jnt_num = modelData->getJointName()->getIndex("wingL2");
- JUT_ASSERT(2106, m_wingL2_jnt_num >= 0);
+ JUT_ASSERT(DEMO_SELECT(2067, 2106), m_wingL2_jnt_num >= 0);
m_wingR3_jnt_num = modelData->getJointName()->getIndex("wingR3");
- JUT_ASSERT(2109, m_wingR3_jnt_num >= 0);
+ JUT_ASSERT(DEMO_SELECT(2070, 2109), m_wingR3_jnt_num >= 0);
m_wingL3_jnt_num = modelData->getJointName()->getIndex("wingL3");
- JUT_ASSERT(2112, m_wingL3_jnt_num >= 0);
-
+ JUT_ASSERT(DEMO_SELECT(2073, 2112), m_wingL3_jnt_num >= 0);
+
modelData->getJointNodePointer(m_wingRloc_jnt_num)->setCallBack(armNodeCallBack);
modelData->getJointNodePointer(m_wingLloc_jnt_num)->setCallBack(armNodeCallBack);
-
+
mpWingMorf->getModel()->setUserArea((u32)this);
}
-
+
modelData = (J3DModelData*)dComIfG_getObjectRes(mModelArcName, "md_harp.bdl");
mpHarpModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
if (!mpHarpModel) {
return FALSE;
}
-
+
modelData = (J3DModelData*)dComIfG_getObjectRes(mModelArcName, "ymdhp00.bdl");
mpHarpLightModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
if (!mpHarpLightModel) {
return FALSE;
}
-
+
if (!initLightBtkAnm(false)) {
return FALSE;
}
if (!initTexPatternAnm(0, 0)) {
return FALSE;
}
-
+
mAcchCir[0].SetWall(20.0f, 20.0f);
mAcchCir[1].SetWall(60.0f, 20.0f);
- mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, ARRAY_SIZE(mAcchCir), mAcchCir, fopAcM_GetSpeed_p(this));
+ mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, ARRAY_SIZE(mAcchCir), mAcchCir, fopAcM_GetSpeed_p(this));
mAcch.ClrRoofNone();
mAcch.SetRoofCrrHeight(120.0f);
mAcch.OnLineCheck();
mAcch.ClrWaterNone();
-
+
return TRUE;
}
@@ -930,14 +941,14 @@ void daNpc_Md_c::npcAction(void* arg) {
setNpcAction(&daNpc_Md_c::waitNpcAction);
}
}
-
+
(this->*mCurrNpcActionFunc)(arg);
}
/* 00003124-00003194 .text setNpcAction__10daNpc_Md_cFM10daNpc_Md_cFPCvPvPv_iPv */
void daNpc_Md_c::setNpcAction(ActionFunc actionFunc, void* arg) {
#if VERSION > VERSION_DEMO
- m_flying = false;
+ offFlying();
#endif
mCurrPlayerActionFunc = NULL;
setAction(&mCurrNpcActionFunc, actionFunc, arg);
@@ -949,8 +960,13 @@ void daNpc_Md_c::playerAction(void* arg) {
speedF = 0.0f;
setPlayerAction(&daNpc_Md_c::waitPlayerAction);
}
-
- if (mAcch.ChkGroundHit() && isOldLightBodyHit()) {
+
+#if VERSION == VERSION_DEMO
+ if (isOldLightBodyHit())
+#else
+ if (mAcch.ChkGroundHit() && isOldLightBodyHit())
+#endif
+ {
dComIfGp_setRStatusForce(dActStts_RETURN_e);
if (chkPlayerAction(&daNpc_Md_c::mkamaePlayerAction)) {
dComIfGp_setDoStatus(dActStts_BLANK_e);
@@ -972,7 +988,7 @@ void daNpc_Md_c::playerAction(void* arg) {
dComIfGp_setAStatus(dActStts_HIDDEN_e);
}
}
-
+
(this->*mCurrPlayerActionFunc)(arg);
}
@@ -997,12 +1013,11 @@ int daNpc_Md_c::calcStickPos(s16 param_1, cXyz* param_2) {
// This temp variable for attention is probably a fakematch, but it fixes a regswap in dAttention_c::Lockon.
dAttention_c& attention = dComIfGp_getAttention();
dAttList_c* attList = attention.GetLockonList(0);
-
+
bool r26 = attention.Lockon();
-
- int r31 = !r26 ? 0 :
- attention.LockonTruth() ? 1 : -1;
-
+
+ int r31 = !r26 ? 0 : attention.LockonTruth() ? 1 : -1;
+
if (attList == NULL) {
attList = attention.GetActionList(0);
}
@@ -1010,17 +1025,13 @@ int daNpc_Md_c::calcStickPos(s16 param_1, cXyz* param_2) {
*param_2 = attList->getActor()->eyePos;
return r31;
}
-
+
if (r26) {
param_1 = shape_angle.y;
}
-
- param_2->set(
- current.pos.x + 100.0f * cM_ssin(param_1),
- current.pos.y,
- current.pos.z + 100.0f * cM_scos(param_1)
- );
-
+
+ param_2->set(current.pos.x + 100.0f * cM_ssin(param_1), current.pos.y, current.pos.z + 100.0f * cM_scos(param_1));
+
return r31;
}
@@ -1074,8 +1085,8 @@ void daNpc_Md_c::deleteHane03Emitter() {
/* 00003784-000037C4 .text returnLinkPlayer__10daNpc_Md_cFv */
void daNpc_Md_c::returnLinkPlayer() {
changePlayer(dComIfGp_getLinkPlayer());
- m_flying = false;
- m_mirror = false;
+ offFlying();
+ offMirror();
}
/* 000037C4-00003824 .text shipRideCheck__10daNpc_Md_cFv */
@@ -1089,9 +1100,7 @@ BOOL daNpc_Md_c::shipRideCheck() {
/* 00003824-00003908 .text isFallAction__10daNpc_Md_cFv */
BOOL daNpc_Md_c::isFallAction() {
- return chkPlayerAction(&daNpc_Md_c::jumpPlayerAction) ||
- chkNpcAction(&daNpc_Md_c::fallNpcAction) ||
- chkNpcAction(&daNpc_Md_c::fall02NpcAction);
+ return chkPlayerAction(&daNpc_Md_c::jumpPlayerAction) || chkNpcAction(&daNpc_Md_c::fallNpcAction) || chkNpcAction(&daNpc_Md_c::fall02NpcAction);
}
/* 00003908-00003958 .text returnLinkCheck__10daNpc_Md_cFv */
@@ -1112,7 +1121,7 @@ BOOL daNpc_Md_c::lightHitCheck() {
cXyz lightVec;
cMtx_multVecSR(mpHarpModel->getBaseTRMtx(), &l_ms_light_local_vec, &lightVec);
offLightBodyHit();
-
+
if (dComIfGp_getDetect().chk_light(&current.pos)) {
onLightBodyHit();
lightHit = TRUE;
@@ -1125,10 +1134,10 @@ BOOL daNpc_Md_c::lightHitCheck() {
}
}
}
-
+
if (lightHit) {
onLightHit();
-
+
if (mCps.ChkAtHit()) {
fopAc_ac_c* hitActor = mCps.GetAtHitAc();
if (fopAcM_CheckStatus(this, fopAcStts_CARRY_e) && !isNoCarryAction()) {
@@ -1138,7 +1147,7 @@ BOOL daNpc_Md_c::lightHitCheck() {
} else if (m3058.getEmitter() == NULL) {
dComIfGp_particle_set(dPa_name::ID_AK_SN_HITSHIELDLIGHT00, &current.pos, NULL, NULL, 0xFF, &m3058);
}
-
+
cM3d_lineVsPosSuisenCross(mCps.GetStart(), mCps.GetEnd(), *mCps.GetAtHitPosP(), &m3058.getPos());
s16 angleY = cM_atan2s(lightVec.x, lightVec.z);
s16 angleX = cM_atan2s(-lightVec.y, lightVec.absXZ());
@@ -1146,18 +1155,18 @@ BOOL daNpc_Md_c::lightHitCheck() {
} else {
m3058.end();
}
-
+
if (!mCps.ChkAtSet()) {
fopAcM_seStartCurrent(this, JA_SE_OBJ_MIRROR_REFLECT, 0);
} else {
fopAcM_seStartCurrent(this, JA_SE_OBJ_MIRROR_LIGHT, 0);
}
-
+
if (m304C.getEmitter() == NULL) {
m304C.makeEmitter(dPa_name::ID_AK_SN_MIRRORSHIELD00, mpHarpLightModel->getBaseTRMtx(), &current.pos, NULL);
- JPABaseEmitter* emitter = m304C.getEmitter();
JGeometry::TVec3<f32> temp;
temp.set(1.0f, 1.0f, 1.0f);
+ JPABaseEmitter* emitter = m304C.getEmitter();
emitter->setEmitterScale(temp);
temp.set(0.0f, 4.0f, 0.0f);
emitter->setEmitterTranslation(temp);
@@ -1170,7 +1179,7 @@ BOOL daNpc_Md_c::lightHitCheck() {
m304C.end();
}
}
-
+
return lightHit;
}
@@ -1198,8 +1207,8 @@ void daNpc_Md_c::NpcCall(int* r31) {
*r31 = 1;
}
} else {
- f32 temp = 2.0f*l_HIO.m0C4;
- if (dist_sq >= temp*temp) {
+ f32 temp = 2.0f * l_HIO.m0C4;
+ if (dist_sq >= temp * temp) {
setNpcAction(&daNpc_Md_c::searchNpcAction);
}
*r31 = 1;
@@ -1269,7 +1278,21 @@ void daNpc_Md_c::setMessageAnimation(u8 msgAnmAtr) {
/* 00004230-0000433C .text waitGroundCheck__10daNpc_Md_cFv */
void daNpc_Md_c::waitGroundCheck() {
- /* Nonmatching */
+ if (mAcch.ChkGroundHit()) {
+ if (!isTypeM_Dra09()) {
+ if (dComIfG_Bgsp()->GetSpecialCode(mAcch.m_gnd) == 1) {
+ cLib_addCalcAngleS(&shape_angle.y, cM_atan2s(m32A4.x, m32A4.z), 8, 0x2000, 0x400);
+ speedF += 0.5f;
+ speedF = cLib_maxLimit<f32>(speedF, l_HIO.m008.m08);
+ } else {
+ speedF = 0.0f;
+ }
+ }
+ } else {
+ if (daPy_getPlayerActorClass() != this) {
+ setNpcAction(&daNpc_Md_c::fallNpcAction);
+ }
+ }
}
/* 0000433C-000043D4 .text chkAdanmaeDemoOrder__10daNpc_Md_cFv */
@@ -1342,14 +1365,14 @@ BOOL daNpc_Md_c::waitNpcAction(void*) {
setHarpPlayNum(1);
}
}
-
+
if (isTypeAdanmae() && dComIfGs_isEventBit(dSv_event_flag_c::UNK_1102)) {
fopAcM_delete(this);
return TRUE;
}
-
+
int sp08 = 0;
-
+
if (isTypeSea() && !dComIfGs_isEventBit(dSv_event_flag_c::UNK_1402)) {
daPy_lk_c* link = daPy_getPlayerLinkActorClass();
f32 playerDistXZ2 = fopAcM_searchPlayerDistanceXZ2(this);
@@ -1360,8 +1383,8 @@ BOOL daNpc_Md_c::waitNpcAction(void*) {
mCurEventMode = 0xB;
}
} else {
- s16 headAngle = shape_angle.y + mJntCtrl.getHead_y() + mJntCtrl.getBackbone_y();
- cLib_offBit<u32>(attention_info.flags, (fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e));
+ s16 headAngle = shape_angle.y + getHead_y() + getBackbone_y();
+ cLib_offBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e);
m312C = chkAttention(current.pos, headAngle, 1);
sp08 = m312C;
if (sp08 != 0) {
@@ -1399,11 +1422,11 @@ BOOL daNpc_Md_c::waitNpcAction(void*) {
}
NpcCall(&sp08);
}
-
+
if (isTypeM_Dra09() && dComIfGs_isEventBit(dSv_event_flag_c::UNK_1101) && dComIfGs_isSwitch(m3100, fopAcM_GetRoomNo(this))) {
setNpcAction(&daNpc_Md_c::demoFlyNpcAction);
}
-
+
if (isTypeM_Dai() || isTypeEdaichi()) {
if (m3104 == 0) {
if (cLib_calcTimer(&m3144) == 0) {
@@ -1414,7 +1437,7 @@ BOOL daNpc_Md_c::waitNpcAction(void*) {
m3144 = (s16)cM_rndF(180.0f) + 60;
}
}
-
+
if (isTypeAtorizk()) {
if (chkArea(&current.pos)) {
lookBack(sp08, 0, 1);
@@ -1451,7 +1474,64 @@ BOOL daNpc_Md_c::waitNpcAction(void*) {
/* 00004B04-00004CFC .text harpWaitNpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::harpWaitNpcAction(void*) {
- /* Nonmatching */
+ if (mActionStatus == ACTION_STARTING) {
+ setHarpPlayNum(1);
+ maxFallSpeed = -100.0f;
+ gravity = l_HIO.m0F4;
+ clearStatus();
+ setBitStatus(daMdStts_UNK80);
+ shape_angle.x = 0;
+ shape_angle.z = 0;
+ speedF = 0.0f;
+ m30F8 = 120.0f;
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+#if VERSION > VERSION_DEMO
+ m3144 = 0;
+ m3146 = 0xc;
+#endif
+ } else if (mActionStatus != ACTION_ENDING) {
+#if VERSION == VERSION_DEMO
+ if (m312A != 0) {
+ setHarpPlayNum(1);
+ }
+#else
+ if (mActionStatus == ACTION_ONGOING_1) {
+ if (m312A != 0) {
+ m3146--;
+ if (m3146 != 0) {
+ setHarpPlayNum(1);
+ } else {
+ setAnm(0x11);
+ m3146 = 0x78;
+ mActionStatus++;
+ }
+ }
+ } else {
+ m3146--;
+ if (m3146 == 0) {
+ setHarpPlayNum(1);
+ m3146 = 0xc;
+ mActionStatus = ACTION_ONGOING_1;
+ }
+ }
+ if ((isTypeM_DaiB()) && (m3146 == 0xc)) {
+ BOOL bVar2 = false;
+ if (m3104 == 0x16) {
+ if (mpMorf->checkFrame(11.0f)) {
+ bVar2 = true;
+ }
+ } else if ((m3104 == 0x17) && (mpMorf->checkFrame(11.0f))) {
+ bVar2 = true;
+ }
+ if (bVar2) {
+ mDoAud_bgmStart(JA_BGM_MEDORI_TAKT_8);
+ }
+ }
+#endif
+ setAttention(true);
+ }
+ return TRUE;
}
static fpc_ProcID l_msgId;
@@ -1468,37 +1548,262 @@ BOOL daNpc_Md_c::XYTalkCheck() {
/* 00004D40-0000504C .text talkNpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::talkNpcAction(void*) {
- /* Nonmatching */
+ if (mActionStatus == ACTION_STARTING) {
+ l_msgId = fpcM_ERROR_PROCESS_ID_e;
+ mMsgNo = getMsg();
+ cLib_offBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK2 | daMdStts_FLY);
+ setBitStatus(daMdStts_UNK4);
+ m312B = 0;
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ } else if (mActionStatus != ACTION_ENDING) {
+ s16 angle = shape_angle.y + getHead_y() + getBackbone_y();
+ m312C = chkAttention(current.pos, angle, 0);
+ if (mActionStatus == ACTION_ONGOING_1) {
+ if (XYTalkCheck()) {
+ mActionStatus = ACTION_ONGOING_2;
+ }
+ } else if (mActionStatus == ACTION_ONGOING_2) {
+ if (talk_init()) {
+ mActionStatus = ACTION_ONGOING_3;
+ }
+ } else if (mActionStatus == ACTION_ONGOING_3) {
+ if (talk(0)) {
+ if ((isTypeAtorizk()) || (isTypeM_Dra09())) {
+ mActionStatus = 4;
+ } else if (isTypeAdanmae()) {
+ if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_1104)) {
+ setNpcAction(&daNpc_Md_c::squatdownNpcAction);
+ }
+ } else {
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ }
+ dComIfGp_event_reset();
+ }
+ } else if (isTypeAtorizk()) {
+ if (dComIfGs_isEventBit(dSv_event_flag_c::MEDLI_GAVE_FATHERS_LETTER)) {
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ }
+ } else if ((isTypeM_Dra09()) && (dComIfGs_isEventBit(dSv_event_flag_c::UNK_1101))) {
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ }
+ mJntCtrl.setTrn();
+ lookBack(1, 0, 0);
+ current.angle.y = shape_angle.y;
+ setAttention(mpMorf->isMorf());
+ }
+ return TRUE;
}
/* 0000504C-000051FC .text shipTalkNpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::shipTalkNpcAction(void*) {
- /* Nonmatching */
+ if (mActionStatus == ACTION_STARTING) {
+ onNpcNotChange();
+ onShipRide();
+ l_msgId = fpcM_ERROR_PROCESS_ID_e;
+ mMsgNo = getMsg();
+ setAnm(0x2b);
+ m312B = 0;
+ mActionStatus++;
+ } else if (mActionStatus == ACTION_ENDING) {
+ offShipRide();
+ } else {
+ s16 angle = shape_angle.y + getHead_y() + getBackbone_y();
+ m312C = chkAttention(current.pos, angle, 0);
+ if (mActionStatus == ACTION_ONGOING_1) {
+ if (talk_init()) {
+ mActionStatus = ACTION_ONGOING_2;
+ }
+ } else {
+ if (talk(0)) {
+ dComIfGp_event_reset();
+ setNpcAction(&daNpc_Md_c::shipNpcAction);
+ }
+ }
+ lookBack(1, 0, 1);
+ current.angle.y = shape_angle.y;
+ setAttention(mpMorf->isMorf());
+ }
+ return TRUE;
}
/* 000051FC-00005308 .text kyohiNpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::kyohiNpcAction(void*) {
- /* Nonmatching */
+ if (mActionStatus == ACTION_STARTING) {
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK2 | daMdStts_FLY);
+ setBitStatus(daMdStts_UNK4);
+ setAnm(0x27);
+ speedF = 0.0f;
+ m30F8 = 120.0f;
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ m3144 = 2;
+ mActionStatus++;
+ } else if (mActionStatus != ACTION_ENDING) {
+ if (m312A != 0) {
+ m3144--;
+ if (m3144 == 0) {
+ setNpcAction(&::daNpc_Md_c::waitNpcAction);
+ }
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 00005308-00005534 .text shipNpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::shipNpcAction(void*) {
- /* Nonmatching */
+ if (mActionStatus == ACTION_STARTING) {
+ onNpcNotChange();
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK2 | daMdStts_FLY);
+ setBitStatus(daMdStts_UNK4);
+ setAnm(0x23);
+ speedF = 0.0f;
+ m30F8 = 120.0f;
+ if (dComIfGp_getShipActor() != NULL) {
+ onShipRide();
+ }
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ } else if (mActionStatus == ACTION_ENDING) {
+ offShipRide();
+ } else {
+ cLib_offBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e);
+ daShip_c* ship = dComIfGp_getShipActor();
+ if (ship != NULL) {
+ onShipRide();
+ if (std::fabsf(ship->speedF) < 0.001f) {
+ setAnm(0x2a);
+ if (!dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) {
+ s16 angle = shape_angle.y + getHead_y() + getBackbone_y();
+ m312C = chkAttention(current.pos, angle, 0);
+ s32 r0 = m312C;
+ if (r0 != 0) {
+ cLib_onBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e);
+ mCurEventMode = 2;
+ }
+ }
+ } else {
+ setAnm(0x23);
+ }
+ }
+ if (m3104 == 0x23) {
+ mJntCtrl.lookAtTarget(&shape_angle.y, NULL, cXyz::Zero, shape_angle.y, 0, false);
+ } else {
+ lookBack(1, 0, 1);
+ }
+ current.angle.y = shape_angle.y;
+ setAttention(true);
+ }
+ return TRUE;
}
/* 00005534-000057B0 .text mwaitNpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::mwaitNpcAction(void*) {
- /* Nonmatching */
+ if (mActionStatus == ACTION_STARTING) {
+ cLib_onBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
+ offNpcCallCommand();
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK2 | daMdStts_UNK4 | daMdStts_FLY);
+ setAnm(0x20);
+ shape_angle.x = 0;
+ shape_angle.z = 0;
+ gravity = l_HIO.m0F4;
+ maxFallSpeed = -100.0f;
+ speedF = 0.0f;
+ speed.y = 0.0f;
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ } else if (mActionStatus != ACTION_ENDING) {
+ if (mActionStatus == ACTION_ONGOING_1) {
+ if (!isLightBodyHit()) {
+ mActionStatus = ACTION_ONGOING_3;
+ } else {
+ cLib_offBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e);
+ f32 dVar3 = fopAcM_searchPlayerDistance2(this);
+ if (!checkNpcCallCommand()) {
+ if (dVar3 < (l_HIO.m0C8 * l_HIO.m0C8)) {
+ daPy_getPlayerLinkActorClass()->onNpcCallCommand();
+ }
+ } else {
+ mActionStatus++;
+ if (dVar3 < ((l_HIO.m0C4 * 2.0f) * (l_HIO.m0C4 * 2.0f))) {
+ mActionStatus++;
+ }
+ }
+ }
+ if (mActionStatus != ACTION_ONGOING_1) {
+ m311A = 0;
+ m310C = 0.0f;
+ m3114 = 0;
+ m3116 = 0;
+ setAnm(0x21);
+ m312A = 0;
+ }
+ } else {
+ if ((lookBackWaist(m311A, m310C)) && (m312A != 0)) {
+ m3114 = 0;
+ m3116 = 0;
+ if (mActionStatus == ACTION_ONGOING_2) {
+ setNpcAction(&daNpc_Md_c::searchNpcAction);
+ } else {
+ setAnm(0);
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ }
+ }
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 000057B0-000058E0 .text squatdownNpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::squatdownNpcAction(void*) {
- /* Nonmatching */
+ if (mActionStatus == ACTION_STARTING) {
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK2 | daMdStts_FLY);
+ setBitStatus(daMdStts_UNK4);
+ setAnm(3);
+ speedF = 0.0f;
+ m30F8 = 75.0f;
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ } else if (mActionStatus != ACTION_ENDING) {
+ s16 angle = shape_angle.y + getHead_y() + getBackbone_y();
+ m312C = chkAttention(current.pos, angle, 0);
+ if (m312A != 0) {
+ setNpcAction(&daNpc_Md_c::sqwait01NpcAction);
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 000058E0-00005A74 .text sqwait01NpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::sqwait01NpcAction(void*) {
- /* Nonmatching */
+ if (mActionStatus == ACTION_STARTING) {
+ cLib_onBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
+ if (dComIfGs_isEventBit(dSv_event_flag_c::MEDLI_GAVE_FATHERS_LETTER)) {
+ cLib_offBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e);
+ }
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK2 | daMdStts_FLY);
+ setBitStatus(daMdStts_UNK4);
+ setAnm(4);
+ maxFallSpeed = -100.0f;
+ gravity = l_HIO.m0F4;
+ speedF = 0.0f;
+ m30F8 = 75.0f;
+ shape_angle.x = 0;
+ shape_angle.z = 0;
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ } else if (mActionStatus != ACTION_ENDING) {
+ s16 angle = shape_angle.y + getHead_y() + getBackbone_y();
+ m312C = chkAttention(current.pos, angle, 0);
+ if ((s8)getTalkType() >= 4) {
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 00005A74-00005AB0 .text changeCaught02__10daNpc_Md_cFv */
@@ -1509,57 +1814,566 @@ void daNpc_Md_c::changeCaught02() {
/* 00005AB0-000061A8 .text carryNpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::carryNpcAction(void*) {
- /* Nonmatching */
+ BOOL bVar1;
+ u32 sfxID;
+ f32 dVar9;
+
+ if (mActionStatus == ACTION_STARTING) {
+#if VERSION > VERSION_DEMO
+ onNpcNotChange();
+#endif
+ cLib_offBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
+ offNpcCallCommand();
+ m3144 = shape_angle.y - dComIfGp_getPlayer(0)->shape_angle.y;
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK2 | daMdStts_UNK4 | daMdStts_FLY);
+ if (isNoCarryAction()) {
+ setAnm(0x24);
+ setBitStatus(daMdStts_UNK1);
+ setHane02Emitter();
+ sfxID = JA_SE_CV_MD_CRASH;
+ } else {
+ if (m3104 == 4) {
+ setAnm(5);
+ } else {
+ setAnm(3);
+ m312A = 0;
+ }
+ sfxID = JA_SE_CV_MD_LIFT_UP;
+ }
+ fopAcM_monsSeStart(this, sfxID, &current.pos, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ m30F8 = 75.0f;
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ } else if (mActionStatus == ACTION_ENDING) {
+#if VERSION > VERSION_DEMO
+ offNpcNotChange();
+#endif
+ m3298.y = 0.0f;
+ m3298.z = 0.0f;
+ offNoCarryAction();
+ deleteHane02Emitter();
+ deleteHane03Emitter();
+ emitterDelete(m0508);
+ } else {
+ m3131 = 0;
+ bVar1 = false;
+ if (fopAcM_CheckStatus(this, fopAcStts_CARRY_e)) {
+ setRestart(2);
+ }
+ if (!isNoCarryAction()) {
+ int iVar3 = daPy_getPlayerLinkActorClass()->checkAutoJumpFlying();
+ daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
+ if (mActionStatus == ACTION_ONGOING_1) {
+ if (iVar3 > 0) {
+ mActionStatus = ACTION_ONGOING_2;
+ setAnm(9);
+ setBitStatus(daMdStts_UNK1);
+ setWingEmitter();
+ setHane03Emitter();
+ m312A = 0;
+ fopAcM_monsSeStart(this, JA_SE_CV_MD_FLY_WITH_LINK, &current.pos, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+#if VERSION > VERSION_DEMO
+ if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_4001)) {
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_4180);
+ }
+#endif
+ } else if (m3104 == 5) {
+ dVar9 = mpMorf->getPlaySpeed();
+ if ((fopAcM_GetSpeedF(player) == 0.0f) && (player->getBaseAnimeFrame() <= mpMorf->getEndFrame())) {
+ mpMorf->setFrame(player->getBaseAnimeFrame());
+ mpMorf->setPlaySpeed(0.0f);
+ mpArmMorf->setFrame(player->getBaseAnimeFrame());
+ mpArmMorf->setPlaySpeed(0.0f);
+ } else {
+ mpMorf->setPlaySpeed(1.0f);
+ mpArmMorf->setPlaySpeed(1.0f);
+ }
+ if (dVar9 != mpMorf->getPlaySpeed()) {
+ mpMorf->setMorf(4.0f);
+ mpArmMorf->setMorf(4.0f);
+ }
+ cLib_chaseF(&m3298.x, l_HIO.m0F8, 1.0f);
+ cLib_chaseF(&m3298.y, l_HIO.m0FC, 1.0f);
+ cLib_chaseF(&m3298.z, l_HIO.m100, 1.0f);
+ } else if (m312A != 0) {
+ setAnm(5);
+ }
+ } else if (mActionStatus == ACTION_ONGOING_2) {
+ if (iVar3 < 0x1e) {
+ mActionStatus = ACTION_ONGOING_3;
+ mpMorf->setPlaySpeed(l_HIO.m120);
+ mpWingMorf->setPlaySpeed(l_HIO.m120);
+ }
+ } else if (iVar3 <= 0) {
+ mActionStatus = ACTION_ONGOING_1;
+ setBitEffectStatus(1);
+ deleteHane03Emitter();
+ setAnm(5);
+ clearStatus(daMdStts_UNK1);
+ bVar1 = true;
+ fopAcM_monsSeStart(this, JA_SE_CV_MD_FLY_END, &current.pos, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ }
+ }
+ if (!fopAcM_CheckStatus(this, fopAcStts_CARRY_e)) {
+ if (isNoCarryAction()) {
+ if (speedF > 0.0f) {
+ setNpcAction(&daNpc_Md_c::throwNpcAction);
+ } else {
+ setNpcAction(&daNpc_Md_c::land03NpcAction);
+ }
+ } else if ((checkStatus(daMdStts_UNK1)) || (bVar1)) {
+#if VERSION == VERSION_DEMO
+ if (current.pos.y - mAcch.GetGroundH() >= l_HIO.m1AC)
+#else
+ f32 f1 = mAcch.GetGroundH();
+ f32 f0 = current.pos.y;
+ if (f0 - f1 >= l_HIO.m1AC)
+#endif
+ {
+ setNpcAction(&daNpc_Md_c::fall02NpcAction);
+ } else {
+ setNpcAction(&daNpc_Md_c::fallNpcAction);
+ }
+ } else if (speedF > 0.0f) {
+ setNpcAction(&daNpc_Md_c::throwNpcAction);
+ } else {
+ setNpcAction(&daNpc_Md_c::sqwait01NpcAction);
+ }
+ }
+ mJntCtrl.lookAtTarget(&shape_angle.y, NULL, cXyz::Zero, shape_angle.y, m3110, false);
+ current.angle.y = shape_angle.y;
+ }
+ return TRUE;
}
/* 000061A8-00006450 .text throwNpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::throwNpcAction(void*) {
- /* Nonmatching */
+ f32 fVar1;
+ s16 sVar3;
+
+ if (mActionStatus == ACTION_STARTING) {
+ fopAcM_monsSeStart(this, JA_SE_CV_MD_THROW, &current.pos, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ m314C = 1;
+ m314E = l_HIO.m1B4;
+ m3148 = 0;
+ m3154 = 0.0f;
+ speedF = l_HIO.m0E8;
+ speed.y = l_HIO.m0EC;
+ maxFallSpeed = l_HIO.m110;
+ gravity = l_HIO.m114;
+ m30A0 = current.pos;
+ clearStatus(daMdStts_UNK4);
+ setBitStatus(daMdStts_UNK1 | daMdStts_FLY);
+ setAnm(6);
+ setWingEmitter();
+ mAcchCir[1].SetWall(60.0f, 60.0f);
+ mActionStatus++;
+ } else if (mActionStatus == ACTION_ENDING) {
+ emitterDelete(m0508);
+ } else {
+ fVar1 = mpWingMorf->getFrame();
+ if ((fVar1 == 23.0f) && (speed.y < l_HIO.m0F0)) {
+ speed.y = l_HIO.m0F0;
+ }
+ if (fVar1 > l_HIO.m154) {
+ sVar3 = windProc();
+ if (sVar3 == 0) {
+ m314C = sVar3;
+ }
+ }
+ if (mAcch.ChkGroundHit()) {
+ setNpcAction(&daNpc_Md_c::land01NpcAction);
+ dComIfGp_getCamera(0)->mCamera.ForceLockOff(fopAcM_GetID(this));
+ } else if (mAcch.ChkWallHit()) {
+ setNpcAction(&daNpc_Md_c::wallHitNpcAction);
+ dComIfGp_getCamera(0)->mCamera.ForceLockOff(fopAcM_GetID(this));
+ } else if (m312A != 0) {
+ setNpcAction(&daNpc_Md_c::glidingNpcAction);
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 00006450-00006764 .text glidingNpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::glidingNpcAction(void*) {
- /* Nonmatching */
+ if (mActionStatus == ACTION_STARTING) {
+ if (m314C == 1) {
+ m3148 = 0;
+ setAnm(0xb);
+ } else {
+ m3148 = 1;
+ setAnm(10);
+ }
+ m314A = 2;
+ clearStatus(daMdStts_UNK4);
+ setBitStatus(daMdStts_UNK1 | daMdStts_FLY);
+ mAcchCir[1].SetWall(60.0f, 60.0f);
+ mActionStatus++;
+ } else if (mActionStatus != ACTION_ENDING) {
+ if (!chkAdanmaeDemoOrder()) {
+ if (mAcch.ChkGroundHit()) {
+ if (isTypeAdanmae()) {
+ setNpcAction(&daNpc_Md_c::land01NpcAction, &m3144);
+ } else {
+ setNpcAction(&daNpc_Md_c::land01NpcAction);
+ }
+ dComIfGp_getCamera(0)->mCamera.ForceLockOff(fopAcM_GetID(this));
+ } else if (mAcch.ChkWallHit()) {
+ if (isTypeAdanmae()) {
+ setNpcAction(&daNpc_Md_c::wallHitNpcAction, &m3144);
+ } else {
+ setNpcAction(&daNpc_Md_c::wallHitNpcAction);
+ }
+ dComIfGp_getCamera(0)->mCamera.ForceLockOff(fopAcM_GetID(this));
+ } else {
+ if (m3148 == 0) {
+ s16 sVar3 = windProc();
+ if (m314C != sVar3) {
+ if (sVar3 == 0) {
+ setAnm(10);
+ m3148 = 1;
+ } else {
+ setAnm(0xb);
+ }
+ }
+ m314C = sVar3;
+ } else if (m312A != 0) {
+ m314A--;
+ if (m314A != 0) {
+ setAnm(10);
+ } else {
+ if (isTypeAdanmae()) {
+ setNpcAction(&daNpc_Md_c::fall02NpcAction, &m3144);
+ } else {
+ setNpcAction(&daNpc_Md_c::fall02NpcAction);
+ }
+ return TRUE;
+ }
+ }
+ // Required to match.
+ cXyz cStack_68(current.pos - m30A0);
+ }
+ }
+ setAttention(true);
+ }
+ return TRUE;
+}
+
+static void unused_7570_7575_7612() {
+ daNpc_Md_c md;
+ md.setNpcAction(&daNpc_Md_c::land01NpcAction);
+ md.setNpcAction(&daNpc_Md_c::wallHitNpcAction);
+ md.setNpcAction(&daNpc_Md_c::fall02NpcAction);
}
/* 00006764-00006B24 .text windProc__10daNpc_Md_cFv */
-void daNpc_Md_c::windProc() {
+s16 daNpc_Md_c::windProc() {
/* Nonmatching */
+ f32 fVar1;
+ cCcD_Obj* pcVar3;
+ s16 sVar4;
+ s16 sVar5;
+ f32 dVar6;
+ f32 local_a4;
+ cXyz local_34;
+ cXyz cStack_64;
+ cXyz cStack_70;
+ cXyz local_88;
+
+ sVar5 = 1;
+ if (checkStatus(daMdStts_UNK8)) {
+ dKyw_get_AllWind_vec(&current.pos, &local_34, &local_a4);
+ } else {
+ local_34.setall(0.0f);
+ local_a4 = 0.0f;
+ }
+ if ((l_HIO.m1C6 != 0) && (mCyl2.ChkTgHit())) {
+ pcVar3 = mCyl2.GetTgHitObj();
+ if ((pcVar3 != NULL) && (pcVar3->ChkAtType(AT_TYPE_WIND))) {
+ local_34.set(*mCyl2.GetTgRVecP());
+ local_34.normalizeZP();
+ local_a4 = l_HIO.m148;
+ }
+ }
+ cStack_64.set(local_34.x, 0.0f, local_34.z);
+ //f32 cos = cM_scos(shape_angle.y);
+ //f32 sin = cM_ssin(shape_angle.y);
+ cStack_70.set(cM_ssin(shape_angle.y), 0.0f, cM_scos(shape_angle.y));
+ dVar6 = l_HIO.m134;
+ if (!(std::fabsf(cStack_70.abs2XZ()) < G_CM3D_F_ABS_MIN)) {
+ cStack_64.normalizeZP();
+ if (!(cStack_70.inprodXZ(cStack_64) > 0.7071f)) {
+ sVar5 = 0;
+ dVar6 = l_HIO.m130;
+ }
+ }
+ if (sVar5 == 0) {
+ fVar1 = (local_a4 * dVar6);
+ m3154 += l_HIO.m138;
+ if (m3154 > fVar1) {
+ m3154 = fVar1;
+ }
+ local_a4 = m3154;
+ } else {
+ local_a4 *= dVar6;
+ }
+ local_88 = speed + (local_34 * local_a4);
+ current.angle.y = cM_atan2s(local_88.x, local_88.z);
+ speedF = local_88.absXZ();
+ speedF = cLib_maxLimit<f32>(speedF, l_HIO.m13C);
+ speed.y = local_88.y;
+ if (m3148 == 0) {
+ maxFallSpeed = l_HIO.m110;
+ gravity = l_HIO.m114;
+ }
+ if (!(std::fabsf(local_a4) < G_CM3D_F_ABS_MIN)) {
+ sVar4 = cLib_calcTimer(&m314E);
+ s16 sVar6 = l_HIO.m1B4 - l_HIO.m1B6;
+ if ((sVar5 == 1) && (sVar4 > 0) && (sVar4 < sVar6) && (l_HIO.m1C7 != 0 || (m3148 == 0))) {
+ maxFallSpeed = l_HIO.m140;
+ gravity = l_HIO.m144;
+ }
+ }
+ return sVar5;
}
/* 00006B24-00006C80 .text fallNpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::fallNpcAction(void*) {
- /* Nonmatching */
+ if (mActionStatus == ACTION_STARTING) {
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK4);
+ setBitStatus(daMdStts_FLY);
+ setAnm(0xc);
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ } else if (mActionStatus != ACTION_ENDING) {
+ if (mAcch.ChkGroundHit()) {
+ setNpcAction(&daNpc_Md_c::land01NpcAction);
+ dComIfGp_getCamera(0)->mCamera.ForceLockOff(fopAcM_GetID(this));
+ } else if (mAcch.ChkWallHit()) {
+ setNpcAction(&daNpc_Md_c::wallHitNpcAction);
+ dComIfGp_getCamera(0)->mCamera.ForceLockOff(fopAcM_GetID(this));
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 00006C80-00006F70 .text fall02NpcAction__10daNpc_Md_cFPv */
-BOOL daNpc_Md_c::fall02NpcAction(void*) {
- /* Nonmatching */
+BOOL daNpc_Md_c::fall02NpcAction(void* param_1) {
+ if (mActionStatus == ACTION_STARTING) {
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK4);
+ setBitStatus(daMdStts_FLY);
+ maxFallSpeed = l_HIO.m110;
+ gravity = l_HIO.m114;
+ m30F8 = 120.0f;
+ setAnm(0xd);
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ if (param_1 != NULL) {
+ m3144 = 1;
+ } else {
+ m3144 = 0;
+ }
+ m3150 = current.pos.y;
+ } else if (mActionStatus != ACTION_ENDING) {
+ if ((isTypeM_Dai()) && (mAcch.ChkGroundHit())) {
+ if (m3150 - current.pos.y >= l_HIO.m1B0) {
+ dComIfGp_getVibration().StartShock(6, -0x21, cXyz(0.0f, 1.0f, 0.0f));
+ }
+ }
+ if (m3144 != 0) {
+ if (!chkAdanmaeDemoOrder()) {
+ if (mAcch.ChkGroundHit()) {
+ setNpcAction(&daNpc_Md_c::land03NpcAction);
+ dComIfGp_getCamera(0)->mCamera.ForceLockOff(fopAcM_GetID(this));
+ } else if (mAcch.ChkWallHit()) {
+ setNpcAction(&daNpc_Md_c::wallHitNpcAction);
+ dComIfGp_getCamera(0)->mCamera.ForceLockOff(fopAcM_GetID(this));
+ }
+ }
+ } else {
+ if (mAcch.ChkGroundHit()) {
+ setNpcAction(&daNpc_Md_c::land03NpcAction);
+ dComIfGp_getCamera(0)->mCamera.ForceLockOff(fopAcM_GetID(this));
+ } else if (mAcch.ChkWallHit()) {
+ setNpcAction(&daNpc_Md_c::wallHitNpcAction);
+ dComIfGp_getCamera(0)->mCamera.ForceLockOff(fopAcM_GetID(this));
+ }
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 00006F70-000071E4 .text wallHitNpcAction__10daNpc_Md_cFPv */
-BOOL daNpc_Md_c::wallHitNpcAction(void*) {
- /* Nonmatching */
+BOOL daNpc_Md_c::wallHitNpcAction(void* param_1) {
+ int iVar1;
+
+ if (mActionStatus == ACTION_STARTING) {
+ fopAcM_monsSeStart(this, JA_SE_CV_MD_CRASH, &current.pos, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ maxFallSpeed = -100.0f;
+ gravity = l_HIO.m0F4;
+ setAnm(0xd);
+ shape_angle.x = 0;
+ shape_angle.z = 0;
+ iVar1 = wallHitCheck();
+ if (iVar1 >= 0) {
+ current.angle.y = mAcchCir[iVar1].GetWallAngleY();
+ }
+ speedF = l_HIO.m150;
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK4);
+ setBitStatus(daMdStts_UNK2 | daMdStts_FLY);
+ m30F8 = 120.0f;
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ dComIfGp_getVibration().StartShock(5, -0x11, cXyz(0.0f, 1.0f, 0.0f));
+ if (param_1 != NULL) {
+ m3144 = 1;
+ } else {
+ m3144 = 0;
+ }
+ } else if (mActionStatus != ACTION_ENDING) {
+ if (m3144 != 0) {
+ if ((!chkAdanmaeDemoOrder()) && (mAcch.ChkGroundHit())) {
+ setNpcAction(&daNpc_Md_c::land02NpcAction);
+ dComIfGp_getCamera(0)->mCamera.ForceLockOff(fopAcM_GetID(this));
+ }
+ } else if (mAcch.ChkGroundHit()) {
+ setNpcAction(&daNpc_Md_c::land02NpcAction);
+ dComIfGp_getCamera(0)->mCamera.ForceLockOff(fopAcM_GetID(this));
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 000071E4-000073BC .text land01NpcAction__10daNpc_Md_cFPv */
-BOOL daNpc_Md_c::land01NpcAction(void*) {
- /* Nonmatching */
+BOOL daNpc_Md_c::land01NpcAction(void* param_1) {
+ if (mActionStatus == ACTION_STARTING) {
+ fopAcM_monsSeStart(this, JA_SE_CV_MD_LANDING, &current.pos, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ if (checkStatus(daMdStts_UNK1)) {
+ setBitEffectStatus(1);
+ }
+ maxFallSpeed = -100.0f;
+ gravity = l_HIO.m0F4;
+ setAnm(0xe);
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK2 | daMdStts_UNK4 | daMdStts_FLY);
+ shape_angle.x = 0;
+ shape_angle.z = 0;
+ speedF = 0.0f;
+ m30F8 = 120.0f;
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ if (param_1 != NULL) {
+ m3144 = 1;
+ } else {
+ m3144 = 0;
+ }
+ } else if (mActionStatus != ACTION_ENDING) {
+ if (m3144 != 0) {
+ if ((!chkAdanmaeDemoOrder()) && (m312A != 0)) {
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ }
+ } else if (m312A != 0) {
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 000073BC-000074C0 .text land02NpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::land02NpcAction(void*) {
- /* Nonmatching */
+ if (mActionStatus == ACTION_STARTING) {
+ maxFallSpeed = -100.0f;
+ gravity = l_HIO.m0F4;
+ setAnm(0xf);
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK2 | daMdStts_UNK4 | daMdStts_FLY);
+ shape_angle.x = 0;
+ shape_angle.z = 0;
+ speedF = 0.0f;
+ m30F8 = 120.0f;
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ } else if (mActionStatus != ACTION_ENDING) {
+ if (m312A != 0) {
+ setNpcAction(&daNpc_Md_c::piyo2NpcAction);
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 000074C0-000075C4 .text land03NpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::land03NpcAction(void*) {
- /* Nonmatching */
+ if (mActionStatus == ACTION_STARTING) {
+ maxFallSpeed = -100.0f;
+ gravity = l_HIO.m0F4;
+ setAnm(0xf);
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK2 | daMdStts_UNK4 | daMdStts_FLY);
+ shape_angle.x = 0;
+ shape_angle.z = 0;
+ speedF = 0.0f;
+ m30F8 = 120.0f;
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ } else if (mActionStatus != ACTION_ENDING) {
+ if (m312A != 0) {
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ }
+ setAttention(true);
+ }
+ return TRUE;
+}
+
+static void unused_7903() {
+ daNpc_Md_c md;
+ md.setNpcAction(&daNpc_Md_c::piyo2NpcAction);
}
/* 000075C4-00007824 .text piyo2NpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::piyo2NpcAction(void*) {
- /* Nonmatching */
+ if (mActionStatus == ACTION_STARTING) {
+ cLib_onBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e);
+ maxFallSpeed = -100.0f;
+ gravity = l_HIO.m0F4;
+ setAnm(0x14);
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK2 | daMdStts_UNK4 | daMdStts_FLY);
+ shape_angle.x = 0;
+ shape_angle.z = 0;
+ speedF = 0.0f;
+ m30F8 = 120.0f;
+ m3144 = l_HIO.m1BA;
+ if ((isTypeEdaichi()) || (isTypeM_Dai())) {
+ m3144 = m3144 >> 1;
+ }
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ } else if (mActionStatus != ACTION_ENDING) {
+ fopAcM_seStart(this, JA_SE_CM_MD_PIYO, 0);
+ s16 angle = shape_angle.y + getHead_y() + getBackbone_y();
+ if (cLib_calcTimer(&m3144) == 0) {
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ }
+ m312C = chkAttention(current.pos, angle, 0);
+ int local_28 = m312C;
+ if (local_28 != 0) {
+ if ((((isTypeAtorizk()) || (isTypeAdanmae())) || (isTypeM_Dra09())) || (isTypeSea())) {
+ cLib_onBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e);
+ } else {
+ cLib_offBit<u32>(attention_info.flags, fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e);
+ }
+ if (isTypeAdanmae()) {
+ mCurEventMode = 2;
+ }
+ }
+ NpcCall(&local_28);
+ lookBack(1, 1, 0);
+ current.angle.y = shape_angle.y;
+ setAttention(true);
+ }
+ return TRUE;
}
/* 00007824-0000786C .text deleteNpcAction__10daNpc_Md_cFPv */
@@ -1574,46 +2388,249 @@ BOOL daNpc_Md_c::deleteNpcAction(void*) {
/* 0000786C-00007A98 .text demoFlyNpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::demoFlyNpcAction(void*) {
- /* Nonmatching */
+ cXyz local_1c;
+
+ if (mActionStatus == ACTION_STARTING) {
+ attention_info.flags = 0;
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ current.angle.y = 0x5700;
+ } else if (mActionStatus == ACTION_ENDING) {
+ emitterDelete(m0508);
+ } else {
+ attention_info.flags = 0;
+ if (mActionStatus == ACTION_ONGOING_1) {
+ if (mJntCtrl.trnChk()) {
+ cLib_addCalcAngleS2(&m3110, l_HIO.mNpc.mMaxHeadTurnVel, 4, 0x800);
+ } else {
+ m3110 = 0;
+ setAnm(0x18);
+ mActionStatus++;
+ }
+ local_1c.x = -1511.0f;
+ local_1c.y = 14500.0f;
+ local_1c.z = 150.0f;
+ mJntCtrl.lookAtTarget(&shape_angle.y, &local_1c, current.pos, current.angle.y, m3110, false);
+ } else if (mActionStatus == ACTION_ONGOING_2) {
+ if (m312A != 0) {
+ setAnm(0x19);
+ setBitStatus(daMdStts_UNK1);
+ setWingEmitter();
+ speed.y = 0.0f;
+ gravity = 1.0f;
+ maxFallSpeed = 100.0f;
+ mActionStatus++;
+ }
+ } else if (mActionStatus == ACTION_ONGOING_3) {
+ if (m312A != 0) {
+ setAnm(10);
+ }
+ if (current.pos.y > 14500.0f) {
+ setAnm(0xb);
+ speed.y = 0.0f;
+ gravity = 0.0f;
+ maxFallSpeed = 0.0f;
+ speedF = 17.0f;
+ m3144 = 0x3c;
+ mActionStatus++;
+ }
+ } else if ((mActionStatus == 4) && (cLib_calcTimer(&m3144) == 0)) {
+ fopAcM_delete(this);
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 00007A98-00007B64 .text routeAngCheck__10daNpc_Md_cFR4cXyzPs */
-void daNpc_Md_c::routeAngCheck(cXyz&, s16*) {
- /* Nonmatching */
+void daNpc_Md_c::routeAngCheck(cXyz& param_1, s16* param_2) {
+ cXyz temp = m32A4.outprod(param_1);
+ s16 angle = cM_atan2s(temp.x, temp.z);
+ if ((m32A4.y >= 1.0f && cLib_distanceAngleS(angle, *param_2) > 0x4000) || fopAcM_searchPlayerDistanceY(this) * temp.y < 0.0f) {
+ angle += 0x8000;
+ }
+ *param_2 = angle;
}
/* 00007B64-00007DC8 .text routeWallCheck__10daNpc_Md_cFR4cXyzR4cXyzPs */
-void daNpc_Md_c::routeWallCheck(cXyz&, cXyz&, s16*) {
- /* Nonmatching */
+void daNpc_Md_c::routeWallCheck(cXyz& param_1, cXyz& param_2, s16* param_3) {
+ dBgS_LinChk lin_chk;
+ lin_chk.Set(&param_1, &param_2, NULL);
+ if (dComIfG_Bgsp()->LineCross(&lin_chk)) {
+ cM3dGPla* pla = dComIfG_Bgsp()->GetTriPla(lin_chk);
+ if (pla) {
+ routeAngCheck(pla->mNormal, param_3);
+ }
+ }
}
/* 00007DC8-00008054 .text checkForwardGroundY__10daNpc_Md_cFs */
-void daNpc_Md_c::checkForwardGroundY(s16) {
- /* Nonmatching */
+f32 daNpc_Md_c::checkForwardGroundY(s16 param_1) {
+ if (mAcchCir[0].ChkWallHit()) {
+ cM3dGPla* pla = dComIfG_Bgsp()->GetTriPla(mAcchCir[0]);
+ if (pla && cLib_distanceAngleS(param_1, cM_atan2s(pla->mNormal.x, pla->mNormal.z)) > 0x4000) {
+ dBgS_GndChk gnd_chk;
+ gnd_chk.OffWall();
+ cXyz pos(current.pos.x + cM_ssin(param_1) * 80.0f, current.pos.y + 80.0f, current.pos.z + cM_scos(param_1) * 80.0f);
+ gnd_chk.SetPos(&pos);
+ return dComIfG_Bgsp()->GroundCross(&gnd_chk);
+ }
+ }
+ //! @bug(?): is this supposed to be -G_CM3D_F_INF?
+ return -10000000.0f;
}
/* 000081EC-000082C0 .text checkWallJump__10daNpc_Md_cFs */
-void daNpc_Md_c::checkWallJump(s16) {
- /* Nonmatching */
+f32 daNpc_Md_c::checkWallJump(s16 param_1) {
+ f32 temp = checkForwardGroundY(param_1) - current.pos.y;
+ if (0.0f < temp && temp < 80.0f) {
+ return std::sqrtf(temp) * 3.6f;
+ }
+ return -1.0f;
}
/* 000082C0-00008858 .text routeCheck__10daNpc_Md_cFfPs */
-void daNpc_Md_c::routeCheck(f32, s16*) {
- /* Nonmatching */
+BOOL daNpc_Md_c::routeCheck(f32 param_1, s16* param_2) {
+ f32 temp2;
+ if (!mAcch.ChkGroundHit()) {
+ cXyz temp = current.pos;
+ current.pos = old.pos;
+ speedF = 0.0f;
+ m3131 = 1;
+ dBgS_LinChk lin_chk;
+ lin_chk.Set(&temp, &current.pos, NULL);
+ if (dComIfG_Bgsp()->LineCross(&lin_chk)) {
+ cM3dGPla* pla = dComIfG_Bgsp()->GetTriPla(lin_chk);
+ if (pla && cLib_distanceAngleS(*param_2, cM_atan2s(pla->mNormal.x, pla->mNormal.z)) > 0x4000) {
+ return TRUE;
+ }
+ }
+ if (mAcch.GetGroundH() - temp.y < -100.0f) {
+ return FALSE;
+ }
+ temp2 = 20.0f;
+ setNpcAction(&daNpc_Md_c::jumpNpcAction, &temp2);
+ } else {
+ if (mAcch.ChkWallHit()) {
+ temp2 = checkWallJump(*param_2);
+ if (temp2 >= 0.0f) {
+ setNpcAction(&daNpc_Md_c::jumpNpcAction, &temp2);
+ return TRUE;
+ }
+ if (param_1 > SQUARE(600.0f)) {
+ return FALSE;
+ }
+ }
+ cXyz temp(current.pos.x, current.pos.y + 80.0f, current.pos.z);
+ cXyz temp2(cM_ssin(*param_2) * 80.0f + current.pos.x, current.pos.y + 80.0f, cM_scos(*param_2) * 80.0f + current.pos.z);
+ routeWallCheck(temp, temp2, param_2);
+ }
+
+ return TRUE;
}
/* 00008858-00008CEC .text searchNpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::searchNpcAction(void*) {
- /* Nonmatching */
+ f32 fVar2;
+ cXyz vec2;
+ cXyz vec;
+
+ if (mActionStatus == ACTION_STARTING) {
+ setBitStatus(daMdStts_UNK4);
+ cLib_onBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ if (((m3104 == 0x11) || (m3104 == 0x16)) || (m3104 == 0x17)) {
+ setAnm(0x13);
+ mActionStatus++;
+ } else if (m3104 == 0x20) {
+ setAnm(0x21);
+ m312A = 0;
+ mActionStatus++;
+ } else {
+ setAnm(2);
+ mActionStatus += 2;
+ }
+ if (!mAcch.ChkGroundHit()) {
+ f32 gndY = mAcch.GetGroundH();
+ f32 delta = gndY - current.pos.y;
+ if (delta < 0.0f && delta >= -30.1f) {
+ current.pos.y = gndY;
+ mAcch.SetGroundHit();
+ speed.y = 0.0f;
+ }
+ }
+ } else if (mActionStatus != ACTION_ENDING) {
+ if (mActionStatus == ACTION_ONGOING_1) {
+ if (m312A != 0) {
+ setAnm(2);
+ mActionStatus++;
+ }
+ } else {
+ m312C = 1;
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ BOOL door = player->eventInfo.checkCommandDoor();
+ f32 dist_sq = fopAcM_searchPlayerDistanceXZ2(this);
+ f32 temp;
+ if (dist_sq < SQUARE(l_HIO.m0C4)) {
+ temp = 0.0f;
+ } else {
+ fVar2 = dist_sq - SQUARE(l_HIO.m0C4);
+ if (fVar2 > 90000.0f) {
+ fVar2 = 90000.0f;
+ }
+ temp = (fVar2 / 90000.0f);
+ if (temp < 0.5f) {
+ temp = 0.5f;
+ }
+ }
+ s16 angle, adjustedAngle;
+ angle = adjustedAngle = fopAcM_searchPlayerAngleY(this);
+ BOOL temp3 = routeCheck(dist_sq, &adjustedAngle) && cLib_distanceAngleS(angle, adjustedAngle) <= 0x2000;
+ if (door || !temp3 ||
+ (dComIfGp_checkPlayerStatus0(0, daPyStts0_UNK2000000_e | daPyStts0_HANG_e | daPyStts0_UNK1_e) || player->checkAttentionLock()))
+ {
+ temp = 0.0f;
+ offNpcCallCommand();
+ fopAcM_monsSeStart(this, JA_SE_CV_MD_LEFT_ALONE, &current.pos, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ if (!temp3) {
+ setNpcAction(&daNpc_Md_c::kyohiNpcAction);
+ return TRUE;
+ }
+ } else {
+ setRestart(2);
+ if (!door) {
+ if (cLib_calcTimer(&m3130) == 0) {
+ m312F ^= 1;
+ m3130 = cLib_getRndValue(8, 20);
+ }
+ }
+ }
+ walkProc(temp, adjustedAngle);
+ cLib_addCalcAngleS(&shape_angle.y, current.angle.y, l_HIO.m008.m24, l_HIO.m008.m20 * 2, l_HIO.m008.m22 * 2);
+ s16 temp4 = shape_angle.y;
+ vec2 = dNpc_playerEyePos(l_HIO.mNpc.m04);
+ vec = current.pos;
+ vec.y = eyePos.y;
+ mJntCtrl.lookAtTarget(&temp4, &vec2, vec, shape_angle.y, l_HIO.mNpc.mMaxTurnStep, false);
+ if (speedF < 0.001f) {
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ } else {
+ shape_angle.y = temp4;
+ }
+ lookBack(1, 0, 0);
+ setAttention(true);
+ }
+ }
+ return TRUE;
}
/* 00008CEC-00008E54 .text hitNpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::hitNpcAction(void* r29) {
if (mActionStatus == ACTION_STARTING) {
- setDamageFogTimer(5*30);
+ setDamageFogTimer(5 * 30);
#if VERSION > VERSION_DEMO
- // Bug: Reverb is being passed to JAIZelBasic::monsSeStart as argument r7 when it should be argument r8.
- // The fopAcM_monsSeStart inline does not support passing reverb, but the programmer didn't realize this.
+ //! @bug: Reverb is being passed to JAIZelBasic::monsSeStart as argument r7 when it should be argument r8.
+ //! The fopAcM_monsSeStart inline does not support passing reverb, but the programmer didn't realize this.
fopAcM_monsSeStart(this, JA_SE_CV_MD_CRASH, &current.pos, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
#endif
s16 angle = 0;
@@ -1707,13 +2724,105 @@ void daNpc_Md_c::walkProc(f32 f1, s16 r3) {
}
/* 00009180-000092E0 .text jumpNpcAction__10daNpc_Md_cFPv */
-BOOL daNpc_Md_c::jumpNpcAction(void*) {
- /* Nonmatching */
+BOOL daNpc_Md_c::jumpNpcAction(void* param_1) {
+ if (mActionStatus == ACTION_STARTING) {
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK2 | daMdStts_UNK4 | daMdStts_FLY);
+ setBitStatus(daMdStts_UNK4);
+ if (param_1 != NULL) {
+ speed.y = *(f32*)param_1;
+ }
+ shape_angle.x = 0;
+ shape_angle.z = 0;
+ speedF = 4.0f;
+ gravity = l_HIO.m0F4;
+ maxFallSpeed = -100.0f;
+ setAnm(0xc);
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ } else if (mActionStatus != ACTION_ENDING) {
+ if (mActionStatus == ACTION_ONGOING_1) {
+ if (mAcch.ChkGroundHit()) {
+ speedF = 0.0f;
+ setAnm(0xe);
+ m312A = 0;
+ mActionStatus++;
+ }
+ } else if (m312A != 0) {
+ speedF = 0.0f;
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 000092E0-000095C8 .text escapeNpcAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::escapeNpcAction(void*) {
- /* Nonmatching */
+ s16 sVar5;
+ s16 local_38;
+
+ if (mActionStatus == ACTION_STARTING) {
+ setBitStatus(daMdStts_UNK4);
+ cLib_onBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ if (((m3104 == 0x11) || (m3104 == 0x16)) || (m3104 == 0x17)) {
+ setAnm(0x13);
+ mActionStatus++;
+ } else if (m3104 == 0x20) {
+ setAnm(0x21);
+ m312A = 0;
+ mActionStatus++;
+ } else {
+ setAnm(2);
+ mActionStatus += 2;
+ }
+ if (!mAcch.ChkGroundHit()) {
+ f32 gndY = mAcch.GetGroundH();
+ f32 delta = gndY - current.pos.y;
+ if (delta < 0.0f && delta >= -30.1f) {
+ current.pos.y = gndY;
+ mAcch.SetGroundHit();
+ speed.y = 0.0f;
+ }
+ }
+ m3144 = 0;
+ m3146 = 0x1e;
+ } else if (mActionStatus != ACTION_ENDING) {
+ if (mActionStatus == ACTION_ONGOING_1) {
+ if (m312A != 0) {
+ setAnm(2);
+ mActionStatus++;
+ }
+ } else {
+ m312C = 1;
+ cLib_calcTimer(&m3146);
+ f32 f31 = 250000.0f;
+ f32 f30 = 1.0f;
+ if (m313F != 0) {
+ sVar5 = (m313F < 0) ? DEMO_SELECT(-0x4000, (s16)-0x4000) : DEMO_SELECT(0x4000, (s16)0x4000);
+ m3144 = DEMO_SELECT(sVar5, (s16)sVar5) + cM_atan2s(m30C4.x, m30C4.z);
+ } else if (m3146 == 0) {
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ return TRUE;
+ }
+ local_38 = m3144;
+ sVar5 = local_38;
+ if (routeCheck(f31, &local_38)) {
+ cLib_distanceAngleS(sVar5, local_38);
+ }
+ walkProc(f30, local_38);
+ cLib_addCalcAngleS(&shape_angle.y, current.angle.y, l_HIO.m008.m24, l_HIO.m008.m20 * 2, l_HIO.m008.m22 * 2);
+ s16 temp4 = shape_angle.y;
+ if (speedF < 0.001f) {
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ } else {
+ shape_angle.y = temp4;
+ }
+ lookBack(0, 0, 0);
+ setAttention(true);
+ }
+ }
+ return TRUE;
}
/* 000095C8-00009894 .text waitPlayerAction__10daNpc_Md_cFPv */
@@ -1764,36 +2873,305 @@ BOOL daNpc_Md_c::waitPlayerAction(void*) {
waitGroundCheck();
current.angle.y = shape_angle.y;
}
-
+
setAttention(mpMorf->isMorf());
}
-
+
return TRUE;
}
/* 00009894-00009B08 .text walkPlayerAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::walkPlayerAction(void*) {
- /* Nonmatching */
+ int iVar1;
+ s16 sVar3;
+ f32 dVar4;
+ f32 local_64;
+ cXyz cStack_30;
+
+ if (mActionStatus == ACTION_STARTING) {
+ setBitStatus(daMdStts_UNK4);
+ setAnm(2);
+ mMaxNormalSpeed = l_HIO.m008.m08;
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ } else if ((mActionStatus != ACTION_ENDING) && (!flyCheck())) {
+ dVar4 = g_mDoCPd_cpadInfo[0].mMainStickValue;
+ sVar3 = getStickAngY(0);
+ walkProc(dVar4, sVar3);
+ iVar1 = calcStickPos(sVar3, &cStack_30);
+ if (iVar1 == 0) {
+ cLib_addCalcAngleS(&shape_angle.y, current.angle.y, l_HIO.m008.m24, l_HIO.m008.m20 * 2, l_HIO.m008.m22 * 2);
+ }
+ s16 tempAngle = shape_angle.y;
+ mJntCtrl.lookAtTarget(&tempAngle, &cStack_30, current.pos, shape_angle.y, l_HIO.mNpc.mMaxTurnStep, false);
+ if (iVar1 > 0) {
+ shape_angle.y = tempAngle;
+ }
+ if ((speedF < 0.001f) || (iVar1 != 0)) {
+ setPlayerAction(&daNpc_Md_c::waitPlayerAction);
+ } else if (!mAcch.ChkGroundHit()) {
+ local_64 = 10.0f;
+ setPlayerAction(&daNpc_Md_c::jumpPlayerAction, &local_64);
+ } else if (mAcch.ChkWallHit()) {
+ local_64 = checkWallJump(current.angle.y);
+ if (local_64 >= 0.0f) {
+ setPlayerAction(&daNpc_Md_c::jumpPlayerAction, &local_64);
+ return TRUE;
+ }
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 00009B08-00009CCC .text hitPlayerAction__10daNpc_Md_cFPv */
-BOOL daNpc_Md_c::hitPlayerAction(void*) {
- /* Nonmatching */
+BOOL daNpc_Md_c::hitPlayerAction(void* param_1) {
+ s16 sVar2;
+
+ if (mActionStatus == ACTION_STARTING) {
+ dComIfGp_getVibration().StartShock(5, -0x21, cXyz(0.0f, 1.0f, 0.0f));
+ setDamageFogTimer(5 * 30);
+#if VERSION > VERSION_DEMO
+ fopAcM_monsSeStart(this, JA_SE_CV_MD_CRASH, &current.pos, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+#endif
+ sVar2 = 0;
+ if (param_1 != NULL) {
+ sVar2 = *(s16*)param_1;
+ }
+ current.angle.y = sVar2;
+ speedF = 10.0f;
+ speed.y = 20.0f;
+ maxFallSpeed = -100.0f;
+ gravity = l_HIO.m0F4;
+ cLib_offBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK4);
+ setBitStatus(daMdStts_UNK2);
+ m30F8 = 120.0f;
+ setAnm(0xd);
+ mActionStatus++;
+ } else if (mActionStatus != ACTION_ENDING) {
+ if (mActionStatus == ACTION_ONGOING_1) {
+ if (mAcch.ChkGroundHit()) {
+ speedF = 0.0f;
+ setAnm(0xf);
+ m312A = 0;
+ mActionStatus++;
+ }
+ } else if (m312A != 0) {
+ returnLink();
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 00009CCC-00009E7C .text jumpPlayerAction__10daNpc_Md_cFPv */
-BOOL daNpc_Md_c::jumpPlayerAction(void*) {
- /* Nonmatching */
+BOOL daNpc_Md_c::jumpPlayerAction(void* param_1) {
+ if (mActionStatus == ACTION_STARTING) {
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK2 | daMdStts_UNK4 | daMdStts_FLY);
+ setBitStatus(daMdStts_UNK4);
+ if (param_1 != NULL) {
+ speed.y = *(f32*)param_1;
+ }
+ shape_angle.x = 0;
+ shape_angle.z = 0;
+ gravity = l_HIO.m0F4;
+ maxFallSpeed = -100.0f;
+ setAnm(0xc);
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ m3150 = current.pos.y;
+ } else if (mActionStatus != ACTION_ENDING) {
+ if (mActionStatus == ACTION_ONGOING_1) {
+ if (mAcch.ChkGroundHit()) {
+ if (m3150 - current.pos.y >= l_HIO.m1B0) {
+ dComIfGp_getVibration().StartShock(6, -0x21, cXyz(0.0f, 1.0f, 0.0f));
+ }
+ speedF = 0.0f;
+ setAnm(0xe);
+ m312A = 0;
+ mActionStatus++;
+ }
+ } else if (m312A != 0) {
+ setPlayerAction(&daNpc_Md_c::waitPlayerAction);
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 00009E7C-0000A534 .text flyPlayerAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::flyPlayerAction(void*) {
- /* Nonmatching */
+ s16 sVar2;
+ int iVar3;
+ f32 dVar8;
+ f32 dVar7;
+ cXyz cStack_44;
+
+ if (mActionStatus == ACTION_STARTING) {
+ setAnm(0x18);
+ m3150 = current.pos.y + 1500.0f;
+ m3144 = l_HIO.m1BE;
+ m3146 = l_HIO.m1C0;
+ setFlyingTimer(getMaxFlyingTimer());
+ speedF = 0.0f;
+ mAcchCir[1].SetWall(60.0f, 60.0f);
+ onFlying();
+ mActionStatus++;
+ } else if (mActionStatus == ACTION_ENDING) {
+ emitterDelete(m0508);
+ deleteHane03Emitter();
+ offFlying();
+ } else {
+ if (CPad_CHECK_TRIG_A(0)) {
+ m3146 = l_HIO.m1C0;
+ } else {
+ cLib_calcTimer(&m3146);
+ }
+ if (CPad_CHECK_TRIG_A(0)) {
+ m3144 = l_HIO.m1BE;
+ } else {
+ cLib_calcTimer(&m3144);
+ }
+ if (mActionStatus == ACTION_ONGOING_1) {
+ if (m312A != 0) {
+ setBitStatus(daMdStts_UNK1);
+ setWingEmitter();
+ setAnm(0x19);
+ speedF = 0.0f;
+ speed.y = 20.0f;
+ gravity = l_HIO.m188;
+ maxFallSpeed = l_HIO.m18C;
+ m3144 = l_HIO.m1BE;
+ m3146 = l_HIO.m1C0;
+ mActionStatus++;
+ }
+ } else {
+ calcFlyingTimer();
+#if VERSION > VERSION_DEMO
+ if ((dComIfGs_isEventBit(dSv_event_flag_c::UNK_3320)) && (getFlyingTimer() < 300)) {
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_3310);
+ }
+#endif
+ if (((getFlyingTimer() == 0) || (m3144 == 0)) || (CPad_CHECK_TRIG_B(0))) {
+ if (checkStatus(daMdStts_UNK1)) {
+ setBitEffectStatus(1);
+ }
+ setPlayerAction(&daNpc_Md_c::jumpPlayerAction);
+ if (getFlyingTimer() == 0) {
+ fopAcM_monsSeStart(this, JA_SE_CV_MD_FLY_END, &current.pos, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ }
+ return TRUE;
+ }
+ if ((m3104 != 0x2e) && (m312A != 0)) {
+ setAnm(7);
+ }
+ if ((getFlyingTimer() < l_HIO.m1C4) && (m3104 == 7)) {
+ setAnm(0x2e);
+ setHane03Emitter();
+ }
+ dAttention_c& attention = dComIfGp_getAttention();
+ if ((g_mDoCPd_cpadInfo[0].mMainStickValue >= l_HIO.m104) || attention.Lockon()) {
+ dVar8 = (g_mDoCPd_cpadInfo[0].mMainStickValue * l_HIO.m10C);
+ if ((0.0f < dVar8) && (dVar8 < l_HIO.m0D8)) {
+ dVar8 = l_HIO.m0D8;
+ }
+ sVar2 = getStickAngY(0);
+ cLib_distanceAngleS(sVar2, current.angle.y);
+ dVar7 = l_HIO.m0DC;
+ if (g_mDoCPd_cpadInfo[0].mMainStickValue >= l_HIO.m104) {
+ cLib_addCalcAngleS(&current.angle.y, sVar2, 8, 0x2000, 0x400);
+ }
+ iVar3 = calcStickPos(sVar2, &cStack_44);
+ if (iVar3 == 0) {
+ cLib_addCalcAngleS(&shape_angle.y, current.angle.y, 8, 0x2000, 0x400);
+ }
+ s16 tempAngle = shape_angle.y;
+ mJntCtrl.lookAtTarget(&tempAngle, &cStack_44, current.pos, shape_angle.y, l_HIO.mNpc.mMaxTurnStep, false);
+ if (iVar3 > 0) {
+ shape_angle.y = tempAngle;
+ } else {
+ if (g_mDoCPd_cpadInfo[0].mMainStickValue < l_HIO.m104) {
+ cLib_addCalcAngleS(&current.angle.y, shape_angle.y, 8, 0x2000, 0x400);
+ }
+ }
+ f32 temp = dVar8;
+ if (temp > l_HIO.m0D4) {
+ dVar8 = l_HIO.m0D4;
+ } else {
+ dVar8 = temp;
+ }
+ cLib_chaseF(&speedF, dVar8, dVar7);
+ } else {
+ mJntCtrl.lookAtTarget(&shape_angle.y, NULL, cXyz::Zero, shape_angle.y, 0, false);
+ current.angle.y = shape_angle.y;
+ }
+ gravity = l_HIO.m188;
+ if (m3146 != 0) {
+ maxFallSpeed = 10.0f;
+ } else {
+ maxFallSpeed = l_HIO.m18C;
+ }
+ if (current.pos.y >= m3150) {
+ current.pos.y = m3150;
+ }
+ if (mAcch.ChkGroundHit()) {
+ setFlyingTimer(0);
+ setPlayerAction(&daNpc_Md_c::landPlayerAction);
+ }
+ }
+ if (!checkStatus(daMdStts_UNK2)) {
+ if (checkStatus(daMdStts_UNK1)) {
+ sVar2 = shape_angle.y - current.angle.y;
+ if ((sVar2 < 0x6000) && (sVar2 > -0x6000)) {
+ if (sVar2 > 0x2000) {
+ sVar2 = 0x2000;
+ } else if (sVar2 < -0x2000) {
+ sVar2 = -0x2000;
+ }
+ cLib_addCalcAngleS(&shape_angle.z, sVar2, 8, 0x2000, 0x400);
+ cLib_addCalcAngleS(&shape_angle.x, 0, 8, 0x2000, 0x400);
+ } else {
+ cLib_addCalcAngleS(&shape_angle.z, 0, 8, 0x2000, 0x400);
+ cLib_addCalcAngleS(&shape_angle.x, -0x2000, 8, 0x2000, 0x400);
+ }
+ } else {
+ current.angle.y = shape_angle.y;
+ shape_angle.x = 0;
+ shape_angle.z = 0;
+ }
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 0000A534-0000A698 .text landPlayerAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::landPlayerAction(void*) {
- /* Nonmatching */
+ if (mActionStatus == ACTION_STARTING) {
+ fopAcM_monsSeStart(this, JA_SE_CV_MD_LANDING, &current.pos, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ if (checkStatus(daMdStts_UNK1)) {
+ setBitEffectStatus(1);
+ }
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK2 | daMdStts_UNK4 | daMdStts_FLY);
+ setAnm(0xe);
+ shape_angle.x = 0;
+ shape_angle.z = 0;
+ gravity = l_HIO.m0F4;
+ maxFallSpeed = -100.0f;
+ speedF = 0.0f;
+ speed.y = 0.0f;
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ } else if (mActionStatus != ACTION_ENDING) {
+ if (m312A != 0) {
+ speedF = 0.0f;
+ setPlayerAction(&daNpc_Md_c::waitPlayerAction);
+ }
+ setAttention(true);
+ }
+ return TRUE;
}
/* 0000A698-0000A8D0 .text mkamaePlayerAction__10daNpc_Md_cFPv */
@@ -1839,172 +3217,51 @@ BOOL daNpc_Md_c::mkamaePlayerAction(void*) {
} else if (m312A != 0) {
setPlayerAction(&daNpc_Md_c::waitPlayerAction);
}
-
+
setAttention(true);
}
-
+
return TRUE;
}
/* 0000A8D0-0000A9BC .text carryPlayerAction__10daNpc_Md_cFPv */
BOOL daNpc_Md_c::carryPlayerAction(void*) {
- /* Nonmatching */
+ if (mActionStatus == ACTION_STARTING) {
+ clearStatus(daMdStts_UNK2 | daMdStts_UNK4 | daMdStts_FLY);
+ setAnm(0x24);
+ setBitStatus(daMdStts_UNK1);
+ setHane02Emitter();
+ fopAcM_monsSeStart(this, JA_SE_CV_MD_LIFT_UP, &current.pos, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ m30F8 = 75.0f;
+ mAcchCir[1].SetWall(60.0f, 20.0f);
+ mActionStatus++;
+ } else if (mActionStatus == ACTION_ENDING) {
+ deleteHane02Emitter();
+ }
+ return TRUE;
}
-daNpc_Md_c::ActionFunc dummy_5931 = &daNpc_Md_c::mwaitNpcAction;
-daNpc_Md_c::ActionFunc dummy_5934 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_5955 = &daNpc_Md_c::waitPlayerAction;
-daNpc_Md_c::ActionFunc dummy_5960 = &daNpc_Md_c::mkamaePlayerAction;
-daNpc_Md_c::ActionFunc dummy_5968 = &daNpc_Md_c::flyPlayerAction;
-daNpc_Md_c::ActionFunc dummy_6061 = &daNpc_Md_c::mkamaePlayerAction;
-daNpc_Md_c::ActionFunc dummy_6064 = &daNpc_Md_c::flyPlayerAction;
-daNpc_Md_c::ActionFunc dummy_6110 = &daNpc_Md_c::shipNpcAction;
-daNpc_Md_c::ActionFunc dummy_6118 = &daNpc_Md_c::jumpPlayerAction;
-daNpc_Md_c::ActionFunc dummy_6120 = &daNpc_Md_c::fallNpcAction;
-daNpc_Md_c::ActionFunc dummy_6122 = &daNpc_Md_c::fall02NpcAction;
-daNpc_Md_c::ActionFunc dummy_6301 = &daNpc_Md_c::searchNpcAction;
-daNpc_Md_c::ActionFunc dummy_6331 = &daNpc_Md_c::hitPlayerAction;
-daNpc_Md_c::ActionFunc dummy_6334 = &daNpc_Md_c::hitNpcAction;
-daNpc_Md_c::ActionFunc dummy_6367 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_6375 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_6377 = &daNpc_Md_c::searchNpcAction;
-daNpc_Md_c::ActionFunc dummy_6379 = &daNpc_Md_c::searchNpcAction;
-daNpc_Md_c::ActionFunc dummy_6386 = &daNpc_Md_c::carryNpcAction;
-daNpc_Md_c::ActionFunc dummy_6440 = &daNpc_Md_c::fallNpcAction;
-daNpc_Md_c::ActionFunc dummy_6587 = &daNpc_Md_c::demoFlyNpcAction;
-daNpc_Md_c::ActionFunc dummy_6766 = &daNpc_Md_c::squatdownNpcAction;
-daNpc_Md_c::ActionFunc dummy_6769 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_6776 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_6783 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_6836 = &daNpc_Md_c::shipNpcAction;
-daNpc_Md_c::ActionFunc dummy_6874 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_6969 = &daNpc_Md_c::searchNpcAction;
-daNpc_Md_c::ActionFunc dummy_6972 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_7006 = &daNpc_Md_c::sqwait01NpcAction;
-daNpc_Md_c::ActionFunc dummy_7036 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_7114 = &daNpc_Md_c::throwNpcAction;
-daNpc_Md_c::ActionFunc dummy_7117 = &daNpc_Md_c::land03NpcAction;
-daNpc_Md_c::ActionFunc dummy_7125 = &daNpc_Md_c::fall02NpcAction;
-daNpc_Md_c::ActionFunc dummy_7128 = &daNpc_Md_c::fallNpcAction;
-daNpc_Md_c::ActionFunc dummy_7133 = &daNpc_Md_c::throwNpcAction;
-daNpc_Md_c::ActionFunc dummy_7136 = &daNpc_Md_c::sqwait01NpcAction;
-daNpc_Md_c::ActionFunc dummy_7292 = &daNpc_Md_c::land01NpcAction;
-daNpc_Md_c::ActionFunc dummy_7297 = &daNpc_Md_c::wallHitNpcAction;
-daNpc_Md_c::ActionFunc dummy_7302 = &daNpc_Md_c::glidingNpcAction;
-daNpc_Md_c::ActionFunc dummy_7362 = &daNpc_Md_c::land01NpcAction;
-daNpc_Md_c::ActionFunc dummy_7365 = &daNpc_Md_c::land01NpcAction;
-daNpc_Md_c::ActionFunc dummy_7372 = &daNpc_Md_c::wallHitNpcAction;
-daNpc_Md_c::ActionFunc dummy_7375 = &daNpc_Md_c::wallHitNpcAction;
-daNpc_Md_c::ActionFunc dummy_7393 = &daNpc_Md_c::fall02NpcAction;
-daNpc_Md_c::ActionFunc dummy_7396 = &daNpc_Md_c::fall02NpcAction;
-daNpc_Md_c::ActionFunc dummy_7570 = &daNpc_Md_c::land01NpcAction;
-daNpc_Md_c::ActionFunc dummy_7575 = &daNpc_Md_c::wallHitNpcAction;
-daNpc_Md_c::ActionFunc dummy_7612 = &daNpc_Md_c::fall02NpcAction;
-daNpc_Md_c::ActionFunc dummy_7633 = &daNpc_Md_c::land01NpcAction;
-daNpc_Md_c::ActionFunc dummy_7638 = &daNpc_Md_c::wallHitNpcAction;
-daNpc_Md_c::ActionFunc dummy_7685 = &daNpc_Md_c::land03NpcAction;
-daNpc_Md_c::ActionFunc dummy_7690 = &daNpc_Md_c::wallHitNpcAction;
-daNpc_Md_c::ActionFunc dummy_7695 = &daNpc_Md_c::land03NpcAction;
-daNpc_Md_c::ActionFunc dummy_7700 = &daNpc_Md_c::wallHitNpcAction;
-daNpc_Md_c::ActionFunc dummy_7763 = &daNpc_Md_c::land02NpcAction;
-daNpc_Md_c::ActionFunc dummy_7768 = &daNpc_Md_c::land02NpcAction;
-daNpc_Md_c::ActionFunc dummy_7826 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_7831 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_7865 = &daNpc_Md_c::piyo2NpcAction;
-daNpc_Md_c::ActionFunc dummy_7884 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_7903 = &daNpc_Md_c::piyo2NpcAction;
-daNpc_Md_c::ActionFunc dummy_7925 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_8240 = &daNpc_Md_c::jumpNpcAction;
-daNpc_Md_c::ActionFunc dummy_8247 = &daNpc_Md_c::jumpNpcAction;
-daNpc_Md_c::ActionFunc dummy_8446 = &daNpc_Md_c::kyohiNpcAction;
-daNpc_Md_c::ActionFunc dummy_8455 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_8525 = &daNpc_Md_c::land03NpcAction;
-daNpc_Md_c::ActionFunc dummy_8625 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_8667 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_8671 = &daNpc_Md_c::waitNpcAction;
-daNpc_Md_c::ActionFunc dummy_8720 = &daNpc_Md_c::walkPlayerAction;
-daNpc_Md_c::ActionFunc dummy_8771 = &daNpc_Md_c::waitPlayerAction;
-daNpc_Md_c::ActionFunc dummy_8776 = &daNpc_Md_c::jumpPlayerAction;
-daNpc_Md_c::ActionFunc dummy_8783 = &daNpc_Md_c::jumpPlayerAction;
-daNpc_Md_c::ActionFunc dummy_8869 = &daNpc_Md_c::waitPlayerAction;
-daNpc_Md_c::ActionFunc dummy_8914 = &daNpc_Md_c::jumpPlayerAction;
-daNpc_Md_c::ActionFunc dummy_8949 = &daNpc_Md_c::landPlayerAction;
-daNpc_Md_c::ActionFunc dummy_9045 = &daNpc_Md_c::waitPlayerAction;
-daNpc_Md_c::ActionFunc dummy_9093 = &daNpc_Md_c::waitPlayerAction;
-
static daNpc_Md_c::EventActionInitFunc event_init_tbl[] = {
- &daNpc_Md_c::initialWaitEvent,
- &daNpc_Md_c::initialLetterEvent,
- &daNpc_Md_c::initialMsgSetEvent,
- &daNpc_Md_c::initialDefault,
- &daNpc_Md_c::initialMovePosEvent,
- &daNpc_Md_c::initialFlyEvent,
- &daNpc_Md_c::initialGlidingEvent,
- &daNpc_Md_c::initialLandingEvent,
- &daNpc_Md_c::initialWalkEvent,
- &daNpc_Md_c::initialWalkEvent,
- &daNpc_Md_c::initialEndEvent,
- &daNpc_Md_c::initialDefault,
- &daNpc_Md_c::initialTakeOffEvent,
- &daNpc_Md_c::initialOnetimeEvent,
- &daNpc_Md_c::initialQuake,
- &daNpc_Md_c::initialHarpPlayEvent,
- &daNpc_Md_c::initialOffLinkEvent,
- &daNpc_Md_c::initialOnLinkEvent,
- &daNpc_Md_c::initialTurnEvent,
- &daNpc_Md_c::initialSetAnmEvent,
- &daNpc_Md_c::initialLookDown,
- &daNpc_Md_c::initialLookUp,
+ &daNpc_Md_c::initialWaitEvent, &daNpc_Md_c::initialLetterEvent, &daNpc_Md_c::initialMsgSetEvent, &daNpc_Md_c::initialDefault,
+ &daNpc_Md_c::initialMovePosEvent, &daNpc_Md_c::initialFlyEvent, &daNpc_Md_c::initialGlidingEvent, &daNpc_Md_c::initialLandingEvent,
+ &daNpc_Md_c::initialWalkEvent, &daNpc_Md_c::initialWalkEvent, &daNpc_Md_c::initialEndEvent, &daNpc_Md_c::initialDefault,
+ &daNpc_Md_c::initialTakeOffEvent, &daNpc_Md_c::initialOnetimeEvent, &daNpc_Md_c::initialQuake, &daNpc_Md_c::initialHarpPlayEvent,
+ &daNpc_Md_c::initialOffLinkEvent, &daNpc_Md_c::initialOnLinkEvent, &daNpc_Md_c::initialTurnEvent, &daNpc_Md_c::initialSetAnmEvent,
+ &daNpc_Md_c::initialLookDown, &daNpc_Md_c::initialLookUp,
};
static daNpc_Md_c::EventActionFunc event_action_tbl[] = {
- &daNpc_Md_c::actionWaitEvent,
- &daNpc_Md_c::actionDefault,
- &daNpc_Md_c::actionMsgSetEvent,
- &daNpc_Md_c::actionMsgEndEvent,
- &daNpc_Md_c::actionDefault,
- &daNpc_Md_c::actionFlyEvent,
- &daNpc_Md_c::actionGlidingEvent,
- &daNpc_Md_c::actionLandingEvent,
- &daNpc_Md_c::actionWalkEvent,
- &daNpc_Md_c::actionDashEvent,
- &daNpc_Md_c::actionDefault,
- &daNpc_Md_c::actionTactEvent,
- &daNpc_Md_c::actionTakeOffEvent,
- &daNpc_Md_c::actionOnetimeEvent,
- &daNpc_Md_c::actionDefault,
- &daNpc_Md_c::actionHarpPlayEvent,
- &daNpc_Md_c::actionDefault,
- &daNpc_Md_c::actionDefault,
- &daNpc_Md_c::actionTurnEvent,
- &daNpc_Md_c::actionDefault,
- &daNpc_Md_c::actionLookDown,
- &daNpc_Md_c::actionLookDown,
+ &daNpc_Md_c::actionWaitEvent, &daNpc_Md_c::actionDefault, &daNpc_Md_c::actionMsgSetEvent, &daNpc_Md_c::actionMsgEndEvent,
+ &daNpc_Md_c::actionDefault, &daNpc_Md_c::actionFlyEvent, &daNpc_Md_c::actionGlidingEvent, &daNpc_Md_c::actionLandingEvent,
+ &daNpc_Md_c::actionWalkEvent, &daNpc_Md_c::actionDashEvent, &daNpc_Md_c::actionDefault, &daNpc_Md_c::actionTactEvent,
+ &daNpc_Md_c::actionTakeOffEvent, &daNpc_Md_c::actionOnetimeEvent, &daNpc_Md_c::actionDefault, &daNpc_Md_c::actionHarpPlayEvent,
+ &daNpc_Md_c::actionDefault, &daNpc_Md_c::actionDefault, &daNpc_Md_c::actionTurnEvent, &daNpc_Md_c::actionDefault,
+ &daNpc_Md_c::actionLookDown, &daNpc_Md_c::actionLookDown,
};
static char* cut_name_tbl[] = {
- "WAIT",
- "CREATEITEM",
- "MSG_SET",
- "MSG_END",
- "POS_MOV",
- "FLY",
- "GLIDING",
- "LANDING",
- "WALK",
- "DASH",
- "END",
- "TACT",
- "TAKEOFF",
- "Onetime",
- "QUAKE",
- "HARPPLAY",
- "OFF_PLAYER",
- "ON_PLAYER",
- "TURN",
- "SET_ANM",
- "LOOK_DOWN",
- "LOOK_UP",
+ "WAIT", "CREATEITEM", "MSG_SET", "MSG_END", "POS_MOV", "FLY", "GLIDING", "LANDING", "WALK", "DASH", "END",
+ "TACT", "TAKEOFF", "Onetime", "QUAKE", "HARPPLAY", "OFF_PLAYER", "ON_PLAYER", "TURN", "SET_ANM", "LOOK_DOWN", "LOOK_UP",
};
/* 0000A9BC-0000AC80 .text eventProc__10daNpc_Md_cFv */
@@ -2062,6 +3319,7 @@ BOOL daNpc_Md_c::eventProc() {
/* 0000AC80-0000AC84 .text initialDefault__10daNpc_Md_cFi */
void daNpc_Md_c::initialDefault(int) {
+ /* Empty function */
}
/* 0000AC84-0000ACB4 .text actionDefault__10daNpc_Md_cFi */
@@ -2071,8 +3329,24 @@ BOOL daNpc_Md_c::actionDefault(int) {
}
/* 0000ACB4-0000AD9C .text initialWaitEvent__10daNpc_Md_cFi */
-void daNpc_Md_c::initialWaitEvent(int) {
- /* Nonmatching */
+void daNpc_Md_c::initialWaitEvent(int staffIdx) {
+ int* pDisp = dComIfGp_evmng_getMyIntegerP(staffIdx, "Disp");
+ if (pDisp) {
+ if (*pDisp) {
+ fopAcM_onDraw(this);
+ } else {
+ fopDwTg_DrawQTo(&draw_tag);
+ }
+ } else {
+ fopAcM_onDraw(this);
+ }
+ int* pTimer = dComIfGp_evmng_getMyIntegerP(staffIdx, "Timer");
+ if (pTimer) {
+ m3118 = *pTimer;
+ } else {
+ m3118 = 0;
+ }
+ speedF = 0.0f;
}
/* 0000AD9C-0000ADCC .text actionWaitEvent__10daNpc_Md_cFi */
@@ -2081,13 +3355,45 @@ BOOL daNpc_Md_c::actionWaitEvent(int) {
}
/* 0000ADCC-0000AEB8 .text initialLetterEvent__10daNpc_Md_cFi */
-void daNpc_Md_c::initialLetterEvent(int) {
- /* Nonmatching */
+void daNpc_Md_c::initialLetterEvent(int staffIdx) {
+ u8 itemNo;
+
+ clearStatus(daMdStts_UNK1 | daMdStts_UNK2 | daMdStts_FLY);
+ setBitStatus(daMdStts_UNK4);
+ speedF = 0.0f;
+ m30F8 = 75.0f;
+ if (mCurEvent == 0) {
+ itemNo = 0x98;
+ } else if (mCurEvent == 1) {
+ itemNo = 0x25;
+ } else if (mCurEvent == 2) {
+ itemNo = 0x50;
+ } else {
+ itemNo = 0x98;
+ }
+ fpc_ProcID itemID = fopAcM_createItemForPresentDemo(&current.pos, itemNo, 0, -1, fopAcM_GetRoomNo(this));
+ if (itemID != fpcM_ERROR_PROCESS_ID_e) {
+ dComIfGp_event_setItemPartnerId(itemID);
+ }
+ dComIfGp_evmng_cutEnd(staffIdx);
}
/* 0000AEB8-0000AFB0 .text initialMsgSetEvent__10daNpc_Md_cFi */
-void daNpc_Md_c::initialMsgSetEvent(int) {
- /* Nonmatching */
+void daNpc_Md_c::initialMsgSetEvent(int staffIdx) {
+ if (mMsgNo == 0x19DD) {
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_1620);
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_1608);
+ dComIfGp_setNextStage("sea", 0xE3, 13, 8);
+ } else {
+ l_msgId = fpcM_ERROR_PROCESS_ID_e;
+ int* pMsgNo = dComIfGp_evmng_getMyIntegerP(staffIdx, "MsgNo");
+ if (pMsgNo != NULL) {
+ mMsgNo = *pMsgNo;
+ if ((mMsgNo == 0x19D6) && (dComIfGs_isEventBit(dSv_event_flag_c::UNK_1504))) {
+ mMsgNo = 0x19D9;
+ }
+ }
+ }
}
/* 0000AFB0-0000AFFC .text actionMsgSetEvent__10daNpc_Md_cFi */
@@ -2109,8 +3415,114 @@ BOOL daNpc_Md_c::actionMsgEndEvent(int param_1) {
}
/* 0000B070-0000B728 .text initialMovePosEvent__10daNpc_Md_cFi */
-void daNpc_Md_c::initialMovePosEvent(int) {
- /* Nonmatching */
+void daNpc_Md_c::initialMovePosEvent(int staffIdx) {
+ static char* cut_anm_tbl[] = {
+ "WAIT",
+ };
+ static const s32 cut_anm_idx_tbl[] = {
+ 0,
+ };
+
+ s16 uVar9;
+ daPy_lk_c* link;
+ char acStack_ac[12];
+
+ link = NULL;
+ const char* target = dComIfGp_evmng_getMyStringP(staffIdx, "Target");
+ if (target != NULL) {
+ strcpy(acStack_ac, target);
+ if (!strcmp(acStack_ac, "@PLAYER")) {
+ link = daPy_getPlayerLinkActorClass();
+ }
+ if (link != NULL) {
+ const char* type = dComIfGp_evmng_getMyStringP(staffIdx, "Type");
+ if (type != NULL) {
+ strcpy(acStack_ac, type);
+ }
+ if (!strcmp(acStack_ac, "LINK_DIST")) {
+ uVar9 = fopAcM_searchActorAngleY(this, link);
+ f32* pDist = dComIfGp_evmng_getMyFloatP(staffIdx, "Dist");
+ if (pDist != NULL) {
+ f32 sin = *pDist * cM_ssin(uVar9);
+ f32 cos = *pDist * cM_scos(uVar9);
+ cXyz pos(current.pos.x + sin, current.pos.y + 50.0f, current.pos.z + cos);
+ dBgS_GndChk local_a0;
+ local_a0.SetPos(&pos);
+ f32 temp_f1 = dComIfG_Bgsp()->GroundCross(&local_a0);
+ if (temp_f1 != -G_CM3D_F_INF) {
+ pos.y = temp_f1;
+ } else {
+ pos.y = current.pos.y;
+ }
+ link->setPlayerPosAndAngle(&pos, link->shape_angle.y);
+ }
+ f32* pAngle = dComIfGp_evmng_getMyFloatP(staffIdx, "Angle");
+ if (pAngle != NULL) {
+ link->setPlayerPosAndAngle(0, cM_deg2s(*pAngle) + (-0x8000 + uVar9));
+ }
+ } else {
+ if (!strcmp(acStack_ac, "DIST")) {
+ f32* pDist = dComIfGp_evmng_getMyFloatP(staffIdx, "Dist");
+ if (pDist != NULL) {
+ f32 sin = *pDist * cM_ssin(link->shape_angle.y);
+ f32 cos = *pDist * cM_scos(link->shape_angle.y);
+ current.pos.set(link->current.pos.x + sin, link->current.pos.y, link->current.pos.z + cos);
+ }
+ f32* pAngle = dComIfGp_evmng_getMyFloatP(staffIdx, "Angle");
+ if (pAngle != NULL) {
+ s16 angle = cM_deg2s(*pAngle) + (-0x8000 + link->shape_angle.y);
+ current.angle.y = angle;
+ shape_angle.y = angle;
+ }
+ } else {
+ f32* pAngle = dComIfGp_evmng_getMyFloatP(staffIdx, "Angle");
+ if (pAngle != NULL) {
+ s16 angle = cM_deg2s(*pAngle) + link->shape_angle.y;
+ current.angle.y = angle;
+ shape_angle.y = angle;
+ }
+ cXyz* pPos = dComIfGp_evmng_getMyXyzP(staffIdx, "Pos");
+ if (pPos != NULL) {
+ current.pos.set(link->current.pos.x + pPos->x, link->current.pos.y + pPos->y, link->current.pos.z + pPos->z);
+ }
+ }
+ }
+ }
+ } else {
+ f32* pAngle = dComIfGp_evmng_getMyFloatP(staffIdx, "Angle");
+ if (pAngle != NULL) {
+ s16 angle = cM_deg2s(*pAngle);
+ current.angle.y = angle;
+ shape_angle.y = angle;
+ }
+ cXyz* pPos = dComIfGp_evmng_getMyXyzP(staffIdx, "Pos");
+ if (pPos != NULL) {
+ current.pos = *pPos;
+ }
+ }
+ gravity = l_HIO.m0F4;
+ maxFallSpeed = -100.0f;
+ speedF = 0.0f;
+ speed.y = 0.0f;
+ const char* pName = dComIfGp_evmng_getMyStringP(staffIdx, "Name");
+ if (pName != NULL) {
+ strcpy(acStack_ac, pName);
+ for (s32 i = 0; i < 1; i++) {
+ if (!strcmp(acStack_ac, cut_anm_tbl[i])) {
+ setAnm(cut_anm_idx_tbl[i]);
+ break;
+ }
+ }
+ }
+ const char* pShipRide = dComIfGp_evmng_getMyStringP(staffIdx, "ShipRide");
+ if (pShipRide != NULL) {
+ strcpy(acStack_ac, pShipRide);
+ if (!strcmp(acStack_ac, "on")) {
+ onShipRide();
+ } else if (!strcmp(acStack_ac, "off")) {
+ offShipRide();
+ }
+ }
}
/* 0000B728-0000B79C .text initialFlyEvent__10daNpc_Md_cFi */
@@ -2121,12 +3533,35 @@ void daNpc_Md_c::initialFlyEvent(int) {
speed.y = 20.0f;
gravity = l_HIO.m188;
maxFallSpeed = 10.0f;
- m3118 = 60*30;
+ m3118 = 60 * 30;
}
/* 0000B79C-0000B870 .text actionFlyEvent__10daNpc_Md_cFi */
-BOOL daNpc_Md_c::actionFlyEvent(int) {
- /* Nonmatching */
+BOOL daNpc_Md_c::actionFlyEvent(int staffIdx) {
+ f32 fVar1;
+ f32* pfVar2;
+
+ pfVar2 = dComIfGp_evmng_getMyFloatP(staffIdx, "HIGH");
+ fVar1 = 0.0f;
+ if (pfVar2 != NULL) {
+ fVar1 = *pfVar2;
+ }
+ if (current.pos.y > fVar1) {
+ emitterDelete(m0508);
+ return TRUE;
+ } else {
+ if (m3104 == 0x19) {
+ if (m312A != 0) {
+ setAnm(9);
+ }
+ }
+ setAttention(true);
+ if (mAcch.ChkRoofHit()) {
+ return TRUE;
+ } else {
+ return cLib_calcTimer(&m3118) == 0 ? TRUE : FALSE;
+ }
+ }
}
/* 0000B870-0000B890 .text initialGlidingEvent__10daNpc_Md_cFi */
@@ -2137,12 +3572,27 @@ void daNpc_Md_c::initialGlidingEvent(int) {
/* 0000B890-0000B934 .text actionGlidingEvent__10daNpc_Md_cFi */
BOOL daNpc_Md_c::actionGlidingEvent(int) {
- /* Nonmatching */
+ if (mAcch.ChkGroundHit()) {
+ fopAcM_monsSeStart(this, JA_SE_CV_MD_LANDING, &current.pos, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ return TRUE;
+ } else {
+ if (!checkStatusCamTagIn()) {
+ speedF = 0.0f;
+ }
+ setAttention(true);
+ return FALSE;
+ }
}
/* 0000B934-0000B99C .text initialLandingEvent__10daNpc_Md_cFi */
void daNpc_Md_c::initialLandingEvent(int) {
- /* Nonmatching */
+ maxFallSpeed = -100.0f;
+ speedF = 0.0f;
+ shape_angle.x = 0;
+ shape_angle.z = 0;
+ clearStatus(daMdStts_UNK1);
+ setAnm(0x10);
+ m312A = 0;
}
/* 0000B99C-0000B9E0 .text actionLandingEvent__10daNpc_Md_cFi */
@@ -2158,27 +3608,193 @@ BOOL daNpc_Md_c::actionLandingEvent(int) {
/* 0000B9E0-0000B9F8 .text initialWalkEvent__10daNpc_Md_cFi */
void daNpc_Md_c::initialWalkEvent(int) {
speedF = 0.0f;
- m3118 = 20*30;
+ m3118 = DEMO_SELECT(1800, 20 * 30);
}
/* 0000B9F8-0000BCC4 .text actionWalkEvent__10daNpc_Md_cFi */
-BOOL daNpc_Md_c::actionWalkEvent(int) {
- /* Nonmatching */
+BOOL daNpc_Md_c::actionWalkEvent(int staffIdx) {
+ cXyz local_24;
+ cXyz local_3c;
+
+ cXyz* pfVar2 = dComIfGp_evmng_getMyXyzP(staffIdx, "Pos");
+ f32* pfVar3 = dComIfGp_evmng_getMyFloatP(staffIdx, "Speed");
+ f32* pfVar4 = dComIfGp_evmng_getMyFloatP(staffIdx, "RunRate");
+ if (pfVar2 != NULL) {
+ local_24 = *pfVar2;
+ local_3c = local_24 - current.pos;
+ if (local_3c.absXZ() < 10.0f) {
+ speedF = 0.0f;
+ return TRUE;
+ }
+ current.angle.y = cM_atan2s(local_3c.x, local_3c.z);
+ if (mJntCtrl.trnChk()) {
+ cLib_addCalcAngleS2(&m3110, l_HIO.mNpc.mMaxHeadTurnVel, 4, 0x800);
+ } else {
+ m3110 = 0;
+ if (pfVar3 != NULL) {
+ speedF = *pfVar3;
+ } else {
+ speedF = 5.0f;
+ }
+ if (pfVar4 != NULL) {
+ mRunRate = *pfVar4;
+ } else {
+ mRunRate = 0.0f;
+ }
+ setAnm(2);
+ }
+ mJntCtrl.setTrn();
+ mJntCtrl.lookAtTarget(&shape_angle.y, &local_24, current.pos, current.angle.y, m3110, false);
+ setAttention(true);
+#if VERSION < VERSION_USA
+ if (wallHitCheck() > 0)
+#else
+ if (wallHitCheck() >= 0)
+#endif
+ {
+#if VERSION >= VERSION_USA
+ speedF = 0.0f;
+#endif
+ current.pos = local_24;
+ return TRUE;
+ }
+ if (cLib_calcTimer(&m3118) != 0) {
+ return FALSE;
+ }
+#if VERSION >= VERSION_USA
+ speedF = 0.0f;
+ current.pos = local_24;
+#endif
+ }
+ return TRUE;
}
/* 0000BCC4-0000BF1C .text actionDashEvent__10daNpc_Md_cFi */
-BOOL daNpc_Md_c::actionDashEvent(int) {
- /* Nonmatching */
+BOOL daNpc_Md_c::actionDashEvent(int staffIdx) {
+ cXyz local_24;
+ cXyz local_3c;
+
+ cXyz* pfVar2 = dComIfGp_evmng_getMyXyzP(staffIdx, "Pos");
+ if (pfVar2 != NULL) {
+ local_24 = *pfVar2;
+ local_3c = local_24 - current.pos;
+ if (local_3c.absXZ() < 10.0f) {
+ speedF = 0.0f;
+ return TRUE;
+ }
+ current.angle.y = cM_atan2s(local_3c.x, local_3c.z);
+ if (mJntCtrl.trnChk()) {
+ cLib_addCalcAngleS2(&m3110, l_HIO.mNpc.mMaxHeadTurnVel, 4, 0x800);
+ } else {
+ m3110 = 0;
+ speedF = 17.0f;
+ mRunRate = 1.0f;
+ setAnm(2);
+ }
+ mJntCtrl.setTrn();
+ mJntCtrl.lookAtTarget(&shape_angle.y, &local_24, current.pos, current.angle.y, m3110, false);
+#if VERSION < VERSION_USA
+ if (wallHitCheck() > 0)
+#else
+ if (wallHitCheck() >= 0)
+#endif
+ {
+#if VERSION >= VERSION_USA
+ speedF = 0.0f;
+#endif
+ current.pos = local_24;
+ return TRUE;
+ }
+ setAttention(true);
+ if (cLib_calcTimer(&m3118) != 0) {
+ return FALSE;
+ }
+#if VERSION >= VERSION_USA
+ speedF = 0.0f;
+ current.pos = local_24;
+#endif
+ }
+ return TRUE;
}
/* 0000BF1C-0000C12C .text initialEndEvent__10daNpc_Md_cFi */
-void daNpc_Md_c::initialEndEvent(int) {
- /* Nonmatching */
+void daNpc_Md_c::initialEndEvent(int staffIdx) {
+ int iVar1;
+ int* piVar2;
+
+ piVar2 = dComIfGp_evmng_getMyIntegerP(staffIdx, "EndMode");
+ if (piVar2 == NULL) {
+ iVar1 = 0;
+ } else {
+ iVar1 = *piVar2;
+ }
+ switch (iVar1) {
+ case -2:
+ if (mMsgNo == 0x19de) {
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_1620);
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_1608);
+ dComIfGp_setNextStage("sea", 0xE3, 13, 8);
+ }
+ // Fall-through
+ case -1:
+ dComIfGp_event_reset();
+ if (checkStatus(daMdStts_UNK80)) {
+ setHarpPlayNum(0);
+ }
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ break;
+ case 3:
+ setNpcAction(&daNpc_Md_c::deleteNpcAction);
+ break;
+ case 2:
+ clearStatus(daMdStts_UNK1);
+ setNpcAction(&daNpc_Md_c::squatdownNpcAction);
+ break;
+ default:
+ case 0:
+ clearStatus(daMdStts_UNK1);
+ if (checkStatus(daMdStts_UNK80)) {
+ setHarpPlayNum(0);
+ } else {
+ setAnm(0);
+ }
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ break;
+ }
}
/* 0000C12C-0000C250 .text actionTactEvent__10daNpc_Md_cFi */
-BOOL daNpc_Md_c::actionTactEvent(int) {
- /* Nonmatching */
+BOOL daNpc_Md_c::actionTactEvent(int staffIdx) {
+ int* pPrm0 = dComIfGp_evmng_getMyIntegerP(staffIdx, "prm0");
+ s32 prm = 0;
+
+ if (pPrm0 != NULL) {
+ prm = *pPrm0;
+ }
+ s32 song = daPy_getPlayerActorClass()->getTactMusic();
+ if (song >= 0) {
+ setBitStatus(daMdStts_UNK400);
+ }
+ BOOL result = talk(1);
+ if (result) {
+ if (checkStatus(daMdStts_UNK400)) {
+ clearStatus(daMdStts_UNK400);
+ if (song == prm) {
+ mMsgNo = 0x19dd;
+ } else {
+ mMsgNo = 0x19da;
+ }
+ } else {
+ mCurEventMode = 10;
+ if (checkStatus(daMdStts_UNK200)) {
+ mMsgNo = 0x19dc;
+ clearStatus(daMdStts_UNK200);
+ }
+ fopAcM_onDraw(this);
+ dComIfGp_event_reset();
+ }
+ }
+ return result;
}
/* 0000C250-0000C288 .text initialTakeOffEvent__10daNpc_Md_cFi */
@@ -2197,8 +3813,28 @@ BOOL daNpc_Md_c::actionTakeOffEvent(int) {
}
/* 0000C2C4-0000C360 .text initialOnetimeEvent__10daNpc_Md_cFi */
-void daNpc_Md_c::initialOnetimeEvent(int) {
- /* Nonmatching */
+void daNpc_Md_c::initialOnetimeEvent(int staffIdx) {
+ static char* cut_anm_tbl[] = {
+ "WATASU",
+ };
+ static const s32 cut_anm_idx_tbl[] = {
+ 0x1A,
+ };
+ char acStack_18[16];
+
+ s32 var_r31 = 0x1A;
+ const char* pName = dComIfGp_evmng_getMyStringP(staffIdx, "Name");
+ if (pName != NULL) {
+ strcpy(acStack_18, pName);
+ for (s32 i = 0; i < 1; i++) {
+ if (!strcmp(acStack_18, cut_anm_tbl[i])) {
+ var_r31 = cut_anm_idx_tbl[i];
+ break;
+ }
+ }
+ }
+ setAnm(var_r31);
+ m312A = 0;
}
/* 0000C360-0000C3C4 .text actionOnetimeEvent__10daNpc_Md_cFi */
@@ -2215,13 +3851,28 @@ BOOL daNpc_Md_c::actionOnetimeEvent(int) {
}
/* 0000C3C4-0000C48C .text initialQuake__10daNpc_Md_cFi */
-void daNpc_Md_c::initialQuake(int) {
- /* Nonmatching */
+void daNpc_Md_c::initialQuake(int staffIdx) {
+ char* __src;
+ char acStack_1c[12];
+
+ __src = dComIfGp_evmng_getMyStringP(staffIdx, "Mode");
+ if (__src != NULL) {
+ strcpy(acStack_1c, __src);
+ if (!strcmp(acStack_1c, "Start")) {
+ dComIfGp_getVibration().StartQuake(7, 1, cXyz(0.0f, 1.0f, 0.0f));
+ }
+ if (!strcmp(acStack_1c, "Stop")) {
+ dComIfGp_getVibration().StopQuake(1);
+ }
+ }
}
/* 0000C48C-0000C4DC .text setHarpPlayNum__10daNpc_Md_cFi */
void daNpc_Md_c::setHarpPlayNum(int) {
- /* Nonmatching */
+ static const s32 l_harp_play_anm[] = {0x16, 0x17, 0x16, 0x17, 0x16, 0x17};
+
+ int iVar1 = cLib_getRndValue(0, 4);
+ setAnm(l_harp_play_anm[iVar1]);
}
/* 0000C4DC-0000C500 .text initialHarpPlayEvent__10daNpc_Md_cFi */
@@ -2251,18 +3902,99 @@ void daNpc_Md_c::initialOnLinkEvent(int) {
}
/* 0000C58C-0000C654 .text initialTurnEvent__10daNpc_Md_cFi */
-void daNpc_Md_c::initialTurnEvent(int) {
- /* Nonmatching */
+void daNpc_Md_c::initialTurnEvent(int staffIdx) {
+ int* puVar1 = dComIfGp_evmng_getMyIntegerP(staffIdx, "Timer");
+ if (puVar1 != NULL) {
+ m3118 = (s16)*puVar1;
+ } else {
+ m3118 = 0;
+ }
+ cXyz* pfVar2 = dComIfGp_evmng_getMyXyzP(staffIdx, "Pos");
+ if (pfVar2 != NULL) {
+ m30B8 = *pfVar2;
+ } else {
+ m30B8.setall(0.0f);
+ }
}
/* 0000C654-0000C7CC .text actionTurnEvent__10daNpc_Md_cFi */
-BOOL daNpc_Md_c::actionTurnEvent(int) {
- /* Nonmatching */
+BOOL daNpc_Md_c::actionTurnEvent(int staffIdx) {
+ int iVar4;
+
+ setAttention(true);
+ char local_20[10] = {
+ "@PLAYER",
+ };
+ const char* target = dComIfGp_evmng_getMyStringP(staffIdx, "Target");
+ if (target != NULL) {
+ strcpy(local_20, target);
+ }
+ const int* type = dComIfGp_evmng_getMyIntegerP(staffIdx, "Type");
+ if (type == NULL) {
+ iVar4 = 0;
+ } else {
+ iVar4 = *type;
+ }
+ mJntCtrl.setParam(
+ l_HIO.mNpc.mMaxBackboneX,
+ l_HIO.mNpc.mMaxBackboneY,
+ l_HIO.mNpc.mMinBackboneX,
+ l_HIO.mNpc.mMinBackboneY,
+ l_HIO.mNpc.mMaxHeadX,
+ l_HIO.mNpc.mMaxHeadY,
+ -500,
+ l_HIO.mNpc.mMinHeadY,
+ l_HIO.mNpc.mMaxTurnStep
+ );
+ if (iVar4 == 2) {
+ mJntCtrl.setTrn();
+ iVar4 = 0;
+ }
+ if (!strcmp(local_20, "@PLAYER")) {
+ lookBack(1, 0, iVar4);
+ } else {
+ lookBack(&m30B8, 1, iVar4);
+ }
+ if (cLib_calcTimer(&m3118) != 0) {
+ return FALSE;
+ }
+ return TRUE;
}
/* 0000C7CC-0000CA5C .text initialSetAnmEvent__10daNpc_Md_cFi */
-void daNpc_Md_c::initialSetAnmEvent(int) {
- /* Nonmatching */
+void daNpc_Md_c::initialSetAnmEvent(int staffIdx) {
+ int* puVar1 = dComIfGp_evmng_getMyIntegerP(staffIdx, "Number");
+ if (puVar1 != NULL) {
+ int iVar1 = setAnm(getAnmType(*puVar1));
+ if (iVar1 != 0) {
+ setBitStatus(daMdStts_UNK1);
+ } else {
+ clearStatus(daMdStts_UNK1);
+ }
+ }
+ speedF = 0.0f;
+ f32* pfVar2 = dComIfGp_evmng_getMyFloatP(staffIdx, "PlaySpeed");
+ if (pfVar2 != NULL) {
+ mpMorf->setPlaySpeed(*pfVar2);
+ mpArmMorf->setPlaySpeed(*pfVar2);
+ mpWingMorf->setPlaySpeed(*pfVar2);
+ if (*pfVar2 < 0.0f) {
+ mpMorf->setFrame(mpMorf->getEndFrame());
+ mpArmMorf->setFrame(mpArmMorf->getEndFrame());
+ mpWingMorf->setFrame(mpWingMorf->getEndFrame());
+ }
+ mpMorf->setLoopFrame(mpMorf->getFrame());
+ mpArmMorf->setLoopFrame(mpArmMorf->getFrame());
+ mpWingMorf->setLoopFrame(mpWingMorf->getFrame());
+ m30D0 = mpMorf->getFrame();
+ }
+ pfVar2 = dComIfGp_evmng_getMyFloatP(staffIdx, "MorfFrame");
+ if (pfVar2 != NULL) {
+ mpMorf->setMorf(*pfVar2);
+ mpArmMorf->setMorf(*pfVar2);
+ mpWingMorf->setMorf(*pfVar2);
+ }
+ clearJntAng();
}
/* 0000CA5C-0000CA80 .text initialLookDown__10daNpc_Md_cFi */
@@ -2277,7 +4009,20 @@ void daNpc_Md_c::initialLookUp(int) {
/* 0000CAA4-0000CB8C .text actionLookDown__10daNpc_Md_cFi */
BOOL daNpc_Md_c::actionLookDown(int) {
- /* Nonmatching */
+ s16 desiredYRot;
+ cXyz local_14;
+ cXyz cStack_20;
+
+ m30AC.y = -50.0f;
+ cXyz local_38(0.0f, 0.0f, 0.0f);
+ desiredYRot = shape_angle.y;
+ local_38.set(current.pos.x, eyePos.y, current.pos.z);
+ local_14 = local_38;
+ mDoMtx_stack_c::YrotS(desiredYRot);
+ mDoMtx_stack_c::multVec(&m30AC, &cStack_20);
+ local_14 += cStack_20;
+ mJntCtrl.lookAtTarget(&shape_angle.y, &local_14, local_38, desiredYRot, m3110, false);
+ return TRUE;
}
/* 0000CB8C-0000CC10 .text talk_init__10daNpc_Md_cFv */
@@ -2331,66 +4076,26 @@ BOOL daNpc_Md_c::talk(int r4) {
offXYTalk();
return TRUE;
}
-
+
if (!fopAcM_checkCarryNow(this) && !isShipRide() && mMsgNo != 0x05AC) {
if (m313A == 1 && msgAnmAtr == 0x14 && m312A != 0) {
setAnm(0x1B);
m313A = 1;
}
}
-
+
return FALSE;
}
/* 0000CDCC-0000CDF4 .text getAnmType__10daNpc_Md_cFUc */
int daNpc_Md_c::getAnmType(u8 r4) {
static const int anmTypeData_Talk[] = {
- 0x00000000,
- 0x00000002,
- 0x00000002,
- 0x00000003,
- 0x00000004,
- 0x00000005,
- 0x00000006,
- 0x0000000B,
- 0x00000007,
- 0x00000009,
- 0x0000000C,
- 0x0000000D,
- 0x0000000E,
- 0x0000000F,
- 0x00000011,
- 0x00000014,
- 0x00000012,
- 0x0000001B,
- 0x0000001C,
- 0x00000015,
- 0x00000015,
- 0x00000016,
- 0x00000017,
- 0x00000018,
- 0x00000019,
- 0x0000001D,
- 0x0000001A,
- 0x00000010,
- 0x0000001F,
- 0x00000020,
- 0x00000022,
- 0x0000001E,
- 0x00000023,
- 0x00000024,
- 0x00000025,
- 0x00000026,
- 0x00000027,
- 0x00000028,
- 0x00000029,
- 0x0000002A,
- 0x0000002B,
- 0x0000002C,
- 0x0000002D,
- 0x00000031,
+ 0x00000000, 0x00000002, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x0000000B, 0x00000007, 0x00000009, 0x0000000C,
+ 0x0000000D, 0x0000000E, 0x0000000F, 0x00000011, 0x00000014, 0x00000012, 0x0000001B, 0x0000001C, 0x00000015, 0x00000015, 0x00000016,
+ 0x00000017, 0x00000018, 0x00000019, 0x0000001D, 0x0000001A, 0x00000010, 0x0000001F, 0x00000020, 0x00000022, 0x0000001E, 0x00000023,
+ 0x00000024, 0x00000025, 0x00000026, 0x00000027, 0x00000028, 0x00000029, 0x0000002A, 0x0000002B, 0x0000002C, 0x0000002D, 0x00000031,
};
-
+
if (r4 < ARRAY_SIZE(anmTypeData_Talk)) {
return anmTypeData_Talk[r4];
} else {
@@ -2422,11 +4127,11 @@ BOOL daNpc_Md_c::initTexPatternAnm(u8 btpAnmTblIdx, bool param_2) {
{"md_kyoro2.btp", 1},
{"md_unazuki.btp", 1},
};
-
- J3DModelData* modelData = mpMorf->getModel()->getModelData();
+
+ J3DModelData* modelData = getModel()->getModelData();
bool ret = false;
J3DAnmTexPattern* eyeTexPtrn = (J3DAnmTexPattern*)dComIfG_getObjectRes(mModelArcName, btpAnmTbl[btpAnmTblIdx].m00);
- JUT_ASSERT(7502, eyeTexPtrn != NULL);
+ JUT_ASSERT(VERSION_SELECT(7355, 7487, 7502, 7502), eyeTexPtrn != NULL);
if (m0520.init(modelData, eyeTexPtrn, TRUE, J3DFrameCtrl::EMode_RESET, 1.0f, 0, -1, param_2, FALSE)) {
m3112 = eyeTexPtrn->getFrameMax();
m3133 = 0;
@@ -2434,7 +4139,7 @@ BOOL daNpc_Md_c::initTexPatternAnm(u8 btpAnmTblIdx, bool param_2) {
m3137 = btpAnmTblIdx;
ret = true;
}
-
+
return ret;
}
@@ -2453,8 +4158,15 @@ void daNpc_Md_c::playTexPatternAnm() {
}
/* 0000CFCC-0000D0B8 .text initLightBtkAnm__10daNpc_Md_cFb */
-BOOL daNpc_Md_c::initLightBtkAnm(bool) {
- /* Nonmatching */
+BOOL daNpc_Md_c::initLightBtkAnm(bool param_1) {
+ J3DModelData* pModelData = mpHarpLightModel->getModelData();
+ bool ret = false;
+ J3DAnmTextureSRTKey* a_lightBtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(mModelArcName, "ymdhp00.btk");
+ JUT_ASSERT(VERSION_SELECT(7412, 7544, 7559, 7559), a_lightBtk != NULL);
+ if (mLightBtkAnm.init(pModelData, a_lightBtk, true, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, param_1, 0)) {
+ ret = true;
+ }
+ return ret;
}
/* 0000D0B8-0000D0DC .text playLightBtkAnm__10daNpc_Md_cFv */
@@ -2478,131 +4190,436 @@ BOOL daNpc_Md_c::setAnm(int anmIdx) {
};
static anm_tbl l_anmTbl[] = {
- {"md_wait01.bck", ""},
- {"md_walk.bck", "md_run.bck"},
- {"md_squatdown.bck", ""},
- {"md_sqwait01.bck", ""},
- {"md_sqwait02.bck", ""},
- {"md_firing.bck", ""},
- {"md_fly01.bck", ""},
- {"md_fly02.bck", ""},
- {"md_gliding.bck", ""},
- {"md_fall.bck", ""},
- {"md_fall02.bck", ""},
- {"md_land.bck", ""},
- {"md_land02.bck", ""},
- {"md_land03.bck", ""},
- {"md_kamaewait.bck", ""},
- {"md_kamae.bck", ""},
- {"md_piyo2.bck", ""},
- {"md_ojigi.bck", ""},
- {"md_harpplay01.bck", ""},
- {"md_harpplay02.bck", ""},
- {"md_takeoff01.bck", ""},
- {"md_takeoff02.bck", ""},
- {"md_watasu.bck", ""},
- {"md_talk01.bck", ""},
- {"md_talk02.bck", ""},
- {"md_talk03.bck", ""},
- {"md_talk04.bck", ""},
- {"md_mkamae.bck", ""},
- {"md_mwait.bck", ""},
- {"md_oriwait.bck", ""},
- {"md_shipwait.bck", ""},
- {"md_caught01.bck", ""},
- {"md_caught02.bck", ""},
- {"md_kyohi.bck", ""},
- {"md_kyoro2.bck", ""},
- {"md_shipwait02.bck", ""},
- {"md_shiptalk01.bck", ""},
- {"md_talk05.bck", ""},
- {"md_unazuki.bck", ""},
+ {"md_wait01.bck", ""}, {"md_walk.bck", "md_run.bck"}, {"md_squatdown.bck", ""}, {"md_sqwait01.bck", ""}, {"md_sqwait02.bck", ""},
+ {"md_firing.bck", ""}, {"md_fly01.bck", ""}, {"md_fly02.bck", ""}, {"md_gliding.bck", ""}, {"md_fall.bck", ""},
+ {"md_fall02.bck", ""}, {"md_land.bck", ""}, {"md_land02.bck", ""}, {"md_land03.bck", ""}, {"md_kamaewait.bck", ""},
+ {"md_kamae.bck", ""}, {"md_piyo2.bck", ""}, {"md_ojigi.bck", ""}, {"md_harpplay01.bck", ""}, {"md_harpplay02.bck", ""},
+ {"md_takeoff01.bck", ""}, {"md_takeoff02.bck", ""}, {"md_watasu.bck", ""}, {"md_talk01.bck", ""}, {"md_talk02.bck", ""},
+ {"md_talk03.bck", ""}, {"md_talk04.bck", ""}, {"md_mkamae.bck", ""}, {"md_mwait.bck", ""}, {"md_oriwait.bck", ""},
+ {"md_shipwait.bck", ""}, {"md_caught01.bck", ""}, {"md_caught02.bck", ""}, {"md_kyohi.bck", ""}, {"md_kyoro2.bck", ""},
+ {"md_shipwait02.bck", ""}, {"md_shiptalk01.bck", ""}, {"md_talk05.bck", ""}, {"md_unazuki.bck", ""},
};
+
static anm_prm l_anmPrm[] = {
- {0x00, 0x00, 0x00, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x00, 0x00, 0x00, J3DFrameCtrl::EMode_NONE, 8.0f, 1.0f},
- {0x01, 0x01, 0x00, J3DFrameCtrl::EMode_LOOP, 4.0f, 1.0f},
- {0x02, 0x02, 0x00, J3DFrameCtrl::EMode_NONE, 4.0f, 1.0f},
- {0x03, 0x03, 0x00, J3DFrameCtrl::EMode_LOOP, 4.0f, 1.0f},
- {0x04, 0x04, 0x00, J3DFrameCtrl::EMode_LOOP, 4.0f, 1.0f},
- {0x05, 0x81, 0x00, J3DFrameCtrl::EMode_NONE, 0.0f, 1.0f},
- {0x06, 0x82, 0x00, J3DFrameCtrl::EMode_LOOP, 3.0f, 1.0f},
- {0x06, 0x82, 0x00, J3DFrameCtrl::EMode_NONE, 3.0f, 1.0f},
- {0x07, 0x83, 0x03, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x07, 0x83, 0x03, J3DFrameCtrl::EMode_NONE, 8.0f, 1.0f},
- {0x08, 0x84, 0x00, J3DFrameCtrl::EMode_LOOP, 4.0f, 1.0f},
- {0x09, 0x05, 0x01, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x0A, 0x06, 0x02, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x0B, 0x07, 0x06, J3DFrameCtrl::EMode_NONE, 0.0f, 1.0f},
- {0x0C, 0x08, 0x07, J3DFrameCtrl::EMode_NONE, 0.0f, 1.0f},
- {0x0D, 0x09, 0x06, J3DFrameCtrl::EMode_NONE, 0.0f, 1.0f},
- {0x0E, 0x0A, 0x05, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x0F, 0x0B, 0x04, J3DFrameCtrl::EMode_NONE, 8.0f, 1.0f},
- {0x0F, 0x0B, 0x04, J3DFrameCtrl::EMode_NONE, 8.0f, -1.0f},
- {0x10, 0x0C, 0x08, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x11, 0x0D, 0x00, J3DFrameCtrl::EMode_NONE, 8.0f, 1.0f},
- {0x12, 0x0E, 0x09, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x13, 0x0F, 0x09, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x14, 0x10, 0x00, J3DFrameCtrl::EMode_NONE, 8.0f, 1.0f},
- {0x15, 0x85, 0x00, J3DFrameCtrl::EMode_NONE, 8.0f, 1.0f},
- {0x16, 0x11, 0x0A, J3DFrameCtrl::EMode_NONE, 8.0f, 1.0f},
- {0x17, 0x12, 0x00, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x18, 0x13, 0x00, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x19, 0x14, 0x00, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x1A, 0x15, 0x00, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x1B, 0x16, 0x00, J3DFrameCtrl::EMode_NONE, 8.0f, 1.4f},
- {0x1C, 0x17, 0x00, J3DFrameCtrl::EMode_LOOP, 8.0f, 0.0f},
- {0x1B, 0x16, 0x00, J3DFrameCtrl::EMode_NONE, 8.0f, -1.4f},
- {0x1D, 0x18, 0x0B, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x1E, 0x19, 0x00, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x1F, 0x86, 0x0C, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x20, 0x87, 0x0C, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x17, 0x12, 0x05, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x21, 0x1A, 0x0D, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x22, 0x1B, 0x00, J3DFrameCtrl::EMode_NONE, 8.0f, 1.0f},
- {0x1A, 0x15, 0x05, J3DFrameCtrl::EMode_NONE, 8.0f, 1.0f},
- {0x23, 0x1C, 0x00, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x24, 0x1D, 0x00, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x25, 0x1E, 0x00, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x25, 0x1E, 0x05, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x07, 0x83, 0x03, J3DFrameCtrl::EMode_LOOP, 8.0f, 1.0f},
- {0x04, 0x04, 0x05, J3DFrameCtrl::EMode_LOOP, 4.0f, 1.0f},
- {0x00, 0x00, 0x00, J3DFrameCtrl::EMode_LOOP, 0.0f, 1.0f},
- {0x26, 0x1F, 0x0F, J3DFrameCtrl::EMode_NONE, 8.0f, 1.0f},
+ {
+ /* anmTblIdx */ 0x00,
+ /* armAnmTblIdx */ 0x00,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x00,
+ /* armAnmTblIdx */ 0x00,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x01,
+ /* armAnmTblIdx */ 0x01,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 4.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x02,
+ /* armAnmTblIdx */ 0x02,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 4.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x03,
+ /* armAnmTblIdx */ 0x03,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 4.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x04,
+ /* armAnmTblIdx */ 0x04,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 4.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x05,
+ /* armAnmTblIdx */ 0x81,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 0.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x06,
+ /* armAnmTblIdx */ 0x82,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 3.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x06,
+ /* armAnmTblIdx */ 0x82,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 3.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x07,
+ /* armAnmTblIdx */ 0x83,
+ /* btpAnmTblIdx */ 0x03,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x07,
+ /* armAnmTblIdx */ 0x83,
+ /* btpAnmTblIdx */ 0x03,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x08,
+ /* armAnmTblIdx */ 0x84,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 4.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x09,
+ /* armAnmTblIdx */ 0x05,
+ /* btpAnmTblIdx */ 0x01,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x0A,
+ /* armAnmTblIdx */ 0x06,
+ /* btpAnmTblIdx */ 0x02,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x0B,
+ /* armAnmTblIdx */ 0x07,
+ /* btpAnmTblIdx */ 0x06,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 0.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x0C,
+ /* armAnmTblIdx */ 0x08,
+ /* btpAnmTblIdx */ 0x07,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 0.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x0D,
+ /* armAnmTblIdx */ 0x09,
+ /* btpAnmTblIdx */ 0x06,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 0.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x0E,
+ /* armAnmTblIdx */ 0x0A,
+ /* btpAnmTblIdx */ 0x05,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x0F,
+ /* armAnmTblIdx */ 0x0B,
+ /* btpAnmTblIdx */ 0x04,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x0F,
+ /* armAnmTblIdx */ 0x0B,
+ /* btpAnmTblIdx */ 0x04,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 8.0f,
+ /* speed */ -1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x10,
+ /* armAnmTblIdx */ 0x0C,
+ /* btpAnmTblIdx */ 0x08,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x11,
+ /* armAnmTblIdx */ 0x0D,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x12,
+ /* armAnmTblIdx */ 0x0E,
+ /* btpAnmTblIdx */ 0x09,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x13,
+ /* armAnmTblIdx */ 0x0F,
+ /* btpAnmTblIdx */ 0x09,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x14,
+ /* armAnmTblIdx */ 0x10,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x15,
+ /* armAnmTblIdx */ 0x85,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x16,
+ /* armAnmTblIdx */ 0x11,
+ /* btpAnmTblIdx */ 0x0A,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x17,
+ /* armAnmTblIdx */ 0x12,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x18,
+ /* armAnmTblIdx */ 0x13,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x19,
+ /* armAnmTblIdx */ 0x14,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x1A,
+ /* armAnmTblIdx */ 0x15,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x1B,
+ /* armAnmTblIdx */ 0x16,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 8.0f,
+ /* speed */ DEMO_SELECT(1.0f, 1.4f),
+ },
+ {
+ /* anmTblIdx */ 0x1C,
+ /* armAnmTblIdx */ 0x17,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 0.0f,
+ },
+ {
+ /* anmTblIdx */ 0x1B,
+ /* armAnmTblIdx */ 0x16,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 8.0f,
+ /* speed */ DEMO_SELECT(-1.0f, -1.4f),
+ },
+ {
+ /* anmTblIdx */ 0x1D,
+ /* armAnmTblIdx */ 0x18,
+ /* btpAnmTblIdx */ 0x0B,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x1E,
+ /* armAnmTblIdx */ 0x19,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x1F,
+ /* armAnmTblIdx */ 0x86,
+ /* btpAnmTblIdx */ 0x0C,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x20,
+ /* armAnmTblIdx */ 0x87,
+ /* btpAnmTblIdx */ 0x0C,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x17,
+ /* armAnmTblIdx */ 0x12,
+ /* btpAnmTblIdx */ 0x05,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x21,
+ /* armAnmTblIdx */ 0x1A,
+ /* btpAnmTblIdx */ 0x0D,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x22,
+ /* armAnmTblIdx */ 0x1B,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x1A,
+ /* armAnmTblIdx */ 0x15,
+ /* btpAnmTblIdx */ 0x05,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x23,
+ /* armAnmTblIdx */ 0x1C,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x24,
+ /* armAnmTblIdx */ 0x1D,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x25,
+ /* armAnmTblIdx */ 0x1E,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x25,
+ /* armAnmTblIdx */ 0x1E,
+ /* btpAnmTblIdx */ 0x05,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x07,
+ /* armAnmTblIdx */ 0x83,
+ /* btpAnmTblIdx */ 0x03,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x04,
+ /* armAnmTblIdx */ 0x04,
+ /* btpAnmTblIdx */ 0x05,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 4.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x00,
+ /* armAnmTblIdx */ 0x00,
+ /* btpAnmTblIdx */ 0x00,
+ /* loopMode */ J3DFrameCtrl::EMode_LOOP,
+ /* morf */ 0.0f,
+ /* speed */ 1.0f,
+ },
+ {
+ /* anmTblIdx */ 0x26,
+ /* armAnmTblIdx */ 0x1F,
+ /* btpAnmTblIdx */ 0x0F,
+ /* loopMode */ J3DFrameCtrl::EMode_NONE,
+ /* morf */ 8.0f,
+ /* speed */ 1.0f,
+ },
};
+
static anm_tbl armAnmTbl[] = {
- {"mdarm_wait01.bck", ""},
- {"mdarm_walk.bck", "mdarm_run.bck"},
- {"mdarm_squatdown.bck", ""},
- {"mdarm_sqwait01.bck", ""},
- {"mdarm_sqwait02.bck", ""},
- {"mdarm_fall.bck", ""},
- {"mdarm_fall02.bck", ""},
- {"mdarm_land.bck", ""},
- {"mdarm_land02.bck", ""},
- {"mdarm_land03.bck", ""},
- {"mdarm_kamaewait.bck", ""},
- {"mdarm_kamae.bck", ""},
- {"mdarm_piyo2.bck", ""},
- {"mdarm_ojigi.bck", ""},
- {"mdarm_harpplay01.bck", ""},
- {"mdarm_harpplay02.bck", ""},
- {"mdarm_takeoff01.bck", ""},
- {"mdarm_watasu.bck", ""},
- {"mdarm_talk01.bck", ""},
- {"mdarm_talk02.bck", ""},
- {"mdarm_talk03.bck", ""},
- {"mdarm_talk04.bck", ""},
- {"mdarm_mkamae.bck", ""},
- {"mdarm_mwait.bck", ""},
- {"mdarm_oriwait.bck", ""},
- {"mdarm_shipwait.bck", ""},
- {"mdarm_kyohi.bck", ""},
- {"mdarm_kyoro2.bck", ""},
- {"mdarm_shipwait02.bck", ""},
- {"mdarm_shiptalk01.bck", ""},
- {"mdarm_talk05.bck", ""},
- {"mdarm_unazuki.bck", ""},
+ {"mdarm_wait01.bck", ""}, {"mdarm_walk.bck", "mdarm_run.bck"},
+ {"mdarm_squatdown.bck", ""}, {"mdarm_sqwait01.bck", ""},
+ {"mdarm_sqwait02.bck", ""}, {"mdarm_fall.bck", ""},
+ {"mdarm_fall02.bck", ""}, {"mdarm_land.bck", ""},
+ {"mdarm_land02.bck", ""}, {"mdarm_land03.bck", ""},
+ {"mdarm_kamaewait.bck", ""}, {"mdarm_kamae.bck", ""},
+ {"mdarm_piyo2.bck", ""}, {"mdarm_ojigi.bck", ""},
+ {"mdarm_harpplay01.bck", ""}, {"mdarm_harpplay02.bck", ""},
+ {"mdarm_takeoff01.bck", ""}, {"mdarm_watasu.bck", ""},
+ {"mdarm_talk01.bck", ""}, {"mdarm_talk02.bck", ""},
+ {"mdarm_talk03.bck", ""}, {"mdarm_talk04.bck", ""},
+ {"mdarm_mkamae.bck", ""}, {"mdarm_mwait.bck", ""},
+ {"mdarm_oriwait.bck", ""}, {"mdarm_shipwait.bck", ""},
+ {"mdarm_kyohi.bck", ""}, {"mdarm_kyoro2.bck", ""},
+ {"mdarm_shipwait02.bck", ""}, {"mdarm_shiptalk01.bck", ""},
+ {"mdarm_talk05.bck", ""}, {"mdarm_unazuki.bck", ""},
};
static anm_tbl wingAnmTbl[] = {
{"mdwing_wait01.bck", ""},
@@ -2614,12 +4631,12 @@ BOOL daNpc_Md_c::setAnm(int anmIdx) {
{"mdwing_caught01.bck", ""},
{"mdwing_caught02.bck", ""},
};
-
+
BOOL ret = FALSE;
-
+
m3104 = anmIdx;
anm_prm* prm = &l_anmPrm[anmIdx];
-
+
f32 speed = prm->speed;
f32 morf = prm->morf;
if (anmIdx == 6) {
@@ -2635,25 +4652,26 @@ BOOL daNpc_Md_c::setAnm(int anmIdx) {
if (anmIdx == 7 || anmIdx == 8) {
morf = l_HIO.m1A8;
}
-
+
if (prm->anmTblIdx != m312D || mpMorf->getPlaySpeed() != prm->speed) {
m312D = prm->anmTblIdx;
anm_tbl* bodyAnm = &l_anmTbl[m312D];
m312A = 0;
dNpc_Md_setAnm(mpMorf, mRunRate, prm->loopMode, morf, speed, bodyAnm->m00, bodyAnm->m20, mModelArcName);
m30D0 = mpMorf->getFrame();
-
+
if (prm->armAnmTblIdx < 0x80) {
anm_tbl* armAnm = &armAnmTbl[prm->armAnmTblIdx];
dNpc_Md_setAnm(mpArmMorf, mRunRate, prm->loopMode, morf, speed, armAnm->m00, armAnm->m20, mModelArcName);
ret = FALSE;
} else {
if (!isTypeShipRide()) {
- dNpc_Md_setAnm(mpWingMorf, prm->loopMode, morf, speed, wingAnmTbl[prm->armAnmTblIdx - 0x80].m00, mModelArcName);
+ char* tmp = wingAnmTbl[prm->armAnmTblIdx - 0x80].m00;
+ dNpc_Md_setAnm(mpWingMorf, prm->loopMode, morf, speed, tmp, mModelArcName);
}
ret = TRUE;
}
-
+
#if VERSION > VERSION_DEMO
if (m3104 == 0x12 || m3104 == 0x1F) {
fopAcM_seStartCurrent(this, JA_SE_CM_MD_HARP_SET_UP, 0);
@@ -2662,26 +4680,43 @@ BOOL daNpc_Md_c::setAnm(int anmIdx) {
}
#endif
}
-
+
if (prm->btpAnmTblIdx != m3137) {
initTexPatternAnm(prm->btpAnmTblIdx, true);
}
-
+#if VERSION == VERSION_DEMO
+ if (m312D == 0x0E || m312D == 0x0F || m312D == 0x12 || m312D == 0x13 || m312D == 0x1A || m312D == 0x1B || m312D == 0x1C || m312D == 0x25) {
+ setBitStatus(daMdStts_UNK80);
+ } else {
+ clearStatus(daMdStts_UNK80);
+ }
+#else
if (m312D == 0x0E || m312D == 0x12 || m312D == 0x13 || m312D == 0x1A || m312D == 0x1C || m312D == 0x25) {
setBitStatus(daMdStts_UNK80);
} else if (m312D != 0x0F && m312D != 0x1B) {
clearStatus(daMdStts_UNK80);
}
-
+#endif
+
if (m312D == 0x1B || m312D == 0x1C) {
setBitStatus(daMdStts_UNK4000);
} else {
clearStatus(daMdStts_UNK4000);
}
-
+
if (m312D == 0x10) {
if (m0508[1] == NULL) {
- m0508[1] = dComIfGp_particle_set(dPa_name::ID_IT_SN_MD_PIYOPIYO00, &current.pos, NULL, NULL, 0xFF, NULL, fopAcM_GetRoomNo(this), &tevStr.mColorK0, &tevStr.mColorK0);
+ m0508[1] = dComIfGp_particle_set(
+ dPa_name::ID_IT_SN_MD_PIYOPIYO00,
+ &current.pos,
+ NULL,
+ NULL,
+ 0xFF,
+ NULL,
+ fopAcM_GetRoomNo(this),
+ &tevStr.mColorK0,
+ &tevStr.mColorK0
+ );
if (m0508[1]) {
m0508[1]->becomeImmortalEmitter();
}
@@ -2689,12 +4724,14 @@ BOOL daNpc_Md_c::setAnm(int anmIdx) {
} else {
deletePiyoPiyo();
}
-
+
return ret;
}
/* 0000D4CC-0000D5E4 .text dNpc_Md_setAnm__10daNpc_Md_cFP15mDoExt_McaMorf2fiffPcPcPCc */
-bool daNpc_Md_c::dNpc_Md_setAnm(mDoExt_McaMorf2* pMorf, f32 param_f1, int loopMode, f32 morf, f32 speed, char* fileName1, char* filename2, const char* arcName) {
+bool daNpc_Md_c::dNpc_Md_setAnm(
+ mDoExt_McaMorf2* pMorf, f32 param_f1, int loopMode, f32 morf, f32 speed, char* fileName1, char* filename2, const char* arcName
+) {
bool ret = false;
J3DAnmTransform* bck1 = NULL;
J3DAnmTransform* bck2 = NULL;
@@ -2715,13 +4752,47 @@ bool daNpc_Md_c::dNpc_Md_setAnm(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f
}
/* 0000D614-0000D82C .text chkAttention__10daNpc_Md_cF4cXyzsi */
-u8 daNpc_Md_c::chkAttention(cXyz, s16, int) {
- /* Nonmatching */
+bool daNpc_Md_c::chkAttention(cXyz pos, s16 angle, int param_3) {
+ daPy_lk_c* link = daPy_getPlayerLinkActorClass();
+ f32 maxAttnDistXZ = l_HIO.mNpc.mMaxAttnDistXZ;
+ f32 dVar9 = l_HIO.m0BC;
+ f32 dVar8 = l_HIO.m0C0;
+ int maxAttnAngleY = l_HIO.mNpc.mMaxAttnAngleY;
+ if (isShipRide()) {
+ maxAttnDistXZ = l_HIO.m074.m04;
+ } else if ((isTypeM_Dra09()) && (dComIfGs_isEventBit(dSv_event_flag_c::UNK_1101))) {
+ maxAttnDistXZ = l_HIO.m0B8;
+ }
+ cXyz delta;
+ delta.x = link->current.pos.x - pos.x;
+ delta.z = link->current.pos.z - pos.z;
+ f32 distXZ = std::sqrtf(SQUARE(delta.x) + SQUARE(delta.z));
+ s16 targetAngleY = cM_atan2s(delta.x, delta.z);
+ delta.y = link->current.pos.y - pos.y;
+ if (m312C != 0) {
+ maxAttnDistXZ += 40.0f;
+ maxAttnAngleY += 0x71c;
+ }
+ targetAngleY -= angle;
+ if (param_3 != 0) {
+ return (maxAttnDistXZ > distXZ) && (delta.y < dVar9) && (delta.y > dVar8);
+ } else {
+ return (maxAttnAngleY > abs(targetAngleY)) && (maxAttnDistXZ > distXZ) && (delta.y < dVar9) && (delta.y > dVar8);
+ }
}
/* 0000D82C-0000D8FC .text chkArea__10daNpc_Md_cFP4cXyz */
-bool daNpc_Md_c::chkArea(cXyz*) {
- /* Nonmatching */
+bool daNpc_Md_c::chkArea(cXyz* param_1) {
+ fopAc_ac_c* player = dComIfGp_getPlayer(0);
+ f32 maxDist = l_HIO.mNpc.mMaxAttnDistXZ;
+
+ cXyz delta;
+ delta.x = player->current.pos.x - param_1->x;
+ delta.z = player->current.pos.z - param_1->z;
+ f32 dist = std::sqrtf(delta.x * delta.x + delta.z * delta.z);
+
+ maxDist += 40.0f;
+ return maxDist > dist;
}
/* 0000D8FC-0000D950 .text carryCheck__10daNpc_Md_cFv */
@@ -2743,34 +4814,34 @@ void daNpc_Md_c::eventOrder() {
eventInfo.onCondition(dEvtCnd_CANTALKITEM_e);
} else if (mCurEventMode >= 4) {
switch (mCurEventMode) {
- case 4:
- mCurEvent = 0;
- break;
- case 5:
- mCurEvent = 1;
- break;
- case 6:
- mCurEvent = 2;
- break;
- case 7:
- mCurEvent = 3;
- break;
- case 8:
- mCurEvent = 4;
- break;
- case 9:
- mCurEvent = 5;
- break;
- case 10:
- mCurEvent = 6;
- dComIfGp_event_order(dEvtType_OTHER_e, 0xFF, dEvtFlag_NOPARTNER_e, 0xFFFF, dComIfGp_getPlayer(0), this, mEventIdxTable[mCurEvent]);
- return;
- case 11:
- mCurEvent = 7;
- break;
- case 12:
- mCurEvent = 8;
- break;
+ case 4:
+ mCurEvent = 0;
+ break;
+ case 5:
+ mCurEvent = 1;
+ break;
+ case 6:
+ mCurEvent = 2;
+ break;
+ case 7:
+ mCurEvent = 3;
+ break;
+ case 8:
+ mCurEvent = 4;
+ break;
+ case 9:
+ mCurEvent = 5;
+ break;
+ case 10:
+ mCurEvent = 6;
+ dComIfGp_event_order(dEvtType_OTHER_e, 0xFF, dEvtFlag_NOPARTNER_e, 0xFFFF, dComIfGp_getPlayer(0), this, mEventIdxTable[mCurEvent]);
+ return;
+ case 11:
+ mCurEvent = 7;
+ break;
+ case 12:
+ mCurEvent = 8;
+ break;
}
fopAcM_orderOtherEventId(this, mEventIdxTable[mCurEvent]);
}
@@ -2778,7 +4849,20 @@ void daNpc_Md_c::eventOrder() {
/* 0000DAD4-0000DC14 .text checkOrder__10daNpc_Md_cFv */
void daNpc_Md_c::checkOrder() {
- /* Nonmatching */
+ if ((eventInfo.checkCommandTalk()) && ((mCurEventMode == 1 || (mCurEventMode == 2)) || (mCurEventMode == 3))) {
+ mCurEventMode = 0;
+ if (dComIfGp_event_chkTalkXY()) {
+ onXYTalk();
+ if (isDefaultTalkXY()) {
+ setNpcAction(&daNpc_Md_c::talkNpcAction);
+ }
+ } else if (isShipRide()) {
+ setNpcAction(&daNpc_Md_c::shipTalkNpcAction);
+ } else {
+ setNpcAction(&daNpc_Md_c::talkNpcAction);
+ }
+ fopAcM_cancelCarryNow(this);
+ }
}
/* 0000DC14-0000DCB0 .text checkCommandTalk__10daNpc_Md_cFv */
@@ -2806,255 +4890,255 @@ BOOL daNpc_Md_c::checkCommandTalk() {
u16 daNpc_Md_c::next_msgStatus(u32* pCurrMsgNo) {
u16 msgStatus = fopMsgStts_MSG_CONTINUES_e;
switch (*pCurrMsgNo) {
- case 0x5AC:
- msgStatus = fopMsgStts_MSG_ENDS_e;
- break;
- case 0x17D5:
- case 0x1805:
- *pCurrMsgNo = 0x17D6;
- break;
- case 0x17D6:
- *pCurrMsgNo = 0x17D7;
- break;
- case 0x17D7:
- *pCurrMsgNo = 0x17D8;
- break;
- case 0x17D8:
- mCurEventMode = 4;
- msgStatus = fopMsgStts_MSG_ENDS_e;
- break;
- case 0x17D9:
- *pCurrMsgNo = 0x1802;
- break;
- case 0x1802:
- *pCurrMsgNo = 0x17DA;
- break;
- case 0x17DA:
- *pCurrMsgNo = 0x17DB;
- break;
- case 0x17DB:
- dComIfGs_onEventBit(dSv_event_flag_c::MEDLI_GAVE_FATHERS_LETTER);
- msgStatus = fopMsgStts_MSG_ENDS_e;
- break;
- case 0x17DD:
- *pCurrMsgNo = 0x17DE;
- break;
- case 0x17DE:
- mCurEventMode = 5;
- msgStatus = fopMsgStts_MSG_ENDS_e;
- break;
- case 0x17DF:
- *pCurrMsgNo = 0x17E0;
- break;
- case 0x17E0:
- *pCurrMsgNo = 0x17E1;
- break;
- case 0x17E1:
- *pCurrMsgNo = 0x17E2;
- break;
- case 0x17E2:
- *pCurrMsgNo = 0x17E3;
- break;
- case 0x17E4:
- dComIfGs_onEventBit(dSv_event_flag_c::UNK_1101);
- msgStatus = fopMsgStts_MSG_ENDS_e;
- break;
- case 0x17E5:
- dComIfGs_onEventBit(dSv_event_flag_c::UNK_1280);
- msgStatus = fopMsgStts_MSG_ENDS_e;
- break;
- case 0x17E6:
- *pCurrMsgNo = 0x17E7;
- break;
- case 0x17E7:
- *pCurrMsgNo = 0x17E8;
- break;
- case 0x17E8:
- *pCurrMsgNo = 0x17E9;
- break;
- case 0x17E9:
- *pCurrMsgNo = 0x17EA;
- break;
- case 0x17EA:
- *pCurrMsgNo = 0x17EB;
- break;
- case 0x17EB:
- *pCurrMsgNo = 0x17EC;
- break;
- case 0x17EC:
- *pCurrMsgNo = 0x17ED;
- break;
- case 0x17ED:
- *pCurrMsgNo = 0x17EE;
- break;
- case 0x17EE:
- if (l_msg->mSelectNum == 1) {
- *pCurrMsgNo = 0x17EF;
- } else {
- *pCurrMsgNo = 0x17F0;
- }
- break;
- case 0x17EF:
- *pCurrMsgNo = 0x17ED;
- break;
- case 0x17F0:
- *pCurrMsgNo = 0x17F1;
- break;
- case 0x17F1:
- mCurEventMode = 7;
- msgStatus = fopMsgStts_MSG_ENDS_e;
- break;
- case 0x17F3:
- *pCurrMsgNo = 0x17F4;
- break;
- case 0x17F4:
- dComIfGs_onEventBit(dSv_event_flag_c::UNK_1104);
- // Fall-through
- case 0x17F8:
- setBitStatus(daMdStts_UNK40);
- msgStatus = fopMsgStts_MSG_ENDS_e;
- break;
- case 0x17F7:
- *pCurrMsgNo = 0x17F8;
- break;
- case 0x17FA:
- *pCurrMsgNo = 0x17FB;
- break;
- case 0x17FB:
- *pCurrMsgNo = 0x17FC;
- break;
- case 0x17FC:
- *pCurrMsgNo = 0x17FD;
- break;
- case 0x17FD:
- *pCurrMsgNo = 0x17FE;
- break;
- case 0x17FE:
- *pCurrMsgNo = 0x17FF;
- break;
- case 0x1800:
- *pCurrMsgNo = 0x1801;
- break;
- case 0x1801:
- dComIfGs_onEventBit(dSv_event_flag_c::UNK_1102);
- msgStatus = fopMsgStts_MSG_ENDS_e;
- break;
- case 0x19C9:
- *pCurrMsgNo = 0x19CA;
- break;
- case 0x19CA:
- *pCurrMsgNo = 0x19CB;
- break;
- case 0x19CB:
- *pCurrMsgNo = 0x19CC;
- break;
- case 0x19CC:
- *pCurrMsgNo = 0x19CD;
- break;
- case 0x19CD:
- *pCurrMsgNo = 0x19CE;
- break;
- case 0x19CE:
- *pCurrMsgNo = 0x19CF;
- break;
- case 0x19CF:
- *pCurrMsgNo = 0x19D0;
- break;
- case 0x19D0:
- *pCurrMsgNo = 0x19D1;
- break;
- case 0x19D1:
- dComIfGs_onEventBit(dSv_event_flag_c::UNK_1402);
- onSeaTalk();
- msgStatus = fopMsgStts_MSG_ENDS_e;
- break;
- case 0x19D2:
- *pCurrMsgNo = 0x19D3;
- break;
- case 0x19D3:
- *pCurrMsgNo = 0x19D4;
- break;
- case 0x19D4:
- *pCurrMsgNo = 0x19D5;
- break;
- case 0x19D6:
- *pCurrMsgNo = 0x19D7;
- break;
- case 0x19D7:
- *pCurrMsgNo = 0x19D8;
- break;
- case 0x19D8:
- dComIfGs_onEventBit(dSv_event_flag_c::UNK_1504);
- case 0x19D9:
- msgStatus = fopMsgStts_MSG_ENDS_e;
- break;
- case 0x19DA:
- *pCurrMsgNo = 0x19DB;
- break;
- case 0x19DD:
- *pCurrMsgNo = 0x19DE;
- break;
- case 0x19E0:
- *pCurrMsgNo = 0x19E1;
- break;
- case 0x19E1:
- *pCurrMsgNo = 0x19E2;
- break;
- case 0x19E2:
- *pCurrMsgNo = 0x19E3;
- break;
- case 0x19E3:
- *pCurrMsgNo = 0x19E4;
- break;
- case 0x19E5:
- *pCurrMsgNo = 0x19E6;
- break;
- case 0x19E7:
- *pCurrMsgNo = 0x19E8;
- break;
- case 0x19F6:
- *pCurrMsgNo = 0x19F7;
- break;
- case 0x19F7:
- *pCurrMsgNo = 0x19D2;
- break;
- case 0x19F8:
- *pCurrMsgNo = 0x19F9;
- break;
- case 0x19F9:
- *pCurrMsgNo = 0x19FA;
- break;
- case 0x19FA:
- *pCurrMsgNo = 0x19FB;
- break;
- case 0x19FB:
- case 0x19FF:
- dComIfGs_onEventBit(dSv_event_flag_c::UNK_2E40);
- onSeaTalk();
- // Fall-through
- case 0x1A01:
- dComIfGs_onEventBit(dSv_event_flag_c::UNK_2C08);
- msgStatus = fopMsgStts_MSG_ENDS_e;
- break;
- case 0x19FC:
- *pCurrMsgNo = 0x19FD;
- break;
- case 0x19FD:
- *pCurrMsgNo = 0x19FE;
- break;
- case 0x19FE:
- *pCurrMsgNo = 0x19FF;
- break;
- case 0x1A00:
- *pCurrMsgNo = 0x1A01;
- break;
- case 0x1A02:
- dComIfGs_onEventBit(dSv_event_flag_c::UNK_3B80);
- msgStatus = fopMsgStts_MSG_ENDS_e;
- break;
- default:
- msgStatus = fopMsgStts_MSG_ENDS_e;
- break;
+ case 0x5AC:
+ msgStatus = fopMsgStts_MSG_ENDS_e;
+ break;
+ case 0x17D5:
+ case 0x1805:
+ *pCurrMsgNo = 0x17D6;
+ break;
+ case 0x17D6:
+ *pCurrMsgNo = 0x17D7;
+ break;
+ case 0x17D7:
+ *pCurrMsgNo = 0x17D8;
+ break;
+ case 0x17D8:
+ mCurEventMode = 4;
+ msgStatus = fopMsgStts_MSG_ENDS_e;
+ break;
+ case 0x17D9:
+ *pCurrMsgNo = 0x1802;
+ break;
+ case 0x1802:
+ *pCurrMsgNo = 0x17DA;
+ break;
+ case 0x17DA:
+ *pCurrMsgNo = 0x17DB;
+ break;
+ case 0x17DB:
+ dComIfGs_onEventBit(dSv_event_flag_c::MEDLI_GAVE_FATHERS_LETTER);
+ msgStatus = fopMsgStts_MSG_ENDS_e;
+ break;
+ case 0x17DD:
+ *pCurrMsgNo = 0x17DE;
+ break;
+ case 0x17DE:
+ mCurEventMode = 5;
+ msgStatus = fopMsgStts_MSG_ENDS_e;
+ break;
+ case 0x17DF:
+ *pCurrMsgNo = 0x17E0;
+ break;
+ case 0x17E0:
+ *pCurrMsgNo = 0x17E1;
+ break;
+ case 0x17E1:
+ *pCurrMsgNo = 0x17E2;
+ break;
+ case 0x17E2:
+ *pCurrMsgNo = 0x17E3;
+ break;
+ case 0x17E4:
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_1101);
+ msgStatus = fopMsgStts_MSG_ENDS_e;
+ break;
+ case 0x17E5:
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_1280);
+ msgStatus = fopMsgStts_MSG_ENDS_e;
+ break;
+ case 0x17E6:
+ *pCurrMsgNo = 0x17E7;
+ break;
+ case 0x17E7:
+ *pCurrMsgNo = 0x17E8;
+ break;
+ case 0x17E8:
+ *pCurrMsgNo = 0x17E9;
+ break;
+ case 0x17E9:
+ *pCurrMsgNo = 0x17EA;
+ break;
+ case 0x17EA:
+ *pCurrMsgNo = 0x17EB;
+ break;
+ case 0x17EB:
+ *pCurrMsgNo = 0x17EC;
+ break;
+ case 0x17EC:
+ *pCurrMsgNo = 0x17ED;
+ break;
+ case 0x17ED:
+ *pCurrMsgNo = 0x17EE;
+ break;
+ case 0x17EE:
+ if (l_msg->mSelectNum == 1) {
+ *pCurrMsgNo = 0x17EF;
+ } else {
+ *pCurrMsgNo = 0x17F0;
+ }
+ break;
+ case 0x17EF:
+ *pCurrMsgNo = 0x17ED;
+ break;
+ case 0x17F0:
+ *pCurrMsgNo = 0x17F1;
+ break;
+ case 0x17F1:
+ mCurEventMode = 7;
+ msgStatus = fopMsgStts_MSG_ENDS_e;
+ break;
+ case 0x17F3:
+ *pCurrMsgNo = 0x17F4;
+ break;
+ case 0x17F4:
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_1104);
+ // Fall-through
+ case 0x17F8:
+ setBitStatus(daMdStts_UNK40);
+ msgStatus = fopMsgStts_MSG_ENDS_e;
+ break;
+ case 0x17F7:
+ *pCurrMsgNo = 0x17F8;
+ break;
+ case 0x17FA:
+ *pCurrMsgNo = 0x17FB;
+ break;
+ case 0x17FB:
+ *pCurrMsgNo = 0x17FC;
+ break;
+ case 0x17FC:
+ *pCurrMsgNo = 0x17FD;
+ break;
+ case 0x17FD:
+ *pCurrMsgNo = 0x17FE;
+ break;
+ case 0x17FE:
+ *pCurrMsgNo = 0x17FF;
+ break;
+ case 0x1800:
+ *pCurrMsgNo = 0x1801;
+ break;
+ case 0x1801:
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_1102);
+ msgStatus = fopMsgStts_MSG_ENDS_e;
+ break;
+ case 0x19C9:
+ *pCurrMsgNo = 0x19CA;
+ break;
+ case 0x19CA:
+ *pCurrMsgNo = 0x19CB;
+ break;
+ case 0x19CB:
+ *pCurrMsgNo = 0x19CC;
+ break;
+ case 0x19CC:
+ *pCurrMsgNo = 0x19CD;
+ break;
+ case 0x19CD:
+ *pCurrMsgNo = 0x19CE;
+ break;
+ case 0x19CE:
+ *pCurrMsgNo = 0x19CF;
+ break;
+ case 0x19CF:
+ *pCurrMsgNo = 0x19D0;
+ break;
+ case 0x19D0:
+ *pCurrMsgNo = 0x19D1;
+ break;
+ case 0x19D1:
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_1402);
+ onSeaTalk();
+ msgStatus = fopMsgStts_MSG_ENDS_e;
+ break;
+ case 0x19D2:
+ *pCurrMsgNo = 0x19D3;
+ break;
+ case 0x19D3:
+ *pCurrMsgNo = 0x19D4;
+ break;
+ case 0x19D4:
+ *pCurrMsgNo = 0x19D5;
+ break;
+ case 0x19D6:
+ *pCurrMsgNo = 0x19D7;
+ break;
+ case 0x19D7:
+ *pCurrMsgNo = 0x19D8;
+ break;
+ case 0x19D8:
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_1504);
+ case 0x19D9:
+ msgStatus = fopMsgStts_MSG_ENDS_e;
+ break;
+ case 0x19DA:
+ *pCurrMsgNo = 0x19DB;
+ break;
+ case 0x19DD:
+ *pCurrMsgNo = 0x19DE;
+ break;
+ case 0x19E0:
+ *pCurrMsgNo = 0x19E1;
+ break;
+ case 0x19E1:
+ *pCurrMsgNo = 0x19E2;
+ break;
+ case 0x19E2:
+ *pCurrMsgNo = 0x19E3;
+ break;
+ case 0x19E3:
+ *pCurrMsgNo = 0x19E4;
+ break;
+ case 0x19E5:
+ *pCurrMsgNo = 0x19E6;
+ break;
+ case 0x19E7:
+ *pCurrMsgNo = 0x19E8;
+ break;
+ case 0x19F6:
+ *pCurrMsgNo = 0x19F7;
+ break;
+ case 0x19F7:
+ *pCurrMsgNo = 0x19D2;
+ break;
+ case 0x19F8:
+ *pCurrMsgNo = 0x19F9;
+ break;
+ case 0x19F9:
+ *pCurrMsgNo = 0x19FA;
+ break;
+ case 0x19FA:
+ *pCurrMsgNo = 0x19FB;
+ break;
+ case 0x19FB:
+ case 0x19FF:
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_2E40);
+ onSeaTalk();
+ // Fall-through
+ case 0x1A01:
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_2C08);
+ msgStatus = fopMsgStts_MSG_ENDS_e;
+ break;
+ case 0x19FC:
+ *pCurrMsgNo = 0x19FD;
+ break;
+ case 0x19FD:
+ *pCurrMsgNo = 0x19FE;
+ break;
+ case 0x19FE:
+ *pCurrMsgNo = 0x19FF;
+ break;
+ case 0x1A00:
+ *pCurrMsgNo = 0x1A01;
+ break;
+ case 0x1A02:
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_3B80);
+ msgStatus = fopMsgStts_MSG_ENDS_e;
+ break;
+ default:
+ msgStatus = fopMsgStts_MSG_ENDS_e;
+ break;
}
return msgStatus;
}
@@ -3133,42 +5217,308 @@ u32 daNpc_Md_c::getMsg() {
/* 0000E64C-0000E95C .text setCollision__10daNpc_Md_cFv */
void daNpc_Md_c::setCollision() {
- /* Nonmatching */
+ cXyz local_20;
+ cXyz local_2c;
+ cXyz local_38;
+ cXyz local_44;
+ cXyz local_50;
+
+ local_20.setall(0.0f);
+ local_2c = current.pos;
+ if ((!isShipRide()) && (!fopAcM_CheckStatus(this, fopAcStts_CARRY_e))) {
+ mCyl1.SetC(local_2c);
+ mCyl1.SetR(30.0f);
+ mCyl1.SetH(m30F8);
+ dComIfG_Ccsp()->Set(&mCyl1);
+ } else {
+ mCyl1.ClrCoHit();
+ mCyl1.ClrTgHit();
+ }
+ mCyl2.SetC(local_2c);
+ mCyl2.SetR(30.0f);
+ mCyl2.SetH(m30F8);
+ dComIfG_Ccsp()->Set(&mCyl2);
+ mCyl3.SetC(local_2c);
+ mCyl3.SetR(30.0f);
+ mCyl3.SetH(m30F8);
+ dComIfG_Ccsp()->Set(&mCyl3);
+ if (isLightHit()) {
+ cMtx_copy(mpHarpModel->getBaseTRMtx(), mDoMtx_stack_c::now);
+ mDoMtx_stack_c::transM(l_HIO.m034.m0C, l_HIO.m034.m10, l_HIO.m034.m14);
+ mDoMtx_stack_c::XYZrotM(l_HIO.m034.m18, l_HIO.m034.m1A, l_HIO.m034.m1C);
+ mDoMtx_stack_c::multVec(&l_ms_light_local_start, &local_44);
+ mDoMtx_stack_c::multVecSR(&l_ms_light_local_vec, &local_38);
+ local_50 = local_44 + local_38;
+ mLinChk.Set(&local_44, &local_50, this);
+ if (dComIfG_Bgsp()->LineCross(&mLinChk)) {
+ local_50 = *mLinChk.GetCrossP();
+ local_38 = local_50 - local_44;
+ }
+ mCps.SetStartEnd(local_44, local_50);
+ mCps.SetAtVec(local_38);
+ mCps.OnAtSetBit();
+ dComIfG_Ccsp()->Set(&mCps);
+ dComIfG_Ccsp()->SetMass(&mCps, 1);
+ fopAcM_OffStatus(this, fopAcStts_CULL_e);
+ } else {
+ mCps.ResetAtHit();
+ mCps.OffAtSetBit();
+ fopAcM_OnStatus(this, fopAcStts_CULL_e);
+ }
}
/* 0000E95C-0000E9F0 .text setAttention__10daNpc_Md_cFb */
-void daNpc_Md_c::setAttention(bool) {
- /* Nonmatching */
+void daNpc_Md_c::setAttention(bool param_1) {
+ if ((!param_1) && (m312B >= 2)) {
+ return;
+ }
+ eyePos.set(getEyePos().x, getEyePos().y, getEyePos().z);
+ f32 fVar1;
+ if (isFlying()) {
+ fVar1 = 70.0f;
+ } else if (daPy_getPlayerActorClass() == this) {
+ fVar1 = 110.0f;
+ } else {
+ fVar1 = l_HIO.mNpc.mAttnYOffset;
+ }
+ attention_info.position.set(current.pos.x, current.pos.y + fVar1, current.pos.z);
}
/* 0000E9F0-0000EB28 .text lookBack__10daNpc_Md_cFiii */
-void daNpc_Md_c::lookBack(int, int, int) {
- /* Nonmatching */
+void daNpc_Md_c::lookBack(int param_1, int param_2, int param_3) {
+ cXyz local_30;
+ cXyz local_3c;
+
+ cXyz* dstPos = NULL;
+ local_3c.setall(0.0f);
+ s16 desiredYRot = shape_angle.y;
+ s16 target;
+ if (mJntCtrl.trnChk()) {
+ if (param_2 != 0) {
+ target = l_HIO.m1BC;
+ } else {
+ target = l_HIO.mNpc.mMaxHeadTurnVel;
+ }
+ cLib_addCalcAngleS2(&m3110, target, 4, 0x800);
+ } else {
+ m3110 = 0;
+ }
+ if (param_1 != 0) {
+ local_30 = dNpc_playerEyePos(l_HIO.mNpc.m04);
+ dstPos = &local_30;
+ local_3c = current.pos;
+ local_3c.y = eyePos.y;
+ }
+ mJntCtrl.lookAtTarget(&shape_angle.y, dstPos, local_3c, desiredYRot, m3110, param_3);
}
/* 0000EB28-0000EC38 .text lookBack__10daNpc_Md_cFP4cXyzii */
-void daNpc_Md_c::lookBack(cXyz*, int, int) {
- /* Nonmatching */
+void daNpc_Md_c::lookBack(cXyz* param_1, int param_2, int param_3) {
+ cXyz local_30;
+ cXyz local_3c;
+
+ cXyz* dstPos = NULL;
+ local_3c.setall(0.0f);
+ s16 desiredYRot = shape_angle.y;
+ if (mJntCtrl.trnChk()) {
+ s16 r4 = l_HIO.mNpc.mMaxHeadTurnVel;
+ cLib_addCalcAngleS2(&m3110, r4, 4, 0x800);
+ } else {
+ m3110 = 0;
+ }
+ if (param_2 != 0) {
+ local_30 = *param_1;
+ dstPos = &local_30;
+ local_3c = current.pos;
+ local_3c.y = eyePos.y;
+ }
+ mJntCtrl.lookAtTarget(&shape_angle.y, dstPos, local_3c, desiredYRot, m3110, param_3);
}
/* 0000EC38-0000EDD0 .text lookBackWaist__10daNpc_Md_cFsf */
-void daNpc_Md_c::lookBackWaist(s16, f32) {
- /* Nonmatching */
+s32 daNpc_Md_c::lookBackWaist(s16 param_1, f32 param_2) {
+ f32 fVar1;
+ s16 iVar2;
+ s16 sVar3;
+ s16 sVar4;
+ bool uVar5;
+ f32 dVar6;
+
+ iVar2 = (param_1 - shape_angle.y);
+ fVar1 = l_HIO.m034.m04 * (param_2 * cM_scos(iVar2));
+ dVar6 = l_HIO.m034.m08 * (param_2 * cM_ssin(iVar2));
+ if (fVar1 < 0.0f) {
+ sVar3 = l_HIO.m034.m20 * fVar1;
+ } else {
+ sVar3 = l_HIO.m034.m1E * fVar1;
+ }
+ sVar3 = cLib_addCalcAngleS(&m3114, sVar3, 4, 0xc00, 0x180);
+ sVar4 = cLib_addCalcAngleS(&m3116, l_HIO.m034.m22 * dVar6, 4, 0xc00, 0x180);
+ uVar5 = false;
+ if ((sVar3 == 0) && (sVar4 == 0)) {
+ uVar5 = true;
+ }
+ return uVar5;
}
/* 0000EDD0-0000F100 .text setBaseMtx__10daNpc_Md_cFv */
void daNpc_Md_c::setBaseMtx() {
- /* Nonmatching */
+ s16 sVar4;
+ J3DModel* model;
+
+ model = getModel();
+ if (fopAcM_CheckStatus(this, fopAcStts_CARRY_e)) {
+ if (isNoCarryAction()) {
+ mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
+ mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z);
+ mDoMtx_stack_c::transM(0.0f, -l_HIO.m05C.m4, 0.0f);
+ } else {
+ mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
+ mDoMtx_stack_c::YrotM(shape_angle.y);
+ mDoMtx_stack_c::transM(m3298.x, m3298.y, m3298.z);
+ mDoMtx_stack_c::XrotM(shape_angle.x);
+ mDoMtx_stack_c::ZrotM(shape_angle.z);
+ }
+ } else if (isShipRide()) {
+ fopAcM_OnStatus(this, fopAcStts_UNK4000_e);
+ daShip_c* ship = dComIfGp_getShipActor();
+ cMtx_copy(ship->getBodyMtx(), mDoMtx_stack_c::now);
+ mDoMtx_stack_c::transM(43.0f, 14.65f, 13.99f);
+ mDoMtx_stack_c::XYZrotM(0, -0x45b0, 0);
+ current.pos.set(mDoMtx_stack_c::now[0][3], mDoMtx_stack_c::now[1][3], mDoMtx_stack_c::now[2][3]);
+ sVar4 = ship->shape_angle.y + -0x4000;
+ shape_angle.y = sVar4;
+ current.angle.y = sVar4;
+ setAttention(true);
+ tevStr.mRoomNo = ship->tevStr.mRoomNo;
+ tevStr.mEnvrIdxOverride = ship->tevStr.mEnvrIdxOverride;
+ } else {
+ mDoMtx_stack_c::transS(current.pos.x, current.pos.y + 95.0f, current.pos.z);
+ mDoMtx_stack_c::YrotM(shape_angle.y);
+ mDoMtx_stack_c::transM(m3298.x, m3298.y, m3298.z);
+ mDoMtx_stack_c::XrotM(shape_angle.x);
+ mDoMtx_stack_c::ZrotM(shape_angle.z);
+ mDoMtx_stack_c::transM(0.0f, -95.0f, 0.0f);
+ }
+ model->setBaseTRMtx(mDoMtx_stack_c::get());
+ mpMorf->calc();
+ if (!isTypeShipRide()) {
+ mpWingMorf->calc();
+ }
+ mpArmMorf->calc();
+ if (checkStatus(daMdStts_UNK80)) {
+ cMtx_copy(mpArmMorf->getModel()->getAnmMtx(m_handL_jnt_num), mDoMtx_stack_c::now);
+ mDoMtx_stack_c::transM(0.37f, 3.81f, -11.13f);
+ mDoMtx_stack_c::XYZrotM(0x1b24, -0x2913, -0x1982);
+ } else {
+ cMtx_copy(getModel()->getAnmMtx(m_backbone2_jnt_num), mDoMtx_stack_c::now);
+ mDoMtx_stack_c::transM(2.2f, -11.681f, 1.3f);
+ mDoMtx_stack_c::XYZrotM(0x3f11, 0x2894, 0x7f7e);
+ }
+ mpHarpModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ mpHarpLightModel->setBaseTRMtx(mpHarpModel->getBaseTRMtx());
}
/* 0000F100-0000F160 .text deletePiyoPiyo__10daNpc_Md_cFv */
void daNpc_Md_c::deletePiyoPiyo() {
- /* Nonmatching */
+ JPABaseEmitter* emitter = m0508[1];
+ if (emitter == NULL) {
+ return;
+ }
+ emitter->quitImmortalEmitter();
+ m0508[1]->becomeInvalidEmitter();
+ JSUPtrLink* link = emitter->getParticleList()->getFirstLink();
+ while (link != 0) {
+ JPABaseParticle* ptcl = (JPABaseParticle*)link->getObjectPtr();
+ ptcl->setDeleteParticleFlag();
+ link = link->getNext();
+ }
+ m0508[1] = NULL;
}
/* 0000F160-0000F4E0 .text init__10daNpc_Md_cFv */
BOOL daNpc_Md_c::init() {
/* Nonmatching */
+ cXyz local_30;
+
+ local_30.setall(0.0f);
+ u8 uVar1 = (fopAcM_GetParam(this) >> 0x10) & 0xFF;
+ m3100 = uVar1;
+ m313E = 0;
+ m30F4 = JA_SE_CM_MD_HARP_CN4;
+ attention_info.flags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e;
+ attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0x21;
+ attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0x21;
+ attention_info.distances[fopAc_Attn_TYPE_CARRY_e] = 0x27;
+ mCurEventMode = 0;
+ mCurEvent = 0;
+ m0508[0] = NULL;
+ m0508[1] = NULL;
+ m0508[2] = NULL;
+ m0508[3] = NULL;
+ m0508[4] = NULL;
+ m0508[5] = NULL;
+ m30AC.x = 0.0f;
+ m30AC.y = 0.0f;
+ m30AC.z = 50.0f;
+ setPiyo2TalkCNT(0);
+ clearStatus();
+ gravity = l_HIO.m0F4;
+ if (isTypeM_DaiB()) {
+ setNpcAction(&daNpc_Md_c::harpWaitNpcAction);
+ } else {
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ }
+ m3094 = current.pos;
+ m3088 = current.pos;
+ for (s32 i = 0; i < 4; i++) {
+ m3234[i].setall(0.0f);
+ }
+ if ((uVar1 & 1) != 0) {
+ setStatus(daMdStts_UNK8);
+ }
+ setEffectStatus(0);
+ mCurEvent = -1;
+ offFlying();
+ offMirror();
+ m30F8 = 120.0f;
+ mRunRate = 0.0f;
+ mpMorf->setAnmRate(mRunRate);
+ mpArmMorf->setAnmRate(mRunRate);
+ if (!dComIfGs_isEventBit(dSv_event_flag_c::UNK_1620)) {
+ onNpcNotChange();
+ } else if (shipRideCheck()) {
+#if VERSION > VERSION_DEMO // ???
+ mpMorf->setMorf(0.0f);
+ mpArmMorf->setMorf(0.0f);
+#endif
+ }
+ if ((isTypeM_Dai()) || (isTypeEdaichi())) {
+ mStts.Init(0xFE, 0xFF, this);
+ } else {
+ mStts.Init(0xFF, 0xFF, this);
+ }
+ mCyl1.Set(l_cyl_src);
+ mCyl1.SetStts(&mStts);
+ mCyl2.Set(l_wind_cyl_src);
+ mCyl2.SetStts(&mStts);
+ mCyl3.Set(l_light_cyl_src);
+ mCyl3.SetStts(&mStts);
+ mCps.Set(l_fan_light_cps_src);
+ mCps.SetStts(&mStts);
+ mCps.SetAtType(AT_TYPE_LIGHT);
+ mCps.SetR(20.0f);
+ ResTIMG* pBti = (ResTIMG*)dComIfG_getObjectRes(mModelArcName, "md_spot.bti");
+ m0B70.init(pBti);
+ if (isTypeEdaichi()) {
+ onNpcCallCommand();
+ }
+ for (s32 i = 0; i < 10; i++) {
+ mEventIdxTable[i] = dComIfGp_evmng_getEventIdx(event_name_tbl[i], 0xFF);
+ }
+ eventInfo.mpCheckCB = daNpc_Md_XyCheckCB;
+ eventInfo.mpEventCB = daNpc_Md_XyEventCB;
+ return TRUE;
}
/* 0000F4E0-0000F8EC .text draw__10daNpc_Md_cFv */
@@ -3185,17 +5535,17 @@ BOOL daNpc_Md_c::draw() {
return TRUE;
}
}
-
- J3DModel* model = mpMorf->getModel();
+
+ J3DModel* model = getModel();
J3DModelData* modelData = model->getModelData();
-
+
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
drawDamageFog();
g_env_light.setLightTevColorType(model, &tevStr);
m0520.entry(modelData);
mpMorf->entryDL();
m0520.remove(modelData);
-
+
if (!isTypeShipRide()) {
if (checkStatus(daMdStts_UNK1)) {
model = mpWingMorf->getModel();
@@ -3211,15 +5561,15 @@ BOOL daNpc_Md_c::draw() {
g_env_light.setLightTevColorType(model, &tevStr);
mpArmMorf->entryDL();
}
-
+
g_env_light.setLightTevColorType(mpHarpModel, &tevStr);
mDoExt_modelUpdateDL(mpHarpModel);
-
+
if (isLightHit()) {
mLightBtkAnm.entry(mpHarpLightModel->getModelData());
mDoExt_modelUpdateDL(mpHarpLightModel);
mLightBtkAnm.remove(mpHarpLightModel->getModelData());
-
+
mDoMtx_stack_c::copy(mpHarpModel->getBaseTRMtx());
mDoMtx_stack_c::transM(l_HIO.m034.m0C, l_HIO.m034.m10, l_HIO.m034.m14);
Mtx mtx;
@@ -3227,51 +5577,406 @@ BOOL daNpc_Md_c::draw() {
mDoMtx_stack_c::transS(l_ms_light_local_start);
mDoMtx_stack_c::YrotM(0x8000);
f32 temp = mCps.GetAtVecP()->abs();
- mDoMtx_stack_c::scaleM(0.1f, 0.1f, temp * (1.0f/9600.0f));
+ mDoMtx_stack_c::scaleM(0.1f, 0.1f, temp * (1.0f / 9600.0f));
mDoMtx_stack_c::revConcat(mtx);
#if VERSION == VERSION_DEMO
m0B70.update(mDoMtx_stack_c::get(), 0xFF);
#else
m0B70.update(mDoMtx_stack_c::get(), 0xFF, 90.0f);
#endif
- dComIfGd_getXluList()->entryImm(&m0B70, 0x1F);
+ dComIfGd_getXluList()->entryImm(&m0B70, DEMO_SELECT(0, 0x1F));
}
-
- if (!isShipRide() && !fopAcM_CheckStatus(this, fopAcStts_CARRY_e) && checkStatus(daMdStts_UNK20000)) {
+
+#if VERSION == VERSION_DEMO
+ if (!isShipRide() && !fopAcM_CheckStatus(this, fopAcStts_CARRY_e))
+#else
+ if (!isShipRide() && !fopAcM_CheckStatus(this, fopAcStts_CARRY_e) && checkStatus(daMdStts_UNK20000))
+#endif
+ {
cXyz shadowPos(current.pos.x, current.pos.y + 150.0f, current.pos.z);
- mShadowId = dComIfGd_setShadow(
- mShadowId, 0, mpMorf->getModel(), &shadowPos, 800.0f, 20.0f,
- current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr
- );
-
+ mShadowId = dComIfGd_setShadow(mShadowId, 0, getModel(), &shadowPos, 800.0f, 20.0f, current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr);
+
if (mShadowId != 0) {
dComIfGd_addRealShadow(mShadowId, model);
dComIfGd_addRealShadow(mShadowId, mpHarpModel);
}
}
-
+
dSnap_RegistFig(DSNAP_TYPE_MD, this, 1.0f, 1.0f, 1.0f);
-
+
return TRUE;
}
/* 0000F8EC-0000FC18 .text animationPlay__10daNpc_Md_cFv */
void daNpc_Md_c::animationPlay() {
- /* Nonmatching */
+ static const u32 l_harp_play_se[] = {
+ JA_SE_CM_MD_HARP_CN4,
+ JA_SE_CM_MD_HARP_DN4,
+ JA_SE_CM_MD_HARP_EN4,
+ JA_SE_CM_MD_HARP_FS4,
+ JA_SE_CM_MD_HARP_GN4,
+ JA_SE_CM_MD_HARP_CN4,
+ JA_SE_CM_MD_HARP_DN4,
+ JA_SE_CM_MD_HARP_EN4,
+ JA_SE_CM_MD_HARP_FS4,
+ JA_SE_CM_MD_HARP_GN4,
+ JA_SE_CM_MD_HARP_GN4,
+ JA_SE_CM_MD_HARP_GN4
+ };
+
+ u32 mtrlSndId = 0;
+#if VERSION == VERSION_DEMO
+ if ((mAcch.ChkGroundHit()) && (dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd)))
+#else
+ if (((checkStatus(daMdStts_UNK20000)) && (mAcch.ChkGroundHit())) && (dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd)))
+#endif
+ {
+ mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(mAcch.m_gnd);
+ }
+ s8 sVar5 = mpMorf->play(&eyePos, mtrlSndId, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ m312A = sVar5;
+ BOOL bVar3 = true;
+ if ((dComIfGp_event_runCheck()) && (dComIfGp_evmng_startCheck(event_name_tbl[5]) != 0 || (dComIfGp_evmng_endCheck(event_name_tbl[5])))) {
+ bVar3 = false;
+ }
+ if (((isTypeSea()) && (bVar3)) && (m3104 == 0x16 || (m3104 == 0x17))) {
+ BOOL bVar2 = false;
+ if (m3104 == 0x16) {
+ if ((mpMorf->checkFrame(11.0f)) || (mpMorf->checkFrame(38.0f))) {
+ bVar2 = true;
+ }
+ } else {
+ if ((mpMorf->checkFrame(11.0f)) || (mpMorf->checkFrame(35.0f))) {
+ bVar2 = true;
+ }
+ }
+ if (bVar2) {
+ if (m313E == 0) {
+ int iVar1 = cLib_getRndValue(0, 10);
+ m30F4 = l_harp_play_se[iVar1];
+ m313E = 2;
+ } else {
+ m313E = m313E - 1;
+ }
+ fopAcM_monsSeStart(this, m30F4, &current.pos, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ }
+ } else {
+ m313E = 0;
+ }
+ if (!isTypeShipRide()) {
+ if (checkStatus(daMdStts_UNK1)) {
+ mpWingMorf->play(NULL, 0, 0);
+ } else {
+ mpArmMorf->play(NULL, 0, 0);
+ }
+ } else {
+ mpArmMorf->play(NULL, 0, 0);
+ }
+ if (mpMorf->getPlaySpeed() < 0.0f) {
+ if (m30D0 < mpMorf->getFrame()) {
+ m312A = 1;
+ }
+ } else if (m30D0 > mpMorf->getFrame()) {
+ m312A = 1;
+ }
+ m30D0 = mpMorf->getFrame();
+#if VERSION > VERSION_DEMO
+ if ((m312D == 0x1B) || (m312D == 0xF)) {
+ if (m30D0 < 10.0f) {
+ clearStatus(daMdStts_UNK80);
+ } else {
+ setBitStatus(daMdStts_UNK80);
+ }
+ }
+#endif
+ playTexPatternAnm();
+ playLightBtkAnm();
}
/* 0000FC18-0000FC58 .text checkPlayerRoom__10daNpc_Md_cFv */
void daNpc_Md_c::checkPlayerRoom() {
- m_playerRoom = false;
+ offPlayerRoom();
fopAc_ac_c* link = dComIfGp_getLinkPlayer();
- if (current.roomNo == link->current.roomNo) {
- m_playerRoom = true;
+ if (fopAcM_GetRoomNo(this) == fopAcM_GetRoomNo(link)) {
+ onPlayerRoom();
}
}
/* 0000FC58-000108B0 .text execute__10daNpc_Md_cFv */
BOOL daNpc_Md_c::execute() {
- /* Nonmatching */
+ f32 fVar1;
+ f32 fVar2;
+ s16 target;
+ cM3dGPla* triPla;
+ J3DModel* model;
+ int iStack_88;
+ cXyz local_30;
+ cXyz local_3c;
+
+#if VERSION > VERSION_DEMO
+ clearStatus(daMdStts_UNK20000);
+#endif
+ setOldLightBodyHit();
+ fopAcM_OffStatus(this, fopAcStts_SHOWMAP_e);
+ checkPlayerRoom();
+ executeDamageFog();
+ if (isShipRide()) {
+ mJntCtrl.setParam(
+ l_HIO.m074.m10,
+ l_HIO.m074.m12,
+ l_HIO.m074.m14,
+ l_HIO.m074.m16,
+ l_HIO.m074.m08,
+ l_HIO.m074.m0A,
+ l_HIO.m074.m0C,
+ l_HIO.m074.m0E,
+ l_HIO.mNpc.mMaxTurnStep
+ );
+ } else if (!isTypeM_DaiB()) {
+ if (!check_initialRoom()) {
+ if (dComIfGp_getCb1Player() == this) {
+ dComIfGp_setCb1Player(NULL);
+ }
+ return TRUE;
+ }
+ initialRestartOption(2, isTypeM_Dai());
+ if ((dComIfGp_getCb1Player() == this) && ((!dComIfGs_isEventBit(dSv_event_flag_c::UNK_1620) || (isTypeShipRide())) || (isTypeM_DaiB()))) {
+ dComIfGp_setCb1Player(NULL);
+ }
+ fopAcM_setStageLayer(this);
+ if (check_moveStop()) {
+ if (!isTypeShipRide()) {
+ setNpcAction(&daNpc_Md_c::waitNpcAction);
+ setAnm(0x30);
+ animationPlay();
+ setBaseMtx();
+ }
+ m312B = 0;
+ return TRUE;
+ }
+ if (((m3131 != 0) && (dComIfG_Bgsp()->ChkPolySafe(mPolyInfo))) && (dComIfG_Bgsp()->ChkMoveBG(mPolyInfo))) {
+ local_30 = old.pos;
+ dComIfG_Bgsp()->MoveBgCrrPos(mPolyInfo, true, &old.pos, NULL, NULL);
+ }
+ mJntCtrl.setParam(
+ l_HIO.mNpc.mMaxBackboneX,
+ l_HIO.mNpc.mMaxBackboneY,
+ l_HIO.mNpc.mMinBackboneX,
+ l_HIO.mNpc.mMinBackboneY,
+ l_HIO.mNpc.mMaxHeadX,
+ l_HIO.mNpc.mMaxHeadY,
+ l_HIO.mNpc.mMinHeadX,
+ l_HIO.mNpc.mMinHeadY,
+ l_HIO.mNpc.mMaxTurnStep
+ );
+ }
+ if (isTypeM_DaiB()) {
+ mAcch.CrrPos(*dComIfG_Bgsp());
+#if VERSION > VERSION_DEMO
+ setBitStatus(daMdStts_UNK20000);
+#endif
+ if (mAcch.GetGroundH() != -G_CM3D_F_INF) {
+ triPla = dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd);
+ if (triPla != NULL) {
+ m32A4 = *triPla->GetNP();
+ }
+ s8 roomNo = dComIfG_Bgsp()->GetRoomId(mAcch.m_gnd);
+ fopAcM_SetRoomNo(this, roomNo);
+ tevStr.mRoomNo = roomNo;
+ tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mAcch.m_gnd);
+ mStts.SetRoomId(roomNo);
+ mPolyInfo.SetPolyInfo(mAcch.m_gnd);
+ }
+ } else if (((!isShipRide()) && (!isReturnLink())) && (!fopAcM_CheckStatus(this, fopAcStts_CARRY_e))) {
+ if (checkNowPosMove(l_staff_name)) {
+ fVar1 = maxFallSpeed;
+ fVar2 = speed.y;
+ if (fVar1 < fVar2) {
+ speed.y = fVar2 - gravity;
+ if (speed.y < maxFallSpeed) {
+ speed.y = maxFallSpeed;
+ }
+ } else {
+ if (fVar1 > fVar2) {
+ speed.y = fVar2 + gravity;
+ if (speed.y > maxFallSpeed) {
+ speed.y = maxFallSpeed;
+ }
+ }
+ }
+ speed.x = speedF * cM_ssin(current.angle.y);
+ speed.z = speedF * cM_scos(current.angle.y);
+ fopAcM_posMove(this, mStts.GetCCMoveP());
+ }
+ if (checkStatus(daMdStts_UNK4)) {
+ objWindHitCheck(&mCyl2);
+ }
+ mAcch.CrrPos(*dComIfG_Bgsp());
+#if VERSION > VERSION_DEMO
+ setBitStatus(daMdStts_UNK20000);
+#endif
+ BOOL bVar10 = false;
+ if ((mAcch.ChkWaterIn()) && (mAcch.m_wtr.GetHeight() > current.pos.y + 5.0f)) {
+ if (m3074.getEmitter() == NULL) {
+ dComIfGp_particle_setShipTail(dPa_name::ID_AK_JN_HAMON00, &current.pos, NULL, NULL, 0xFF, &m3074);
+ }
+ m3074.setRate(0.0f);
+ bVar10 = true;
+ }
+ if ((!bVar10) && (m3074.getEmitter() != NULL)) {
+ m3074.remove();
+ }
+ if (!(mAcch.ChkGroundHit())) {
+ if (chkPlayerAction(&daNpc_Md_c::walkPlayerAction) || (chkNpcAction(&daNpc_Md_c::searchNpcAction) || (chkNpcAction(&daNpc_Md_c::waitNpcAction)))) {
+ f32 gndY = mAcch.GetGroundH();
+ f32 delta = gndY - current.pos.y;
+ if (((delta < 0.001f) && (delta >= -30.1f)) && (speed.y < 0.001f)) {
+ current.pos.y = gndY;
+ mAcch.SetGroundHit();
+ speed.y = 0.0f;
+ }
+ }
+ }
+ if (mAcch.GetGroundH() != -G_CM3D_F_INF) {
+ triPla = dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd);
+ if (triPla != NULL) {
+ m32A4 = *triPla->GetNP();
+ }
+ s8 roomNo = dComIfG_Bgsp()->GetRoomId(mAcch.m_gnd);
+ current.roomNo = roomNo;
+ tevStr.mRoomNo = roomNo;
+ tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mAcch.m_gnd);
+ mStts.SetRoomId(roomNo);
+ mPolyInfo.SetPolyInfo(mAcch.m_gnd);
+ }
+ if ((mAcch.ChkGroundHit()) && (m3131 == 0)) {
+ dComIfGp_particle_setSimpleLand(mAcch.m_gnd, &current.pos, &shape_angle, 1.25f, 1.5f, 1.0f, &tevStr, &iStack_88, 7);
+ }
+#if VERSION == VERSION_DEMO
+ m3131 = mAcch.ChkGroundHit();
+#else
+ m3131 = (mAcch.ChkGroundHit()) ? TRUE : FALSE;
+#endif
+ if ((mAcch.GetGroundH() == -G_CM3D_F_INF) || (dComIfG_Bgsp()->GetGroundCode(mAcch.m_gnd) == 4)) {
+ if (!isFallAction()) {
+ m4E8 = 0;
+ } else if (m4E8 < 30) {
+ m4E8++;
+ } else if (!(dComIfGp_roomControl_checkStatusFlag(fopAcM_GetHomeRoomNo(this), 0x10))) {
+ current.pos = home.pos;
+ current.angle = home.angle;
+ current.roomNo = home.roomNo;
+ current.field_0x13 = home.field_0x13;
+ shape_angle = home.angle;
+ speedF = 0.0f;
+ m4E8 = 0;
+ } else {
+ daPy_getPlayerLinkActorClass()->npcStartRestartRoom();
+ }
+ } else {
+ m4E8 = 0;
+ }
+ }
+ lightHitCheck();
+ setCollision();
+ if (checkNowPosMove(l_staff_name)) {
+ animationPlay();
+ }
+ if (!eventProc()) {
+ if (daPy_getPlayerActorClass() == this) {
+ fopAcM_SetStatusMap(this, 0x11);
+ if (isReturnLink()) {
+ mCurEventMode = 0xc;
+ } else {
+ if (isNoCarryAction()) {
+ setPlayerAction(&daNpc_Md_c::carryPlayerAction);
+ returnLink();
+ }
+ playerAction(NULL);
+ if (returnLinkCheck()) {
+ returnLink();
+ } else {
+ checkCollision(1);
+ }
+ }
+ } else {
+ m313F = chkMoveBlock(&m30C4);
+ if (m313F != 0) {
+ setNpcAction(&daNpc_Md_c::escapeNpcAction);
+ }
+ if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_1620)) {
+ fopAcM_SetStatusMap(this, 0xC);
+ } else {
+ fopAcM_SetStatusMap(this, 0x8);
+ }
+ carryCheck();
+ checkOrder();
+ npcAction(NULL);
+ checkCollision(0);
+ if (!checkStatus(daMdStts_UNK2)) {
+ if (checkStatus(daMdStts_UNK1)) {
+ target = shape_angle.y - current.angle.y;
+ if ((target < 0x6000) && (target > -0x6000)) {
+ if (target > 0x2000) {
+ target = 0x2000;
+ } else if (target < -0x2000) {
+ target = -0x2000;
+ }
+ cLib_addCalcAngleS(&shape_angle.z, target, 8, 0x2000, 0x400);
+ cLib_addCalcAngleS(&shape_angle.x, 0, 8, 0x2000, 0x400);
+ } else {
+ cLib_addCalcAngleS(&shape_angle.z, 0, 8, 0x2000, 0x400);
+ cLib_addCalcAngleS(&shape_angle.x, -0x2000, 8, 0x2000, 0x400);
+ }
+ } else {
+ current.angle.y = shape_angle.y;
+ }
+ }
+ }
+ }
+ eventOrder();
+ setBaseMtx();
+ model = getModel();
+ emitterTrace(m0508[0], model->getAnmMtx(m_neck_jnt_num), &current.angle);
+ emitterTrace(m0508[1], model->getAnmMtx(m_neck_jnt_num), NULL);
+ if (!isTypeShipRide()) {
+ model = mpWingMorf->getModel();
+ emitterTrace(m0508[2], model->getAnmMtx(m_wingR3_jnt_num), NULL);
+ emitterTrace(m0508[3], model->getAnmMtx(m_wingL3_jnt_num), NULL);
+ emitterTrace(m0508[4], model->getAnmMtx(m_wingR3_jnt_num), NULL);
+ emitterTrace(m0508[5], model->getAnmMtx(m_wingL3_jnt_num), NULL);
+ if (checkBitEffectStatus(1)) {
+ model = mpWingMorf->getModel();
+ local_3c.set(model->getAnmMtx(m_wingR2_jnt_num)[0][3], model->getAnmMtx(m_wingR2_jnt_num)[1][3], model->getAnmMtx(m_wingR2_jnt_num)[2][3]);
+ dComIfGp_particle_set(
+ dPa_name::ID_IT_SN_MD_HANE01,
+ &local_3c,
+ NULL,
+ NULL,
+ 0xFF,
+ NULL,
+ fopAcM_GetRoomNo(this),
+ &tevStr.mColorK0,
+ &tevStr.mColorK0,
+ NULL
+ );
+ local_3c.set(model->getAnmMtx(m_wingL2_jnt_num)[0][3], model->getAnmMtx(m_wingL2_jnt_num)[1][3], model->getAnmMtx(m_wingL2_jnt_num)[2][3]);
+ dComIfGp_particle_set(
+ dPa_name::ID_IT_SN_MD_HANE01,
+ &local_3c,
+ NULL,
+ NULL,
+ 0xFF,
+ NULL,
+ fopAcM_GetRoomNo(this),
+ &tevStr.mColorK0,
+ &tevStr.mColorK0,
+ NULL
+ );
+ }
+ }
+ setEffectStatus(0);
+ return TRUE;
}
/* 000108B0-00010948 .text particle_set__10daNpc_Md_cFPP14JPABaseEmitterUs */
@@ -3293,7 +5998,10 @@ void daNpc_Md_c::emitterTrace(JPABaseEmitter* emitter, MtxP mtx, csXyz* angle) {
JGeometry::TVec3<f32> pos(mtx[0][3], mtx[1][3], mtx[2][3]);
emitter->setGlobalTranslation(pos);
if (angle) {
- JGeometry::TVec3<s16> rot(angle->x, angle->y, angle->z);
+ JGeometry::TVec3<s16> rot;
+ rot.z = angle->z;
+ rot.y = angle->y;
+ rot.x = angle->x;
emitter->setGlobalRotation(rot);
}
}
@@ -3311,13 +6019,15 @@ void daNpc_Md_c::emitterDelete(JPABaseEmitter** pEmitter) {
/* 000109DC-000110BC .text __dt__10daNpc_Md_cFv */
daNpc_Md_c::~daNpc_Md_c() {
dComIfG_resDelete(&mPhase, mModelArcName);
- if (heap) {
+ if (DEMO_SELECT(mpMorf, heap)) {
mpMorf->stopZelAnime();
}
deletePiyoPiyo();
+#if VERSION > VERSION_DEMO
emitterDelete(&m0508[0]);
deleteHane02Emitter();
deleteHane03Emitter();
+#endif
m3058.end();
m304C.end();
m3074.remove();
@@ -3325,9 +6035,9 @@ daNpc_Md_c::~daNpc_Md_c() {
mDoHIO_deleteChild(l_HIO.mNo);
l_HIO.mNo = -1;
}
- m_flying = false;
- m_mirror = false;
- m_playerRoom = false;
+ offFlying();
+ offMirror();
+ offPlayerRoom();
}
/* 000110BC-000110DC .text daNpc_Md_Create__FP10fopAc_ac_c */
@@ -3359,7 +6069,10 @@ static BOOL daNpc_Md_IsDelete(daNpc_Md_c* i_this) {
/* 0001114C-0001119C .text execute__26daNpc_Md_followEcallBack_cFP14JPABaseEmitter */
void daNpc_Md_followEcallBack_c::execute(JPABaseEmitter* emitter) {
emitter->setGlobalTranslation(mPos.x, mPos.y, mPos.z);
- JGeometry::TVec3<s16> rot(mAngle.x, mAngle.y, mAngle.z);
+ JGeometry::TVec3<s16> rot;
+ rot.z = mAngle.z;
+ rot.y = mAngle.y;
+ rot.x = mAngle.x;
emitter->setGlobalRotation(rot);
}