mirror of
https://github.com/zeldaret/tp
synced 2026-05-28 00:16:11 -04:00
npc_kn mostly done (#2609)
* npc_kn mostly done * fix shieldD * pr fixes * weak func fixes
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
+3203
-2196
File diff suppressed because it is too large
Load Diff
+708
-348
File diff suppressed because it is too large
Load Diff
@@ -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, ¤t.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(¤t.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, ¤t.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;
|
||||
}
|
||||
@@ -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), ¤t.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, ¤t.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(¤t.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, ¤t.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;
|
||||
}
|
||||
Reference in New Issue
Block a user