mirror of
https://github.com/zeldaret/tww.git
synced 2026-09-10 19:59:55 -04:00
2272 lines
65 KiB
C++
2272 lines
65 KiB
C++
/**
|
|
* d_a_npc_hr.cpp
|
|
* NPC - Zephos & Cyclos
|
|
*/
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
#include "d/actor/d_a_npc_hr.h"
|
|
#include "res/Object/Hr.h"
|
|
#include "d/d_snap.h"
|
|
#include "d/d_kankyo_wether.h"
|
|
#include "d/actor/d_a_player_main.h"
|
|
#include "d/actor/d_a_ship.h"
|
|
#include "d/actor/d_a_tornado.h"
|
|
#include "d/d_item.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
|
|
static fpc_ProcID l_msgId;
|
|
static msg_class* l_msg;
|
|
|
|
/* 00000078-000000A0 .text init__14daNpc_Wind_EffFv */
|
|
void daNpc_Wind_Eff::init() {
|
|
mWindEffState = WIND_EFF_INACTIVE;
|
|
mAlphaFactor = 0.0f;
|
|
mSpeed.setall(0.0f);
|
|
mpSquallPos = NULL;
|
|
}
|
|
|
|
/* 000000A0-000000EC .text remove__14daNpc_Wind_EffFv */
|
|
void daNpc_Wind_Eff::remove() {
|
|
if (mWindEffState != WIND_EFF_INACTIVE) {
|
|
mpFollowECallBack.end();
|
|
init();
|
|
}
|
|
}
|
|
|
|
/* 000000EC-000001B0 .text create__14daNpc_Wind_EffFP4cXyz */
|
|
BOOL daNpc_Wind_Eff::create(cXyz* squallPos) {
|
|
if (mWindEffState == WIND_EFF_INACTIVE) {
|
|
mPos = *squallPos;
|
|
|
|
mAlphaFactor = 1.0f;
|
|
mpSquallPos = squallPos;
|
|
JPABaseEmitter* pEmitter = dComIfGp_particle_set(dPa_name::ID_AK_JN_WINDLINE00, &mPos, NULL, NULL, 0xFF, &mpFollowECallBack);
|
|
|
|
if (pEmitter == NULL) {
|
|
return FALSE;
|
|
} else {
|
|
mWindEffState = WIND_EFF_FADE_IN;
|
|
return TRUE;
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 000001B0-000001E4 .text end__14daNpc_Wind_EffFv */
|
|
BOOL daNpc_Wind_Eff::end() {
|
|
if (mWindEffState == WIND_EFF_FADE_IN || mWindEffState == WIND_EFF_ACTIVE) {
|
|
mWindEffState = WIND_EFF_FADE_OUT;
|
|
mpSquallPos = NULL;
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 000001E4-0000030C .text proc__14daNpc_Wind_EffFv */
|
|
void daNpc_Wind_Eff::proc() {
|
|
JPABaseEmitter* pEmitter;
|
|
switch(mWindEffState) {
|
|
case WIND_EFF_FADE_IN:
|
|
pEmitter = mpFollowECallBack.getEmitter();
|
|
if (mAlphaFactor < 0.9f) {
|
|
mAlphaFactor += 0.1f;
|
|
|
|
} else {
|
|
mWindEffState = WIND_EFF_ACTIVE;
|
|
mAlphaFactor = 1.0f;
|
|
}
|
|
#if VERSION > VERSION_DEMO
|
|
if (pEmitter != NULL) {
|
|
pEmitter->setGlobalAlpha(mAlphaFactor * 128.0f);
|
|
}
|
|
#else
|
|
pEmitter->setGlobalAlpha(mAlphaFactor * 128.0f);
|
|
#endif
|
|
|
|
setspd();
|
|
move();
|
|
break;
|
|
case WIND_EFF_ACTIVE:
|
|
setspd();
|
|
move();
|
|
break;
|
|
case WIND_EFF_FADE_OUT:
|
|
pEmitter = mpFollowECallBack.getEmitter();
|
|
|
|
if (mAlphaFactor > 0.1f) {
|
|
mAlphaFactor -= 0.1f;
|
|
move();
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
pEmitter->setGlobalAlpha(mAlphaFactor * 128.0f);
|
|
#else
|
|
if (pEmitter != NULL) {
|
|
pEmitter->setGlobalAlpha(mAlphaFactor * 128.0f);
|
|
}
|
|
#endif
|
|
} else {
|
|
remove();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 0000030C-00000368 .text setspd__14daNpc_Wind_EffFv */
|
|
void daNpc_Wind_Eff::setspd() {
|
|
cXyz speed = *mpSquallPos - mPos;
|
|
mSpeed.set(speed);
|
|
}
|
|
|
|
/* 000003A4-000003D4 .text move__14daNpc_Wind_EffFv */
|
|
void daNpc_Wind_Eff::move() {
|
|
mPos += mSpeed;
|
|
}
|
|
|
|
/* 000003D4-00000550 .text setSquallPos__18daNpc_Wind_ClothesFi */
|
|
void daNpc_Wind_Clothes::setSquallPos(int param_1) {
|
|
fopAc_ac_c* a_actor = fopAcM_SearchByID(mProcId);
|
|
JUT_ASSERT(DEMO_SELECT(398, 402), a_actor);
|
|
|
|
mSquallPos[param_1] = a_actor->current.pos;
|
|
|
|
cXyz temp;
|
|
f32 temp2 = squallOrbitParam[2] * (cM_ssin((int)mSquallCounter[param_1]) * 0.2f + 1.0f); // fake?
|
|
temp.x = squallOrbitParam[0] + temp2 * cM_scos(mSquallCounter[param_1]);
|
|
temp.y = squallOrbitParam[1] + temp2 * cM_ssin(mSquallCounter[param_1]);
|
|
temp.z = squallOrbitParam[4] + param_1 * squallOrbitParam[3];
|
|
fpoAcM_absolutePos(a_actor, &temp, &mSquallPos[param_1]);
|
|
}
|
|
|
|
/* 00000550-00000620 .text create__18daNpc_Wind_ClothesFP10fopAc_ac_cUcPfi */
|
|
BOOL daNpc_Wind_Clothes::create(fopAc_ac_c* i_this, u8 param_2, f32* param_3, int param_4) {
|
|
mSquallState = param_2;
|
|
mProcId = fopAcM_GetID(i_this);
|
|
if (param_3 != NULL ) {
|
|
for (int i = 0; i < param_4; i++) {
|
|
squallOrbitParam[i] = param_3[i];
|
|
}
|
|
}
|
|
|
|
for(int i = 0; i < 4; i++) {
|
|
mSquallCounter[i] = i*0x4000;
|
|
setSquallPos(i);
|
|
mWindEff[i].create(&mSquallPos[i]);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00000620-00000678 .text end__18daNpc_Wind_ClothesFv */
|
|
BOOL daNpc_Wind_Clothes::end() {
|
|
mSquallState = 0;
|
|
for (int i = 0; i < 4; i++) {
|
|
mWindEff[i].end();
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00000678-0000075C .text proc__18daNpc_Wind_ClothesFv */
|
|
void daNpc_Wind_Clothes::proc() {
|
|
switch(mSquallState) {
|
|
case 1:
|
|
fopAc_ac_c* a_actor = fopAcM_SearchByID(mProcId);
|
|
JUT_ASSERT(DEMO_SELECT(465, 469), a_actor);
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
mSquallCounter[i] += 0x100;
|
|
setSquallPos(i);
|
|
}
|
|
break;
|
|
}
|
|
|
|
for(int i = 0; i < 4; i++) {
|
|
mWindEff[i].proc();
|
|
}
|
|
}
|
|
|
|
/* 0000075C-000007B0 .text init__18daNpc_Wind_ClothesFv */
|
|
void daNpc_Wind_Clothes::init() {
|
|
mSquallState = 0;
|
|
for(int i = 0; i < 4; i++) {
|
|
mWindEff[i].init();
|
|
}
|
|
}
|
|
|
|
/* 000007B0-00000800 .text remove__18daNpc_Wind_ClothesFv */
|
|
void daNpc_Wind_Clothes::remove() {
|
|
for(int i = 0; i < 4; i++) {
|
|
mWindEff[i].remove();
|
|
}
|
|
}
|
|
|
|
static dCcD_SrcCyl dNpc_hr_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ 0,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ 0,
|
|
/* SrcObjTg Type */ AT_TYPE_NORMAL_ARROW | AT_TYPE_FIRE_ARROW | AT_TYPE_ICE_ARROW | AT_TYPE_LIGHT_ARROW,
|
|
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsOther_e,
|
|
/* SrcObjCo SPrm */ 0,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ dCcG_AtHitMark_None_e,
|
|
/* SrcGObjAt Spl */ dCcG_At_Spl_UNK0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ dCcG_Tg_Spl_UNK0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGCylS
|
|
{{
|
|
/* Center */ {0.0f, 0.0f, 0.0f},
|
|
/* Radius */ 0.0f,
|
|
/* Height */ 0.0f,
|
|
}},
|
|
};
|
|
|
|
extern dCcD_SrcCyl dNpc_cyl_src;
|
|
|
|
/* 00000800-0000080C .text getShapeType__10daNpc_Hr_cFv */
|
|
int daNpc_Hr_c::getShapeType() {
|
|
return fopAcM_GetParam(this) & 0xFF;
|
|
}
|
|
|
|
/* 0000080C-00000818 .text getSwbit__10daNpc_Hr_cFv */
|
|
int daNpc_Hr_c::getSwbit() {
|
|
return fopAcM_GetParam(this) >> 8 & 0xFF;
|
|
}
|
|
|
|
/* 00000818-00000838 .text daNpc_hr_XyCheckCB__FPvi */
|
|
static s16 daNpc_hr_XyCheckCB(void* i_this, int i_itemBtn) {
|
|
return ((daNpc_Hr_c*)i_this)->XyCheckCB(i_itemBtn);
|
|
}
|
|
|
|
/* 00000838-0000085C .text XyCheckCB__10daNpc_Hr_cFi */
|
|
s16 daNpc_Hr_c::XyCheckCB(int i_itemBtn) {
|
|
return dComIfGp_getSelectItem(i_itemBtn) == dItemNo_WIND_WAKER_e ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 0000085C-000008AC .text daNpc_hr_XyEventCB__FPvi */
|
|
static s16 daNpc_hr_XyEventCB(void* i_this, int i_itemBtn) {
|
|
daNpc_Hr_c* a_this = (daNpc_Hr_c*)i_this;
|
|
a_this->mEventIdx = dComIfGp_evmng_getEventIdx("TACT_HT");
|
|
return a_this->mEventIdx;
|
|
}
|
|
|
|
/* 000008AC-000008FC .text onHide__10daNpc_Hr_cFi */
|
|
void daNpc_Hr_c::onHide(int param_1) {
|
|
if (!chkFlag(HR_FLAG_00000010) || param_1 != 0) {
|
|
setFlag(HR_FLAG_00000010);
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
if(mpEmitter != NULL) {
|
|
mSmokeCallBack.end();
|
|
}
|
|
mpEmitter = NULL;
|
|
#else
|
|
mSmokeCallBack.end();
|
|
#endif
|
|
}
|
|
}
|
|
|
|
/* 000008FC-000009F0 .text offHide__10daNpc_Hr_cFi */
|
|
void daNpc_Hr_c::offHide(int param_1) {
|
|
u16 particleID;
|
|
if (chkFlag(HR_FLAG_00000010) || param_1 != 0) {
|
|
clrFlag(HR_FLAG_00000010);
|
|
|
|
switch (mType) {
|
|
case 1:
|
|
particleID = dPa_name::ID_IT_SN_KINTOUN_RT00;
|
|
break;
|
|
default:
|
|
particleID = dPa_name::ID_IT_SN_KINTOUN_FT00;
|
|
break;
|
|
}
|
|
|
|
JPABaseEmitter* pEmitter = dComIfGp_particle_set(particleID, &mCloudPos, &shape_angle, &scale, 0xFF, &mSmokeCallBack, fopAcM_GetRoomNo(this));
|
|
|
|
#if VERSION == VERION_DEMO
|
|
mpEmitter = pEmitter;
|
|
#endif
|
|
|
|
if(DEMO_SELECT(mpEmitter, pEmitter) != NULL && mType == 1) {
|
|
DEMO_SELECT(mpEmitter, pEmitter)->setGlobalPrmColor(0x97, 0x76, 0xA9);
|
|
DEMO_SELECT(mpEmitter, pEmitter)->setGlobalEnvColor(0x84, 0x70, 0x93);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 000009F0-00000A94 .text defaultSetPos__10daNpc_Hr_cFP4cXyz */
|
|
void daNpc_Hr_c::defaultSetPos(cXyz* param_1) {
|
|
current.pos.set(*param_1);
|
|
attention_info.position.set(current.pos);
|
|
attention_info.position.y += 150.0f;
|
|
|
|
mAttnBasePos = attention_info.position;
|
|
eyePos.set(current.pos);
|
|
eyePos.y += 100.0f;
|
|
|
|
mEyePos = eyePos;
|
|
}
|
|
|
|
/* 00000A94-00000ADC .text getNowEventAction__10daNpc_Hr_cFv */
|
|
s32 daNpc_Hr_c::getNowEventAction() {
|
|
static char* action_table[] = {
|
|
"WAIT",
|
|
"SPEAK",
|
|
"PATTEN",
|
|
"TACT0",
|
|
"TACT1",
|
|
"TACT2",
|
|
"TACT3",
|
|
"WIND0",
|
|
"WIND1",
|
|
"HIDE_LINK",
|
|
"DISP_LINK",
|
|
"DISP_MY",
|
|
"MOVE",
|
|
"TURN_LINK",
|
|
"LOOK",
|
|
"SMALL",
|
|
"INTRO",
|
|
"CHANGE",
|
|
"DEBUG",
|
|
};
|
|
|
|
return dComIfGp_evmng_getMyActIdx(mStaffIdx, action_table, ARRAY_SIZE(action_table), FALSE, 1);
|
|
}
|
|
|
|
/* 00000ADC-00000CD0 .text demoInitWind__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::demoInitWind() {
|
|
dScnKy_env_light_c& env_light = g_env_light;
|
|
env_light.mWind.mWindVec.set(0.0f, 0.0f, 1.0f); // fake?
|
|
dKyw_tact_wind_set(0, 0x4000);
|
|
dKyw_tact_wind_set_go();
|
|
daPy_lk_c* pLink = (daPy_lk_c*)daPy_getPlayerLinkActorClass();
|
|
cXyz* pWindVec = dKyw_get_wind_vec();
|
|
cSGlobe globe(*pWindVec);
|
|
cSAngle angle(globe.U());
|
|
angle += cSAngle::_90;
|
|
f32 _40 = 40.0f;
|
|
mScaleFactor = 1.0f;
|
|
speed.set(0.0f, 0.0f, 40.0f);
|
|
|
|
current.pos.set(pLink->current.pos);
|
|
current.pos.x += angle.Cos() * 20.0f;
|
|
current.pos.y += 150.0f + mScaleFactor * _40 * _40 * 0.5f;
|
|
|
|
current.pos.z += angle.Sin() * 20.0f - _40 * speed.z;
|
|
speed.y = -(mScaleFactor * _40);
|
|
|
|
cXyz unused(0.0f, 0.0f, 1.0f);
|
|
|
|
current.angle.y = 0;
|
|
shape_angle.y = 0;
|
|
mMoveTimer = 0x8C;
|
|
dKyw_custom_windpower(1.0f);
|
|
pLink->setPlayerPosAndAngle(&pLink->current.pos, 0x7FFF);
|
|
dComIfGs_offSwitch(getSwbit(), fopAcM_GetRoomNo(this));
|
|
mDoAud_seStart(JA_SE_TAKT_WIND_DEMO);
|
|
}
|
|
|
|
/* 00000CD0-00000DE8 .text demoProcWind__10daNpc_Hr_cFi */
|
|
bool daNpc_Hr_c::demoProcWind(int param_1) {
|
|
setFlag(HR_FLAG_00000020);
|
|
if (param_1 == 0 && mMoveTimer > 0 && mMoveTimer <= 0x6E) {
|
|
dComIfGp_evmng_cutEnd(mStaffIdx);
|
|
}
|
|
|
|
if (mMoveTimer > 0) {
|
|
mMoveTimer--;
|
|
if (mMoveTimer > 0x3C) {
|
|
fopAcM_posMove(this, NULL);
|
|
speed.y += mScaleFactor;
|
|
}
|
|
if (mMoveTimer < 0xF) {
|
|
dKyw_custom_windpower(0);
|
|
}
|
|
} else {
|
|
speed.setall(0.0f);
|
|
dComIfGp_evmng_cutEnd(mStaffIdx);
|
|
}
|
|
|
|
eyePos.set(current.pos);
|
|
attention_info.position.set(current.pos);
|
|
return false;
|
|
}
|
|
|
|
/* 00000DE8-00000E50 .text demoInitWait__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::demoInitWait() {
|
|
int* pTimer = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "Timer");
|
|
if (pTimer != NULL) {
|
|
mMoveTimer = *pTimer;
|
|
} else {
|
|
mMoveTimer = 0;
|
|
}
|
|
}
|
|
|
|
/* 00000E50-00000EA0 .text demoProcWait__10daNpc_Hr_cFv */
|
|
BOOL daNpc_Hr_c::demoProcWait() {
|
|
if (mMoveTimer > 0) {
|
|
mMoveTimer--;
|
|
} else {
|
|
dComIfGp_evmng_cutEnd(mStaffIdx);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 00000EA0-00000F38 .text demoInitSpeak__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::demoInitSpeak() {
|
|
talkInit();
|
|
int* a_intP = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "MsgNo");
|
|
JUT_ASSERT(DEMO_SELECT(861, 871), a_intP);
|
|
mMsgNo = *a_intP;
|
|
}
|
|
|
|
/* 00000F38-00000FA8 .text demoProcSpeak__10daNpc_Hr_cFv */
|
|
BOOL daNpc_Hr_c::demoProcSpeak() {
|
|
u16 temp = talk();
|
|
if (temp == fopMsgStts_BOX_CLOSED_e || temp == 0xFE) {
|
|
dComIfGp_evmng_cutEnd(mStaffIdx);
|
|
|
|
if (chkFlag(HR_FLAG_00000002)) {
|
|
clrFlag(HR_FLAG_00000002);
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00000FA8-00001008 .text demoProcPatten__10daNpc_Hr_cFv */
|
|
BOOL daNpc_Hr_c::demoProcPatten() {
|
|
u16 temp = talk();
|
|
if (temp == fopMsgStts_BOX_CLOSED_e || temp == 0xFE || temp == fopMsgStts_INPUT_e) {
|
|
dComIfGp_evmng_cutEnd(mStaffIdx);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00001008-000010DC .text demoProcTact0__10daNpc_Hr_cFv */
|
|
BOOL daNpc_Hr_c::demoProcTact0() {
|
|
if (chkFlag(HR_FLAG_00000002)) {
|
|
if (l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) {
|
|
l_msg->mStatus = fopMsgStts_MSG_ENDS_e;
|
|
fopMsgM_messageSendOn();
|
|
clrFlag(HR_FLAG_00000200);
|
|
|
|
if (dComIfGp_checkMesgCancelButton()) {
|
|
setFlag(HR_FLAG_00000200);
|
|
} else {
|
|
execItemGet(dItemNo_WINDS_REQUIEM_e);
|
|
}
|
|
dComIfGp_evmng_cutEnd(mStaffIdx);
|
|
clrFlag(HR_FLAG_00000002);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
dComIfGp_evmng_cutEnd(mStaffIdx);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000010DC-00001174 .text demoProcTact1__10daNpc_Hr_cFv */
|
|
BOOL daNpc_Hr_c::demoProcTact1() {
|
|
u16 temp = talk();
|
|
if (temp == fopMsgStts_BOX_CLOSED_e || temp == fopMsgStts_MSG_DESTROYED_e || temp == 0xFE) {
|
|
if (chkFlag(HR_FLAG_00000200)) {
|
|
endTalk();
|
|
endTact();
|
|
} else {
|
|
dComIfGp_evmng_cutEnd(mStaffIdx);
|
|
dComIfGs_onEventBit(dSv_event_flag_c::UNK_2708);
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00001174-000011AC .text demoProcTact2__10daNpc_Hr_cFv */
|
|
BOOL daNpc_Hr_c::demoProcTact2() {
|
|
dComIfGp_evmng_cutEnd(mStaffIdx);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000011AC-00001268 .text demoProcTact3__10daNpc_Hr_cFv */
|
|
BOOL daNpc_Hr_c::demoProcTact3() {
|
|
if(daPy_getPlayerLinkActorClass()->getTactTimerCancel() > 0) {
|
|
mEventIdx = dComIfGp_evmng_getEventIdx("TACTM_RT");
|
|
setEvFlag(EVFLAG_EVENT_CHANGE_REQ);
|
|
fopAcM_orderChangeEventId(daPy_getPlayerLinkActorClass(), this, mEventIdx, 0, 0xFFFF);
|
|
} else {
|
|
dComIfGp_evmng_cutEnd(mStaffIdx);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00001268-0000128C .text calcKaijou__10daNpc_Hr_cFi */
|
|
int daNpc_Hr_c::calcKaijou(int param_1) {
|
|
int sum = 0;
|
|
for (int i = 1; param_1 >= 1; i++, param_1--) {
|
|
sum += i;
|
|
}
|
|
return sum;
|
|
}
|
|
|
|
/* 0000128C-000015B4 .text demoInitMove__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::demoInitMove() {
|
|
daPy_lk_c* pLink = daPy_getPlayerLinkActorClass();
|
|
daShip_c* pShip = (daShip_c*)dComIfGp_getShipActor();
|
|
|
|
cXyz* pPos = dComIfGp_evmng_getMyXyzP(mStaffIdx, "Pos");
|
|
if(pPos != NULL) {
|
|
mTargetPos.set(*pPos);
|
|
} else {
|
|
cXyz* pPos3 = dComIfGp_evmng_getMyXyzP(mStaffIdx, "Pos3");
|
|
if(pPos3 != NULL && pShip != NULL) {
|
|
fpoAcM_absolutePos(pShip, pPos3, &mTargetPos);
|
|
} else {
|
|
cXyz* pPos2 = dComIfGp_evmng_getMyXyzP(mStaffIdx, "Pos2");
|
|
if(pPos2 != NULL) {
|
|
fpoAcM_absolutePos(pLink, pPos2, &mTargetPos);
|
|
}
|
|
}
|
|
}
|
|
|
|
int* pTimer = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "Timer");
|
|
if(pTimer != NULL) {
|
|
mMoveTimer = *pTimer;
|
|
if(mMoveTimer < 10) {
|
|
mMoveTimer = 10;
|
|
}
|
|
} else {
|
|
mMoveTimer = 0x14;
|
|
}
|
|
|
|
int* pBrake = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "Brake");
|
|
if (pBrake != NULL) {
|
|
mBrakeTime = *pBrake;
|
|
} else {
|
|
mBrakeTime = 0;
|
|
}
|
|
|
|
int* pAngleY = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "AngleY");
|
|
if (pAngleY != NULL) {
|
|
mTargetAngle = *pAngleY;
|
|
if (chkEvFlag(EVFLAG_LOCK_ROTATION)) {
|
|
current.angle.y = mTargetAngle;
|
|
}
|
|
} else {
|
|
mTargetAngle = current.angle.y;
|
|
}
|
|
|
|
int* pSoundOff = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "SOUND_OFF");
|
|
if (pSoundOff == NULL) {
|
|
fopAcM_seStart(this, JA_SE_CM_HU_RC_MOVE_RAPID, 0);
|
|
}
|
|
|
|
setFlag(HR_FLAG_00000020);
|
|
f32 temp2;
|
|
if (mBrakeTime == 0) {
|
|
temp2 = 1.0f/mMoveTimer;
|
|
} else {
|
|
temp2 = 1.0f/(mMoveTimer - mBrakeTime + (f32)calcKaijou(mBrakeTime) / mBrakeTime);
|
|
}
|
|
|
|
speed.x = temp2 * (mTargetPos.x - current.pos.x);
|
|
speed.y = temp2 * (mTargetPos.y - current.pos.y);
|
|
speed.z = temp2 * (mTargetPos.z - current.pos.z);
|
|
}
|
|
|
|
/* 000015B4-000015CC .text demoInitSmall__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::demoInitSmall() {
|
|
mScaleFactor = 11.0f;
|
|
mMoveTimer = 0;
|
|
}
|
|
|
|
/* 000015CC-00001688 .text demoProcSmall__10daNpc_Hr_cFv */
|
|
BOOL daNpc_Hr_c::demoProcSmall() {
|
|
if (cLib_addCalc(&mScaleFactor, 1.0f, 0.1f, 100.0f, 0.3f) < 0.3f) {
|
|
mScaleFactor = 1.0f;
|
|
dComIfGp_evmng_cutEnd(mStaffIdx);
|
|
}
|
|
scale.setall(mScaleFactor);
|
|
|
|
JPABaseEmitter* pEmitter = DEMO_SELECT(mpEmitter, mSmokeCallBack.getEmitter());
|
|
|
|
if(pEmitter != NULL) {
|
|
pEmitter->setGlobalScale(scale);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00001688-000017AC .text demoProcMove__10daNpc_Hr_cFv */
|
|
bool daNpc_Hr_c::demoProcMove() {
|
|
setFlag(HR_FLAG_00000020);
|
|
if (mMoveTimer <= 0) {
|
|
speed.setall(0.0f);
|
|
dComIfGp_evmng_cutEnd(mStaffIdx);
|
|
} else if (mMoveTimer < mBrakeTime) {
|
|
f32 fac = mMoveTimer / (f32)(mMoveTimer+1);
|
|
speed.x *= fac;
|
|
speed.y *= fac;
|
|
speed.z *= fac;
|
|
}
|
|
|
|
if (mMoveTimer > 0) {
|
|
fopAcM_posMove(this, NULL);
|
|
|
|
if (!chkEvFlag(EVFLAG_LOCK_ROTATION)) {
|
|
cLib_addCalcAngleS2(¤t.angle.y, mTargetAngle, mMoveTimer, 0x3FFF);
|
|
}
|
|
mMoveTimer--;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 000017AC-000018C0 .text demoInitChange__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::demoInitChange() {
|
|
int* a_intP = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "prm0");
|
|
JUT_ASSERT(DEMO_SELECT(1169, 1185), a_intP);
|
|
|
|
if(a_intP != NULL) {
|
|
switch(*a_intP) {
|
|
case 1:
|
|
mEventIdx = dComIfGp_evmng_getEventIdx("TACT1_RT");;
|
|
break;
|
|
default:
|
|
mEventIdx = dComIfGp_evmng_getEventIdx("PATTEN_RT");;
|
|
}
|
|
setEvFlag(EVFLAG_EVENT_CHANGE_REQ);
|
|
fopAcM_orderChangeEventId(daPy_getPlayerLinkActorClass(), this, mEventIdx, 0, 0xFFFF);
|
|
}
|
|
}
|
|
|
|
/* 000018C0-00001D84 .text demoInitCom__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::demoInitCom() {
|
|
daShip_c* pShip = (daShip_c*)dComIfGp_getShipActor();
|
|
daPy_lk_c* pLink = daPy_getPlayerLinkActorClass();
|
|
|
|
int* turnPl = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "TURN_PL");
|
|
if (turnPl != NULL) {
|
|
if (*turnPl != 0) {
|
|
setEvFlag(EVFLAG_LOCK_ROTATION);
|
|
} else {
|
|
clrEvFlag(EVFLAG_LOCK_ROTATION);
|
|
}
|
|
}
|
|
|
|
int* tornado = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "TORNADO");
|
|
if (tornado != NULL) {
|
|
if (*tornado != 0) {
|
|
setEvFlag(EVFLAG_TORNADO_ACTIVE);
|
|
} else {
|
|
clrEvFlag(EVFLAG_TORNADO_ACTIVE);
|
|
}
|
|
}
|
|
|
|
int* update = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "UPDATE");
|
|
if (update != NULL) {
|
|
if (*update != 0) {
|
|
clrEvFlag(EVFLAG_SKIP_UPDATE);
|
|
} else {
|
|
setEvFlag(EVFLAG_SKIP_UPDATE);
|
|
}
|
|
}
|
|
|
|
int* tornado_off = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "TORNADE_OFF");
|
|
if (tornado_off != NULL) {
|
|
dComIfGs_onEventBit(dSv_event_flag_c::UNK_2710);
|
|
dComIfGs_onSwitch(getSwbit(), fopAcM_GetRoomNo(this));
|
|
mReturnState = 1;
|
|
}
|
|
|
|
int* anm = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "ANM");
|
|
if (anm != NULL) {
|
|
setAnm(*anm);
|
|
}
|
|
|
|
int* texAnm = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "TEXANM");
|
|
if (texAnm != NULL) {
|
|
setTexPtn(*texAnm);
|
|
}
|
|
|
|
int* soundInit = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "Sound_Init");
|
|
if (soundInit != NULL) {
|
|
mDoAud_tact_reset();
|
|
}
|
|
|
|
int* soundPlay = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "Sound_Play");
|
|
if (soundPlay != NULL) {
|
|
mDoAud_tact_melodyPlay(1);
|
|
}
|
|
|
|
int* soundEnd = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "Sound_End");
|
|
if (soundEnd != NULL) {
|
|
mDoAud_tact_reset();
|
|
clrEvFlag(EVFLAG_TACT_SOUND_ACTIVE);
|
|
}
|
|
|
|
cXyz* startPos = dComIfGp_evmng_getMyXyzP(mStaffIdx, "StartPos");
|
|
if (startPos != NULL) {
|
|
current.pos.set(*startPos);
|
|
}
|
|
|
|
cXyz* startPos2 = dComIfGp_evmng_getMyXyzP(mStaffIdx, "StartPos2");
|
|
if (startPos2 != NULL) {
|
|
fpoAcM_absolutePos(pLink, startPos2, ¤t.pos);
|
|
}
|
|
|
|
cXyz* startPos3 = dComIfGp_evmng_getMyXyzP(mStaffIdx, "StartPos3");
|
|
if (startPos3 != NULL && pShip != NULL) {
|
|
fpoAcM_absolutePos(pShip, startPos3, ¤t.pos);
|
|
}
|
|
|
|
int* wind = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "Wind");
|
|
f32* windPrm = dComIfGp_evmng_getMyFloatP(mStaffIdx, "WindPrm");
|
|
|
|
if (wind != NULL) {
|
|
switch(*wind) {
|
|
case 1:
|
|
if (windPrm != NULL) {
|
|
mClothes.create(this, *wind, windPrm, dComIfGp_evmng_getMySubstanceNum(mStaffIdx, "WindPrm"));
|
|
}
|
|
break;
|
|
default:
|
|
mClothes.end();
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
int* away = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "AWAY");
|
|
if (away != NULL) {
|
|
mDoAud_seStart(JA_SE_CM_HU_RC_FLY_AWAY);
|
|
if (getShapeType() == 1) {
|
|
mDoAud_seStart(JA_SE_CV_RC_FLY_AWAY);
|
|
} else {
|
|
mDoAud_seStart(JA_SE_CV_HU_FLY_AWAY);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00001D84-00001F08 .text demoProcCom__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::demoProcCom() {
|
|
if (chkEvFlag(EVFLAG_LOCK_ROTATION)) {
|
|
setFlag(HR_FLAG_00000080);
|
|
}
|
|
|
|
if (chkEvFlag(EVFLAG_SKIP_UPDATE)) {
|
|
setFlag(HR_FLAG_00000100);
|
|
}
|
|
|
|
if (chkEvFlag(EVFLAG_TACT_SOUND_ACTIVE)) {
|
|
mDoAud_tact_ambientPlay();
|
|
}
|
|
|
|
if (!chkFlag(HR_FLAG_00000010)) {
|
|
f32 _15 = 15.0f;
|
|
|
|
f32 temp = speed.abs();
|
|
if (temp > _15) {
|
|
temp = _15;
|
|
}
|
|
fopAcM_seStart(this, JA_SE_CM_HU_RC_FLYING, (temp/_15)*100.0f);
|
|
}
|
|
}
|
|
|
|
/* 00001F08-0000232C .text demoProc__10daNpc_Hr_cFv */
|
|
bool daNpc_Hr_c::demoProc() {
|
|
bool temp;
|
|
daPy_lk_c* pLink = (daPy_lk_c*)daPy_getPlayerLinkActorClass();
|
|
|
|
temp = true;
|
|
if (chkEvFlag(EVFLAG_EVENT_CHANGE_REQ)) {
|
|
mStaffIdx = dComIfGp_evmng_getMyStaffId("Hr2");
|
|
clrEvFlag(EVFLAG_EVENT_CHANGE_REQ);
|
|
}
|
|
|
|
s32 eventAction = getNowEventAction();
|
|
if(dComIfGp_evmng_getIsAddvance(mStaffIdx)) {
|
|
demoInitCom();
|
|
setFlag(HR_FLAG_00000002);
|
|
switch(eventAction) {
|
|
case 1:
|
|
case 2:
|
|
demoInitSpeak();
|
|
break;
|
|
case 7:
|
|
demoInitWind();
|
|
break;
|
|
case 9:
|
|
pLink->onPlayerNoDraw();
|
|
dComIfGs_offSwitch(getSwbit(), fopAcM_GetRoomNo(this));
|
|
break;
|
|
case 10:
|
|
pLink->offPlayerNoDraw();
|
|
break;
|
|
case 11: {
|
|
cXyz* pPos = dComIfGp_evmng_getMyXyzP(mStaffIdx, "Pos");
|
|
|
|
if (pPos != NULL) {
|
|
current.pos.set(*pPos);
|
|
}
|
|
|
|
int* pAngleY = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "AngleY");
|
|
if (pAngleY != NULL) {
|
|
current.angle.y = *pAngleY;
|
|
}
|
|
|
|
offHide(0);
|
|
demoInitWait();
|
|
mAnmIdx = -1;
|
|
setAnm(0);
|
|
break;
|
|
}
|
|
case 12:
|
|
demoInitMove();
|
|
break;
|
|
case 13: {
|
|
mTargetAngle = fopAcM_searchActorAngleY(pLink, this);
|
|
int* pTimer = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "Timer");
|
|
|
|
if (pTimer != NULL) {
|
|
mMoveTimer = *pTimer;
|
|
} else {
|
|
mMoveTimer = 0;
|
|
}
|
|
break;
|
|
}
|
|
case 14:
|
|
setAnm(0);
|
|
demoInitWait();
|
|
break;
|
|
case 0:
|
|
demoInitWait();
|
|
break;
|
|
case 15:
|
|
demoInitSmall();
|
|
break;
|
|
case 16:
|
|
speed.y = 0.0f;
|
|
break;
|
|
case 17:
|
|
demoInitChange();
|
|
break;
|
|
case 5:
|
|
clrFlag(HR_FLAG_00000200);
|
|
break;
|
|
}
|
|
}
|
|
|
|
switch(eventAction) {
|
|
case 1:
|
|
demoProcSpeak();
|
|
break;
|
|
case 2:
|
|
demoProcPatten();
|
|
break;
|
|
case 7:
|
|
temp = demoProcWind(0);
|
|
break;
|
|
case 8:
|
|
temp = demoProcWind(1);
|
|
break;
|
|
case 12:
|
|
temp = demoProcMove();
|
|
break;
|
|
case 11:
|
|
demoProcWait();
|
|
break;
|
|
case 13:
|
|
if (mMoveTimer > 0) {
|
|
mMoveTimer--;
|
|
} else {
|
|
s16 angle = pLink->shape_angle.y;
|
|
cLib_addCalcAngleS(&angle, mTargetAngle, 1, 0x800, 0x800);
|
|
pLink->setPlayerPosAndAngle(NULL, angle);
|
|
if (angle == mTargetAngle) {
|
|
dComIfGp_evmng_cutEnd(mStaffIdx);
|
|
}
|
|
}
|
|
break;
|
|
case 14:
|
|
demoProcWait();
|
|
setFlag(HR_FLAG_00000040);
|
|
break;
|
|
case 0:
|
|
demoProcWait();
|
|
break;
|
|
case 3:
|
|
demoProcTact0();
|
|
break;
|
|
case 4:
|
|
demoProcTact1();
|
|
break;
|
|
case 5:
|
|
demoProcTact2();
|
|
break;
|
|
case 6:
|
|
demoProcTact3();
|
|
break;
|
|
case 15:
|
|
demoProcSmall();
|
|
break;
|
|
case 16:
|
|
if (cLib_addCalc(¤t.pos.y, home.pos.y + 6000.0f, 0.5f, 100.0f, 5.0f) < 5.0f) {
|
|
dComIfGp_evmng_cutEnd(mStaffIdx);
|
|
}
|
|
break;
|
|
case 17:
|
|
break;
|
|
default:
|
|
dComIfGp_evmng_cutEnd(mStaffIdx);
|
|
break;
|
|
}
|
|
|
|
demoProcCom();
|
|
return temp;
|
|
}
|
|
|
|
static const int l_bck_ix_tbl[] = {
|
|
dRes_INDEX_HR_BCK_H_WAIT01_e,
|
|
dRes_INDEX_HR_BCK_R_WAIT01_e,
|
|
dRes_INDEX_HR_BCK_R_WAIT02_e,
|
|
dRes_INDEX_HR_BCK_LOOK_e,
|
|
dRes_INDEX_HR_BCK_TALK01_e,
|
|
dRes_INDEX_HR_BCK_TALK01_e,
|
|
dRes_INDEX_HR_BCK_TALK01_e,
|
|
dRes_INDEX_HR_BCK_TALK02_e,
|
|
dRes_INDEX_HR_BCK_TALK02_e,
|
|
dRes_INDEX_HR_BCK_TALK03_e,
|
|
dRes_INDEX_HR_BCK_TALK03_e,
|
|
dRes_INDEX_HR_BCK_DAMAGE_e,
|
|
dRes_INDEX_HR_BCK_TALK03_e,
|
|
};
|
|
|
|
static const int l_btp_ix_tbl[] = {
|
|
dRes_INDEX_HR_BTP_MABA_H_e,
|
|
dRes_INDEX_HR_BTP_MABA_R01_e,
|
|
dRes_INDEX_HR_BTP_MABA_R02_e,
|
|
};
|
|
|
|
/* 0000232C-00002550 .text nodeCallBack_Hr__FP7J3DNodei */
|
|
static BOOL nodeCallBack_Hr(J3DNode* node, int calcTiming) {
|
|
cXyz temp;
|
|
cXyz temp2;
|
|
if (calcTiming == J3DNodeCBCalcTiming_In) {
|
|
J3DModel* model = j3dSys.getModel();
|
|
daNpc_Hr_c* i_this = (daNpc_Hr_c*)model->getUserArea();
|
|
J3DJoint* joint = (J3DJoint*)node;
|
|
int jntNo = joint->getJntNo();
|
|
|
|
if(i_this != NULL) {
|
|
MTXCopy(model->getAnmMtx(jntNo), *calc_mtx);
|
|
if (jntNo == i_this->getHeadJntNum()) {
|
|
cMtx_YrotM(*calc_mtx, -i_this->getHead_y());
|
|
|
|
s16 angle;
|
|
if (i_this->mAnmIdx != 1 && i_this->mAnmIdx != 9 && i_this->mAnmIdx != 10) {
|
|
angle = i_this->getHead_x();
|
|
} else {
|
|
angle = 0;
|
|
}
|
|
cLib_addCalcAngleS(&i_this->mHeadRotation, angle, 8, 0x400, 0x100);
|
|
cMtx_ZrotM(*calc_mtx, -i_this->mHeadRotation);
|
|
temp.set(0.0f, 0.0f, 0.0f);
|
|
MtxPosition(&temp, &temp2);
|
|
|
|
i_this->setAttentionBasePos(temp2);
|
|
temp.set(20.0f, -20.0f, 0.0f);
|
|
|
|
MtxPosition(&temp, &temp2);
|
|
|
|
i_this->setEyePos(temp2);
|
|
i_this->incAttnSetCount();
|
|
} else if (jntNo == i_this->getBackboneJntNum()) {
|
|
cMtx_XrotM(*calc_mtx, (s16)i_this->getBackbone_y());
|
|
} else if (jntNo == i_this->m_waist_jnt_num) {
|
|
temp.set(0.0f, 0.0f, 0.0f);
|
|
MtxPosition(&temp, &i_this->mCloudPos);
|
|
}
|
|
cMtx_copy(*calc_mtx, J3DSys::mCurrentMtx);
|
|
model->setAnmMtx(jntNo, *calc_mtx);
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00002550-00002868 .text node_Ht_ant__10daNpc_Hr_cFi */
|
|
void daNpc_Hr_c::node_Ht_ant(int jntNo) {
|
|
cXyz temp;
|
|
cXyz temp2;
|
|
cXyz temp3;
|
|
if (jntNo == 0) {
|
|
temp2.setall(0.0f);
|
|
MtxPosition(&temp2, &temp);
|
|
if (!chkFlag(HR_FLAG_00000800)) {
|
|
setFlag(HR_FLAG_00000800);
|
|
mPrevAntennaPos.set(temp);
|
|
mAntennaVelocity.setall(0.0f);
|
|
mAntennaOffset.setall(0.0f);
|
|
}
|
|
|
|
temp3 = mPrevAntennaPos - temp;
|
|
|
|
if (scale.x >= 1.0f && scale.z >= 1.0f) {
|
|
temp3.x /= scale.x;
|
|
temp3.z /= scale.z;
|
|
}
|
|
|
|
f32 temp4 = std::fabsf(temp3.z);
|
|
if (std::fabsf(temp3.x) > std::fabsf(temp3.z)) {
|
|
temp4 = std::fabsf(temp3.x);
|
|
}
|
|
|
|
if (temp4 > 10.0f) {
|
|
f32 fac = 10.f / temp4;
|
|
temp3.x *= fac;
|
|
temp3.z *= fac;
|
|
}
|
|
|
|
mAntennaVelocity.x *= 0.8f;
|
|
mAntennaVelocity.z *= 0.8f;
|
|
|
|
mAntennaVelocity.x -= mAntennaOffset.x * 0.2f;
|
|
mAntennaVelocity.z -= mAntennaOffset.z * 0.2f;
|
|
|
|
mAntennaVelocity.x += temp3.x;
|
|
mAntennaVelocity.z += temp3.z;
|
|
|
|
mAntennaOffset.x += mAntennaVelocity.x;
|
|
mAntennaOffset.z += mAntennaVelocity.z;
|
|
|
|
mAntennaRotation.x = mAntennaOffset.z * cM_ssin(current.angle.y) - mAntennaOffset.x * cM_scos(current.angle.y);
|
|
mAntennaRotation.z = mAntennaOffset.z * cM_scos(current.angle.y) + mAntennaOffset.x * cM_ssin(current.angle.y);
|
|
|
|
mAntennaRotation.x *= 0.05f;
|
|
mAntennaRotation.z *= 0.05f;
|
|
|
|
if (mAntennaRotation.x > 1.0f) {
|
|
mAntennaRotation.x = 1.0f;
|
|
}
|
|
|
|
if (mAntennaRotation.z > 1.0f) {
|
|
mAntennaRotation.z = 1.0f;
|
|
}
|
|
|
|
mPrevAntennaPos.set(temp);
|
|
|
|
} else {
|
|
cMtx_YrotM(*calc_mtx, mAntennaRotation.x * 3000.0f);
|
|
cMtx_ZrotM(*calc_mtx, mAntennaRotation.z * 3000.0f);
|
|
}
|
|
}
|
|
|
|
/* 00002868-00002918 .text nodeCallBack_Ht_ant__FP7J3DNodei */
|
|
static BOOL nodeCallBack_Ht_ant(J3DNode* node, int calcTiming) {
|
|
if (calcTiming == J3DNodeCBCalcTiming_In) {
|
|
J3DModel* model = j3dSys.getModel();
|
|
daNpc_Hr_c* i_this = (daNpc_Hr_c*)model->getUserArea();
|
|
J3DJoint* joint = (J3DJoint*)node;
|
|
int jntNo = joint->getJntNo();
|
|
|
|
if (i_this != NULL) {
|
|
MTXCopy(model->getAnmMtx(jntNo), *calc_mtx);
|
|
i_this->node_Ht_ant(jntNo);
|
|
cMtx_copy(*calc_mtx, J3DSys::mCurrentMtx);
|
|
model->setAnmMtx(jntNo, *calc_mtx);
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00002918-00002A28 .text initTexPatternAnm__10daNpc_Hr_cFb */
|
|
BOOL daNpc_Hr_c::initTexPatternAnm(bool i_modify) {
|
|
J3DModelData* modelData = mpHrMorf->getModel()->getModelData();
|
|
|
|
m_head_tex_pattern = (J3DAnmTexPattern*)dComIfG_getObjectRes("Hr", l_btp_ix_tbl[mTexPatternIdx]);
|
|
JUT_ASSERT(DEMO_SELECT(1768, 1784), m_head_tex_pattern != NULL);
|
|
|
|
if (!mBtpAnm.init(modelData, m_head_tex_pattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, i_modify, FALSE)) {
|
|
return FALSE;
|
|
}
|
|
|
|
mBlinkFrame = 0;
|
|
mBlinkTimer = 0;
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00002A28-00002AB4 .text playTexPatternAnm__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::playTexPatternAnm() {
|
|
if (cLib_calcTimer(&mBlinkTimer) == 0) {
|
|
if (mBlinkFrame >= m_head_tex_pattern->getFrameMax()) {
|
|
mBlinkFrame -= m_head_tex_pattern->getFrameMax();
|
|
mBlinkTimer = cM_rndF(100.0f) + 30.0f;
|
|
} else {
|
|
mBlinkFrame++;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00002AB4-00002AF0 .text setTexPtn__10daNpc_Hr_cFSc */
|
|
void daNpc_Hr_c::setTexPtn(s8 param_1) {
|
|
if (param_1 != mTexPatternIdx) {
|
|
mTexPatternIdx = param_1;
|
|
initTexPatternAnm(true);
|
|
}
|
|
}
|
|
|
|
/* 00002AF0-00002BB0 .text setAnm__10daNpc_Hr_cFSc */
|
|
void daNpc_Hr_c::setAnm(s8 anmIdx) {
|
|
f32 morf = 8.0f;
|
|
if (mAnmIdx == 3 || anmIdx == 3) {
|
|
morf = 18.0f;
|
|
}
|
|
|
|
if (mAnmIdx == -1) {
|
|
morf = 0.0f;
|
|
}
|
|
|
|
if (anmIdx != mAnmIdx && anmIdx != -1) {
|
|
mAnmIdx = anmIdx;
|
|
mAnmTimer = 0.0f;
|
|
|
|
dNpc_setAnm(mpHrMorf, J3DFrameCtrl::EMode_NULL, morf, 1.0f, l_bck_ix_tbl[mAnmIdx], -1, "Hr");
|
|
mAnmLoopCount = 0;
|
|
}
|
|
}
|
|
|
|
/* 00002BB0-00002C1C .text setAnmStatus__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::setAnmStatus() {
|
|
switch(mState) {
|
|
case HR_STATE_RT_ANGRY:
|
|
setAnm(2);
|
|
break;
|
|
default:
|
|
if (getShapeType() == 1) {
|
|
setAnm(1);
|
|
} else {
|
|
setAnm(0);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 00002C1C-00002C94 .text eventOrder__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::eventOrder() {
|
|
if (ChkOrder(1)) {
|
|
eventInfo.onCondition(dEvtCnd_CANTALK_e);
|
|
}
|
|
if (ChkOrder(2)) {
|
|
eventInfo.onCondition(dEvtCnd_CANTALK_e);
|
|
fopAcM_orderSpeakEvent(this);
|
|
}
|
|
if (ChkOrder(4)) {
|
|
eventInfo.onCondition(dEvtCnd_CANTALKITEM_e);
|
|
}
|
|
}
|
|
|
|
/* 00002C94-00002D3C .text checkOrder__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::checkOrder() {
|
|
if (!eventInfo.checkCommandDemoAccrpt()) {
|
|
if (eventInfo.checkCommandTalk() && ChkOrder(7)) {
|
|
if (dComIfGp_event_chkTalkXY()) {
|
|
setFlag(HR_FLAG_00000008);
|
|
} else {
|
|
setFlag(HR_FLAG_00000001);
|
|
}
|
|
talkInit();
|
|
}
|
|
}
|
|
ClrOrder();
|
|
}
|
|
|
|
/* 00002D3C-00002D88 .text next_msgStatus__10daNpc_Hr_cFPUl */
|
|
u16 daNpc_Hr_c::next_msgStatus(u32* pMsgNo) {
|
|
u16 msgStatus = fopMsgStts_MSG_CONTINUES_e;
|
|
|
|
switch (*pMsgNo) {
|
|
case 0x1906:
|
|
case 0x1933:
|
|
case 0x1934:
|
|
case 0x1938:
|
|
(*pMsgNo)++;
|
|
break;
|
|
|
|
default:
|
|
msgStatus = fopMsgStts_MSG_ENDS_e;
|
|
break;
|
|
}
|
|
|
|
return msgStatus;
|
|
}
|
|
|
|
/* 00002D88-00002E5C .text getMsg__10daNpc_Hr_cFv */
|
|
u32 daNpc_Hr_c::getMsg() {
|
|
u32 msgNo = 0;
|
|
switch (mState) {
|
|
case 7:
|
|
case 10:
|
|
case 3:
|
|
msgNo = mMsgNo;
|
|
switch(msgNo) {
|
|
case 0x5B3:
|
|
if (mType == 0) {
|
|
dComIfGs_onSwitch(getSwbit(), fopAcM_GetRoomNo(this));
|
|
dComIfGp_setMelodyNum(0);
|
|
} else {
|
|
dComIfGp_setMelodyNum(1);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
msgNo = 0x1901;
|
|
break;
|
|
}
|
|
return msgNo;
|
|
}
|
|
|
|
/* 00002E5C-00002F88 .text setCollision__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::setCollision() {
|
|
cXyz temp = current.pos;
|
|
f32 temp1 = scale.x * 45.0f;
|
|
f32 temp2 = scale.y * 100.0f;
|
|
mCyl.SetC(temp);
|
|
mCyl.SetR(temp1);
|
|
mCyl.SetH(temp2);
|
|
dComIfG_Ccsp()->Set(&mCyl);
|
|
|
|
if (mType == 1) {
|
|
temp.y += scale.y * -30.0f;
|
|
temp1 = scale.x * 80.0f;
|
|
temp2 = scale.y * 35.0f;
|
|
mCyl2.SetC(temp);
|
|
mCyl2.SetR(temp1);
|
|
mCyl2.SetH(temp2);
|
|
dComIfG_Ccsp()->Set(&mCyl2);
|
|
}
|
|
}
|
|
|
|
/* 00002F88-00002FC0 .text nextAnm__10daNpc_Hr_cFSci */
|
|
void daNpc_Hr_c::nextAnm(s8 i_nextAnm, int loopCount) {
|
|
if (mAnmLoopCount < loopCount) {
|
|
mAnmLoopCount++;
|
|
} else {
|
|
setAnm(i_nextAnm);
|
|
}
|
|
}
|
|
|
|
/* 00002FC0-0000300C .text msgAnm__10daNpc_Hr_cFUc */
|
|
void daNpc_Hr_c::msgAnm(u8 param_1) {
|
|
static s8 msg_anm_table[] = {
|
|
0, 1, 3, 4, 7, 5, 9, 8, 6
|
|
};
|
|
|
|
if (mMsgAnmIdx != param_1) {
|
|
mMsgAnmIdx = param_1;
|
|
if (mMsgAnmIdx < 9) {
|
|
setAnm(msg_anm_table[mMsgAnmIdx]);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 0000300C-00003020 .text talkInit__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::talkInit() {
|
|
mTalkState = TALK_INIT;
|
|
mMsgAnmIdx = 0xFF;
|
|
}
|
|
|
|
/* 00003020-000031AC .text talk__10daNpc_Hr_cFv */
|
|
u16 daNpc_Hr_c::talk() {
|
|
u16 msgStatus = 0xFF;
|
|
if (mTalkState == TALK_INIT) {
|
|
l_msgId = fpcM_ERROR_PROCESS_ID_e;
|
|
mCurrMsgNo = getMsg();
|
|
mTalkState = TALK_MSG_CREATE;
|
|
} else if (mTalkState != TALK_FINISHED) {
|
|
if(l_msgId == fpcM_ERROR_PROCESS_ID_e) {
|
|
cXyz temp(current.pos);
|
|
temp.y += 100.0f;
|
|
l_msgId = fopMsgM_messageSet(mCurrMsgNo, &temp);
|
|
} else {
|
|
msgAnm(dComIfGp_getMesgAnimeAttrInfo());
|
|
switch(mTalkState) {
|
|
case TALK_MSG_CREATE:
|
|
l_msg = fopMsgM_SearchByID(l_msgId);
|
|
if (l_msg != NULL) {
|
|
mTalkState = TALK_ACTIVE;
|
|
}
|
|
break;
|
|
case TALK_ACTIVE:
|
|
msgStatus = l_msg->mStatus;
|
|
if(msgStatus == fopMsgStts_MSG_DISPLAYED_e) {
|
|
l_msg->mStatus = next_msgStatus(&mCurrMsgNo);
|
|
if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
|
|
fopMsgM_messageSet(mCurrMsgNo);
|
|
}
|
|
} else if(msgStatus == fopMsgStts_BOX_CLOSED_e) {
|
|
l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e;
|
|
mTalkState = TALK_FINISHED;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return msgStatus;
|
|
}
|
|
|
|
/* 000031AC-00003410 .text init__10daNpc_Hr_cFv */
|
|
BOOL daNpc_Hr_c::init() {
|
|
if(setAction(&daNpc_Hr_c::wait_action, NULL)) {
|
|
mCloudPos = current.pos;
|
|
}
|
|
|
|
switch(mType) {
|
|
case 1:
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
offHide(1);
|
|
#else
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_2710)) {
|
|
onHide(1);
|
|
} else {
|
|
offHide(1);
|
|
}
|
|
#endif
|
|
dComIfGs_offTmpBit(dSv_event_tmp_flag_c::UNK_0404);
|
|
break;
|
|
default:
|
|
onHide(1);
|
|
attention_info.flags = fopAc_Attn_ACTION_SPEAK_e|fopAc_Attn_TALKFLAG_CHECK_e;
|
|
attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0x5B;
|
|
break;
|
|
}
|
|
|
|
J3DModel* model = mpHrMorf->getModel();
|
|
model->setBaseScale(scale);
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(shape_angle.y);
|
|
model->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
mpHrMorf->calc();
|
|
|
|
mStts.Init(0xFE, 0xFF, this);
|
|
mStts2.Init(0xFE, 0xFF, this);
|
|
|
|
switch(mType) {
|
|
case 1:
|
|
mCyl.Set(dNpc_hr_src);
|
|
mCyl2.Set(dNpc_hr_src);
|
|
break;
|
|
default:
|
|
mCyl.Set(dNpc_cyl_src);
|
|
eventInfo.setEventName("HT_TALK");
|
|
break;
|
|
}
|
|
|
|
mCyl.SetStts(&mStts);
|
|
mCyl2.SetStts(&mStts2);
|
|
defaultSetPos(¤t.pos);
|
|
mClothes.init();
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00003410-00003484 .text setAttention__10daNpc_Hr_cFb */
|
|
void daNpc_Hr_c::setAttention(bool param_1) {
|
|
if (chkFlag(HR_FLAG_00000010) || chkFlag(HR_FLAG_00000100)) {
|
|
return;
|
|
}
|
|
|
|
if (!param_1 && mAttnSetCount >= 2) {
|
|
return;
|
|
}
|
|
|
|
eyePos.set(mEyePos.x, mEyePos.y, mEyePos.z);
|
|
attention_info.position.set(mAttnBasePos.x, mAttnBasePos.y + 50.0f, mAttnBasePos.z);
|
|
}
|
|
|
|
/* 00003484-00003520 .text getNowJointY__10daNpc_Hr_cFv */
|
|
int daNpc_Hr_c::getNowJointY() {
|
|
daTornado_c* tornadoActor = (daTornado_c*)fopAcM_SearchByID(mProcId);
|
|
|
|
int i = 0;
|
|
while (i < 10) {
|
|
f32 jointY = tornadoActor->getJointYPos(i);
|
|
if (current.pos.y + speed.y < jointY) {
|
|
return i;
|
|
}
|
|
i++;
|
|
}
|
|
return i;
|
|
}
|
|
|
|
/* 00003520-00003730 .text getTornadoPos__10daNpc_Hr_cFiP4cXyz */
|
|
void daNpc_Hr_c::getTornadoPos(int jointY, cXyz* tornadoPos) {
|
|
daTornado_c* tornadoActor = (daTornado_c*)fopAcM_SearchByID(mProcId);
|
|
cXyz pos1;
|
|
cXyz pos2;
|
|
|
|
if(tornadoActor != NULL) {
|
|
if(jointY == 0) {
|
|
tornadoPos->set(tornadoActor->current.pos);
|
|
return;
|
|
} else {
|
|
f32 temp = current.pos.y + speed.y;
|
|
tornadoPos->y = temp;
|
|
if (jointY == 10) {
|
|
tornadoPos->x = tornadoActor->getJointXPos(10);
|
|
tornadoPos->z = tornadoActor->getJointZPos(10);
|
|
} else {
|
|
pos1.set(
|
|
tornadoActor->getJointXPos(jointY -1),
|
|
tornadoActor->getJointYPos(jointY -1),
|
|
tornadoActor->getJointZPos(jointY -1)
|
|
);
|
|
|
|
pos2.set(
|
|
tornadoActor->getJointXPos(jointY),
|
|
tornadoActor->getJointYPos(jointY),
|
|
tornadoActor->getJointZPos(jointY)
|
|
);
|
|
|
|
f32 ratio = (temp - pos1.y) / (pos2.y - pos1.y);
|
|
tornadoPos->x = ratio * pos2.x + (1.0f - ratio) * pos1.x;
|
|
tornadoPos->z = ratio * pos2.z + (1.0f - ratio) * pos1.z;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00003730-00003818 .text rideTornado__10daNpc_Hr_cFv */
|
|
bool daNpc_Hr_c::rideTornado() {
|
|
cXyz tornadoPos;
|
|
fopAc_ac_c* actor = fopAcM_SearchByID(mProcId);
|
|
if (actor == NULL) {
|
|
speed.x *= 0.95f;
|
|
speed.y = 0.0f;
|
|
speed.z *= 0.95f;
|
|
return false;
|
|
} else {
|
|
getTornadoPos(getNowJointY(), &tornadoPos);
|
|
speed.x = speed.x * 0.2f + (tornadoPos.x - current.pos.x) * 0.8f;
|
|
speed.z = speed.z * 0.2f + (tornadoPos.z - current.pos.z) * 0.8f;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 00003818-00003848 .text getLookBackMode__10daNpc_Hr_cFv */
|
|
u8 daNpc_Hr_c::getLookBackMode() {
|
|
if (chkFlag(HR_FLAG_00000080)) {
|
|
return 0;
|
|
}
|
|
if (chkFlag(HR_FLAG_00000040)) {
|
|
return 1;
|
|
}
|
|
return 0xff;
|
|
|
|
}
|
|
|
|
/* 00003848-000039D0 .text lookBack__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::lookBack() {
|
|
cXyz temp2;
|
|
cXyz temp(0.0f, 0.0f, 0.0f);
|
|
cXyz* dstPos = NULL;
|
|
s16 desiredYRot = current.angle.y;
|
|
bool headOnlyFollow = false;
|
|
switch(getLookBackMode()) {
|
|
case 0:
|
|
m_jnt.setTrn();
|
|
temp2 = dNpc_playerEyePos(-20.0f);
|
|
dstPos = &temp2;
|
|
temp.set(current.pos);
|
|
temp.y = eyePos.y;
|
|
break;
|
|
case 1:
|
|
temp2 = dNpc_playerEyePos(-20.0f);
|
|
dstPos = &temp2;
|
|
temp.set(current.pos);
|
|
temp.y = eyePos.y;
|
|
headOnlyFollow = true;
|
|
break;
|
|
default:
|
|
desiredYRot = current.angle.y;
|
|
headOnlyFollow = true;
|
|
break;
|
|
}
|
|
|
|
|
|
if (m_jnt.trnChk()) {
|
|
cLib_addCalcAngleS2(&mMaxHeadTurnVelocity, 0x800, 4, 0x800);
|
|
} else {
|
|
mMaxHeadTurnVelocity = 0;
|
|
}
|
|
m_jnt.lookAtTarget(¤t.angle.y, dstPos, temp, desiredYRot, mMaxHeadTurnVelocity, headOnlyFollow);
|
|
|
|
}
|
|
|
|
/* 000039D0-00003B44 .text rt_search__10daNpc_Hr_cFv */
|
|
bool daNpc_Hr_c::rt_search() {
|
|
daNpc_Hr_c* ac = (daNpc_Hr_c*)fopAcM_searchFromName("Ytrnd00", 0, 0);
|
|
if(dComIfGs_isEventBit(dSv_event_flag_c::UNK_2710)) {
|
|
return true;
|
|
}
|
|
|
|
if(ac != NULL) {
|
|
mProcId = fopAcM_GetID(ac);
|
|
mState = HR_STATE_RT_HIDE;
|
|
mHitCount = 0;
|
|
current.pos.y = home.pos.y - 1500.0f;
|
|
scale.setall(11.0f);
|
|
speed.setall(0.0f);
|
|
|
|
JPABaseEmitter* pEmitter = DEMO_SELECT(mpEmitter, mSmokeCallBack.getEmitter());
|
|
|
|
if(pEmitter != NULL) {
|
|
pEmitter->setGlobalScale(scale);
|
|
}
|
|
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_3D01)) {
|
|
mEventIdx = dComIfGp_evmng_getEventIdx("INTRO_RT");
|
|
} else {
|
|
mEventIdx = dComIfGp_evmng_getEventIdx("INTRO_RT_F");
|
|
}
|
|
mMoveTimer = 0x14;
|
|
}
|
|
return false;
|
|
|
|
}
|
|
|
|
/* 00003B44-00003CEC .text rt_hide__10daNpc_Hr_cFv */
|
|
bool daNpc_Hr_c::rt_hide() {
|
|
daShip_c* pShip = dComIfGp_getShipActor();
|
|
daPy_lk_c* pLink = (daPy_lk_c*)daPy_getPlayerLinkActorClass();
|
|
current.angle.y = fopAcM_searchActorAngleY(this, pLink);
|
|
cXyz tornadoPos;
|
|
getTornadoPos(0, &tornadoPos);
|
|
current.pos = tornadoPos;
|
|
current.pos.y -= 1500.0f;
|
|
if(eventInfo.checkCommandDemoAccrpt()) {
|
|
mReturnState = 8;
|
|
mState = HR_STATE_RT_INTRO;
|
|
mStaffIdx = dComIfGp_evmng_getMyStaffId("Hr2");
|
|
setEvFlag(EVFLAG_TORNADO_ACTIVE);
|
|
demoProc();
|
|
mDoAud_seStart(JA_SE_CV_RC_ENTER);
|
|
mDoAud_bgmAllMute(90);
|
|
dComIfGs_onEventBit(dSv_event_flag_c::UNK_3D01);
|
|
} else if (pShip != NULL && pShip->checkTornadoFlg()) {
|
|
if (mMoveTimer > 0) {
|
|
mMoveTimer--;
|
|
} else {
|
|
fopAcM_orderOtherEventId(this, mEventIdx);
|
|
dComIfGs_onTmpBit(dSv_event_tmp_flag_c::UNK_0404);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 00003CEC-00003D0C .text rt_intro__10daNpc_Hr_cFv */
|
|
bool daNpc_Hr_c::rt_intro() {
|
|
return rt_hit1();
|
|
}
|
|
|
|
/* 00003D0C-00003DD8 .text to_rt_hit__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::to_rt_hit() {
|
|
mDoAud_seStart(JA_SE_CV_RC_DAMAGE);
|
|
mDoAud_seStart(JA_SE_CV_RC_MODAE_1);
|
|
setAnm(11);
|
|
setTexPtn(1);
|
|
setFlag(HR_FLAG_00000400);
|
|
mHitDelayTimer = 0x52;
|
|
}
|
|
|
|
/* 00003DD8-00003EE4 .text to_rt_tact__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::to_rt_tact() {
|
|
mDoAud_seStart(JA_SE_CV_RC_DAMAGE);
|
|
mDoAud_seStart(JA_SE_CV_RC_MODAE_2);
|
|
|
|
mEventIdx = dComIfGp_evmng_getEventIdx("TACT0_RT");
|
|
mReturnState = mState;
|
|
mState = HR_STATE_RT_HIT_0;
|
|
fopAcM_orderOtherEventId(this, mEventIdx);
|
|
mHitDelayTimer = 0x52;
|
|
mDoAud_subBgmStop();
|
|
}
|
|
|
|
/* 00003EE4-000041D8 .text rt_angry__10daNpc_Hr_cFv */
|
|
bool daNpc_Hr_c::rt_angry() {
|
|
cXyz* hitPos;
|
|
|
|
daPy_lk_c* pLink = (daPy_lk_c*)daPy_getPlayerLinkActorClass();
|
|
|
|
current.angle.x += 0x100;
|
|
f32 currentY = current.pos.y;
|
|
speed.y = home.pos.y + 6000.0f + (1.0f - cM_scos(current.angle.x)) * 1000.0f - currentY;
|
|
scale.setall(11.0f);
|
|
current.angle.y = fopAcM_searchActorAngleY(this, daPy_getPlayerLinkActorClass());
|
|
|
|
JPABaseEmitter* pEmitter = DEMO_SELECT(mpEmitter, mSmokeCallBack.getEmitter());
|
|
|
|
if(pEmitter != NULL) {
|
|
pEmitter->setGlobalScale(scale);
|
|
}
|
|
|
|
rideTornado();
|
|
cCcD_Obj* hitObj = NULL;
|
|
if (mCyl2.ChkTgHit()) {
|
|
hitObj = mCyl2.GetTgHitObj();
|
|
hitPos = mCyl2.GetTgHitPosP();
|
|
} else {
|
|
if (mCyl.ChkTgHit()) {
|
|
hitObj = mCyl.GetTgHitObj();
|
|
hitPos = mCyl.GetTgHitPosP();
|
|
}
|
|
}
|
|
daShip_c* pShip = dComIfGp_getShipActor();
|
|
|
|
if (pShip->checkTornadoUp()) {
|
|
mState = HR_STATE_RT_WIN;
|
|
fopAcM_OnStatus(this, fopAcStts_UNK800_e);
|
|
|
|
setAnm(12);
|
|
mDoAud_seStart(JA_SE_CV_RC_ENTER);
|
|
return true;
|
|
} else if (mHitDelayTimer != 0) {
|
|
return true;
|
|
|
|
} else {
|
|
if (chkFlag(HR_FLAG_00000400)) {
|
|
clrFlag(HR_FLAG_00000400);
|
|
setAnm(2);
|
|
setTexPtn(2);
|
|
}
|
|
|
|
if (hitObj != NULL && ((hitObj->ChkAtType(AT_TYPE_NORMAL_ARROW)) || (hitObj->ChkAtType(AT_TYPE_FIRE_ARROW)) || (hitObj->ChkAtType(AT_TYPE_ICE_ARROW)) || (hitObj->ChkAtType(AT_TYPE_LIGHT_ARROW)))) {
|
|
cXyz scale(11.0f, 11.0f, 11.0f);
|
|
cXyz temp = *hitPos - pLink->eyePos;
|
|
if(!temp.isZero()) {
|
|
temp.normalize();
|
|
csXyz temp2;
|
|
cM3d_CalcVecZAngle(temp, &temp2);
|
|
dComIfGp_particle_set(dPa_name::ID_AK_JN_OK, hitPos, &temp2, &scale);
|
|
}
|
|
mHitCount++;
|
|
if(mHitCount >= 3) {
|
|
to_rt_tact();
|
|
} else {
|
|
to_rt_hit();
|
|
}
|
|
}
|
|
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 000041D8-00004208 .text rt_win__10daNpc_Hr_cFv */
|
|
bool daNpc_Hr_c::rt_win() {
|
|
speed.y = 0.0f;
|
|
rideTornado();
|
|
return true;
|
|
}
|
|
|
|
/* 00004208-00004328 .text rt_hit0__10daNpc_Hr_cFv */
|
|
bool daNpc_Hr_c::rt_hit0() {
|
|
daShip_c* pShip = dComIfGp_getShipActor();
|
|
|
|
if(eventInfo.checkCommandDemoAccrpt()) {
|
|
mState = HR_STATE_RT_HIT_1;
|
|
mStaffIdx = dComIfGp_evmng_getMyStaffId("Hr2");
|
|
setEvFlag(EVFLAG_TORNADO_ACTIVE);
|
|
demoProc();
|
|
} else if (pShip->checkTornadoUp()) {
|
|
mState = HR_STATE_RT_WIN;
|
|
fopAcM_OnStatus(this, fopAcStts_UNK800_e);
|
|
setAnm(12);
|
|
mDoAud_seStart(JA_SE_CV_RC_ENTER);
|
|
|
|
} else {
|
|
fopAcM_orderOtherEventId(this, mEventIdx);
|
|
}
|
|
|
|
speed.y = 0.0f;
|
|
rideTornado();
|
|
return true;
|
|
}
|
|
|
|
/* 00004328-000043D8 .text rt_hit1__10daNpc_Hr_cFv */
|
|
bool daNpc_Hr_c::rt_hit1() {
|
|
if(chkEvFlag(EVFLAG_TORNADO_ACTIVE)) {
|
|
rideTornado();
|
|
}
|
|
|
|
if(dComIfGp_evmng_endCheck(mEventIdx)) {
|
|
if(mReturnState == 1) {
|
|
onHide(0);
|
|
}
|
|
if(mState == HR_STATE_RT_INTRO) {
|
|
mDoAud_subBgmStart(JA_BGM_DIOCTA_BATTLE);
|
|
}
|
|
endTalk();
|
|
return false;
|
|
}
|
|
|
|
demoProc();
|
|
return true;
|
|
}
|
|
|
|
/* 000043D8-0000456C .text ht_hide__10daNpc_Hr_cFv */
|
|
bool daNpc_Hr_c::ht_hide() {
|
|
if (chkFlag(HR_FLAG_00000008)) {
|
|
fopAcM_seStart(this, JA_SE_PRE_TAKT, 0);
|
|
mReturnState = mState;
|
|
mState = HR_STATE_HT_TACT;
|
|
setAnmStatus();
|
|
mStaffIdx = dComIfGp_evmng_getMyStaffId("Hr");
|
|
demoProc();
|
|
dComIfGs_onSwitch(getSwbit(), fopAcM_GetRoomNo(this));
|
|
dComIfGp_event_onHindFlag(-1);
|
|
|
|
} else if (chkFlag(HR_FLAG_00000001)) {
|
|
mReturnState = mState;
|
|
mState = HR_STATE_TALK;
|
|
setAnmStatus();
|
|
daPy_getPlayerLinkActorClass()->onPlayerNoDraw();
|
|
|
|
} else {
|
|
if (fopAcM_seenActorAngleY(daPy_getPlayerLinkActorClass(), this) < 0x2AAA) {
|
|
SetOrder(1);
|
|
if (!dComIfGs_isEventBit(dSv_event_flag_c::UNK_2708)) {
|
|
SetOrder(4);
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 0000456C-000045F0 .text wait01__10daNpc_Hr_cFv */
|
|
bool daNpc_Hr_c::wait01() {
|
|
if (chkFlag(HR_FLAG_00000001)) {
|
|
mReturnState = mState;
|
|
mState = HR_STATE_TALK;
|
|
setAnmStatus();
|
|
} else {
|
|
SetOrder(1);
|
|
}
|
|
return mpHrMorf->isMorf();
|
|
}
|
|
|
|
/* 000045F0-000045F8 .text wait02__10daNpc_Hr_cFv */
|
|
bool daNpc_Hr_c::wait02() {
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000045F8-00004658 .text endTalk__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::endTalk() {
|
|
mState = mReturnState;
|
|
setAnmStatus();
|
|
dComIfGp_event_reset();
|
|
clrFlag(HR_FLAG_00000008|HR_FLAG_00000001);
|
|
field_0x60A = 5;
|
|
}
|
|
|
|
/* 00004658-000046F4 .text endTact__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::endTact() {
|
|
onHide(0);
|
|
defaultSetPos(&home.pos);
|
|
current.angle.y = home.angle.y;
|
|
shape_angle.y = home.angle.y;
|
|
speed.setall(0.0f);
|
|
speedF = 0.0f;
|
|
if (mType == 0) {
|
|
dComIfGs_offSwitch(getSwbit(), fopAcM_GetRoomNo(this));
|
|
}
|
|
}
|
|
|
|
/* 000046F4-000047F4 .text setEmitFlash__10daNpc_Hr_cFf */
|
|
void daNpc_Hr_c::setEmitFlash(f32 param_1) {
|
|
if(param_1 > 1.0f) {
|
|
param_1 = 1.0f;
|
|
}
|
|
|
|
if(param_1 < 0.0f) {
|
|
param_1 = 0.0f;
|
|
}
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
mpEmitter->setGlobalPrmColor(param_1 * 104.0f + 151.0f, param_1 * 137.0f + 118.0f, param_1 * 86.0f + 169.0f);
|
|
mpEmitter->setGlobalEnvColor(param_1 * 123.0f + 132.0f, param_1 * 143.0f + 112.0f, param_1 * 33.0f + 147.0f);
|
|
#else
|
|
JPABaseEmitter* pEmitter = mSmokeCallBack.getEmitter();
|
|
if(pEmitter != NULL) {
|
|
pEmitter->setGlobalPrmColor(param_1 * 104.0f + 151.0f, param_1 * 137.0f + 118.0f, param_1 * 86.0f + 169.0f);
|
|
pEmitter->setGlobalEnvColor(param_1 * 123.0f + 132.0f, param_1 * 143.0f + 112.0f, param_1 * 33.0f + 147.0f);
|
|
}
|
|
#endif
|
|
|
|
}
|
|
|
|
/* 000047F4-000049B8 .text smokeProc__10daNpc_Hr_cFv */
|
|
void daNpc_Hr_c::smokeProc() {
|
|
#if VERSION > VERSION_DEMO
|
|
JPABaseEmitter* pEmitter = mSmokeCallBack.getEmitter();
|
|
#endif
|
|
|
|
if(!chkFlag(HR_FLAG_00000010) && DEMO_SELECT(mpEmitter, pEmitter) != NULL && mType == 1 && mHitDelayTimer != 0) {
|
|
mHitDelayTimer--;
|
|
if(mHitDelayTimer >= 0x50) {
|
|
DEMO_SELECT(mpEmitter, pEmitter)->setGlobalPrmColor(0x7F, 0x5E, 0x91);
|
|
DEMO_SELECT(mpEmitter, pEmitter)->setGlobalEnvColor(0x6C, 0x58, 0x7B);
|
|
} else {
|
|
if(mHitDelayTimer > 0xF) {
|
|
int temp = (mHitDelayTimer - 0x10);
|
|
setEmitFlash((temp % 8) / 7.0f);
|
|
} else {
|
|
setEmitFlash(mHitDelayTimer / 15.0f);
|
|
|
|
}
|
|
}
|
|
|
|
if(mHitDelayTimer < 0x50) {
|
|
if(mHitDelayTimer > 0xf) {
|
|
f32 ratio = (mHitDelayTimer - 0xf) / 65.0f;
|
|
dKy_actor_addcol_set(0x80, 0x80, 0x5A, ratio);
|
|
dKy_vrbox_addcol_set(0x80, 0x80, 0x5A, ratio);
|
|
} else {
|
|
dKy_actor_addcol_set(0x80, 0x80, 0x5A, 0.0f);
|
|
dKy_vrbox_addcol_set(0x80, 0x80, 0x5A, 0.0f);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 000049B8-00004A38 .text talk01__10daNpc_Hr_cFv */
|
|
bool daNpc_Hr_c::talk01() {
|
|
if (talk() == fopMsgStts_BOX_CLOSED_e) {
|
|
endTalk();
|
|
daPy_getPlayerLinkActorClass()->offPlayerNoDraw();
|
|
}
|
|
return mpHrMorf->isMorf();
|
|
}
|
|
|
|
/* 00004A38-00004AEC .text ht_tact01__10daNpc_Hr_cFv */
|
|
bool daNpc_Hr_c::ht_tact01() {
|
|
if(dComIfGp_evmng_endCheck(mEventIdx)) {
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_2708)) {
|
|
dScnKy_env_light_c& env_light = g_env_light;
|
|
env_light.mWind.mWindVec.set(1.0f, 0.0f, 0.0f); // fake?
|
|
dKyw_tact_wind_set(0, 0);
|
|
dKyw_tact_wind_set_go();
|
|
}
|
|
endTalk();
|
|
endTact();
|
|
return false;
|
|
}
|
|
|
|
return demoProc();
|
|
}
|
|
|
|
/* 00004AEC-00004CB4 .text wait_action__10daNpc_Hr_cFPv */
|
|
BOOL daNpc_Hr_c::wait_action(void*) {
|
|
if(mActionStatus == ACTION_STARTING) {
|
|
switch(mType) {
|
|
case 0:
|
|
mState = HR_STATE_HT_HIDE;
|
|
eventInfo.setXyCheckCB(&daNpc_hr_XyCheckCB);
|
|
eventInfo.setXyEventCB(&daNpc_hr_XyEventCB);
|
|
break;
|
|
case 1:
|
|
#if VERSION == VERSION_DEMO
|
|
mState = HR_STATE_RT_SEARCH;
|
|
#else
|
|
if(dComIfGs_isEventBit(dSv_event_flag_c::UNK_2710)) {
|
|
mState = HR_STATE_WAIT_02;
|
|
} else {
|
|
mState = HR_STATE_RT_SEARCH;
|
|
}
|
|
#endif
|
|
break;
|
|
default:
|
|
mState = HR_STATE_WAIT_01;
|
|
break;
|
|
}
|
|
setAnmStatus();
|
|
mActionStatus++; // set to ACTION_ONGOING
|
|
} else if (mActionStatus != ACTION_ENDING) {
|
|
clrFlag(HR_FLAG_00000100|HR_FLAG_00000080|HR_FLAG_00000040);
|
|
bool temp;
|
|
switch (mState) {
|
|
case HR_STATE_WAIT_01:
|
|
temp = wait01();
|
|
break;
|
|
case HR_STATE_WAIT_02:
|
|
temp = wait02();
|
|
break;
|
|
case HR_STATE_TALK:
|
|
temp = talk01();
|
|
break;
|
|
case HR_STATE_HT_TACT:
|
|
temp = ht_tact01();
|
|
break;
|
|
case HR_STATE_RT_SEARCH:
|
|
temp = rt_search();
|
|
break;
|
|
case HR_STATE_RT_HIDE:
|
|
temp = rt_hide();
|
|
break;
|
|
case HR_STATE_RT_INTRO:
|
|
temp = rt_intro();
|
|
break;
|
|
case HR_STATE_RT_ANGRY:
|
|
temp = rt_angry();
|
|
break;
|
|
case HR_STATE_RT_WIN:
|
|
temp = rt_win();
|
|
break;
|
|
case HR_STATE_RT_HIT_0:
|
|
temp = rt_hit0();
|
|
break;
|
|
case HR_STATE_RT_HIT_1:
|
|
temp = rt_hit1();
|
|
break;
|
|
case HR_STATE_HT_HIDE:
|
|
temp = ht_hide();
|
|
break;
|
|
default:
|
|
temp = false;
|
|
break;
|
|
}
|
|
lookBack();
|
|
setAttention(temp);
|
|
smokeProc();
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00004CB4-00004E6C .text _draw__10daNpc_Hr_cFv */
|
|
BOOL daNpc_Hr_c::_draw() {
|
|
J3DModel* hrModel = mpHrMorf->getModel();
|
|
J3DModelData* modelData = hrModel->getModelData();
|
|
J3DModel* antennaModel = mpAntennaMorf->getModel();
|
|
if(chkFlag(HR_FLAG_00000010)) {
|
|
return FALSE;
|
|
}
|
|
|
|
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr);
|
|
g_env_light.setLightTevColorType(hrModel, &tevStr);
|
|
g_env_light.setLightTevColorType(mpBrowModel, &tevStr);
|
|
g_env_light.setLightTevColorType(antennaModel, &tevStr);
|
|
mBtpAnm.entry(modelData, mBlinkFrame);
|
|
|
|
if(getShapeType() == 1) {
|
|
J3DMaterialTable* bmt = (J3DMaterialTable*)dComIfG_getObjectRes("Hr", dRes_INDEX_HR_BMT_R_BODY_e);
|
|
modelData->setMaterialTable(bmt, J3DMatCopyFlag_Texture);
|
|
mpHrMorf->entryDL(bmt);
|
|
} else {
|
|
mpHrMorf->entryDL();
|
|
}
|
|
|
|
mpBrowModel->setBaseTRMtx(hrModel->getAnmMtx(getHeadJntNum()));
|
|
mDoExt_modelUpdateDL(mpBrowModel);
|
|
antennaModel->setBaseTRMtx(hrModel->getAnmMtx(getHeadJntNum()));
|
|
mpAntennaMorf->updateDL();
|
|
mBtpAnm.remove(modelData);
|
|
if (getShapeType() == 1 && mState == HR_STATE_RT_ANGRY) {
|
|
dSnap_RegistFig(DSNAP_TYPE_NPC_HR, this, 1.0f, 1.0f, 1.0f);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00004E6C-000050FC .text _execute__10daNpc_Hr_cFv */
|
|
BOOL daNpc_Hr_c::_execute() {
|
|
m_jnt.setParam(
|
|
/* mMaxBackboneX */ 0,
|
|
/* mMaxBackboneY */ 0x1C70,
|
|
/* mMinBackboneX */ 0,
|
|
/* mMinBackboneY */ -0x1C70,
|
|
/* mMaxHeadX */ 0x1FFE,
|
|
/* mMaxHeadY */ 9000,
|
|
/* mMinHeadX */ -0x1FFE,
|
|
/* mMinHeadY */ -9000,
|
|
/* mMaxTurnStep */ 0x1000
|
|
);
|
|
|
|
playTexPatternAnm();
|
|
|
|
mAnmEnded = mpHrMorf->play(&eyePos, 0, 0);
|
|
if(mpHrMorf->getFrame() < mAnmTimer) {
|
|
mAnmEnded = 1;
|
|
}
|
|
mAnmTimer = mpHrMorf->getFrame();
|
|
|
|
if(mAnmEnded != 0) {
|
|
switch(mAnmIdx) {
|
|
case 3:
|
|
nextAnm(0, 2);
|
|
break;
|
|
case 4:
|
|
nextAnm(0, 3);
|
|
break;
|
|
case 5:
|
|
nextAnm(1, 3);
|
|
break;
|
|
case 8:
|
|
nextAnm(1, 3);
|
|
break;
|
|
case 9:
|
|
nextAnm(1, 3);
|
|
break;
|
|
case 10:
|
|
nextAnm(2, 2);
|
|
break;
|
|
case 2:
|
|
nextAnm(10,(int)(cM_rndF(4.0f) + 4.0f));
|
|
break;
|
|
}
|
|
}
|
|
checkOrder();
|
|
(this->*mCurrActionFunc)(NULL);
|
|
eventOrder();
|
|
shape_angle.y = current.angle.y;
|
|
if (!chkFlag(HR_FLAG_00000020)) {
|
|
fopAcM_posMove(this, mStts.GetCCMoveP());
|
|
}
|
|
|
|
clrFlag(HR_FLAG_00000020);
|
|
tevStr.mRoomNo = current.roomNo;
|
|
J3DModel* hrModel = mpHrMorf->getModel();
|
|
hrModel->setBaseScale(scale);
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(shape_angle.y);
|
|
hrModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
mpHrMorf->calc();
|
|
if(chkFlag(HR_FLAG_00000010)) {
|
|
mCyl.OffCoSetBit();
|
|
} else {
|
|
if(mType != 1) {
|
|
mCyl.OnCoSetBit();
|
|
}
|
|
setCollision();
|
|
}
|
|
mClothes.proc();
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000050FC-00005188 .text _delete__10daNpc_Hr_cFv */
|
|
BOOL daNpc_Hr_c::_delete() {
|
|
dComIfG_resDelete(&mPhs, "Hr");
|
|
if(mpHrMorf != NULL) {
|
|
mpHrMorf->stopZelAnime();
|
|
}
|
|
|
|
mSmokeCallBack.end();
|
|
if(mType == 1) {
|
|
dComIfGs_offTmpBit(dSv_event_tmp_flag_c::UNK_0404);
|
|
}
|
|
|
|
mClothes.remove();
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00005188-000051A8 .text CheckCreateHeap__FP10fopAc_ac_c */
|
|
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
|
|
return ((daNpc_Hr_c*)i_this)->CreateHeap();
|
|
}
|
|
|
|
/* 000051A8-000052C4 .text _create__10daNpc_Hr_cFv */
|
|
cPhs_State daNpc_Hr_c::_create() {
|
|
|
|
fopAcM_ct_Retail(this, daNpc_Hr_c);
|
|
cPhs_State state = dComIfG_resLoad(&mPhs, "Hr");
|
|
if (state == cPhs_COMPLEATE_e) {
|
|
fopAcM_ct_Demo(this, daNpc_Hr_c);
|
|
switch(fopAcM_GetName(this)) {
|
|
case fpcNm_NPC_HR_e:
|
|
switch (getShapeType()) {
|
|
case 1:
|
|
mType = 1;
|
|
break;
|
|
default:
|
|
mType = 0;
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
if (!fopAcM_entrySolidHeap(this, &CheckCreateHeap, 0xB7B0)) {
|
|
#if VERSION > VERSION_DEMO
|
|
mpHrMorf = NULL;
|
|
#endif
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
cullMtx = mpHrMorf->getModel()->getBaseTRMtx();
|
|
if (!init()) {
|
|
#if VERSION > VERSION_DEMO
|
|
mpHrMorf = NULL;
|
|
#endif
|
|
return cPhs_ERROR_e;
|
|
}
|
|
}
|
|
return state;
|
|
}
|
|
|
|
daNpc_Hr_c::daNpc_Hr_c() {}
|
|
|
|
/* 000057E4-00005CE8 .text CreateHeap__10daNpc_Hr_cFv */
|
|
BOOL daNpc_Hr_c::CreateHeap() {
|
|
static int brow_bdl_table[] = {
|
|
dRes_INDEX_HR_BDL_H_BROW_e,
|
|
dRes_INDEX_HR_BDL_R_BROW_e
|
|
};
|
|
|
|
static int ant_bdl_table[] = {
|
|
dRes_INDEX_HR_BDL_H_ANT_e,
|
|
dRes_INDEX_HR_BDL_R_ANT_e
|
|
};
|
|
|
|
static u32 ant_bck_table[] = {
|
|
dRes_INDEX_HR_BCK_H_ANT_e,
|
|
dRes_INDEX_HR_BCK_R_ANT_e
|
|
};
|
|
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Hr", dRes_INDEX_HR_BDL_HR_e);
|
|
JUT_ASSERT(DEMO_SELECT(3341, 3392), modelData);
|
|
|
|
mpHrMorf = new mDoExt_McaMorf(
|
|
modelData,
|
|
NULL, NULL,
|
|
(J3DAnmTransformKey*)dComIfG_getObjectRes("Hr", dRes_INDEX_HR_BCK_H_WAIT01_e),
|
|
J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1,
|
|
NULL,
|
|
0x80000,
|
|
0x15021222
|
|
);
|
|
|
|
if (mpHrMorf == NULL || mpHrMorf->getModel() == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
m_jnt.setHeadJntNum(modelData->getJointName()->getIndex("head"));
|
|
JUT_ASSERT(DEMO_SELECT(3363, 3414), m_jnt.getHeadJntNum() >= 0);
|
|
|
|
m_jnt.setBackboneJntNum(modelData->getJointName()->getIndex("backbone1"));
|
|
JUT_ASSERT(DEMO_SELECT(3368, 3419), m_jnt.getBackboneJntNum() >= 0);
|
|
|
|
m_waist_jnt_num = modelData->getJointName()->getIndex("waist");
|
|
JUT_ASSERT(DEMO_SELECT(3372, 3423), m_waist_jnt_num >= 0);
|
|
|
|
|
|
J3DModelData* browModelData = (J3DModelData*)dComIfG_getObjectRes("Hr", brow_bdl_table[getShapeType()]);
|
|
JUT_ASSERT(DEMO_SELECT(3383, 3434), browModelData);
|
|
|
|
mpBrowModel = mDoExt_J3DModel__create(browModelData, 0x80000, 0x11000022);
|
|
|
|
if(mpBrowModel == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
J3DModelData* antModelData = (J3DModelData*)dComIfG_getObjectRes("Hr", ant_bdl_table[getShapeType()]);
|
|
JUT_ASSERT(DEMO_SELECT(3404, 3455), antModelData);
|
|
|
|
mpAntennaMorf = new mDoExt_McaMorf(
|
|
antModelData,
|
|
NULL, NULL,
|
|
(J3DAnmTransformKey*)dComIfG_getObjectRes("Hr", ant_bck_table[getShapeType()]),
|
|
J3DFrameCtrl::EMode_NULL, 1.0f, 0, -1, 1,
|
|
NULL,
|
|
0x80000,
|
|
0x11000022
|
|
);
|
|
|
|
if (mpAntennaMorf == NULL || mpAntennaMorf->getModel() == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
if(getShapeType() == 1) {
|
|
mTexPatternIdx = 2;
|
|
} else {
|
|
mTexPatternIdx = 0;
|
|
}
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
initTexPatternAnm(false);
|
|
#else
|
|
if(!initTexPatternAnm(false)) {
|
|
return FALSE;
|
|
}
|
|
#endif
|
|
|
|
for(u16 i = 0; i < modelData->getJointNum(); i++) {
|
|
if(i == getHeadJntNum() || i == getBackboneJntNum() || i == m_waist_jnt_num) {
|
|
mpHrMorf->getModel()->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack_Hr);
|
|
}
|
|
}
|
|
|
|
mpHrMorf->getModel()->setUserArea((u32)this);
|
|
|
|
for(u16 i = 0; i < antModelData->getJointNum(); i++) {
|
|
mpAntennaMorf->getModel()->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack_Ht_ant);
|
|
}
|
|
mpAntennaMorf->getModel()->setUserArea((u32)this);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00005CE8-00005D08 .text daNpc_Hr_Create__FP10fopAc_ac_c */
|
|
static cPhs_State daNpc_Hr_Create(fopAc_ac_c* i_this) {
|
|
return ((daNpc_Hr_c*)i_this)->_create();
|
|
}
|
|
|
|
/* 00005D08-00005D28 .text daNpc_Hr_Delete__FP10daNpc_Hr_c */
|
|
static BOOL daNpc_Hr_Delete(daNpc_Hr_c* i_this) {
|
|
return ((daNpc_Hr_c*)i_this)->_delete();
|
|
}
|
|
|
|
/* 00005D28-00005D48 .text daNpc_Hr_Execute__FP10daNpc_Hr_c */
|
|
static BOOL daNpc_Hr_Execute(daNpc_Hr_c* i_this) {
|
|
return ((daNpc_Hr_c*)i_this)->_execute();
|
|
}
|
|
|
|
/* 00005D48-00005D68 .text daNpc_Hr_Draw__FP10daNpc_Hr_c */
|
|
static BOOL daNpc_Hr_Draw(daNpc_Hr_c* i_this) {
|
|
return ((daNpc_Hr_c*)i_this)->_draw();
|
|
}
|
|
|
|
/* 00005D68-00005D70 .text daNpc_Hr_IsDelete__FP10daNpc_Hr_c */
|
|
static BOOL daNpc_Hr_IsDelete(daNpc_Hr_c*) {
|
|
return TRUE;
|
|
}
|
|
|
|
static actor_method_class l_daNpc_Hr_Method = {
|
|
(process_method_func)daNpc_Hr_Create,
|
|
(process_method_func)daNpc_Hr_Delete,
|
|
(process_method_func)daNpc_Hr_Execute,
|
|
(process_method_func)daNpc_Hr_IsDelete,
|
|
(process_method_func)daNpc_Hr_Draw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_NPC_HR = {
|
|
/* Layer ID */ fpcLy_CURRENT_e,
|
|
/* List ID */ 0x0007,
|
|
/* List Prio */ fpcPi_CURRENT_e,
|
|
/* Proc Name */ fpcNm_NPC_HR_e,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daNpc_Hr_c),
|
|
/* Size Other */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Draw Prio */ fpcDwPi_NPC_HR_e,
|
|
/* Actor SubMtd */ &l_daNpc_Hr_Method,
|
|
/* Status */ fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* Cull Type */ fopAc_CULLBOX_12_e,
|
|
};
|