npc_kn mostly done (#2609)

* npc_kn mostly done

* fix shieldD

* pr fixes

* weak func fixes
This commit is contained in:
TakaRikka
2025-08-28 03:49:24 -07:00
committed by GitHub
parent 956e84b0e7
commit 5ce5bf20cc
10 changed files with 5475 additions and 2675 deletions
+1 -1
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+747
View File
@@ -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;
}
+645
View File
@@ -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;
}