summaryrefslogtreecommitdiff
path: root/src/d
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2025-08-28 03:49:24 -0700
committerGitHub <noreply@github.com>2025-08-28 13:49:24 +0300
commit5ce5bf20cc7107511468f68c7542eddf9c1a91dd (patch)
tree829ec3a68df9bca10f06b3e9b4da9a1789766323 /src/d
parent956e84b0e7090fde541f25319d0255c45b657b39 (diff)
npc_kn mostly done (#2609)
* npc_kn mostly done * fix shieldD * pr fixes * weak func fixes
Diffstat (limited to 'src/d')
-rw-r--r--src/d/actor/d_a_npc_gwolf.cpp2
-rw-r--r--src/d/actor/d_a_npc_kn.cpp5259
-rw-r--r--src/d/actor/d_a_npc_kn_base.inc1036
-rw-r--r--src/d/actor/d_a_npc_kn_teach01.inc747
-rw-r--r--src/d/actor/d_a_npc_kn_teach02.inc645
5 files changed, 5224 insertions, 2465 deletions
diff --git a/src/d/actor/d_a_npc_gwolf.cpp b/src/d/actor/d_a_npc_gwolf.cpp
index 5828b38b57..b7f20e9b7f 100644
--- a/src/d/actor/d_a_npc_gwolf.cpp
+++ b/src/d/actor/d_a_npc_gwolf.cpp
@@ -1288,7 +1288,7 @@ void daNpc_GWolf_c::setExpression(int param_0, f32 param_1) {
}
/* 809F4BBC-809F4DE8 001BFC 022C+00 2/0 0/0 0/0 .text setMotionAnm__13daNpc_GWolf_cFif */
-bool daNpc_GWolf_c::setMotionAnm(int param_0, f32 param_1) {
+void daNpc_GWolf_c::setMotionAnm(int param_0, f32 param_1) {
// NONMATCHING
}
diff --git a/src/d/actor/d_a_npc_kn.cpp b/src/d/actor/d_a_npc_kn.cpp
index f6f5b97709..97dd13a3f3 100644
--- a/src/d/actor/d_a_npc_kn.cpp
+++ b/src/d/actor/d_a_npc_kn.cpp
@@ -1,194 +1,171 @@
/**
* @file d_a_npc_kn.cpp
- *
-*/
+ *
+ */
#include "d/dolzel_rel.h"
-#include "d/actor/d_a_npc_kn.h"
+#include "Z2AudioLib/Z2Instances.h"
#include "d/actor/d_a_npc.h"
#include "d/actor/d_a_npc_gwolf.h"
+#include "d/actor/d_a_npc_kn.h"
#include "d/actor/d_a_obj_knBullet.h"
-#include "JSystem//J3DGraphBase/J3DMaterial.h"
-#include "Z2AudioLib/Z2Instances.h"
+#include "d/d_meter2_info.h"
-/* ############################################################################################## */
/* 80A408C8-80A408F8 000000 0030+00 50/50 0/0 0/0 .rodata mCcDObjData__10daNpc_Kn_c */
-const u8 daNpc_Kn_c::mCcDObjData[48] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+const dCcD_SrcGObjInf daNpc_Kn_c::mCcDObjData = {
+ {0, {{0, 0, 0}, {0, 0}, {0x79}}},
+ {dCcD_SE_NONE, 0, 0, 0, 0},
+ {dCcD_SE_NONE, 0, 0, 0, 0},
+ {0},
};
#include "d/actor/d_a_npc_kn_base.inc"
/* 80A40D54-80A40D98 000020 0044+00 1/1 0/0 0/0 .data mCcDCyl__10daNpc_Kn_c */
dCcD_SrcCyl daNpc_Kn_c::mCcDCyl = {
- {
- {0, {{0, 0, 0}, {0, 0}, {0}}},
- {0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0},
- {0},
- },
+ mCcDObjData,
{{0.0f, 0.0f, 0.0f}, 0.0f, 0.0f},
};
/* 80A40D98-80A40DD8 000064 0040+00 1/1 0/0 0/0 .data mCcDSph__10daNpc_Kn_c */
dCcD_SrcSph daNpc_Kn_c::mCcDSph = {
- {
- {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x0}}, // mObj
- {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
- {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg
- {0x0}, // mGObjCo
- }, // mObjInf
+ mCcDObjData,
{
{{0.0f, 0.0f, 0.0f}, 0.0f} // mSphCc
- }
+ },
};
/* 80A40DD8-80A40DF0 0000A4 0018+00 0/1 0/0 0/0 .data l_bmdData */
static int l_bmdData[3][2] = {
- {47, 1},
+ {47, 1},
{48, 1},
- {49, 1}
+ {49, 1},
};
/* 80A40DF0-80A40EC0 -00001 00D0+00 0/1 0/0 0/0 .data l_evtList */
static daNpcT_evtData_c l_evtList[26] = {
{"", 0},
- {"NONE_EQUIP_CHANGE_TALK",1},
- {"NONE_EQUIP_CHANGE_TALK_WAIT",1},
- {"NO_EQ_CHNGE_TLK_STD",1},
- {"LARGE_DAMAGE_TALK",1},
- {"FIRST_ENCOUNT",2},
- {"ATTACK_FAILED",2},
- {"FIRST_SKILL_GET",2},
- {"SECOND_ENCOUNT",1},
- {"SECOND_SKILL_EXPLAIN",3},
- {"REFLECT_EXPLAIN",3},
- {"SECOND_SKILL_GET",3},
- {"THIRD_SKILL_EXPLAIN",4},
- {"THIRD_SKILL_FIRST",1},
- {"THIRD_SKILL_GET",4},
- {"FOURTH_SKILL_EXPLAIN",5},
- {"FOURTH_SKILL_GET",5},
- {"FIFTH_SKILL_EXPLAIN",6},
- {"FIFTH_SKILL_FIRST",1},
- {"FIFTH_SKILL_GET",6},
- {"SIXTH_SKILL_EXPLAIN",7},
- {"SIXTH_SKILL_GET",7},
- {"SIXTH_SKILL_GET_STAND",7},
- {"SEVENTH_SKILL_EXPLAIN",8},
- {"SEVENTH_SKILL_GET",8},
- {"SEVENTH_SKILL_GET_STAND",8},
+ {"NONE_EQUIP_CHANGE_TALK", 1},
+ {"NONE_EQUIP_CHANGE_TALK_WAIT", 1},
+ {"NO_EQ_CHNGE_TLK_STD", 1},
+ {"LARGE_DAMAGE_TALK", 1},
+ {"FIRST_ENCOUNT", 2},
+ {"ATTACK_FAILED", 2},
+ {"FIRST_SKILL_GET", 2},
+ {"SECOND_ENCOUNT", 1},
+ {"SECOND_SKILL_EXPLAIN", 3},
+ {"REFLECT_EXPLAIN", 3},
+ {"SECOND_SKILL_GET", 3},
+ {"THIRD_SKILL_EXPLAIN", 4},
+ {"THIRD_SKILL_FIRST", 1},
+ {"THIRD_SKILL_GET", 4},
+ {"FOURTH_SKILL_EXPLAIN", 5},
+ {"FOURTH_SKILL_GET", 5},
+ {"FIFTH_SKILL_EXPLAIN", 6},
+ {"FIFTH_SKILL_FIRST", 1},
+ {"FIFTH_SKILL_GET", 6},
+ {"SIXTH_SKILL_EXPLAIN", 7},
+ {"SIXTH_SKILL_GET", 7},
+ {"SIXTH_SKILL_GET_STAND", 7},
+ {"SEVENTH_SKILL_EXPLAIN", 8},
+ {"SEVENTH_SKILL_GET", 8},
+ {"SEVENTH_SKILL_GET_STAND", 8},
};
/* 80A40EC0-80A40EE4 -00001 0024+00 2/4 0/0 0/0 .data l_resNameList */
static char* l_resNameList[9] = {
- "",
- "KN_a",
- "KN_tch01D",
- "KN_tch02D",
- "KN_tch03D",
- "KN_tch04D",
- "KN_tch05D",
- "KN_tch06D",
- "KN_tch07D",
+ "", "KN_a", "KN_tch01D", "KN_tch02D", "KN_tch03D",
+ "KN_tch04D", "KN_tch05D", "KN_tch06D", "KN_tch07D",
};
/* 80A40EE4-80A40EE8 0001B0 0003+01 1/0 0/0 0/0 .data l_loadResPtrnTeach01 */
static s8 l_loadResPtrnTeach01[3] = {
- 0x01,
- 0x02,
- 0xFF,
+ 1,
+ 2,
+ -1,
};
/* 80A40EE8-80A40EEC 0001B4 0004+00 1/0 0/0 0/0 .data l_loadResPtrnTeach02 */
static s8 l_loadResPtrnTeach02[4] = {
- 0x01,
- 0x02,
- 0x03,
- 0xFF,
+ 1,
+ 2,
+ 3,
+ -1,
};
/* 80A40EEC-80A40EF0 0001B8 0004+00 1/0 0/0 0/0 .data l_loadResPtrnTeach03 */
static s8 l_loadResPtrnTeach03[4] = {
- 0x01,
- 0x03,
- 0x04,
- 0xFF,
+ 1,
+ 3,
+ 4,
+ -1,
};
/* 80A40EF0-80A40EF4 0001BC 0004+00 1/0 0/0 0/0 .data l_loadResPtrnTeach04 */
static s8 l_loadResPtrnTeach04[4] = {
- 0x01,
- 0x04,
- 0x05,
- 0xFF,
+ 1,
+ 4,
+ 5,
+ -1,
};
/* 80A40EF4-80A40EF8 0001C0 0004+00 1/0 0/0 0/0 .data l_loadResPtrnTeach05 */
static s8 l_loadResPtrnTeach05[4] = {
- 0x01,
- 0x05,
- 0x06,
- 0xFF,
+ 1,
+ 5,
+ 6,
+ -1,
};
/* 80A40EF8-80A40EFC 0001C4 0004+00 1/0 0/0 0/0 .data l_loadResPtrnTeach06 */
static s8 l_loadResPtrnTeach06[4] = {
- 0x01,
- 0x06,
- 0x07,
- 0xFF,
+ 1,
+ 6,
+ 7,
+ -1,
};
/* 80A40EFC-80A40F00 0001C8 0003+01 1/0 0/0 0/0 .data l_loadResPtrnTeach07 */
static s8 l_loadResPtrnTeach07[3] = {
- 0x01,
- 0x08,
- 0xFF,
+ 1,
+ 8,
+ -1,
};
/* 80A40F00-80A40F04 0001CC 0002+02 1/0 0/0 0/0 .data l_loadResPtrn0 */
static s8 l_loadResPtrn0[2] = {
- 0x01,
- 0xFF,
+ 1,
+ -1,
};
/* 80A40F04-80A40F24 -00001 0020+00 1/2 0/0 0/0 .data l_loadResPtrnList */
static s8* l_loadResPtrnList[8] = {
- l_loadResPtrnTeach01, l_loadResPtrnTeach02, l_loadResPtrnTeach03,
- l_loadResPtrnTeach04, l_loadResPtrnTeach05, l_loadResPtrnTeach06,
- l_loadResPtrnTeach07, l_loadResPtrn0,
+ l_loadResPtrnTeach01, l_loadResPtrnTeach02, l_loadResPtrnTeach03, l_loadResPtrnTeach04,
+ l_loadResPtrnTeach05, l_loadResPtrnTeach06, l_loadResPtrnTeach07, l_loadResPtrn0,
};
/* 80A40F24-80A40F5C 0001F0 0038+00 0/1 0/0 0/0 .data l_faceMotionAnmData */
static daNpcT_faceMotionAnmData_c l_faceMotionAnmData[2] = {
{-1, 0, 0, -1, 0, 0, 0},
- {21, 0, 1, -1, 0, 0, 0}
-
+ {21, 0, 1, -1, 0, 0, 0},
};
/* 80A40F5C-80A41330 000228 03D4+00 0/1 0/0 0/0 .data l_motionAnmData */
static int l_motionAnmData[245] = {
- 43,2, 1, -1,0, 0, 0, 38,2, 1, -1,0, 0, 0, 39,2, 1, -1,0, 0,
- 0, 41,0, 1, -1,0, 0, 0, 16,0, 1, -1,0, 0, 0, 11,0, 1, -1,0,
- 0, 0, 7, 0, 1, -1,0, 0, 0, 8, 0, 1, -1,0, 0, 0, 9, 2, 1, -1,
- 0,0,0, 14,0, 1, -1,0, 0, 0, 13,2, 1, -1,0, 0, 0, 12,0, 1,
- -1,0, 0, 0, 30,0, 1, -1,0, 0, 0, 17,2, 1, -1,0, 0, 0, 26,0,
- 1, -1,0, 0, 0, 28,2, 1, -1,0, 0, 0, 35,0, 1, -1,0, 0, 0, 36,
- 2, 1, -1,0, 0, 0, 10,0, 1, -1,0, 0, 0, 19,0, 1, -1,0, 0, 0,
- 40,0, 1, -1,0, 0, 0, 37,0, 1, -1,0, 0, 0, 5, 0, 1, -1,0, 0,
- 0, 18,2, 1, -1,0, 0, 0, 27,0, 1, -1,0, 0, 0, 29,2, 1, -1,0,
- 0, 0, 20,0, 1, -1,0, 0, 0, 15,0, 1, -1,0, 0, 0, 24,0, 1, -1,
- 0, 0, 0, 25,2, 1, -1,0, 0, 0, 44,2, 1, -1,0, 0, 0, 42,0, 1,
- -1,0, 0, 0, 22,0, 1, -1,0, 0, 0, 23,2, 1, -1,0, 0, 0, 6, 0,
- 1, -1,0, 0, 0
+ 43, 2, 1, -1, 0, 0, 0, 38, 2, 1, -1, 0, 0, 0, 39, 2, 1, -1, 0, 0, 0, 41, 0, 1, -1, 0, 0, 0,
+ 16, 0, 1, -1, 0, 0, 0, 11, 0, 1, -1, 0, 0, 0, 7, 0, 1, -1, 0, 0, 0, 8, 0, 1, -1, 0, 0, 0,
+ 9, 2, 1, -1, 0, 0, 0, 14, 0, 1, -1, 0, 0, 0, 13, 2, 1, -1, 0, 0, 0, 12, 0, 1, -1, 0, 0, 0,
+ 30, 0, 1, -1, 0, 0, 0, 17, 2, 1, -1, 0, 0, 0, 26, 0, 1, -1, 0, 0, 0, 28, 2, 1, -1, 0, 0, 0,
+ 35, 0, 1, -1, 0, 0, 0, 36, 2, 1, -1, 0, 0, 0, 10, 0, 1, -1, 0, 0, 0, 19, 0, 1, -1, 0, 0, 0,
+ 40, 0, 1, -1, 0, 0, 0, 37, 0, 1, -1, 0, 0, 0, 5, 0, 1, -1, 0, 0, 0, 18, 2, 1, -1, 0, 0, 0,
+ 27, 0, 1, -1, 0, 0, 0, 29, 2, 1, -1, 0, 0, 0, 20, 0, 1, -1, 0, 0, 0, 15, 0, 1, -1, 0, 0, 0,
+ 24, 0, 1, -1, 0, 0, 0, 25, 2, 1, -1, 0, 0, 0, 44, 2, 1, -1, 0, 0, 0, 42, 0, 1, -1, 0, 0, 0,
+ 22, 0, 1, -1, 0, 0, 0, 23, 2, 1, -1, 0, 0, 0, 6, 0, 1, -1, 0, 0, 0,
};
/* 80A41330-80A41358 0005FC 0028+00 1/2 0/0 0/0 .data l_podBckData */
-static s32 l_podBckData[5][2] = {
+static int l_podBckData[5][2] = {
{-1, 1},
{34, 1},
{33, 1},
@@ -199,12 +176,12 @@ static s32 l_podBckData[5][2] = {
/* 80A41358-80A41378 000624 0020+00 0/1 0/0 0/0 .data l_faceMotionSequenceData */
static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_faceMotionSequenceData[8] = {
{1, -1, 0},
- {-1, 0, 0},
- {-1, 0, 0},
{-1, 0, 0},
- {0, -1, 0},
- {-1, 0, 0},
- {-1, 0, 0},
+ {-1, 0, 0},
+ {-1, 0, 0},
+ {0, -1, 0},
+ {-1, 0, 0},
+ {-1, 0, 0},
{-1, 0, 0},
};
@@ -242,8 +219,8 @@ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[132] = {
{-1, 0, 0},
{-1, 0, 0},
{-1, 0, 0},
- {5, 0, 1},
- {4, 3, 1},
+ {5, 0, 1},
+ {4, 3, 1},
{0, -1, 0},
{-1, 0, 0},
{2, -1, 0},
@@ -254,8 +231,8 @@ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[132] = {
{-1, 0, 0},
{-1, 0, 0},
{-1, 0, 0},
- {7, 0, 1},
- {8, 0, 0},
+ {7, 0, 1},
+ {8, 0, 0},
{-1, 0, 0},
{-1, 0, 0},
{32, 3, 0},
@@ -275,13 +252,13 @@ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[132] = {
{-1, 0, 0},
{-1, 0, 0},
{26, -1, 1},
- {0, 0, 0},
+ {0, 0, 0},
{-1, 0, 0},
{-1, 0, 0},
{20, 3, 1},
{21, 3, 1},
{22, 3, 1},
- {0, 3, 0},
+ {0, 3, 0},
{13, 6, 0},
{-1, 0, 0},
{-1, 0, 0},
@@ -299,10 +276,10 @@ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[132] = {
{-1, 0, 0},
{-1, 0, 0},
{19, -1, 1},
- {0, 0, 0},
+ {0, 0, 0},
{-1, 0, 0},
{-1, 0, 0},
- {5, 0, 1},
+ {5, 0, 1},
{0, -1, 0},
{-1, 0, 0},
{-1, 0, 0},
@@ -314,34 +291,34 @@ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[132] = {
{2, -1, 0},
{-1, 0, 0},
{-1, 0, 0},
- {4, 3, 1},
+ {4, 3, 1},
{0, -1, 0},
{-1, 0, 0},
{-1, 0, 0},
- {5, 0, 1},
+ {5, 0, 1},
{2, -1, 0},
{-1, 0, 0},
{-1, 0, 0},
- {6, 0, 1},
+ {6, 0, 1},
{0, -1, 0},
{-1, 0, 0},
{-1, 0, 0},
- {7, 0, 1},
+ {7, 0, 1},
{0, -1, 0},
{-1, 0, 0},
{-1, 0, 0},
- {7, 0, 1},
+ {7, 0, 1},
{2, -1, 0},
{-1, 0, 0},
{-1, 0, 0},
- {7, 0, 1},
+ {7, 0, 1},
{1, -1, 0},
{-1, 0, 0},
{-1, 0, 0},
- {1, 3, 0},
+ {1, 3, 0},
+ {-1, 0, 0},
{-1, 0, 0},
{-1, 0, 0},
- {-1, 0, 0}
};
/* 80A41588-80A415DC -00001 0054+00 1/1 0/0 0/0 .data mCutNameList__10daNpc_Kn_c */
@@ -371,6 +348,7 @@ char* daNpc_Kn_c::mCutNameList[21] = {
/* 80A416CC-80A417C8 000998 00FC+00 1/2 0/0 0/0 .data mCutList__10daNpc_Kn_c */
daNpc_Kn_c::cutFunc daNpc_Kn_c::mCutList[21] = {
+ NULL,
&daNpc_Kn_c::ECut_noneEquipChangeTalk,
&daNpc_Kn_c::ECut_noneEquipChangeTalkStand,
&daNpc_Kn_c::ECut_largeDamageTalk,
@@ -391,15 +369,15 @@ daNpc_Kn_c::cutFunc daNpc_Kn_c::mCutList[21] = {
&daNpc_Kn_c::ECut_sixthSkillGet,
&daNpc_Kn_c::ECut_seventhSkillExplain,
&daNpc_Kn_c::ECut_seventhSkillGet,
- NULL
};
/* 80A2AA0C-80A2AECC 0000EC 04C0+00 1/0 0/0 0/0 .text __dt__10daNpc_Kn_cFv */
daNpc_Kn_c::~daNpc_Kn_c() {
- if (heap) {
- mpMorf[0]->stopZelAnime();
- mpMorf[1]->stopZelAnime();
+ if (heap != NULL) {
+ mpModelMorf[0]->stopZelAnime();
+ mpModelMorf[1]->stopZelAnime();
}
+
deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList);
}
@@ -446,215 +424,219 @@ const daNpc_Kn_HIOParam daNpc_Kn_Param_c::m = {
0.0f,
0.0f,
0.0f,
- // kn-specific:
255,
300,
90,
- 0,
100.0f,
240.0f,
1100.0f,
27.0f,
50.0f,
- 0x00100200,
+ 16,
+ 0x200,
120,
90,
2.0f,
};
/* 80A2AFD4-80A2B278 0006B4 02A4+00 1/1 0/0 0/0 .text create__10daNpc_Kn_cFv */
-s32 daNpc_Kn_c::create() {
- static int const heapSize[8] = {
- 0x4B10,
- 0x4B20,
- 0x4B10,
- 0x4B10,
- 0x5A00,
- 0x4B10,
- 0x4B20,
- 0x0000,
- };
-
- cPhs__Step step;
- fopAcM_SetupActor2(this, daNpc_Kn_c, l_faceMotionAnmData, (daNpcT_motionAnmData_c*)l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, l_resNameList);
+int daNpc_Kn_c::create() {
+ fopAcM_SetupActor2(this, daNpc_Kn_c, l_faceMotionAnmData,
+ (daNpcT_motionAnmData_c*)l_motionAnmData, l_faceMotionSequenceData, 4,
+ l_motionSequenceData, 4, l_evtList, l_resNameList);
mType = getType();
mDivideNo = getDivideNo();
mFlowNodeNo = getFlowNodeNo();
- field_0xABD = 0;
+ mTwilight = FALSE;
+
+ OS_REPORT("\t(%s:%d) flowNo:%d, PathNo:%02x<%08x> ", fopAcM_getProcNameString(this), mType, mFlowNodeNo, getPath(), fopAcM_GetParam(this));
if (isDelete()) {
+ OS_REPORT("===>isDelete:TRUE\n");
return cPhs_ERROR_e;
- } else {
- step = (cPhs__Step)loadRes(l_loadResPtrnList[mType], (const char**)l_resNameList);
+ }
- if (step == cPhs_COMPLEATE_e) {
- if (!fopAcM_entrySolidHeap(this, createHeapCallBack, heapSize[mType])) {
- return cPhs_ERROR_e;
- } else {
- J3DModelData* model_data = mpMorf[0]->getModel()->getModelData();
- fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx());
- fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f);
- fopAcM_OnStatus(this, fopAcM_STATUS_UNK_80000000);
- mCreature.init(&current.pos,&eyePos,3,1);
- dKy_tevstr_init(&mTevStr, fopAcM_GetRoomNo(this), 0xFF);
- mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this));
- mAcch.CrrPos(dComIfG_Bgsp());
- mGndChk = mAcch.m_gnd;
- mGroundHeight = mAcch.GetGroundH();
- setEnvTevColor();
- setRoomNo();
- mCcStts.Init(daNpc_Kn_Param_c::m.common.weight, 0, this);
- resetCol();
- reset();
- field_0xABC = 1;
- Execute();
- field_0xABC = 0;
- }
- }
- }
-
- return step;
+ OS_REPORT("\n");
+
+ int phase_state = loadRes(l_loadResPtrnList[mType], (const char**)l_resNameList);
+ if (phase_state == cPhs_COMPLEATE_e) {
+ static int const heapSize[8] = {0x4B10, 0x4B20, 0x4B10, 0x4B10, 0x5A00, 0x4B10, 0x4B20, 0x0000};
+ if (!fopAcM_entrySolidHeap(this, createHeapCallBack, heapSize[mType])) {
+ return cPhs_ERROR_e;
+ }
+
+ J3DModelData* model_data = mpModelMorf[0]->getModel()->getModelData();
+ fopAcM_SetMtx(this, mpModelMorf[0]->getModel()->getBaseTRMtx());
+ fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f);
+ fopAcM_OnStatus(this, fopAcM_STATUS_UNK_80000000);
+
+ mSound.init(&current.pos, &eyePos, 3, 1);
+ dKy_tevstr_init(&mTevStr, fopAcM_GetRoomNo(this), 0xFF);
+
+ mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1,
+ &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this),
+ fopAcM_GetShapeAngle_p(this));
+ mAcch.CrrPos(dComIfG_Bgsp());
+ mGndChk = mAcch.m_gnd;
+ mGroundHeight = mAcch.GetGroundH();
+
+ setEnvTevColor();
+ setRoomNo();
+
+ mCcStts.Init(daNpc_Kn_Param_c::m.common.weight, 0, this);
+ resetCol();
+ reset();
+
+ mCreating = TRUE;
+ Execute();
+ mCreating = FALSE;
+ }
+
+ return phase_state;
}
/* 80A2B278-80A2B620 000958 03A8+00 1/1 0/0 0/0 .text CreateHeap__10daNpc_Kn_cFv */
-s32 daNpc_Kn_c::CreateHeap() {
- // NONMATCHING - regalloc
+int daNpc_Kn_c::CreateHeap() {
+ // NONMATCHING - regalloc, matches debug
J3DModelData* mdlData_p = NULL;
- J3DModel* model = NULL;
+ J3DModel* model_p = NULL;
int bmd_offset = 1;
int arc_idx = l_bmdData[bmd_offset][1];
int res_idx = l_bmdData[bmd_offset][0];
- mdlData_p = (J3DModelData*) dComIfG_getObjectRes(l_resNameList[arc_idx], res_idx);
- JUT_ASSERT(0x4EB, 0 != mdlData_p);
- u32 big_bits = 0x11020284;
- mpMorf[0] = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mCreature, 0x80000, big_bits);
+ mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNameList[arc_idx], res_idx);
+ JUT_ASSERT(1259, 0 != mdlData_p);
- if (mpMorf[0] != NULL && mpMorf[0]->getModel() == NULL) {
- mpMorf[0]->stopZelAnime();
- mpMorf[0] = NULL;
+ u32 sp2C = 0x11020284;
+ mpModelMorf[0] = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, sp2C);
+ if (mpModelMorf[0] != NULL && mpModelMorf[0]->getModel() == NULL) {
+ mpModelMorf[0]->stopZelAnime();
+ mpModelMorf[0] = NULL;
}
- if (mpMorf[0] == NULL) {
+ if (mpModelMorf[0] == NULL) {
return 0;
- } else {
- model = mpMorf[0]->getModel();
+ }
- for (u16 i = 0; i < mdlData_p->getJointNum(); i++) {
- mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack);
- }
+ model_p = mpModelMorf[0]->getModel();
- model->setUserArea((u32)this);
+ for (u16 i = 0; i < mdlData_p->getJointNum(); i++) {
+ mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack);
+ }
- if (!mInvisModel.create(mpMorf[0]->getModel(), 1)) {
- return 0;
- } else {
- bmd_offset = 0;
- arc_idx = l_bmdData[bmd_offset][1];
- res_idx = l_bmdData[bmd_offset][0];
- mdlData_p = (J3DModelData*) dComIfG_getObjectRes(l_resNameList[arc_idx], res_idx);
- JUT_ASSERT(0x51E, 0 != mdlData_p);
- big_bits = 0x11020284;
- mpMorf[1] = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mCreature, 0x80000, big_bits);
+ model_p->setUserArea((u32)this);
- if (mpMorf[1] != NULL && mpMorf[1]->getModel() == NULL) {
- mpMorf[1] = NULL;
- }
+ if (!mInvisModel.create(mpModelMorf[0]->getModel(), 1)) {
+ return 0;
+ }
- if (mpMorf[1] == NULL) {
- if (mpMorf[0] != NULL) {
- mpMorf[0]->stopZelAnime();
- }
- return 0;
- } else {
- model = mpMorf[1]->getModel();
+ bmd_offset = 0;
+ arc_idx = l_bmdData[bmd_offset][1];
+ res_idx = l_bmdData[bmd_offset][0];
+ mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNameList[arc_idx], res_idx);
+ JUT_ASSERT(1310, 0 != mdlData_p);
- for (u16 i = 0; i < mdlData_p->getJointNum(); i++) {
- mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack);
- }
+ sp2C = 0x11020284;
+ mpModelMorf[1] = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, sp2C);
- model->setUserArea((u32)this);
+ if (mpModelMorf[1] != NULL && mpModelMorf[1]->getModel() == NULL) {
+ mpModelMorf[1] = NULL;
+ }
- if (mType == 4) {
- J3DModelData* modelData = NULL;
- bmd_offset = 2;
- arc_idx = l_bmdData[bmd_offset][1];
- res_idx = l_bmdData[bmd_offset][0];
- modelData = (J3DModelData*) dComIfG_getObjectRes(l_resNameList[arc_idx], res_idx);
-
- if (modelData != NULL) {
- mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
- if (mpModel == NULL) {
- return 0;
- }
- } else {
- return 0;
- }
- }
+ if (mpModelMorf[1] == NULL) {
+ if (mpModelMorf[0] != NULL) {
+ mpModelMorf[0]->stopZelAnime();
+ }
+ return 0;
+ }
- if (setFaceMotionAnm(1, false)) {
- if (mType == 4) {
- J3DAnmTransform* anm_transform = NULL;
- anm_transform = (J3DAnmTransform*) getTrnsfrmKeyAnmP(l_resNameList[l_podBckData[1][1]],l_podBckData[1][0]);
+ model_p = mpModelMorf[1]->getModel();
- if (anm_transform != NULL && field_0x1588.init(anm_transform, 1, 2, 1.0f, 0, -1,false)) {
- field_0x15a4 |= 0x41;
- return 1;
- }
+ for (u16 i = 0; i < mdlData_p->getJointNum(); i++) {
+ mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack);
+ }
- if (anm_transform == NULL && l_podBckData[1][0] != -1) {
- return 0;
- }
- }
+ model_p->setUserArea((u32)this);
- if (setMotionAnm(0,0.0f,0)) {
- return 1;
- }
- }
+ if (mType == 4) {
+ J3DModelData* modelData = NULL;
+ bmd_offset = 2;
+ arc_idx = l_bmdData[bmd_offset][1];
+ res_idx = l_bmdData[bmd_offset][0];
+ modelData = (J3DModelData*)dComIfG_getObjectRes(l_resNameList[arc_idx], res_idx);
+
+ if (modelData != NULL) {
+ mpPodModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
+ if (mpPodModel == NULL) {
+ return 0;
+ }
+ } else {
+ return 0;
+ }
+ }
+
+ if (setFaceMotionAnm(1, false)) {
+ if (mType == 4) {
+ void* bck_p = NULL;
+ bck_p = getTrnsfrmKeyAnmP(l_resNameList[l_podBckData[1][1]], l_podBckData[1][0]);
+
+ if (bck_p != NULL &&
+ mPodBck.init((J3DAnmTransform*)bck_p, 1, 2, 1.0f, 0, -1, false))
+ {
+ mPodAnmFlags |= 0x41;
+ return 1;
+ }
+
+ if (bck_p == NULL && l_podBckData[1][0] != -1) {
+ return 0;
}
}
+
+ if (setMotionAnm(0, 0.0f, 0)) {
+ return 1;
+ }
}
return 0;
}
/* 80A2B620-80A2B654 000D00 0034+00 1/1 0/0 0/0 .text Delete__10daNpc_Kn_cFv */
-s32 daNpc_Kn_c::Delete() {
+int daNpc_Kn_c::Delete() {
+ OS_REPORT("|%06d:%x|daNpc_Kn_c -> Delete\n", g_Counter.mCounter0, this);
this->~daNpc_Kn_c();
return 1;
}
/* 80A2B654-80A2B6B0 000D34 005C+00 2/2 0/0 0/0 .text Execute__10daNpc_Kn_cFv */
-s32 daNpc_Kn_c::Execute() {
- s32 ret = execute();
+int daNpc_Kn_c::Execute() {
+ int rt = execute();
setPrtcl();
calcMagicBallPos();
setSwordChargePtcl();
setSe();
- return ret;
+ return rt;
}
/* 80A2B6B0-80A2B764 000D90 00B4+00 1/1 0/0 0/0 .text Draw__10daNpc_Kn_cFv */
-void daNpc_Kn_c::Draw() {
+int daNpc_Kn_c::Draw() {
if (mpMatAnm) {
- J3DModelData* modelData = mpMorf[0]->getModel()->getModelData();
+ J3DModelData* modelData = mpModelMorf[0]->getModel()->getModelData();
modelData->getMaterialNodePointer(getEyeballMaterialNo())->setMaterialAnm(mpMatAnm);
}
- _GXColorS10 local_28;
- local_28.r = 0;
- local_28.g = 0;
- local_28.b = 0;
- local_28.a = daNpc_Kn_Param_c::m.field_0x8c;
- // debug ROM has chkAction here.
- draw(0, 0, daNpc_Kn_Param_c::m.common.real_shadow_size, &local_28, 0.0f, 1, 0, 0);
+ GXColorS10 tevcolor;
+ tevcolor.r = 0;
+ tevcolor.g = 0;
+ tevcolor.b = 0;
+ tevcolor.a = daNpc_Kn_Param_c::m.alpha;
+ return draw(0, FALSE, daNpc_Kn_Param_c::m.common.real_shadow_size, &tevcolor, 0.0f, TRUE, FALSE, FALSE);
}
/* 80A2B764-80A2B784 000E44 0020+00 1/1 0/0 0/0 .text
* createHeapCallBack__10daNpc_Kn_cFP10fopAc_ac_c */
int daNpc_Kn_c::createHeapCallBack(fopAc_ac_c* i_this) {
- return static_cast<daNpc_Kn_c*>(i_this)->CreateHeap();
+ return ((daNpc_Kn_c*)i_this)->CreateHeap();
}
/* 80A2B784-80A2B7DC 000E64 0058+00 1/1 0/0 0/0 .text ctrlJointCallBack__10daNpc_Kn_cFP8J3DJointi
@@ -662,10 +644,10 @@ int daNpc_Kn_c::createHeapCallBack(fopAc_ac_c* i_this) {
int daNpc_Kn_c::ctrlJointCallBack(J3DJoint* i_joint, int param_1) {
if (param_1 == 0) {
J3DModel* model = j3dSys.getModel();
- daNpc_Kn_c* _this = reinterpret_cast<daNpc_Kn_c*>(model->getUserArea());
+ daNpc_Kn_c* a_this = (daNpc_Kn_c*)model->getUserArea();
- if (_this) {
- _this->ctrlJoint(i_joint, model);
+ if (a_this != NULL) {
+ a_this->ctrlJoint(i_joint, model);
}
}
@@ -702,7 +684,6 @@ u8 daNpc_Kn_c::getDivideNo() {
/* 80A2B850-80A2B86C 000F30 001C+00 1/1 0/0 0/0 .text getFlowNodeNo__10daNpc_Kn_cFv */
u32 daNpc_Kn_c::getFlowNodeNo() {
u16 node_no = home.angle.x;
-
if (node_no == 0xFFFF) {
return 0xFFFFFFFF;
}
@@ -718,29 +699,17 @@ u8 daNpc_Kn_c::getPath() {
/* 80A2B878-80A2B91C 000F58 00A4+00 1/1 0/0 0/0 .text isDelete__10daNpc_Kn_cFv */
BOOL daNpc_Kn_c::isDelete() {
static s16 l_appearFlag[7] = {
- 0xFFFF,
- 0x0153,
- 0x0152,
- 0x0154,
- 0x0155,
- 0x0156,
- 0x0157,
+ 0xFFFF, 0x0153, 0x0152, 0x0154, 0x0155, 0x0156, 0x0157,
};
static s16 l_delFlag[7] = {
- 0x0153,
- 0x0152,
- 0x0154,
- 0x0155,
- 0x0156,
- 0x0157,
- 0x0158,
+ 0x0153, 0x0152, 0x0154, 0x0155, 0x0156, 0x0157, 0x0158,
};
switch (mType) {
case 0:
- if (daNpcT_chkEvtBit(0x153) == FALSE) {
+ if (!daNpcT_chkEvtBit(0x153)) {
return 0;
- }
+ }
break;
case 1:
case 2:
@@ -748,7 +717,7 @@ BOOL daNpc_Kn_c::isDelete() {
case 4:
case 5:
case 6:
- if (daNpcT_chkEvtBit(l_appearFlag[mType*1]) && !daNpcT_chkEvtBit(l_delFlag[mType])) {
+ if (daNpcT_chkEvtBit(l_appearFlag[mType * 1]) && !daNpcT_chkEvtBit(l_delFlag[mType])) {
return 0;
}
}
@@ -758,7 +727,6 @@ BOOL daNpc_Kn_c::isDelete() {
/* 80A2B91C-80A2B9E0 000FFC 00C4+00 1/1 0/0 0/0 .text resetCol__10daNpc_Kn_cFv */
void daNpc_Kn_c::resetCol() {
-
mCylCc.Set(mCcDCyl);
mCylCc.SetStts(&mCcStts);
mCylCc.SetTgHitCallback(tgHitCallBack);
@@ -780,7 +748,7 @@ void daNpc_Kn_c::reset() {
initialize();
memset(&mpTeachAction, 0, (int)&field_0x1754 - (int)&mpTeachAction);
- if (mpMatAnm) {
+ if (mpMatAnm != NULL) {
mpMatAnm->initialize();
}
@@ -791,6 +759,7 @@ void daNpc_Kn_c::reset() {
mStaffId = -1;
setAngle(home.angle.y);
+
field_0x15bd = 0;
field_0x15be = 0;
field_0x15cc = 0;
@@ -808,7 +777,7 @@ void daNpc_Kn_c::reset() {
}
field_0x170c = 0;
- field_0x16f4.set(1.0f,1.0f,1.0f);
+ field_0x16f4.set(1.0f, 1.0f, 1.0f);
field_0x170d = 1;
field_0x170e = 0;
@@ -816,7 +785,9 @@ void daNpc_Kn_c::reset() {
if (mType <= 6 && (mDivideNo == 0 || mDivideNo > 2)) {
field_0xe2c = 1;
- parentActorID = fopAcM_createChild(PROC_NPC_GWOLF, fopAcM_GetID(this), 0xffffff02, &current.pos, fopAcM_GetRoomNo(this), &current.angle, 0, -1, 0);
+ parentActorID =
+ fopAcM_createChild(PROC_NPC_GWOLF, fopAcM_GetID(this), 0xFFFFFF02, &current.pos,
+ fopAcM_GetRoomNo(this), &current.angle, 0, -1, 0);
}
resetType();
@@ -842,20 +813,20 @@ void daNpc_Kn_c::resetType() {
return;
case 5:
if (mDivideNo != 0 && mDivideNo <= 2) {
- mActionMode = 0xe;
+ mActionMode = 14;
field_0x15af = 0;
} else {
- mActionMode = 0x4;
+ mActionMode = 4;
}
break;
case 6:
if (mDivideNo != 0 && mDivideNo <= 2) {
- mActionMode = 0x14;
+ mActionMode = 20;
field_0x15af = 0;
- return;
+ } else {
+ mActionMode = 4;
}
- mActionMode = 4;
- return;
+ break;
default:
mActionMode = -1;
}
@@ -866,10 +837,10 @@ void daNpc_Kn_c::setParam() {
selectAction();
srchActors();
- s16 field48 = daNpc_Kn_Param_c::m.common.talk_distance;
- s16 field4a = daNpc_Kn_Param_c::m.common.talk_angle;
- s16 field4c = daNpc_Kn_Param_c::m.common.attention_distance;
- s16 field4e = daNpc_Kn_Param_c::m.common.attention_angle;
+ s16 talk_distance = daNpc_Kn_Param_c::m.common.talk_distance;
+ s16 talk_angle = daNpc_Kn_Param_c::m.common.talk_angle;
+ s16 attention_distance = daNpc_Kn_Param_c::m.common.attention_distance;
+ s16 attention_angle = daNpc_Kn_Param_c::m.common.attention_angle;
f32 radius = daNpc_Kn_Param_c::m.common.attention_offset;
f32 height = daNpc_Kn_Param_c::m.common.attention_offset;
@@ -916,11 +887,12 @@ void daNpc_Kn_c::setParam() {
attention_info.flags = setParamTeach07();
break;
default:
- attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e);
- attention_info.distances[2] = daNpcT_getDistTableIdx(field4c, field4e);
- attention_info.distances[1] = attention_info.distances[0];
- attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a);
+ attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle);
+ attention_info.distances[fopAc_attn_BATTLE_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle);
+ attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
+ attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle);
attention_info.flags = 10;
+
mAcchCir.SetWallR(daNpc_Kn_Param_c::m.common.width);
mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length);
}
@@ -928,24 +900,27 @@ void daNpc_Kn_c::setParam() {
scale.set(daNpc_Kn_Param_c::m.common.scale * field_0x16f4.x,
daNpc_Kn_Param_c::m.common.scale * field_0x16f4.y,
daNpc_Kn_Param_c::m.common.scale * field_0x16f4.z);
+
mCcStts.SetWeight(daNpc_Kn_Param_c::m.common.weight);
field_0xe0c = daNpc_Kn_Param_c::m.common.height;
mRadius = daNpc_Kn_Param_c::m.common.width;
gravity = daNpc_Kn_Param_c::m.common.gravity;
- field_0xab4 = daNpc_Kn_Param_c::m.common.expression_morf_frame;
- field_0xab8 = daNpc_Kn_Param_c::m.common.morf_frame;
+ mExpressionMorfFrame = daNpc_Kn_Param_c::m.common.expression_morf_frame;
+ mMorfFrames = daNpc_Kn_Param_c::m.common.morf_frame;
};
/* 80A2BFB0-80A2C044 001690 0094+00 1/1 0/0 0/0 .text setParamTeach03__10daNpc_Kn_cFv */
u32 daNpc_Kn_c::setParamTeach03() {
- s16 field48 = daNpc_Kn_Param_c::m.common.talk_distance;
- s16 field4a = daNpc_Kn_Param_c::m.common.talk_angle;
- s16 field4c = daNpc_Kn_Param_c::m.common.attention_distance;
- s16 field4e = daNpc_Kn_Param_c::m.common.attention_angle;
- attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e);
- attention_info.distances[2] = 0xe4;
- attention_info.distances[1] = attention_info.distances[0];
- attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a);
+ s16 talk_distance = daNpc_Kn_Param_c::m.common.talk_distance;
+ s16 talk_angle = daNpc_Kn_Param_c::m.common.talk_angle;
+ s16 attention_distance = daNpc_Kn_Param_c::m.common.attention_distance;
+ s16 attention_angle = daNpc_Kn_Param_c::m.common.attention_angle;
+
+ attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle);
+ attention_info.distances[fopAc_attn_BATTLE_e] = 228;
+ attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
+ attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle);
+
mAcchCir.SetWallR(135.0f);
mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length);
return 4;
@@ -953,14 +928,16 @@ u32 daNpc_Kn_c::setParamTeach03() {
/* 80A2C044-80A2C0FC 001724 00B8+00 1/1 0/0 0/0 .text setParamTeach04__10daNpc_Kn_cFv */
u32 daNpc_Kn_c::setParamTeach04() {
- s16 field48 = daNpc_Kn_Param_c::m.common.talk_distance;
- s16 field4a = daNpc_Kn_Param_c::m.common.talk_angle;
- s16 field4c = daNpc_Kn_Param_c::m.common.attention_distance;
- s16 field4e = daNpc_Kn_Param_c::m.common.attention_angle;
- attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e);
- attention_info.distances[2] = 0xe4;
- attention_info.distances[1] = attention_info.distances[0];
- attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a);
+ s16 talk_distance = daNpc_Kn_Param_c::m.common.talk_distance;
+ s16 talk_angle = daNpc_Kn_Param_c::m.common.talk_angle;
+ s16 attention_distance = daNpc_Kn_Param_c::m.common.attention_distance;
+ s16 attention_angle = daNpc_Kn_Param_c::m.common.attention_angle;
+
+ attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle);
+ attention_info.distances[fopAc_attn_BATTLE_e] = 228;
+ attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
+ attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle);
+
if (mActionMode == 10 || mActionMode == 11) {
mAcchCir.SetWallR(135.0f);
mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length);
@@ -972,14 +949,16 @@ u32 daNpc_Kn_c::setParamTeach04() {
/* 80A2C0FC-80A2C190 0017DC 0094+00 3/3 0/0 0/0 .text setParamTeach05__10daNpc_Kn_cFv */
u32 daNpc_Kn_c::setParamTeach05() {
- s16 field48 = daNpc_Kn_Param_c::m.common.talk_distance;
- s16 field4a = daNpc_Kn_Param_c::m.common.talk_angle;
- s16 field4c = daNpc_Kn_Param_c::m.common.attention_distance;
- s16 field4e = daNpc_Kn_Param_c::m.common.attention_angle;
- attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e);
- attention_info.distances[2] = 0xe4;
- attention_info.distances[1] = attention_info.distances[0];
- attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a);
+ s16 talk_distance = daNpc_Kn_Param_c::m.common.talk_distance;
+ s16 talk_angle = daNpc_Kn_Param_c::m.common.talk_angle;
+ s16 attention_distance = daNpc_Kn_Param_c::m.common.attention_distance;
+ s16 attention_angle = daNpc_Kn_Param_c::m.common.attention_angle;
+
+ attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle);
+ attention_info.distances[fopAc_attn_BATTLE_e] = 228;
+ attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
+ attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle);
+
mAcchCir.SetWallR(135.0f);
mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length);
return 4;
@@ -998,8 +977,8 @@ u32 daNpc_Kn_c::setParamTeach07() {
/* 80A2C1D0-80A2C230 0018B0 0060+00 1/1 0/0 0/0 .text setAfterTalkMotion__10daNpc_Kn_cFv
*/
void daNpc_Kn_c::setAfterTalkMotion() {
- mMotionSeqMngr1.getNo();
- mMotionSeqMngr1.setNo(1, -1.0, 0, 0);
+ mFaceMotionSeqMngr.getNo();
+ mFaceMotionSeqMngr.setNo(1, -1.0, 0, 0);
}
/* 80A2C230-80A2C234 001910 0004+00 1/1 0/0 0/0 .text srchActors__10daNpc_Kn_cFv */
@@ -1008,9 +987,9 @@ void daNpc_Kn_c::srchActors() {}
/* 80A2C234-80A2C318 001914 00E4+00 1/1 0/0 0/0 .text evtTalk__10daNpc_Kn_cFv */
bool daNpc_Kn_c::evtTalk() {
if (chkAction(&daNpc_Kn_c::talk)) {
- (this->*mpActionFunc)(0);
+ (this->*mpActionFunc)(NULL);
} else {
- if (dComIfGp_event_chkTalkXY() == 0 || dComIfGp_evmng_ChkPresentEnd()) {
+ if (dComIfGp_event_chkTalkXY() == FALSE || dComIfGp_evmng_ChkPresentEnd()) {
setAction(&daNpc_Kn_c::talk);
}
}
@@ -1019,33 +998,32 @@ bool daNpc_Kn_c::evtTalk() {
}
/* 80A2C318-80A2C3FC 0019F8 00E4+00 1/1 0/0 0/0 .text evtCutProc__10daNpc_Kn_cFv */
-bool daNpc_Kn_c::evtCutProc() {
- bool ret;
+BOOL daNpc_Kn_c::evtCutProc() {
if (mDivideNo != 0 && mDivideNo <= 2) {
return false;
- } else {
- ret = false;
- int staff_id = dComIfGp_getEventManager().getMyStaffId("Kn", this, -1);
- if (staff_id != -1) {
- mStaffId = staff_id;
- int act_idx = dComIfGp_getEventManager().getMyActIdx(mStaffId, &mCutNameList[0], 21, 0, 0);
- if ((this->*mCutList[act_idx])(mStaffId)) {
- dComIfGp_getEventManager().cutEnd(mStaffId);
- }
+ }
+
+ BOOL rt = false;
+ int staff_id = dComIfGp_getEventManager().getMyStaffId("Kn", this, -1);
+ if (staff_id != -1) {
+ mStaffId = staff_id;
+ int act_idx = dComIfGp_getEventManager().getMyActIdx(mStaffId, &mCutNameList[0], 21, 0, 0);
- ret = true;
+ if ((this->*mCutList[act_idx])(mStaffId)) {
+ dComIfGp_getEventManager().cutEnd(mStaffId);
}
+
+ rt = true;
}
- return ret;
+ return rt;
}
/* 80A2C3FC-80A2C484 001ADC 0088+00 1/1 0/0 0/0 .text action__10daNpc_Kn_cFv */
void daNpc_Kn_c::action() {
- if (mpTeachAction) {
+ if (mpTeachAction != NULL) {
if (mpActionFunc == mpTeachAction) {
- (this->*mpActionFunc)(0);
-
+ (this->*mpActionFunc)(NULL);
} else {
setAction(mpTeachAction);
}
@@ -1054,14 +1032,14 @@ void daNpc_Kn_c::action() {
/* 80A2C484-80A2C4FC 001B64 0078+00 1/1 0/0 0/0 .text beforeMove__10daNpc_Kn_cFv */
void daNpc_Kn_c::beforeMove() {
- if (checkHide() || field_0xe32 != 0) {
+ if (checkHide() || mNoDraw) {
attention_info.flags = 0;
}
}
/* 80A2C4FC-80A2C56C 001BDC 0070+00 1/1 0/0 0/0 .text afterMoved__10daNpc_Kn_cFv */
void daNpc_Kn_c::afterMoved() {
- if (mGroundHeight != -1e9f) {
+ if (mGroundHeight != -1000000000.0f) {
mTevStr.YukaCol = dComIfG_Bgsp().GetPolyColor(mGndChk);
mTevStr.room_no = dComIfG_Bgsp().GetRoomId(mGndChk);
}
@@ -1070,35 +1048,42 @@ void daNpc_Kn_c::afterMoved() {
/* 80A2C56C-80A2C77C 001C4C 0210+00 1/1 0/0 0/0 .text setAttnPos__10daNpc_Kn_cFv */
void daNpc_Kn_c::setAttnPos() {
cXyz pos(30.0f, 0.0f, 0.0f);
+
int head_joint_no = getHeadJointNo();
int neck_joint_no = getNeckJointNo();
int backbone_joint_no = getBackboneJointNo();
- J3DModel* model = mpMorf[0]->getModel();
+ J3DModel* model = mpModelMorf[0]->getModel();
- mJntAnm.setParam(this, model, &pos, backbone_joint_no, neck_joint_no, head_joint_no,
- daNpc_Kn_Param_c::m.common.body_angleX_min, daNpc_Kn_Param_c::m.common.body_angleX_max,
- daNpc_Kn_Param_c::m.common.body_angleY_min, daNpc_Kn_Param_c::m.common.body_angleY_max,
+ mJntAnm.setParam(
+ this, model, &pos, backbone_joint_no, neck_joint_no, head_joint_no,
+ daNpc_Kn_Param_c::m.common.body_angleX_min, daNpc_Kn_Param_c::m.common.body_angleX_max,
+ daNpc_Kn_Param_c::m.common.body_angleY_min, daNpc_Kn_Param_c::m.common.body_angleY_max,
daNpc_Kn_Param_c::m.common.head_angleX_min, daNpc_Kn_Param_c::m.common.head_angleX_max,
daNpc_Kn_Param_c::m.common.head_angleY_min, daNpc_Kn_Param_c::m.common.head_angleY_max,
daNpc_Kn_Param_c::m.common.neck_rotation_ratio, 0.0f, 0);
- f32 rad_val = cM_s2rad(mTargetAngle.y - field_0xDB2.y);
+ f32 rad_val = cM_s2rad(mCurAngle.y - field_0xDB2.y);
mJntAnm.calcJntRad(0.2f, 1.0f, rad_val);
+
setMtx();
- model = mpMorf[1]->getModel();
+
+ model = mpModelMorf[1]->getModel();
J3DModelData* modelData = model->getModelData();
- (void) modelData;
+ (void)modelData;
+
mDoMtx_stack_c::transS(current.pos);
- mDoMtx_stack_c::ZXYrotM(mTargetAngle);
+ mDoMtx_stack_c::ZXYrotM(mCurAngle);
mDoMtx_stack_c::scaleM(scale);
model->setBaseTRMtx(mDoMtx_stack_c::get());
model->setUserArea((u32)this);
- mpMorf[1]->modelCalc();
- mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo()));
+ mpModelMorf[1]->modelCalc();
+
+ mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(getHeadJointNo()));
mDoMtx_stack_c::multVec(&pos, &eyePos);
mJntAnm.setEyeAngleX(eyePos, 1.0f, 0);
- mJntAnm.setEyeAngleY(eyePos, mTargetAngle.y, 1, 1.0f, 0);
- mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo()));
+ mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 1, 1.0f, 0);
+
+ mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(getHeadJointNo()));
mDoMtx_stack_c::multVecZero(&attention_info.position);
attention_info.position.y += daNpc_Kn_Param_c::m.common.attention_offset;
}
@@ -1109,8 +1094,7 @@ void daNpc_Kn_c::setCollision() {
if (field_0xe2c == 0 && field_0x15af != 0) {
u32 param;
-
- if (field_0xABD == 1) {
+ if (mTwilight == TRUE) {
param = 0x69;
} else {
param = 0x79;
@@ -1157,9 +1141,10 @@ void daNpc_Kn_c::setCollision() {
setCollisionTeach07();
}
- mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getBackboneJointNo()));
+ mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(getBackboneJointNo()));
mDoMtx_stack_c::multVecZero(&centerPos);
centerPos.y = current.pos.y;
+
f32 radius = daNpc_Kn_Param_c::m.common.width;
mCylCc.SetH(daNpc_Kn_Param_c::m.common.height);
mCylCc.SetR(radius);
@@ -1172,30 +1157,32 @@ void daNpc_Kn_c::setCollision() {
setCollisionSword();
}
-/* 80A2C984-80A2CB30 002064 01AC+00 1/1 0/0 0/0 .text setCollisionSword__10daNpc_Kn_cFv */
+/* 80A2C984-80A2CB30 002064 01AC+00 1/1 0/0 0/0 .text setCollisionSword__10daNpc_Kn_cFv
+ */
void daNpc_Kn_c::setCollisionSword() {
- static f32 l_swordOffset[2] = {
- 60.0f,
- 120.0f
- };
+ static f32 l_swordOffset[2] = {60.0f, 120.0f};
- if (mMotionSeqMngr2.getNo() == 0x19 && mMotionSeqMngr2.getStepNo() == 0 && mMotionSeqMngr2.checkEntryNewMotion() == 0) {
+ if (mMotionSeqMngr.getNo() == 0x19 && mMotionSeqMngr.getStepNo() == 0 &&
+ mMotionSeqMngr.checkEntryNewMotion() == 0)
+ {
field_0x15ce = 1;
} else {
field_0x15ce = 0;
}
- for (s32 i = 0; i < 2; i++) {
+ for (int i = 0; i < 2; i++) {
if (field_0xe2c == 0) {
- if (field_0x15ce && mpMorf[0]->getFrame() >= 30.0f && mpMorf[0]->getFrame() <= 40.0f) {
- cXyz pos(l_swordOffset[i], 0.0f, 0.0f);
- mSphCc[i].OnAtSetBit();
- mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(0xd));
- mDoMtx_stack_c::scaleM(scale);
- mDoMtx_stack_c::multVec(&pos,&pos);
- mSphCc[i].SetC(pos);
- mSphCc[i].SetR(30.0f);
- dComIfG_Ccsp()->Set(&mSphCc[i]);
+ if (field_0x15ce && mpModelMorf[0]->getFrame() >= 30.0f && mpModelMorf[0]->getFrame() <= 40.0f) {
+ cXyz pos(l_swordOffset[i], 0.0f, 0.0f);
+ mSphCc[i].OnAtSetBit();
+
+ mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(13));
+ mDoMtx_stack_c::scaleM(scale);
+ mDoMtx_stack_c::multVec(&pos, &pos);
+
+ mSphCc[i].SetC(pos);
+ mSphCc[i].SetR(30.0f);
+ dComIfG_Ccsp()->Set(&mSphCc[i]);
} else {
mSphCc[i].OffAtSetBit();
}
@@ -1208,38 +1195,34 @@ void daNpc_Kn_c::setCollisionSword() {
/* 80A2CB30-80A2CBEC 002210 00BC+00 9/9 0/0 0/0 .text checkCollisionSword__10daNpc_Kn_cFv
*/
BOOL daNpc_Kn_c::checkCollisionSword() {
- int iVar2 = false; // Status variable
-
- // Main collision check loop
- for (int iVar3 = 0; iVar3 < 2; iVar3++) {
- // Check shield hit
-
- if (mSphCc[iVar3].ChkAtShieldHit()) {
- iVar2 = 1;
+ int hit_type = false;
+
+ for (int i = 0; i < 2; i++) {
+ if (mSphCc[i].ChkAtShieldHit()) {
+ hit_type = 1;
break;
}
-
- // Check regular hit
- if (mSphCc[iVar3].ChkAtHit()) {
- iVar2 = 2;
+
+ if (mSphCc[i].ChkAtHit()) {
+ hit_type = 2;
}
}
-
+
// If shield was hit, clear hit
- if (iVar2 == 1) {
- for (int iVar3 = 0; iVar3 < 2; iVar3++) {
- mSphCc[iVar3].ClrAtHit();
+ if (hit_type == 1) {
+ for (int i = 0; i < 2; i++) {
+ mSphCc[i].ClrAtHit();
}
}
-
- return iVar2 == 2;
+
+ return hit_type == 2;
}
/* 80A2CBEC-80A2CC24 0022CC 0038+00 1/1 0/0 0/0 .text setCollisionTeach03__10daNpc_Kn_cFv
*/
void daNpc_Kn_c::setCollisionTeach03() {
- mCylCc.SetTgType(-1);
- mCylCc.SetTgSPrm(19);
+ mCylCc.SetTgType(0xFFFFFFFF);
+ mCylCc.SetTgSPrm(0x13);
mCylCc.OffTgNoAtHitInfSet();
mCylCc.OnTgNoConHit();
mCylCc.OnCoSetBit();
@@ -1254,9 +1237,9 @@ void daNpc_Kn_c::setCollisionTeach04() {
mCylCc.OffTgSetBit();
mCylCc.OffCoSetBit();
} else {
- mCylCc.SetTgType(-1);
+ mCylCc.SetTgType(0xFFFFFFFF);
mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2);
- mCylCc.SetTgSPrm(19);
+ mCylCc.SetTgSPrm(0x13);
mCylCc.OnTgShield();
mCylCc.OffTgNoAtHitInfSet();
mCylCc.OnTgNoConHit();
@@ -1264,20 +1247,20 @@ void daNpc_Kn_c::setCollisionTeach04() {
break;
case 11:
case 10:
- mCylCc.SetTgType(-1);
- mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1);
- mCylCc.SetTgSPrm(19);
- mCylCc.OffTgShield();
- mCylCc.OffTgNoAtHitInfSet();
- mCylCc.OnTgNoConHit();
+ mCylCc.SetTgType(0xFFFFFFFF);
+ mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1);
+ mCylCc.SetTgSPrm(0x13);
+ mCylCc.OffTgShield();
+ mCylCc.OffTgNoAtHitInfSet();
+ mCylCc.OnTgNoConHit();
}
}
/* 80A2CD00-80A2CD38 0023E0 0038+00 3/3 0/0 0/0 .text setCollisionTeach05__10daNpc_Kn_cFv
*/
void daNpc_Kn_c::setCollisionTeach05() {
- mCylCc.SetTgType(-1);
- mCylCc.SetTgSPrm(19);
+ mCylCc.SetTgType(0xFFFFFFFF);
+ mCylCc.SetTgSPrm(0x13);
mCylCc.OffTgNoAtHitInfSet();
mCylCc.OnTgNoConHit();
mCylCc.OnCoSetBit();
@@ -1302,53 +1285,54 @@ int daNpc_Kn_c::drawDbgInfo() {
/* 80A2CD80-80A2CF9C 002460 021C+00 1/1 0/0 0/0 .text drawOtherMdl__10daNpc_Kn_cFv */
void daNpc_Kn_c::drawOtherMdl() {
- J3DModel* model = mpMorf[1]->getModel();
+ J3DModel* model = mpModelMorf[1]->getModel();
mTevStr.TevColor.r = 0;
mTevStr.TevColor.g = 0;
mTevStr.TevColor.b = 0;
mTevStr.TevColor.a = 0;
- if (field_0xde0 && mTimer) {
- f32 fval = (f32)mTimer / (f32)field_0xde0;
-
- if (cM3d_IsZero(fval) == 0) {
- mTevStr.TevColor.r = fval * 20.0f;
+ if (mTimerStart != 0 && mTimer != 0) {
+ f32 col_strength = (f32)mTimer / (f32)mTimerStart;
+ if (cM3d_IsZero(col_strength) == false) {
+ mTevStr.TevColor.r = col_strength * 20.0f;
}
}
g_env_light.settingTevStruct(0, &current.pos, &mTevStr);
g_env_light.setLightTevColorType_MAJI(model->getModelData(), &mTevStr);
- mpMorf[1]->entryDL();
+ mpModelMorf[1]->entryDL();
mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model, &current.pos,
- daNpc_Kn_Param_c::m.common.real_shadow_size, 20.0f, current.pos.y, mGroundHeight,
- mGndChk, &mTevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
+ daNpc_Kn_Param_c::m.common.real_shadow_size, 20.0f,
+ current.pos.y, mGroundHeight, mGndChk, &mTevStr, 0, 1.0f,
+ dDlst_shadowControl_c::getSimpleTex());
- if (field_0x15cd && mpModel) {
- mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(22));
+ if (field_0x15cd && mpPodModel != NULL) {
+ mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(22));
mDoMtx_stack_c::scaleM(scale);
- mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
- g_env_light.setLightTevColorType_MAJI(mpModel, &mTevStr);
- J3DModelData* modelData2 = mpModel->getModelData();
+ mpPodModel->setBaseTRMtx(mDoMtx_stack_c::get());
+
+ g_env_light.setLightTevColorType_MAJI(mpPodModel, &mTevStr);
+ J3DModelData* mdlData_p = mpPodModel->getModelData();
- if (field_0x15a4 & 0x40) {
- field_0x1588.entry(modelData2);
+ if (mPodAnmFlags & 0x40) {
+ mPodBck.entry(mdlData_p);
}
- mDoExt_modelUpdateDL(mpModel);
+ mDoExt_modelUpdateDL(mpPodModel);
- if (field_0x15a4 & 0x40) {
- field_0x1588.remove(modelData2);
+ if (mPodAnmFlags & 0x40) {
+ mPodBck.remove(mdlData_p);
}
- dComIfGd_addRealShadow(mShadowKey,mpModel);
+ dComIfGd_addRealShadow(mShadowKey, mpPodModel);
}
}
/* 80A2CF9C-80A2D060 00267C 00C4+00 1/1 0/0 0/0 .text drawGhost__10daNpc_Kn_cFv */
void daNpc_Kn_c::drawGhost() {
- J3DModel* model = mpMorf[0]->getModel();
+ J3DModel* model = mpModelMorf[0]->getModel();
g_env_light.settingTevStruct(7, &current.pos, &tevStr);
g_env_light.setLightTevColorType_MAJI(model, &tevStr);
@@ -1362,9 +1346,9 @@ void daNpc_Kn_c::drawGhost() {
}
/* 80A2D060-80A2D198 002740 0138+00 1/0 0/0 0/0 .text afterSetMotionAnm__10daNpc_Kn_cFiifi */
-bool daNpc_Kn_c::afterSetMotionAnm(int param_0, int param_1, f32 param_2, int param_3) {
- field_0x15a4 &= 0xfffffc30;
- J3DAnmTransform* anm_tranform = NULL;
+bool daNpc_Kn_c::afterSetMotionAnm(int param_0, int i_mode, f32 param_2, int param_3) {
+ mPodAnmFlags &= 0xFFFFFC30;
+ J3DAnmTransform* bck_p = NULL;
int i = 0;
switch (param_0) {
@@ -1383,19 +1367,19 @@ bool daNpc_Kn_c::afterSetMotionAnm(int param_0, int param_1, f32 param_2, int pa
}
if (l_podBckData[i][0] != -1) {
- anm_tranform = static_cast<J3DAnmTransform*>(getTrnsfrmKeyAnmP(l_resNameList[l_podBckData[i][1]], l_podBckData[i][0]));
+ bck_p = (J3DAnmTransform*)getTrnsfrmKeyAnmP(l_resNameList[l_podBckData[i][1]], l_podBckData[i][0]);
}
- if (anm_tranform && field_0x1588.init(anm_tranform, 1, param_1, 1.0f, 0, -1, true)) {
- field_0x15a4 |= 0x41;
+ if (bck_p && mPodBck.init(bck_p, 1, i_mode, 1.0f, 0, -1, true)) {
+ mPodAnmFlags |= 0x41;
return true;
- } else {
- if (anm_tranform == NULL && l_podBckData[i][0] != -1) {
- return false;
- } else {
- return true;
- }
}
+
+ if (bck_p == NULL && l_podBckData[i][0] != -1) {
+ return false;
+ }
+
+ return true;
}
/* 80A2D198-80A2D3A4 002878 020C+00 2/1 0/0 0/0 .text selectAction__10daNpc_Kn_cFv */
@@ -1469,7 +1453,7 @@ int daNpc_Kn_c::selectAction() {
/* 80A2D3A4-80A2D3FC 002A84 0058+00 1/1 0/0 0/0 .text teach03_selectAction__10daNpc_Kn_cFv */
void daNpc_Kn_c::teach03_selectAction() {
- switch(mActionMode) {
+ switch (mActionMode) {
case 8:
mpTeachAction = &daNpc_Kn_c::teach03_attackWait;
return;
@@ -1487,7 +1471,7 @@ void daNpc_Kn_c::teach04_selectAction() {
case 10:
mpTeachAction = &daNpc_Kn_c::teach04_attackWait;
return;
- case 11:
+ case 11:
mpTeachAction = &daNpc_Kn_c::teach04_finishWait;
return;
}
@@ -1567,16 +1551,16 @@ BOOL daNpc_Kn_c::chkAction(daNpc_Kn_c::actionFunc i_action) {
/* 80A2D734-80A2D7DC 002E14 00A8+00 2/2 0/0 0/0 .text
* setAction__10daNpc_Kn_cFM10daNpc_Kn_cFPCvPvPv_i */
BOOL daNpc_Kn_c::setAction(daNpc_Kn_c::actionFunc i_action) {
- field_0xe2a = 3;
+ mMode = 3;
if (mpActionFunc) {
- (this->*mpActionFunc)(0);
+ (this->*mpActionFunc)(NULL);
}
- field_0xe2a = 0;
+ mMode = 0;
mpActionFunc = i_action;
if (mpActionFunc) {
- (this->*mpActionFunc)(0);
+ (this->*mpActionFunc)(NULL);
}
return TRUE;
@@ -1584,23 +1568,23 @@ BOOL daNpc_Kn_c::setAction(daNpc_Kn_c::actionFunc i_action) {
/* 80A2D7DC-80A2D9C4 002EBC 01E8+00 8/0 0/0 0/0 .text wait__10daNpc_Kn_cFPv */
int daNpc_Kn_c::wait(void* param_0) {
- switch(field_0xe2a) {
+ switch (mMode) {
case 0:
case 1:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,0,0);
- field_0xe2a = 2;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ mMode = 2;
case 2:
- if (field_0xABD == 0 && srchPlayerActor()) {
+ if (mTwilight == 0 && srchPlayerActor()) {
mJntAnm.lookPlayer(0);
} else {
- if (home.angle.y != mTargetAngle.y && step(home.angle.y, 1, 0x20, 0x14, 0) != 0) {
- field_0xe2a = 1;
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,0,0);
+ if (home.angle.y != mCurAngle.y && step(home.angle.y, 1, 0x20, 20, 0)) {
+ mMode = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
}
mJntAnm.lookNone(0);
- };
+ }
case 3:
default:
return 1;
@@ -1609,148 +1593,156 @@ int daNpc_Kn_c::wait(void* param_0) {
/* 80A2D9C4-80A2DB94 0030A4 01D0+00 2/0 0/0 0/0 .text talk__10daNpc_Kn_cFPv */
int daNpc_Kn_c::talk(void* param_0) {
- int bVar = 0;
+ int rt = 0;
+ BOOL var_r30 = FALSE;
- switch(field_0xe2a) {
+ switch (mMode) {
case 0:
case 1:
initTalk(mFlowNodeNo, 0);
- field_0xe2a = 2;
+ mMode = 2;
case 2:
- if (field_0xABD == 0) {
+ if (!mTwilight) {
mJntAnm.lookPlayer(0);
- if (mTargetAngle.y == fopAcM_searchPlayerAngleY(this)) {
- bVar = 1;
+ if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) {
+ var_r30 = 1;
} else {
- if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 0x14, 0) != 0) {
- bVar = true;
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,0,0);
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ var_r30 = true;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
}
}
} else {
- bVar = 1;
+ var_r30 = 1;
}
- if (bVar != 0 && talkProc(0,0,NULL,0)) {
+ if (var_r30 && talkProc(0, 0, NULL, 0)) {
mActorMngr1.entry(daPy_getPlayerActorClass());
dComIfGp_event_reset();
- field_0xe2a = 3;
- };
-
+ mMode = 3;
+ }
+ break;
case 3:
default:
- return 0;
+ break;
}
+
+ return rt;
}
/* 80A2DB94-80A2DCB4 003274 0120+00 1/0 0/0 0/0 .text test__10daNpc_Kn_cFPv */
int daNpc_Kn_c::test(void* param_0) {
- switch(field_0xe2a) {
+ int rt = 0;
+
+ switch (mMode) {
case 0:
case 1:
speedF = 0.0f;
speed.setall(0.0f);
- field_0xe2a = 2;
+ mMode = 2;
case 2:
- mMotionSeqMngr1.setNo(daNpc_Kn_Param_c::m.common.face_expression,-1.0f,0,0);
- mMotionSeqMngr2.setNo(daNpc_Kn_Param_c::m.common.motion,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(daNpc_Kn_Param_c::m.common.face_expression, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(daNpc_Kn_Param_c::m.common.motion, -1.0f, 0, 0);
mJntAnm.lookNone(0);
attention_info.flags = 0;
+ break;
case 3:
default:
- return 0;
+ break;
}
+
+ return rt;
}
/* 80A2DCB4-80A2DD70 003394 00BC+00 7/7 0/0 0/0 .text setSceneChange__10daNpc_Kn_cFi */
void daNpc_Kn_c::setSceneChange(int param_0) {
for (int i = 2; i <= 7; i++) {
- if (daNpcT_chkTmpBit(i + 0x5a)) {
- dStage_changeScene(i,0.0,0,fopAcM_GetRoomNo(this),0,-1);
+ if (daNpcT_chkTmpBit(i + 90)) {
+ dStage_changeScene(i, 0.0, 0, fopAcM_GetRoomNo(this), 0, -1);
- if (param_0 == 0) return;
+ if (param_0 == 0)
+ return;
- daNpcT_offTmpBit(i + 0x5a);
- daNpcT_onEvtBit(i + 0x1ea);
+ daNpcT_offTmpBit(i + 90);
+ daNpcT_onEvtBit(i + 490);
return;
}
}
- dStage_changeScene(1,0.0,0,fopAcM_GetRoomNo(this),0,-1);
+ dStage_changeScene(1, 0.0, 0, fopAcM_GetRoomNo(this), 0, -1);
}
/* 80A2DD70-80A2DF84 003450 0214+00 1/0 0/0 0/0 .text ECut_noneEquipChangeTalk__10daNpc_Kn_cFi */
int daNpc_Kn_c::ECut_noneEquipChangeTalk(int i_idx) {
- dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
- int ret = 0;
- int intP = -1;
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int rt = 0;
+ int prm = -1;
- int* intP2 = dComIfGp_evmng_getMyIntegerP(i_idx,"prm");
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
- if (intP2) {
- intP = *intP2;
+ if (prm_p != NULL) {
+ prm = *prm_p;
}
if (event_manager->getIsAddvance(i_idx)) {
- switch (intP) {
+ switch (prm) {
case 0:
mJntAnm.lookPlayer(0);
speed.zero();
speedF = 0.0f;
break;
case 10:
- field_0xdfe = 2;
- initTalk(mFlowNodeNo,NULL);
+ mStepMode = 2;
+ initTalk(mFlowNodeNo, NULL);
break;
}
}
- switch (intP) {
+ switch (prm) {
case 0:
- if (mTargetAngle.y != fopAcM_searchPlayerAngleY(this)) {
- if (step(fopAcM_searchPlayerAngleY(this),1,0x20,0x14,0) != 0) {
- ret = 1;
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,0,0);
+ if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ rt = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
}
} else {
- ret = 1;
+ rt = 1;
}
break;
case 10:
- intP = talkProc(NULL,0,NULL,0);
- if (intP != 0) {
- ret = 1;
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
}
break;
default:
- ret = 1;
+ rt = 1;
}
- return ret;
+ return rt;
}
/* 80A2DF84-80A2E26C 003664 02E8+00 1/0 0/0 0/0 .text
* ECut_noneEquipChangeTalkStand__10daNpc_Kn_cFi */
int daNpc_Kn_c::ECut_noneEquipChangeTalkStand(int i_idx) {
- dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
- int ret = 0;
- int intP = -1;
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int rt = 0;
+ int prm = -1;
- int* intP2 = dComIfGp_evmng_getMyIntegerP(i_idx,"prm");
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
- if (intP2) {
- intP = *intP2;
+ if (prm_p != NULL) {
+ prm = *prm_p;
}
if (event_manager->getIsAddvance(i_idx)) {
- switch (intP) {
+ switch (prm) {
case 0:
mJntAnm.lookNone(0);
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(22,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(22, -1.0f, 0, 0);
speed.zero();
speedF = 0.0f;
break;
@@ -1758,61 +1750,59 @@ int daNpc_Kn_c::ECut_noneEquipChangeTalkStand(int i_idx) {
mJntAnm.lookPlayer(0);
break;
case 20:
- field_0xdfe = 2;
- initTalk(mFlowNodeNo,NULL);
+ mStepMode = 2;
+ initTalk(mFlowNodeNo, NULL);
break;
}
}
- switch (intP) {
+ switch (prm) {
case 0:
- if (mMotionSeqMngr2.getNo() != 22) {
+ if (mMotionSeqMngr.getNo() != 22) {
break;
}
- if (mMotionSeqMngr2.getStepNo() > 0) {
- ret = 1;
+ if (mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
}
-
break;
case 10:
- if (mTargetAngle.y != fopAcM_searchPlayerAngleY(this)) {
- if (step(fopAcM_searchPlayerAngleY(this),1,0x20,0x14,0) != 0) {
- ret = 1;
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,0,0);
+ if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ rt = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
}
} else {
- ret = 1;
+ rt = 1;
}
break;
case 20:
- intP = talkProc(NULL,0,NULL,0);
- if (intP != 0) {
- ret = 1;
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
}
break;
default:
- ret = 1;
+ rt = 1;
}
- return ret;
+ return rt;
}
/* 80A2E26C-80A2E528 00394C 02BC+00 1/0 0/0 0/0 .text ECut_largeDamageTalk__10daNpc_Kn_cFi */
int daNpc_Kn_c::ECut_largeDamageTalk(int i_idx) {
- dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
- int ret = 0;
- int intP = -1;
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int rt = 0;
+ int prm = -1;
- int* intP2 = dComIfGp_evmng_getMyIntegerP(i_idx,"prm");
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
- if (intP2) {
- intP = *intP2;
+ if (prm_p != NULL) {
+ prm = *prm_p;
}
if (event_manager->getIsAddvance(i_idx)) {
- switch (intP) {
+ switch (prm) {
case 0:
mJntAnm.lookPlayer(0);
speed.zero();
@@ -1821,247 +1811,245 @@ int daNpc_Kn_c::ECut_largeDamageTalk(int i_idx) {
case 10:
break;
case 20:
- field_0xdfe = 2;
- initTalk(mFlowNodeNo,NULL);
+ mStepMode = 2;
+ initTalk(mFlowNodeNo, NULL);
break;
}
}
- switch (intP) {
+ switch (prm) {
case 0:
if (!daPy_getPlayerActorClass()->checkPlayerFly()) {
- ret = 1;
+ rt = 1;
}
daPy_getPlayerActorClass()->onLargeDamageUpStop();
break;
case 10:
- if (mTargetAngle.y != fopAcM_searchPlayerAngleY(this)) {
- if (step(fopAcM_searchPlayerAngleY(this),1,0x20,0x14,0) != 0) {
- ret = 1;
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,0,0);
- }
-
+ if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ rt = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ }
} else {
- ret = 1;
+ rt = 1;
}
daPy_getPlayerActorClass()->onLargeDamageUpStop();
-
break;
case 20:
- intP = talkProc(NULL,0,NULL,0);
-
- if (intP != 0) {
- ret = 1;
- }
-
- cLib_addCalcAngleS2(&mTargetAngle.y,fopAcM_searchPlayerAngleY(this),2,0x800);
- setAngle(mTargetAngle.y);
- daPy_getPlayerActorClass()->onLargeDamageUpStop();
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ daPy_getPlayerActorClass()->onLargeDamageUpStop();
break;
default:
- ret = 1;
+ rt = 1;
}
- return ret;
+ return rt;
}
/* 80A2E528-80A2E664 003C08 013C+00 5/0 0/0 0/0 .text teach02_start__10daNpc_Kn_cFPv */
int daNpc_Kn_c::teach02_start(void* param_0) {
- switch (field_0xe2a) {
+ switch (mMode) {
case 0:
case 1:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
mJntAnm.lookPlayer(0);
- field_0xe2a = 2;
+ mMode = 2;
case 2:
- mEvtIdx = 8;
+ mEvtNo = 8;
field_0xe39 = 1;
- cLib_addCalcAngleS2(&mTargetAngle.y,fopAcM_searchPlayerAngleY(this),2,0x800);
- setAngle(mTargetAngle.y);
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
case 3:
default:
- return 1;
+ break;
}
+
+ return 1;
}
/* 80A2E664-80A2EC04 003D44 05A0+00 1/0 0/0 0/0 .text teach03_attackWait__10daNpc_Kn_cFPv
*/
int daNpc_Kn_c::teach03_attackWait(void* param_0) {
- switch (field_0xe2a) {
- case 0:
- case 1: {
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(9,-1.0f,0,0);
- mJntAnm.lookPlayer(0);
- field_0xdec = daNpc_Kn_Param_c::m.field_0x8e;
- mTargetPos = current.pos;
- field_0x15bc = 0;
- field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.field_0xac,
- daNpc_Kn_Param_c::m.field_0xae);
- speedF = 0;
- speed.zero();
- field_0x15cc = 0;
- field_0xe2a = 2;
- }
+ switch (mMode) {
+ case 0:
+ case 1:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(9, -1.0f, 0, 0);
+ mJntAnm.lookPlayer(0);
+ field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time;
+ mTargetPos = current.pos;
+ field_0x15bc = 0;
+ field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range);
+ speedF = 0;
+ speed.zero();
+ field_0x15cc = 0;
+ mMode = 2;
// fallthrough
- case 2: {
- mCcStts.Move();
-
- int cut_type = daPy_getPlayerActorClass()->getCutType();
- if (cut_type == daPy_py_c::CUT_TYPE_TWIRL) { // backslice
- mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1);
- mCylCc.OffTgShield();
- } else {
- mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2);
- mCylCc.OnTgShield();
- }
-
- if (mCylCc.ChkTgHit()) {
- if (cut_type == daPy_py_c::CUT_TYPE_TWIRL) {
- if (mType == 2) {
- mEvtIdx = 14;
- } else if (mType == 3) {
- mEvtIdx = 15;
- }
+ case 2: {
+ mCcStts.Move();
- s16 angle = fopAcM_searchPlayerAngleY(this) - current.angle.y;
- int absAngle = angle < 0 ? -angle : angle;
+ int cut_type = daPy_getPlayerActorClass()->getCutType();
+ if (cut_type == daPy_py_c::CUT_TYPE_TWIRL) {
+ mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1);
+ mCylCc.OffTgShield();
+ } else {
+ mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2);
+ mCylCc.OnTgShield();
+ }
- if (absAngle < 0x4000) {
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0x12,-1.0f,0,0);
+ if (mCylCc.ChkTgHit()) {
+ if (cut_type == daPy_py_c::CUT_TYPE_TWIRL) {
+ if (mType == 2) {
+ mEvtNo = 14;
+ } else if (mType == 3) {
+ mEvtNo = 15;
+ }
- setAngle(fopAcM_searchPlayerAngleY(this));
- speedF = -daNpc_Kn_Param_c::m.field_0xa0;
- mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L,-1);
- } else {
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0xe,-1.0f,0,0);
+ s16 angle = fopAcM_searchPlayerAngleY(this) - current.angle.y;
+ int absAngle = angle < 0 ? -angle : angle;
- setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000);
- speedF = daNpc_Kn_Param_c::m.field_0xa0;
- mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L,-1);
- }
+ if (absAngle < 0x4000) {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0);
- mJntAnm.lookNone(0);
- speed.y = daNpc_Kn_Param_c::m.field_0xa4;
- mCreature.startCollisionSE(Z2SE_HIT_SWORD, 0x1f);
- } else {
setAngle(fopAcM_searchPlayerAngleY(this));
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0x1b,-1.0f,1,0);
+ speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h;
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
+ } else {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0xe, -1.0f, 0, 0);
- if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) {
- mCreature.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK,0x28);
- } else {
- mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x28);
- }
+ setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000);
+ speedF = daNpc_Kn_Param_c::m.attack_disappear_speed_h;
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
}
+
+ mJntAnm.lookNone(0);
+ speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v;
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1f);
} else {
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x1b, -1.0f, 1, 0);
- if (daPy_getPlayerActorClass()->checkSideStep()) {
- field_0x15cc = 1;
+ if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) {
+ mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28);
+ } else {
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28);
}
+ }
+ } else {
+ if (daPy_getPlayerActorClass()->checkSideStep()) {
+ field_0x15cc = 1;
+ }
- if (!cLib_calcTimer(&field_0xdec) || checkCollisionSword()) {
- mTargetPos = current.pos;
- field_0x15bc = 0;
+ if (!cLib_calcTimer(&field_0xdec) || checkCollisionSword()) {
+ mTargetPos = current.pos;
+ field_0x15bc = 0;
- BOOL truth = FALSE;
- if (dComIfGp_getAttention()->LockonTruth()) {
- truth = TRUE;
- }
+ BOOL is_lockon = FALSE;
+ if (dComIfGp_getAttention()->LockonTruth()) {
+ is_lockon = TRUE;
+ }
- if (checkCollisionSword()) {
- mEvtIdx = 4;
- } else {
- mEvtIdx = 1;
- }
+ if (checkCollisionSword()) {
+ mEvtNo = 4;
+ } else {
+ mEvtNo = 1;
+ }
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,1,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 1, 0);
- if (field_0x15cc) {
- mFlowNodeNo = 0x2e4;
+ if (field_0x15cc) {
+ mFlowNodeNo = 0x2e4;
+ } else {
+ if (is_lockon) {
+ mFlowNodeNo = 0x2e2;
} else {
- if (truth) {
- mFlowNodeNo = 0x2e2;
- } else {
- mFlowNodeNo = 0x2e3;
- }
+ mFlowNodeNo = 0x2e3;
}
- } else {
- calcSwordAttackMove(0);
}
+ } else {
+ calcSwordAttackMove(0);
}
}
- // fallthrough
- case 3:
- default: {
- return 1;
- }
+ break;
}
+ case 3:
+ default:
+ break;
+ }
+
+ return 1;
}
/* 80A2EC04-80A2EF8C 0042E4 0388+00 1/0 0/0 0/0 .text teach04_attackWait__10daNpc_Kn_cFPv
*/
int daNpc_Kn_c::teach04_attackWait(void* param_0) {
- switch (field_0xe2a) {
+ switch (mMode) {
case 0:
case 1:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(9,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(9, -1.0f, 0, 0);
mJntAnm.lookPlayer(0);
- field_0xdec = daNpc_Kn_Param_c::m.field_0x8e;
+ field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time;
mTargetPos = current.pos;
field_0x15bc = 0;
- field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.field_0xac,
- daNpc_Kn_Param_c::m.field_0xae);
+ field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range);
speedF = 0;
speed.zero();
- field_0xe2a = 2;
+ mMode = 2;
case 2:
- calcSlip();
- mCcStts.Move();
- if (mCylCc.ChkTgShieldHit()) {
- u8 cut_type = daPy_getPlayerActorClass()->getCutType();
+ calcSlip();
+ mCcStts.Move();
+ if (mCylCc.ChkTgShieldHit()) {
+ u8 cut_type = daPy_getPlayerActorClass()->getCutType();
if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) {
- s16 angle = cLib_targetAngleY(&mCylCc.GetTgHitAc()->current.pos, &current.pos);
- cXyz pos(0.0f,0.0f, daNpc_Kn_Param_c::m.field_0x94);
+ fopAc_ac_c* aTgHitActor_p = mCylCc.GetTgHitAc();
+ JUT_ASSERT(3715, 0 != aTgHitActor_p);
+
+ s16 angle = cLib_targetAngleY(&aTgHitActor_p->current.pos, &current.pos);
+ cXyz offset(0.0f, 0.0f, daNpc_Kn_Param_c::m.small_slide_distance);
mDoMtx_stack_c::YrotS(angle);
- mDoMtx_stack_c::multVec(&pos, &mTargetPos);
+ mDoMtx_stack_c::multVec(&offset, &mTargetPos);
mTargetPos += current.pos;
+
field_0x15bc = 1;
mCylCc.ClrTgHit();
- mCreature.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28);
+ mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28);
mActionMode = 10;
break;
}
}
if (cLib_calcTimer(&field_0xdec) == 0 || checkCollisionSword()) {
- BOOL truth = FALSE;
-
+ BOOL is_lockon = FALSE;
if (dComIfGp_getAttention()->LockonTruth()) {
- truth = TRUE;
+ is_lockon = TRUE;
}
if (checkCollisionSword()) {
- mEvtIdx = 4;
+ mEvtNo = 4;
} else {
- mEvtIdx = 1;
+ mEvtNo = 1;
}
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,1,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 1, 0);
- if (truth) {
+ if (is_lockon) {
mFlowNodeNo = 0x2f3;
} else {
mFlowNodeNo = 0x2f4;
@@ -2069,15 +2057,16 @@ int daNpc_Kn_c::teach04_attackWait(void* param_0) {
} else {
if (mCylCc.ChkTgHit()) {
- if (mCylCc.GetTgHitObj()->ChkAtType(AT_TYPE_SHIELD_ATTACK) == 0) {
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0x1b,-1.0f,1,0);
- mCreature.startCollisionSE(Z2SE_HIT_SWORD, 0x28);
+ if (!mCylCc.GetTgHitObj()->ChkAtType(AT_TYPE_SHIELD_ATTACK)) {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x1b, -1.0f, 1, 0);
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28);
break;
}
}
calcSwordAttackMove(1);
}
+ break;
case 3:
default:
break;
@@ -2088,54 +2077,55 @@ int daNpc_Kn_c::teach04_attackWait(void* param_0) {
/* 80A2EF8C-80A2F24C 00466C 02C0+00 1/0 0/0 0/0 .text teach04_headBreakWait__10daNpc_Kn_cFPv */
int daNpc_Kn_c::teach04_headBreakWait(void* param_0) {
- switch (field_0xe2a) {
- case 0:
- case 1: {
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0xb,-1.0f,1,0);
- mJntAnm.lookNone(0);
- field_0xdec = daNpc_Kn_Param_c::m.field_0x90;
- onHeadLockFlg();
- field_0xe2a = 2;
- }
+ switch (mMode) {
+ case 0:
+ case 1:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0xb, -1.0f, 1, 0);
+ mJntAnm.lookNone(0);
+ field_0xdec = daNpc_Kn_Param_c::m.followup_wait_time;
+ onHeadLockFlg();
+ mMode = 2;
// fallthrough
- case 2: {
- calcSlip();
- field_0x15c0.set(10.0f,-10.0f,0.0f);
- int head_joint_no = getHeadJointNo();
- mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(head_joint_no));
- mDoMtx_stack_c::multVec(&field_0x15c0, &field_0x15c0);
- setHeadLockPos(&field_0x15c0);
- mCcStts.Move();
-
- if (mCylCc.ChkTgHit() && daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_HEAD_JUMP) {
- s16 angle = cLib_targetAngleY(&daPy_getPlayerActorClass()->current.pos, &attention_info.position);
- cXyz pos(0.0f,0.0f,daNpc_Kn_Param_c::m.field_0x94);
- mDoMtx_stack_c::YrotS(angle);
- mDoMtx_stack_c::multVec(&pos,&mTargetPos);
- mTargetPos += current.pos;
- field_0x15bc = 1;
- mCylCc.ClrTgHit();
- mCreature.startCollisionSE(Z2SE_HIT_SWORD, 0x1e);
- mActionMode = 11;
- break;
- } else {
- if (!cLib_calcTimer(&field_0xdec)) {
- mEvtIdx = 1;
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,1,0);
- mFlowNodeNo = 0x2f2;
- mActionMode = 9;
- }
- }
+ case 2: {
+ calcSlip();
+ field_0x15c0.set(10.0f, -10.0f, 0.0f);
+
+ int head_joint_no = getHeadJointNo();
+ mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(head_joint_no));
+ mDoMtx_stack_c::multVec(&field_0x15c0, &field_0x15c0);
+ setHeadLockPos(&field_0x15c0);
+
+ mCcStts.Move();
+
+ if (mCylCc.ChkTgHit() && daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_HEAD_JUMP) {
+ s16 angle = cLib_targetAngleY(&daPy_getPlayerActorClass()->current.pos, &attention_info.position);
+ cXyz offset(0.0f, 0.0f, daNpc_Kn_Param_c::m.small_slide_distance);
+ mDoMtx_stack_c::YrotS(angle);
+ mDoMtx_stack_c::multVec(&offset, &mTargetPos);
+ mTargetPos += current.pos;
+
+ field_0x15bc = 1;
+ mCylCc.ClrTgHit();
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1e);
+ mActionMode = 11;
break;
+ } else {
+ if (cLib_calcTimer(&field_0xdec) == 0) {
+ mEvtNo = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 1, 0);
+ mFlowNodeNo = 0x2f2;
+ mActionMode = 9;
+ }
}
- // fallthrough
- case 3:
- offHeadLockFlg();
- // fallthrough
- default:
- break;
+ break;
+ }
+ case 3:
+ offHeadLockFlg();
+ break;
+ default:
+ break;
}
return 1;
@@ -2144,57 +2134,60 @@ int daNpc_Kn_c::teach04_headBreakWait(void* param_0) {
/* 80A2F24C-80A2F600 00492C 03B4+00 1/0 0/0 0/0 .text teach04_finishWait__10daNpc_Kn_cFPv
*/
int daNpc_Kn_c::teach04_finishWait(void* param_0) {
- switch (field_0xe2a) {
+ switch (mMode) {
case 0:
case 1:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0xb,-1.0f,1,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0xb, -1.0f, 1, 0);
mJntAnm.lookNone(0);
- field_0xdec = daNpc_Kn_Param_c::m.field_0x90;
- field_0xe2a = 2;
+ field_0xdec = daNpc_Kn_Param_c::m.followup_wait_time;
+ mMode = 2;
case 2:
calcSlip();
mCcStts.Move();
if (mCylCc.ChkTgHit() && daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_GUARD_ATTACK) {
if (mType == 3) {
- mEvtIdx = 16;
+ mEvtNo = 16;
} else {
- mEvtIdx = 17;
+ mEvtNo = 17;
}
cXyz* pos_p = mCylCc.GetTgHitPosP();
- s16 angle = (pos_p ? cLib_targetAngleY(&current.pos, pos_p) : fopAcM_searchPlayerAngleY(this)) - current.angle.y;
+ s16 angle =
+ (pos_p ? cLib_targetAngleY(&current.pos, pos_p) : fopAcM_searchPlayerAngleY(this)) -
+ current.angle.y;
int absAngle = angle < 0 ? -angle : angle;
-
if (absAngle < 0x4000) {
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0x12,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0);
setAngle(fopAcM_searchPlayerAngleY(this));
- speedF = -daNpc_Kn_Param_c::m.field_0xa0;
- mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
+ speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h;
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
} else {
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0xe,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0xe, -1.0f, 0, 0);
setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000);
- speedF = daNpc_Kn_Param_c::m.field_0xa0;
- mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
+ speedF = daNpc_Kn_Param_c::m.attack_disappear_speed_h;
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
}
- mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x1f);
+
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1f);
mJntAnm.lookNone(0);
- speed.y = daNpc_Kn_Param_c::m.field_0xa4;
+ speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v;
break;
} else {
- if (!cLib_calcTimer(&field_0xdec)) {
- mEvtIdx = 1;
+ if (cLib_calcTimer(&field_0xdec) == 0) {
+ mEvtNo = 1;
mFlowNodeNo = 0x306;
mActionMode = 9;
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,1,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 1, 0);
}
}
+ break;
case 3:
default:
break;
@@ -2206,27 +2199,27 @@ int daNpc_Kn_c::teach04_finishWait(void* param_0) {
/* 80A2F600-80A2FBB4 004CE0 05B4+00 1/0 0/0 0/0 .text teach05_surpriseAttackWait__10daNpc_Kn_cFPv
*/
int daNpc_Kn_c::teach05_surpriseAttackWait(void* param_0) {
- switch (field_0xe2a) {
+ switch (mMode) {
case 0:
case 1:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(9,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(9, -1.0f, 0, 0);
mJntAnm.lookPlayer(0);
- field_0xdec = daNpc_Kn_Param_c::m.field_0x8e;
+ field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time;
mTargetPos = current.pos;
field_0x15bc = 0;
- field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.field_0xac,
- daNpc_Kn_Param_c::m.field_0xae);
+ field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range);
speedF = 0.0f;
speed.zero();
- field_0xe2a = 2;
- case 2:
+ mMode = 2;
+ case 2: {
calcSlip();
mCcStts.Move();
int cut_type = daPy_getPlayerActorClass()->getCutType();
-
- if (cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B || cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A) {
+ if (cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B ||
+ cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A)
+ {
mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1);
mCylCc.OffTgShield();
} else {
@@ -2234,49 +2227,50 @@ int daNpc_Kn_c::teach05_surpriseAttackWait(void* param_0) {
mCylCc.OnTgShield();
}
- if (mCylCc.ChkTgHit()){
- if (cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B || cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A) {
+ if (mCylCc.ChkTgHit()) {
+ if (cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B ||
+ cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A)
+ {
if (mType == 4) {
- mEvtIdx = 0x13;
+ mEvtNo = 0x13;
} else {
- mEvtIdx = 0x14;
+ mEvtNo = 0x14;
}
s16 angle = fopAcM_searchPlayerAngleY(this) - current.angle.y;
int absAngle = angle < 0 ? -angle : angle;
if (absAngle < 0x4000) {
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0x12,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0);
setAngle(fopAcM_searchPlayerAngleY(this));
- speedF = -daNpc_Kn_Param_c::m.field_0xa0;
- mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L,-1);
+ speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h;
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
} else {
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(14,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(14, -1.0f, 0, 0);
setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000);
- speedF = daNpc_Kn_Param_c::m.field_0xa0;
- mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L,-1);
+ speedF = daNpc_Kn_Param_c::m.attack_disappear_speed_h;
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
}
- mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x1f);
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1f);
mJntAnm.lookNone(0);
- speed.y = daNpc_Kn_Param_c::m.field_0xa4;
+ speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v;
} else {
setAngle(fopAcM_searchPlayerAngleY(this));
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0x1b,-1.0f,1,0);
-
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x1b, -1.0f, 1, 0);
+
if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) {
- mCreature.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK,0x28);
+ mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28);
} else {
- mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x28);
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28);
}
break;
}
-
} else {
if (daPy_getPlayerActorClass()->checkSideStep()) {
field_0x15cc = 1;
@@ -2287,25 +2281,24 @@ int daNpc_Kn_c::teach05_surpriseAttackWait(void* param_0) {
if (cLib_calcTimer(&field_0xdec) == 0 || checkCollisionSword()) {
mTargetPos = current.pos;
field_0x15bc = 0;
-
- BOOL check = FALSE;
-
+
+ BOOL is_lockon = FALSE;
if (dComIfGp_getAttention()->LockonTruth()) {
- check = TRUE;
+ is_lockon = TRUE;
}
if (checkCollisionSword()) {
- mEvtIdx = 4;
+ mEvtNo = 4;
} else {
- mEvtIdx = 1;
+ mEvtNo = 1;
}
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,1,0);
-
- if (check != FALSE) {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 1, 0);
+
+ if (is_lockon != FALSE) {
mFlowNodeNo = 0x2ec;
-
+
} else {
if (!daPy_getPlayerActorClass()->checkItemSwordEquip()) {
mFlowNodeNo = 0x2ea;
@@ -2315,7 +2308,8 @@ int daNpc_Kn_c::teach05_surpriseAttackWait(void* param_0) {
}
}
}
-
+ break;
+ }
case 3:
default:
break;
@@ -2325,48 +2319,51 @@ int daNpc_Kn_c::teach05_surpriseAttackWait(void* param_0) {
}
/* 80A2FBB4-80A2FC14 005294 0060+00 1/1 0/0 0/0 .text s_sub6__FPvPv */
-static void* s_sub6(void* i_this, void* param_1) {
- if (fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == PROC_NPC_KN && i_this != param_1) {
- static_cast<daNpc_Kn_c*>(i_this)->setActionMode(18);
+static void* s_sub6(void* i_actor, void* i_other) {
+ if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_NPC_KN && i_actor != i_other) {
+ ((daNpc_Kn_c*)i_actor)->setActionMode(18);
}
-
- return 0;
+
+ return NULL;
}
/* 80A2FC14-80A2FC80 0052F4 006C+00 2/2 0/0 0/0 .text s_subEnd6__FPvPv */
-static void* s_subEnd6(void* i_this, void* param_1) {
- if (fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == PROC_NPC_KN && i_this != param_1 && static_cast<daNpc_Kn_c*>(i_this)->getActionMode() != 17) {
- static_cast<daNpc_Kn_c*>(i_this)->setActionMode(17);
+static void* s_subEnd6(void* i_actor, void* i_other) {
+ if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_NPC_KN && i_actor != i_other &&
+ ((daNpc_Kn_c*)i_actor)->getActionMode() != 17)
+ {
+ ((daNpc_Kn_c*)i_actor)->setActionMode(17);
}
-
- return 0;
+
+ return NULL;
}
/* 80A2FC80-80A30398 005360 0718+00 1/0 0/0 0/0 .text teach06_superJumpWait__10daNpc_Kn_cFPv */
int daNpc_Kn_c::teach06_superJumpWait(void* param_0) {
- // NONMATCHING
- switch (field_0xe2a) {
+ // NONMATCHING - value comparison not getting optimized
+ switch (mMode) {
case 0:
case 1:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(9,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(9, -1.0f, 0, 0);
mJntAnm.lookPlayer(0);
- field_0xdec = daNpc_Kn_Param_c::m.field_0x90;
+ field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time;
mTargetPos = current.pos;
field_0x15bc = 0;
- field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.field_0xac,
- daNpc_Kn_Param_c::m.field_0xae);
+ field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range);
speedF = 0.0f;
speed.zero();
field_0x15bd = 0;
- field_0xe2a = 2;
- case 2:
+ mMode = 2;
+ case 2: {
calcSlip();
mCcStts.Move();
int cut_type = daPy_getPlayerActorClass()->getCutType();
-
- if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_INIT || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH) {
+ if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_INIT ||
+ cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP ||
+ cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH)
+ {
mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1);
mCylCc.OffTgShield();
} else {
@@ -2375,107 +2372,105 @@ int daNpc_Kn_c::teach06_superJumpWait(void* param_0) {
}
if (mCylCc.ChkTgHit()) {
- if (field_0x15bd == 2 && cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH) {
- mEvtIdx = 22;
- fpcM_Search(s_subEnd6,this);
+ if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH) {
+ if (mType == 5) {
+ mEvtNo = 0x15;
+ } else {
+ mEvtNo = 0x17;
+ }
+
+ s16 angle = fopAcM_searchPlayerAngleY(this) - current.angle.y;
+ int absAngle = angle < 0 ? -angle : angle;
+
+ if (absAngle < 0x4000) {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0);
+
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h;
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
+ } else {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0xe, -1.0f, 0, 0);
+ setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000);
+ speedF = daNpc_Kn_Param_c::m.attack_disappear_speed_h;
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
+ }
+ mJntAnm.lookNone(0);
+ speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v;
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1f);
+ } else if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_INIT) {
+ fopAc_ac_c* aTgHitActor_p = mCylCc.GetTgHitAc();
+ JUT_ASSERT(4286, 0 != aTgHitActor_p);
+
+ s16 angle = cLib_targetAngleY(&aTgHitActor_p->current.pos, &current.pos);
+ cXyz offset(0.0f, 0.0f, daNpc_Kn_Param_c::m.small_slide_distance);
+ mDoMtx_stack_c::YrotS(angle);
+ mDoMtx_stack_c::multVec(&offset, &mTargetPos);
+ mTargetPos += current.pos;
+
+ field_0x15bc = 1;
+ mCylCc.ClrTgHit();
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x1E, -1.0f, 1, 0);
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1E);
} else {
- calcSwordAttackMove(1);
- if (field_0x15bd == 2 || cLib_calcTimer(&field_0xdec) && checkCollisionSword() && field_0x15bd != 1) {
- if (daPy_getPlayerActorClass()->checkDamageImpact()) {
- BOOL check = FALSE;
-
- if (dComIfGp_getAttention()->LockonTruth()) {
- check = TRUE;
- }
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x1B, -1.0f, 1, 0);
- if (daPy_getPlayerActorClass()->checkSideStep()) {
- mFlowNodeNo = 0x2fb;
-
- } else {
- if (check == FALSE) {
- mFlowNodeNo = 0x2fc;
- } else {
- mFlowNodeNo = 0x2fd;
- }
- }
- }
+ if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) {
+ mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28);
} else {
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28);
+ }
+ }
+ } else {
+ if (field_0x15bd == 2 &&
+ (cut_type != daPy_py_c::CUT_TYPE_LARGE_JUMP && cut_type != daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH))
+ {
+ mEvtNo = 22;
+ fpcM_Search(s_subEnd6, this);
+ } else {
+ calcSwordAttackMove(1);
+ if (field_0x15bd != 2 && (cLib_calcTimer(&field_0xdec) == 0 || checkCollisionSword() || field_0x15bd == 1)) {
mTargetPos = current.pos;
- field_0x15bc = 9;
+ field_0x15bc = 0;
- BOOL check = FALSE;
-
+ BOOL is_lockon = FALSE;
if (dComIfGp_getAttention()->LockonTruth()) {
- check = TRUE;
+ is_lockon = TRUE;
}
- if (checkCollisionSword() && field_0x15bd == 1) {
- mEvtIdx = 4;
+ if (checkCollisionSword() || field_0x15bd == 1) {
+ mEvtNo = 4;
} else {
- mEvtIdx = 1;
+ mEvtNo = 1;
}
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,1,0);
- fpcM_Search(s_sub6,this);
- }
- }
- } else if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH) {
- if (mType == 5) {
- mEvtIdx = 0x15;
- } else {
- mEvtIdx = 0x17;
- }
-
- s16 angle = fopAcM_searchPlayerAngleY(this) - current.angle.y;
- int absAngle = angle < 0 ? -angle : angle;
-
- if (absAngle < 0x4000) {
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0x12,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 1, 0);
+ fpcM_Search(s_sub6, this);
+ } else if (!daPy_getPlayerActorClass()->checkDamageImpact()) {
+ BOOL is_lockon = FALSE;
+ if (dComIfGp_getAttention()->LockonTruth()) {
+ is_lockon = TRUE;
+ }
- setAngle(fopAcM_searchPlayerAngleY(this));
- speedF = -daNpc_Kn_Param_c::m.field_0xa0;
- mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
- } else {
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0xe,-1.0f,0,0);
- setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000);
- speedF = daNpc_Kn_Param_c::m.field_0xa0;
- mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
+ if (daPy_getPlayerActorClass()->checkCutLargeJumpCharge()) {
+ mFlowNodeNo = 0x2fb;
+ } else {
+ if (is_lockon) {
+ mFlowNodeNo = 0x2fc;
+ } else {
+ mFlowNodeNo = 0x2fd;
+ }
+ }
+ }
}
- mJntAnm.lookNone(0);
- speed.y = daNpc_Kn_Param_c::m.field_0xa4;
- mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x1f);
- break;
-
- } else if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_INIT) {
- fopAc_ac_c* hit_ac = mCylCc.GetTgHitAc();
- s16 angle = cLib_targetAngleY(&hit_ac->current.pos, &current.pos);
- cXyz pos(0.0f,0.0f,daNpc_Kn_Param_c::m.common.face_expression);
- mDoMtx_stack_c::YrotS(angle);
- mDoMtx_stack_c::multVec(&pos, &pos);
}
- // iVar2 = ::dCcD_GObjInf::GetTgHitAc((dCcD_GObjInf *)(this + 0x122c));
- // if (iVar2 == 0) {
- // uVar4 = JUTAssertion::getSDevice();
- // JUTAssertion::showAssert(uVar4,d_a_npc_kn::@126361,0x10be,d_a_npc_kn::@127478);
- // m_Do_printf::OSPanic(d_a_npc_kn::@126361,0x10be,&d_a_npc_kn::@124961);
- // }
- // sVar8 = SComponentD::(iVar2 + 0x4d4,this + 0x4d4);
- // ::cXyz::cXyz(&cStack_2c,0.0,0.0,*(float *)(*(int *)(this + 0x1228) + 0x9c));
- // mDoMtx_stack_c::YrotS(sVar8);
- // mDoMtx_stack_c::multVec(&cStack_2c,(cXyz *)(this + 0x1600));
- // ::cXyz::operator_+=((cXyz *)(this + 0x1600),(Vec *)(this + 0x4d4));
- // this[0x160c] = (daNpc_Kn_c)0x1;
- // (**(code **)(*(int *)(this + 0x1268) + 0x24))();
- // ::daNpcT_MotionSeqMngr_c::setNo((daNpcT_MotionSeqMngr_c *)(this + 0xbd4),1,-1.0,0,0);
- // ::daNpcT_MotionSeqMngr_c::setNo((daNpcT_MotionSeqMngr_c *)(this + 0xbf8),0x1e,-1.0,1,0);
- // (**(code **)(*(int *)(this + 0x5cc) + 0x2c))(this + 0x5cc,0x40000,0x1e);
- // } else {
-
- // }
-
+ break;
+ }
case 3:
default:
break;
@@ -2487,14 +2482,14 @@ int daNpc_Kn_c::teach06_superJumpWait(void* param_0) {
/* 80A30398-80A305A8 005A78 0210+00 1/0 0/0 0/0 .text teach06_divideMove__10daNpc_Kn_cFPv
*/
int daNpc_Kn_c::teach06_divideMove(void* param_0) {
- switch (field_0xe2a) {
+ switch (mMode) {
case 0:
- case 1:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(9,-1.0f,0,0);
+ case 1: {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(9, -1.0f, 0, 0);
mJntAnm.lookPlayer(0);
- cXyz pos(0.0f,0.0f,180.0f);
+ cXyz pos(0.0f, 0.0f, 180.0f);
s16 angle;
if (mDivideNo == 1) {
angle = home.angle.y - 0x1555;
@@ -2504,18 +2499,23 @@ int daNpc_Kn_c::teach06_divideMove(void* param_0) {
mDoMtx_stack_c::transS(home.pos);
mDoMtx_stack_c::YrotM(angle);
- mDoMtx_stack_c::multVec(&pos,&pos);
+ mDoMtx_stack_c::multVec(&pos, &pos);
mTargetPos = pos;
- field_0xe2a = 2;
- case 2:
- cXyz pos2(current.pos);
- cLib_chasePos(&pos2, mTargetPos, 6.0f);
- setPos(pos2);
- cLib_addCalcAngleS2(&mTargetAngle.y,fopAcM_searchPlayerAngleY(this), 2, 0x800);
- setAngle(mTargetAngle.y);
+ mMode = 2;
+ }
+ case 2: {
+ cXyz pos(current.pos);
+ cLib_chasePos(&pos, mTargetPos, 6.0f);
+ setPos(pos);
+
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+
if (!dComIfGp_event_runCheck()) {
mActionMode = 15;
}
+ break;
+ }
case 3:
default:
break;
@@ -2527,22 +2527,23 @@ int daNpc_Kn_c::teach06_divideMove(void* param_0) {
/* 80A305A8-80A30708 005C88 0160+00 1/0 0/0 0/0 .text teach06_waitDivide__10daNpc_Kn_cFPv
*/
int daNpc_Kn_c::teach06_waitDivide(void* param_0) {
- switch (field_0xe2a) {
+ switch (mMode) {
case 0:
case 1:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
mJntAnm.lookPlayer(0);
speedF = 0.0f;
speed.zero();
- field_0xe2a = 2;
+ mMode = 2;
break;
case 2:
- cLib_addCalcAngleS2(&mTargetAngle.y,fopAcM_searchPlayerAngleY(this), 2, 0x800);
- setAngle(mTargetAngle.y);
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
if (!dComIfGp_event_runCheck()) {
mActionMode = 15;
}
+ break;
case 3:
default:
break;
@@ -2551,38 +2552,187 @@ int daNpc_Kn_c::teach06_waitDivide(void* param_0) {
return 1;
}
-// FIXME: Remove once teach06_superJump functions get decompiled.
-f32 dummy_lits_8270_8271(int sel) {
- switch (sel) {
- case 0: return 13.0f;
- default: return 14.0f;
- }
-}
-
/* 80A30708-80A30D44 005DE8 063C+00 1/0 0/0 0/0 .text teach06_superJumpWaitDivide__10daNpc_Kn_cFPv
*/
int daNpc_Kn_c::teach06_superJumpWaitDivide(void* param_0) {
- // NONMATCHING
+ switch (mMode) {
+ case 0:
+ case 1:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(9, -1.0f, 0, 0);
+ mJntAnm.lookPlayer(0);
+ field_0x15af = 1;
+ mTargetPos = current.pos;
+ field_0x15bc = 0;
+ field_0x15d0 = cLib_getRndValue<s16>(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range);
+ speedF = 0.0f;
+ speed.zero();
+ mMode = 2;
+ case 2: {
+ calcSlip();
+ mCcStts.Move();
+
+ int cut_type = daPy_getPlayerActorClass()->getCutType();
+ if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_INIT || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH) {
+ mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1);
+ mCylCc.OffTgShield();
+ } else {
+ mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2);
+ mCylCc.OnTgShield();
+ }
+
+ if (mCylCc.ChkTgHit()) {
+ if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH) {
+ mActionMode = 16;
+
+ daNpc_Kn_c* parent_p = (daNpc_Kn_c*)fpcM_SearchByID(parentActorID);
+ if (parent_p != NULL) {
+ parent_p->setTalkFlag(2);
+ }
+
+ int spC;
+ s16 temp_r0_2 = fopAcM_searchPlayerAngleY(this) - current.angle.y;
+ if (temp_r0_2 < 0) {
+ spC = -temp_r0_2;
+ } else {
+ spC = temp_r0_2;
+ }
+
+ if (spC < 0x4000) {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0);
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h;
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
+ } else {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0xE, -1.0f, 0, 0);
+ setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000);
+ speedF = daNpc_Kn_Param_c::m.attack_disappear_speed_h;
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
+ }
+
+ mJntAnm.lookNone(0);
+ speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v;
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1F);
+ } else if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_INIT) {
+ fopAc_ac_c* aTgHitActor_p = mCylCc.GetTgHitAc();
+ JUT_ASSERT(4619, 0 != aTgHitActor_p);
+
+ s16 angle = cLib_targetAngleY(&aTgHitActor_p->current.pos, &current.pos);
+ cXyz offset(0.0f, 0.0f, daNpc_Kn_Param_c::m.small_slide_distance);
+ mDoMtx_stack_c::YrotS(angle);
+ mDoMtx_stack_c::multVec(&offset, &mTargetPos);
+ mTargetPos += current.pos;
+
+ field_0x15bc = 1;
+ mCylCc.ClrTgHit();
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x1E, -1.0f, 1, 0);
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1E);
+ } else {
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x1B, -1.0f, 1, 0);
+
+ if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) {
+ mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28);
+ } else {
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28);
+ }
+ }
+ } else {
+ if (dComIfGp_event_runCheck()) {
+ speedF = 0.0f;
+ speed.zero();
+ } else {
+ calcSwordAttackMove(1);
+ }
+
+ if (checkCollisionSword()) {
+ daNpc_Kn_c* parent_p = (daNpc_Kn_c*)fpcM_SearchByID(parentActorID);
+ if (parent_p != NULL) {
+ parent_p->setTalkFlag(1);
+ parent_p->mFlowNodeNo = mFlowNodeNo;
+ }
+ } else if (!daPy_getPlayerActorClass()->checkDamageImpact()) {
+ BOOL is_lockon = FALSE;
+ if (dComIfGp_getAttention()->LockonTruth()) {
+ is_lockon = TRUE;
+ }
+
+ if (daPy_getPlayerActorClass()->checkCutLargeJumpCharge()) {
+ mFlowNodeNo = 0x2FB;
+ } else if (is_lockon) {
+ mFlowNodeNo = 0x2FC;
+ } else {
+ mFlowNodeNo = 0x2FD;
+ }
+ }
+ }
+ break;
+ }
+ case 3:
+ default:
+ break;
+ }
+
+ return 1;
}
/* 80A30D44-80A30EDC 006424 0198+00 1/0 0/0 0/0 .text teach06_superJumpedDivide__10daNpc_Kn_cFPv
*/
int daNpc_Kn_c::teach06_superJumpedDivide(void* param_0) {
- // NONMATCHING
+ switch (mMode) {
+ case 0:
+ case 1:
+ mTargetPos = current.pos;
+ field_0x15bc = 0;
+ mMode = 2;
+ case 2:
+ if (mMotionSeqMngr.getNo() == 19 || mMotionSeqMngr.getNo() == 15) {
+ if (mMotionSeqMngr.getStepNo() <= 0) {
+ if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) {
+ setLandingPrtcl();
+ }
+ }
+ } else {
+ if (speed.y <= 0.0f && mAcch.ChkGroundHit()) {
+ speedF = 0.0f;
+ speed.zero();
+
+ if (mMotionSeqMngr.getNo() == 18) {
+ mMotionSeqMngr.setNo(0x13, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(15, -1.0f, 0, 0);
+ }
+
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ setLandingPrtcl();
+ }
+ }
+ break;
+ case 3:
+ default:
+ break;
+ }
+
+ return 1;
}
/* 80A30EDC-80A30F5C 0065BC 0080+00 1/0 0/0 0/0 .text teach06_warpDelete__10daNpc_Kn_cFPv
*/
int daNpc_Kn_c::teach06_warpDelete(void* param_0) {
- switch (field_0xe2a) {
+ switch (mMode) {
case 0:
case 1:
field_0x170c = 1;
- field_0xe2a = 2;
+ mMode = 2;
case 2:
field_0x170c = 1;
ctrlWarp();
- if (this->field_0x170c == 2) {
+
+ if (field_0x170c == 2) {
fopAcM_delete(this);
}
case 3:
@@ -2594,51 +2744,202 @@ int daNpc_Kn_c::teach06_warpDelete(void* param_0) {
}
/* 80A30F5C-80A30FBC 00663C 0060+00 1/1 0/0 0/0 .text s_sub7__FPvPv */
-static void* s_sub7(void* i_this, void* param_1) {
- if (fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == PROC_NPC_KN && i_this != param_1) {
- static_cast<daNpc_Kn_c*>(i_this)->setActionMode(24);
+static void* s_sub7(void* i_actor, void* i_other) {
+ if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_NPC_KN && i_actor != i_other) {
+ ((daNpc_Kn_c*)i_actor)->setActionMode(24);
}
-
- return 0;
+
+ return NULL;
}
/* 80A30FBC-80A31028 00669C 006C+00 2/2 0/0 0/0 .text s_subEnd7__FPvPv */
-static void* s_subEnd7(void* i_this, void* param_1) {
- if (fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == PROC_NPC_KN && i_this != param_1 && static_cast<daNpc_Kn_c*>(i_this)->getActionMode() != 23) {
- static_cast<daNpc_Kn_c*>(i_this)->setActionMode(23);
+static void* s_subEnd7(void* i_actor, void* i_other) {
+ if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_NPC_KN && i_actor != i_other &&
+ ((daNpc_Kn_c*)i_actor)->getActionMode() != 23)
+ {
+ ((daNpc_Kn_c*)i_actor)->setActionMode(23);
}
-
- return 0;
+
+ return NULL;
}
/* 80A31028-80A315D0 006708 05A8+00 1/0 0/0 0/0 .text teach07_superTurnAttackWait__10daNpc_Kn_cFPv
*/
+// NONMATCHING - value comparison not getting optimized
int daNpc_Kn_c::teach07_superTurnAttackWait(void* param_0) {
- // NONMATCHING
+ switch (mMode) {
+ case 0:
+ case 1:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(9, -1.0f, 0, 0);
+ mJntAnm.lookPlayer(0);
+ field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time;
+ mTargetPos = current.pos;
+ field_0x15bc = 0;
+ field_0x15d0 = cLib_getRndValue<s16>(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range);
+ speedF = 0.0f;
+ speed.zero();
+ field_0x15bd = 0;
+ mMode = 2;
+ case 2: {
+ calcSlip();
+ mCcStts.Move();
+
+ int cut_type = daPy_getPlayerActorClass()->getCutType();
+ if (cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT) {
+ mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1);
+ mCylCc.OffTgShield();
+ } else {
+ mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2);
+ mCylCc.OnTgShield();
+ }
+
+ if (mCylCc.ChkTgHit()) {
+ if (cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT) {
+ if (mType == 6) {
+ mEvtNo = 0x18;
+ }
+
+ int spC;
+ s16 temp_r0_2 = fopAcM_searchPlayerAngleY(this) - current.angle.y;
+ if (temp_r0_2 < 0) {
+ spC = -temp_r0_2;
+ } else {
+ spC = temp_r0_2;
+ }
+
+ if (spC < 0x4000) {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0);
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h;
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
+ } else {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0xE, -1.0f, 0, 0);
+ setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000);
+ speedF = daNpc_Kn_Param_c::m.attack_disappear_speed_h;
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
+ }
+
+ mJntAnm.lookNone(0);
+ speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v;
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1F);
+ break;
+ } else {
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x1B, -1.0f, 1, 0);
+
+ if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) {
+ mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28);
+ } else {
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28);
+ }
+ }
+ } else if (field_0x15bd == 2 && cut_type != daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT && cut_type != daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT) {
+ mEvtNo = 0x19;
+ fpcM_Search(s_subEnd7, this);
+ break;
+ }
+
+ calcSwordAttackMove(1);
+
+ if (field_0x15bd != 2 && (cLib_calcTimer(&field_0xdec) == 0 || checkCollisionSword() || field_0x15bd == 1)) {
+ mTargetPos = current.pos;
+ field_0x15bc = 0;
+
+ BOOL is_lockon = FALSE;
+ if (dComIfGp_getAttention()->LockonTruth()) {
+ is_lockon = TRUE;
+ }
+
+ if (checkCollisionSword() || field_0x15bd == 1) {
+ mEvtNo = 4;
+ } else {
+ mEvtNo = 1;
+ }
+
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 1, 0);
+ mFlowNodeNo = 0x303;
+ fpcM_Search(s_sub7, this);
+ }
+ break;
+ }
+ case 3:
+ default:
+ break;
+ }
+
+ return 1;
}
/* 80A315D0-80A317F8 006CB0 0228+00 1/0 0/0 0/0 .text teach07_divideMove__10daNpc_Kn_cFPv
*/
int daNpc_Kn_c::teach07_divideMove(void* param_0) {
- // NONMATCHING
+ switch (mMode) {
+ case 0:
+ case 1:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(9, -1.0f, 0, 0);
+ mJntAnm.lookPlayer(0);
+
+ if (mDivideNo == 1) {
+ field_0x1710 = home.angle.y - 0x2AAA;
+ } else {
+ field_0x1710 = home.angle.y + 0x2AAA;
+ }
+
+ field_0x1712 = home.angle.y + 0x8000;
+
+ mTargetPos = current.pos;
+ field_0x15bc = 0;
+ speedF = 0.0f;
+ speed.zero();
+ mMode = 2;
+ case 2: {
+ cLib_chaseAngleS(&field_0x1712, field_0x1710, 0x100);
+
+ cXyz offset(0.0f, 0.0f, 375.0f);
+ mDoMtx_stack_c::transS(daPy_getPlayerActorClass()->current.pos);
+ mDoMtx_stack_c::YrotM(field_0x1712);
+ mDoMtx_stack_c::multVec(&offset, &offset);
+ setPos(offset);
+
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+
+ if (!dComIfGp_event_runCheck()) {
+ mActionMode = 21;
+ }
+ break;
+ }
+ case 3:
+ default:
+ break;
+ }
+
+ return 1;
}
/* 80A317F8-80A31958 006ED8 0160+00 1/0 0/0 0/0 .text teach07_waitDivide__10daNpc_Kn_cFPv
*/
int daNpc_Kn_c::teach07_waitDivide(void* param_0) {
- switch (field_0xe2a) {
+ switch (mMode) {
case 0:
case 1:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
mJntAnm.lookPlayer(0);
speedF = 0.0f;
speed.zero();
- field_0xe2a = 2;
+ mMode = 2;
break;
case 2:
- cLib_addCalcAngleS2(&mTargetAngle.y,fopAcM_searchPlayerAngleY(this), 2, 0x800);
- setAngle(mTargetAngle.y);
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+
if (!dComIfGp_event_runCheck()) {
mActionMode = 21;
}
@@ -2653,27 +2954,155 @@ int daNpc_Kn_c::teach07_waitDivide(void* param_0) {
/* 80A31958-80A31E24 007038 04CC+00 1/0 0/0 0/0 .text
* teach07_superTurnAttackWaitDivide__10daNpc_Kn_cFPv */
int daNpc_Kn_c::teach07_superTurnAttackWaitDivide(void* param_0) {
- // NONMATCHING
+ switch (mMode) {
+ case 0:
+ case 1:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(9, -1.0f, 0, 0);
+ mJntAnm.lookPlayer(0);
+ field_0x15af = 1;
+ mTargetPos = current.pos;
+ field_0x15bc = 0;
+ field_0x15d0 = cLib_getRndValue<s16>(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range);
+ speedF = 0.0f;
+ speed.zero();
+ mMode = 2;
+ case 2: {
+ calcSlip();
+ mCcStts.Move();
+
+ int cut_type = daPy_getPlayerActorClass()->getCutType();
+ if (cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT) {
+ mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1);
+ mCylCc.OffTgShield();
+ } else {
+ mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2);
+ mCylCc.OnTgShield();
+ }
+
+ if (mCylCc.ChkTgHit()) {
+ if (cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT) {
+ mActionMode = 22;
+
+ daNpc_Kn_c* parent_p = (daNpc_Kn_c*)fpcM_SearchByID(parentActorID);
+ if (parent_p != NULL) {
+ parent_p->setTalkFlag(2);
+ }
+
+ int spC;
+ s16 temp_r0_2 = fopAcM_searchPlayerAngleY(this) - current.angle.y;
+ if (temp_r0_2 < 0) {
+ spC = -temp_r0_2;
+ } else {
+ spC = temp_r0_2;
+ }
+
+ if (spC < 0x4000) {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0);
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h;
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
+ } else {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0xE, -1.0f, 0, 0);
+ setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000);
+ speedF = daNpc_Kn_Param_c::m.attack_disappear_speed_h;
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
+ }
+
+ mJntAnm.lookNone(0);
+ speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v;
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1F);
+ break;
+ } else {
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x1B, -1.0f, 1, 0);
+
+ if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) {
+ mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28);
+ } else {
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28);
+ }
+ }
+ }
+
+ if (dComIfGp_event_runCheck()) {
+ speedF = 0.0f;
+ speed.zero();
+ } else {
+ calcSwordAttackMove(1);
+ }
+
+ if (checkCollisionSword()) {
+ daNpc_Kn_c* parent_p = (daNpc_Kn_c*)fpcM_SearchByID(parentActorID);
+ if (parent_p != NULL) {
+ parent_p->setTalkFlag(1);
+ }
+ }
+ break;
+ }
+ case 3:
+ default:
+ break;
+ }
+
+ return 1;
}
/* 80A31E24-80A31FBC 007504 0198+00 1/0 0/0 0/0 .text
* teach07_superTurnAttackedDivide__10daNpc_Kn_cFPv */
int daNpc_Kn_c::teach07_superTurnAttackedDivide(void* param_0) {
- // NONMATCHING
+ switch (mMode) {
+ case 0:
+ case 1:
+ mTargetPos = current.pos;
+ field_0x15bc = 0;
+ mMode = 2;
+ case 2:
+ if (mMotionSeqMngr.getNo() == 19 || mMotionSeqMngr.getNo() == 15) {
+ if (mMotionSeqMngr.getStepNo() <= 0) {
+ if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) {
+ setLandingPrtcl();
+ }
+ }
+ } else {
+ if (speed.y <= 0.0f && mAcch.ChkGroundHit()) {
+ speedF = 0.0f;
+ speed.zero();
+
+ if (mMotionSeqMngr.getNo() == 18) {
+ mMotionSeqMngr.setNo(0x13, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(15, -1.0f, 0, 0);
+ }
+
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ setLandingPrtcl();
+ }
+ }
+ break;
+ case 3:
+ default:
+ break;
+ }
+
+ return 1;
}
/* 80A31FBC-80A3203C 00769C 0080+00 1/0 0/0 0/0 .text teach07_warpDelete__10daNpc_Kn_cFPv
*/
int daNpc_Kn_c::teach07_warpDelete(void* param_0) {
- switch (field_0xe2a) {
+ switch (mMode) {
case 0:
case 1:
field_0x170c = 1;
- field_0xe2a = 2;
+ mMode = 2;
case 2:
field_0x170c = 1;
ctrlWarp();
- if (this->field_0x170c == 2) {
+ if (field_0x170c == 2) {
fopAcM_delete(this);
}
case 3:
@@ -2684,64 +3113,61 @@ int daNpc_Kn_c::teach07_warpDelete(void* param_0) {
return 1;
}
-/* 80A3203C-80A324C4 00771C 0488+00 3/0 0/0 0/0 .text ECut_secondEncount__10daNpc_Kn_cFi */
+/* 80A3203C-80A324C4 00771C 0488+00 3/0 0/0 0/0 .text ECut_secondEncount__10daNpc_Kn_cFi
+ */
int daNpc_Kn_c::ECut_secondEncount(int i_idx) {
- // NONMATCHING - need to finish second switch under case 10
- dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
- int ret = 0;
- int intP = -1;
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int rt = 0;
+ int prm = -1;
- int* intP2 = dComIfGp_evmng_getMyIntegerP(i_idx,"prm");
-
- if (intP2) {
- intP = *intP2;
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
}
if (event_manager->getIsAddvance(i_idx)) {
- switch (intP) {
+ switch (prm) {
case 0:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
break;
- case 2:
- daNpc_GWolf_c* pGWolf = (daNpc_GWolf_c*)fpcM_SearchByID(parentActorID);
-
- if (fopAcM_GetName(pGWolf) == PROC_NPC_GWOLF) {
- pGWolf->setMotion(4,-1.0f,FALSE);
+ case 2: {
+ daNpc_GWolf_c* gwolf_p = (daNpc_GWolf_c*)fpcM_SearchByID(parentActorID);
+ if (fopAcM_GetName(gwolf_p) == PROC_NPC_GWOLF) {
+ gwolf_p->setMotion(4, -1.0f, FALSE);
}
-
break;
- case 5:
- daNpc_GWolf_c* pProc = (daNpc_GWolf_c*)fpcM_SearchByID(parentActorID);
-
- if (pProc) {
- fopAcM_delete(pProc);
- };
+ }
+ case 5: {
+ daNpc_GWolf_c* gwolf_p = (daNpc_GWolf_c*)fpcM_SearchByID(parentActorID);
+ if (gwolf_p != NULL) {
+ fopAcM_delete(gwolf_p);
+ }
field_0xe2c = 0;
break;
+ }
case 10:
switch (mType) {
case 1:
- initTalk(0x2bd,0);
+ initTalk(0x2bd, NULL);
break;
case 2:
- initTalk(0x2de,0);
+ initTalk(0x2de, NULL);
break;
case 3:
- initTalk(0x2ee,0);
+ initTalk(0x2ee, NULL);
break;
case 4:
- initTalk(0x2e6,0);
+ initTalk(0x2e6, NULL);
break;
case 5:
- initTalk(0x2f7,0);
+ initTalk(0x2f7, NULL);
break;
case 6:
- initTalk(0x2ff,0);
+ initTalk(0x2ff, NULL);
break;
}
-
break;
case 20:
field_0xdec = 30;
@@ -2749,41 +3175,71 @@ int daNpc_Kn_c::ECut_secondEncount(int i_idx) {
}
}
- switch (intP) {
+ switch (prm) {
case 0:
- ret = 1;
+ rt = 1;
break;
case 2:
- ret = 1;
+ rt = 1;
break;
case 5:
- ret = 1;
+ rt = 1;
break;
case 10:
- if (talkProc(0,0,NULL,0)) {
+ if (talkProc(0, 0, NULL, 0)) {
if (mFlow.getChoiceNo() == 0) {
- int local_38 = 0;
-
+ int sp8 = 0;
switch (mType) {
case 1:
+ if (mFlow.getEventId(&sp8) == 0x1A && sp8 == 0) {
+ rt = 1;
+ } else {
+ setSceneChange(0);
+ }
break;
case 2:
+ if (mFlow.getEventId(&sp8) == 0x1A) {
+ if (sp8 == 1) {
+ rt = 1;
+ } else if (sp8 == 2) {
+ mEvtNo = 0xD;
+ evtChange();
+ }
+ } else {
+ setSceneChange(0);
+ }
break;
case 3:
+ if (mFlow.getEventId(&sp8) == 0x1A && sp8 == 3) {
+ rt = 1;
+ } else {
+ setSceneChange(0);
+ }
break;
case 4:
+ if (mFlow.getEventId(&sp8) == 0x1A) {
+ if (sp8 == 4) {
+ rt = 1;
+ } else if (sp8 == 5) {
+ mEvtNo = 0x12;
+ evtChange();
+ }
+ } else {
+ setSceneChange(0);
+ }
+ break;
+ default:
+ rt = 1;
break;
}
} else {
- break;
+ setSceneChange(0);
}
}
-
break;
case 20:
if (cLib_calcTimer(&field_0xdec) == 0) {
- ret = 1;
-
+ rt = 1;
switch (mType) {
case 1:
mActionMode = 2;
@@ -2805,293 +3261,1254 @@ int daNpc_Kn_c::ECut_secondEncount(int i_idx) {
break;
}
}
-
break;
default:
- ret = 1;
+ rt = 1;
}
- return ret;
+ return rt;
}
/* 80A324C4-80A32D30 007BA4 086C+00 3/0 0/0 0/0 .text ECut_thirdSkillExplain__10daNpc_Kn_cFi */
int daNpc_Kn_c::ECut_thirdSkillExplain(int i_idx) {
- dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
-
- int ret = 0;
- int intP = -1;
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
- int* intP2 = dComIfGp_evmng_getMyIntegerP(i_idx,"prm");
+ int rt = 0;
+ int prm = -1;
- if (intP2) {
- intP = *intP2;
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
}
if (event_manager->getIsAddvance(i_idx)) {
- switch (intP) {
- case 0:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(28,-1.0f,1,0);
- mJntAnm.lookPlayer(0);
- field_0xdec = 0x1e;
- break;
- case 10:
- field_0xdfe = 2;
- initTalk(0x2df,0);
- break;
- case 20:
- Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING,0,0);
- case 65:
- setPos(home.pos);
- setAngle(home.angle.y);
- cXyz pos(0.0f,0.0f,375.0f);
- mDoMtx_stack_c::transS(home.pos);
- mDoMtx_stack_c::YrotM(home.angle.y);
- mDoMtx_stack_c::multVec(&pos,&pos);
- cXyz pos2 = pos;
- pos2.y += 500.0f;
-
- if (fopAcM_gc_c::gndCheck(&pos2)) {
- pos.y = fopAcM_gc_c::getGroundY();
- }
-
- daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos,fopAcM_searchPlayerAngleY(this) + 0x8000,0);
- daPy_getPlayerActorClass()->onTraningCutBack();
- break;
- case 30:
- initTalk(0x2e0,0);
- break;
- case 40:
- daNpcT_offTmpBit(0xb);
- initTalk(0x2e1,0);
- break;
- case 50:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(17,-1.0f,1,0);
- break;
- case 55:
- field_0xdec = 0x1e;
- break;
- case 60:
- initTalk(0x2e1,0);
- break;
- case 70:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(24,-1.0f,1,0);
- mJntAnm.lookNone(0);
- break;
- }
- }
-
- switch (intP) {
+ switch (prm) {
case 0:
- if (cLib_calcTimer(&field_0xdec) == 0) {
- if (mTargetAngle.y == fopAcM_searchPlayerAngleY(this)) {
- ret = 1;
- mTargetPos = current.pos;
- field_0x15bc = 0;
- speedF = 0.0f;
- speed.zero();
- } else {
-
- if (step(fopAcM_searchPlayerAngleY(this),1,0x20,0x14,0) != 0) {
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,0,0);
- }
- }
-
- } else {
- calcSlip();
- }
-
- break;
- case 6:
- if (mTargetAngle.y == fopAcM_searchPlayerAngleY(this)) {
- ret = 1;
- } else {
- if (step(fopAcM_searchPlayerAngleY(this),1,0x20,0x14,0) != 0) {
- ret = 1;
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,0,0);
- }
- break;
- }
- ret = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(28, -1.0f, 1, 0);
+ mJntAnm.lookPlayer(0);
+ field_0xdec = 0x1e;
break;
case 10:
- if (talkProc(0,0,NULL,0) != 0) {
- ret = 1;
- }
+ mStepMode = 2;
+ initTalk(0x2df, 0);
break;
case 20:
- case 65:
- ret = 1;
+ Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING, 0, 0);
+ case 65: {
setPos(home.pos);
setAngle(home.angle.y);
- cXyz pos(0.0f,0.0f,375.0f);
+
+ cXyz pos(0.0f, 0.0f, 375.0f);
mDoMtx_stack_c::transS(home.pos);
mDoMtx_stack_c::YrotM(home.angle.y);
- mDoMtx_stack_c::multVec(&pos,&pos);
- cXyz pos2(pos);
+ mDoMtx_stack_c::multVec(&pos, &pos);
+
+ cXyz pos2 = pos;
pos2.y += 500.0f;
-
if (fopAcM_gc_c::gndCheck(&pos2)) {
pos.y = fopAcM_gc_c::getGroundY();
}
- daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos,fopAcM_searchPlayerAngleY(this) + 0x8000,0);
- // daPy_getPlayerActorClass()->onTraningCutBack();
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, fopAcM_searchPlayerAngleY(this) + 0x8000, 0);
+ daPy_getPlayerActorClass()->onTraningCutBack();
break;
+ }
case 30:
+ initTalk(0x2e0, NULL);
+ break;
case 40:
- if (talkProc(0,0,NULL,0) != 0) {
- ret = 1;
- }
+ daNpcT_offTmpBit(0xb);
+ initTalk(0x2e1, NULL);
break;
case 50:
- if (mMotionSeqMngr2.getNo() == 17) {
- if (mMotionSeqMngr2.getStepNo() >= 3) {
- ret = 1;
- } else {
- cXyz pos(0.0f,0.0f,0.0f);
- s16 local_98 = 0;
-
- if (mMotionSeqMngr2.getStepNo() == 0 && !(mpMorf[0]->getFrame() <= 4) && mpMorf[0]->getFrame() <= 14) {
- pos.set(13.0f,0.0f,20.0f);
-
- local_98 = cM_deg2s(-3.8f);
- }
-
- if (mMotionSeqMngr2.getStepNo() == 1) {
- if (mpMorf[0]->getFrame() <= 10) {
- pos.set(3.77f, 0.0f, 19.05f);
- local_98 = cM_deg2s(-6.76f);
- } else {
- pos.set(-13.66f, 0.0f, 19.05f);
- local_98 = cM_deg2s(-6.76f);
- }
- }
-
- mDoMtx_stack_c::YrotS(home.angle.y);
- mDoMtx_stack_c::multVec(&pos,&pos);
- pos += current.pos;
- setPos(pos);
- setAngle(current.angle.y + local_98);
- }
- }
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(17, -1.0f, 1, 0);
+ break;
+ case 55:
+ field_0xdec = 30;
break;
case 60:
- if (talkProc(0,0,NULL,0) != 0) {
- ret = 1;
- }
+ initTalk(0x2e1, NULL);
break;
case 70:
- if (mMotionSeqMngr2.getNo() == 0x18 && mMotionSeqMngr2.getStepNo() > 0) {
- ret = 1;
- mActionMode = 8;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(24, -1.0f, 1, 0);
+ mJntAnm.lookNone(0);
+ break;
+ }
+ }
+
+ switch (prm) {
+ case 0:
+ if (cLib_calcTimer(&field_0xdec) == 0) {
+ if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) {
+ rt = 1;
+ mTargetPos = current.pos;
+ field_0x15bc = 0;
+ speedF = 0.0f;
+ speed.zero();
+ } else {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ }
+ }
+ } else {
+ calcSlip();
+ }
+ break;
+ case 6:
+ if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) {
+ rt = 1;
+ } else {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ rt = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
}
break;
- default:
- ret = 1;
+ }
+ rt = 1;
+ break;
+ case 10:
+ if (talkProc(0, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 20:
+ case 65: {
+ rt = 1;
+ setPos(home.pos);
+ setAngle(home.angle.y);
+
+ cXyz pos(0.0f, 0.0f, 375.0f);
+ mDoMtx_stack_c::transS(home.pos);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&pos, &pos);
+
+ cXyz pos2(pos);
+ pos2.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&pos2)) {
+ pos.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, fopAcM_searchPlayerAngleY(this) + 0x8000, 0);
+ break;
}
+ case 30:
+ case 40:
+ if (talkProc(0, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 50:
+ if (mMotionSeqMngr.getNo() == 17) {
+ if (mMotionSeqMngr.getStepNo() >= 3) {
+ rt = 1;
+ } else {
+ cXyz pos(0.0f, 0.0f, 0.0f);
+ s16 local_98 = 0;
- return ret;
+ if (mMotionSeqMngr.getStepNo() == 0 && !(mpModelMorf[0]->getFrame() <= 4) &&
+ mpModelMorf[0]->getFrame() <= 14)
+ {
+ pos.set(13.0f, 0.0f, 20.0f);
-}
+ local_98 = cM_deg2s(-3.8f);
+ }
-// FIXME: Remove once ECut_sixthSkillExplain is decompiled:
-f32 dummy_lits_9982(int sel) {
- switch (sel) {
- case 0: return 700.0f;
- case 1: return 594.0f;
- case 2: return 165.0f;
- case 3: return 9.0f;
- default: return 138.64f;
+ if (mMotionSeqMngr.getStepNo() == 1) {
+ if (mpModelMorf[0]->getFrame() <= 10) {
+ pos.set(3.77f, 0.0f, 19.05f);
+ local_98 = cM_deg2s(-6.76f);
+ } else {
+ pos.set(-13.66f, 0.0f, 19.05f);
+ local_98 = cM_deg2s(-6.76f);
+ }
+ }
+
+ mDoMtx_stack_c::YrotS(home.angle.y);
+ mDoMtx_stack_c::multVec(&pos, &pos);
+ pos += current.pos;
+ setPos(pos);
+ setAngle(current.angle.y + local_98);
+ }
+ }
+ break;
+ case 60:
+ if (talkProc(0, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 70:
+ if (mMotionSeqMngr.getNo() == 24 && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ mActionMode = 8;
+ }
+ break;
+ default:
+ rt = 1;
}
+
+ return rt;
}
/* 80A32D30-80A33358 008410 0628+00 3/0 0/0 0/0 .text ECut_thirdSkillGet__10daNpc_Kn_cFi
*/
int daNpc_Kn_c::ECut_thirdSkillGet(int i_idx) {
- // NONMATCHING
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int sp8 = 0;
+
+ int rt = 0;
+ int prm = -1;
+
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
+ }
+
+ if (event_manager->getIsAddvance(i_idx)) {
+ switch (prm) {
+ case 0:
+ daNpcT_offTmpBit(0xB);
+ daNpcT_offTmpBit(0xC);
+ break;
+ case 4:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ if (mMotionSeqMngr.getNo() == 0x13) {
+ mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(0x10, -1.0f, 0, 0);
+ }
+ break;
+ case 6:
+ mJntAnm.lookNone(0);
+ break;
+ case 10: {
+ mStepMode = 2;
+
+ cXyz sp1C(0.0f, 0.0f, 700.0f);
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(cLib_targetAngleY(&current.pos, &home.pos));
+ mDoMtx_stack_c::multVec(&sp1C, &sp1C);
+
+ cXyz sp10(sp1C);
+ sp10.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&sp10)) {
+ sp1C.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp1C, (s16)cLib_targetAngleY(&home.pos, &current.pos), 0);
+ initTalk(0x2E5, NULL);
+ break;
+ }
+ case 12:
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ break;
+ case 15:
+ Z2GetAudioMgr()->bgmStreamPrepare(0x2000038);
+ Z2GetAudioMgr()->bgmStreamPlay();
+ break;
+ case 20:
+ initTalk(0x2E5, NULL);
+ break;
+ case 30:
+ initTalk(0x2E5, NULL);
+ break;
+ }
+ }
+ switch (prm) {
+ case 0:
+ if (speed.y <= 0.0f && mAcch.ChkGroundHit()) {
+ speedF = 0.0f;
+ speed.zero();
+
+ if (mMotionSeqMngr.getNo() == 0x12) {
+ mMotionSeqMngr.setNo(0x13, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(0xF, -1.0f, 0, 0);
+ }
+
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ setLandingPrtcl();
+ rt = 1;
+ }
+ break;
+ case 2:
+ if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 0xF) {
+ if (mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) {
+ setLandingPrtcl();
+ }
+ }
+ break;
+ case 4:
+ if ((mMotionSeqMngr.getNo() == 0x16 || mMotionSeqMngr.getNo() == 0x10) && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ }
+ break;
+ case 6:
+ if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ rt = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ }
+ } else {
+ rt = 1;
+ }
+ break;
+ case 10:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ if (field_0x170e == 0) {
+ field_0x170e = 1;
+ Z2GetAudioMgr()->bgmStop(0x32, 0);
+ }
+ }
+ break;
+ case 20:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
+ case 30:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ setSceneChange(1);
+ }
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
+ default:
+ rt = 1;
+ break;
+ }
+
+ return rt;
}
/* 80A33358-80A33D80 008A38 0A28+00 3/0 0/0 0/0 .text ECut_fourthSkillExplain__10daNpc_Kn_cFi */
int daNpc_Kn_c::ECut_fourthSkillExplain(int i_idx) {
- // NONMATCHING
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int sp8 = 0;
+
+ int rt = 0;
+ int prm = -1;
+
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
+ }
+
+ if (event_manager->getIsAddvance(i_idx)) {
+ switch (prm) {
+ case 0:
+ mActionMode = 9;
+ break;
+ case 4:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ if (mMotionSeqMngr.getNo() == 0x13) {
+ mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(16, -1.0f, 0, 0);
+ }
+ break;
+ case 6:
+ mJntAnm.lookPlayer(0);
+ break;
+ case 10:
+ mStepMode = 2;
+ initTalk(0x2EF, NULL);
+ break;
+ case 20:
+ Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING, 0, 0);
+ /* fallthrough */
+ case 65: {
+ setPos(home.pos);
+ setAngle(home.angle.y);
+
+ cXyz sp64(-10.0f, 0.0f, 375.0f);
+ mDoMtx_stack_c::transS(home.pos);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&sp64, &sp64);
+
+ cXyz sp58(sp64);
+ sp58.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&sp58)) {
+ sp64.y = fopAcM_gc_c::getGroundY();
+ }
+
+ if (prm == 20) {
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp64, fopAcM_searchPlayerAngleY(this) + 0x7254, 0);
+ daPy_getPlayerActorClass()->onTraningCutHead();
+ } else {
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp64, fopAcM_searchPlayerAngleY(this) + 0x8000, 0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 1, 0);
+ }
+ break;
+ }
+ case 30:
+ initTalk(0x2F0, NULL);
+ break;
+ case 40:
+ daNpcT_offTmpBit(0xB);
+ initTalk(0x2F1, NULL);
+ break;
+ case 50:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(13, -1.0f, 1, 0);
+ mJntAnm.lookNone(0);
+ break;
+ case 60:
+ initTalk(0x2F1, NULL);
+ break;
+ case 70:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(24, -1.0f, 1, 0);
+ mJntAnm.lookNone(0);
+ break;
+ }
+ }
+
+ switch (prm) {
+ case 0:
+ if (speed.y <= 0.0f && mAcch.ChkGroundHit()) {
+ speedF = 0.0f;
+ speed.zero();
+
+ if (mMotionSeqMngr.getNo() == 0x12) {
+ mMotionSeqMngr.setNo(19, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(15, -1.0f, 0, 0);
+ }
+
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ setLandingPrtcl();
+ rt = 1;
+ }
+ break;
+ case 2:
+ if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 0xF) {
+ if (mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) {
+ setLandingPrtcl();
+ }
+ }
+ break;
+ case 4:
+ if ((mMotionSeqMngr.getNo() == 0x16 || mMotionSeqMngr.getNo() == 0x10) && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ }
+ break;
+ case 6:
+ if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ rt = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ }
+ } else {
+ rt = 1;
+ }
+ break;
+ case 10:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 20:
+ case 65: {
+ setPos(home.pos);
+ setAngle(home.angle.y);
+
+ cXyz sp4C(-10.0f, 0.0f, 375.0f);
+ mDoMtx_stack_c::transS(home.pos);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&sp4C, &sp4C);
+
+ cXyz sp40(sp4C);
+ sp40.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&sp40)) {
+ sp4C.y = fopAcM_gc_c::getGroundY();
+ }
+
+ if (prm == 20) {
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp4C, fopAcM_searchPlayerAngleY(this) + 0x7254, 0);
+ } else {
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp4C, fopAcM_searchPlayerAngleY(this) + 0x8000, 0);
+ }
+ rt = 1;
+ break;
+ }
+ case 25:
+ rt = 1;
+ break;
+ case 30:
+ case 40:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 50:
+ if (mMotionSeqMngr.getNo() == 0xD && !mMotionSeqMngr.checkEntryNewMotion()) {
+ if (mpModelMorf[0]->isStop()) {
+ cXyz sp34(0.0f, 0.0f, 594.0f);
+ mDoMtx_stack_c::YrotS(home.angle.y);
+ mDoMtx_stack_c::multVec(&sp34, &sp34);
+ sp34 += home.pos;
+
+ setPos(sp34);
+ setAngle(home.angle.y + 0x8000);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(6, -1.0f, 1, 0);
+ }
+ } else if (mMotionSeqMngr.getNo() == 6 && !mMotionSeqMngr.checkEntryNewMotion()) {
+ rt = 1;
+ }
+ break;
+ case 60:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 70:
+ if (mMotionSeqMngr.getNo() == 0x18 && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ }
+ break;
+ default:
+ rt = 1;
+ break;
+ }
+
+ return rt;
}
/* 80A33D80-80A343A8 009460 0628+00 3/0 0/0 0/0 .text ECut_fourthSkillGet__10daNpc_Kn_cFi
*/
int daNpc_Kn_c::ECut_fourthSkillGet(int i_idx) {
- // NONMATCHING
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int sp8 = 0;
+
+ int rt = 0;
+ int prm = -1;
+
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
+ }
+
+ if (event_manager->getIsAddvance(i_idx)) {
+ switch (prm) {
+ case 0:
+ daNpcT_offTmpBit(0xB);
+ daNpcT_offTmpBit(0xC);
+ break;
+ case 4:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ if (mMotionSeqMngr.getNo() == 0x13) {
+ mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(16, -1.0f, 0, 0);
+ }
+ break;
+ case 6:
+ mJntAnm.lookNone(0);
+ break;
+ case 10: {
+ mStepMode = 2;
+
+ cXyz sp1C(0.0f, 0.0f, 700.0f);
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(cLib_targetAngleY(&current.pos, &home.pos));
+ mDoMtx_stack_c::multVec(&sp1C, &sp1C);
+
+ cXyz sp10(sp1C);
+ sp10.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&sp10)) {
+ sp1C.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp1C, (s16)cLib_targetAngleY(&home.pos, &current.pos), 0);
+ initTalk(0x2F5, NULL);
+ break;
+ }
+ case 12:
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ break;
+ case 15:
+ Z2GetAudioMgr()->bgmStreamPrepare(0x2000038);
+ Z2GetAudioMgr()->bgmStreamPlay();
+ break;
+ case 20:
+ initTalk(0x2F5, NULL);
+ break;
+ case 30:
+ initTalk(0x2F5, NULL);
+ break;
+ }
+ }
+
+ switch (prm) {
+ case 0:
+ if (speed.y <= 0.0f && mAcch.ChkGroundHit()) {
+ speedF = 0.0f;
+ speed.zero();
+
+ if (mMotionSeqMngr.getNo() == 0x12) {
+ mMotionSeqMngr.setNo(19, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(15, -1.0f, 0, 0);
+ }
+
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ setLandingPrtcl();
+ rt = 1;
+ }
+ break;
+ case 2:
+ if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 0xF) {
+ if (mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) {
+ setLandingPrtcl();
+ }
+ }
+ break;
+ case 4:
+ if ((mMotionSeqMngr.getNo() == 0x16 || mMotionSeqMngr.getNo() == 0x10) && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ }
+ break;
+ case 6:
+ if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ rt = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ }
+ } else {
+ rt = 1;
+ }
+ break;
+ case 10:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ if (field_0x170e == 0) {
+ field_0x170e = 1;
+ Z2GetAudioMgr()->bgmStop(0x32, 0);
+ }
+ }
+ break;
+ case 20:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
+ case 30:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ setSceneChange(1);
+ }
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
+ default:
+ rt = 1;
+ break;
+ }
+
+ return rt;
}
/* 80A343A8-80A34DB8 009A88 0A10+00 3/0 0/0 0/0 .text ECut_fifthSkillExplain__10daNpc_Kn_cFi */
int daNpc_Kn_c::ECut_fifthSkillExplain(int i_idx) {
- // NONMATCHING
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int sp8 = 0;
+
+ int rt = 0;
+ int prm = -1;
+
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
+ }
+
+ if (event_manager->getIsAddvance(i_idx)) {
+ switch (prm) {
+ case 0:
+ case 4:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ if (mMotionSeqMngr.getNo() == 0x13) {
+ mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(16, -1.0f, 0, 0);
+ }
+ break;
+ case 6:
+ mJntAnm.lookPlayer(0);
+ break;
+ case 10:
+ mStepMode = 2;
+ initTalk(0x2E7, NULL);
+ break;
+ case 20:
+ Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING, 0, 0);
+ /* fallthrough */
+ case 65: {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ if (prm == 20) {
+ mMotionSeqMngr.setNo(3, -1.0f, 0, 0);
+ field_0x15cd = 1;
+ } else {
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ field_0x15cd = 0;
+ }
+
+ setPos(home.pos);
+ setAngle(home.angle.y);
+
+ cXyz sp64(0.0f, 0.0f, 375.0f);
+ mDoMtx_stack_c::transS(home.pos);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&sp64, &sp64);
+
+ cXyz sp58(sp64);
+ sp58.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&sp58)) {
+ sp64.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp64, fopAcM_searchPlayerAngleY(this) + 0x8000, 0);
+ daPy_getPlayerActorClass()->onTraningCutFast();
+ break;
+ }
+ case 30:
+ initTalk(0x2E8, NULL);
+ break;
+ case 40:
+ daNpcT_offTmpBit(0xB);
+ initTalk(0x2E9, NULL);
+ break;
+ case 50:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(12, -1.0f, 1, 0);
+ mJntAnm.lookNone(0);
+ break;
+ case 60:
+ initTalk(0x2E9, NULL);
+ break;
+ case 70:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(24, -1.0f, 1, 0);
+ mJntAnm.lookNone(0);
+ break;
+ }
+ }
+
+ switch (prm) {
+ case 0:
+ if (speed.y <= 0.0f && mAcch.ChkGroundHit()) {
+ speedF = 0.0f;
+ speed.zero();
+
+ if (mMotionSeqMngr.getNo() == 0x12) {
+ mMotionSeqMngr.setNo(19, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(15, -1.0f, 0, 0);
+ }
+
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ setLandingPrtcl();
+ rt = 1;
+ }
+ break;
+ case 2:
+ if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 0xF) {
+ if (mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) {
+ setLandingPrtcl();
+ }
+ }
+ break;
+ case 4:
+ if ((mMotionSeqMngr.getNo() == 0x16 || mMotionSeqMngr.getNo() == 0x10) && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ }
+ break;
+ case 6:
+ if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ rt = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ }
+ } else {
+ rt = 1;
+ }
+ break;
+ case 10:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 20:
+ case 65: {
+ rt = 1;
+ setPos(home.pos);
+ setAngle(home.angle.y);
+
+ cXyz sp4C(0.0f, 0.0f, 375.0f);
+ mDoMtx_stack_c::transS(home.pos);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&sp4C, &sp4C);
+
+ cXyz sp40(sp4C);
+ sp40.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&sp40)) {
+ sp4C.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp4C, fopAcM_searchPlayerAngleY(this) + 0x8000, 0);
+ break;
+ }
+ case 30:
+ case 40:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 50:
+ if (mMotionSeqMngr.getNo() == 0xC && !mMotionSeqMngr.checkEntryNewMotion()) {
+ if (mpModelMorf[0]->isStop()) {
+ cXyz sp34(0.0f, 0.0f, 165.0f);
+ mDoMtx_stack_c::YrotS(home.angle.y);
+ mDoMtx_stack_c::multVec(&sp34, &sp34);
+ sp34 += home.pos;
+
+ setPos(sp34);
+ setAngle(home.angle.y);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(7, -1.0f, 1, 0);
+ } else if (mpModelMorf[0]->getFrame() >= 8.0f && mpModelMorf[0]->getFrame() < 9.0f) {
+ mpPodModel->getModelData()->getMaterialNodePointer(0)->getShape()->hide();
+ }
+ } else if (mMotionSeqMngr.getNo() == 7 && !mMotionSeqMngr.checkEntryNewMotion()) {
+ rt = 1;
+ }
+ break;
+ case 60:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 70:
+ if (mMotionSeqMngr.getNo() == 0x18 && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ mActionMode = 12;
+ }
+ break;
+ default:
+ rt = 1;
+ break;
+ }
+
+ return rt;
}
/* 80A34DB8-80A353E0 00A498 0628+00 3/0 0/0 0/0 .text ECut_fifthSkillGet__10daNpc_Kn_cFi
*/
int daNpc_Kn_c::ECut_fifthSkillGet(int i_idx) {
- // NONMATCHING
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int sp8 = 0;
+
+ int rt = 0;
+ int prm = -1;
+
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
+ }
+
+ if (event_manager->getIsAddvance(i_idx)) {
+ switch (prm) {
+ case 0:
+ daNpcT_offTmpBit(0xB);
+ daNpcT_offTmpBit(0xC);
+ break;
+ case 4:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ if (mMotionSeqMngr.getNo() == 0x13) {
+ mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(16, -1.0f, 0, 0);
+ }
+ break;
+ case 6:
+ mJntAnm.lookNone(0);
+ break;
+ case 10: {
+ mStepMode = 2;
+
+ cXyz sp1C(0.0f, 0.0f, 700.0f);
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(cLib_targetAngleY(&current.pos, &home.pos));
+ mDoMtx_stack_c::multVec(&sp1C, &sp1C);
+
+ cXyz sp10(sp1C);
+ sp10.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&sp10)) {
+ sp1C.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp1C, (s16)cLib_targetAngleY(&home.pos, &current.pos), 0);
+ initTalk(0x2ED, NULL);
+ break;
+ }
+ case 12:
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ break;
+ case 15:
+ Z2GetAudioMgr()->bgmStreamPrepare(0x2000038);
+ Z2GetAudioMgr()->bgmStreamPlay();
+ break;
+ case 20:
+ initTalk(0x2ED, NULL);
+ break;
+ case 30:
+ initTalk(0x2ED, NULL);
+ break;
+ }
+ }
+
+ switch (prm) {
+ case 0:
+ if (speed.y <= 0.0f && mAcch.ChkGroundHit()) {
+ speedF = 0.0f;
+ speed.zero();
+
+ if (mMotionSeqMngr.getNo() == 0x12) {
+ mMotionSeqMngr.setNo(19, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(15, -1.0f, 0, 0);
+ }
+
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ setLandingPrtcl();
+ rt = 1;
+ }
+ break;
+ case 2:
+ if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 0xF) {
+ if (mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) {
+ setLandingPrtcl();
+ }
+ }
+ break;
+ case 4:
+ if ((mMotionSeqMngr.getNo() == 0x16 || mMotionSeqMngr.getNo() == 0x10) && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ }
+ break;
+ case 6:
+ if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ rt = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ }
+ } else {
+ rt = 1;
+ }
+ break;
+ case 10:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ if (field_0x170e == 0) {
+ field_0x170e = 1;
+ Z2GetAudioMgr()->bgmStop(0x32, 0);
+ }
+ }
+ break;
+ case 20:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
+ case 30:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ setSceneChange(1);
+ }
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
+ default:
+ rt = 1;
+ break;
+ }
+
+ return rt;
}
/* 80A353E0-80A35D88 00AAC0 09A8+00 3/0 0/0 0/0 .text ECut_sixthSkillExplain__10daNpc_Kn_cFi */
int daNpc_Kn_c::ECut_sixthSkillExplain(int i_idx) {
- // NONMATCHING
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int sp8 = 0;
+
+ int rt = 0;
+ int prm = -1;
+
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
+ }
+
+ if (event_manager->getIsAddvance(i_idx)) {
+ switch (prm) {
+ case 0:
+ case 4:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ if (mMotionSeqMngr.getNo() == 0x13) {
+ mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(16, -1.0f, 0, 0);
+ }
+ break;
+ case 6:
+ mJntAnm.lookPlayer(0);
+ break;
+ case 10:
+ mStepMode = 2;
+ initTalk(0x2F8, NULL);
+ break;
+ case 20:
+ Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING, 0, 0);
+ /* fallthrough */
+ case 65: {
+ setPos(home.pos);
+ setAngle(home.angle.y);
+
+ cXyz sp64(0.0f, 0.0f, 375.0f);
+ mDoMtx_stack_c::transS(home.pos);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&sp64, &sp64);
+
+ cXyz sp58(sp64);
+ sp58.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&sp58)) {
+ sp64.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp64, fopAcM_searchPlayerAngleY(this) + 0x8000, 0);
+ daPy_getPlayerActorClass()->onTraningCutLargeJump();
+ break;
+ }
+ case 30:
+ initTalk(0x2F9, NULL);
+ break;
+ case 40:
+ daNpcT_offTmpBit(0xB);
+ initTalk(0x2FA, NULL);
+ break;
+ case 50:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(10, -1.0f, 1, 0);
+ mJntAnm.lookNone(0);
+ break;
+ case 60:
+ initTalk(0x2FA, NULL);
+ break;
+ case 70:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(24, -1.0f, 1, 0);
+ mJntAnm.lookNone(0);
+ break;
+ case 80:
+ field_0xdec = 0x78;
+ break;
+ }
+ }
+
+ switch (prm) {
+ case 0:
+ if (speed.y <= 0.0f && mAcch.ChkGroundHit()) {
+ speedF = 0.0f;
+ speed.zero();
+
+ if (mMotionSeqMngr.getNo() == 0x12) {
+ mMotionSeqMngr.setNo(19, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(15, -1.0f, 0, 0);
+ }
+
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ setLandingPrtcl();
+ rt = 1;
+ }
+ break;
+ case 2:
+ if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 0xF) {
+ if (mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) {
+ setLandingPrtcl();
+ }
+ }
+ break;
+ case 4:
+ if ((mMotionSeqMngr.getNo() == 0x16 || mMotionSeqMngr.getNo() == 0x10) && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ }
+ break;
+ case 6:
+ if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ rt = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ }
+ } else {
+ rt = 1;
+ }
+ break;
+ case 10:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 20:
+ case 65: {
+ setPos(home.pos);
+ setAngle(home.angle.y);
+
+ cXyz sp4C(0.0f, 0.0f, 375.0f);
+ mDoMtx_stack_c::transS(home.pos);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&sp4C, &sp4C);
+
+ cXyz sp40(sp4C);
+ sp40.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&sp40)) {
+ sp4C.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp4C, fopAcM_searchPlayerAngleY(this) + 0x8000, 0);
+ rt = 1;
+ break;
+ }
+ case 30:
+ case 40:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 50:
+ if (mMotionSeqMngr.getNo() == 10 && !mMotionSeqMngr.checkEntryNewMotion()) {
+ if (mpModelMorf[0]->isStop()) {
+ cXyz sp34(0.0f, 0.0f, 138.64f);
+ mDoMtx_stack_c::YrotS(home.angle.y);
+ mDoMtx_stack_c::multVec(&sp34, &sp34);
+ sp34 += home.pos;
+
+ setPos(sp34);
+ setAngle(home.angle.y);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, 0.0f, 1, 0);
+ }
+ } else if (mMotionSeqMngr.getNo() == 0 && !mMotionSeqMngr.checkEntryNewMotion()) {
+ rt = 1;
+ }
+ break;
+ case 60:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 70:
+ if (mMotionSeqMngr.getNo() == 0x18 && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ for (int i = 0; i < 2; i++) {
+ fopAcM_createChild(PROC_NPC_KN, fopAcM_GetID(this), ((i + 1) << 8) + 6, &current.pos, fopAcM_GetRoomNo(this), &current.angle, NULL, -1, NULL);
+ }
+ }
+ break;
+ case 80:
+ if (cLib_calcTimer(&field_0xdec) == 0) {
+ rt = 1;
+ mActionMode = 13;
+ }
+ break;
+ default:
+ rt = 1;
+ break;
+ }
+
+ return rt;
}
/* 80A35D88-80A363C0 00B468 0638+00 3/0 0/0 0/0 .text ECut_sixthSkillGet__10daNpc_Kn_cFi
*/
int daNpc_Kn_c::ECut_sixthSkillGet(int i_idx) {
- dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
-
- int ret = 0;
- int intP = -1;
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
- int* intP2 = dComIfGp_evmng_getMyIntegerP(i_idx,"prm");
+ int rt = 0;
+ int prm = -1;
- if (intP2) {
- intP = *intP2;
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
}
if (event_manager->getIsAddvance(i_idx)) {
- switch (intP) {
+ switch (prm) {
case 0:
daNpcT_offTmpBit(0xb);
daNpcT_offTmpBit(0xc);
break;
case 4:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
- if (mMotionSeqMngr2.getNo() == 0x13) {
- mMotionSeqMngr2.setNo(22,-1.0f,0,0);
+ if (mMotionSeqMngr.getNo() == 0x13) {
+ mMotionSeqMngr.setNo(22, -1.0f, 0, 0);
} else {
- mMotionSeqMngr2.setNo(16,-1.0f,0,0);
+ mMotionSeqMngr.setNo(16, -1.0f, 0, 0);
}
- fpcM_Search(s_subEnd6,this);
+
+ fpcM_Search(s_subEnd6, this);
break;
case 6:
mJntAnm.lookNone(0);
break;
- case 10:
- field_0xdfe = 2;
- cXyz pos(0.0f,0.0f,1000.0f);
+ case 10: {
+ mStepMode = 2;
+
+ cXyz pos(0.0f, 0.0f, 1000.0f);
mDoMtx_stack_c::transS(current.pos);
- mDoMtx_stack_c::YrotM(cLib_targetAngleY(&current.pos,&home.pos));
- mDoMtx_stack_c::multVec(&pos,&pos);
+ mDoMtx_stack_c::YrotM(cLib_targetAngleY(&current.pos, &home.pos));
+ mDoMtx_stack_c::multVec(&pos, &pos);
+
cXyz pos2 = pos;
pos2.y += 500.0f;
-
if (fopAcM_gc_c::gndCheck(&pos2)) {
pos.y = fopAcM_gc_c::getGroundY();
}
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, (s16)cLib_targetAngleY(&home.pos, &current.pos), 0);
- initTalk(0x2fe,NULL);
+ initTalk(0x2fe, NULL);
break;
+ }
case 12:
setAngle(fopAcM_searchPlayerAngleY(this));
break;
@@ -3100,104 +4517,428 @@ int daNpc_Kn_c::ECut_sixthSkillGet(int i_idx) {
Z2GetAudioMgr()->bgmStreamPlay();
break;
case 20:
- initTalk(0x2fe,0);
+ initTalk(0x2fe, NULL);
break;
case 30:
- initTalk(0x2fe,0);
+ initTalk(0x2fe, NULL);
}
}
- switch (intP) {
+ switch (prm) {
case 0:
if (speed.y <= 0.0f && mAcch.ChkGroundHit()) {
speedF = 0.0f;
speed.zero();
- if (mMotionSeqMngr2.getNo() == 0x12) {
- mMotionSeqMngr2.setNo(0x13, -1.0f, 0, 0);
+ if (mMotionSeqMngr.getNo() == 0x12) {
+ mMotionSeqMngr.setNo(0x13, -1.0f, 0, 0);
} else {
- mMotionSeqMngr2.setNo(15, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(15, -1.0f, 0, 0);
}
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
setLandingPrtcl();
- ret = 1;
+ rt = 1;
}
break;
case 2:
- if (mMotionSeqMngr2.getNo() == 0x13 || mMotionSeqMngr2.getNo() == 15) {
- if (mMotionSeqMngr2.getStepNo() > 0) {
- ret = 1;
- } else {
- if (mpMorf[0]->getFrame() >= 13.0f && mpMorf[0]->getFrame() < 14.0f) {
- setLandingPrtcl();
- }
+ if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 15) {
+ if (mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) {
+ setLandingPrtcl();
}
}
break;
case 4:
- if (mMotionSeqMngr2.getNo() == 22 || mMotionSeqMngr2.getNo() == 16) {
- if (mMotionSeqMngr2.getStepNo() > 0) {
- ret = 1;
+ if (mMotionSeqMngr.getNo() == 22 || mMotionSeqMngr.getNo() == 16) {
+ if (mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
}
}
break;
case 6:
- if (mTargetAngle.y != fopAcM_searchPlayerAngleY(this)) {
- if (step(fopAcM_searchPlayerAngleY(this),1,0x20,0x14,0)) {
- ret = 1;
- mMotionSeqMngr1.setNo(1, -1.0f, 0, 0);
- mMotionSeqMngr2.setNo(0, -1.0f, 0, 0);
+ if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ rt = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
}
-
} else {
- ret = 1;
+ rt = 1;
}
break;
case 10:
- if (talkProc(NULL,0,NULL,0)) {
- ret = 1;
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
if (field_0x170e == 0) {
field_0x170e = 1;
- Z2GetAudioMgr()->bgmStop(0x32,0);
- }
+ Z2GetAudioMgr()->bgmStop(0x32, 0);
+ }
}
break;
case 20:
if (talkProc(NULL, 0, NULL, 0)) {
- ret = 1;
+ rt = 1;
}
- cLib_addCalcAngleS2(&mTargetAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
- setAngle(mTargetAngle.y);
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
break;
case 30:
if (talkProc(NULL, 0, NULL, 0)) {
setSceneChange(1);
}
- cLib_addCalcAngleS2(&mTargetAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
- setAngle(mTargetAngle.y);
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
break;
default:
- ret = 1;
+ rt = 1;
}
- return ret;
-}
-
-// FIXME: remove when next func is decompiled
-f32 dummy_lit_11516(u8 val) {
- return f32(val);
+ return rt;
}
/* 80A363C0-80A36C20 00BAA0 0860+00 3/0 0/0 0/0 .text ECut_seventhSkillExplain__10daNpc_Kn_cFi */
int daNpc_Kn_c::ECut_seventhSkillExplain(int i_idx) {
- // NONMATCHING
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int sp8 = 0;
+
+ int rt = 0;
+ int prm = -1;
+
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
+ }
+
+ if (event_manager->getIsAddvance(i_idx)) {
+ switch (prm) {
+ case 0:
+ case 4:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ if (mMotionSeqMngr.getNo() == 0x13) {
+ mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(16, -1.0f, 0, 0);
+ }
+ break;
+ case 6:
+ mJntAnm.lookPlayer(0);
+ break;
+ case 10:
+ mStepMode = 2;
+ initTalk(0x300, NULL);
+ break;
+ case 20: {
+ Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING, 0, 0);
+
+ setPos(home.pos);
+ setAngle(home.angle.y);
+
+ cXyz sp64(0.0f, 0.0f, 375.0f);
+ mDoMtx_stack_c::transS(home.pos);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&sp64, &sp64);
+
+ cXyz sp58(sp64);
+ sp58.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&sp58)) {
+ sp64.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp64, fopAcM_searchPlayerAngleY(this) + 0x8000, 0);
+ daPy_getPlayerActorClass()->onTraningCutLargeTurn();
+ break;
+ }
+ case 30:
+ initTalk(0x301, NULL);
+ break;
+ case 40:
+ daNpcT_offTmpBit(0xB);
+ initTalk(0x302, NULL);
+ break;
+ case 50:
+ dComIfGp_setItemLifeCount(dComIfGs_getMaxLife(), 0);
+ dMeter2Info_onLifeGaugeSE();
+ dComIfGp_event_offHindFlag(0x10);
+ break;
+ case 55:
+ field_0xdec = 30;
+ break;
+ case 60:
+ initTalk(0x302, NULL);
+ break;
+ case 70:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(24, -1.0f, 1, 0);
+ mJntAnm.lookNone(0);
+ break;
+ case 80:
+ field_0xdec = 0x78;
+ break;
+ }
+ }
+
+ switch (prm) {
+ case 0:
+ if (speed.y <= 0.0f && mAcch.ChkGroundHit()) {
+ speedF = 0.0f;
+ speed.zero();
+
+ if (mMotionSeqMngr.getNo() == 0x12) {
+ mMotionSeqMngr.setNo(19, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(15, -1.0f, 0, 0);
+ }
+
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ setLandingPrtcl();
+ rt = 1;
+ }
+ break;
+ case 2:
+ if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 0xF) {
+ if (mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) {
+ setLandingPrtcl();
+ }
+ }
+ break;
+ case 4:
+ if ((mMotionSeqMngr.getNo() == 0x16 || mMotionSeqMngr.getNo() == 0x10) && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ }
+ break;
+ case 6:
+ if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ rt = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ }
+ } else {
+ rt = 1;
+ }
+ break;
+ case 10:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 20: {
+ setPos(home.pos);
+ setAngle(home.angle.y);
+
+ cXyz sp4C(0.0f, 0.0f, 375.0f);
+ mDoMtx_stack_c::transS(home.pos);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&sp4C, &sp4C);
+
+ cXyz sp40(sp4C);
+ sp40.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&sp40)) {
+ sp4C.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp4C, fopAcM_searchPlayerAngleY(this) + 0x8000, 0);
+ rt = 1;
+ break;
+ }
+ case 30:
+ case 40:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 50:
+ if (dMeter2Info_getNowLifeGauge() == dComIfGs_getLife()) {
+ rt = 1;
+ }
+ break;
+ case 55:
+ if (cLib_calcTimer<int>(&field_0xdec) == 0) {
+ rt = 1;
+ }
+ break;
+ case 60:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 70:
+ if (mMotionSeqMngr.getNo() == 0x18 && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ for (int i = 0; i < 2; i++) {
+ fopAcM_createChild(PROC_NPC_KN, fopAcM_GetID(this), ((i + 1) << 8) + 7, &current.pos, fopAcM_GetRoomNo(this), &current.angle, NULL, -1, NULL);
+ }
+ }
+ break;
+ case 80:
+ if (cLib_calcTimer(&field_0xdec) == 0) {
+ rt = 1;
+ mActionMode = 19;
+ }
+ break;
+ default:
+ rt = 1;
+ break;
+ }
+
+ return rt;
}
/* 80A36C20-80A372D0 00C300 06B0+00 3/0 0/0 0/0 .text ECut_seventhSkillGet__10daNpc_Kn_cFi */
int daNpc_Kn_c::ECut_seventhSkillGet(int i_idx) {
- // NONMATCHING
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+
+ int rt = 0;
+ int prm = -1;
+
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
+ }
+
+ if (event_manager->getIsAddvance(i_idx)) {
+ switch (prm) {
+ case 0:
+ daNpcT_offTmpBit(0xB);
+ daNpcT_offTmpBit(0xC);
+ daNpcT_offTmpBit(0xD);
+ break;
+ case 4:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+
+ if (mMotionSeqMngr.getNo() == 0x13) {
+ mMotionSeqMngr.setNo(22, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(16, -1.0f, 0, 0);
+ }
+
+ fpcM_Search(s_subEnd7, this);
+ break;
+ case 6:
+ mJntAnm.lookNone(0);
+ break;
+ case 10: {
+ mStepMode = 2;
+
+ cXyz pos(0.0f, 0.0f, 700.0f);
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(cLib_targetAngleY(&current.pos, &home.pos));
+ mDoMtx_stack_c::multVec(&pos, &pos);
+
+ cXyz pos2 = pos;
+ pos2.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&pos2)) {
+ pos.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, (s16)cLib_targetAngleY(&home.pos, &current.pos), 0);
+ initTalk(0x305, NULL);
+ break;
+ }
+ case 12:
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ break;
+ case 15:
+ Z2GetAudioMgr()->bgmStreamPrepare(0x2000038);
+ Z2GetAudioMgr()->bgmStreamPlay();
+ break;
+ case 20:
+ initTalk(0x305, 0);
+ break;
+ case 30:
+ initTalk(0x305, 0);
+ break;
+ case 40:
+ initTalk(0x305, NULL);
+ break;
+ }
+ }
+
+ switch (prm) {
+ case 0:
+ if (speed.y <= 0.0f && mAcch.ChkGroundHit()) {
+ speedF = 0.0f;
+ speed.zero();
+
+ if (mMotionSeqMngr.getNo() == 0x12) {
+ mMotionSeqMngr.setNo(0x13, -1.0f, 0, 0);
+ } else {
+ mMotionSeqMngr.setNo(15, -1.0f, 0, 0);
+ }
+
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ setLandingPrtcl();
+ rt = 1;
+ }
+ break;
+ case 2:
+ if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 15) {
+ if (mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) {
+ setLandingPrtcl();
+ }
+ }
+ break;
+ case 4:
+ if (mMotionSeqMngr.getNo() == 22 || mMotionSeqMngr.getNo() == 16) {
+ if (mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ }
+ }
+ break;
+ case 6:
+ if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ rt = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ }
+ } else {
+ rt = 1;
+ }
+ break;
+ case 10:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+
+ if (field_0x170e == 0) {
+ field_0x170e = 1;
+ Z2GetAudioMgr()->bgmStop(0x32, 0);
+ }
+ }
+ break;
+ case 20:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
+ case 30:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
+ case 40:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ setSceneChange(1);
+ }
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
+ default:
+ rt = 1;
+ }
+
+ return rt;
}
/* 80A372D0-80A37430 00C9B0 0160+00 1/1 0/0 0/0 .text setPrtcl__10daNpc_Kn_cFv */
@@ -3206,27 +4947,26 @@ int daNpc_Kn_c::setPrtcl() {
BOOL check = i == 2 ? TRUE : FALSE;
s8 room_no = fopAcM_GetRoomNo(this);
- csXyz* angle = mParticleMngr[i].mpModel == 1 ? &mParticleMngr[i].mAngle : NULL;
- cXyz* pos = mParticleMngr[i].mpModel == 1 ? &mParticleMngr[i].mPos : NULL;
-
-
- mParticleMngr[i].mManager.setEffectCenter(&tevStr, &mParticleMngr[i].mPos, check, 0, pos, angle, 0, room_no, 0.0f, speedF);
+ csXyz* angle = mParticleMngr[i].mpModel == true ? &mParticleMngr[i].mAngle : NULL;
+ cXyz* pos = mParticleMngr[i].mpModel == true ? &mParticleMngr[i].mPos : NULL;
- if (mParticleMngr[i].mpModel) {
- JPABaseEmitter* emitter = mParticleMngr[i].mManager.getCenterEmitter(0,0);
+ mParticleMngr[i].mManager.setEffectCenter(&tevStr, &mParticleMngr[i].mPos, check, 0, pos,
+ angle, 0, room_no, 0.0f, speedF);
- if (emitter) {
+ if (mParticleMngr[i].mpModel != NULL) {
+ JPABaseEmitter* emitter = mParticleMngr[i].mManager.getCenterEmitter(0, 0);
+ if (emitter != NULL) {
switch (i) {
case 0:
case 1:
- mParticleMngr[i].mScale.set(1.0f,1.0f,1.0f);
+ mParticleMngr[i].mScale.set(1.0f, 1.0f, 1.0f);
emitter->setAwayFromCenterSpeed(0.0f);
emitter->setRandomDirectionSpeed(0.0f);
emitter->setSpread(1.0f);
emitter->setGlobalParticleScale(mParticleMngr[i].mScale);
break;
case 2:
- mParticleMngr[i].mScale.set(2.0f,2.0f,2.0f);
+ mParticleMngr[i].mScale.set(2.0f, 2.0f, 2.0f);
break;
}
}
@@ -3240,20 +4980,19 @@ int daNpc_Kn_c::setPrtcl() {
/* 80A37430-80A37558 00CB10 0128+00 1/1 0/0 0/0 .text setSlipPrtcl__10daNpc_Kn_cFv */
int daNpc_Kn_c::setSlipPrtcl() {
- mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(0x1f));
+ mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(0x1f));
mDoMtx_stack_c::multVecZero(&mParticleMngr[0].mPos);
mParticleMngr[0].mPos.y -= 20.0f;
mParticleMngr[0].mAngle = current.angle;
mParticleMngr[0].mAngle.y -= 0x8000;
mParticleMngr[0].mpModel = true;
-
- mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(0x1b));
+
+ mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(0x1b));
mDoMtx_stack_c::multVecZero(&mParticleMngr[1].mPos);
mParticleMngr[1].mPos.y -= 20.0f;
mParticleMngr[1].mAngle = current.angle;
mParticleMngr[1].mAngle.y -= 0x8000;
mParticleMngr[1].mpModel = true;
-
return 1;
}
@@ -3261,7 +5000,7 @@ int daNpc_Kn_c::setSlipPrtcl() {
*/
int daNpc_Kn_c::setLandingPrtcl() {
mParticleMngr[2].mPos = current.pos;
- mParticleMngr[2].mAngle = mTargetAngle;
+ mParticleMngr[2].mAngle = mCurAngle;
mParticleMngr[2].mpModel = true;
return 1;
}
@@ -3270,10 +5009,12 @@ int daNpc_Kn_c::setLandingPrtcl() {
void daNpc_Kn_c::calcMagicBallPos() {
fopAc_ac_c* actor;
- if (mType == 1 && fopAcM_SearchByID(parentActorID, &actor) && actor && fopAcM_GetName(actor) == PROC_KN_BULLET && ((daObjKnBullet_c*)actor)->getActionMode() == 0) {
+ if (mType == 1 && fopAcM_SearchByID(parentActorID, &actor) && actor &&
+ fopAcM_GetName(actor) == PROC_KN_BULLET && ((daObjKnBullet_c*)actor)->getActionMode() == 0)
+ {
cXyz pos(150.0f, 0.0f, 0.0f);
- mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(13));
- mDoMtx_stack_c::multVec(&pos,&pos);
+ mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(13));
+ mDoMtx_stack_c::multVec(&pos, &pos);
actor->current.pos = pos;
}
}
@@ -3291,71 +5032,69 @@ static daNpc_Kn_Param_c l_HIO;
/* 80A37670-80A37B08 00CD50 0498+00 1/1 0/0 0/0 .text setSwordChargePtcl__10daNpc_Kn_cFv
*/
+// NONMATCHING - reg alloc
void daNpc_Kn_c::setSwordChargePtcl() {
- // NONMATCHING
- if (mMotionSeqMngr2.getNo() == 10 && mMotionSeqMngr2.getStepNo() == 0 && !mMotionSeqMngr2.checkEntryNewMotion()) {
- f32 frame = mpMorf[0]->getFrame();
- if (frame >= 17.0f || frame < 37.0f) {
- static cXyz lightAParticleScale(1.5223,1.3f,1.3f);
+ JPABaseEmitter* emitter;
+
+ if (mMotionSeqMngr.getNo() == 10 && mMotionSeqMngr.getStepNo() == 0 &&
+ !mMotionSeqMngr.checkEntryNewMotion())
+ {
+ f32 frame = mpModelMorf[0]->getFrame();
+ if (frame >= 17.0f && frame < 37.0f) {
+ static cXyz lightAParticleScale(1.5223f, 1.3f, 1.3f);
static cXyz lightALocalTrans(88.399994f, 0.0f, 0.0f);
- field_0x15d4[0] = dComIfGp_particle_set(field_0x15d4[0],0x368, &current.pos, &tevStr);
- JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(field_0x15d4[0]);
+ f32 temp_f29 = 156.0f;
+ f32 var_f30 = frame;
- if (emitter) {
- emitter->setGlobalRTMatrix(mpMorf[0]->getModel()->getAnmMtx(0xd));
- emitter->setGlobalParticleScale(lightAParticleScale); // may need a tvec cast here
+ field_0x15d4[0] = dComIfGp_particle_set(field_0x15d4[0], 0x368, &current.pos, &tevStr);
+
+ emitter = dComIfGp_particle_getEmitter(field_0x15d4[0]);
+ if (emitter != NULL) {
+ emitter->setGlobalRTMatrix(mpModelMorf[0]->getModel()->getAnmMtx(0xd));
+ emitter->setGlobalParticleScale(lightAParticleScale);
emitter->setLocalTranslation(lightALocalTrans);
}
- cXyz pos1;
- cXyz pos2;
-
- mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(0xd));
- mDoMtx_stack_c::multVecSR(&pos1.BaseX,&pos1);
- mDoMtx_stack_c::multVecZero(&pos2);
+ cXyz sp50;
+ cXyz sp44;
+ mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(0xd));
+ mDoMtx_stack_c::multVecSR(&cXyz::BaseX, &sp50);
+ mDoMtx_stack_c::multVecZero(&sp44);
- f32 frame_copy = frame;
- if (frame >= 31.0f)
- frame_copy = 31.0f;
+ if (var_f30 >= 31.0f)
+ var_f30 = 31.0f;
- pos1 *= (frame_copy + 1.0f) - 17.0f;
- pos1 += 10.4;
- pos1 += pos2;
-
- field_0x15d4[1] = dComIfGp_particle_set(field_0x15d4[1],0x36a, &pos1, &tevStr);
+ sp50 = sp44 + (sp50 * ((var_f30 + 1.0f) - 17.0f)) * (temp_f29 / 15.0f);
+ field_0x15d4[1] = dComIfGp_particle_set(field_0x15d4[1], 0x36a, &sp50, &tevStr);
if (frame >= 31.0f) {
- field_0x15d4[2] = dComIfGp_particle_set(field_0x15d4[2],0x36b, &pos1, &tevStr);
+ field_0x15d4[2] = dComIfGp_particle_set(field_0x15d4[2], 0x36b, &sp50, &tevStr);
}
-
} else {
- JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(field_0x15d4[0]);
+ emitter = dComIfGp_particle_getEmitter(field_0x15d4[0]);
+ if (emitter != NULL) {
+ u8 temp_r3_3 = emitter->getGlobalAlpha();
+ if (temp_r3_3 > 17) {
+ field_0x15d4[0] = dComIfGp_particle_set(field_0x15d4[0], 0x368, &current.pos, &tevStr);
- if (emitter) {
- if (emitter->getGlobalAlpha() < 0x12) {
- emitter->setGlobalAlpha(0);
- } else {
- field_0x15d4[0] = dComIfGp_particle_set(field_0x15d4[0],0x368, &current.pos, &tevStr);
emitter = dComIfGp_particle_getEmitter(field_0x15d4[0]);
-
- if (emitter) {
- emitter->setGlobalRTMatrix(mpMorf[0]->getModel()->getAnmMtx(0xd));
- emitter->setGlobalAlpha(emitter->getGlobalAlpha() - 0x11);
-
+ if (emitter != NULL) {
+ emitter->setGlobalRTMatrix(mpModelMorf[0]->getModel()->getAnmMtx(0xd));
+ emitter->setGlobalAlpha(temp_r3_3 - 17);
}
+ } else {
+ emitter->setGlobalAlpha(0);
}
}
emitter = dComIfGp_particle_getEmitter(field_0x15d4[1]);
-
- if (emitter) {
+ if (emitter != NULL) {
emitter->stopDrawParticle();
}
emitter = dComIfGp_particle_getEmitter(field_0x15d4[2]);
-
- if (emitter) {
+ if (emitter != NULL) {
emitter->stopDrawParticle();
}
}
@@ -3377,34 +5116,56 @@ void daNpc_Kn_c::calcSlip() {
pos -= current.pos;
speed.x = pos.x;
speed.z = pos.z;
- f32 absxz = (mTargetPos - current.pos).absXZ();
+ f32 absxz = (mTargetPos - current.pos).absXZ();
if (absxz > 25.0f) {
setSlipPrtcl();
- } else {
- if (absxz < 5.0f) {
- field_0x15bc = 0;
- speed.x = 0.0f;
- speed.z = 0.0f;
- }
+ } else if (absxz < 5.0f) {
+ field_0x15bc = 0;
+ speed.x = 0.0f;
+ speed.z = 0.0f;
}
}
}
}
-// FIXME: Remove when following func is decompiled:
-f32 dummy_lit_12656() {
- return 250.0f;
-}
-
/* 80A37D20-80A3805C 00D400 033C+00 9/9 0/0 0/0 .text calcSwordAttackMove__10daNpc_Kn_cFi
*/
void daNpc_Kn_c::calcSwordAttackMove(int param_0) {
- // NONMATCHING
+ f32 temp_f31 = (daPy_getPlayerActorClass()->current.pos - current.pos).absXZ();
+ if (cLib_calcTimer<s16>(&field_0x15d0) == 1 && field_0x15bc == 0) {
+ if (temp_f31 < 250.0f) {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x19, -1.0f, 1, 0);
+ } else {
+ field_0x15d0 = 2;
+ }
+ }
+
+ if (field_0x15bc == 0 && field_0x15ce == 0 && (mMotionSeqMngr.getNo() != 0x1B || mMotionSeqMngr.getStepNo()) && temp_f31 > 250.0f) {
+ speedF = daNpc_Kn_Param_c::m.move_speed;
+ } else {
+ speedF = 0.0f;
+ if (field_0x15bc == 0) {
+ speed.zero();
+ }
+ }
+
+ if (field_0x15ce == 0) {
+ if (param_0) {
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ } else {
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), daNpc_Kn_Param_c::m.rotation_num, daNpc_Kn_Param_c::m.rotation_speed);
+ }
+
+ setAngle(mCurAngle.y);
+ mJntAnm.lookPlayer(0);
+ } else {
+ mJntAnm.lookNone(0);
+ }
}
/* 80A3805C-80A38450 00D73C 03F4+00 2/1 0/0 0/0 .text setSe__10daNpc_Kn_cFv */
-// NONMATCHING - case 12 is wrong
void daNpc_Kn_c::setSe() {
if (field_0xe2c == 0) {
switch (field_0x15A8) {
@@ -3419,62 +5180,64 @@ void daNpc_Kn_c::setSe() {
case 30:
case 31:
case 33:
- mCreature.startCreatureVoiceLevel(Z2SE_KN_V_BREATH,-1);
+ mSound.startCreatureVoiceLevel(Z2SE_KN_V_BREATH, -1);
break;
- case 4:
- if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) {
- mCreature.startCreatureVoice(Z2SE_KN_V_GUARD,-1);
+ case 5:
+ if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) {
+ mSound.startCreatureVoice(Z2SE_KN_V_GUARD, -1);
}
break;
- case 5:
- if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) {
- mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_S,-1);
+ case 7:
+ if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) {
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_S, -1);
}
break;
case 6:
- if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) {
- mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_M,-1);
+ if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) {
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_M, -1);
}
break;
- case 7:
- if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) {
- mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L,-1);
+ case 16:
+ if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) {
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
}
break;
- case 12:
- if (mpMorf[0]->getFrame() >= 4.0f && mpMorf[0]->getFrame() < 5.0f) {
- mCreature.startCreatureVoice(Z2SE_KN_V_BALL_READY,-1);
- } else if (mpMorf[1]->getFrame() >= 27.0f && mpMorf[1]->getFrame() < 28.0f) {
- if (mActionMode == 7) {
- mCreature.startCreatureVoice(Z2SE_KN_V_BALL_READY,-1);
- } else {
- mCreature.startCreatureVoice(Z2SE_KN_V_BALL_THROW,-1);
- }
+ case 4:
+ if (mpModelMorf[0]->getFrame() >= 4.0f && mpModelMorf[0]->getFrame() < 5.0f) {
+ mSound.startCreatureVoice(Z2SE_KN_V_ATTACK, -1);
}
break;
- case 16:
- if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) {
- mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L,-1);
+ case 12:
+ if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) {
+ if (mActionMode == 7) {
+ mSound.startCreatureVoice(Z2SE_KN_V_BALL_READY, -1);
+ }
+ } else if (mpModelMorf[0]->getFrame() >= 27.0f && mpModelMorf[0]->getFrame() < 28.0f) {
+ if (mActionMode == 7) {
+ mSound.startCreatureVoice(Z2SE_KN_V_BALL_THROW, -1);
+ } else {
+ mSound.startCreatureVoice(Z2SE_KN_V_ATTACK, -1);
+ }
}
break;
case 20:
- if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) {
- mCreature.startCreatureVoice(Z2SE_KN_V_SOTOMOGIRI,-1);
+ if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) {
+ mSound.startCreatureVoice(Z2SE_KN_V_SOTOMOGIRI, -1);
}
break;
case 28:
- if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) {
- mCreature.startCreatureVoice(Z2SE_KN_V_KABUTOWARI,-1);
+ if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) {
+ mSound.startCreatureVoice(Z2SE_KN_V_KABUTOWARI, -1);
}
break;
case 32:
- if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) {
- mCreature.startCreatureVoice(Z2SE_KN_V_IAIGIRI,-1);
+ if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) {
+ mSound.startCreatureVoice(Z2SE_KN_V_IAIGIRI, -1);
}
break;
case 34:
- if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) {
- mCreature.startCreatureVoice(Z2SE_KN_V_JUMP_ATTACK_L,-1);
+ if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) {
+ mSound.startCreatureVoice(Z2SE_KN_V_JUMP_ATTACK_L, -1);
}
break;
}
@@ -3482,813 +5245,57 @@ void daNpc_Kn_c::setSe() {
}
/* 80A38450-80A38470 00DB30 0020+00 1/0 0/0 0/0 .text daNpc_Kn_Create__FPv */
-static void daNpc_Kn_Create(void* i_actor) {
- static_cast<daNpc_Kn_c*>(i_actor)->create();
+static int daNpc_Kn_Create(void* i_this) {
+ return ((daNpc_Kn_c*)i_this)->create();
}
/* 80A38470-80A38490 00DB50 0020+00 1/0 0/0 0/0 .text daNpc_Kn_Delete__FPv */
-static void daNpc_Kn_Delete(void* i_actor) {
- static_cast<daNpc_Kn_c*>(i_actor)->Delete();
+static int daNpc_Kn_Delete(void* i_this) {
+ return ((daNpc_Kn_c*)i_this)->Delete();
}
/* 80A38490-80A384B0 00DB70 0020+00 1/0 0/0 0/0 .text daNpc_Kn_Execute__FPv */
-static void daNpc_Kn_Execute(void* i_actor) {
- static_cast<daNpc_Kn_c*>(i_actor)->Execute();
+static int daNpc_Kn_Execute(void* i_this) {
+ return ((daNpc_Kn_c*)i_this)->Execute();
}
/* 80A384B0-80A384D0 00DB90 0020+00 1/0 0/0 0/0 .text daNpc_Kn_Draw__FPv */
-static void daNpc_Kn_Draw(void* i_actor) {
- static_cast<daNpc_Kn_c*>(i_actor)->Draw();
+static int daNpc_Kn_Draw(void* i_this) {
+ return ((daNpc_Kn_c*)i_this)->Draw();
}
/* 80A384D0-80A384D8 00DBB0 0008+00 1/0 0/0 0/0 .text daNpc_Kn_IsDelete__FPv */
-static bool daNpc_Kn_IsDelete(void* param_0) {
- return true;
-}
-
-/* 80A3B720-80A3B724 010E00 0004+00 1/0 0/0 0/0 .text afterJntAnm__10daNpc_Kn_cFi */
-void daNpc_Kn_c::afterJntAnm(int param_0) {
- /* empty function */
-}
-
-/* 80A3B79C-80A3B7A4 010E7C 0008+00 1/0 0/0 0/0 .text evtEndProc__10daNpc_Kn_cFv */
-BOOL daNpc_Kn_c::evtEndProc() {
- return TRUE;
-}
-
-/* 80A3B7A4-80A3B7AC 010E84 0008+00 1/0 0/0 0/0 .text checkChangeEvt__10daNpc_Kn_cFv */
-BOOL daNpc_Kn_c::checkChangeEvt() {
- return FALSE;
-}
-
-/* 80A3B7AC-80A3B7B4 010E8C 0008+00 1/0 0/0 0/0 .text getFootRJointNo__10daNpc_Kn_cFv */
-s32 daNpc_Kn_c::getFootRJointNo() {
- return -1;
-}
-
-/* 80A3B7B4-80A3B7BC 010E94 0008+00 1/0 0/0 0/0 .text getFootLJointNo__10daNpc_Kn_cFv */
-s32 daNpc_Kn_c::getFootLJointNo() {
- return -1;
-}
-
-/* 80A3B7BC-80A3B7C4 010E9C 0008+00 1/0 0/0 0/0 .text chkXYItems__10daNpc_Kn_cFv */
-BOOL daNpc_Kn_c::chkXYItems() {
- return false;
-}
-
-/* 80A3B7C4-80A3B7CC 010EA4 0008+00 1/0 0/0 0/0 .text afterSetFaceMotionAnm__10daNpc_Kn_cFiifi */
-bool daNpc_Kn_c::afterSetFaceMotionAnm(int param_0, int param_1, f32 param_2, int param_3) {
- return true;
-}
-
-/* 80A3B82C-80A3BD14 010F0C 04E8+00 1/1 0/0 0/0 .text
- * __ct__10daNpc_Kn_cFPC26daNpcT_faceMotionAnmData_cPC22daNpcT_motionAnmData_cPCQ222daNpcT_MotionSeqMngr_c18sequenceStepData_ciPCQ222daNpcT_MotionSeqMngr_c18sequenceStepData_ciPC16daNpcT_evtData_cPPc
- */
- // NONMATCHING - missing something instructions / regalloc
-daNpc_Kn_c::daNpc_Kn_c(daNpcT_faceMotionAnmData_c const* param_0,
- daNpcT_motionAnmData_c const* param_1,
- daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_2, int param_3,
- daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_4, int param_5,
- daNpcT_evtData_c const* param_6, char** param_7) :
- // daNpcT_c(param_0, param_1, param_2, param_3, param_4, param_5, param_6, param_7) {
- mpFaceMotionAnmData(param_0),
- mpMotionAnmData(param_1), mMotionSeqMngr1(param_2, param_3),
- mMotionSeqMngr2(param_4, param_5),
- mpEventData(param_6),
- field_0x5B8(param_7) {
- initialize();
-}
-
-/* 80A3BD14-80A3BD1C 0113F4 0008+00 1/0 0/0 0/0 .text getEyeballMaterialNo__10daNpc_Kn_cFv */
-u16 daNpc_Kn_c::getEyeballMaterialNo() {
- return false;
-}
-
-/* 80A3BD1C-80A3BD24 0113FC 0008+00 1/0 0/0 0/0 .text getEyeballLMaterialNo__10daNpc_Kn_cFv */
-u16 daNpc_Kn_c::getEyeballLMaterialNo() {
- return false;
-}
-
-/* 80A3BD24-80A3BD2C 011404 0008+00 1/0 0/0 0/0 .text getEyeballRMaterialNo__10daNpc_Kn_cFv */
-u16 daNpc_Kn_c::getEyeballRMaterialNo() {
- return false;
-}
-
-/* 80A3C124-80A3C16C 011804 0048+00 2/1 0/0 0/0 .text __dt__16daNpc_Kn_Param_cFv */
-// daNpc_Kn_Param_c::~daNpc_Kn_Param_c() {}
-
-// FIXME: The following funcs may be in their own inc file?
-
-/* 80A3C998-80A3CB14 012078 017C+00 1/1 0/0 0/0 .text setParamTeach01__10daNpc_Kn_cFv */
-u32 daNpc_Kn_c::setParamTeach01() {
- s16 field48 = daNpc_Kn_Param_c::m.common.talk_distance;
- s16 field4a = daNpc_Kn_Param_c::m.common.talk_angle;
- s16 field4c = daNpc_Kn_Param_c::m.common.attention_distance;
- s16 field4e = daNpc_Kn_Param_c::m.common.attention_angle;
-
- switch(mActionMode) {
- case 0:
- attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e);
- attention_info.distances[2] = 0xe4;
- attention_info.distances[1] = attention_info.distances[0];
- attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a);
- return 0;
- case 1:
- if (field_0x170c != 0) {
- return 0;
- }
- case 2:
- attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e);
- attention_info.distances[2] = 0xe4;
- attention_info.distances[1] = attention_info.distances[0];
- attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a);
- mAcchCir.SetWallR(daNpc_Kn_Param_c::m.common.width);
- mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length);
- return 4;
- case 3:
- attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e);
- attention_info.distances[2] = 0xe4;
- attention_info.distances[1] = attention_info.distances[0];
- attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a);
- mAcchCir.SetWallR(135.0f);
- mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length);
- return 4;
- }
-
- return 10;
-}
-
-/* 80A3CB14-80A3CBFC 0121F4 00E8+00 1/1 0/0 0/0 .text setCollisionTeach01__10daNpc_Kn_cFv
- */
-void daNpc_Kn_c::setCollisionTeach01() {
- switch (mActionMode) {
- case 0:
- break;
- case 1:
- mCylCc.SetTgType(-1);
- mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2);
- mCylCc.SetTgSPrm(0x13);
- mCylCc.OnTgNoConHit();
-
- if (field_0x170c == 0) {
- mCylCc.OnTgShield();
- } else {
- mCylCc.OffTgShield();
- }
- break;
- case 2:
- mCylCc.SetTgType(-1);
- mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1);
- mCylCc.SetTgSPrm(0x13);
- mCylCc.OffTgShield();
- mCylCc.OffTgNoAtHitInfSet();
- mCylCc.OnTgNoConHit();
- mCylCc.OnCoSetBit();
- break;
- case 3:
- mCylCc.OffTgSetBit();
- mCylCc.OffCoSetBit();
- break;
- }
-}
-
-/* 80A3CBFC-80A3CCC0 0122DC 00C4+00 1/1 0/0 0/0 .text teach01_selectAction__10daNpc_Kn_cFv */
-void daNpc_Kn_c::teach01_selectAction() {
- switch(mActionMode) {
- case 0:
- mpTeachAction = &daNpc_Kn_c::teach01_start;
- return;
- case 1:
- mpTeachAction = &daNpc_Kn_c::teach01_attackWait;
- return;
- case 2:
- mpTeachAction = &daNpc_Kn_c::teach01_swordAttackWait;
- return;
- case 3:
- mpTeachAction = &daNpc_Kn_c::teach01_swordFinishWait;
- return;
- }
-
- mpTeachAction = &daNpc_Kn_c::wait;
- return;
-}
-
-/* 80A3CCC0-80A3CDFC 0123A0 013C+00 1/0 0/0 0/0 .text teach01_start__10daNpc_Kn_cFPv */
-int daNpc_Kn_c::teach01_start(void* param_0) {
- switch(field_0xe2a) {
- case 0:
- case 1:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,0,0);
- mJntAnm.lookPlayer(0);
- field_0xe2a = 2;
- case 2:
- mEvtIdx = 5;
- field_0xe39 = 1;
- cLib_addCalcAngleS2(&mTargetAngle.y,fopAcM_searchPlayerAngleY(this),2,0x800);
- setAngle(mTargetAngle.y);
- case 3:
- default:
- return 1;
- }
-}
-
-/* 80A3CDFC-80A3CF78 0124DC 017C+00 1/0 0/0 0/0 .text teach01_attackWait__10daNpc_Kn_cFPv
- */
-int daNpc_Kn_c::teach01_attackWait(void* param_0) {
- switch(field_0xe2a) {
- case 0:
- case 1:
- mMotionSeqMngr2.setNo(9,-1.0f,1,0);
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mJntAnm.lookPlayer(0);
- field_0xe2a = 2;
- case 2:
- if (!ctrlWarp()) {
- cLib_addCalcAngleS2(&mTargetAngle.y,fopAcM_searchPlayerAngleY(this),2,0x800);
- setAngle(mTargetAngle.y);
- if (mCylCc.ChkTgHit()) {
-
- mEvtIdx = 6;
- field_0x16f4.set(1.0f,1.0f,1.0f);
- field_0x170c = 0;
- field_0x170d = 0;
- mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x28);
- }
- }
- case 3:
- default:
- return 1;
- }
-}
-
-/* 80A3CF78-80A3D32C 012658 03B4+00 1/0 0/0 0/0 .text teach01_swordAttackWait__10daNpc_Kn_cFPv */
-int daNpc_Kn_c::teach01_swordAttackWait(void* param_0) {
- switch(field_0xe2a) {
- case 0:
- case 1:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(9,-1.0f,0,0);
- mJntAnm.lookPlayer(0);
- field_0xdec = daNpc_Kn_Param_c::m.field_0x8e;
- mTargetPos = current.pos;
- field_0x15bc = 0;
- field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.field_0xac,
- daNpc_Kn_Param_c::m.field_0xae);
- speedF = 0.0f;
- speed.zero();
- field_0xe2a = 2;
- case 2:
- calcSlip();
- mCcStts.Move();
- if (mCylCc.ChkTgHit()) {
- int cut_type = daPy_getPlayerActorClass()->getCutType();
- if (cut_type == daPy_py_c::CUT_TYPE_JUMP || cut_type == daPy_py_c::CUT_TYPE_TURN_RIGHT || cut_type == daPy_py_c::CUT_TYPE_TURN_LEFT || daPy_getPlayerActorClass()->getCutCount() >= 4) {
- mActionMode = 0x3;
- setAngle(fopAcM_searchPlayerAngleY(this));
- speedF = -daNpc_Kn_Param_c::m.field_0xa0;
- speed.y = daNpc_Kn_Param_c::m.field_0xa4;
- mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x1f);
- } else {
- fopAc_ac_c* hit_ac = mCylCc.GetTgHitAc();
- s16 angle = cLib_targetAngleY(&hit_ac->current.pos,&current.pos);
- cXyz pos(0.0f,0.0f,daNpc_Kn_Param_c::m.field_0x94);
- mDoMtx_stack_c::YrotS(angle);
- mDoMtx_stack_c::multVec(&pos,&mTargetPos);
- mTargetPos += current.pos;
- field_0x15bc = 1;
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0x1f,-1.0f,1,0);
- mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x1e);
- }
- } else {
- if (cLib_calcTimer(&field_0xdec) == 0 || checkCollisionSword()) {
- mTargetPos = current.pos;
- int check = 0;
-
- if (dComIfGp_getAttention()->LockonTruth()) {
- check = 1;
- }
-
- checkCollisionSword() != 0 ? mEvtIdx = 4 : mEvtIdx = 1;
-
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,1,0);
-
- check != 0 ?mFlowNodeNo = 0x2da: mFlowNodeNo = 0x2db;
-
- } else {
- calcSwordAttackMove(1);
- }
-
-
- }
- case 3:
- default:
- return 1;
- }
-}
-
-/* 80A3D32C-80A3D6D8 012A0C 03AC+00 1/0 0/0 0/0 .text teach01_swordFinishWait__10daNpc_Kn_cFPv */
-int daNpc_Kn_c::teach01_swordFinishWait(void* param_0) {
- switch(field_0xe2a) {
- case 0:
- case 1:
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0x12,-1.0f,0,0);
- mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
- mJntAnm.lookNone(0);
- field_0xdec = daNpc_Kn_Param_c::m.field_0x8e;
- field_0xe2a = 2;
- case 2:
- mTargetPos = current.pos;
- int no = mMotionSeqMngr2.getNo();
- if (no == 0x12) {
- if (speed.y <= 0.0f && mAcch.ChkGroundHit()) {
- speedF = 0.0f;
- speed.zero();
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0x13,-1.0f,0,0);
- setLandingPrtcl();
- }
- } else if (no == 0x13) {
- if (mMotionSeqMngr2.getStepNo() == 0) {
- if (mpMorf[0]->getFrame() >= 13.0f && mpMorf[0]->getFrame() < 14.0f) {
- setLandingPrtcl();
- }
- } else {
- // both downFlg inlines are generating extra instructions?
- // if (!checkDownFlg())
- if (!(mFlags & 0x1)) {
- cXyz pos(10.0f,0.0f,0.0f);
- mFlags |= 1;
- // onDownFlg();
- u8 backbone_joint = getBackboneJointNo();
- J3DModel* model = mpMorf[0]->getModel();
- mDoMtx_stack_c::copy(model->getAnmMtx(backbone_joint));
- mDoMtx_stack_c::multVec(&pos,&field_0x15c0);
- setDownPos(&field_0x15c0);
- } else {
- if (checkCutDownHitFlg()) {
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0x14,-1.0f,0,0);
-
- if (mType == 0) {
- mEvtIdx = 7;
- } else if (mType == 1) {
- mEvtIdx = 9;
- }
-
- mCreature.startCollisionSE(Z2SE_HIT_SWORD_STAB,0x1e);
- break;
- }
- }
- }
- }
-
- if (cLib_calcTimer(&field_0xdec) == 0) {
- if (daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_DOWN) {
- offDownFlg();
- mTargetPos = current.pos;
- mEvtIdx = 3;
- mFlowNodeNo = 0x2dc;
- mActionMode = 2;
- }
- }
- case 3:
- default:
- break;
- }
-
+static int daNpc_Kn_IsDelete(void* i_this) {
return 1;
}
-// FIXME: Remove once ctrlWarp is decompiled:
-f32 dummy_lits_12626(int sel) {
- switch (sel) {
- case 0: return 600.0f;
- default: return 100.0f;
- }
-}
-
-/* 80A3D6D8-80A3DCEC 012DB8 0614+00 3/3 0/0 0/0 .text ctrlWarp__10daNpc_Kn_cFv */
-int daNpc_Kn_c::ctrlWarp() {
- // NONMATCHING
-}
-
-/* 80A3DCEC-80A3DEC4 0133CC 01D8+00 1/0 0/0 0/0 .text ECut_firstEncount__10daNpc_Kn_cFi
- */
-int daNpc_Kn_c::ECut_firstEncount(int param_0) {
- // NONMATCHING
-}
-
-/* 80A3DEC4-80A3E550 0135A4 068C+00 1/0 0/0 0/0 .text ECut_attackFailed__10daNpc_Kn_cFi
- */
-int daNpc_Kn_c::ECut_attackFailed(int param_0) {
- // NONMATCHING
-}
-
-/* 80A3E550-80A3EB84 013C30 0634+00 3/0 0/0 0/0 .text ECut_firstSkillGet__10daNpc_Kn_cFi
- */
-int daNpc_Kn_c::ECut_firstSkillGet(int param_0) {
- // NONMATCHING
-}
-
-/* 80A3EB84-80A3EE38 014264 02B4+00 1/1 0/0 0/0 .text setParamTeach02__10daNpc_Kn_cFv */
-u32 daNpc_Kn_c::setParamTeach02() {
- s16 field48 = daNpc_Kn_Param_c::m.common.talk_distance;
- s16 field4a = daNpc_Kn_Param_c::m.common.talk_angle;
- s16 field4c = daNpc_Kn_Param_c::m.common.attention_distance;
- s16 field4e = daNpc_Kn_Param_c::m.common.attention_angle;
- f32 radius = daNpc_Kn_Param_c::m.common.attention_offset;
- f32 height = daNpc_Kn_Param_c::m.common.height;
-
- switch(mActionMode) {
- case 7:
- case 6:
- attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e);
- attention_info.distances[2] = 0xe4;
- attention_info.distances[1] = attention_info.distances[0];
- attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a);
- return 4;
- case 5:
- attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e);
- attention_info.distances[2] = 0xe4;
- attention_info.distances[1] = attention_info.distances[0];
- attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a);
- cXyz pos;
- mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getBackboneJointNo()));
- mDoMtx_stack_c::multVecZero(&pos);
-
- f32 absxz = (daPy_getPlayerActorClass()->current.pos - pos).absXZ();
-
- if (absxz < 255.0f) {
- return 0x200004;
- } else {
- return 4;
- }
- case 4:
- attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e);
- attention_info.distances[2] = 0xe4;
- attention_info.distances[1] = attention_info.distances[0];
- attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a);
- mAcchCir.SetWallR(daNpc_Kn_Param_c::m.common.width);
- mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length);
- return 0;
- }
-
- return 10;
-}
-
-/* 80A3EE38-80A3EF1C 014518 00E4+00 1/1 0/0 0/0 .text setCollisionTeach02__10daNpc_Kn_cFv
- */
-void daNpc_Kn_c::setCollisionTeach02() {
- switch (mActionMode) {
- case 4:
- break;
- case 5:
- mCylCc.SetTgType(-1);
- mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2);
- mCylCc.SetTgSPrm(0x13);
- mCylCc.OnTgShield();
- mCylCc.OffTgNoAtHitInfSet();
- mCylCc.OnTgNoConHit();
- break;
- case 6:
- mCylCc.SetTgType(-1);
- mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1);
- mCylCc.SetTgSPrm(0x13);
- mCylCc.OffTgShield();
- mCylCc.OffTgNoAtHitInfSet();
- mCylCc.OnTgNoConHit();
- break;
- case 7:
- mCylCc.SetTgType(-1);
- mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2);
- mCylCc.SetTgSPrm(0x13);
- mCylCc.OffTgShield();
- mCylCc.OnTgNoConHit();
- break;
- }
-}
+#include "d/actor/d_a_npc_kn_teach01.inc"
-/* 80A3EF1C-80A3EFE0 0145FC 00C4+00 1/1 0/0 0/0 .text teach02_selectAction__10daNpc_Kn_cFv */
-void daNpc_Kn_c::teach02_selectAction() {
- switch(mActionMode) {
- case 4:
- mpTeachAction = &daNpc_Kn_c::teach02_start;
- return;
- case 5:
- mpTeachAction = &daNpc_Kn_c::teach02_shieldBashWait;
- return;
- case 6:
- mpTeachAction = &daNpc_Kn_c::teach02_finishWait;
- return;
- case 7:
- mpTeachAction = &daNpc_Kn_c::teach02_shieldReflectWait;
- return;
- }
-
- mpTeachAction = &daNpc_Kn_c::wait;
- return;
-}
-
-/* 80A3EFE0-80A3F358 0146C0 0378+00 1/0 0/0 0/0 .text teach02_shieldBashWait__10daNpc_Kn_cFPv */
-int daNpc_Kn_c::teach02_shieldBashWait(void* param_0) {
- switch(field_0xe2a) {
- case 0:
- case 1:
- mMotionSeqMngr1.setNo(1, -1.0f, 0, 0);
- mMotionSeqMngr2.setNo(9, -1.0f, 0, 0);
- mJntAnm.lookPlayer(0);
- field_0xdec = daNpc_Kn_Param_c::m.field_0x8e;
- mTargetPos = current.pos;
- field_0x15bc = 0;
- field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.field_0xac,
- daNpc_Kn_Param_c::m.field_0xae);
- speedF = 0.0f;
- speed.zero();
- field_0xe2a = 2;
- case 2:
- mCcStts.Move();
-
- if (mCylCc.ChkTgShieldHit()) {
- u8 cut_type = daPy_getPlayerActorClass()->getCutType();
-
- if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) {
- s16 angle = cLib_targetAngleY(&daPy_getPlayerActorClass()->current.pos, &attention_info.position);
- cXyz pos(0.0f,0.0f,daNpc_Kn_Param_c::m.field_0x94);
-
- mDoMtx_stack_c::YrotS(angle);
- mDoMtx_stack_c::multVec(&pos,&mTargetPos);
- mTargetPos += current.pos;
- field_0x15bc = 1;
- mCylCc.ClrTgHit();
- mActionMode = 6;
- mCreature.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK,0x28);
- break;
- }
- }
-
- if (!cLib_calcTimer(&field_0xdec) || checkCollisionSword()) {
- BOOL truth = FALSE;
-
- if (dComIfGp_getAttention()->LockonTruth()) {
- truth = TRUE;
- }
-
- if (checkCollisionSword()) {
- mEvtIdx = 4;
- } else {
- mEvtIdx = 1;
- }
-
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,1,0);
-
- if (truth) {
- mFlowNodeNo = 0x2c0;
- } else {
- mFlowNodeNo = 0x2bf;
- }
- } else {
- if (mCylCc.ChkTgHit()) {
- if (mCylCc.GetTgHitObj()->ChkAtType(0x10) == 0) {
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0x1b,-1.0f,1,0);
- mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x28);
- break;
- }
- }
-
- calcSwordAttackMove(1);
- }
- case 3:
- default:
- break;
- }
-
- return 1;
-}
-
-/* 80A3F358-80A3F5A4 014A38 024C+00 1/0 0/0 0/0 .text teach02_finishWait__10daNpc_Kn_cFPv
- */
-int daNpc_Kn_c::teach02_finishWait(void* param_0) {
- switch(field_0xe2a) {
- case 0:
- case 1:
- mMotionSeqMngr1.setNo(1, -1.0f, 0, 0);
- mMotionSeqMngr2.setNo(11, -1.0f, 1, 0);
- mJntAnm.lookPlayer(0);
- field_0xdec = daNpc_Kn_Param_c::m.field_0x90;
- field_0xe2a = 2;
- case 2:
- calcSlip();
- mCcStts.Move();
-
- if (mCylCc.ChkTgHit()) {
- u8 cut_type = daPy_getPlayerActorClass()->getCutType();
-
- if (cut_type != daPy_py_c::CUT_TYPE_GUARD_ATTACK) {
- if (mType == 1) {
- mEvtIdx = 10;
- } else if (mType == 2) {
- mEvtIdx = 12;
- }
-
- cXyz pos(0.0f,0.0f,daNpc_Kn_Param_c::m.field_0x98);
- mDoMtx_stack_c::YrotS(cLib_targetAngleY(&daPy_getPlayerActorClass()->current.pos, &attention_info.position));
- mDoMtx_stack_c::multVec(&pos,&mTargetPos);
- mTargetPos += current.pos;
- field_0x15bc = 1;
- mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x1e);
- break;
- }
- }
-
- if (!cLib_calcTimer(&field_0xdec)) {
- mEvtIdx = 1;
- mFlowNodeNo = 0x2c1;
- mActionMode = 5;
-
- mMotionSeqMngr1.setNo(1,-1.0f,0,0);
- mMotionSeqMngr2.setNo(0,-1.0f,1,0);
- }
- case 3:
- default:
- break;
- }
-
- return 1;
-}
-
-// FIXME: Remove when teach02_shieldReflectWait is decompiled:
-f32 dummy_lits_13839(int sel) {
- switch (sel) {
- case 0: return 3.0f;
- case 1: return 34.0f;
- default: return 35.0f;
- }
-}
-
-/* 80A3F5A4-80A3F99C 014C84 03F8+00 1/0 0/0 0/0 .text teach02_shieldReflectWait__10daNpc_Kn_cFPv
- */
-int daNpc_Kn_c::teach02_shieldReflectWait(void* param_0) {
- // NONMATCHING
- switch(field_0xe2a) {
- case 0:
- case 1:
- mMotionSeqMngr1.setNo(1, -1.0f, 0, 0);
- mMotionSeqMngr1.setNo(32, -1.0f, 1, 0);
- mJntAnm.lookPlayer(0);
- field_0xe2a = 2;
- case 2:
- mCcStts.Move();
-
- if (field_0x15bd == 0) {
-
- }
- case 3:
- default:
- break;
- }
-
- return 1;
-}
-
-// FIXME: Remove when the following func is decompiled.
-f32 dummy_lit_14210(int sel) {
- return 15.0f;
-}
-
-/* 80A3F99C-80A3FFB4 01507C 0618+00 3/0 0/0 0/0 .text ECut_secondSkillExplain__10daNpc_Kn_cFi */
-int daNpc_Kn_c::ECut_secondSkillExplain(int param_0) {
- // NONMATCHING
-}
-
-/* 80A3FFB4-80A403B8 015694 0404+00 1/0 0/0 0/0 .text ECut_reflectExplain__10daNpc_Kn_cFi
- */
-int daNpc_Kn_c::ECut_reflectExplain(int param_0) {
- // NONMATCHING
-}
-
-/* 80A403B8-80A408B4 015A98 04FC+00 2/0 0/0 0/0 .text ECut_secondSkillGet__10daNpc_Kn_cFi
- */
-int daNpc_Kn_c::ECut_secondSkillGet(int param_0) {
- // NONMATCHING
-}
-
-// FIXME: The following were temporarily moved down here.
-// These .data pieces will be inlined with their corresp functions.
-
-/* 80A42C38-80A42C74 001F04 003C+00 0/1 0/0 0/0 .data l_checkOffset$13216 */
-static u8 l_checkOffset[60] = {
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x42, 0x48, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0xC2, 0x48, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x42, 0x48, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0xC2, 0x48, 0x00, 0x00,
-};
-
-/* 80A42C74-80A42CD4 001F40 0060+00 0/1 0/0 0/0 .data l_WarpInScaleTable$13228 */
-static u8 l_WarpInScaleTable[96] = {
- 0x3F, 0x80, 0x00, 0x00,
- 0x3F, 0x80, 0x00, 0x00,
- 0x3F, 0x80, 0x00, 0x00,
- 0x3F, 0xCC, 0x08, 0x31,
- 0x3F, 0x52, 0xF1, 0xAA,
- 0x3F, 0xD5, 0xC2, 0x8F,
- 0x3F, 0xF4, 0x7A, 0xE1,
- 0x3F, 0x38, 0x51, 0xEC,
- 0x3F, 0xE5, 0x1E, 0xB8,
- 0x3F, 0xCC, 0x08, 0x31,
- 0x3F, 0x51, 0x26, 0xE9,
- 0x3F, 0xD5, 0xC2, 0x8F,
- 0x3E, 0xCC, 0xCC, 0xCD,
- 0x3F, 0xC0, 0x00, 0x00,
- 0x3F, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x3F, 0xA6, 0x66, 0x66,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x3F, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
-};
-
-/* 80A42CD4-80A42CDC 001FA0 0008+00 0/1 0/0 0/0 .data l_warpInTimeTable$13229 */
-static u8 l_warpInTimeTable[8] = {
- 0x01,
- 0x04,
- 0x08,
- 0x0B,
- 0x0D,
- 0x0E,
- 0x0F,
- 0x10,
-};
-
-/* 80A42CDC-80A42D0C 001FA8 0030+00 0/1 0/0 0/0 .data l_WarpOutScaleTable$13245 */
-static u8 l_WarpOutScaleTable[48] = {
- 0x00, 0x00, 0x00, 0x00,
- 0x3F, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x3F, 0xA8, 0xF5, 0xC3,
- 0x00, 0x00, 0x00, 0x00,
- 0x3F, 0x18, 0x10, 0x62,
- 0x3F, 0xC0, 0x00, 0x00,
- 0x3F, 0x80, 0x00, 0x00,
- 0x3F, 0x80, 0x00, 0x00,
- 0x3F, 0x80, 0x00, 0x00,
- 0x3F, 0x80, 0x00, 0x00,
-};
-
-/* 80A42D0C-80A42D10 001FD8 0004+00 0/1 0/0 0/0 .data l_warpOutTimeTable$13246 */
-static u8 l_warpOutTimeTable[4] = {
- 0x01,
- 0x03,
- 0x05,
- 0x06,
-};
+#include "d/actor/d_a_npc_kn_teach02.inc"
/* 80A43148-80A43168 -00001 0020+00 1/0 0/0 0/0 .data daNpc_Kn_MethodTable */
static actor_method_class daNpc_Kn_MethodTable = {
- (process_method_func)daNpc_Kn_Create,
- (process_method_func)daNpc_Kn_Delete,
- (process_method_func)daNpc_Kn_Execute,
- (process_method_func)daNpc_Kn_IsDelete,
+ (process_method_func)daNpc_Kn_Create, (process_method_func)daNpc_Kn_Delete,
+ (process_method_func)daNpc_Kn_Execute, (process_method_func)daNpc_Kn_IsDelete,
(process_method_func)daNpc_Kn_Draw,
};
/* 80A43168-80A43198 -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_KN */
extern actor_process_profile_definition g_profile_NPC_KN = {
- fpcLy_CURRENT_e, // mLayerID
- 7, // mListID
- fpcPi_CURRENT_e, // mListPrio
- PROC_NPC_KN, // mProcName
- &g_fpcLf_Method.base, // sub_method
- sizeof(daNpc_Kn_c), // mSize
- 0, // mSizeOther
- 0, // mParameters
- &g_fopAc_Method.base, // sub_method
- 347, // mPriority
- &daNpc_Kn_MethodTable, // sub_method
- 0x00044107, // mStatus
- fopAc_ENEMY_e, // mActorType
- fopAc_CULLBOX_CUSTOM_e, // cullType
+ fpcLy_CURRENT_e, // mLayerID
+ 7, // mListID
+ fpcPi_CURRENT_e, // mListPrio
+ PROC_NPC_KN, // mProcName
+ &g_fpcLf_Method.base, // sub_method
+ sizeof(daNpc_Kn_c), // mSize
+ 0, // mSizeOther
+ 0, // mParameters
+ &g_fopAc_Method.base, // sub_method
+ 347, // mPriority
+ &daNpc_Kn_MethodTable, // sub_method
+ 0x00044107, // mStatus
+ fopAc_ENEMY_e, // mActorType
+ fopAc_CULLBOX_CUSTOM_e, // cullType
};
AUDIO_INSTANCES;
diff --git a/src/d/actor/d_a_npc_kn_base.inc b/src/d/actor/d_a_npc_kn_base.inc
index 480c889286..ab7b16f9f0 100644
--- a/src/d/actor/d_a_npc_kn_base.inc
+++ b/src/d/actor/d_a_npc_kn_base.inc
@@ -1,62 +1,64 @@
#include "d/actor/d_a_npc_kn.h"
#include "d/d_msg_object.h"
+#include "d/d_k_wmark.h"
/* 80A38520-80A38550 00DC00 0030+00 1/1 0/0 0/0 .text
* tgHitCallBack__10daNpc_Kn_cFP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
-void daNpc_Kn_c::tgHitCallBack(fopAc_ac_c* param_0, dCcD_GObjInf* param_1, fopAc_ac_c* param_2,
- dCcD_GObjInf* param_3) {
+void daNpc_Kn_c::tgHitCallBack(fopAc_ac_c* i_tgActor, dCcD_GObjInf* i_tgObjInf,
+ fopAc_ac_c* i_atActor, dCcD_GObjInf* i_atObjInf) {
u8 cut_type = 0;
-
- if (param_2) {
- if (fopAcM_GetProfName(param_2) == 0xfd) {
- cut_type = ((daPy_py_c*)param_2)->getCutType();
+ if (i_atActor != NULL) {
+ if (fopAcM_GetProfName(i_atActor) == PROC_ALINK) {
+ cut_type = ((daPy_py_c*)i_atActor)->getCutType();
} else {
cut_type = 1;
}
}
- ((daNpc_Kn_c*)param_0)->setCutType(cut_type);
+ ((daNpc_Kn_c*)i_tgActor)->setCutType(cut_type);
}
/* 80A38550-80A3858C 00DC30 003C+00 1/1 0/0 0/0 .text getTrnsfrmAnmP__10daNpc_Kn_cFPCci
*/
-void daNpc_Kn_c::getTrnsfrmAnmP(char const* i_arcName, int i_resIdx) {
- dComIfG_getObjectRes(i_arcName, i_resIdx);
+J3DAnmTransform* daNpc_Kn_c::getTrnsfrmAnmP(char const* i_arcName, int i_resIdx) {
+ return (J3DAnmTransform*)dComIfG_getObjectRes(i_arcName, i_resIdx);
}
/* 80A3858C-80A385C8 00DC6C 003C+00 3/3 0/0 0/0 .text getTrnsfrmKeyAnmP__10daNpc_Kn_cFPCci */
-void* daNpc_Kn_c::getTrnsfrmKeyAnmP(char const* i_arcName, int i_resIdx) {
- return dComIfG_getObjectRes(i_arcName, i_resIdx);
+J3DAnmTransformKey* daNpc_Kn_c::getTrnsfrmKeyAnmP(char const* i_arcName, int i_resIdx) {
+ return (J3DAnmTransformKey*)dComIfG_getObjectRes(i_arcName, i_resIdx);
}
/* 80A385C8-80A38604 00DCA8 003C+00 1/1 0/0 0/0 .text getTexPtrnAnmP__10daNpc_Kn_cFPCci
*/
-void daNpc_Kn_c::getTexPtrnAnmP(char const* i_arcName, int i_resIdx) {
- dComIfG_getObjectRes(i_arcName, i_resIdx);
+J3DAnmTexPattern* daNpc_Kn_c::getTexPtrnAnmP(char const* i_arcName, int i_resIdx) {
+ return (J3DAnmTexPattern*)dComIfG_getObjectRes(i_arcName, i_resIdx);
}
/* 80A38604-80A38640 00DCE4 003C+00 1/1 0/0 0/0 .text getTexSRTKeyAnmP__10daNpc_Kn_cFPCci
*/
-void daNpc_Kn_c::getTexSRTKeyAnmP(char const* i_arcName, int i_resIdx) {
- dComIfG_getObjectRes(i_arcName, i_resIdx);
+J3DAnmTextureSRTKey* daNpc_Kn_c::getTexSRTKeyAnmP(char const* i_arcName, int i_resIdx) {
+ return (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(i_arcName, i_resIdx);
}
/* 80A38640-80A38684 00DD20 0044+00 1/1 0/0 0/0 .text
* setBckAnm__10daNpc_Kn_cFP15J3DAnmTransformfiiib */
-void daNpc_Kn_c::setBckAnm(J3DAnmTransform* i_bck, f32 i_rate, int i_attribute, int i_startF,
- int i_endF, bool i_modify) {
- mBckAnm.init(i_bck, 1, i_attribute, i_rate, i_startF, i_endF, i_modify);
+BOOL daNpc_Kn_c::setBckAnm(J3DAnmTransform* i_bck, f32 i_speed, int i_mode, int i_startF,
+ int i_endF, bool i_modify) {
+ return mBckAnm.init(i_bck, TRUE, i_mode, i_speed, i_startF, i_endF, i_modify);
}
/* 80A38684-80A3877C 00DD64 00F8+00 1/1 0/0 0/0 .text
* setMcaMorfAnm__10daNpc_Kn_cFP18J3DAnmTransformKeyffiii */
-int daNpc_Kn_c::setMcaMorfAnm(J3DAnmTransformKey* i_anm, f32 i_rate, f32 i_morf,
- int i_attribute, int i_start, int i_end) {
+int daNpc_Kn_c::setMcaMorfAnm(J3DAnmTransformKey* i_bck, f32 i_speed, f32 i_morf, int i_mode,
+ int i_start, int i_end) {
f32 f_start = i_start;
f32 f_end = i_end;
- mpMorf[0]->setAnm(i_anm, i_attribute, i_morf, i_rate, f_start, f_end);
- if (mpMorf[1]) {
- mpMorf[1]->setAnm(i_anm, i_attribute, i_morf, i_rate, f_start, f_end);
+
+ mpModelMorf[0]->setAnm(i_bck, i_mode, i_morf, i_speed, f_start, f_end);
+
+ if (mpModelMorf[1] != NULL) {
+ mpModelMorf[1]->setAnm(i_bck, i_mode, i_morf, i_speed, f_start, f_end);
}
return 1;
@@ -64,37 +66,38 @@ int daNpc_Kn_c::setMcaMorfAnm(J3DAnmTransformKey* i_anm, f32 i_rate, f32 i_morf,
/* 80A3877C-80A387BC 00DE5C 0040+00 1/1 0/0 0/0 .text
* setBtpAnm__10daNpc_Kn_cFP16J3DAnmTexPatternP12J3DModelDatafi */
-void daNpc_Kn_c::setBtpAnm(J3DAnmTexPattern* i_btp, J3DModelData* i_modelData, f32 i_rate,
- int i_attribute) {
- mBtpAnm.init(i_modelData, i_btp, 1, i_attribute, i_rate, 0, -1);
+BOOL daNpc_Kn_c::setBtpAnm(J3DAnmTexPattern* i_btp, J3DModelData* i_modelData, f32 i_speed,
+ int i_mode) {
+ return mBtpAnm.init(i_modelData, i_btp, TRUE, i_mode, i_speed, 0, -1);
}
/* 80A387BC-80A387FC 00DE9C 0040+00 1/1 0/0 0/0 .text
* setBtkAnm__10daNpc_Kn_cFP19J3DAnmTextureSRTKeyP12J3DModelDatafi */
-void daNpc_Kn_c::setBtkAnm(J3DAnmTextureSRTKey* i_btk, J3DModelData* i_modelData, f32 i_rate,
- int i_attribute) {
- mBtkAnm.init(i_modelData, i_btk, 1, i_attribute, i_rate, 0, -1);
+BOOL daNpc_Kn_c::setBtkAnm(J3DAnmTextureSRTKey* i_btk, J3DModelData* i_modelData, f32 i_speed,
+ int i_mode) {
+ return mBtkAnm.init(i_modelData, i_btk, TRUE, i_mode, i_speed, 0, -1);
}
/* 80A387FC-80A388B0 00DEDC 00B4+00 1/1 0/0 0/0 .text loadRes__10daNpc_Kn_cFPCScPPCc */
-cPhs__Step daNpc_Kn_c::loadRes(s8 const* param_0, char const** param_1) {
- cPhs__Step phase;
- int dbg_r28 = 0;
- for (int idx = 0; idx < 8; ++idx) {
- if (param_0[idx] == -1) {
- if (idx != dbg_r28) {
+int daNpc_Kn_c::loadRes(const s8* i_ptrn_list, const char** i_arcname_list) {
+ int phase;
+ int resLoad_cnt = 0;
+
+ for (int i = 0; i < 8; ++i) {
+ if (i_ptrn_list[i] == -1) {
+ if (i != resLoad_cnt) {
break;
}
return cPhs_COMPLEATE_e;
}
- phase = (cPhs__Step)dComIfG_resLoad(&mPhase[idx], param_1[param_0[idx]]);
- if (phase == 4) {
- ++dbg_r28;
+ phase = dComIfG_resLoad(&mPhase[i], i_arcname_list[i_ptrn_list[i]]);
+ if (phase == cPhs_COMPLEATE_e) {
+ ++resLoad_cnt;
}
- if (phase == 5 || phase == 3){
+ if (phase == cPhs_ERROR_e || phase == cPhs_UNK3_e) {
return cPhs_ERROR_e;
}
}
@@ -103,17 +106,17 @@ cPhs__Step daNpc_Kn_c::loadRes(s8 const* param_0, char const** param_1) {
}
/* 80A388B0-80A38930 00DF90 0080+00 1/1 0/0 0/0 .text deleteRes__10daNpc_Kn_cFPCScPPCc */
-void daNpc_Kn_c::deleteRes(s8 const* param_0, char const** param_1) {
- for (int i = 0; i < 8 && param_0[i] != -1; i++ ) {
- dComIfG_resDelete(&mPhase[i], param_1[param_0[i]]);
+void daNpc_Kn_c::deleteRes(const s8* i_ptrn_list, const char** i_arcname_list) {
+ for (int i = 0; i < 8 && i_ptrn_list[i] != -1; i++) {
+ dComIfG_resDelete(&mPhase[i], i_arcname_list[i_ptrn_list[i]]);
}
}
/* 80A38930-80A38BB8 00E010 0288+00 1/1 0/0 0/0 .text execute__10daNpc_Kn_cFv */
-s32 daNpc_Kn_c::execute() {
+int daNpc_Kn_c::execute() {
setParam();
- if (!evtEndProc()) {
+ if (!evtProc()) {
action();
}
@@ -127,20 +130,20 @@ s32 daNpc_Kn_c::execute() {
mAcch.CrrPos(dComIfG_Bgsp());
mGndChk = mAcch.m_gnd;
- field_0xdf0 = fopAcM_getPolygonAngle(mGndChk,current.angle.y);
+ mGroundAngle = fopAcM_getPolygonAngle(mGndChk, current.angle.y);
mGroundHeight = mAcch.GetGroundH();
afterMoved();
- if (mGroundHeight != -1e+09f) {
+ if (mGroundHeight != -1000000000.0f) {
setEnvTevColor();
setRoomNo();
}
- if (mMotionSeqMngr1.checkEntryNewMotion()) {
+ if (mFaceMotionSeqMngr.checkEntryNewMotion()) {
ctrlFaceMotion();
}
- if (mMotionSeqMngr2.checkEntryNewMotion()) {
+ if (mMotionSeqMngr.checkEntryNewMotion()) {
ctrlMotion();
}
@@ -152,7 +155,8 @@ s32 daNpc_Kn_c::execute() {
setCollision();
if (field_0xe33 == 0) {
- if (field_0xe39 != 0 && dComIfGp_getEvent().isOrderOK() || g_dComIfG_gameInfo.play.mEvent.mEventStatus == 0) {
+ if ((field_0xe39 != 0 && dComIfGp_getEvent().isOrderOK()) || dComIfGp_event_runCheck() == FALSE)
+ {
evtOrder();
}
}
@@ -163,12 +167,13 @@ s32 daNpc_Kn_c::execute() {
}
/* 80A38BB8-80A38FAC 00E298 03F4+00 1/1 0/0 0/0 .text draw__10daNpc_Kn_cFiifP11_GXColorS10fiii */
-int daNpc_Kn_c::draw(int param_0, int param_1, f32 param_2, _GXColorS10* param_3, f32 param_4,
- int param_5, int param_6, int param_7) {
- J3DModel* model = mpMorf[0]->getModel();
- J3DModelData* modelData = model->getModelData();
+int daNpc_Kn_c::draw(BOOL param_0, BOOL i_setEffMtx, f32 param_2, GXColorS10* i_tevcolor, f32 param_4,
+ BOOL i_isDrawGhost, BOOL i_noShadow, BOOL i_simpleShadow) {
+ J3DModel* model_p = mpModelMorf[0]->getModel();
+ J3DModelData* mdlData_p = model_p->getModelData();
field_0xe3a = 1;
- if (drawDbgInfo() || checkHide() || field_0xe32) {
+
+ if (drawDbgInfo() || checkHide() || mNoDraw) {
return 1;
}
@@ -176,77 +181,78 @@ int daNpc_Kn_c::draw(int param_0, int param_1, f32 param_2, _GXColorS10* param_3
tevStr.TevColor.g = 0;
tevStr.TevColor.b = 0;
tevStr.TevColor.a = 0;
- if (param_3 != NULL) {
- tevStr.TevColor.r = param_3->r;
- tevStr.TevColor.g = param_3->g;
- tevStr.TevColor.b = param_3->b;
- tevStr.TevColor.a = param_3->a;
+ if (i_tevcolor != NULL) {
+ tevStr.TevColor.r = i_tevcolor->r;
+ tevStr.TevColor.g = i_tevcolor->g;
+ tevStr.TevColor.b = i_tevcolor->b;
+ tevStr.TevColor.a = i_tevcolor->a;
}
- if (field_0xde0 && mTimer) {
- f32 dbg_f32 = f32(mTimer) / f32(field_0xde0);
- if (cM3d_IsZero(dbg_f32) == 0) {
- tevStr.TevColor.r = 20.0f * dbg_f32;
+ if (mTimerStart != 0 && mTimer != 0) {
+ f32 color_strength = f32(mTimer) / f32(mTimerStart);
+ if (cM3d_IsZero(color_strength) == false) {
+ tevStr.TevColor.r = 20.0f * color_strength;
}
} else if (param_0) {
tevStr.TevColor.g = 20;
}
- if (field_0xdcc & 0x800) {
- mBtpAnm.entry(modelData);
+ if (mAnmFlags & ANM_PLAY_BTP) {
+ mBtpAnm.entry(mdlData_p);
}
- if (field_0xdcc & 0x80) {
- mBtkAnm.entry(modelData);
+ if (mAnmFlags & ANM_PLAY_BTK) {
+ mBtkAnm.entry(mdlData_p);
}
- if (field_0xdcc & 0x100) {
- mBrkAnm.entry(modelData);
+ if (mAnmFlags & ANM_PLAY_BRK) {
+ mBrkAnm.entry(mdlData_p);
}
- if (field_0xdcc & 0x200) {
- mBpkAnm.entry(modelData);
+ if (mAnmFlags & ANM_PLAY_BPK) {
+ mBpkAnm.entry(mdlData_p);
}
- if (param_1) {
- fopAcM_setEffectMtx(this, modelData);
+ if (i_setEffMtx) {
+ fopAcM_setEffectMtx(this, mdlData_p);
}
- if (param_5) {
+ if (i_isDrawGhost) {
drawGhost();
- } else if (field_0xABD) {
+ } else if (mTwilight) {
g_env_light.settingTevStruct(4, &current.pos, &tevStr);
- g_env_light.setLightTevColorType_MAJI(model, &tevStr);
+ g_env_light.setLightTevColorType_MAJI(model_p, &tevStr);
+
dComIfGd_setListDark();
- mpMorf[0]->entryDL();
+ mpModelMorf[0]->entryDL();
dComIfGd_setList();
} else {
g_env_light.settingTevStruct(0, &current.pos, &tevStr);
- g_env_light.setLightTevColorType_MAJI(model, &tevStr);
- mpMorf[0]->entryDL();
+ g_env_light.setLightTevColorType_MAJI(model_p, &tevStr);
+ mpModelMorf[0]->entryDL();
}
- if (field_0xdcc & 0x800) {
- mBtpAnm.remove(modelData);
+ if (mAnmFlags & ANM_PLAY_BTP) {
+ mBtpAnm.remove(mdlData_p);
}
- if (field_0xdcc & 0x80) {
- mBtkAnm.remove(modelData);
+ if (mAnmFlags & ANM_PLAY_BTK) {
+ mBtkAnm.remove(mdlData_p);
}
- if (field_0xdcc & 0x100) {
- mBrkAnm.remove(modelData);
+ if (mAnmFlags & ANM_PLAY_BRK) {
+ mBrkAnm.remove(mdlData_p);
}
- if (field_0xdcc & 0x200) {
- mBpkAnm.remove(modelData);
+ if (mAnmFlags & ANM_PLAY_BPK) {
+ mBpkAnm.remove(mdlData_p);
}
- if (param_6 == 0) {
- if (param_7 == 0) {
- mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model, &current.pos, param_2,
- param_4, current.pos.y, mGroundHeight, mGndChk, &tevStr,
- 0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
+ if (!i_noShadow) {
+ if (!i_simpleShadow) {
+ mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model_p, &current.pos, param_2, param_4,
+ current.pos.y, mGroundHeight, mGndChk, &tevStr, 0, 1.0f,
+ dDlst_shadowControl_c::getSimpleTex());
} else {
dComIfGd_setSimpleShadow(&current.pos, mGroundHeight, param_4, mGndChk, 0, 1.0f,
dDlst_shadowControl_c::getSimpleTex());
@@ -271,105 +277,106 @@ void daNpc_Kn_c::setRoomNo() {
}
/* 80A3904C-80A390F8 00E72C 00AC+00 1/1 0/0 0/0 .text checkEndAnm__10daNpc_Kn_cFf */
-BOOL daNpc_Kn_c::checkEndAnm(f32 i_rate) {
- switch(mpMorf[0]->getPlayMode()) {
- case 2:
- return mpMorf[0]->isLoop();
- case 1:
- case 0:
- return mpMorf[0]->isStop() && mpMorf[0]->getPlaySpeed() == 0.0f && i_rate != 0.0f;
- case 3:
- case 4:
- default:
- return FALSE;
+BOOL daNpc_Kn_c::checkEndAnm(f32 i_speed) {
+ switch (mpModelMorf[0]->getPlayMode()) {
+ case J3DFrameCtrl::EMode_LOOP:
+ return mpModelMorf[0]->isLoop();
+ case J3DFrameCtrl::EMode_RESET:
+ case J3DFrameCtrl::EMode_NONE:
+ return mpModelMorf[0]->isStop() && mpModelMorf[0]->getPlaySpeed() == 0.0f && i_speed != 0.0f;
+ case J3DFrameCtrl::EMode_REVERSE:
+ case J3DFrameCtrl::EMode_LOOP_REVERSE:
+ default:
+ return FALSE;
}
}
/* 80A390F8-80A3917C 00E7D8 0084+00 1/1 0/0 0/0 .text checkEndAnm__10daNpc_Kn_cFP12J3DFrameCtrlf */
-BOOL daNpc_Kn_c::checkEndAnm(J3DFrameCtrl* i_frameCtrl, f32 i_rate) {
+BOOL daNpc_Kn_c::checkEndAnm(J3DFrameCtrl* i_frameCtrl, f32 i_speed) {
switch (i_frameCtrl->getAttribute()) {
- case 2:
- return i_frameCtrl->checkState(2);
- case 1:
- case 0:
- return i_frameCtrl->checkState(1) && i_frameCtrl->getRate() == 0.0f && i_rate != 0.0f;
- case 3:
- case 4:
- default:
- return FALSE;
+ case J3DFrameCtrl::EMode_LOOP:
+ return i_frameCtrl->checkState(2);
+ case J3DFrameCtrl::EMode_RESET:
+ case J3DFrameCtrl::EMode_NONE:
+ return i_frameCtrl->checkState(1) && i_frameCtrl->getRate() == 0.0f && i_speed != 0.0f;
+ case J3DFrameCtrl::EMode_REVERSE:
+ case J3DFrameCtrl::EMode_LOOP_REVERSE:
+ default:
+ return FALSE;
}
}
/* 80A3917C-80A3949C 00E85C 0320+00 1/1 0/0 0/0 .text playAllAnm__10daNpc_Kn_cFv */
void daNpc_Kn_c::playAllAnm() {
f32 play_speed;
- if ((field_0xdcc & 0x4000) == 0) {
- if (field_0xdcc & 0x400) {
+ if (!(mAnmFlags & ANM_FLAG_4000)) {
+ if (mAnmFlags & ANM_PLAY_BCK) {
play_speed = mBckAnm.getPlaySpeed();
- if (field_0xdcc & 0x10) {
+ if (mAnmFlags & ANM_PAUSE_BCK) {
mBckAnm.setPlaySpeed(0.0f);
}
mBckAnm.play();
if (checkEndAnm(mBckAnm.getFrameCtrl(), play_speed)) {
- ++field_0xe28;
+ ++mBckLoops;
}
mBckAnm.setPlaySpeed(play_speed);
}
- if (field_0xdcc & 0x800) {
+ if (mAnmFlags & ANM_PLAY_BTP) {
play_speed = mBtpAnm.getPlaySpeed();
- if (field_0xdcc & 0x20) {
+ if (mAnmFlags & ANM_PAUSE_BTP) {
mBtpAnm.setPlaySpeed(0.0f);
- if (field_0xdcc & 0x2000) {
- field_0xde8 = cLib_getRndValue(90, 90);
+ if (mAnmFlags & ANM_PAUSE_TIMER_BTP) {
+ mBtpPauseTimer = cLib_getRndValue(90, 90);
}
}
- if (cLib_calcTimer(&field_0xde8)) {
+ if (cLib_calcTimer(&mBtpPauseTimer)) {
mBtpAnm.setPlaySpeed(0.0f);
}
mBtpAnm.play();
- if (field_0xdcc & 0x2000) {
+ if (mAnmFlags & ANM_PAUSE_TIMER_BTP) {
if (checkEndAnm(mBtpAnm.getFrameCtrl(), mBtpAnm.getPlaySpeed())) {
- field_0xde8 = cLib_getRndValue(90, 90);
+ mBtpPauseTimer = cLib_getRndValue(90, 90);
}
} else {
- field_0xde8 = 0;
+ mBtpPauseTimer = 0;
}
mBtpAnm.setPlaySpeed(play_speed);
}
}
- if (field_0xdcc & 0x40) {
- play_speed = mpMorf[0]->getPlaySpeed();
- if (field_0xdcc & 1) {
- mpMorf[0]->setPlaySpeed(0.0f);
- mpMorf[0]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
- mpMorf[0]->setPlaySpeed(play_speed);
- if (mpMorf[1] != NULL) {
- mpMorf[1]->setPlaySpeed(0.0f);
- mpMorf[1]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
- mpMorf[1]->setPlaySpeed(play_speed);
+ if (mAnmFlags & ANM_PLAY_MORF) {
+ play_speed = mpModelMorf[0]->getPlaySpeed();
+ if (mAnmFlags & ANM_PAUSE_MORF) {
+ mpModelMorf[0]->setPlaySpeed(0.0f);
+ mpModelMorf[0]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ mpModelMorf[0]->setPlaySpeed(play_speed);
+
+ if (mpModelMorf[1] != NULL) {
+ mpModelMorf[1]->setPlaySpeed(0.0f);
+ mpModelMorf[1]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ mpModelMorf[1]->setPlaySpeed(play_speed);
}
} else {
- mpMorf[0]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
- if (mpMorf[1] != NULL) {
- mpMorf[1]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ mpModelMorf[0]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ if (mpModelMorf[1] != NULL) {
+ mpModelMorf[1]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
}
if (checkEndAnm(play_speed)) {
- ++field_0xe26;
+ ++mMorfLoops;
}
}
}
- if (field_0xdcc & 0x80) {
+ if (mAnmFlags & ANM_PLAY_BTK) {
play_speed = mBtkAnm.getPlaySpeed();
- if (field_0xdcc & 2) {
+ if (mAnmFlags & ANM_PAUSE_BTK) {
mBtkAnm.setPlaySpeed(0.0f);
}
@@ -378,9 +385,9 @@ void daNpc_Kn_c::playAllAnm() {
mBtkAnm.setPlaySpeed(play_speed);
}
- if (field_0xdcc & 0x100) {
+ if (mAnmFlags & ANM_PLAY_BRK) {
play_speed = mBrkAnm.getPlaySpeed();
- if (field_0xdcc & 4) {
+ if (mAnmFlags & ANM_PAUSE_BRK) {
mBrkAnm.setPlaySpeed(0.0f);
}
@@ -388,9 +395,9 @@ void daNpc_Kn_c::playAllAnm() {
mBrkAnm.setPlaySpeed(play_speed);
}
- if (field_0xdcc & 0x200) {
+ if (mAnmFlags & ANM_PLAY_BPK) {
play_speed = mBpkAnm.getPlaySpeed();
- if (field_0xdcc & 8) {
+ if (mAnmFlags & ANM_PAUSE_BPK) {
mBpkAnm.setPlaySpeed(0.0f);
}
@@ -398,23 +405,26 @@ void daNpc_Kn_c::playAllAnm() {
mBpkAnm.setPlaySpeed(play_speed);
}
- field_0xdcc &= ~0x403F;
- if (field_0x15a4 & 0x40) {
- play_speed = field_0x1588.getPlaySpeed();
- if (field_0x15a4 & 1) {
- field_0x1588.setPlaySpeed(0.0f);
+ mAnmFlags &= ~(ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PAUSE_BPK | ANM_PAUSE_BCK
+ | ANM_PAUSE_BTP | ANM_FLAG_4000);
+
+ if (mPodAnmFlags & ANM_PLAY_MORF) {
+ play_speed = mPodBck.getPlaySpeed();
+ if (mPodAnmFlags & ANM_PAUSE_MORF) {
+ mPodBck.setPlaySpeed(0.0f);
}
- field_0x1588.play();
- field_0x1588.setPlaySpeed(play_speed);
+ mPodBck.play();
+ mPodBck.setPlaySpeed(play_speed);
}
- field_0x15a4 &= ~0x403F;
+ mPodAnmFlags &= ~(ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PAUSE_BPK | ANM_PAUSE_BCK
+ | ANM_PAUSE_BTP | ANM_FLAG_4000);
}
/* 80A3949C-80A39558 00EB7C 00BC+00 1/0 0/0 0/0 .text ctrlBtk__10daNpc_Kn_cFv */
int daNpc_Kn_c::ctrlBtk() {
- if (mpMatAnm) {
+ if (mpMatAnm != NULL) {
if (field_0xe30 != 0 && mBtkAnm.getBtkAnm()) {
mpMatAnm->setNowOffsetX(cM_ssin(mJntAnm.getEyeAngleY()) * 0.2f);
mpMatAnm->setNowOffsetY(cM_ssin(mJntAnm.getEyeAngleX()) * 0.2f);
@@ -441,36 +451,39 @@ int daNpc_Kn_c::ctrlBtk() {
/* 80A39558-80A395DC 00EC38 0084+00 1/1 0/0 0/0 .text setMtx__10daNpc_Kn_cFv */
void daNpc_Kn_c::setMtx() {
- J3DModel* model = mpMorf[0]->getModel();
- // J3DModelData* data = model->getModelData(); // debug used this?
+ J3DModel* model_p = mpModelMorf[0]->getModel();
+ J3DModelData* mdlData_p = model_p->getModelData();
+
mDoMtx_stack_c::transS(current.pos);
- mDoMtx_stack_c::ZXYrotM(mTargetAngle);
+ mDoMtx_stack_c::ZXYrotM(mCurAngle);
mDoMtx_stack_c::scaleM(scale);
- model->setBaseTRMtx(mDoMtx_stack_c::get());
- model->setUserArea((u32)this);
+ model_p->setBaseTRMtx(mDoMtx_stack_c::get());
+ model_p->setUserArea((u32)this);
- if (field_0xdcc & 0x400) {
+ if (mAnmFlags & ANM_PLAY_BCK) {
mBckAnm.getBckAnm()->setFrame(mBckAnm.getFrame());
}
- mpMorf[0]->modelCalc();
+ mpModelMorf[0]->modelCalc();
}
/* 80A395DC-80A39684 00ECBC 00A8+00 1/1 0/0 0/0 .text ctrlFaceMotion__10daNpc_Kn_cFv */
void daNpc_Kn_c::ctrlFaceMotion() {
- int int_play;
- f32 f32_play;
- if (mMotionSeqMngr1.play(field_0xe28, &int_play, &f32_play)) {
- setFaceMotionAnm(int_play, true);
- if (f32_play < 0.0f) {
- mpMorf[0]->setMorf(field_0xab4);
- if (mpMorf[1] != NULL) {
- mpMorf[1]->setMorf(field_0xab4);
+ int motionNo;
+ f32 morfFrm;
+
+ if (mFaceMotionSeqMngr.play(mBckLoops, &motionNo, &morfFrm)) {
+ setFaceMotionAnm(motionNo, true);
+
+ if (morfFrm < 0.0f) {
+ mpModelMorf[0]->setMorf(mExpressionMorfFrame);
+ if (mpModelMorf[1] != NULL) {
+ mpModelMorf[1]->setMorf(mExpressionMorfFrame);
}
} else {
- mpMorf[0]->setMorf(f32_play);
- if (mpMorf[1] != NULL) {
- mpMorf[1]->setMorf(f32_play);
+ mpModelMorf[0]->setMorf(morfFrm);
+ if (mpModelMorf[1] != NULL) {
+ mpModelMorf[1]->setMorf(morfFrm);
}
}
}
@@ -478,22 +491,22 @@ void daNpc_Kn_c::ctrlFaceMotion() {
/* 80A39684-80A39738 00ED64 00B4+00 1/1 0/0 0/0 .text ctrlMotion__10daNpc_Kn_cFv */
void daNpc_Kn_c::ctrlMotion() {
- int p2;
- f32 p3;
+ int motionNo;
+ f32 morfFrm;
- if (mMotionSeqMngr2.play(field_0xe26, &p2, &p3)) {
- int asdf = false;
- if (p3 < -1.0f) {
- asdf = true;
+ if (mMotionSeqMngr.play(mMorfLoops, &motionNo, &morfFrm)) {
+ BOOL restart = FALSE;
+ if (morfFrm < -1.0f) {
+ restart = TRUE;
}
- setMotionAnm(p2, p3 < 0.0f ? field_0xab8 : p3, asdf);
+ setMotionAnm(motionNo, morfFrm < 0.0f ? mMorfFrames : morfFrm, restart);
- if (field_0xABC != 0) {
- mpMorf[0]->setMorf(0.0f);
+ if (mCreating) {
+ mpModelMorf[0]->setMorf(0.0f);
- if (mpMorf[1]) {
- mpMorf[1]->setMorf(0.0f);
+ if (mpModelMorf[1]) {
+ mpModelMorf[1]->setMorf(0.0f);
}
}
}
@@ -501,38 +514,40 @@ void daNpc_Kn_c::ctrlMotion() {
/* 80A39738-80A3989C 00EE18 0164+00 1/1 0/0 0/0 .text ctrlMsgAnm__10daNpc_Kn_cFPiPiP10fopAc_ac_ci
*/
-int daNpc_Kn_c::ctrlMsgAnm(int* param_0, int* param_1, fopAc_ac_c* param_2, int param_3) {
- *param_0 = -1;
- *param_1 = -1;
+int daNpc_Kn_c::ctrlMsgAnm(int* o_faceAnmAttr_p, int* o_anmAttr_p, fopAc_ac_c* i_talkPartner_p, int param_3) {
+ *o_faceAnmAttr_p = -1;
+ *o_anmAttr_p = -1;
+
if (param_3 || eventInfo.checkCommandTalk() || mStaffId != -1) {
- if (dComIfGp_event_getTalkPartner() == param_2) {
+ if (dComIfGp_event_getTalkPartner() == i_talkPartner_p) {
msg_class* msg_p = dMsgObject_c::getActor();
- JUT_ASSERT(0x440, 0 != msg_p);
+ JUT_ASSERT(1088, 0 != msg_p);
+
if (msg_p->mode == 2 || msg_p->mode == 3) {
- field_0xdd0 = -1;
+ mMsgId = fpcM_ERROR_PROCESS_ID_e;
} else if (msg_p->mode == 6) {
- if (msg_p->msg_idx != field_0xdd0) {
- *param_0 = dComIfGp_getMesgFaceAnimeAttrInfo();
- *param_1 = dComIfGp_getMesgAnimeAttrInfo();
- field_0xdd0 = msg_p->msg_idx;
+ if (msg_p->msg_idx != mMsgId) {
+ *o_faceAnmAttr_p = dComIfGp_getMesgFaceAnimeAttrInfo();
+ *o_anmAttr_p = dComIfGp_getMesgAnimeAttrInfo();
+ mMsgId = msg_p->msg_idx;
}
if (dMsgObject_isMouthCheck()) {
- field_0xdcc &= ~0x4000;
+ mAnmFlags &= ~ANM_FLAG_4000;
} else {
- field_0xdcc |= 0x4000;
+ mAnmFlags |= ANM_FLAG_4000;
}
field_0xddc = 20;
} else {
- if (field_0xdcc & 0x4000) {
- field_0xdcc &= ~0x4000;
+ if (mAnmFlags & ANM_FLAG_4000) {
+ mAnmFlags &= ~ANM_FLAG_4000;
}
- field_0xdd0 = -1;
+ mMsgId = fpcM_ERROR_PROCESS_ID_e;
}
} else {
- field_0xdd0 = -1;
+ mMsgId = fpcM_ERROR_PROCESS_ID_e;
if (field_0xddc) {
field_0xddc = 1;
}
@@ -548,49 +563,202 @@ int daNpc_Kn_c::ctrlMsgAnm(int* param_0, int* param_1, fopAc_ac_c* param_2, int
/* 80A3989C-80A39BBC 00EF7C 0320+00 1/0 0/0 0/0 .text ctrlJoint__10daNpc_Kn_cFP8J3DJointP8J3DModel
*/
-int daNpc_Kn_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) {
- // NONMATCHING
-}
+int daNpc_Kn_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) {
+ int joint_no = i_joint->getJntNo();
+ cXyz pos;
+ csXyz angle;
+ mDoMtx_stack_c::copy(i_model->getAnmMtx(joint_no));
+
+ if (joint_no == getBackboneJointNo() || joint_no == getNeckJointNo() || joint_no == getHeadJointNo()) {
+ Mtx joint_mtx;
+ cMtx_copy(mDoMtx_stack_c::get(), joint_mtx);
+ pos.set(joint_mtx[0][3], joint_mtx[1][3], joint_mtx[2][3]);
+ joint_mtx[0][3] = joint_mtx[1][3] = joint_mtx[2][3] = 0.0f;
+
+ mDoMtx_stack_c::ZXYrotS(mCurAngle.x, (mCurAngle.y + field_0xDBE.y), mCurAngle.z);
+
+ if (joint_no == getNeckJointNo()) {
+ angle.set(mJntAnm.getJntRadX2S(2), mJntAnm.getJntRadY2S(2), 0);
+ mDoMtx_stack_c::ZXYrotM(angle);
+ }
+
+ if (joint_no == getHeadJointNo()) {
+ angle.set(mJntAnm.getJntRadX2S(2), mJntAnm.getJntRadY2S(2), 0);
+ mDoMtx_stack_c::ZXYrotM(angle);
+ }
-bool asdf_func(char* str) {
- if (0 == strcmp(str, "DEFAULT_GETITEM")) {
- return true;
+ mDoMtx_stack_c::inverse();
+ Mtx inverse_mtx;
+ cMtx_copy(mDoMtx_stack_c::get(), inverse_mtx);
+ mDoMtx_stack_c::transS(pos);
+ mDoMtx_stack_c::ZXYrotM(mCurAngle.x, (mCurAngle.y + field_0xDBE.y), mCurAngle.z);
+
+ if (joint_no == getBackboneJointNo()) {
+ angle.set(mJntAnm.getJntRadX2S(2), mJntAnm.getJntRadY2S(2), 0);
+ mDoMtx_stack_c::ZXYrotM(angle);
+ }
+
+ if (joint_no == getNeckJointNo()) {
+ angle.set(mJntAnm.getJntRadX2S(1), mJntAnm.getJntRadY2S(1), 0);
+ mDoMtx_stack_c::ZXYrotM(angle);
+ }
+
+ if (joint_no == getHeadJointNo()) {
+ angle.set(mJntAnm.getJntRadX2S(0), mJntAnm.getJntRadY2S(0), 0);
+ mDoMtx_stack_c::ZXYrotM(angle);
+ }
+
+ mDoMtx_stack_c::concat(inverse_mtx);
+ mDoMtx_stack_c::concat(joint_mtx);
}
- return false;
+ afterJntAnm(joint_no);
+ i_model->setAnmMtx(joint_no, mDoMtx_stack_c::get());
+ cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
+
+ if ((mAnmFlags & ANM_PLAY_BCK) && (checkChangeJoint(joint_no) || checkRemoveJoint(joint_no))) {
+ J3DAnmTransform* bck = mBckAnm.getBckAnm();
+ mBckAnm.changeBckOnly(mpModelMorf[0]->getAnm());
+ mpModelMorf[0]->changeAnm(bck);
+ }
+
+ return 1;
}
/* 80A39BBC-80A39DBC 00F29C 0200+00 1/0 0/0 0/0 .text evtProc__10daNpc_Kn_cFv */
+// NONMATCHING - gameinfo load issues
int daNpc_Kn_c::evtProc() {
- // NONMATCHING
+ BOOL ret = FALSE;
+
+ if (dComIfGp_event_runCheck() != 0) {
+ if (eventInfo.checkCommandTalk()) {
+ if (!checkChangeEvt()) {
+ evtTalk();
+ }
+ ret = TRUE;
+ } else if (eventInfo.checkCommandDemoAccrpt() && dComIfGp_getEventManager().endCheck(mEvtId)) {
+ if (evtEndProc()) {
+ dComIfGp_event_reset();
+ mEvtId = -1;
+ }
+ } else {
+ if (strcmp(dComIfGp_getEventManager().getRunEventName(), "DEFAULT_GETITEM") == 0 && mItemPartnerId != fpcM_ERROR_PROCESS_ID_e) {
+ dComIfGp_event_setTalkPartner(NULL);
+ dComIfGp_event_setItemPartnerId(mItemPartnerId);
+ mItemPartnerId = fpcM_ERROR_PROCESS_ID_e;
+ }
+ ret = evtCutProc();
+ }
+
+ int temp_r28 = field_0xddc;
+ int face_motion, motion;
+ if (ctrlMsgAnm(&face_motion, &motion, this, field_0xe34)) {
+ if (field_0xe2d != 0) {
+ mFaceMotionSeqMngr.setNo(face_motion, -1.0f, 1, 0);
+ mMotionSeqMngr.setNo(motion, -1.0f, 1, 0);
+ }
+ } else if (temp_r28 != 0 && field_0xe2d != 0) {
+ setAfterTalkMotion();
+ }
+ } else {
+ if (mStaffId != -1) {
+ mMode = 1;
+ mStaffId = -1;
+ }
+ field_0xddc = 0;
+ field_0xe2d = 1;
+ }
+
+ return ret;
}
/* 80A39DBC-80A39F84 00F49C 01C8+00 1/0 0/0 0/0 .text setFootPos__10daNpc_Kn_cFv */
void daNpc_Kn_c::setFootPos() {
if (getFootLJointNo() >= 0) {
- field_0xD88 = field_0xD70;
- mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getFootLJointNo()));
- mDoMtx_stack_c::multVecZero(&field_0xd58);
- field_0xD70 = field_0xd58 - current.pos;
+ mOldFootLOffset = mFootLOffset;
+ mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(getFootLJointNo()));
+ mDoMtx_stack_c::multVecZero(&mFootLPos);
+ mFootLOffset = mFootLPos - current.pos;
}
if (getFootRJointNo() >= 0) {
- field_0xD94 = field_0xD7C;
- mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getFootRJointNo()));
- mDoMtx_stack_c::multVecZero(&field_0xD64);
- field_0xD7C = field_0xD64 - current.pos;
+ mOldFootROffset = mFootROffset;
+ mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(getFootRJointNo()));
+ mDoMtx_stack_c::multVecZero(&mFootRPos);
+ mFootROffset = mFootRPos - current.pos;
}
- if (field_0xABC != 0) {
- field_0xD88 = field_0xD70;
- field_0xD94 = field_0xD7C;
+ if (mCreating) {
+ mOldFootLOffset = mFootLOffset;
+ mOldFootROffset = mFootROffset;
}
}
/* 80A39F84-80A3A254 00F664 02D0+00 1/0 0/0 0/0 .text setFootPrtcl__10daNpc_Kn_cFP4cXyzf
*/
void daNpc_Kn_c::setFootPrtcl(cXyz* param_0, f32 param_1) {
- // NONMATCHING
+ cXyz foot_l_pos(mFootLPos);
+ cXyz foot_r_pos(mFootRPos);
+ cXyz start;
+ cXyz end;
+
+ start = mFootLPos;
+ end = start;
+ end.y -= param_1;
+ mLinChk.Set(&start, &end, this);
+
+ u8 cross_l, foot_l_att;
+ u8 cross_r, foot_r_att;
+ cross_l = dComIfG_Bgsp().LineCross(&mLinChk);
+ if (cross_l) {
+ foot_l_pos.y = mLinChk.GetCross().y;
+ mFootLPolyAngle = fopAcM_getPolygonAngle(mLinChk, mCurAngle.y);
+ foot_l_att = dComIfG_Bgsp().GetPolyAtt0(mLinChk);
+ } else {
+ mFootLPolyAngle = 0;
+ }
+
+ start = mFootRPos;
+ end = start;
+ end.y -= param_1;
+ mLinChk.Set(&start, &end, this);
+
+ cross_r = dComIfG_Bgsp().LineCross(&mLinChk);
+ if (cross_r) {
+ foot_r_pos.y = mLinChk.GetCross().y;
+ mFootRPolyAngle = fopAcM_getPolygonAngle(mLinChk, mCurAngle.y);
+ foot_r_att = dComIfG_Bgsp().GetPolyAtt0(mLinChk);
+ } else {
+ mFootRPolyAngle = 0;
+ }
+
+ field_0x9F4.setEffectTwo(&tevStr, &current.pos, 0, 0, NULL,
+ !mFootLOnGround && cross_l == true ? &foot_l_pos : NULL,
+ !mFootROnGround && cross_r == true ? &foot_r_pos : NULL,
+ &mCurAngle, param_0, fopAcM_GetRoomNo(this), 0.0f, speedF);
+
+ if (!mFootLOnGround && cross_l == true) {
+ switch (foot_l_att) {
+ case 3:
+ break;
+ case 13:
+ dkWmark_c::setFootMark(&foot_l_pos, mCurAngle.y, 3);
+ break;
+ }
+ }
+
+ if (!mFootROnGround && cross_r == true) {
+ switch (foot_r_att) {
+ case 3:
+ break;
+ case 13:
+ dkWmark_c::setFootMark(&foot_r_pos, mCurAngle.y, 3);
+ break;
+ }
+ }
+
+ mFootLOnGround = cross_l;
+ mFootROnGround = cross_r;
}
/* 80A3A254-80A3A25C 00F934 0008+00 1/0 0/0 0/0 .text checkCullDraw__10daNpc_Kn_cFv */
@@ -600,9 +768,9 @@ bool daNpc_Kn_c::checkCullDraw() {
/* 80A3A25C-80A3A2A8 00F93C 004C+00 1/0 0/0 0/0 .text twilight__10daNpc_Kn_cFv */
void daNpc_Kn_c::twilight() {
- if (field_0xABD != 0) {
+ if (mTwilight) {
attention_info.flags |= 0x400000;
- field_0xe32 = 0;
+ mNoDraw = FALSE;
attention_info.flags |= 0x800000;
setHitodamaPrtcl();
}
@@ -610,27 +778,26 @@ void daNpc_Kn_c::twilight() {
/* 80A3A2A8-80A3A404 00F988 015C+00 1/0 0/0 0/0 .text evtOrder__10daNpc_Kn_cFv */
void daNpc_Kn_c::evtOrder() {
- if (strlen(mpEventData[mEvtIdx].eventName) != 0) {
- if (strlen(field_0x5B8[mpEventData[mEvtIdx].num])) {
- eventInfo.setArchiveName(field_0x5B8[mpEventData[mEvtIdx].num]);
+ if (strlen(mpEventData[mEvtNo].eventName) != 0) {
+ if (strlen(mpArcNames[mpEventData[mEvtNo].num])) {
+ eventInfo.setArchiveName(mpArcNames[mpEventData[mEvtNo].num]);
dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName());
}
- field_0xe24 = dComIfGp_getEventManager().getEventIdx(this, mpEventData[mEvtIdx].eventName,0xff);
- fopAcM_orderOtherEventId(this,field_0xe24,0xff,0xffff,6,1);
-
+ mEvtId = dComIfGp_getEventManager().getEventIdx(this, mpEventData[mEvtNo].eventName, 0xff);
+ fopAcM_orderOtherEventId(this, mEvtId, 0xff, 0xffff, 6, 1);
+
} else {
u32 flag_check = attention_info.flags;
-
if (flag_check & 8 || flag_check & 2) {
- eventInfo.onCondition(1);
+ eventInfo.onCondition(dEvtCnd_CANTALK_e);
if (chkXYItems()) {
- eventInfo.onCondition(32);
+ eventInfo.onCondition(dEvtCnd_CANTALKITEM_e);
}
- if (field_0xe38 != 0) {
- fopAcM_orderSpeakEvent(this,0,0);
+ if (mSpeakEvent) {
+ fopAcM_orderSpeakEvent(this, 0, 0);
}
}
}
@@ -638,35 +805,133 @@ void daNpc_Kn_c::evtOrder() {
/* 80A3A404-80A3A504 00FAE4 0100+00 1/1 0/0 0/0 .text evtChange__10daNpc_Kn_cFv */
void daNpc_Kn_c::evtChange() {
- if (strlen(mpEventData[mEvtIdx].eventName) != 0) {
- if (strlen(field_0x5B8[mpEventData[mEvtIdx].num])) {
- eventInfo.setArchiveName(field_0x5B8[mpEventData[mEvtIdx].num]);
+ if (strlen(mpEventData[mEvtNo].eventName) != 0) {
+ if (strlen(mpArcNames[mpEventData[mEvtNo].num])) {
+ eventInfo.setArchiveName(mpArcNames[mpEventData[mEvtNo].num]);
dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName());
}
- field_0xe24 = dComIfGp_getEventManager().getEventIdx(this, mpEventData[mEvtIdx].eventName,0xff);
+ mEvtId = dComIfGp_getEventManager().getEventIdx(this, mpEventData[mEvtNo].eventName, 0xff);
dComIfGp_getEvent().reset(this);
- fopAcM_orderChangeEventId(this,field_0xe24,1,0xffff);
+ fopAcM_orderChangeEventId(this, mEvtId, 1, 0xffff);
}
}
/* 80A3A504-80A3A568 00FBE4 0064+00 1/0 0/0 0/0 .text clrParam__10daNpc_Kn_cFv */
void daNpc_Kn_c::clrParam() {
- field_0xDB2 = mTargetAngle;
+ field_0xDB2 = mCurAngle;
mCutType = 0;
- memset((void*)&mEvtIdx,0,(int)(void*)&field_0xe3c - (int)(void*)&mEvtIdx); // fake match?
+ memset((void*)&mEvtNo, 0, (int)(void*)&field_0xe3c - (int)(void*)&mEvtNo); // fake match?
mJntAnm.clrDirectFlag();
}
/* 80A3A568-80A3A7C0 00FC48 0258+00 2/2 0/0 0/0 .text setFaceMotionAnm__10daNpc_Kn_cFib
*/
-bool daNpc_Kn_c::setFaceMotionAnm(int param_0, bool param_1) {
- // NONMATCHING
+bool daNpc_Kn_c::setFaceMotionAnm(int i_idx, bool i_modify) {
+ J3DAnmTransform* bck = NULL;
+ J3DAnmTexPattern* btp = NULL;
+ mAnmFlags &= ~0x7C30;
+
+ daNpcT_faceMotionAnmData_c anm_data = getFaceMotionAnm(mpFaceMotionAnmData[i_idx]);
+
+ if (anm_data.mBckFileIdx != -1) {
+ bck = getTrnsfrmAnmP(mpArcNames[anm_data.mBckArcIdx], anm_data.mBckFileIdx);
+ }
+
+ if (bck != NULL) {
+ if (setBckAnm(bck, 1.0f, anm_data.mBckAttr, 0, -1, i_modify)) {
+ mAnmFlags |= ANM_PAUSE_BCK | ANM_PLAY_BCK;
+ mBckLoops = 0;
+ } else {
+ bck = NULL;
+ }
+ }
+
+ if (bck == NULL && anm_data.mBckFileIdx != -1) {
+ return false;
+ }
+
+ if (anm_data.mBtpFileIdx != -1) {
+ btp = getTexPtrnAnmP(mpArcNames[anm_data.mBtpArcIdx], anm_data.mBtpFileIdx);
+ }
+
+ if (btp != NULL) {
+ if (btp == mBtpAnm.getBtpAnm() && anm_data.field_0x18) {
+ mAnmFlags |= ANM_PLAY_BTP | ANM_PAUSE_TIMER_BTP;
+ } else if (setBtpAnm(btp, mpModelMorf[0]->getModel()->getModelData(), 1.0f, anm_data.mBtpAttr)) {
+ mAnmFlags |= ANM_PAUSE_BTP | ANM_PLAY_BTP;
+ if (anm_data.field_0x18) {
+ mAnmFlags |= ANM_PAUSE_TIMER_BTP;
+ }
+ } else {
+ btp = NULL;
+ }
+ }
+
+ if (btp == NULL && anm_data.mBtpFileIdx != -1) {
+ return false;
+ }
+
+ return afterSetFaceMotionAnm(i_idx, anm_data.mBckAttr, 0.0f, anm_data.mBtpAttr);
}
/* 80A3A7C0-80A3AA58 00FEA0 0298+00 2/2 0/0 0/0 .text setMotionAnm__10daNpc_Kn_cFifi */
-bool daNpc_Kn_c::setMotionAnm(int param_0, f32 param_1, int param_2) {
- // NONMATCHING
+bool daNpc_Kn_c::setMotionAnm(int i_idx, f32 i_morf, BOOL i_restart) {
+ J3DAnmTransformKey* bck = NULL;
+ J3DAnmTextureSRTKey* btk = NULL;
+ BOOL restarted = FALSE;
+
+ mAnmFlags &= ~(ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PAUSE_BPK
+ | ANM_PLAY_MORF | ANM_PLAY_BTK | ANM_PLAY_BRK | ANM_PLAY_BPK);
+
+ daNpcT_motionAnmData_c anm_data = getMotionAnm(mpMotionAnmData[i_idx]);
+
+ if (anm_data.mBckFileIdx != -1) {
+ bck = getTrnsfrmKeyAnmP(mpArcNames[anm_data.mBckArcIdx], anm_data.mBckFileIdx);
+ }
+
+ if (bck != NULL) {
+ if (i_restart && bck == mpModelMorf[0]->getAnm()) {
+ mAnmFlags |= ANM_PLAY_MORF;
+ mMorfLoops = 0;
+ restarted = TRUE;
+ } else if (setMcaMorfAnm(bck, 1.0f, i_morf, anm_data.mBckAttr, 0, -1)) {
+ field_0x15A8 = i_idx;
+ mAnmFlags |= ANM_PAUSE_MORF | ANM_PLAY_MORF;
+ mMorfLoops = 0;
+ } else {
+ bck = NULL;
+ }
+ }
+
+ if (bck == NULL && anm_data.mBckFileIdx != -1) {
+ return false;
+ }
+
+ field_0xe30 = 0;
+ field_0xe31 = 0;
+
+ if (anm_data.mBtkFileIdx != -1) {
+ field_0xe30 = anm_data.field_0x18;
+ field_0xe31 = anm_data.field_0x1a;
+ btk = getTexSRTKeyAnmP(mpArcNames[anm_data.mBtkArcIdx], anm_data.mBtkFileIdx);
+ }
+
+ if (btk != NULL) {
+ if (restarted) {
+ mAnmFlags |= ANM_PLAY_BTK;
+ } else if (setBtkAnm(btk, mpModelMorf[0]->getModel()->getModelData(), 1.0f, anm_data.mBtkAttr)) {
+ mAnmFlags |= ANM_PAUSE_BTK | ANM_PLAY_BTK;
+ } else {
+ btk = NULL;
+ }
+ }
+
+ if (btk == NULL && anm_data.mBtkFileIdx != -1) {
+ return false;
+ }
+
+ return afterSetMotionAnm(i_idx, anm_data.mBckAttr, i_morf, anm_data.mBtkAttr);
}
/* 80A3AA58-80A3AAF0 010138 0098+00 10/10 0/0 0/0 .text setPos__10daNpc_Kn_cF4cXyz */
@@ -674,6 +939,7 @@ void daNpc_Kn_c::setPos(cXyz i_pos) {
i_pos.y += 500.0f;
mGndChk.SetPos(&i_pos);
i_pos.y = dComIfG_Bgsp().GroundCross(&mGndChk);
+
current.pos = i_pos;
old.pos = current.pos;
}
@@ -682,135 +948,191 @@ void daNpc_Kn_c::setPos(cXyz i_pos) {
void daNpc_Kn_c::setAngle(s16 i_angle) {
current.angle.y = i_angle;
shape_angle.y = current.angle.y;
- mTargetAngle.y = current.angle.y;
- field_0xDB2.y = mTargetAngle.y;
+ mCurAngle.y = current.angle.y;
+ field_0xDB2.y = mCurAngle.y;
old.angle.y = current.angle.y;
}
/* 80A3AB18-80A3AC24 0101F8 010C+00 1/1 0/0 0/0 .text
* chkActorInSight__10daNpc_Kn_cFP10fopAc_ac_cfs */
-int daNpc_Kn_c::chkActorInSight(fopAc_ac_c* actor, f32 arg1, s16 arg2) {
- if (arg1 < 180.0f) {
- s16 sVar1 = cM_deg2s(arg1);
- cXyz sp34 = getAttnPos(actor);
- cSGlobe cStack_48(attention_info.position - sp34);
- cSAngle acStack_4c(cSAngle(cStack_48.U().Inv()) - arg2);
- s16 sVar2 = acStack_4c.Val();
- if (sVar2 < 0) {
- sVar2 = -sVar2;
+BOOL daNpc_Kn_c::chkActorInSight(fopAc_ac_c* actor, f32 i_fovY, s16 i_angleY) {
+ if (i_fovY < 180.0f) {
+ s16 fov_s = cM_deg2s(i_fovY);
+ cXyz attn_pos = getAttnPos(actor);
+ cSGlobe globe(attention_info.position - attn_pos);
+ cSAngle angle_diff(cSAngle(globe.U().Inv()) - i_angleY);
+ s16 angle_diff_s = angle_diff.Val();
+ if (angle_diff_s < 0) {
+ angle_diff_s = -angle_diff_s;
}
- return (sVar2 > sVar1) == 0;
+ return (angle_diff_s > fov_s) == FALSE;
}
- return 1;
+ return TRUE;
}
/* 80A3AC24-80A3ACD4 010304 00B0+00 1/1 0/0 0/0 .text chkPointInArea__10daNpc_Kn_cF4cXyz4cXyzfffs
*/
-int daNpc_Kn_c::chkPointInArea(cXyz param_0, cXyz param_1, f32 param_2, f32 param_3,
- f32 param_4, s16 param_5) {
- // NONMATCHING
+BOOL daNpc_Kn_c::chkPointInArea(cXyz i_pos, cXyz i_center, f32 i_boundXZ, f32 i_boundY1, f32 i_boundY2,
+ s16 i_angle) {
+ cXyz bounds, center;
+ f32 min_y = i_boundY2;
+ f32 max_y = i_boundY1;
+ if (i_boundY1 < i_boundY2) {
+ min_y = i_boundY1;
+ max_y = i_boundY2;
+ }
+
+ bounds.set(i_boundXZ, fabsf(max_y - min_y), i_boundXZ);
+ center = i_center;
+ center.y += min_y;
+ return chkPointInArea(i_pos, center, bounds, i_angle);
}
/* 80A3ACD4-80A3AD50 0103B4 007C+00 1/1 0/0 0/0 .text
* chkPointInArea__10daNpc_Kn_cF4cXyz4cXyz4cXyzs */
-void daNpc_Kn_c::chkPointInArea(cXyz param_0, cXyz param_1, cXyz param_2, s16 param_3) {
- // NONMATCHING
+BOOL daNpc_Kn_c::chkPointInArea(cXyz i_pos, cXyz i_center, cXyz i_bounds, s16 i_angle) {
+ return daNpcT_chkPointInArea(i_pos, i_center, i_bounds, i_angle, TRUE);
}
/* 80A3AD50-80A3AF50 010430 0200+00 1/1 0/0 0/0 .text chkFindPlayer__10daNpc_Kn_cFis */
-int daNpc_Kn_c::chkFindPlayer(int arg0, s16 arg1) {
+int daNpc_Kn_c::chkFindPlayer(BOOL i_release, s16 i_angleY) {
cXyz attn_pos = getAttnPos(daPy_getPlayerActorClass());
- int dbg_r27 = (arg0 == 0) ? attention_info.distances[3] : attention_info.distances[1];
- f32 dist_max = (arg0 == 0) ? dComIfGp_getAttention()->getDistTable(dbg_r27).mDistMax :
- dComIfGp_getAttention()->getDistTable(dbg_r27).mDistMaxRelease;
- f32 dbg_f29 = -1.0f * dComIfGp_getAttention()->getDistTable(dbg_r27).mLowerY;
- f32 dbg_f28 = -1.0f * dComIfGp_getAttention()->getDistTable(dbg_r27).mUpperY;
- int mAngleSelect = dComIfGp_getAttention()->getDistTable(dbg_r27).mAngleSelect;
-
- f32 dbg_f31 = 180.0f;
+
+ int dist_index = i_release == FALSE ? attention_info.distances[3] : attention_info.distances[1];
+ f32 dist_max = i_release == FALSE ? dComIfGp_getAttention()->getDistTable(dist_index).mDistMax :
+ dComIfGp_getAttention()->getDistTable(dist_index).mDistMaxRelease;
+ f32 lower_y = -1.0f * dComIfGp_getAttention()->getDistTable(dist_index).mLowerY;
+ f32 upper_y = -1.0f * dComIfGp_getAttention()->getDistTable(dist_index).mUpperY;
+ int mAngleSelect = dComIfGp_getAttention()->getDistTable(dist_index).mAngleSelect;
+
+ f32 fov = 180.0f;
if (mAngleSelect & 8) {
- dbg_f31 = 30.0f;
+ fov = 30.0f;
} else if (mAngleSelect & 0x10) {
- dbg_f31 = 45.0f;
+ fov = 45.0f;
} else if (mAngleSelect & 0x20) {
- dbg_f31 = 60.0f;
+ fov = 60.0f;
} else if (mAngleSelect & 0x40) {
- dbg_f31 = 90.0f;
+ fov = 90.0f;
} else if (mAngleSelect & 0x80) {
- dbg_f31 = 110.0f;
+ fov = 110.0f;
} else if (mAngleSelect & 0x100) {
- dbg_f31 = 135.0f;
+ fov = 135.0f;
}
- int pnt_chk = chkPointInArea(attn_pos, attention_info.position, dist_max, dbg_f29, dbg_f28, 0);
- if (pnt_chk && chkActorInSight(daPy_getPlayerActorClass(), dbg_f31, arg1)) {
- return 1;
+ int pnt_chk = chkPointInArea(attn_pos, attention_info.position, dist_max, lower_y, upper_y, 0);
+ if (pnt_chk && chkActorInSight(daPy_getPlayerActorClass(), fov, i_angleY)) {
+ return TRUE;
}
- return 0;
+ return FALSE;
}
/* 80A3AF64-80A3B000 010644 009C+00 1/1 0/0 0/0 .text srchPlayerActor__10daNpc_Kn_cFv */
BOOL daNpc_Kn_c::srchPlayerActor() {
- // NONMATCHING
+ if (mActorMngr1.getActorP() != NULL) {
+ if (!chkFindPlayer(TRUE, mCurAngle.y)) {
+ mActorMngr1.remove();
+ }
+ } else {
+ if (chkFindPlayer(FALSE, mCurAngle.y)) {
+ mActorMngr1.entry(daPy_getPlayerActorClass());
+ }
+ }
+
+ return mActorMngr1.getActorP() != NULL;
}
/* 80A3B000-80A3B074 0106E0 0074+00 2/2 0/0 0/0 .text getAttnPos__10daNpc_Kn_cFP10fopAc_ac_c */
-cXyz daNpc_Kn_c::getAttnPos(fopAc_ac_c* param_0) {
- cXyz pos(param_0->attention_info.position);
+cXyz daNpc_Kn_c::getAttnPos(fopAc_ac_c* i_actor) {
+ cXyz attn_pos(i_actor->attention_info.position);
- if (fopAcM_GetName(param_0) == PROC_ALINK) {
- f32 offset = static_cast<daPy_py_c*>(param_0)->getAttentionOffsetY();
- pos.y -= offset;
+ if (fopAcM_GetName(i_actor) == PROC_ALINK) {
+ f32 offset = static_cast<daPy_py_c*>(i_actor)->getAttentionOffsetY();
+ attn_pos.y -= offset;
}
- return pos;
+ return attn_pos;
}
/* 80A3B074-80A3B220 010754 01AC+00 1/1 0/0 0/0 .text turn__10daNpc_Kn_cFsii */
-BOOL daNpc_Kn_c::turn(s16 arg0, int arg1, int arg2) {
- if (field_0xe00 == 0) {
- field_0xe04 = fabsf(cM_sht2d((s16)(arg0 - field_0xdfa)));
- field_0xe04 = (field_0xe04 / 180.0f) * arg1;
- field_0xe04 = (int) field_0xe04 + 1;
- if (field_0xe04 < 8.0f) {
- field_0xe04 = 8.0f;
+BOOL daNpc_Kn_c::turn(s16 i_angle, int i_count, int i_direction) {
+ if (mTurnAmount == 0) {
+ mTurnCount = fabsf(cM_sht2d((s16)(i_angle - mStartAngle)));
+ mTurnCount = (mTurnCount / 180.0f) * i_count;
+ mTurnCount = (int)mTurnCount + 1;
+ if (mTurnCount < 8.0f) {
+ mTurnCount = 8.0f;
}
}
- s16 sVar1 = field_0xdfa;
- int o_arg = arg0;
- if (arg2 == 0) {
- arg2 = ((s16)(arg0 - field_0xdfa) >= 0) ? 1 : -1;
+ s16 sVar1 = mStartAngle;
+ int o_arg = i_angle;
+ if (i_direction == 0) {
+ i_direction = ((s16)(i_angle - mStartAngle) >= 0) ? 1 : -1;
}
- int dbg_r30 = (u16) (o_arg - sVar1);
- if (arg2 == -1) {
- dbg_r30 = -(u16) (0xFFFF - dbg_r30);
+ int angle_diff = (u16)(o_arg - sVar1);
+ if (i_direction == -1) {
+ angle_diff = -(u16)(0xFFFF - angle_diff);
}
- int offset = dbg_r30 * cM_ssin((s16) field_0xe00);
- field_0xe00 += (s16) (16384.0f / field_0xe04);
- if ((u16)field_0xe00 < 0x4000) {
- mTargetAngle.y = field_0xdfa + offset;
+ int offset = angle_diff * cM_ssin((s16)mTurnAmount);
+ mTurnAmount += (s16)(16384.0f / mTurnCount);
+
+ if ((u16)mTurnAmount < 0x4000) {
+ mCurAngle.y = mStartAngle + offset;
} else {
- mTargetAngle.y = arg0;
- field_0xe00 = 0x4000;
+ mCurAngle.y = i_angle;
+ mTurnAmount = 0x4000;
}
- return arg0 == mTargetAngle.y;
+ return i_angle == mCurAngle.y;
}
/* 80A3B220-80A3B3E8 010900 01C8+00 19/19 0/0 0/0 .text step__10daNpc_Kn_cFsiiii */
-s32 daNpc_Kn_c::step(s16 param_0, int param_1, int param_2, int param_3, int param_4) {
- // NONMATCHING
+int daNpc_Kn_c::step(s16 i_angle, int i_faceMotion, int i_motion, int i_turnCount,
+ int i_turnDirection) {
+ if (mStepMode >= 2 && i_angle != mCurAngle.y) {
+ mStepMode = 0;
+ }
+
+ if (mStepMode == 0) {
+ s16 angle_diff = i_angle - mCurAngle.y;
+ if (angle_diff == 0) {
+ mStepMode = 2;
+ } else {
+ mTargetAngle = i_angle;
+ mStartAngle = mCurAngle.y;
+ mTurnAmount = 0;
+ if ((int)fabsf(cM_sht2d(angle_diff)) >= 20) {
+ mFaceMotionSeqMngr.setNo(i_faceMotion, -1.0f, TRUE, 0);
+ mMotionSeqMngr.setNo(i_motion, -1.0f, TRUE, 0);
+ }
+ current.angle.y = mCurAngle.y;
+ shape_angle.y = current.angle.y;
+ mStepMode++;
+ }
+ } else if (mStepMode == 1) {
+ if (turn(mTargetAngle, i_turnCount, i_turnDirection)) {
+ current.angle.y = mCurAngle.y;
+ shape_angle.y = current.angle.y;
+ field_0xDB2.y = current.angle.y;
+ mStepMode++;
+ } else {
+ current.angle.y = mCurAngle.y;
+ shape_angle.y = current.angle.y;
+ }
+ }
+
+ return mStepMode > 1;
}
/* 80A3B3E8-80A3B448 010AC8 0060+00 20/20 0/0 0/0 .text initTalk__10daNpc_Kn_cFiPP10fopAc_ac_c */
-s32 daNpc_Kn_c::initTalk(int param_0, fopAc_ac_c** param_1) {
- mFlow.init(this,param_0, 0, param_1);
+int daNpc_Kn_c::initTalk(int i_flowID, fopAc_ac_c** i_partnerList_p) {
+ mFlow.init(this, i_flowID, 0, i_partnerList_p);
speedF = 0.0f;
speed.setall(0.0f);
return 1;
@@ -818,49 +1140,89 @@ s32 daNpc_Kn_c::initTalk(int param_0, fopAc_ac_c** param_1) {
/* 80A3B448-80A3B5EC 010B28 01A4+00 20/20 0/0 0/0 .text talkProc__10daNpc_Kn_cFPiiPP10fopAc_ac_ci
*/
-BOOL daNpc_Kn_c::talkProc(int* param_0, int param_1, fopAc_ac_c** param_2, int param_3) {
- // NONMATCHING
+BOOL daNpc_Kn_c::talkProc(int* param_0, int param_1, fopAc_ac_c** i_partnerList_p, int param_3) {
+ BOOL ret = FALSE;
+
+ if (dMsgObject_isMsgSendControl()) {
+ if (param_1) {
+ dMsgObject_offMsgSendControl();
+ }
+ } else if (mFlow.doFlow(this, i_partnerList_p, 0)) {
+ ret = TRUE;
+ } else {
+ if (mFlow.getMsg() != NULL) {
+ switch (mFlow.getMsg()->mode) {
+ case 2:
+ case 6:
+ if (param_0 != NULL) {
+ for (int i = 0; param_0[i] > 0; i++) {
+ if (param_0[i] == mFlow.getMsgNo()) {
+ ret = TRUE;
+ break;
+ }
+ }
+ }
+ break;
+ case 17:
+ if (param_3) {
+ ret = TRUE;
+ }
+ break;
+ }
+ }
+
+ int tmp1, face_motion, motion, tmp2;
+ if (mFlow.checkEventRender(&tmp1, &motion, &face_motion, &tmp2)) {
+ mFaceMotionSeqMngr.setNo(face_motion, -1.0f, FALSE, 0);
+ mMotionSeqMngr.setNo(motion, -1.0f, FALSE, 0);
+ }
+ }
+
+ return ret;
}
// FIXME: dummy functions to get rodata to align.
-f64 dummy_lits_00(int sel) {
+static f64 dummy_lits_00(int sel) {
switch (sel) {
- case 0: return 0.5;
- case 1: return 3.0;
- default: return 0.0;
+ case 0:
+ return 0.5;
+ case 1:
+ return 3.0;
+ default:
+ return 0.0;
}
}
-f32 dummy_lits_01(int sel) {
+
+static f32 dummy_lits_01(int sel) {
switch (sel) {
- case 0: return 0.85f;
- case 1: return 6.0f;
- default: return 1e9f;
+ case 0:
+ return 0.85f;
+ case 1:
+ return 6.0f;
+ default:
+ return 1e9f;
}
}
/* 80A3B5EC-80A3B708 010CCC 011C+00 1/1 0/0 0/0 .text setHitodamaPrtcl__10daNpc_Kn_cFv */
void daNpc_Kn_c::setHitodamaPrtcl() {
- // nonmatching
- static u16 const id[2] = {
- 0x8497,
- 0x8498,
- };
cXyz pos(eyePos);
for (int i = 0; i < 2; i++) {
- tevStr.mLightObj.mLightObj.dummy[i] = dComIfGp_particle_set(tevStr.mLightObj.mLightObj.dummy[i],
- id[i], &pos, &mTargetAngle, 0);
- JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(tevStr.mLightObj.mLightObj.dummy[i]);
- if (emitter) {
+ static const u16 id[2] = {0x8497,0x8498};
+ mHitodamaPrtclKey[i] = dComIfGp_particle_set(mHitodamaPrtclKey[i], id[i], &pos, &mCurAngle, 0);
+
+ JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mHitodamaPrtclKey[i]);
+ if (emitter != NULL) {
u8 alpha;
- if (dComIfGs_wolfeye_effect_check() == 0) {
- alpha = 0xff;
+ if (dComIfGs_wolfeye_effect_check() == FALSE) {
+ alpha = 0xFF;
} else {
alpha = 0;
}
- emitter->setGlobalTranslation(pos.x,pos.y,pos.z);
+ emitter->setGlobalTranslation(pos.x, pos.y, pos.z);
emitter->setGlobalAlpha(alpha);
}
}
@@ -868,9 +1230,7 @@ void daNpc_Kn_c::setHitodamaPrtcl() {
/* 80A3B708-80A3B720 010DE8 0018+00 1/0 0/0 0/0 .text decTmr__10daNpc_Kn_cFv */
void daNpc_Kn_c::decTmr() {
- if (mTimer == 0) {
- return;
+ if (mTimer != 0) {
+ mTimer--;
}
-
- mTimer--;
}
diff --git a/src/d/actor/d_a_npc_kn_teach01.inc b/src/d/actor/d_a_npc_kn_teach01.inc
new file mode 100644
index 0000000000..06c4107147
--- /dev/null
+++ b/src/d/actor/d_a_npc_kn_teach01.inc
@@ -0,0 +1,747 @@
+#include "d/actor/d_a_npc_kn.h"
+
+/* 80A3C998-80A3CB14 012078 017C+00 1/1 0/0 0/0 .text setParamTeach01__10daNpc_Kn_cFv */
+u32 daNpc_Kn_c::setParamTeach01() {
+ s16 talk_distance = daNpc_Kn_Param_c::m.common.talk_distance;
+ s16 talk_angle = daNpc_Kn_Param_c::m.common.talk_angle;
+ s16 attention_distance = daNpc_Kn_Param_c::m.common.attention_distance;
+ s16 attention_angle = daNpc_Kn_Param_c::m.common.attention_angle;
+
+ switch (mActionMode) {
+ case 0:
+ attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle);
+ attention_info.distances[fopAc_attn_BATTLE_e] = 0xe4;
+ attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
+ attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle);
+ return 0;
+ case 1:
+ if (field_0x170c != 0) {
+ return 0;
+ }
+ case 2:
+ attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle);
+ attention_info.distances[fopAc_attn_BATTLE_e] = 0xe4;
+ attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
+ attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle);
+ mAcchCir.SetWallR(daNpc_Kn_Param_c::m.common.width);
+ mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length);
+ return 4;
+ case 3:
+ attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle);
+ attention_info.distances[fopAc_attn_BATTLE_e] = 0xe4;
+ attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
+ attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle);
+ mAcchCir.SetWallR(135.0f);
+ mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length);
+ return 4;
+ }
+
+ return 10;
+}
+
+/* 80A3CB14-80A3CBFC 0121F4 00E8+00 1/1 0/0 0/0 .text setCollisionTeach01__10daNpc_Kn_cFv
+ */
+void daNpc_Kn_c::setCollisionTeach01() {
+ switch (mActionMode) {
+ case 0:
+ break;
+ case 1:
+ mCylCc.SetTgType(-1);
+ mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2);
+ mCylCc.SetTgSPrm(0x13);
+ mCylCc.OnTgNoConHit();
+
+ if (field_0x170c == 0) {
+ mCylCc.OnTgShield();
+ } else {
+ mCylCc.OffTgShield();
+ }
+ break;
+ case 2:
+ mCylCc.SetTgType(-1);
+ mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1);
+ mCylCc.SetTgSPrm(0x13);
+ mCylCc.OffTgShield();
+ mCylCc.OffTgNoAtHitInfSet();
+ mCylCc.OnTgNoConHit();
+ mCylCc.OnCoSetBit();
+ break;
+ case 3:
+ mCylCc.OffTgSetBit();
+ mCylCc.OffCoSetBit();
+ break;
+ }
+}
+
+/* 80A3CBFC-80A3CCC0 0122DC 00C4+00 1/1 0/0 0/0 .text teach01_selectAction__10daNpc_Kn_cFv */
+void daNpc_Kn_c::teach01_selectAction() {
+ switch (mActionMode) {
+ case 0:
+ mpTeachAction = &daNpc_Kn_c::teach01_start;
+ return;
+ case 1:
+ mpTeachAction = &daNpc_Kn_c::teach01_attackWait;
+ return;
+ case 2:
+ mpTeachAction = &daNpc_Kn_c::teach01_swordAttackWait;
+ return;
+ case 3:
+ mpTeachAction = &daNpc_Kn_c::teach01_swordFinishWait;
+ return;
+ }
+
+ mpTeachAction = &daNpc_Kn_c::wait;
+ return;
+}
+
+/* 80A3CCC0-80A3CDFC 0123A0 013C+00 1/0 0/0 0/0 .text teach01_start__10daNpc_Kn_cFPv */
+int daNpc_Kn_c::teach01_start(void* param_0) {
+ switch (mMode) {
+ case 0:
+ case 1:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ mJntAnm.lookPlayer(0);
+ mMode = 2;
+ case 2:
+ mEvtNo = 5;
+ field_0xe39 = 1;
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ case 3:
+ default:
+ return 1;
+ }
+}
+
+/* 80A3CDFC-80A3CF78 0124DC 017C+00 1/0 0/0 0/0 .text teach01_attackWait__10daNpc_Kn_cFPv
+ */
+int daNpc_Kn_c::teach01_attackWait(void* param_0) {
+ switch (mMode) {
+ case 0:
+ case 1:
+ mMotionSeqMngr.setNo(9, -1.0f, 1, 0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mJntAnm.lookPlayer(0);
+ mMode = 2;
+ case 2:
+ if (!ctrlWarp()) {
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ if (mCylCc.ChkTgHit()) {
+ mEvtNo = 6;
+ field_0x16f4.set(1.0f, 1.0f, 1.0f);
+ field_0x170c = 0;
+ field_0x170d = 0;
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28);
+ }
+ }
+ case 3:
+ default:
+ return 1;
+ }
+}
+
+/* 80A3CF78-80A3D32C 012658 03B4+00 1/0 0/0 0/0 .text teach01_swordAttackWait__10daNpc_Kn_cFPv */
+int daNpc_Kn_c::teach01_swordAttackWait(void* param_0) {
+ switch (mMode) {
+ case 0:
+ case 1:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(9, -1.0f, 0, 0);
+ mJntAnm.lookPlayer(0);
+ field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time;
+ mTargetPos = current.pos;
+ field_0x15bc = 0;
+ field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range);
+ speedF = 0.0f;
+ speed.zero();
+ mMode = 2;
+ case 2:
+ calcSlip();
+ mCcStts.Move();
+
+ if (mCylCc.ChkTgHit()) {
+ int cut_type = daPy_getPlayerActorClass()->getCutType();
+ if (cut_type == daPy_py_c::CUT_TYPE_JUMP ||
+ cut_type == daPy_py_c::CUT_TYPE_TURN_RIGHT ||
+ cut_type == daPy_py_c::CUT_TYPE_TURN_LEFT ||
+ daPy_getPlayerActorClass()->getCutCount() >= 4)
+ {
+ mActionMode = 3;
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h;
+ speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v;
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1f);
+ } else {
+ fopAc_ac_c* aTgHitActor_p = mCylCc.GetTgHitAc();
+ s16 angle = cLib_targetAngleY(&aTgHitActor_p->current.pos, &current.pos);
+ cXyz pos(0.0f, 0.0f, daNpc_Kn_Param_c::m.small_slide_distance);
+ mDoMtx_stack_c::YrotS(angle);
+ mDoMtx_stack_c::multVec(&pos, &mTargetPos);
+ mTargetPos += current.pos;
+ field_0x15bc = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x1f, -1.0f, 1, 0);
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1e);
+ }
+ } else {
+ if (cLib_calcTimer(&field_0xdec) == 0 || checkCollisionSword()) {
+ mTargetPos = current.pos;
+
+ int is_lockon = FALSE;
+ if (dComIfGp_getAttention()->LockonTruth()) {
+ is_lockon = TRUE;
+ }
+
+ checkCollisionSword() ? mEvtNo = 4 : mEvtNo = 1;
+
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 1, 0);
+
+ is_lockon ? mFlowNodeNo = 0x2da : mFlowNodeNo = 0x2db;
+ } else {
+ calcSwordAttackMove(1);
+ }
+ }
+ case 3:
+ default:
+ return 1;
+ }
+}
+
+/* 80A3D32C-80A3D6D8 012A0C 03AC+00 1/0 0/0 0/0 .text teach01_swordFinishWait__10daNpc_Kn_cFPv */
+int daNpc_Kn_c::teach01_swordFinishWait(void* param_0) {
+ switch (mMode) {
+ case 0:
+ case 1:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0);
+ mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1);
+ mJntAnm.lookNone(0);
+ field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time;
+ mMode = 2;
+ case 2: {
+ mTargetPos = current.pos;
+ int no = mMotionSeqMngr.getNo();
+ if (no == 0x12) {
+ if (speed.y <= 0.0f && mAcch.ChkGroundHit()) {
+ speedF = 0.0f;
+ speed.zero();
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x13, -1.0f, 0, 0);
+ setLandingPrtcl();
+ }
+ } else if (no == 0x13) {
+ if (mMotionSeqMngr.getStepNo() == 0) {
+ if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) {
+ setLandingPrtcl();
+ }
+ } else {
+ if (!checkDownFlg()) {
+ cXyz pos(10.0f, 0.0f, 0.0f);
+ onDownFlg();
+
+ u8 backbone_joint = getBackboneJointNo();
+ J3DModel* model = mpModelMorf[0]->getModel();
+ mDoMtx_stack_c::copy(model->getAnmMtx(backbone_joint));
+ mDoMtx_stack_c::multVec(&pos, &field_0x15c0);
+ setDownPos(&field_0x15c0);
+ } else if (checkCutDownHitFlg()) {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x14, -1.0f, 0, 0);
+
+ if (mType == 0) {
+ mEvtNo = 7;
+ } else if (mType == 1) {
+ mEvtNo = 9;
+ }
+
+ mSound.startCollisionSE(Z2SE_HIT_SWORD_STAB, 0x1e);
+ break;
+ }
+ }
+ }
+
+ if (cLib_calcTimer(&field_0xdec) == 0) {
+ if (daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_DOWN) {
+ offDownFlg();
+ mTargetPos = current.pos;
+ mEvtNo = 3;
+ mFlowNodeNo = 0x2dc;
+ mActionMode = 2;
+ }
+ }
+ break;
+ }
+ case 3:
+ default:
+ break;
+ }
+
+ return 1;
+}
+
+/* 80A3D6D8-80A3DCEC 012DB8 0614+00 3/3 0/0 0/0 .text ctrlWarp__10daNpc_Kn_cFv */
+int daNpc_Kn_c::ctrlWarp() {
+ int sp28 = 0;
+
+ switch (field_0x170c) {
+ case 0: {
+ cXyz spEC(daPy_getPlayerActorClass()->current.pos);
+
+ bool sp8 = (daPy_getPlayerActorClass()->current.pos - current.pos).absXZ() > daNpc_Kn_Param_c::m.warp_distance;
+ if (sp8) {
+ sp28 = 1;
+ cXyz spE0(0.0f, 0.0f, 600.0f);
+ mDoMtx_stack_c::YrotS(daPy_getPlayerActorClass()->shape_angle.y);
+ mDoMtx_stack_c::multVec(&spE0, &spE0);
+ spE0 += spEC;
+ spE0.y += 1000.0f;
+
+ for (int i = 0; i < 5; i++) {
+ static Vec l_checkOffset[] = {
+ {0.0f, 0.0f, 0.0f},
+ {50.0f, 0.0f, 0.0f},
+ {-50.0f, 0.0f, 0.0f},
+ {0.0f, 0.0f, 50.0f},
+ {0.0f, 0.0f, -50.0f},
+ };
+
+ cXyz spD4 = spE0 + l_checkOffset[i];
+ if (!fopAcM_gc_c::gndCheck(&spD4) || !(fopAcM_gc_c::getGroundY() >= current.pos.y - 100.0f)) {
+ sp28 = 0;
+ break;
+ }
+ }
+
+ if (sp28 == 1) {
+ spE0.y = fopAcM_gc_c::getGroundY();
+ field_0x1700 = spE0;
+ field_0x170c = 1;
+ field_0x170d = 0;
+ field_0x16f4.set(1.0f, 1.0f, 1.0f);
+ }
+ }
+ break;
+ }
+ case 1:
+ sp28 = 1;
+ field_0x170d++;
+
+ static Vec l_WarpInScaleTable[] = {
+ {1.0f, 1.0f, 1.0f},
+ {1.594f, 0.824f, 1.67f},
+ {1.91f, 0.72f, 1.79f},
+ {1.594f, 0.81699997f, 1.67f},
+ {0.4f, 1.5f, 1.0f},
+ {0.0f, 1.3f, 0.0f},
+ {0.0f, 1.0f, 0.0f},
+ {0.0f, 0.0f, 0.0f},
+ };
+
+ if (field_0x170d < 15) {
+ for (int i = 0; i < 7; i++) {
+ static u8 l_warpInTimeTable[] = {1, 4, 8, 11, 13, 14, 15, 16};
+
+ int sp1C = l_warpInTimeTable[i];
+ int sp18 = l_warpInTimeTable[i + 1];
+ if (sp1C <= field_0x170d && sp18 > field_0x170d) {
+ cXyz spC8(l_WarpInScaleTable[i]);
+ cXyz spBC(l_WarpInScaleTable[i + 1]);
+
+ field_0x16f4 = spC8 + (((spBC - spC8) * (field_0x170d - sp1C)) / (sp18 - sp1C));
+ }
+ }
+ } else {
+ field_0x16f4 = l_WarpInScaleTable[7];
+ field_0x170c = 2;
+ field_0x170d = 0;
+ }
+ break;
+ case 2:
+ sp28 = 1;
+ field_0x170d++;
+ if (field_0x170d >= 5) {
+ field_0x170d = 0;
+ field_0x170c = 3;
+ setPos(field_0x1700);
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ }
+ break;
+ case 3:
+ sp28 = 1;
+ field_0x170d++;
+
+ static Vec l_WarpOutScaleTable[] = {
+ {0.0f, 1.0f, 0.0f},
+ {0.0f, 1.32f, 0.0f},
+ {0.594f, 1.5f, 1.0f},
+ {1.0f, 1.0f, 1.0f},
+ };
+
+ if (field_0x170d < 6) {
+ for (int i = 0; i < 3; i++) {
+ static u8 l_warpOutTimeTable[] = {1, 3, 5, 6};
+
+ int sp10 = l_warpOutTimeTable[i];
+ int spC = l_warpOutTimeTable[i + 1];
+ if (sp10 <= field_0x170d && spC > field_0x170d) {
+ cXyz spB0(l_WarpOutScaleTable[i]);
+ cXyz spA4(l_WarpOutScaleTable[i + 1]);
+
+ field_0x16f4 = spB0 + (((spA4 - spB0) * (field_0x170d - sp10)) / (spC - sp10));
+ }
+ }
+ } else {
+ field_0x16f4 = l_WarpOutScaleTable[3];
+ field_0x170c = 0;
+ field_0x170d = 0;
+ }
+ break;
+ }
+
+ return sp28;
+}
+
+/* 80A3DCEC-80A3DEC4 0133CC 01D8+00 1/0 0/0 0/0 .text ECut_firstEncount__10daNpc_Kn_cFi
+ */
+int daNpc_Kn_c::ECut_firstEncount(int i_idx) {
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+
+ int rt = 0;
+ int prm = -1;
+
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
+ }
+
+ if (event_manager->getIsAddvance(i_idx)) {
+ switch (prm) {
+ case 0:
+ mJntAnm.lookPlayer(0);
+ mActionMode = 1;
+ break;
+ case 10:
+ daPy_getPlayerActorClass()->changeDemoMoveAngle(fopAcM_searchPlayerAngleY(this) + 0x8000);
+ field_0xdec = 52;
+ break;
+ case 20:
+ break;
+ case 30:
+ mMotionSeqMngr.setNo(9, -1.0f, 1, 0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ break;
+ }
+ }
+
+ switch (prm) {
+ case 0:
+ rt = 1;
+ break;
+ case 10:
+ if (cLib_calcTimer<int>(&field_0xdec) == 0) {
+ fopAc_ac_c* parent_p = (fopAc_ac_c*)fpcM_SearchByID(parentActorID);
+ if (parent_p != NULL) {
+ fopAcM_delete(parent_p);
+ }
+
+ field_0xe2c = 0;
+ rt = 1;
+ }
+ break;
+ default:
+ rt = 1;
+ break;
+ }
+
+ return rt;
+}
+
+/* 80A3DEC4-80A3E550 0135A4 068C+00 1/0 0/0 0/0 .text ECut_attackFailed__10daNpc_Kn_cFi
+ */
+int daNpc_Kn_c::ECut_attackFailed(int i_idx) {
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int sp8 = 0;
+
+ int rt = 0;
+ int prm = -1;
+
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
+ }
+
+ if (event_manager->getIsAddvance(i_idx)) {
+ switch (prm) {
+ case 0:
+ daNpcT_offTmpBit(0xB);
+ daNpcT_offTmpBit(0xC);
+ daNpcT_offTmpBit(0xD);
+
+ mMotionSeqMngr.setNo(0x1A, -1.0f, 1, 0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+
+ mJntAnm.lookPlayer(0);
+ field_0xdec = 12;
+ break;
+ case 10:
+ break;
+ case 20:
+ initTalk(0x2D6, NULL);
+ break;
+ case 25:
+ initTalk(0x2D6, NULL);
+ break;
+ case 30:
+ initTalk(0x2D6, NULL);
+ break;
+ case 40:
+ initTalk(0x2D6, NULL);
+ break;
+ case 50: {
+ Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING, 0, 0);
+ current.pos = home.pos;
+ old.pos = home.pos;
+ setAngle(home.angle.y);
+
+ cXyz sp18(0.0f, 0.0f, 375.0f);
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&sp18, &sp18);
+
+ cXyz spC(sp18);
+ spC.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&spC)) {
+ sp18.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp18, fopAcM_searchPlayerAngleY(this) + 0x8000, 0);
+ daPy_getPlayerActorClass()->onTraningCutDown();
+ break;
+ }
+ case 60:
+ initTalk(0x2D8, NULL);
+ break;
+ case 70:
+ initTalk(0x2D9, NULL);
+ break;
+ case 80:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(24, -1.0f, 1, 0);
+ mJntAnm.lookNone(0);
+ break;
+ }
+ }
+
+ switch (prm) {
+ case 0:
+ if (cLib_calcTimer<int>(&field_0xdec) == 0 && daPy_getPlayerActorClass()->checkPlayerFly()) {
+ rt = 1;
+ daPy_getPlayerActorClass()->onLargeDamageUpStop();
+ } else if (field_0xdec == 1) {
+ daPy_getPlayerActorClass()->changeDemoMoveAngle(fopAcM_searchPlayerAngleY(this) + 0x8000);
+ daPy_getPlayerActorClass()->setThrowDamage(fopAcM_searchPlayerAngleY(this), 20.0f, 30.0f, 0, 1, 0);
+ }
+
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
+ case 10:
+ if (!daPy_getPlayerActorClass()->checkPlayerFly()) {
+ rt = 1;
+ }
+
+ daPy_getPlayerActorClass()->onLargeDamageUpStop();
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
+ case 20:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ } else {
+ daPy_getPlayerActorClass()->onLargeDamageUpStop();
+ }
+ break;
+ case 40:
+ case 30:
+ case 25:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 50:
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ rt = 1;
+ break;
+ case 70:
+ case 60:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 80:
+ if (mMotionSeqMngr.getNo() == 0x18 && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ mActionMode = 2;
+ }
+ break;
+ default:
+ rt = 1;
+ break;
+ }
+
+ return rt;
+}
+
+/* 80A3E550-80A3EB84 013C30 0634+00 3/0 0/0 0/0 .text ECut_firstSkillGet__10daNpc_Kn_cFi
+ */
+int daNpc_Kn_c::ECut_firstSkillGet(int i_idx) {
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int sp8 = 0;
+
+ int rt = 0;
+ int prm = -1;
+
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
+ }
+
+ if (event_manager->getIsAddvance(i_idx)) {
+ switch (prm) {
+ case 0:
+ daNpcT_offTmpBit(0xB);
+ daNpcT_offTmpBit(0xC);
+ daNpcT_offTmpBit(0xD);
+ daNpcT_offTmpBit(0xE);
+ daNpcT_offTmpBit(0xF);
+ field_0xdec = 30;
+ break;
+ case 2:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x15, -1.0f, 0, 0);
+ break;
+ case 4:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0);
+ break;
+ case 6:
+ mJntAnm.lookNone(0);
+ break;
+ case 10: {
+ mStepMode = 2;
+
+ cXyz sp1C(0.0f, 0.0f, 500.0f);
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(cLib_targetAngleY(&current.pos, &home.pos));
+ mDoMtx_stack_c::multVec(&sp1C, &sp1C);
+
+ cXyz sp10(sp1C);
+ sp10.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&sp10)) {
+ sp1C.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp1C, (s16)cLib_targetAngleY(&home.pos, &current.pos), 0);
+ initTalk(0x2DD, NULL);
+ break;
+ }
+ case 12:
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ break;
+ case 15:
+ Z2GetAudioMgr()->bgmStreamPrepare(0x2000038);
+ Z2GetAudioMgr()->bgmStreamPlay();
+ break;
+ case 20:
+ initTalk(0x2DD, NULL);
+ break;
+ case 30:
+ initTalk(0x2DD, NULL);
+ break;
+ case 40:
+ initTalk(0x2DD, NULL);
+ break;
+ case 50:
+ initTalk(0x2DD, NULL);
+ break;
+ case 60:
+ initTalk(0x2DD, NULL);
+ break;
+ }
+ }
+
+ switch (prm) {
+ case 0:
+ if (cLib_calcTimer<int>(&field_0xdec) == 0) {
+ rt = 1;
+ }
+ break;
+ case 2:
+ if (mMotionSeqMngr.getNo() == 0x15 && mMotionSeqMngr.getStepNo() > 0 && mMorfLoops != 0) {
+ rt = 1;
+ }
+ break;
+ case 4:
+ if (mMotionSeqMngr.getNo() == 0x16 && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ }
+ break;
+ case 6:
+ if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ rt = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ }
+ } else {
+ rt = 1;
+ }
+ break;
+ case 10:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ if (field_0x170e == 0) {
+ field_0x170e = 1;
+ Z2GetAudioMgr()->bgmStop(0x32, 0);
+ }
+ }
+ break;
+ case 20:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
+ case 30:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
+ case 40:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 50:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 60:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ default:
+ rt = 1;
+ break;
+ }
+
+ return rt;
+}
diff --git a/src/d/actor/d_a_npc_kn_teach02.inc b/src/d/actor/d_a_npc_kn_teach02.inc
new file mode 100644
index 0000000000..a7e93732be
--- /dev/null
+++ b/src/d/actor/d_a_npc_kn_teach02.inc
@@ -0,0 +1,645 @@
+#include "d/actor/d_a_npc_kn.h"
+#include "d/actor/d_a_obj_knBullet.h"
+
+/* 80A3EB84-80A3EE38 014264 02B4+00 1/1 0/0 0/0 .text setParamTeach02__10daNpc_Kn_cFv */
+u32 daNpc_Kn_c::setParamTeach02() {
+ s16 talk_distance = daNpc_Kn_Param_c::m.common.talk_distance;
+ s16 talk_angle = daNpc_Kn_Param_c::m.common.talk_angle;
+ s16 attention_distance = daNpc_Kn_Param_c::m.common.attention_distance;
+ s16 attention_angle = daNpc_Kn_Param_c::m.common.attention_angle;
+ f32 radius = daNpc_Kn_Param_c::m.common.attention_offset;
+ f32 height = daNpc_Kn_Param_c::m.common.height;
+
+ switch (mActionMode) {
+ case 7:
+ case 6:
+ attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle);
+ attention_info.distances[fopAc_attn_BATTLE_e] = 0xe4;
+ attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
+ attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle);
+ return 4;
+ case 5: {
+ attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle);
+ attention_info.distances[fopAc_attn_BATTLE_e] = 0xe4;
+ attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
+ attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle);
+ cXyz pos;
+ mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(getBackboneJointNo()));
+ mDoMtx_stack_c::multVecZero(&pos);
+
+ f32 absxz = (daPy_getPlayerActorClass()->current.pos - pos).absXZ();
+
+ if (absxz < 255.0f) {
+ return 0x200004;
+ } else {
+ return 4;
+ }
+ }
+ case 4:
+ attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle);
+ attention_info.distances[fopAc_attn_BATTLE_e] = 0xe4;
+ attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
+ attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle);
+ mAcchCir.SetWallR(daNpc_Kn_Param_c::m.common.width);
+ mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length);
+ return 0;
+ }
+
+ return 10;
+}
+
+/* 80A3EE38-80A3EF1C 014518 00E4+00 1/1 0/0 0/0 .text setCollisionTeach02__10daNpc_Kn_cFv
+ */
+void daNpc_Kn_c::setCollisionTeach02() {
+ switch (mActionMode) {
+ case 4:
+ break;
+ case 5:
+ mCylCc.SetTgType(-1);
+ mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2);
+ mCylCc.SetTgSPrm(0x13);
+ mCylCc.OnTgShield();
+ mCylCc.OffTgNoAtHitInfSet();
+ mCylCc.OnTgNoConHit();
+ break;
+ case 6:
+ mCylCc.SetTgType(-1);
+ mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1);
+ mCylCc.SetTgSPrm(0x13);
+ mCylCc.OffTgShield();
+ mCylCc.OffTgNoAtHitInfSet();
+ mCylCc.OnTgNoConHit();
+ break;
+ case 7:
+ mCylCc.SetTgType(-1);
+ mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2);
+ mCylCc.SetTgSPrm(0x13);
+ mCylCc.OffTgShield();
+ mCylCc.OnTgNoConHit();
+ break;
+ }
+}
+
+/* 80A3EF1C-80A3EFE0 0145FC 00C4+00 1/1 0/0 0/0 .text teach02_selectAction__10daNpc_Kn_cFv */
+void daNpc_Kn_c::teach02_selectAction() {
+ switch (mActionMode) {
+ case 4:
+ mpTeachAction = &daNpc_Kn_c::teach02_start;
+ return;
+ case 5:
+ mpTeachAction = &daNpc_Kn_c::teach02_shieldBashWait;
+ return;
+ case 6:
+ mpTeachAction = &daNpc_Kn_c::teach02_finishWait;
+ return;
+ case 7:
+ mpTeachAction = &daNpc_Kn_c::teach02_shieldReflectWait;
+ return;
+ }
+
+ mpTeachAction = &daNpc_Kn_c::wait;
+ return;
+}
+
+/* 80A3EFE0-80A3F358 0146C0 0378+00 1/0 0/0 0/0 .text teach02_shieldBashWait__10daNpc_Kn_cFPv */
+int daNpc_Kn_c::teach02_shieldBashWait(void* param_0) {
+ switch (mMode) {
+ case 0:
+ case 1:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(9, -1.0f, 0, 0);
+ mJntAnm.lookPlayer(0);
+ field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time;
+ mTargetPos = current.pos;
+ field_0x15bc = 0;
+ field_0x15d0 =
+ cLib_getRndValue(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range);
+ speedF = 0.0f;
+ speed.zero();
+ mMode = 2;
+ case 2:
+ mCcStts.Move();
+
+ if (mCylCc.ChkTgShieldHit()) {
+ u8 cut_type = daPy_getPlayerActorClass()->getCutType();
+
+ if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) {
+ s16 angle = cLib_targetAngleY(&daPy_getPlayerActorClass()->current.pos,
+ &attention_info.position);
+ cXyz pos(0.0f, 0.0f, daNpc_Kn_Param_c::m.small_slide_distance);
+
+ mDoMtx_stack_c::YrotS(angle);
+ mDoMtx_stack_c::multVec(&pos, &mTargetPos);
+ mTargetPos += current.pos;
+ field_0x15bc = 1;
+ mCylCc.ClrTgHit();
+ mActionMode = 6;
+ mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28);
+ break;
+ }
+ }
+
+ if (!cLib_calcTimer(&field_0xdec) || checkCollisionSword()) {
+ BOOL is_lockon = FALSE;
+ if (dComIfGp_getAttention()->LockonTruth()) {
+ is_lockon = TRUE;
+ }
+
+ if (checkCollisionSword()) {
+ mEvtNo = 4;
+ } else {
+ mEvtNo = 1;
+ }
+
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 1, 0);
+
+ if (is_lockon) {
+ mFlowNodeNo = 0x2c0;
+ } else {
+ mFlowNodeNo = 0x2bf;
+ }
+ } else {
+ if (mCylCc.ChkTgHit()) {
+ if (!mCylCc.GetTgHitObj()->ChkAtType(0x10)) {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0x1b, -1.0f, 1, 0);
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28);
+ break;
+ }
+ }
+
+ calcSwordAttackMove(1);
+ }
+ case 3:
+ default:
+ break;
+ }
+
+ return 1;
+}
+
+/* 80A3F358-80A3F5A4 014A38 024C+00 1/0 0/0 0/0 .text teach02_finishWait__10daNpc_Kn_cFPv
+ */
+int daNpc_Kn_c::teach02_finishWait(void* param_0) {
+ switch (mMode) {
+ case 0:
+ case 1:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(11, -1.0f, 1, 0);
+ mJntAnm.lookPlayer(0);
+ field_0xdec = daNpc_Kn_Param_c::m.followup_wait_time;
+ mMode = 2;
+ case 2:
+ calcSlip();
+ mCcStts.Move();
+
+ if (mCylCc.ChkTgHit()) {
+ u8 cut_type = daPy_getPlayerActorClass()->getCutType();
+
+ if (cut_type != daPy_py_c::CUT_TYPE_GUARD_ATTACK) {
+ if (mType == 1) {
+ mEvtNo = 10;
+ } else if (mType == 2) {
+ mEvtNo = 12;
+ }
+
+ cXyz pos(0.0f, 0.0f, daNpc_Kn_Param_c::m.big_slide_distance);
+ mDoMtx_stack_c::YrotS(cLib_targetAngleY(&daPy_getPlayerActorClass()->current.pos,
+ &attention_info.position));
+ mDoMtx_stack_c::multVec(&pos, &mTargetPos);
+ mTargetPos += current.pos;
+ field_0x15bc = 1;
+ mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1e);
+ break;
+ }
+ }
+
+ if (!cLib_calcTimer(&field_0xdec)) {
+ mEvtNo = 1;
+ mFlowNodeNo = 0x2c1;
+ mActionMode = 5;
+
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 1, 0);
+ }
+ case 3:
+ default:
+ break;
+ }
+
+ return 1;
+}
+
+/* 80A3F5A4-80A3F99C 014C84 03F8+00 1/0 0/0 0/0 .text teach02_shieldReflectWait__10daNpc_Kn_cFPv
+ */
+int daNpc_Kn_c::teach02_shieldReflectWait(void* param_0) {
+
+ switch (mMode) {
+ case 0:
+ case 1:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(32, -1.0f, 0, 0);
+ mJntAnm.lookPlayer(0);
+ mMode = 2;
+ case 2:
+ mCcStts.Move();
+
+ if (field_0x15bd != 0) {
+ if (!daPy_getPlayerActorClass()->checkPlayerFly()) {
+ mEvtNo = 2;
+ if (field_0x15bd == 1) {
+ mFlowNodeNo = 0x2C4;
+ } else if (field_0x15bd == 2) {
+ mFlowNodeNo = 0x2C3;
+ }
+ field_0x15bd = 0;
+ }
+ } else {
+ if (parentActorID == fpcM_ERROR_PROCESS_ID_e || fpcM_SearchByID(parentActorID) == NULL) {
+ if (mMotionSeqMngr.getNo() == 0x19 && mMotionSeqMngr.getStepNo() == 0) {
+ if (mpModelMorf[0]->getFrame() >= 2.0f && mpModelMorf[0]->getFrame() < 3.0f) {
+ cXyz sp20(150.0f, 0.0f, 0.0f);
+ mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(0xD));
+ mDoMtx_stack_c::multVec(&sp20, &sp20);
+ parentActorID = fopAcM_createChild(PROC_KN_BULLET, fopAcM_GetID(this), 0, &sp20, fopAcM_GetRoomNo(this), &current.angle, NULL, -1, NULL);
+ }
+ } else {
+ mMotionSeqMngr.setNo(0x19, -1.0f, 1, 0);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ }
+ } else {
+ fopAc_ac_c* parent_p;
+ if (fopAcM_SearchByID(parentActorID, &parent_p) && parent_p != NULL && fopAcM_GetName(parent_p) == PROC_KN_BULLET && ((daObjKnBullet_c*)parent_p)->getActionMode() == 0) {
+ if (mpModelMorf[0]->getFrame() >= 34.0f && mpModelMorf[0]->getFrame() < 35.0f) {
+ ((daObjKnBullet_c*)parent_p)->setActionMode(1);
+ parent_p->current.angle.y = mCurAngle.y;
+ parent_p->shape_angle.y = mCurAngle.y;
+ }
+ }
+ }
+
+ if (mCylCc.ChkTgHit()) {
+ fopAc_ac_c* aTgHitActor_p = mCylCc.GetTgHitAc();
+ JUT_ASSERT(437, 0 != aTgHitActor_p);
+
+ if (fopAcM_GetName(aTgHitActor_p) == PROC_KN_BULLET) {
+ mEvtNo = 0xB;
+
+ s16 var_r27 = cLib_targetAngleY(&aTgHitActor_p->current.pos, &current.pos);
+ cXyz sp14(0.0f, 0.0f, daNpc_Kn_Param_c::m.big_slide_distance);
+ mDoMtx_stack_c::YrotS(var_r27);
+ mDoMtx_stack_c::multVec(&sp14, &mTargetPos);
+ mTargetPos += current.pos;
+ field_0x15bc = 1;
+ mSound.startCollisionSE(Z2SE_HIT_HARD_BODY, 0x1E);
+ }
+ }
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ }
+ break;
+ case 3:
+ default:
+ break;
+ }
+
+ return 1;
+}
+
+/* 80A3F99C-80A3FFB4 01507C 0618+00 3/0 0/0 0/0 .text ECut_secondSkillExplain__10daNpc_Kn_cFi */
+int daNpc_Kn_c::ECut_secondSkillExplain(int i_idx) {
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int sp8 = 0;
+
+ int rt = 0;
+ int prm = -1;
+
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
+ }
+
+ if (event_manager->getIsAddvance(i_idx)) {
+ switch (prm) {
+ case 0:
+ field_0xdec = 30;
+ break;
+ case 2:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(21, -1.0f, 0, 0);
+ break;
+ case 4:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(22, -1.0f, 0, 0);
+ break;
+ case 6:
+ mJntAnm.lookNone(0);
+ break;
+ case 10:
+ mStepMode = 2;
+ initTalk(0x2D7, NULL);
+ break;
+ case 20: {
+ Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING, 0, 0);
+
+ setPos(home.pos);
+ setAngle(home.angle.y);
+
+ cXyz sp64(0.0f, 0.0f, 375.0f);
+ mDoMtx_stack_c::transS(home.pos);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&sp64, &sp64);
+
+ cXyz sp58(sp64);
+ sp58.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&sp58)) {
+ sp64.y = fopAcM_gc_c::getGroundY() + 15.0f;
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp64, home.angle.y + 0x8000, 0);
+ daPy_getPlayerActorClass()->onTraningShieldAttack();
+ break;
+ }
+ case 30:
+ initTalk(0x2C6, NULL);
+ break;
+ case 40:
+ initTalk(0x2BE, NULL);
+ break;
+ case 50:
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(24, -1.0f, 1, 0);
+ mJntAnm.lookNone(0);
+ break;
+ }
+ }
+
+ switch (prm) {
+ case 0:
+ if (cLib_calcTimer<int>(&field_0xdec) == 0) {
+ rt = 1;
+ }
+ break;
+ case 2:
+ if (mMotionSeqMngr.getNo() == 0x15 && mMotionSeqMngr.getStepNo() > 0 && mMorfLoops != 0) {
+ rt = 1;
+ }
+ break;
+ case 4:
+ if (mMotionSeqMngr.getNo() == 0x16 && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ }
+ break;
+ case 6:
+ if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) {
+ if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ rt = 1;
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ }
+ } else {
+ rt = 1;
+ }
+ break;
+ case 10:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 20: {
+ cXyz sp28(0.0f, 0.0f, 375.0f);
+ mDoMtx_stack_c::transS(home.pos);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&sp28, &sp28);
+
+ cXyz sp1C(sp28);
+ sp1C.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&sp1C)) {
+ sp28.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp28, home.angle.y + 0x8000, 0);
+ rt = 1;
+ break;
+ }
+ case 30:
+ case 40:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 50:
+ if (mMotionSeqMngr.getNo() == 0x18 && mMotionSeqMngr.getStepNo() > 0) {
+ rt = 1;
+ mActionMode = 5;
+ offDownFlg();
+ }
+ break;
+ default:
+ rt = 1;
+ break;
+ }
+
+ return rt;
+}
+
+/* 80A3FFB4-80A403B8 015694 0404+00 1/0 0/0 0/0 .text ECut_reflectExplain__10daNpc_Kn_cFi
+ */
+int daNpc_Kn_c::ECut_reflectExplain(int i_idx) {
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int sp8 = 0;
+
+ int rt = 0;
+ int prm = -1;
+
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
+ }
+
+ if (event_manager->getIsAddvance(i_idx)) {
+ switch (prm) {
+ case 0:
+ daNpcT_offTmpBit(0xB);
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(28, -1.0f, 1, 0);
+ mJntAnm.lookPlayer(0);
+ field_0xdec = 30;
+ break;
+ case 10:
+ mStepMode = 2;
+ initTalk(0x2C2, NULL);
+ break;
+ case 20: {
+ setPos(home.pos);
+ setAngle(home.angle.y);
+
+ cXyz sp24(0.0f, 0.0f, 600.0f);
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&sp24, &sp24);
+
+ cXyz sp18(sp24);
+ sp18.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&sp18)) {
+ sp24.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp24, home.angle.y + 0x8000, 0);
+ break;
+ }
+ case 30:
+ initTalk(0x2C2, NULL);
+ break;
+ }
+ }
+
+ switch (prm) {
+ case 0:
+ if (cLib_calcTimer<int>(&field_0xdec) == 0) {
+ mTargetPos = current.pos;
+ field_0x15bc = 0;
+ speedF = 0.0f;
+ speed.zero();
+
+ if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) {
+ rt = 1;
+ } else if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ }
+ } else {
+ calcSlip();
+ }
+ break;
+ case 10:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ break;
+ case 20:
+ rt = 1;
+ break;
+ case 30:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ mActionMode = 7;
+ }
+ break;
+ default:
+ rt = 1;
+ break;
+ }
+
+ return rt;
+}
+
+/* 80A403B8-80A408B4 015A98 04FC+00 2/0 0/0 0/0 .text ECut_secondSkillGet__10daNpc_Kn_cFi
+ */
+int daNpc_Kn_c::ECut_secondSkillGet(int i_idx) {
+ dEvent_manager_c* event_manager = &dComIfGp_getEventManager();
+ int sp8 = 0;
+
+ int rt = 0;
+ int prm = -1;
+
+ int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm");
+ if (prm_p != NULL) {
+ prm = *prm_p;
+ }
+
+ if (event_manager->getIsAddvance(i_idx)) {
+ switch (prm) {
+ case 0:
+ daNpcT_offTmpBit(0xB);
+ daNpcT_offTmpBit(0xC);
+
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(28, -1.0f, 1, 0);
+
+ mJntAnm.lookPlayer(0);
+ field_0xdec = 30;
+ break;
+ case 10: {
+ mStepMode = 2;
+
+ cXyz sp18(0.0f, 0.0f, 500.0f);
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(cLib_targetAngleY(&current.pos, &home.pos));
+ mDoMtx_stack_c::multVec(&sp18, &sp18);
+
+ cXyz spC(sp18);
+ spC.y += 500.0f;
+ if (fopAcM_gc_c::gndCheck(&spC)) {
+ sp18.y = fopAcM_gc_c::getGroundY();
+ }
+
+ daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp18, (s16)cLib_targetAngleY(&home.pos, &current.pos), 0);
+ initTalk(0x2C5, NULL);
+ break;
+ }
+ case 12:
+ setAngle(fopAcM_searchPlayerAngleY(this));
+ break;
+ case 15:
+ Z2GetAudioMgr()->bgmStreamPrepare(0x2000038);
+ Z2GetAudioMgr()->bgmStreamPlay();
+ break;
+ case 20:
+ initTalk(0x2C5, NULL);
+ break;
+ case 30:
+ initTalk(0x2C5, NULL);
+ break;
+ }
+ }
+
+ switch (prm) {
+ case 0:
+ if (cLib_calcTimer<int>(&field_0xdec) == 0) {
+ mTargetPos = current.pos;
+ field_0x15bc = 0;
+ speedF = 0.0f;
+ speed.zero();
+
+ if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) {
+ rt = 1;
+ } else if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) {
+ mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0);
+ mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
+ }
+ } else {
+ calcSlip();
+ }
+ break;
+ case 10:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ if (field_0x170e == 0) {
+ field_0x170e = 1;
+ Z2GetAudioMgr()->bgmStop(0x32, 0);
+ }
+ }
+ break;
+ case 20:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ rt = 1;
+ }
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
+ case 30:
+ if (talkProc(NULL, 0, NULL, 0)) {
+ setSceneChange(1);
+ }
+ cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800);
+ setAngle(mCurAngle.y);
+ break;
+ default:
+ rt = 1;
+ break;
+ }
+
+ return rt;
+}