mirror of https://github.com/zeldaret/tp.git
4295 lines
131 KiB
C++
4295 lines
131 KiB
C++
/**
|
||
* @file d_a_npc_gra.cpp
|
||
*
|
||
*/
|
||
|
||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||
#include "d/d_debug_viewer.h"
|
||
#include "d/d_meter2_info.h"
|
||
#include "d/actor/d_a_obj_onsenTaru.h"
|
||
#include "JSystem/JHostIO/JORFile.h"
|
||
#include "d/actor/d_a_npc_gra.h"
|
||
#include "d/actor/d_a_tag_gra.h"
|
||
#include "Z2AudioLib/Z2Instances.h"
|
||
|
||
//
|
||
// Declarations:
|
||
//
|
||
|
||
/* ############################################################################################## */
|
||
/* 809C9D98-809C9E1C 000000 0084+00 27/27 0/0 0/0 .rodata m__17daNpc_grA_Param_c */
|
||
const daNpc_grA_HIOParam daNpc_grA_Param_c::m = {
|
||
{90.0f, -4.0f, 1.0f, 850.0f, 255.0f, 280.0f, 40.0f, 100.0f, 0.0f, 0.0f, 20.0f,
|
||
-20.0f, 40.0f, -30.0f, 40.0f, -40.0f, 0.4f, 12.0f, 4, 6, 6, 6,
|
||
60.0f, 500.0f, 300.0f, -300.0f, 0x3c, 8, 0, 0, 0, 0, 0},
|
||
15,
|
||
6.0f,
|
||
3.0f,
|
||
0.17f,
|
||
0x300,
|
||
4,
|
||
1.35f,
|
||
};
|
||
|
||
#if DEBUG
|
||
#define GET_HIO(x) mpHio->mHioParams.x
|
||
#else
|
||
#define GET_HIO(x) daNpc_grA_Param_c::m.x
|
||
#endif
|
||
|
||
/* 809CA634-809CA65C 000020 0028+00 1/1 0/0 0/0 .data l_bmdGetParamList */
|
||
static int l_bmdGetParamList[][2] = {
|
||
3, 1,
|
||
3, 2,
|
||
3, 12,
|
||
13, 14,
|
||
11, 15,
|
||
};
|
||
|
||
/* 809CA65C-809CA7F4 000048 0198+00 1/2 0/0 0/0 .data l_bckGetParamList */
|
||
static int l_bckGetParamList[][2] = {
|
||
0x0E, 0x00,
|
||
0x0C, 0x00,
|
||
0x0D, 0x00,
|
||
0x0B, 0x00,
|
||
0x07, 0x00,
|
||
0x08, 0x00,
|
||
0x09, 0x00,
|
||
0x0A, 0x00,
|
||
0x07, 0x03,
|
||
0x05, 0x03,
|
||
0x08, 0x03,
|
||
0x06, 0x03,
|
||
0x08, 0x0A,
|
||
0x04, 0x0B,
|
||
0x06, 0x00,
|
||
0x07, 0x0A,
|
||
0x06, 0x0A,
|
||
0x07, 0x0E,
|
||
0x06, 0x0E,
|
||
0x08, 0x0E,
|
||
0x06, 0x0F,
|
||
0x05, 0x00,
|
||
0x15, 0x00,
|
||
0x04, 0x04,
|
||
0x16, 0x00,
|
||
0x0F, 0x00,
|
||
0x10, 0x00,
|
||
0x14, 0x00,
|
||
0x11, 0x00,
|
||
0x12, 0x00,
|
||
0x13, 0x00,
|
||
0x03, 0x04,
|
||
0x05, 0x04,
|
||
0x06, 0x04,
|
||
0x0B, 0x03,
|
||
0x09, 0x03,
|
||
0x0C, 0x03,
|
||
0x0A, 0x03,
|
||
0x03, 0x07,
|
||
0x05, 0x0A,
|
||
0x09, 0x0A,
|
||
0x05, 0x0B,
|
||
0x0A, 0x0A,
|
||
0x0B, 0x0A,
|
||
0x04, 0x0A,
|
||
0x09, 0x0E,
|
||
0x05, 0x0E,
|
||
0x0A, 0x0E,
|
||
0x08, 0x0F,
|
||
0x05, 0x0F,
|
||
0x07, 0x0F,
|
||
};
|
||
|
||
/* 809CA7F4 809CA874 0080
|
||
00
|
||
/1 0/0
|
||
.data l_btpGetParamList */
|
||
static int l_btpGetParamList[][2] = {
|
||
0x1C, 0x00,
|
||
0x1F, 0x00,
|
||
0x20, 0x00,
|
||
0x11, 0x03,
|
||
0x0F, 0x03,
|
||
0x10, 0x03,
|
||
0x10, 0x0a,
|
||
0x08, 0x0B,
|
||
0x1E, 0x00,
|
||
0x0F, 0x0A,
|
||
0x0E, 0x0A,
|
||
0x11, 0x0E,
|
||
0x10, 0x0E,
|
||
0x12, 0x0E,
|
||
0x0E, 0x0F,
|
||
0x1D, 0x00,
|
||
};
|
||
|
||
/* 809CA874-809CA87C 000260 0008+00 0/1 0/0 0/0 .data l_btkGetParamList */
|
||
static int l_btkGetParamList[][2] = {-1, 0};
|
||
|
||
/* 809CA87C-809CA8D4 000268 0058+00 0/3 0/0 0/0 .data l_evtGetParamList */
|
||
static int l_evtGetParamList[][2] = {
|
||
0x00, 0x00,
|
||
0x01, 0x03,
|
||
0x02, 0x05,
|
||
0x03, 0x06,
|
||
0x04, 0x06,
|
||
0x05, 0x06,
|
||
0x06, 0x08,
|
||
0x07, 0x09,
|
||
0x08, 0x09,
|
||
0x09, 0x09,
|
||
0x0A, 0x0D,
|
||
};
|
||
|
||
#if DEBUG
|
||
daNpc_grA_HIO_c::daNpc_grA_HIO_c() {
|
||
mHioParams = daNpc_grA_Param_c::m;
|
||
}
|
||
#endif
|
||
|
||
NPC_GRA_HIO_CLASS l_HIO;
|
||
|
||
/* 809CA8D4-809CA900 -00001 002C+00 0/3 0/0 0/0 .data l_evtNames */
|
||
static char* l_evtNames[11] = {
|
||
NULL,
|
||
"TALK_SPA",
|
||
"TEACH_ELV",
|
||
"KICK_OUT",
|
||
"KICK_OUT_BREAK",
|
||
"NONE_LOOK",
|
||
"RESCUE_ROCK",
|
||
"CARRY_SPA_WATER",
|
||
"CARRY_SPA_WATER_FAILURE",
|
||
"TALK_SPA_WATER",
|
||
"ROLL_ROCK_CRASH",
|
||
};
|
||
|
||
/* 809CA900-809CA920 0002EC 0020+00 1/0 0/0 0/0 .data l_loadRes_GRAa */
|
||
static int l_loadRes_GRAa[] = {
|
||
0, 1, -1, -1, -1, -1, -1, -1,
|
||
};
|
||
|
||
/* 809CA920-809CA940 00030C 0020+00 1/0 0/0 0/0 .data l_loadRes_GRA_Tw */
|
||
static int l_loadRes_GRA_Tw[] = {
|
||
0, 2, -1, -1, -1, -1, -1, -1,
|
||
};
|
||
|
||
/* 809CA940-809CA960 00032C 0020+00 1/0 0/0 0/0 .data l_loadRes_GRA_Spa */
|
||
static int l_loadRes_GRA_Spa[] = {
|
||
0, 1, 3, -1, -1, -1, -1, -1,
|
||
};
|
||
|
||
/* 809CA960-809CA980 00034C 0020+00 1/0 0/0 0/0 .data l_loadRes_GRA_SDEMO */
|
||
static int l_loadRes_GRA_SDEMO[] = {
|
||
0, 1, 4, -1, -1, -1, -1, -1,
|
||
};
|
||
|
||
/* 809CA980-809CA9A0 00036C 0020+00 1/0 0/0 0/0 .data l_loadRes_GRA_GATE */
|
||
static int l_loadRes_GRA_GATE[] = {
|
||
0, 1, 4, 5, -1, -1, -1, -1,
|
||
};
|
||
|
||
/* 809CA9A0-809CA9C0 00038C 0020+00 1/0 0/0 0/0 .data l_loadRes_GRA_KICKOUT */
|
||
static int l_loadRes_GRA_KICKOUT[] = {
|
||
0, 1, 6, 10, -1, -1, -1, -1,
|
||
};
|
||
|
||
/* 809CA9C0-809CA9E0 0003AC 0020+00 1/0 0/0 0/0 .data l_loadRes_GRA_ROCK */
|
||
static int l_loadRes_GRA_ROCK[] = {
|
||
0, 1, 7, 8, -1, -1, -1, -1,
|
||
};
|
||
|
||
/* 809CA9E0-809CAA00 0003CC 0020+00 1/0 0/0 0/0 .data l_loadRes_GRA_SPAWATER */
|
||
static int l_loadRes_GRA_SPAWATER[] = {
|
||
0, 1, 3, 9, 10, 11, 12, -1,
|
||
};
|
||
|
||
/* 809CAA00-809CAA20 0003EC 0020+00 1/0 0/0 0/0 .data l_loadRes_GRA_SPABUYER */
|
||
static int l_loadRes_GRA_SPABUYER[] = {
|
||
0, 1, 15, -1, -1, -1, -1, -1,
|
||
};
|
||
|
||
/* 809CAA20-809CAA40 00040C 0020+00 1/0 0/0 0/0 .data l_loadRes_GRA_SPABUYER_TW */
|
||
static int l_loadRes_GRA_SPABUYER_TW[] = {
|
||
0, 2, 15, -1, -1, -1, -1, -1,
|
||
};
|
||
|
||
/* 809CAA40-809CAA60 00042C 0020+00 1/0 0/0 0/0 .data l_loadRes_GRA_ROCKCRASHER */
|
||
static int l_loadRes_GRA_ROCKCRASHER[] = {
|
||
0, 1, 13, 11, 14, -1, -1, -1,
|
||
};
|
||
|
||
/* 809CAA60-809CAA80 00044C 0020+00 1/0 0/0 0/0 .data l_loadRes_GRA_BUYER */
|
||
static int l_loadRes_GRA_BUYER[] = {
|
||
0, 1, 4, -1, -1, -1, -1, -1,
|
||
};
|
||
|
||
/* 809CAA80-809CAAA0 00046C 0020+00 1/0 0/0 0/0 .data l_loadRes_GRA0 */
|
||
static int l_loadRes_GRA0[] = {
|
||
0, 1, -1, -1, -1, -1, -1, -1,
|
||
};
|
||
|
||
/* 809CAAA0-809CAAD4 -00001 0034+00 2/2 0/0 0/0 .data l_loadRes_list */
|
||
static int* l_loadRes_list[13] = {
|
||
l_loadRes_GRAa,
|
||
l_loadRes_GRA_Tw,
|
||
l_loadRes_GRA_Spa,
|
||
l_loadRes_GRA_SDEMO,
|
||
l_loadRes_GRA_GATE,
|
||
l_loadRes_GRA_KICKOUT,
|
||
l_loadRes_GRA_ROCK,
|
||
l_loadRes_GRA_SPAWATER,
|
||
l_loadRes_GRA_SPABUYER,
|
||
l_loadRes_GRA_SPABUYER_TW,
|
||
l_loadRes_GRA_ROCKCRASHER,
|
||
l_loadRes_GRA_BUYER,
|
||
l_loadRes_GRA0,
|
||
};
|
||
|
||
/* 809CAAD4-809CAB14 -00001 0040+00 5/9 0/0 0/0 .data l_resNames */
|
||
static char* l_resNames[16] = {
|
||
"grA_base",
|
||
"grA_mdl",
|
||
"grA_TW",
|
||
"grA_SPA",
|
||
"grA_Sdemo",
|
||
"grA_Elv",
|
||
"grA_Kick",
|
||
"grA_Rock",
|
||
"grA_RockD",
|
||
"grA_SWD",
|
||
"grA_onsen",
|
||
"grA_onsn2",
|
||
"maroTaru",
|
||
"grA_RCD",
|
||
"grA_gate",
|
||
"grA_town",
|
||
};
|
||
|
||
/* 809CAB14-809CAB20 -00001 000C+00 1/1 0/0 0/0 .data l_myName */
|
||
static char* l_myName[3] = {
|
||
"grA",
|
||
"grA_spa",
|
||
"grA_Elv",
|
||
};
|
||
|
||
|
||
#if DEBUG
|
||
void daNpc_grA_HIO_c::listenPropertyEvent(const JORPropertyEvent* i_event) {
|
||
JORReflexible::listenPropertyEvent(i_event);
|
||
int len;
|
||
JORFile file;
|
||
char buff[2000];
|
||
switch ((uintptr_t)i_event->id) {
|
||
case 0x40000002:
|
||
if (file.open(6, "すべてのファイル(*.*)\0*.*\0", NULL, NULL, NULL)) {
|
||
memset(buff, 0, sizeof(buff));
|
||
len = 0;
|
||
daNpcF_commonListenPropertyEvent(buff, &len, &this->mHioParams.mNpcFParams);
|
||
sprintf(buff + len, "%d, \t// お辞儀タイマー\n", this->mHioParams.mBowTimer);
|
||
len = strlen(buff);
|
||
sprintf(buff + len, "%3.3f, \t// 回転移動速度係数\n", this->mHioParams.mRotationalSpeed);
|
||
len = strlen(buff);
|
||
sprintf(buff + len, "%3.3f, \t// 歩き移動速度\n", this->mHioParams.mWalkingSpeed);
|
||
len = strlen(buff);
|
||
sprintf(buff + len, "%3.3f, \t// 歩きアニメ速度\n", this->mHioParams.mWalkingAnimationSpeed);
|
||
len = strlen(buff);
|
||
sprintf(buff + len, "%d, \t// 歩行回転速度\n", this->mHioParams.mWalkingRotationSpeed);
|
||
len = strlen(buff);
|
||
sprintf(buff + len, "%d, \t// 歩行回転分割数\n", this->mHioParams.mWalkingRotationDivisions);
|
||
len = strlen(buff);
|
||
sprintf(buff + len, "%3.3f, \t// パーティクルサイズ\n", this->mHioParams.mParticleSize);
|
||
// @BUG: should update len here, otherwise the final length won't include the final sprintf
|
||
file.writeData(buff, len);
|
||
file.close();
|
||
OS_REPORT("write append success!::%6d\n", len);
|
||
} else {
|
||
OS_REPORT("write append failure!\n");
|
||
}
|
||
}
|
||
}
|
||
|
||
void daNpc_grA_HIO_c::genMessage(JORMContext* context) {
|
||
daNpcF_commonGenMessage(context, &mHioParams.mNpcFParams);
|
||
context->genSlider("お辞儀タイマー ", &mHioParams.mBowTimer, 0, 1000, 0, NULL, -1, -1, 0x200, 0x18);
|
||
context->genSlider("回転移動速度係数", &mHioParams.mRotationalSpeed, 0.0f, 100.0f, 0, NULL, -1, -1, 0x200, 0x18);
|
||
context->genSlider("歩き移動速度 ", &mHioParams.mWalkingSpeed, 0.0f, 100.0f, 0, NULL, -1, -1, 0x200, 0x18);
|
||
context->genSlider("歩きアニメ速度 ", &mHioParams.mWalkingAnimationSpeed, 0.0f, 10.0f, 0, NULL, -1, -1, 0x200, 0x18);
|
||
context->genSlider("歩行回転角度 ", &mHioParams.mWalkingRotationSpeed, 0, 0x7fff, 0, NULL, -1, -1, 0x200, 0x18);
|
||
context->genSlider("歩行回転分割数 ", &mHioParams.mWalkingRotationDivisions, 0, 0x100, 0, NULL, -1, -1, 0x200, 0x18);
|
||
context->genSlider("エフェクトサイズ", &mHioParams.mParticleSize, 0.0f, 10.0f, 0, NULL, -1, -1, 0x200, 0x18);
|
||
context->genButton("ファイル書き出し", 0x40000002, 0, NULL, -1, -1, 0x200, 0x18);
|
||
}
|
||
#endif
|
||
|
||
/* 809CAB20-809CAB50 -00001 0030+00 0/1 0/0 0/0 .data mEvtCutNameList__11daNpc_grA_c */
|
||
char* daNpc_grA_c::mEvtCutNameList[12] = {
|
||
"",
|
||
"TALK_SPA",
|
||
"GRDS_ROLL",
|
||
"GRDS_GATE",
|
||
"TEACH_ELV",
|
||
"KICK_OUT",
|
||
"NONE_LOOK",
|
||
"RESCUE_ROCK",
|
||
"CARRY_SPA_WATER",
|
||
"CARRY_SPA_WATER_FAILURE",
|
||
"TALK_SPA_WATER",
|
||
"ROLL_ROCK_CRASH",
|
||
};
|
||
|
||
/* 809CABD4-809CAC64 0005C0 0090+00 0/2 0/0 0/0 .data mEvtCutList__11daNpc_grA_c */
|
||
daNpc_grA_c::cut_type daNpc_grA_c::mEvtCutList[] = {
|
||
NULL,
|
||
&daNpc_grA_c::ECut_talkSpa,
|
||
&daNpc_grA_c::ECut_grDSRoll,
|
||
&daNpc_grA_c::ECut_grDSGate,
|
||
&daNpc_grA_c::ECut_teachElevator,
|
||
&daNpc_grA_c::ECut_kickOut,
|
||
&daNpc_grA_c::ECut_noneLook,
|
||
&daNpc_grA_c::ECut_rescueRock,
|
||
&daNpc_grA_c::ECut_carrySpaWater,
|
||
&daNpc_grA_c::ECut_carrySpaWaterFailure,
|
||
&daNpc_grA_c::ECut_talkSpaWater,
|
||
&daNpc_grA_c::ECut_rollRockCrash,
|
||
};
|
||
|
||
/* 809BE94C-809BEB24 0000EC 01D8+00 1/1 0/0 0/0 .text __ct__11daNpc_grA_cFv */
|
||
daNpc_grA_c::daNpc_grA_c() : daNpcF_c() {
|
||
// NONMATCHING
|
||
}
|
||
|
||
/* 809BEB64-809BEDA4 000304 0240+00 1/0 0/0 0/0 .text __dt__11daNpc_grA_cFv */
|
||
daNpc_grA_c::~daNpc_grA_c() {
|
||
for (int i = 0; l_loadRes_list[mType][i] >= 0; i++) {
|
||
dComIfG_resDelete(&mPhase[i], l_resNames[l_loadRes_list[mType][i]]);
|
||
}
|
||
|
||
if (heap != NULL) {
|
||
mpMorf->stopZelAnime();
|
||
}
|
||
|
||
#if DEBUG
|
||
if (mpHio != NULL) {
|
||
mpHio->removeHIO();
|
||
}
|
||
#endif
|
||
}
|
||
|
||
/* 809BEDA4-809BF0A8 000544 0304+00 1/1 0/0 0/0 .text create__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::create() {
|
||
fopAcM_ct(this, daNpc_grA_c);
|
||
mTwilight = dKy_darkworld_check();
|
||
mType = getTypeFromParam();
|
||
mMode = getMode();
|
||
mSwBit = getSwBit();
|
||
if (home.angle.x != 0xffff) {
|
||
field_0x146C = home.angle.x;
|
||
} else{
|
||
field_0x146C = -1;
|
||
}
|
||
if (isDelete()) {
|
||
return cPhs_ERROR_e;
|
||
}
|
||
int phase;
|
||
int i = 0, j = 0;
|
||
J3DModelData* unused;
|
||
int unused2 = j;
|
||
|
||
for (; l_loadRes_list[mType][j] >= 0; j++) {
|
||
phase = dComIfG_resLoad(&mPhase[j], l_resNames[l_loadRes_list[mType][j]]);
|
||
if (phase == cPhs_ERROR_e || phase == cPhs_UNK3_e) {
|
||
return cPhs_ERROR_e;
|
||
}
|
||
if (phase == cPhs_COMPLEATE_e) {
|
||
i++;
|
||
}
|
||
}
|
||
if (i == j) {
|
||
if (!fopAcM_entrySolidHeap(this, &daNpc_grA_c::createHeapCallBack, 0x800045d0)) {
|
||
return cPhs_ERROR_e;
|
||
}
|
||
unused = mpMorf->getModel()->getModelData();
|
||
|
||
fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
|
||
fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f);
|
||
mCreature.init(¤t.pos, &eyePos, 3, 1);
|
||
|
||
#if DEBUG
|
||
mpHio = &l_HIO;
|
||
mpHio->entryHIO("ゴロン一般");
|
||
#endif
|
||
|
||
f32 v;
|
||
if (mType == 2) {
|
||
v = 120.0f;
|
||
} else {
|
||
v = GET_HIO(mNpcFParams.width);
|
||
}
|
||
mAcchCir.SetWall(v, GET_HIO(mNpcFParams.knee_length));
|
||
|
||
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir,
|
||
fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this));
|
||
mCcStts.Init(GET_HIO(mNpcFParams.weight), 0, this);
|
||
|
||
field_0xC98.Set(mCcDCyl);
|
||
field_0xC98.SetStts(&mCcStts);
|
||
mAcch.CrrPos(dComIfG_Bgsp());
|
||
mGndChk = mAcch.m_gnd;
|
||
mGroundH = mAcch.GetGroundH();
|
||
setEnvTevColor();
|
||
setRoomNo();
|
||
reset();
|
||
Execute();
|
||
return cPhs_COMPLEATE_e;
|
||
}
|
||
return cPhs_INIT_e;
|
||
}
|
||
|
||
/* 809BF0A8-809BF418 000848 0370+00 1/1 0/0 0/0 .text CreateHeap__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::CreateHeap() {
|
||
J3DModelData* mdlData_p = NULL;
|
||
J3DModel* mdlData2_p = NULL;
|
||
if (mTwilight) {
|
||
if (l_bmdGetParamList[1][0] >= 0) {
|
||
mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNames[l_bmdGetParamList[1][1]],
|
||
l_bmdGetParamList[1][0]);
|
||
}
|
||
} else if (l_bmdGetParamList[0][0] >= 0) {
|
||
mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNames[l_bmdGetParamList[0][1]],
|
||
l_bmdGetParamList[0][0]);
|
||
}
|
||
JUT_ASSERT(774, NULL != mdlData_p);
|
||
int v = 0x11020284;
|
||
mpMorf = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mCreature, 0x80000, v);
|
||
if (mpMorf != NULL && mpMorf->getModel() == NULL) {
|
||
mpMorf->stopZelAnime();
|
||
mpMorf = NULL;
|
||
}
|
||
if (mpMorf == NULL) {
|
||
return FALSE;
|
||
}
|
||
mdlData2_p = mpMorf->getModel();
|
||
for (u16 i = 0; i < mdlData_p->getJointNum(); i++) {
|
||
mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack);
|
||
}
|
||
mdlData2_p->setUserArea((uintptr_t)this);
|
||
int bmdIndex = -1;
|
||
int modelFlag = 0x80000;
|
||
switch (mType) {
|
||
case 7:
|
||
bmdIndex = 2;
|
||
break;
|
||
case 8:
|
||
case 9:
|
||
bmdIndex = 4;
|
||
break;
|
||
case 10:
|
||
bmdIndex = 3;
|
||
modelFlag = 0;
|
||
break;
|
||
}
|
||
|
||
if (bmdIndex > 0) {
|
||
J3DModelData* m = NULL;
|
||
m = (J3DModelData*)dComIfG_getObjectRes(l_resNames[l_bmdGetParamList[bmdIndex][1]],
|
||
l_bmdGetParamList[bmdIndex][0]);
|
||
if (m != NULL) {
|
||
mpModel = mDoExt_J3DModel__create(m, modelFlag, 0x11000084);
|
||
if (mpModel == NULL) {
|
||
return FALSE;
|
||
}
|
||
} else {
|
||
return FALSE;
|
||
}
|
||
} else {
|
||
mpModel = NULL;
|
||
}
|
||
if (mType == 2) {
|
||
if (getMode() == 1) {
|
||
if (!setExpressionAnm(10, false)) {
|
||
return false;
|
||
}
|
||
setMotionAnm(0x24, 0.0f);
|
||
} else {
|
||
if (!setExpressionAnm(8, false)) {
|
||
return false;
|
||
}
|
||
setMotionAnm(0x22, 0.0f);
|
||
}
|
||
} else {
|
||
if (!setExpressionAnm(0, false)) {
|
||
return false;
|
||
}
|
||
setMotionAnm(0x16, 0.0f);
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809BF418-809BF44C 000BB8 0034+00 1/1 0/0 0/0 .text Delete__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::Delete() {
|
||
fopAcM_RegisterDeleteID(this, "NPC_GRA");
|
||
this->~daNpc_grA_c();
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809BF44C-809BF490 000BEC 0044+00 2/2 0/0 0/0 .text Execute__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::Execute() {
|
||
int ret = execute();
|
||
setPrtcl();
|
||
return ret;
|
||
}
|
||
|
||
/* 809BF490-809BF504 000C30 0074+00 1/1 0/0 0/0 .text Draw__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::Draw() {
|
||
return draw(chkAction(&daNpc_grA_c::test), 0, GET_HIO(mNpcFParams.real_shadow_size), NULL, 0);
|
||
}
|
||
|
||
/* 809BF504-809BF738 000CA4 0234+00 1/1 0/0 0/0 .text
|
||
* ctrlJoint__11daNpc_grA_cFP8J3DJointP8J3DModel */
|
||
BOOL daNpc_grA_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) {
|
||
J3DJoint* joint = i_joint;
|
||
int jntNo = joint->getJntNo();
|
||
int arr[] = {1, 3, 4};
|
||
if (jntNo == 0) {
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(1));
|
||
mDoMtx_stack_c::multVecZero(&mLookatPos[0]);
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(3));
|
||
mDoMtx_stack_c::multVecZero(&mLookatPos[1]);
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4));
|
||
mDoMtx_stack_c::multVecZero(&mLookatPos[2]);
|
||
}
|
||
|
||
mDoMtx_stack_c::copy(i_model->getAnmMtx(jntNo));
|
||
|
||
switch (jntNo) {
|
||
case 1:
|
||
case 3:
|
||
case 4:
|
||
setLookatMtx(jntNo, arr, GET_HIO(mNpcFParams.neck_rotation_ratio));
|
||
}
|
||
|
||
if (jntNo == 1) {
|
||
mDoMtx_stack_c::YrotM(-field_0x908[0].z);
|
||
mDoMtx_stack_c::ZrotM(field_0x908[0].x);
|
||
} else if (jntNo == 4) {
|
||
mDoMtx_stack_c::YrotM(-field_0x908[2].z);
|
||
mDoMtx_stack_c::ZrotM(field_0x908[2].x);
|
||
}
|
||
|
||
i_model->setAnmMtx(jntNo, mDoMtx_stack_c::get());
|
||
cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
|
||
|
||
if (jntNo == 4 || jntNo == 7) {
|
||
if ((mAnmFlags & 0x100) != 0) {
|
||
J3DAnmTransform* a = mBckAnm.getBckAnm();
|
||
mBckAnm.changeBckOnly(mpMorf->getAnm());
|
||
mpMorf->changeAnm(a);
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809BF738-809BF758 000ED8 0020+00 1/1 0/0 0/0 .text
|
||
* createHeapCallBack__11daNpc_grA_cFP10fopAc_ac_c */
|
||
BOOL daNpc_grA_c::createHeapCallBack(fopAc_ac_c* i_this) {
|
||
daNpc_grA_c* this_gra = (daNpc_grA_c*)i_this;
|
||
return this_gra->CreateHeap();
|
||
}
|
||
|
||
/* 809BF758-809BF7A4 000EF8 004C+00 2/2 0/0 0/0 .text ctrlJointCallBack__11daNpc_grA_cFP8J3DJointi */
|
||
BOOL daNpc_grA_c::ctrlJointCallBack(J3DJoint* i_joint, int param_1) {
|
||
if (param_1 == 0)
|
||
{
|
||
J3DModel* model = j3dSys.getModel();
|
||
daNpc_grA_c* area = (daNpc_grA_c*)model->getUserArea();
|
||
if (area != NULL)
|
||
{
|
||
area->ctrlJoint(i_joint, model);
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809BF7A4-809BF8A0 000F44 00FC+00 1/1 0/0 1/1 .text setTagJump__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::setTagJump() {
|
||
if (field_0x1489) {
|
||
current.pos = old.pos = home.pos = field_0x148C;
|
||
shape_angle = mCurAngle = mOldAngle = current.angle = old.angle = home.angle = field_0x1498;
|
||
field_0x14D0 = 0;
|
||
return TRUE;
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
/* 809BF8A0-809BF99C 001040 00FC+00 2/2 0/0 0/0 .text setTagJump2__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::setTagJump2() {
|
||
if (field_0x149E) {
|
||
current.pos = old.pos = home.pos = field_0x14A0;
|
||
shape_angle = mCurAngle = mOldAngle = current.angle = old.angle = home.angle = field_0x14AC;
|
||
field_0x14D0 = 0;
|
||
return TRUE;
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
/* 809BF99C-809BFA88 00113C 00EC+00 1/1 0/0 1/1 .text setHomeJump__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::setHomeJump() {
|
||
current.pos = old.pos = home.pos = field_0x14BC;
|
||
shape_angle = mCurAngle = mOldAngle = current.angle = old.angle = home.angle = field_0x14C8;
|
||
field_0x14D0 = 0;
|
||
field_0x14D1 = 0;
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809BFA88-809BFAF4 001228 006C+00 2/2 0/0 0/0 .text s_sub__FPvPv */
|
||
static void* s_sub(void* i_actor, void* i_this) {
|
||
// a bit ugly, but the debug version can't have any local variables
|
||
if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_TAG_GRA) {
|
||
if (((daNpc_grA_c*)i_this)->checkTagGraSub((fopAc_ac_c*)i_actor)) {
|
||
return i_actor;
|
||
}
|
||
}
|
||
return NULL;
|
||
}
|
||
|
||
/* 809BFAF4-809BFB54 001294 0060+00 1/1 0/0 0/0 .text checkTagGraSub__11daNpc_grA_cFP10fopAc_ac_c
|
||
*/
|
||
bool daNpc_grA_c::checkTagGraSub(fopAc_ac_c* i_this) {
|
||
daTagGra_c* this_gra = (daTagGra_c*)i_this;
|
||
if ((mType == 3 && this_gra->getMode() == 3) || (mType == 4 && this_gra->getMode() == 4)) {
|
||
if (this_gra->getGraNo() == mMode)
|
||
{
|
||
return TRUE;
|
||
}
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
/* 809BFB54-809BFBC0 0012F4 006C+00 1/1 0/0 0/0 .text s_sub2__FPvPv */
|
||
static void* s_sub2(void* i_actor, void* i_this) {
|
||
// a bit ugly, but the debug version can't have any local variables
|
||
if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_TAG_GRA) {
|
||
if (((daNpc_grA_c*)i_this)->checkTagGraSub2((fopAc_ac_c*)i_actor)) {
|
||
return i_actor;
|
||
}
|
||
}
|
||
return NULL;
|
||
}
|
||
|
||
/* 809BFBC0-809BFC00 001360 0040+00 1/1 0/0 0/0 .text checkTagGraSub2__11daNpc_grA_cFP10fopAc_ac_c
|
||
*/
|
||
bool daNpc_grA_c::checkTagGraSub2(fopAc_ac_c* i_this) {
|
||
daTagGra_c* this_gra = (daTagGra_c*)i_this;
|
||
if ((mType == 3 && this_gra->getMode() == 5)) {
|
||
if (this_gra->getGraNo() == mMode)
|
||
{
|
||
return TRUE;
|
||
}
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
/* 809BFC00-809BFC4C 0013A0 004C+00 1/1 0/0 0/0 .text s_subShop__FPvPv */
|
||
static void* s_subShop(void* i_actor, void* i_this) {
|
||
(void)i_this;
|
||
if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_NPC_GRM) {
|
||
return i_actor;
|
||
}
|
||
return NULL;
|
||
}
|
||
|
||
/* 809BFC4C-809BFC98 0013EC 004C+00 1/1 0/0 0/0 .text s_subGRD__FPvPv */
|
||
static void* s_subGRD(void* i_actor, void* i_this) {
|
||
(void)i_this;
|
||
if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_NPC_WRESTLER) {
|
||
return i_actor;
|
||
}
|
||
return NULL;
|
||
}
|
||
|
||
/* 809BFC98-809BFD04 001438 006C+00 1/1 0/0 0/0 .text s_subOnsenTaru__FPvPv */
|
||
static void *s_subOnsenTaru(void* i_actor, void* i_this) {
|
||
(void)i_this;
|
||
if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_Obj_OnsenTaru &&
|
||
!fpcM_IsCreating(fopAcM_GetID((i_actor))))
|
||
{
|
||
return i_actor;
|
||
}
|
||
return NULL;
|
||
}
|
||
|
||
/* 809BFD04-809BFD60 0014A4 005C+00 2/2 0/0 0/0 .text s_subCarry__FPvPv */
|
||
static void *s_subCarry(void* i_actor, void* i_this) {
|
||
if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_Obj_Carry) {
|
||
((daNpc_grA_c*)i_this)->addCarryNum();
|
||
}
|
||
return NULL;
|
||
}
|
||
|
||
/* 809BFD60-809BFDCC 001500 006C+00 2/2 0/0 0/0 .text s_subCrashed__FPvPv */
|
||
static void *s_subCrashed(void* i_actor, void* i_this) {
|
||
if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_TAG_GRA &&
|
||
((daNpc_grA_c*)i_this)->checkTagGraSubCrashed((fopAc_ac_c*)i_actor))
|
||
{
|
||
return i_actor;
|
||
}
|
||
return NULL;
|
||
}
|
||
|
||
/* 809BFDCC-809BFDFC 00156C 0030+00 1/1 0/0 0/0 .text
|
||
* checkTagGraSubCrashed__11daNpc_grA_cFP10fopAc_ac_c */
|
||
bool daNpc_grA_c::checkTagGraSubCrashed(fopAc_ac_c* i_this) {
|
||
daTagGra_c* this_gra = (daTagGra_c*)i_this;
|
||
if (mType == 10 && this_gra->getMode() == 6) {
|
||
return TRUE;
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
/* 809BFDFC-809C0038 00159C 023C+00 1/0 0/0 0/0 .text setParam__11daNpc_grA_cFv */
|
||
void daNpc_grA_c::setParam() {
|
||
daNpc_grA_c_Action act = mAction2;
|
||
s16 attnDistance, attnAngle, talkDistance, talkAngle;
|
||
int flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e;
|
||
selectAction();
|
||
|
||
if (!mTwilight && daPy_py_c::checkNowWolf()) {
|
||
flags = 0;
|
||
}
|
||
|
||
if (mAction2 != act) {
|
||
for (int i = 3; i < 3; i++) { // matches debug, no loop?
|
||
mNpcfActorManager[i].initialize();
|
||
}
|
||
}
|
||
if (mTwilight) {
|
||
field_0x145C = 0;
|
||
field_0x1460 = 0;
|
||
if (mType == 9) {
|
||
talkDistance = 0xb;
|
||
talkAngle = 0x4;
|
||
attnDistance = 0xb;
|
||
attnAngle = 0x4;
|
||
} else {
|
||
talkDistance = 0xf;
|
||
talkAngle = 0x6;
|
||
attnDistance = 0xf;
|
||
attnAngle = 0x6;
|
||
}
|
||
} else {
|
||
field_0x145C = 0;
|
||
field_0x1460 = 0;
|
||
talkDistance = GET_HIO(mNpcFParams.talk_distance);
|
||
talkAngle = GET_HIO(mNpcFParams.talk_angle);
|
||
attnDistance = GET_HIO(mNpcFParams.attention_distance);
|
||
attnAngle = GET_HIO(mNpcFParams.attention_angle);
|
||
}
|
||
|
||
if (mType == 5)
|
||
{
|
||
attention_info.distances[fopAc_attn_LOCK_e] = 0x4e;
|
||
attention_info.distances[fopAc_attn_TALK_e] = 0x4e;
|
||
attention_info.distances[fopAc_attn_SPEAK_e] = 0x4d;
|
||
attention_info.flags = fopAc_AttnFlag_UNK_0x800000 | fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e;
|
||
} else {
|
||
if (chkAction(&daNpc_grA_c::waitSpaWater)) {
|
||
talkDistance = 0xa;
|
||
attnDistance = 0xc;
|
||
}
|
||
attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(attnDistance, attnAngle);
|
||
attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
|
||
attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(talkDistance, talkAngle);
|
||
if (field_0x14D8 == 0x1a) {
|
||
attention_info.flags = 0;
|
||
}else{
|
||
attention_info.flags = flags;
|
||
}
|
||
}
|
||
scale.set(GET_HIO(mNpcFParams.scale), GET_HIO(mNpcFParams.scale), GET_HIO(mNpcFParams.scale));
|
||
f32 width;
|
||
if (mType == 2) {
|
||
width = 120.0f;
|
||
} else {
|
||
width = GET_HIO(mNpcFParams.width);
|
||
}
|
||
mAcchCir.SetWallR(width);
|
||
mAcchCir.SetWallH(GET_HIO(mNpcFParams.knee_length));
|
||
if (mType != 6) {
|
||
gravity = GET_HIO(mNpcFParams.gravity);
|
||
}
|
||
}
|
||
|
||
/* 809C0038-809C0298 0017D8 0260+00 1/0 0/0 0/0 .text main__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::main() {
|
||
int a = 0xffff;
|
||
JUT_ASSERT(1367, mpMorf != NULL); // TODO: update "mpMorf" to "mAnm_p"
|
||
if (doEvent() == 0) {
|
||
if (hitChk2(&field_0xC98, TRUE, FALSE)) {
|
||
setDamage(GET_HIO(mNpcFParams.damage_time), 0x17, 0);
|
||
setLookMode(1);
|
||
} else if (mIsDamaged && mDamageTimer == 0) {
|
||
field_0x1472 = 0;
|
||
mIsDamaged = 0;
|
||
}
|
||
mOrderEvtNo = 0;
|
||
if (mAction2) {
|
||
if (mAction == mAction2) {
|
||
(this->*mAction)(0);
|
||
} else {
|
||
setAction(mAction2);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (checkHide()) {
|
||
attention_info.flags = 0;
|
||
}
|
||
if (GET_HIO(mNpcFParams.debug_mode_ON) == 0 &&
|
||
(!dComIfGp_event_runCheck() || (mOrderNewEvt && dComIfGp_getEvent().isOrderOK())))
|
||
{
|
||
u16 j = 1;
|
||
if (mOrderEvtNo != 0) {
|
||
switch (mOrderEvtNo) {
|
||
case 3:
|
||
case 4:
|
||
case 5:
|
||
j = 3;
|
||
}
|
||
eventInfo.setArchiveName(l_resNames[l_evtGetParamList[mOrderEvtNo][1]]);
|
||
}
|
||
orderEvent(field_0x1691, l_evtNames[l_evtGetParamList[mOrderEvtNo][0]], a, 4, 0xff, j);
|
||
}
|
||
if (field_0x9ee != 0) {
|
||
mExpressionMorfOverride = 0.0f;
|
||
mMotionMorfOverride = 0.0f;
|
||
field_0x9ee = 0;
|
||
}
|
||
playExpression();
|
||
playMotion();
|
||
JUT_ASSERT(1487, mpMorf != NULL); // TODO: update "mpMorf" to "mAnm_p"
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C0298-809C02A0 001A38 0008+00 1/0 0/0 0/0 .text ctrlBtk__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::ctrlBtk() {
|
||
return false;
|
||
}
|
||
|
||
/* 809C02A0-809C0948 001A40 06A8+00 1/0 0/0 0/0 .text setAttnPos__11daNpc_grA_cFv */
|
||
void daNpc_grA_c::setAttnPos() {
|
||
static cXyz eyeOffset(15.0f, 25.0f, 0.0f);
|
||
cXyz* attentionPos = NULL;
|
||
int unused = 0;
|
||
cXyz viewVector, offset, o_pos;
|
||
f32 attnOffset = 0.0f;
|
||
if (mOrderEvtNo != 1) {
|
||
attnOffset = GET_HIO(mNpcFParams.attention_offset);
|
||
}
|
||
mDoMtx_stack_c::YrotS(field_0x990);
|
||
cLib_addCalc2(&field_0x984[0], 0.0f, 0.1f, 125.0f);
|
||
cLib_addCalc2(&field_0x984[2], 0.0f, 0.1f, 125.0f);
|
||
for (int i = 0; i < 3; i++) {
|
||
offset.set(0.0f, 0.0f, cM_ssin(field_0x992) * field_0x984[i]);
|
||
mDoMtx_stack_c::multVec(&offset, &o_pos);
|
||
field_0x908[i].x = -o_pos.z;
|
||
field_0x908[i].z = -o_pos.x;
|
||
}
|
||
cLib_chaseS(&field_0x992, 0, 0x555);
|
||
if (mLookMode == 1) {
|
||
for (int i = 0; i < 3; i++) {
|
||
mLookatAngle[i].setall(0);
|
||
}
|
||
}
|
||
J3DModelData* modelData = mpMorf->getModel()->getModelData();
|
||
for (u16 i = 0; i < modelData->getJointNum(); i++) {
|
||
modelData->getJointNodePointer(i)->setCallBack(&daNpc_grA_c::ctrlJointCallBack);
|
||
}
|
||
setMtx();
|
||
setOtherObjMtx();
|
||
lookat();
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4));
|
||
mDoMtx_stack_c::multVecZero(&mHeadPos);
|
||
mDoMtx_stack_c::multVec(&eyeOffset, &eyePos);
|
||
mDoMtx_stack_c::multVec(&eyeOffset, &offset);
|
||
mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &offset);
|
||
mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &offset);
|
||
|
||
attentionPos = mNpcfLookAt.getAttnPos();
|
||
if (attentionPos != NULL) {
|
||
viewVector = *attentionPos - eyePos;
|
||
mEyeAngle.y = -mLookatAngle[2].y - mCurAngle.y;
|
||
mEyeAngle.y += cM_atan2s(viewVector.x, viewVector.z);
|
||
mEyeAngle.x = -cM_atan2s(viewVector.y, viewVector.absXZ());
|
||
} else {
|
||
mEyeAngle.y = 0;
|
||
mEyeAngle.x = 0;
|
||
}
|
||
|
||
if (chkAction(&daNpc_grA_c::moveRock) || field_0x14D8 == 0x1a) {
|
||
attention_info.position.set(current.pos.x, current.pos.y + 300.0f, current.pos.z);
|
||
} else {
|
||
attention_info.position.set(mHeadPos.x, mHeadPos.y + attnOffset, mHeadPos.z);
|
||
}
|
||
|
||
if (!mHide) {
|
||
if (mDamageTimer == 0) {
|
||
field_0xC98.SetTgType(0xd8fbfdff);
|
||
field_0xC98.SetTgSPrm(0x1f);
|
||
field_0xC98.OnTgNoHitMark();
|
||
if (mType == 7) {
|
||
field_0xC98.OnTgNoConHit();
|
||
field_0xC98.OffTgShield();
|
||
}
|
||
} else {
|
||
field_0xC98.SetTgType(0);
|
||
field_0xC98.SetTgSPrm(0);
|
||
}
|
||
if (mType == 10) {
|
||
if (field_0x14D8 == 0x1a) {
|
||
field_0xC98.OnAtSPrmBit(0xc);
|
||
field_0xC98.SetAtSe(dCcD_SE_STONE);
|
||
field_0xC98.SetAtSpl(dCcG_At_Spl_UNK_D);
|
||
field_0xC98.SetAtType(AT_TYPE_CSTATUE_SWING);
|
||
field_0xC98.OnAtSetBit();
|
||
} else {
|
||
field_0xC98.OffAtSetBit();
|
||
}
|
||
}
|
||
f32 width = 0.0f;
|
||
f32 height = GET_HIO(mNpcFParams.height);
|
||
if (mType == 2) {
|
||
width = 120.0f;
|
||
height = 215.0f;
|
||
} else {
|
||
width = GET_HIO(mNpcFParams.width);
|
||
}
|
||
if (chkAction(&daNpc_grA_c::waitSpaWater)) {
|
||
cXyz center(0.0f, 0.0f, -80.0f);
|
||
mDoMtx_stack_c::YrotS(shape_angle.y);
|
||
mDoMtx_stack_c::multVec(¢er, ¢er);
|
||
center += current.pos;
|
||
field_0xC98.SetC(center);
|
||
width = 150.0f;
|
||
height = 150.0f;
|
||
} else {
|
||
field_0xC98.SetC(current.pos);
|
||
}
|
||
field_0xC98.SetCoSPrm(0x79);
|
||
field_0xC98.SetH(height);
|
||
field_0xC98.SetR(width);
|
||
dComIfG_Ccsp()->Set(&field_0xC98);
|
||
}
|
||
field_0xC98.ClrAtHit();
|
||
field_0xC98.ClrTgHit();
|
||
field_0xC98.ClrCoHit();
|
||
}
|
||
|
||
/* 809C0948-809C0CE4 0020E8 039C+00 2/0 0/0 0/0 .text setExpressionAnm__11daNpc_grA_cFib
|
||
*/
|
||
bool daNpc_grA_c::setExpressionAnm(int i_expression, bool i_modify) {
|
||
J3DAnmTransformKey *bck = NULL;
|
||
int attr = 0;
|
||
mAnmFlags &= ~0x1fc0;
|
||
if (l_bckGetParamList[i_expression][0] >= 0) {
|
||
bck = getTrnsfrmKeyAnmP(l_resNames[l_bckGetParamList[i_expression][1]],
|
||
l_bckGetParamList[i_expression][0]);
|
||
}
|
||
bool ret = 0;
|
||
switch (i_expression) {
|
||
case 0x00:
|
||
ret = setExpressionBtp(0x00);
|
||
break;
|
||
case 0x01:
|
||
ret = setExpressionBtp(0x00);
|
||
break;
|
||
case 0x02:
|
||
ret = setExpressionBtp(0x00);
|
||
break;
|
||
case 0x03:
|
||
ret = setExpressionBtp(0x00);
|
||
break;
|
||
case 0x04:
|
||
attr = 2;
|
||
ret = setExpressionBtp(0x00);
|
||
break;
|
||
case 0x05:
|
||
ret = setExpressionBtp(0x01);
|
||
break;
|
||
case 0x06:
|
||
attr = 2;
|
||
ret = setExpressionBtp(0x00);
|
||
break;
|
||
case 0x07:
|
||
ret = setExpressionBtp(0x02);
|
||
break;
|
||
case 0x08:
|
||
attr = 2;
|
||
ret = setExpressionBtp(0x03);
|
||
break;
|
||
case 0x09:
|
||
ret = setExpressionBtp(0x04);
|
||
break;
|
||
case 0x0a:
|
||
attr = 2;
|
||
ret = setExpressionBtp(0x00);
|
||
break;
|
||
case 0x0b:
|
||
ret = setExpressionBtp(0x05);
|
||
break;
|
||
case 0x0c:
|
||
attr = 2;
|
||
ret = setExpressionBtp(0x06);
|
||
break;
|
||
case 0x0d:
|
||
ret = setExpressionBtp(0x07);
|
||
break;
|
||
case 0x0e:
|
||
attr = 2;
|
||
ret = setExpressionBtp(0x08);
|
||
break;
|
||
case 0x0f:
|
||
ret = setExpressionBtp(0x09);
|
||
break;
|
||
case 0x10:
|
||
ret = setExpressionBtp(0x0a);
|
||
break;
|
||
case 0x11:
|
||
attr = 2;
|
||
ret = setExpressionBtp(0x0b);
|
||
break;
|
||
case 0x12:
|
||
ret = setExpressionBtp(0x0c);
|
||
break;
|
||
case 0x13:
|
||
ret = setExpressionBtp(0x0d);
|
||
break;
|
||
case 0x15:
|
||
ret = setExpressionBtp(0x0F);
|
||
break;
|
||
case 0x14:
|
||
ret = setExpressionBtp(0x0E);
|
||
break;
|
||
default:
|
||
bck = NULL;
|
||
}
|
||
if (!ret) {
|
||
return false;
|
||
}
|
||
if (bck == NULL) {
|
||
return true;
|
||
}
|
||
if (setBckAnm(bck, 1.0f, attr, 0, -1, i_modify)) {
|
||
mAnmFlags |= 0x140;
|
||
mExpressionLoops = 0;
|
||
return true;
|
||
}
|
||
OS_REPORT("%s: 表情Bckアニメーションの登録に失敗しました!\n", __FILE__);
|
||
return false;
|
||
}
|
||
|
||
/* 809C0CE4-809C0E18 002484 0134+00 2/0 0/0 0/0 .text setExpressionBtp__11daNpc_grA_cFi
|
||
*/
|
||
bool daNpc_grA_c::setExpressionBtp(int i_expression) {
|
||
J3DAnmTexPattern* bck = NULL;
|
||
int attr = 0;
|
||
mAnmFlags &= ~0xa80;
|
||
if (l_btpGetParamList[i_expression][0] >= 0) {
|
||
bck = getTexPtrnAnmP(l_resNames[l_btpGetParamList[i_expression][1]],
|
||
l_btpGetParamList[i_expression][0]);
|
||
}
|
||
switch(i_expression)
|
||
{
|
||
case 0:
|
||
attr = 2;
|
||
break;
|
||
case 3:
|
||
attr = 2;
|
||
break;
|
||
case 6:
|
||
attr = 2;
|
||
break;
|
||
case 8:
|
||
attr = 2;
|
||
break;
|
||
case 11:
|
||
attr = 2;
|
||
break;
|
||
default:
|
||
bck = NULL;
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
case 5:
|
||
case 7:
|
||
case 9:
|
||
case 10:
|
||
case 12:
|
||
case 13:
|
||
case 14:
|
||
break;
|
||
}
|
||
if (bck == NULL) {
|
||
return true;
|
||
}
|
||
if (setBtpAnm(bck, mpMorf->getModel()->getModelData(), 1.0f, attr)) {
|
||
mAnmFlags |= 0x280;
|
||
if (i_expression == 0) {
|
||
mAnmFlags |= 0x800;
|
||
}
|
||
return true;
|
||
}
|
||
OS_REPORT("%s: 表情Btpアニメーションの登録に失敗しました!\n", __FILE__);
|
||
return false;
|
||
|
||
}
|
||
|
||
/* 809C0E18-809C0E44 0025B8 002C+00 1/0 0/0 0/0 .text setExpression__11daNpc_grA_cFif */
|
||
void daNpc_grA_c::setExpression(int i_expression, f32 i_morfOverride) {
|
||
if (i_expression >= 0 && i_expression < 0x18) {
|
||
mExpression = i_expression;
|
||
mExpressionMorfOverride = i_morfOverride;
|
||
mExpressionPrevPhase = -1;
|
||
mExpressionPhase = 0;
|
||
}
|
||
}
|
||
|
||
/* 809C0E44-809C1018 0025E4 01D4+00 2/0 0/0 0/0 .text setMotionAnm__11daNpc_grA_cFif */
|
||
void daNpc_grA_c::setMotionAnm(int i_motion, f32 i_morf) {
|
||
J3DAnmTransformKey* bck = NULL;
|
||
J3DAnmTextureSRTKey* btk = NULL;
|
||
int btkIndex = 0;
|
||
int attr2 = 2;
|
||
int attr = 2;
|
||
mAnmFlags &= ~0x3f;
|
||
if (l_bckGetParamList[i_motion][0] >= 0) {
|
||
bck = getTrnsfrmKeyAnmP(l_resNames[l_bckGetParamList[i_motion][1]],
|
||
l_bckGetParamList[i_motion][0]);
|
||
}
|
||
switch(i_motion)
|
||
{
|
||
case 25:
|
||
attr2 = 0;
|
||
break;
|
||
case 27:
|
||
case 28:
|
||
attr2 = 0;
|
||
break;
|
||
case 31:
|
||
case 32:
|
||
case 33:
|
||
attr2 = 0;
|
||
break;
|
||
case 35:
|
||
case 37:
|
||
attr2 = 0;
|
||
break;
|
||
case 40:
|
||
attr2 = 0;
|
||
break;
|
||
case 42:
|
||
attr2 = 0;
|
||
break;
|
||
case 44:
|
||
attr2 = 0;
|
||
break;
|
||
case 46:
|
||
attr2 = 0;
|
||
break;
|
||
case 47:
|
||
attr2 = 0;
|
||
break;
|
||
case 49:
|
||
attr2 = 0;
|
||
break;
|
||
case 50:
|
||
attr2 = 0;
|
||
break;
|
||
default:
|
||
bck = NULL;
|
||
btk = NULL;
|
||
case 22:
|
||
case 23:
|
||
case 24:
|
||
case 26:
|
||
case 29:
|
||
case 30:
|
||
case 34:
|
||
case 36:
|
||
case 38:
|
||
case 39:
|
||
case 41:
|
||
case 43:
|
||
case 45:
|
||
case 48:
|
||
break;
|
||
}
|
||
if (l_btkGetParamList[btkIndex][0] >= 0) {
|
||
btk = getTexSRTKeyAnmP(l_resNames[l_btkGetParamList[btkIndex][1]], l_btkGetParamList[btkIndex][0]);
|
||
}
|
||
if (btk != NULL && setBtkAnm(btk, mpMorf->getModel()->getModelData(), 1.0f, attr)) {
|
||
mAnmFlags |= 0x12;
|
||
}
|
||
if (bck != NULL && setMcaMorfAnm(bck, 1.0f, i_morf, attr2, 0, -1)) {
|
||
mAnmFlags |= 0x9;
|
||
mMotionLoops = 0;
|
||
field_0x14D8 = i_motion;
|
||
}
|
||
}
|
||
|
||
/* 809C1018-809C105C 0027B8 0044+00 1/0 0/0 0/0 .text setMotion__11daNpc_grA_cFifi */
|
||
void daNpc_grA_c::setMotion(int i_motion, f32 i_MorfOverride, int param_2) {
|
||
s16 motion = i_motion;
|
||
if ((param_2 != 0 || mMotion != motion) && (i_motion >= 0 && i_motion < 0x1d)) {
|
||
mMotion = motion;
|
||
mMotionMorfOverride = i_MorfOverride;
|
||
mMotionPrevPhase = -1;
|
||
mMotionPhase = 0;
|
||
}
|
||
}
|
||
|
||
/* 809C105C-809C1064 0027FC 0008+00 1/0 0/0 0/0 .text drawDbgInfo__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::drawDbgInfo() {
|
||
#if DEBUG
|
||
if (GET_HIO(mNpcFParams.debug_info_ON) != 0) {
|
||
cXyz o_pos;
|
||
f32 maxSpeakDist = dComIfGp_getAttention()->getDistTable(attention_info.distances[fopAc_attn_SPEAK_e]).mDistMax;
|
||
f32 maxTalkDist = dComIfGp_getAttention()->getDistTable(attention_info.distances[fopAc_attn_TALK_e]).mDistMax;
|
||
s16 ang = cLib_targetAngleX(¤t.pos, &eyePos);
|
||
s16 ang2 = cLib_targetAngleY(¤t.pos, &eyePos);
|
||
|
||
dDbVw_drawCircleOpa(attention_info.position, maxSpeakDist, (GXColor){0, 0xc8, 0, 0xff}, 1,
|
||
12);
|
||
dDbVw_drawCircleOpa(attention_info.position, maxTalkDist, (GXColor){0xc8, 0, 0, 0xff}, 1,
|
||
12);
|
||
|
||
if (GET_HIO(mNpcFParams.fov) != 180.0f) {
|
||
cXyz offset(0.0f, 0.0f, GET_HIO(mNpcFParams.search_distance));
|
||
mDoMtx_stack_c::transS(attention_info.position);
|
||
mDoMtx_stack_c::YrotM(mHeadAngle.y);
|
||
mDoMtx_stack_c::YrotM(cM_deg2s(-GET_HIO(mNpcFParams.fov)));
|
||
mDoMtx_stack_c::multVec(&offset, &o_pos);
|
||
|
||
dDbVw_drawLineOpa(attention_info.position, o_pos, (GXColor){0, 0, 0xc8, 0xff}, 1, 12);
|
||
|
||
mDoMtx_stack_c::transS(attention_info.position);
|
||
mDoMtx_stack_c::YrotM(mHeadAngle.y);
|
||
mDoMtx_stack_c::YrotM(cM_deg2s(GET_HIO(mNpcFParams.fov)));
|
||
mDoMtx_stack_c::multVec(&offset, &o_pos);
|
||
|
||
dDbVw_drawLineOpa(attention_info.position, o_pos, (GXColor){0, 0, 0xc8, 0xff}, 1, 12);
|
||
}
|
||
dDbVw_drawCircleOpa(attention_info.position, GET_HIO(mNpcFParams.search_distance),
|
||
(GXColor){0, 0, 0xc8, 0xff}, 1, 12);
|
||
|
||
dDbVw_drawSphereXlu(eyePos, 18.f, (GXColor){0x80, 0x80, 0x80, 0xA0}, 1);
|
||
|
||
dDbVw_drawSphereXlu(mLookPos, 18.f, (GXColor){0x80, 0x80, 0x80, 0xA0}, 1);
|
||
|
||
int tableidx = getDistTableIdx(field_0x145C, field_0x1460);
|
||
maxSpeakDist = dComIfGp_getAttention()->getDistTable(tableidx).mDistMax;
|
||
|
||
dDbVw_drawCircleOpa(attention_info.position, maxSpeakDist,
|
||
(GXColor){0xc8, 0xc8, 0xc8, 0xff}, 1, 0xc);
|
||
|
||
if (field_0xDD4.getPathInfo() != NULL) {
|
||
field_0xDD4.drawDbgInfoXyz();
|
||
}
|
||
}
|
||
#endif
|
||
return false;
|
||
}
|
||
|
||
/* 809C1064-809C1154 002804 00F0+00 1/0 0/0 0/0 .text drawOtherMdls__11daNpc_grA_cFv */
|
||
void daNpc_grA_c::drawOtherMdls() {
|
||
if (field_0x150C && mpModel) {
|
||
g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr);
|
||
switch (mType) {
|
||
case 7:
|
||
mpModel->setBaseTRMtx(field_0x14DC);
|
||
break;
|
||
case 8:
|
||
case 9:
|
||
case 10:
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(17));
|
||
mDoMtx_stack_c::scaleM(scale);
|
||
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||
J3DModelData* data = mpModel->getModelData();
|
||
fopAcM_setEffectMtx(this, data);
|
||
// fallthrough to match debug
|
||
}
|
||
mDoExt_modelUpdateDL(mpModel);
|
||
dComIfGd_addRealShadow(mShadowKey, mpModel);
|
||
}
|
||
}
|
||
|
||
/* 809C1154-809C1160 0028F4 000C+00 4/4 0/0 0/0 .text getMode__11daNpc_grA_cFv */
|
||
u8 daNpc_grA_c::getMode() {
|
||
return fopAcM_GetParam(this);
|
||
}
|
||
|
||
/* 809C1160-809C116C 002900 000C+00 4/4 0/0 1/1 .text getMode1__11daNpc_grA_cFv */
|
||
u8 daNpc_grA_c::getMode1() {
|
||
return (fopAcM_GetParam(this) & 0xFF00) >> 8;
|
||
}
|
||
|
||
/* 809C116C-809C1238 00290C 00CC+00 2/1 0/0 0/0 .text getTypeFromParam__11daNpc_grA_cFv
|
||
*/
|
||
u8 daNpc_grA_c::getTypeFromParam() {
|
||
u8 v = (fopAcM_GetParam(this) & 0xF0000000) >> 28;
|
||
switch (v) {
|
||
case 0:
|
||
if (mTwilight) {
|
||
return 1;
|
||
} else {
|
||
return 0;
|
||
}
|
||
case 1:
|
||
return 2;
|
||
case 2:
|
||
return 3;
|
||
case 3:
|
||
return 4;
|
||
case 4:
|
||
return 5;
|
||
case 5:
|
||
return 6;
|
||
case 6:
|
||
if (getMode() == 1) {
|
||
if (mTwilight) {
|
||
return 9;
|
||
} else {
|
||
return 8;
|
||
}
|
||
} else {
|
||
return 7;
|
||
}
|
||
case 7:
|
||
return 10;
|
||
case 8:
|
||
return 11;
|
||
default:
|
||
return 12;
|
||
}
|
||
}
|
||
|
||
/* 809C1238-809C1244 0029D8 000C+00 1/1 0/0 0/0 .text getSwBit__11daNpc_grA_cFv */
|
||
u8 daNpc_grA_c::getSwBit() {
|
||
return (fopAcM_GetParam(this) & 0xff0000) >> 16;
|
||
}
|
||
|
||
/* 809C1244-809C13D8 0029E4 0194+00 1/1 0/0 0/0 .text isDelete__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::isDelete() {
|
||
if (mType == 0xc || mType == 0 || mType == 1 || mType == 3 || mType == 4 || mType == 5 ||
|
||
(mType == 6 && daNpcF_chkEvtBit(0x150)) || (mType == 8 && daNpcF_chkEvtBit(0x179)) ||
|
||
mType == 9 || mType == 0xa || mType == 0xb)
|
||
{
|
||
return FALSE;
|
||
}
|
||
if (mType == 2)
|
||
{
|
||
if ((strcmp(dComIfGp_getStartStageName(), "F_SP109") == 0 && !daNpcF_chkEvtBit(0x40)) ||
|
||
(getMode1() == 1 && !daNpcF_chkEvtBit(0x108)))
|
||
{
|
||
return TRUE;
|
||
} else {
|
||
return FALSE;
|
||
}
|
||
}
|
||
if (mType == 7) {
|
||
if (!daNpcF_chkEvtBit(0x67)) {
|
||
return TRUE;
|
||
}
|
||
if (!daNpcF_chkEvtBit(0x179)) {
|
||
return FALSE;
|
||
}
|
||
fopAcM_createItemForBoss(¤t.pos, 0x21, fopAcM_GetRoomNo(this), NULL, NULL, 0.0f, 0.0f,
|
||
0x80);
|
||
return TRUE;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C13D8-809C1990 002B78 05B8+00 1/1 0/0 0/0 .text reset__11daNpc_grA_cFv */
|
||
void daNpc_grA_c::reset() {
|
||
initialize();
|
||
field_0xDD4.initialize();
|
||
if (mType == 5 || mType == 7) {
|
||
if (field_0xDD4.setPathInfo(getPathNoFromParam(), fopAcM_GetRoomNo(this), 0)) {
|
||
field_0xDD4.setRange(100.0f);
|
||
}
|
||
}
|
||
mNpcfLookAt.initialize();
|
||
for (int i = 0; i < 3; i++) {
|
||
mNpcfActorManager[i].initialize();
|
||
}
|
||
mAction2 = NULL;
|
||
mAction = NULL;
|
||
field_0x145C = 0;
|
||
field_0x1460 = 0;
|
||
field_0x1464 = 0;
|
||
field_0x1468 = 0;
|
||
mLookMode = -1;
|
||
field_0x1472 = 0;
|
||
mHide = false;
|
||
field_0x1480 = -1;
|
||
mDoMtx_identity(field_0x14DC);
|
||
field_0x150C = 0;
|
||
current.pos = home.pos;
|
||
old.pos = current.pos;
|
||
current.angle.set(0, home.angle.y, 0);
|
||
old.angle = current.angle;
|
||
shape_angle = current.angle;
|
||
mCurAngle = current.angle;
|
||
mOldAngle = mCurAngle;
|
||
speedF = 0.0f;
|
||
speed.setall(0.0f);
|
||
for (int i = 0; i < 4; i++) {
|
||
if (i == 3) {
|
||
mParticleManager[i].mManager.init(&mAcch, 215.f, 215.f);
|
||
} else {
|
||
mParticleManager[i].mManager.init(&mAcch, 0.f, 0.f);
|
||
}
|
||
}
|
||
field_0x1489 = 0;
|
||
field_0x149E = 0;
|
||
field_0x14D4 = 0.0f;
|
||
field_0x1691 = 0;
|
||
field_0x1486 = 0;
|
||
field_0x1690 = 0;
|
||
field_0x1487 = 0;
|
||
if (mType == 2 && getMode1() == 0) {
|
||
mName = l_myName[1];
|
||
field_0x1488 = 1;
|
||
field_0x1487 = 1;
|
||
} else if (mType == 7) {
|
||
mName = l_myName[0];
|
||
if (strcmp(dComIfGp_getStartStageName(), "F_SP121") == 0 && fopAcM_GetRoomNo(this) == 0 &&
|
||
dComIfGp_getStartStageLayer() == 8 && dComIfGs_getStartPoint() == 8)
|
||
{
|
||
field_0x1488 = 1;
|
||
} else {
|
||
field_0x1488 = 0;
|
||
}
|
||
} else if (mType == 8 || mType == 9) {
|
||
mName = l_myName[0];
|
||
field_0x1488 = 0;
|
||
field_0x150C = 1;
|
||
} else if (mType == 10) {
|
||
mName = l_myName[0];
|
||
if (daNpcF_chkEvtBit(0x187) == 0) {
|
||
field_0x1486 = 0;
|
||
field_0x1488 = 0;
|
||
} else if (!dComIfGs_isSwitch(mSwBit, fopAcM_GetRoomNo(this))) {
|
||
field_0x1486 = 1;
|
||
field_0x1488 = 0;
|
||
} else {
|
||
field_0x1486 = 3;
|
||
field_0x1488 = 1;
|
||
}
|
||
} else {
|
||
mName = l_myName[0];
|
||
if (mType == 3) {
|
||
if (mMode < 6) {
|
||
eventInfo.setIdx(mMode + 3);
|
||
}
|
||
} else if (mType == 4) {
|
||
if (mMode < 2) {
|
||
eventInfo.setIdx(mMode + 1);
|
||
if (daNpcF_chkEvtBit(0x3e) == 0) {
|
||
cXyz offset(0.0f, 0.0f, -150.0f);
|
||
mDoMtx_stack_c::transS(home.pos);
|
||
mDoMtx_stack_c::YrotM(home.angle.y);
|
||
mDoMtx_stack_c::multVec(&offset, &offset);
|
||
parentActorID =
|
||
fopAcM_createChild(0x8b, fopAcM_GetID(this), -1, &offset, fopAcM_GetRoomNo(this),
|
||
¤t.angle, NULL, -1, NULL);
|
||
}
|
||
} else {
|
||
mName = l_myName[2];
|
||
if (dComIfGs_isSwitch(mSwBit, fopAcM_GetRoomNo(this)) == 0) {
|
||
cXyz a(0.0f, 0.0f, -150.0f);
|
||
mDoMtx_stack_c::transS(home.pos);
|
||
mDoMtx_stack_c::YrotM(home.angle.y);
|
||
mDoMtx_stack_c::multVec(&a, &a);
|
||
parentActorID =
|
||
fopAcM_createChild(0x8b, fopAcM_GetID(this), mSwBit, &a,
|
||
fopAcM_GetRoomNo(this), ¤t.angle, NULL, -1, NULL);
|
||
}
|
||
}
|
||
} else if (mType == 6 ) {
|
||
if (mMode != 0) {
|
||
field_0x1486 = 0;
|
||
} else {
|
||
field_0x1486 = 1;
|
||
}
|
||
}
|
||
field_0x1488 = 0;
|
||
}
|
||
field_0x1692 = field_0x1693 = 0;
|
||
field_0x1694 = 0;
|
||
for (int i = 0; i < 3; i++) {
|
||
mParticleID[i] = -1;
|
||
}
|
||
field_0x151C = -1;
|
||
field_0x9ee = 1;
|
||
}
|
||
|
||
/* 809C1990-809C2080 003130 06F0+00 1/1 0/0 0/0 .text playExpression__11daNpc_grA_cFv */
|
||
void daNpc_grA_c::playExpression() {
|
||
daNpcF_anmPlayData dat0 = {1, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat0_ = {0, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat0[] = {&dat0, &dat0_};
|
||
|
||
daNpcF_anmPlayData dat1 = {2, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat1_ = {0, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat1[] = {&dat1, &dat1_};
|
||
|
||
daNpcF_anmPlayData dat2 = {7, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat2_ = {6, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat2[] = {&dat2, &dat2_ };
|
||
|
||
daNpcF_anmPlayData dat3 = {5, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat3_ = {4, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat3[] = {&dat3, &dat3_};
|
||
|
||
daNpcF_anmPlayData dat5 = {15, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat5_ = {12, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat5[] = {&dat5, &dat5_};
|
||
|
||
daNpcF_anmPlayData dat6 = {13, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat6_ = {14, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat6[] = {&dat6, &dat6_};
|
||
|
||
daNpcF_anmPlayData dat7 = {0x13, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat7_ = {0x17, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat7[] = {&dat7, &dat7_};
|
||
|
||
daNpcF_anmPlayData dat8 = {0x14, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat8_ = {0x17, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat8[] = {&dat8, &dat8_};
|
||
|
||
daNpcF_anmPlayData dat9 = {0x15, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat9_ = {0xe, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat9[] = {&dat9, &dat9_};
|
||
|
||
daNpcF_anmPlayData dat11 = {8, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat11[] = {&dat11};
|
||
|
||
daNpcF_anmPlayData dat12 = {9, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat12_ = {8, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat12[] = {&dat12, &dat12_};
|
||
|
||
daNpcF_anmPlayData dat13 = {10, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat13[] = {&dat13};
|
||
|
||
daNpcF_anmPlayData dat14 = {0xb, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat14_ = {0xa, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat14[] = {&dat14, &dat14_};
|
||
|
||
daNpcF_anmPlayData dat15 = {6, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat15[] = {&dat15};
|
||
|
||
daNpcF_anmPlayData dat16 = {4, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat16[] = {&dat16};
|
||
|
||
daNpcF_anmPlayData dat17 = {0xc, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat17[] = {&dat17};
|
||
|
||
daNpcF_anmPlayData dat18 = {0xe, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat18[] = {&dat18};
|
||
|
||
daNpcF_anmPlayData dat19 = {16, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat19[] = {&dat19};
|
||
|
||
daNpcF_anmPlayData dat20 = {17, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat20[] = {&dat20};
|
||
|
||
daNpcF_anmPlayData dat21 = {18, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat21_ = {0xe, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat21[] = {&dat21, &dat21_};
|
||
|
||
daNpcF_anmPlayData dat22 = {12, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat22[] = {&dat22};
|
||
|
||
daNpcF_anmPlayData dat23 = {0, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat23[] = {&dat23};
|
||
|
||
daNpcF_anmPlayData** ppDat[24] = {
|
||
pDat0,
|
||
pDat1,
|
||
pDat2,
|
||
pDat3,
|
||
NULL,
|
||
pDat5,
|
||
pDat6,
|
||
pDat7,
|
||
pDat8,
|
||
pDat9,
|
||
NULL,
|
||
pDat11,
|
||
pDat12,
|
||
pDat13,
|
||
pDat14,
|
||
pDat15,
|
||
pDat16,
|
||
pDat17,
|
||
pDat18,
|
||
pDat19,
|
||
pDat20,
|
||
pDat21,
|
||
pDat22,
|
||
pDat23,
|
||
};
|
||
|
||
if (mExpression >= 0 && mExpression < 24) {
|
||
playExpressionAnm(ppDat);
|
||
}
|
||
}
|
||
|
||
/* 809C2080-809C28BC 003820 083C+00 1/1 0/0 0/0 .text playMotion__11daNpc_grA_cFv */
|
||
void daNpc_grA_c::playMotion() {
|
||
daNpcF_anmPlayData dat0 = {0x16, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat0[] = {&dat0};
|
||
|
||
daNpcF_anmPlayData dat1 = {0x18, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat1[] = {&dat1};
|
||
|
||
daNpcF_anmPlayData dat2 = {0x27, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat2[] = {&dat2};
|
||
|
||
daNpcF_anmPlayData dat3 = {0x1D, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat3_ = {0x16, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat3[] = {&dat3, &dat3_};
|
||
|
||
daNpcF_anmPlayData dat4 = {0x1e, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat4_ = {0x16, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat4[] = {&dat4, &dat4_};
|
||
|
||
daNpcF_anmPlayData dat5 = {0x17, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat5[] = {&dat5};
|
||
|
||
daNpcF_anmPlayData dat6 = {0x28, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat6_ = {0x29, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat6[] = {&dat6, &dat6_};
|
||
|
||
daNpcF_anmPlayData dat7 = {0x29, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat7[] = {&dat7};
|
||
|
||
daNpcF_anmPlayData dat8 = {0x2a, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat8_ = {0x2b, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat8[] = {&dat8, &dat8_};
|
||
|
||
daNpcF_anmPlayData dat9 = {0x2b, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat9[] = {&dat9};
|
||
|
||
daNpcF_anmPlayData dat10 = {0x2f, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat10_ = {0x16, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat10[] = {&dat10, &dat10_};
|
||
|
||
daNpcF_anmPlayData dat11 = {0x22, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat11[] = {&dat11};
|
||
|
||
daNpcF_anmPlayData dat12 = {0x23, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat12_ = {0x22, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat12[] = {&dat12, &dat12_};
|
||
|
||
daNpcF_anmPlayData dat13 = {0x24, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat13[] = {&dat13};
|
||
|
||
daNpcF_anmPlayData dat14 = {0x25, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat14_ = {0x24, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat14[] = {&dat14, &dat14_};
|
||
|
||
daNpcF_anmPlayData dat15 = {0x32, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat15_ = {0x30, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat15[] = {&dat15, &dat15_};
|
||
|
||
daNpcF_anmPlayData dat16 = {0x30, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat16[] = {&dat16};
|
||
|
||
daNpcF_anmPlayData dat17 = {0x31, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat17_ = {0x30, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat17[] = {&dat17, &dat17_};
|
||
|
||
daNpcF_anmPlayData dat18 = {0x1b, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat18[] = {&dat18};
|
||
|
||
daNpcF_anmPlayData dat19 = {0x1a, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat19[] = {&dat19};
|
||
|
||
daNpcF_anmPlayData dat20 = {0x19, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat20_ = {0x16, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat20[] = {&dat20, &dat20_};
|
||
|
||
daNpcF_anmPlayData dat21 = {0x1f, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat21_ = {0x16, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat21[] = {&dat21, &dat21_};
|
||
|
||
daNpcF_anmPlayData dat22 = {0x1c, 4.0f, 0};
|
||
daNpcF_anmPlayData* pDat22[] = {&dat22};
|
||
|
||
daNpcF_anmPlayData dat23 = {0x20, 2.0f, 0};
|
||
daNpcF_anmPlayData* pDat23[] = {&dat23};
|
||
|
||
daNpcF_anmPlayData dat24 = {0x21, 2.0f, 0};
|
||
daNpcF_anmPlayData* pDat24[] = {&dat24};
|
||
|
||
daNpcF_anmPlayData dat25 = {0x2c, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat25[] = {&dat25};
|
||
|
||
daNpcF_anmPlayData dat26 = {0x2d, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat26[] = {&dat26};
|
||
|
||
daNpcF_anmPlayData dat27 = {0x2e, GET_HIO(mNpcFParams.morf_frame), 1};
|
||
daNpcF_anmPlayData dat27_ = {0x29, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat27[] = {&dat27, &dat27_};
|
||
|
||
daNpcF_anmPlayData dat28 = {38, GET_HIO(mNpcFParams.morf_frame), 0};
|
||
daNpcF_anmPlayData* pDat28[] = {&dat28};
|
||
|
||
daNpcF_anmPlayData** ppDat[29] = {
|
||
pDat0,
|
||
pDat1,
|
||
pDat2,
|
||
pDat3,
|
||
pDat4,
|
||
pDat5,
|
||
pDat6,
|
||
pDat7,
|
||
pDat8,
|
||
pDat9,
|
||
pDat10,
|
||
pDat11,
|
||
pDat12,
|
||
pDat13,
|
||
pDat14,
|
||
pDat15,
|
||
pDat16,
|
||
pDat17,
|
||
pDat18,
|
||
pDat19,
|
||
pDat20,
|
||
pDat21,
|
||
pDat22,
|
||
pDat23,
|
||
pDat24,
|
||
pDat25,
|
||
pDat26,
|
||
pDat27,
|
||
pDat28,
|
||
};
|
||
|
||
if (mMotion >= 0 && mMotion < 29) {
|
||
playMotionAnm(ppDat);
|
||
}
|
||
}
|
||
|
||
/* 809C28BC-809C28E8 00405C 002C+00 4/4 0/0 0/0 .text
|
||
* chkAction__11daNpc_grA_cFM11daNpc_grA_cFPCvPvPv_i */
|
||
BOOL daNpc_grA_c::chkAction(daNpc_grA_c_Action i_action) {
|
||
return mAction == i_action;
|
||
}
|
||
|
||
/* 809C28E8-809C2990 004088 00A8+00 2/2 0/0 0/0 .text
|
||
* setAction__11daNpc_grA_cFM11daNpc_grA_cFPCvPvPv_i */
|
||
BOOL daNpc_grA_c::setAction(daNpc_grA_c_Action i_action) {
|
||
field_0x1472 = 3;
|
||
if (mAction) {
|
||
(this->*mAction)(NULL);
|
||
}
|
||
field_0x1472 = 0;
|
||
mAction = i_action;
|
||
if (mAction) {
|
||
(this->*mAction)(NULL);
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C2990-809C2C3C 004130 02AC+00 2/1 0/0 0/0 .text selectAction__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::selectAction() {
|
||
mAction2 = NULL;
|
||
if (GET_HIO(mNpcFParams.debug_mode_ON)) {
|
||
mAction2 = &daNpc_grA_c::test;
|
||
} else {
|
||
switch (mType) {
|
||
case 2:
|
||
mAction2 = &daNpc_grA_c::spaWarm;
|
||
break;
|
||
case 3:
|
||
mAction2 = &daNpc_grA_c::waitCheer;
|
||
break;
|
||
case 4:
|
||
mAction2 = &daNpc_grA_c::waitGate;
|
||
break;
|
||
case 5:
|
||
mAction2 = &daNpc_grA_c::waitKickOut;
|
||
break;
|
||
case 6:
|
||
if (field_0x1486 == 0) {
|
||
mAction2 = &daNpc_grA_c::wait;
|
||
} else {
|
||
mAction2 = &daNpc_grA_c::moveRock;
|
||
}
|
||
break;
|
||
case 7:
|
||
mAction2 = &daNpc_grA_c::waitSpaWater;
|
||
break;
|
||
case 8:
|
||
mAction2 = &daNpc_grA_c::waitSpaBuyer;
|
||
break;
|
||
case 9:
|
||
mAction2 = &daNpc_grA_c::waitSpaBuyerTW;
|
||
break;
|
||
case 10:
|
||
switch (field_0x1486) {
|
||
case 0:
|
||
mAction2 = &daNpc_grA_c::beforeCrashWait;
|
||
break;
|
||
case 1:
|
||
mAction2 = &daNpc_grA_c::crashRoll;
|
||
break;
|
||
case 2:
|
||
mAction2 = &daNpc_grA_c::crashRollWait;
|
||
break;
|
||
case 3:
|
||
mAction2 = &daNpc_grA_c::crashedWait;
|
||
break;
|
||
}
|
||
break;
|
||
case 11:
|
||
if (mMode == 1) {
|
||
mAction2 = &daNpc_grA_c::waitBuyer;
|
||
} else {
|
||
mAction2 = &daNpc_grA_c::wait;
|
||
}
|
||
break;
|
||
default:
|
||
if (mTwilight) {
|
||
mAction2 = &daNpc_grA_c::waitTW;
|
||
} else {
|
||
mAction2 = &daNpc_grA_c::wait;
|
||
}
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
enum Event_Cut_Nums {
|
||
/* 0x2 */ NUM_EVT_CUTS_e = 0xc,
|
||
};
|
||
|
||
/* 809C2C3C-809C3070 0043DC 0434+00 1/1 0/0 0/0 .text doEvent__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::doEvent() {
|
||
dEvent_manager_c* manager = NULL;
|
||
BOOL ret = FALSE;
|
||
#if VERSION != VERSION_SHIELD_DEBUG
|
||
// TODO: gameInfo fake match to force reuse of pointer
|
||
dComIfG_play_c* play = &g_dComIfG_gameInfo.play;
|
||
if (play->getEvent().runCheck())
|
||
#else
|
||
if (dComIfGp_event_runCheck())
|
||
#endif
|
||
{
|
||
manager = &dComIfGp_getEventManager();
|
||
if (field_0x1691 == 0) {
|
||
mOrderNewEvt = 0;
|
||
} else {
|
||
mOrderNewEvt = 1;
|
||
}
|
||
if (eventInfo.checkCommandTalk()) {
|
||
if (chkAction(&daNpc_grA_c::talk)) {
|
||
(this->*mAction)(NULL);
|
||
} else if (dComIfGp_event_chkTalkXY() == FALSE || dComIfGp_evmng_ChkPresentEnd()) {
|
||
if (field_0x1487 == 0) {
|
||
setAction(&daNpc_grA_c::talk);
|
||
} else {
|
||
mOrderEvtNo = 1;
|
||
changeEvent(l_resNames[l_evtGetParamList[mOrderEvtNo][1]],
|
||
l_evtNames[l_evtGetParamList[mOrderEvtNo][0]], 2, -1);
|
||
}
|
||
}
|
||
ret = TRUE;
|
||
} else {
|
||
if (field_0x1480 != fpcM_ERROR_PROCESS_ID_e) {
|
||
dComIfGp_event_setItemPartnerId(field_0x1480);
|
||
field_0x1480 = -1;
|
||
}
|
||
int id;
|
||
if (eventInfo.getIdx() > 0) {
|
||
id = manager->getMyStaffId(mName, this, 0);
|
||
} else {
|
||
id = manager->getMyStaffId(mName, NULL, 0);
|
||
}
|
||
if (id != -1) {
|
||
mStaffID = id;
|
||
int evtCutNo =
|
||
manager->getMyActIdx(id, mEvtCutNameList, ARRAY_SIZE(mEvtCutNameList), FALSE, FALSE);
|
||
JUT_ASSERT(3154, (0 <= evtCutNo) && (evtCutNo < NUM_EVT_CUTS_e));
|
||
JUT_ASSERT(3155, NULL != mEvtCutList[evtCutNo]);
|
||
if ((this->*(mEvtCutList[evtCutNo]))(id)) {
|
||
manager->cutEnd(id);
|
||
}
|
||
ret = TRUE;
|
||
}
|
||
if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && manager->endCheck(mEventIdx)) {
|
||
switch (mOrderEvtNo) {
|
||
case 5:
|
||
#if VERSION != VERSION_SHIELD_DEBUG
|
||
play->getEvent().reset();
|
||
#else
|
||
dComIfGp_event_reset();
|
||
#endif
|
||
mOrderEvtNo = 0;
|
||
mEventIdx = -1;
|
||
field_0x1693 = field_0x1692 = 0;
|
||
fpcM_Search(s_subCarry, this);
|
||
break;
|
||
case 6:
|
||
#if VERSION != VERSION_SHIELD_DEBUG
|
||
play->getEvent().reset();
|
||
#else
|
||
dComIfGp_event_reset();
|
||
#endif
|
||
mOrderEvtNo = 0;
|
||
mEventIdx = -1;
|
||
break;
|
||
case 7:
|
||
#if VERSION != VERSION_SHIELD_DEBUG
|
||
play->getEvent().reset();
|
||
#else
|
||
dComIfGp_event_reset();
|
||
#endif
|
||
mOrderEvtNo = 0;
|
||
mEventIdx = -1;
|
||
fopAcM_delete(this);
|
||
break;
|
||
default:
|
||
#if VERSION != VERSION_SHIELD_DEBUG
|
||
play->getEvent().reset();
|
||
#else
|
||
dComIfGp_event_reset();
|
||
#endif
|
||
mOrderEvtNo = 0;
|
||
mEventIdx = -1;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
int expression, motion;
|
||
int timer = mMsgTimer;
|
||
if (ctrlMsgAnm(expression, motion, this, FALSE)) {
|
||
if (!field_0x9eb) {
|
||
setExpression(expression, -1.0f);
|
||
setMotion(motion, -1.0f, 0);
|
||
}
|
||
} else if (timer && !field_0x9eb) {
|
||
setExpressionTalkAfter();
|
||
}
|
||
|
||
switch (mExpression) {
|
||
case 3:
|
||
case 5:
|
||
case 6:
|
||
case 7:
|
||
case 8:
|
||
mAnmFlags &= ~0x1000;
|
||
}
|
||
} else {
|
||
mMsgTimer = 0;
|
||
if (mStaffID != -1) {
|
||
mAction = NULL;
|
||
mStaffID = -1;
|
||
}
|
||
mMsgTimer = 0;
|
||
}
|
||
|
||
return ret;
|
||
}
|
||
|
||
/* 809C3070-809C3094 004810 0024+00 29/29 0/0 0/0 .text setLookMode__11daNpc_grA_cFi */
|
||
void daNpc_grA_c::setLookMode(int i_lookMode) {
|
||
if (i_lookMode >= 0 && i_lookMode < 9 && i_lookMode != mLookMode) {
|
||
mLookMode = i_lookMode;
|
||
}
|
||
}
|
||
|
||
/* 809C3094-809C3424 004834 0390+00 1/1 0/0 0/0 .text lookat__11daNpc_grA_cFv */
|
||
void daNpc_grA_c::lookat() {
|
||
fopAc_ac_c* player = NULL;
|
||
J3DModel* model = mpMorf->getModel();
|
||
BOOL r27 = FALSE;
|
||
f32 bodyAngleXMin = GET_HIO(mNpcFParams.body_angleX_min);
|
||
f32 bodyAngleXMax = GET_HIO(mNpcFParams.body_angleX_max);
|
||
f32 bodyAngleYMin = GET_HIO(mNpcFParams.body_angleY_min);
|
||
f32 bodyAngleYMax = GET_HIO(mNpcFParams.body_angleY_max);
|
||
f32 headAngleXMin = GET_HIO(mNpcFParams.head_angleX_min);
|
||
f32 headAngleXMan = GET_HIO(mNpcFParams.head_angleX_max);
|
||
f32 headAnglyMin = GET_HIO(mNpcFParams.head_angleY_min);
|
||
f32 headAngleYMax = GET_HIO(mNpcFParams.head_angleY_max);
|
||
s16 diffInAngle = mCurAngle.y - mOldAngle.y;
|
||
cXyz pLookPositions[] = {
|
||
mLookatPos[0],
|
||
mLookatPos[1],
|
||
mLookatPos[2],
|
||
};
|
||
csXyz* pLookAngles[] = {
|
||
&mLookatAngle[0],
|
||
&mLookatAngle[1],
|
||
&mLookatAngle[2],
|
||
};
|
||
cXyz unused;
|
||
switch (mLookMode) {
|
||
case 1:
|
||
r27 = TRUE;
|
||
break;
|
||
case 2:
|
||
case 3:
|
||
player = daPy_getPlayerActorClass();
|
||
if (mLookMode == 3) {
|
||
headAnglyMin = -80.0f;
|
||
headAngleYMax = 80.0f;
|
||
}
|
||
break;
|
||
case 5:
|
||
player = mNpcfActorManager[2].getActorP();
|
||
break;
|
||
case 0:
|
||
case 6:
|
||
case 7:
|
||
case 8:
|
||
break;
|
||
}
|
||
if (player != NULL) {
|
||
mLookPos = player->attention_info.position;
|
||
if (mLookMode != 2 && mLookMode != 3 && mLookMode != 4) {
|
||
mLookPos.y -= 40.0f;
|
||
}
|
||
mNpcfLookAt.setAttnPos(&mLookPos);
|
||
} else if (mLookMode == 6) {
|
||
mLookPos = field_0x14A0;
|
||
mLookPos.y += 160.0f;
|
||
mNpcfLookAt.setAttnPos(&mLookPos);
|
||
} else if (mLookMode == 7) {
|
||
cXyz f(0.0f, 0.0f, 300.0f);
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4));
|
||
mDoMtx_stack_c::multVec(&f, &mLookPos);
|
||
mNpcfLookAt.setAttnPos(&mLookPos);
|
||
} else if (mLookMode == 8) {
|
||
cXyz f(0.0f, 0.0f, -300.0f);
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4));
|
||
mDoMtx_stack_c::multVec(&f, &mLookPos);
|
||
mNpcfLookAt.setAttnPos(&mLookPos);
|
||
} else {
|
||
mNpcfLookAt.setAttnPos(NULL);
|
||
}
|
||
mNpcfLookAt.setParam(bodyAngleXMin, bodyAngleXMax, bodyAngleYMin, bodyAngleYMax, 0.0f, 0.0f, 0.0f, 0.0f, headAngleXMin, headAngleXMan, headAnglyMin, headAngleYMax,
|
||
mCurAngle.y, pLookPositions);
|
||
|
||
mNpcfLookAt.calc(this, model->getBaseTRMtx(), pLookAngles, r27, diffInAngle, FALSE);
|
||
}
|
||
|
||
/* 809C3424-809C35D0 004BC4 01AC+00 9/9 0/0 0/0 .text chkFindPlayer__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::chkFindPlayer() {
|
||
BOOL ret = FALSE;
|
||
s16 searchAngle = fopAcM_searchPlayerAngleY(this) - current.angle.y;
|
||
if (abs(searchAngle) < 0x3c00) {
|
||
if (mType == 8) {
|
||
if (mNpcfActorManager[0].getActorP() == NULL) {
|
||
ret = chkActorInAttnArea(daPy_getPlayerActorClass(), this, getDistTableIdx(8, 6));
|
||
} else {
|
||
ret = chkActorInAttnArea(daPy_getPlayerActorClass(), this, getDistTableIdx(10, 6));
|
||
}
|
||
} else {
|
||
if (mNpcfActorManager[0].getActorP() == NULL) {
|
||
ret = chkActorInAttnArea(daPy_getPlayerActorClass(), this, getDistTableIdx(10, 6));
|
||
} else {
|
||
ret = chkActorInAttnArea(daPy_getPlayerActorClass(), this, getDistTableIdx(12, 6));
|
||
}
|
||
}
|
||
} else {
|
||
if (mNpcfActorManager[0].getActorP() == NULL) {
|
||
ret = chkPlayerInSpeakArea(this);
|
||
} else {
|
||
ret = chkPlayerInTalkArea(this);
|
||
}
|
||
}
|
||
|
||
if (ret) {
|
||
mNpcfActorManager[0].entry(daPy_getPlayerActorClass());
|
||
} else {
|
||
mNpcfActorManager[0].remove();
|
||
}
|
||
return ret;
|
||
}
|
||
|
||
/* 809C35D0-809C36AC 004D70 00DC+00 2/1 0/0 0/0 .text setExpressionTalkAfter__11daNpc_grA_cFv */
|
||
void daNpc_grA_c::setExpressionTalkAfter() {
|
||
switch (mExpression) {
|
||
case 5:
|
||
setExpression(0x11, -1.0f);
|
||
break;
|
||
case 9:
|
||
setExpression(0x12, -1.0f);
|
||
break;
|
||
case 2:
|
||
setExpression(0xf, -1.0f);
|
||
break;
|
||
case 3:
|
||
setExpression(0x10, -1.0f);
|
||
break;
|
||
case 6:
|
||
break;
|
||
default:
|
||
setExpression(0x17, -1.0f);
|
||
break;
|
||
}
|
||
}
|
||
|
||
/* 809C36AC-809C389C 004E4C 01F0+00 1/1 0/0 0/0 .text setPrtcl__11daNpc_grA_cFv */
|
||
BOOL daNpc_grA_c::setPrtcl() {
|
||
JPABaseEmitter* particleEmitter = NULL;
|
||
int sp20 = 0;
|
||
int sp1C = 0;
|
||
cXyz* sp18 = NULL;
|
||
cXyz c(2.0f, 2.0f, 2.0f);
|
||
for (int i = 0; i < 4; i++) {
|
||
if (i == 0 || i == 1 || i == 2) {
|
||
sp20 = 1;
|
||
} else if (i == 3 && mType == 2) {
|
||
sp20 = 1;
|
||
sp1C = 0x40002;
|
||
mParticleManager[i].mPos = current.pos;
|
||
sp18 = &c;
|
||
} else {
|
||
sp20 = 0;
|
||
}
|
||
|
||
mParticleManager[i].mManager.setEffectCenter(
|
||
&tevStr, &mParticleManager[i].mPos, sp20, sp1C,
|
||
(mParticleManager[i].field_0x0 == 1 ? &mParticleManager[i].mPos : NULL),
|
||
(mParticleManager[i].field_0x0 == 1 ? &mParticleManager[i].mAngle : NULL), sp18,
|
||
fopAcM_GetRoomNo(this), 0.0f, speedF);
|
||
if (mParticleManager[i].field_0x0 != 0) {
|
||
particleEmitter = mParticleManager[i].mManager.getCenterEmitter(0, 0);
|
||
if (particleEmitter != NULL) {
|
||
switch (i) {
|
||
case 0: {
|
||
mParticleManager[i].mScale.set(3.f, 3.f, 3.f);
|
||
particleEmitter->setGlobalParticleScale(mParticleManager[i].mScale);
|
||
particleEmitter->setGlobalAlpha(0x40);
|
||
} break;
|
||
case 1:
|
||
case 2:
|
||
mParticleManager[i].mScale.set(2.f, 2.f, 2.f);
|
||
particleEmitter->setGlobalParticleScale(mParticleManager[i].mScale);
|
||
particleEmitter->setGlobalAlpha(0x40);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
mParticleManager[i].field_0x0 = 0;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* ############################################################################################## */
|
||
/* 809CA42C-809CA434 000694 0006+02 0/1 0/0 0/0 .rodata l_prticles_id$6368 */
|
||
|
||
/* 809C389C-809C3A54 00503C 01B8+00 5/5 0/0 0/0 .text setRollPrtcl__11daNpc_grA_cFRC4cXyzf */
|
||
void daNpc_grA_c::setRollPrtcl(cXyz const& i_pos, f32 i_scale) {
|
||
static u16 const l_prticles_id[] = {
|
||
0x83B5,
|
||
0x83B6,
|
||
0x83B7,
|
||
};
|
||
JPABaseEmitter* particleEmitter = NULL;
|
||
cXyz pos(i_pos);
|
||
cXyz scale(i_scale, i_scale, i_scale);
|
||
for (int i = 0; i < 3; i++) {
|
||
if (i == 0) {
|
||
mParticleID[i] =
|
||
dComIfGp_particle_set(mParticleID[i], l_prticles_id[i], &pos, &tevStr,
|
||
¤t.angle, &scale, 0xff, NULL, -1, NULL, NULL, NULL);
|
||
} else {
|
||
mParticleID[i] =
|
||
dComIfGp_particle_setPolyColor(mParticleID[i], l_prticles_id[i], mAcch.m_gnd, &pos,
|
||
&tevStr, ¤t.angle, &scale, 0, 0, -1, 0);
|
||
}
|
||
particleEmitter = dComIfGp_particle_getEmitter(mParticleID[i]);
|
||
if (particleEmitter != NULL) {
|
||
particleEmitter->setGlobalTranslation(pos.x, pos.y, pos.z);
|
||
JGeometry::TVec3<float> f;
|
||
cXyz globalScale;
|
||
particleEmitter->getGlobalDynamicsScale(&f);
|
||
globalScale.x = f.x;
|
||
globalScale.y = f.y;
|
||
globalScale.z = f.z;
|
||
cLib_chasePos(&globalScale, scale, 0.07f);
|
||
particleEmitter->setGlobalScale(globalScale);
|
||
}
|
||
}
|
||
}
|
||
|
||
/* 809CAF08-809CAF28 0008F4 0020+00 1/1 0/0 0/0 .data l_offsetHeight */
|
||
static u8 l_offsetHeight[32] = {
|
||
0xB6, 0xB6, 0xBA, 0xBE, 0xC6, 0xCE, 0xCE, 0xCE, 0xCA, 0xCA, 0xC6, 0xC2, 0xBE, 0xBA, 0xB6, 0xB6,
|
||
0xBA, 0xBA, 0xBE, 0xC6, 0xCA, 0xCE, 0xD1, 0xCE, 0xC6, 0xBA, 0xCA, 0xCE, 0xCA, 0xBE, 0xB6, 0xB6,
|
||
};
|
||
|
||
/* 809C3A54-809C3B28 0051F4 00D4+00 1/1 0/0 0/0 .text setOtherObjMtx__11daNpc_grA_cFv */
|
||
void daNpc_grA_c::setOtherObjMtx() {
|
||
if (field_0x150C != 0) {
|
||
switch (mType) {
|
||
case 7:
|
||
cXyz pos = current.pos;
|
||
pos.y += l_offsetHeight[(u32)mpMorf->getFrame() % 0x1f]; // maybe meant to be & 0x1f
|
||
mDoMtx_stack_c::transS(pos);
|
||
mDoMtx_stack_c::ZXYrotM(mCurAngle);
|
||
mDoMtx_stack_c::scaleM(scale);
|
||
mDoMtx_copy(mDoMtx_stack_c::get(), field_0x14DC);
|
||
}
|
||
}
|
||
}
|
||
|
||
/* 809C3B28-809C3D78 0052C8 0250+00 1/0 0/0 0/0 .text ECut_talkSpa__11daNpc_grA_cFi */
|
||
BOOL daNpc_grA_c::ECut_talkSpa(int i_staffID) {
|
||
dEvent_manager_c& manager = dComIfGp_getEventManager();
|
||
int unusedr26 = 0;
|
||
daPy_py_c* r25 = daPy_getPlayerActorClass();
|
||
BOOL r30 = FALSE;
|
||
int* intp = NULL;
|
||
int r28 = -1;
|
||
int unusedr24 = 0;
|
||
fopAc_ac_c* arr[2] = {this, mNpcfActorManager[2].getActorP()};
|
||
intp = dComIfGp_evmng_getMyIntegerP(i_staffID, "prm");
|
||
if (intp != NULL) {
|
||
r28 = *intp;
|
||
}
|
||
if (manager.getIsAddvance(i_staffID)) {
|
||
switch (r28) {
|
||
case 0:
|
||
((daNpcT_c*)mNpcfActorManager[2].getActorP())->mJntAnm.lookActor(this, 0.0f, FALSE);
|
||
setLookMode(5);
|
||
break;
|
||
case 1:
|
||
initTalk(field_0x146C, arr);
|
||
break;
|
||
case 2:
|
||
if (daNpcF_chkEvtBit(6) && daNpcF_chkEvtBit(0x3e) == FALSE) {
|
||
mEventTimer = 0x3c;
|
||
setLookMode(2);
|
||
} else {
|
||
mEventTimer = 0;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
switch (r28) {
|
||
case 0:
|
||
r30 = TRUE;
|
||
break;
|
||
case 1:
|
||
if (talkProc(NULL, 0, arr)) {
|
||
r30 = TRUE;
|
||
}
|
||
break;
|
||
case 2:
|
||
if (!cLib_calcTimer(&mEventTimer)) {
|
||
r30 = TRUE;
|
||
setLookMode(5);
|
||
}
|
||
break;
|
||
default:
|
||
r30 = 1;
|
||
break;
|
||
}
|
||
return r30;
|
||
}
|
||
|
||
/* 809C3D78-809C45B0 005518 0838+00 1/0 0/0 0/0 .text ECut_grDSRoll__11daNpc_grA_cFi */
|
||
BOOL daNpc_grA_c::ECut_grDSRoll(int i_staffID) {
|
||
dEvent_manager_c& sp34 = dComIfGp_getEventManager();
|
||
int sp30 = 0;
|
||
daPy_py_c* sp2c = daPy_getPlayerActorClass();
|
||
int r28 = 0;
|
||
int* sp28 = NULL;
|
||
int sp24 = -1;
|
||
int sp20 = 0;
|
||
|
||
sp28 = dComIfGp_evmng_getMyIntegerP(i_staffID, "prm");
|
||
if (sp28 != NULL) {
|
||
sp24 = *sp28;
|
||
}
|
||
|
||
if (sp34.getIsAddvance(i_staffID)) {
|
||
switch (sp24) {
|
||
case 0xa:
|
||
mTurnMode = 0;
|
||
break;
|
||
case 0x14:
|
||
mCreature.startCreatureVoice(Z2SE_GORON_V_SMR_CAUTION, -1);
|
||
break;
|
||
case 0x1e:
|
||
setMotion(0x12, -1.0f, 0);
|
||
setLookMode(0);
|
||
mCreature.startCreatureVoice(Z2SE_GORON_V_SMR_TO_STONE, -1);
|
||
break;
|
||
case 0x28:
|
||
setMotion(0x13, -1.0f, 0);
|
||
setLookMode(0);
|
||
field_0x14D4 = 0.1f;
|
||
break;
|
||
case 0x32:
|
||
setLookMode(0);
|
||
break;
|
||
case 0x3c: {
|
||
fopAc_ac_c* sp1c = (fopAc_ac_c*)fpcM_Search(s_subGRD, this);
|
||
if (sp1c != NULL) {
|
||
mNpcfActorManager[2].entry(sp1c);
|
||
}
|
||
setLookMode(5);
|
||
} break;
|
||
case 0x46:
|
||
setTagJump2();
|
||
setLookMode(2);
|
||
break;
|
||
case 0x50:
|
||
setLookMode(2);
|
||
mEventTimer = GET_HIO(mBowTimer);
|
||
break;
|
||
case 0x2d:
|
||
break;
|
||
}
|
||
}
|
||
|
||
switch (sp24) {
|
||
case 0xa:
|
||
r28 = 1;
|
||
break;
|
||
case 0x14: {
|
||
s16 spA = current.angle.y;
|
||
cLib_chaseAngleS(&spA, fopAcM_searchPlayerAngleY(this), 0x800);
|
||
setAngle(spA);
|
||
r28 = 1;
|
||
} break;
|
||
case 0x1e:
|
||
if (field_0x14D8 == 0x1b) {
|
||
if (mpMorf->isStop()) {
|
||
r28 = 1;
|
||
} else if (mpMorf->checkFrame(14.0f)) {
|
||
cXyz c(0.0f, 0.0f, 20.0f);
|
||
mDoMtx_stack_c::transS(current.pos);
|
||
mDoMtx_stack_c::YrotM(mCurAngle.y);
|
||
mDoMtx_stack_c::multVec(&c, &mParticleManager[0].mPos);
|
||
mParticleManager[0].mAngle = mCurAngle;
|
||
mParticleManager[0].field_0x0 = 1;
|
||
}
|
||
}
|
||
break;
|
||
case 0x28:
|
||
if (field_0x14D8 == 0x1a) {
|
||
mpMorf->setEndFrame(29.0f);
|
||
if (field_0x14D4 < 3.0f) {
|
||
field_0x14D4 += 0.2f;
|
||
}
|
||
mpMorf->setPlaySpeed(field_0x14D4);
|
||
speedF = 0.0f;
|
||
}
|
||
r28 = 1;
|
||
break;
|
||
case 0x2d:
|
||
if (field_0x14D8 == 0x1a) {
|
||
mpMorf->setEndFrame(29.0f);
|
||
if (field_0x14D4 < 3.0f) {
|
||
field_0x14D4 += 0.2f;
|
||
}
|
||
mpMorf->setPlaySpeed(field_0x14D4);
|
||
speedF = field_0x14D4 * GET_HIO(mRotationalSpeed);
|
||
}
|
||
r28 = 1;
|
||
break;
|
||
case 0x32:
|
||
if (field_0x14D8 == 0x1a) {
|
||
if (field_0x14D4 > 1.0f) {
|
||
field_0x14D4 -= 0.25f;
|
||
mpMorf->setPlaySpeed(field_0x14D4);
|
||
speedF = field_0x14D4 * GET_HIO(mRotationalSpeed);
|
||
} else {
|
||
if (mpMorf->getFrame() >= 0.0f && mpMorf->getFrame() <= 5.0f) {
|
||
setMotion(0x14, -1.0f, 0);
|
||
field_0x14D4 = 0.0f;
|
||
}
|
||
speedF = 0.0f;
|
||
}
|
||
} else if (field_0x14D8 == 0x19) {
|
||
if (mpMorf->checkFrame(12.0f)) {
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(0x1a));
|
||
mDoMtx_stack_c::multVecZero(&mParticleManager[1].mPos);
|
||
mParticleManager[1].mPos.y = current.pos.y;
|
||
mParticleManager[1].mAngle = mCurAngle;
|
||
mParticleManager[1].field_0x0 = 1;
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(0x17));
|
||
mDoMtx_stack_c::multVecZero(&mParticleManager[2].mPos);
|
||
mParticleManager[2].mPos.y = current.pos.y;
|
||
mParticleManager[2].mAngle = mCurAngle;
|
||
mParticleManager[2].field_0x0 = 1;
|
||
}
|
||
} else if (field_0x14D8 == 0x16) {
|
||
r28 = 1;
|
||
}
|
||
break;
|
||
case 0x3c:
|
||
r28 = 1;
|
||
break;
|
||
case 0x46: {
|
||
s16 sp8 = current.angle.y;
|
||
cLib_chaseAngleS(&sp8, fopAcM_searchPlayerAngleY(this), 0x800);
|
||
setAngle(sp8);
|
||
home.angle.y = sp8;
|
||
r28 = 1;
|
||
} break;
|
||
case 0x50:
|
||
if (fopAcM_searchPlayerAngleY(this) == mCurAngle.y) {
|
||
mTurnMode = 0;
|
||
} else if (step(fopAcM_searchPlayerAngleY(this), -1, 0x16, 0xf)) {
|
||
mTurnMode = 0;
|
||
if (field_0x14D8 == 0x1c) {
|
||
setMotion(0, -1.0f, 0);
|
||
}
|
||
}
|
||
if (cLib_calcTimer(&mEventTimer) == 0) {
|
||
if (mMotion == 0x15) {
|
||
if (field_0x14D8 == 0x16 && fopAcM_searchPlayerAngleY(this) == mCurAngle.y) {
|
||
r28 = 1;
|
||
}
|
||
if (field_0x14D8 == 0x1f && mpMorf->getFrame() >= 10.0f &&
|
||
mpMorf->getFrame() < 11.0f)
|
||
{
|
||
mCreature.startCreatureVoice(Z2SE_GORON_V_SMR_REPLY, -1);
|
||
}
|
||
} else {
|
||
setMotion(0x15, -1.0f, 0);
|
||
setLookMode(0);
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
r28 = 1;
|
||
break;
|
||
}
|
||
|
||
if (field_0x14D8 == 0x1a) {
|
||
if (field_0x14D4 >= 1.0f) {
|
||
setRollPrtcl(current.pos, 1.0f);
|
||
}
|
||
f32 v = cLib_minMaxLimit(fabsf(field_0x14D4) * 20.0f, 1.0f, 127.0f);
|
||
mCreature.startCreatureSound(Z2SE_GORON_ROLLING, v, -1);
|
||
}
|
||
return r28;
|
||
}
|
||
|
||
/* 809C45B0-809C47EC 005D50 023C+00 1/0 0/0 0/0 .text ECut_grDSGate__11daNpc_grA_cFi */
|
||
BOOL daNpc_grA_c::ECut_grDSGate(int i_staffID) {
|
||
dEvent_manager_c& manager = dComIfGp_getEventManager();
|
||
int sp10 = 0;
|
||
daPy_py_c* spc = daPy_getPlayerActorClass();
|
||
int r30 = 0;
|
||
int* r29 = 0;
|
||
int r28 = -1;
|
||
int sp8 = 0;
|
||
r29 = dComIfGp_evmng_getMyIntegerP(i_staffID, "prm");
|
||
if (r29 != NULL) {
|
||
r28 = *r29;
|
||
}
|
||
if (manager.getIsAddvance(i_staffID)) {
|
||
switch (r28) {
|
||
case 0xa:
|
||
mTurnMode = 0;
|
||
break;
|
||
case 0x14:
|
||
if (mMode == 0) {
|
||
setMotion(0x18, -1.0f, 0);
|
||
} else {
|
||
setMotion(0x17, -1.0f, 0);
|
||
}
|
||
break;
|
||
case 0x1e:
|
||
setHomeJump();
|
||
setMotion(5, -1.0f, 0);
|
||
setLookMode(2);
|
||
break;
|
||
}
|
||
}
|
||
switch (r28) {
|
||
case 0xa:
|
||
r30 = 1;
|
||
break;
|
||
case 0x14:
|
||
if (mMotion != 5) {
|
||
if (field_0x14D8 != 0x17) {
|
||
cLib_chasePosXZ(¤t.pos, field_0x148C, 30.f / 11.f);
|
||
if (mpMorf->isStop()) {
|
||
setMotion(5, -1.0f, 0);
|
||
home.pos = field_0x148C;
|
||
home.angle = field_0x1498;
|
||
field_0x14D1 = 1;
|
||
r30 = 1;
|
||
}
|
||
}
|
||
} else {
|
||
r30 = 1;
|
||
}
|
||
break;
|
||
case 0x1e:
|
||
r30 = 1;
|
||
break;
|
||
default:
|
||
r30 = 1;
|
||
break;
|
||
}
|
||
return r30;
|
||
}
|
||
|
||
/* 809C47EC-809C4BE4 005F8C 03F8+00 1/0 0/0 0/0 .text ECut_teachElevator__11daNpc_grA_cFi
|
||
*/
|
||
BOOL daNpc_grA_c::ECut_teachElevator(int i_staffID) {
|
||
dEvent_manager_c& manager = dComIfGp_getEventManager();
|
||
int sp10 = 0;
|
||
daPy_py_c* spc = daPy_getPlayerActorClass();
|
||
int r30 = 0;
|
||
int* r29 = 0;
|
||
int r28 = -1;
|
||
int sp8 = 0;
|
||
r29 = dComIfGp_evmng_getMyIntegerP(i_staffID, "prm");
|
||
if (r29 != NULL) {
|
||
r28 = *r29;
|
||
}
|
||
if (manager.getIsAddvance(i_staffID)) {
|
||
switch (r28) {
|
||
case 0:
|
||
if (!dComIfGs_isSwitch(mSwBit, fopAcM_GetRoomNo(this))) {
|
||
dComIfGs_onSwitch(mSwBit, fopAcM_GetRoomNo(this));
|
||
setGateWalk();
|
||
}
|
||
initTalk(0xc, NULL);
|
||
setLookMode(6);
|
||
break;
|
||
case 0xa:
|
||
mTurnMode = 0;
|
||
break;
|
||
case 0x14:
|
||
initTalk(0xc, NULL);
|
||
break;
|
||
case 0x1e:
|
||
mTurnMode = 0;
|
||
break;
|
||
case 0x28:
|
||
if (mMode == 0) {
|
||
setMotion(0x18, -1, 0);
|
||
} else {
|
||
setMotion(0x17, -1, 0);
|
||
}
|
||
mAcch.SetWallNone();
|
||
break;
|
||
}
|
||
}
|
||
|
||
switch (r28) {
|
||
case 0:
|
||
if (talkProc(NULL, 1, NULL)) {
|
||
r30 = 1;
|
||
}
|
||
break;
|
||
case 0xa:
|
||
if (fopAcM_searchPlayerAngleY(this) == mCurAngle.y) {
|
||
mTurnMode = 0;
|
||
r30 = 1;
|
||
} else if (step(fopAcM_searchPlayerAngleY(this), -1, -1, 0xf)) {
|
||
mTurnMode = 0;
|
||
setMotion(5, -1.0f, 0);
|
||
}
|
||
break;
|
||
case 0x14:
|
||
if (talkProc(NULL, 1, NULL)) {
|
||
r30 = 1;
|
||
}
|
||
break;
|
||
case 0x1e:
|
||
if (home.angle.y == mCurAngle.y) {
|
||
mTurnMode = 0;
|
||
r30 = 1;
|
||
} else if (step(home.angle.y, -1, -1, 0xf)) {
|
||
mTurnMode = 0;
|
||
setMotion(5, -1.0f, 0);
|
||
}
|
||
break;
|
||
case 0x28:
|
||
if (mMotion != 5) {
|
||
if (field_0x14D8 != 0x17) {
|
||
cLib_chasePosXZ(¤t.pos, field_0x148C, 30.0f / 11.0f);
|
||
if (mpMorf->isStop()) {
|
||
setMotion(5, -1.0f, 0);
|
||
home.pos = field_0x148C;
|
||
home.angle = field_0x1498;
|
||
field_0x14D1 = 1;
|
||
r30 = 1;
|
||
}
|
||
}
|
||
} else {
|
||
r30 = 1;
|
||
setLookMode(0);
|
||
}
|
||
break;
|
||
default:
|
||
r30 = 1;
|
||
break;
|
||
}
|
||
return r30;
|
||
}
|
||
|
||
/* 809C4BE4-809C4EB4 006384 02D0+00 1/0 0/0 0/0 .text ECut_kickOut__11daNpc_grA_cFi */
|
||
BOOL daNpc_grA_c::ECut_kickOut(int i_staffID) {
|
||
dEvent_manager_c& sp40 = dComIfGp_getEventManager();
|
||
int sp3C = 0;
|
||
daPy_py_c* sp38 = daPy_getPlayerActorClass();
|
||
int r28 = 0;
|
||
int* sp34 = NULL;
|
||
int sp30 = -1;
|
||
int sp2C = 0;
|
||
|
||
sp34 = dComIfGp_evmng_getMyIntegerP(i_staffID, "prm");
|
||
if (sp34 != NULL) {
|
||
sp30 = *sp34;
|
||
}
|
||
|
||
if (sp40.getIsAddvance(i_staffID)) {
|
||
switch (sp30) {
|
||
case 0:
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0, -1.0f, 0);
|
||
setLookMode(2);
|
||
speedF = 0.0f;
|
||
break;
|
||
case 0xa:
|
||
initTalk(0x428, NULL);
|
||
break;
|
||
case 0x14:
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(1, -1.0f, 0);
|
||
speedF = GET_HIO(mWalkingSpeed);
|
||
mpMorf->setPlaySpeed(GET_HIO(mWalkingSpeed) * GET_HIO(mWalkingAnimationSpeed));
|
||
break;
|
||
case 0x1e:
|
||
Z2GetAudioMgr()->seStart(0x600b2, ¤t.pos, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
||
break;
|
||
}
|
||
}
|
||
switch (sp30) {
|
||
case 0:
|
||
if (fopAcM_searchPlayerAngleY(this) == mCurAngle.y) {
|
||
mTurnMode = 0;
|
||
r28 = 1;
|
||
} else if (step(fopAcM_searchPlayerAngleY(this), 0x17, 0x16, 0xf)) {
|
||
mTurnMode = 0;
|
||
setMotion(0, -1.0f, 0);
|
||
}
|
||
break;
|
||
case 0xa:
|
||
if (talkProc(NULL, 1, NULL)) {
|
||
r28 = 1;
|
||
}
|
||
break;
|
||
case 0x14:
|
||
speedF = GET_HIO(mWalkingSpeed);
|
||
mpMorf->setPlaySpeed(GET_HIO(mWalkingSpeed) * GET_HIO(mWalkingAnimationSpeed));
|
||
r28 = 1;
|
||
break;
|
||
case 0x1e:
|
||
r28 = 1;
|
||
break;
|
||
default:
|
||
r28 = 1;
|
||
break;
|
||
}
|
||
|
||
return r28;
|
||
}
|
||
|
||
/* 809C4EB4-809C5088 006654 01D4+00 1/0 0/0 0/0 .text ECut_noneLook__11daNpc_grA_cFi */
|
||
BOOL daNpc_grA_c::ECut_noneLook(int i_staffID) {
|
||
dEvent_manager_c& manager = dComIfGp_getEventManager();
|
||
int r26 = 0;
|
||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||
int r30 = 0;
|
||
int* r29 = 0;
|
||
int r28 = -1;
|
||
int r24 = 0;
|
||
r29 = dComIfGp_evmng_getMyIntegerP(i_staffID, "prm");
|
||
if (r29 != NULL) {
|
||
r28 = *r29;
|
||
}
|
||
if (manager.getIsAddvance(i_staffID)) {
|
||
switch (r28) {
|
||
case 0:
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0, -1.0f, 0);
|
||
setLookMode(0);
|
||
speedF = 0.0f;
|
||
field_0x1690 = 1;
|
||
break;
|
||
case 0xa:
|
||
mEventTimer = 0x41;
|
||
setLookMode(7);
|
||
break;
|
||
case 0x14:
|
||
initTalk(0x3ea, NULL);
|
||
break;
|
||
}
|
||
}
|
||
switch(r28)
|
||
{
|
||
case 0:
|
||
r30 = 1;
|
||
break;
|
||
case 0xa:
|
||
if (cLib_calcTimer(&mEventTimer) != 0) {
|
||
if (mEventTimer == 0xf) {
|
||
setLookMode(0);
|
||
r30 = 1;
|
||
break;
|
||
}
|
||
if (mEventTimer == 0x28) {
|
||
setLookMode(8);
|
||
}
|
||
}
|
||
break;
|
||
case 0x14:
|
||
if (talkProc(NULL, TRUE, NULL)) {
|
||
r30 = 1;
|
||
}
|
||
break;
|
||
default:
|
||
r30 = 1;
|
||
}
|
||
return r30;
|
||
}
|
||
|
||
/* 809C5088-809C5430 006828 03A8+00 1/0 0/0 0/0 .text ECut_rescueRock__11daNpc_grA_cFi */
|
||
BOOL daNpc_grA_c::ECut_rescueRock(int i_staffID) {
|
||
dEvent_manager_c& sp40 = dComIfGp_getEventManager();
|
||
int sp3C = 0;
|
||
daPy_py_c* sp38 = daPy_getPlayerActorClass();
|
||
int r28 = 0;
|
||
int* sp34 = NULL;
|
||
int sp30 = -1;
|
||
int sp2C = 0;
|
||
|
||
sp34 = dComIfGp_evmng_getMyIntegerP(i_staffID, "prm");
|
||
if (sp34 != NULL) {
|
||
sp30 = *sp34;
|
||
}
|
||
|
||
if (sp40.getIsAddvance(i_staffID)) {
|
||
switch (sp30) {
|
||
case 0:
|
||
setExpression(0x17, 0.0f);
|
||
setMotion(0x13, 0.0f, 0);
|
||
setLookMode(0);
|
||
gravity = -1.0f;
|
||
speed.y = 41.0f;
|
||
field_0x14D4 = 2.0f;
|
||
field_0x1486 = 0;
|
||
break;
|
||
case 0x14:
|
||
mAcch.ClrGrndNone();
|
||
mAcch.ClrWallNone();
|
||
break;
|
||
case 0xa:
|
||
break;
|
||
}
|
||
}
|
||
switch (sp30) {
|
||
case 0:
|
||
if (speed.y < 10.0f) {
|
||
if (field_0x14D8 != 0x19) {
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0x14, -1.0f, 0);
|
||
gravity = -0.5f;
|
||
} else {
|
||
r28 = 1;
|
||
}
|
||
} else {
|
||
cLib_chaseF(&field_0x14D4, 1.0f, 0.03f);
|
||
mpMorf->setPlaySpeed(field_0x14D4);
|
||
mpMorf->setEndFrame(27.0f);
|
||
}
|
||
break;
|
||
case 0xa:
|
||
if (field_0x14D8 == 0x19) {
|
||
if (mpMorf->getFrame() >= 8.0f) {
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0x1c, -1.0f, 0);
|
||
}
|
||
} else {
|
||
r28 = 1;
|
||
}
|
||
break;
|
||
case 0x14:
|
||
if (mAcch.ChkGroundHit()) {
|
||
r28 = 1;
|
||
}
|
||
if (mAcch.ChkGroundLanding()) {
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(0x1a));
|
||
mDoMtx_stack_c::multVecZero(&mParticleManager[1].mPos);
|
||
mParticleManager[1].mPos.y = current.pos.y;
|
||
mParticleManager[1].mAngle = mCurAngle;
|
||
mParticleManager[1].field_0x0 = 1;
|
||
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(0x17));
|
||
mDoMtx_stack_c::multVecZero(&mParticleManager[2].mPos);
|
||
mParticleManager[2].mPos.y = current.pos.y;
|
||
mParticleManager[2].mAngle = mCurAngle;
|
||
mParticleManager[2].field_0x0 = 1;
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0, -1.0f, 0);
|
||
mCreature.startCreatureSound(Z2SE_GORON_ROLL_BOUND, 0, -1);
|
||
}
|
||
break;
|
||
default:
|
||
r28 = 1;
|
||
break;
|
||
}
|
||
return r28;
|
||
}
|
||
|
||
/* 809C5430-809C5D44 006BD0 0914+00 3/0 0/0 0/0 .text ECut_carrySpaWater__11daNpc_grA_cFi
|
||
*/
|
||
BOOL daNpc_grA_c::ECut_carrySpaWater(int i_staffID) {
|
||
dEvent_manager_c& sp40 = dComIfGp_getEventManager();
|
||
int sp3C = 0;
|
||
daPy_py_c* sp38 = daPy_getPlayerActorClass();
|
||
int r28 = 0;
|
||
int* sp34 = NULL;
|
||
int sp30 = -1;
|
||
int sp2C = 0;
|
||
|
||
sp34 = dComIfGp_evmng_getMyIntegerP(i_staffID, "prm");
|
||
if (sp34 != NULL) {
|
||
sp30 = *sp34;
|
||
}
|
||
|
||
if (sp40.getIsAddvance(i_staffID)) {
|
||
switch (sp30) {
|
||
case 0:{
|
||
daNpcF_offTmpBit(0xb);
|
||
daNpcF_offTmpBit(0xc);
|
||
daNpcF_offTmpBit(0x52);
|
||
setExpression(0x13, -1.0f);
|
||
setMotion(0x19, -1.0f, 0);
|
||
setLookMode(0);
|
||
cXyz c;
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(3));
|
||
mDoMtx_stack_c::multVecZero(&c);
|
||
} break;
|
||
case 0xa:
|
||
initTalk(0x29, NULL);
|
||
break;
|
||
case 0x14: {
|
||
setLookMode(0);
|
||
field_0x14D4 = 1.0f;
|
||
cXyz c(250.0f, 0.0f, 100.0f);
|
||
mDoMtx_stack_c::YrotS(shape_angle.y);
|
||
mDoMtx_stack_c::multVec(&c, &c);
|
||
c += current.pos;
|
||
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&c, shape_angle.y + 0x2000, 0);
|
||
} break;
|
||
case 0x1e:
|
||
initTalk(0x29, NULL);
|
||
break;
|
||
case 0x23:
|
||
setLookMode(3);
|
||
mNpcfActorManager[0].entry(daPy_getPlayerActorClass());
|
||
break;
|
||
case 0x28:
|
||
initTalk(0x29, NULL);
|
||
break;
|
||
case 0x2d:
|
||
setLookMode(0);
|
||
break;
|
||
case 0x32:
|
||
setMotion(0x12, 0.0f, 1);
|
||
setExpression(0x17, -1.0f);
|
||
break;
|
||
case 0x3c:
|
||
field_0x14D4 = 0.0f;
|
||
mpMorf->setPlaySpeed(field_0x14D4);
|
||
mEventTimer = 0x12c;
|
||
break;
|
||
case 0x41:
|
||
mHide = 1;
|
||
setAngle(home.angle.y + 0x8000);
|
||
speedF = 0.0f;
|
||
field_0x14D4 = 0.0f;
|
||
break;
|
||
case 0x46:
|
||
field_0x150C = 1;
|
||
mHide = 0;
|
||
field_0xDD4.reverse();
|
||
field_0xDD4.setNextIdx();
|
||
mEventTimer = 0x118;
|
||
mCreature.startCreatureVoice(Z2SE_GRA_V_ROLLING_RETURN, -1);
|
||
break;
|
||
case 0x50: {
|
||
cXyz c = current.pos;
|
||
c.y += 200.0f;
|
||
csXyz c2(0, fopAcM_searchPlayerAngleY(this), 0);
|
||
fopAcM_createItemForBoss(&c, 0x21, fopAcM_GetRoomNo(this), &c2, NULL, 0.0f, 20.0f,
|
||
0x80);
|
||
} break;
|
||
}
|
||
}
|
||
|
||
switch (sp30) {
|
||
case 0:
|
||
if (mpMorf->isStop()) {
|
||
r28 = 1;
|
||
} else {
|
||
JPABaseEmitter* sp28 = 0;
|
||
cXyz c;
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(3));
|
||
mDoMtx_stack_c::multVecZero(&c);
|
||
field_0x151C = dComIfGp_particle_set(field_0x151C, 0x2a3, &c, &tevStr, ¤t.angle, NULL, 0xff,
|
||
NULL, -1, NULL, NULL, NULL);
|
||
sp28 = dComIfGp_particle_getEmitter(field_0x151C);
|
||
if (sp28 != NULL)
|
||
{
|
||
sp28->setGlobalTranslation(c.x, c.y, c.z);
|
||
}
|
||
}
|
||
break;
|
||
case 0xa:
|
||
if (talkProc(NULL, 1, NULL)) {
|
||
r28 = 1;
|
||
}
|
||
break;
|
||
case 0x14:
|
||
if (mMotion == 6 && mMotionPhase > 0) {
|
||
r28 = 1;
|
||
}
|
||
break;
|
||
case 0x23:
|
||
if (fopAcM_searchPlayerAngleY(this) == mCurAngle.y) {
|
||
r28 = 1;
|
||
} else if (step(fopAcM_searchPlayerAngleY(this), 0x17, 0x16, 0xf)) {
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0, -1.0f, 0);
|
||
mTurnMode = 0;
|
||
}
|
||
break;
|
||
case 0x1e:
|
||
case 0x28:
|
||
if (talkProc(NULL, 1, NULL)) {
|
||
r28 = 1;
|
||
}
|
||
break;
|
||
case 0x2d:
|
||
if (home.angle.y == mCurAngle.y) {
|
||
r28 = 1;
|
||
} else {
|
||
if (step(home.angle.y, 0x17, 0x16, 0xf)) {
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0, -1.0f, 0);
|
||
mTurnMode = 0;
|
||
}
|
||
}
|
||
break;
|
||
case 0x32:
|
||
if (field_0x14D8 == 0x1b) {
|
||
if (mpMorf->isStop()) {
|
||
r28 = 1;
|
||
setMotion(0x13, -1.0f, 0);
|
||
mCreature.startCreatureVoice(Z2SE_GRA_V_ROLLING, -1);
|
||
} else if (mpMorf->checkFrame(14.0f)) {
|
||
cXyz c(0.0f, 0.0f, 20.0f);
|
||
mDoMtx_stack_c::transS(current.pos);
|
||
mDoMtx_stack_c::YrotM(mCurAngle.y);
|
||
mDoMtx_stack_c::multVec(&c, &mParticleManager[0].mPos);
|
||
mParticleManager[0].mAngle = mCurAngle;
|
||
mParticleManager[0].field_0x0 = 1;
|
||
}
|
||
} else if (field_0x14D8 == 0x1a) {
|
||
mpMorf->setPlaySpeed(0.0f);
|
||
mpMorf->setEndFrame(29.0f);
|
||
r28 = 1;
|
||
}
|
||
break;
|
||
case 0x46:
|
||
case 0x3c:
|
||
if (field_0xDD4.getPathInfo() != NULL) {
|
||
cXyz c;
|
||
BOOL b = field_0xDD4.getDstPos(current.pos, c);
|
||
if (!b) {
|
||
cLib_addCalcAngleS2(&mCurAngle.y, cLib_targetAngleY(¤t.pos, &c), 6, 0x400);
|
||
setAngle(mCurAngle.y);
|
||
}
|
||
cLib_addCalc2(&field_0x14D4, 5.0f, 0.1f, 0.1f);
|
||
mpMorf->setPlaySpeed(field_0x14D4);
|
||
speedF = field_0x14D4 * 10.0f;
|
||
}
|
||
if (!cLib_calcTimer(&mEventTimer)) {
|
||
r28 = 1;
|
||
}
|
||
break;
|
||
case 0x41:
|
||
r28 = 1;
|
||
break;
|
||
case 0x50:
|
||
r28 = 1;
|
||
break;
|
||
default:
|
||
r28 = 1;
|
||
break;
|
||
}
|
||
|
||
if ((field_0x14D8 == 0x1a && field_0x14D4 >= 1.0f) ||
|
||
field_0x14D8 == 0x28 && mpMorf->getFrame() >= 18.0f && mpMorf->getFrame() <= 20.0f)
|
||
{
|
||
setRollPrtcl(current.pos, 1.0f);
|
||
if (field_0x14D8 == 0x1a) {
|
||
f32 v = cLib_minMaxLimit(fabsf(field_0x14D4) * 20.0f, 1.0f, 127.0f);
|
||
mCreature.startCreatureSound(Z2SE_GORON_ROLLING, v, -1);
|
||
}
|
||
}
|
||
return r28;
|
||
|
||
}
|
||
|
||
/* 809C5D44-809C5F90 0074E4 024C+00 1/0 0/0 0/0 .text ECut_carrySpaWaterFailure__11daNpc_grA_cFi
|
||
*/
|
||
BOOL daNpc_grA_c::ECut_carrySpaWaterFailure(int i_staffID) {
|
||
dEvent_manager_c& sp34 = dComIfGp_getEventManager();
|
||
int sp30 = 0;
|
||
daPy_py_c* sp2c = daPy_getPlayerActorClass();
|
||
int r28 = 0;
|
||
int* sp28 = NULL;
|
||
int sp24 = -1;
|
||
int sp20 = 0;
|
||
|
||
sp28 = dComIfGp_evmng_getMyIntegerP(i_staffID, "prm");
|
||
if (sp28 != NULL) {
|
||
sp24 = *sp28;
|
||
}
|
||
|
||
if (sp34.getIsAddvance(i_staffID)) {
|
||
switch (sp24) {
|
||
case 0:
|
||
setExpression(0x16, -1.0f);
|
||
setMotion(2, -1.0f, 0);
|
||
setLookMode(0);
|
||
field_0x1690 = 2;
|
||
break;
|
||
case 0xa:
|
||
setExpression(0x16, -1.0f);
|
||
setMotion(8, -1.0f, 0);
|
||
break;
|
||
case 0x14:
|
||
daNpcF_onTmpBit(0x52);
|
||
initTalk(0x29, NULL);
|
||
break;
|
||
}
|
||
}
|
||
switch (sp24) {
|
||
case 0:
|
||
r28 = 1;
|
||
break;
|
||
case 0xa:
|
||
if (mMotion == 8) {
|
||
if (mMotionPhase > 0) {
|
||
r28 = 1;
|
||
} else if (mpMorf->checkFrame(21.0f)) {
|
||
cXyz c(0.0f, 0.0f, -150.0f);
|
||
mDoMtx_stack_c::transS(current.pos);
|
||
mDoMtx_stack_c::YrotM(mCurAngle.y);
|
||
mDoMtx_stack_c::multVec(&c, &mParticleManager[0].mPos);
|
||
mParticleManager[0].mAngle = mCurAngle;
|
||
mParticleManager[0].field_0x0 = 1;
|
||
}
|
||
}
|
||
break;
|
||
case 0x14:
|
||
if (talkProc(NULL, TRUE, NULL)) {
|
||
r28 = 1;
|
||
}
|
||
break;
|
||
default:
|
||
r28 = 1;
|
||
break;
|
||
}
|
||
return r28;
|
||
}
|
||
|
||
/* 809C5F90-809C6608 007730 0678+00 1/0 0/0 0/0 .text ECut_rollRockCrash__11daNpc_grA_cFi
|
||
*/
|
||
BOOL daNpc_grA_c::ECut_rollRockCrash(int i_staffID) {
|
||
dEvent_manager_c& sp34 = dComIfGp_getEventManager();
|
||
int sp30 = 0;
|
||
daPy_py_c* sp2c = daPy_getPlayerActorClass();
|
||
int r28 = 0;
|
||
int* sp28 = NULL;
|
||
int sp24 = -1;
|
||
int sp20 = 0;
|
||
|
||
sp28 = dComIfGp_evmng_getMyIntegerP(i_staffID, "prm");
|
||
if (sp28 != NULL) {
|
||
sp24 = *sp28;
|
||
}
|
||
|
||
if (sp34.getIsAddvance(i_staffID)) {
|
||
switch (sp24) {
|
||
case 0:
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0, -1.0f, 0);
|
||
setLookMode(2);
|
||
field_0x1486 = 2;
|
||
break;
|
||
case 0xa:
|
||
setExpression(0x15, -1.0f);
|
||
setMotion(0x1b, -1.0f, 0);
|
||
setLookMode(0);
|
||
break;
|
||
case 0x14: {
|
||
setLookMode(0);
|
||
initTalk(field_0x146C, NULL);
|
||
cXyz c(200.0f, 100.0f, 0.0f);
|
||
mDoMtx_stack_c::YrotS(home.angle.y);
|
||
mDoMtx_stack_c::multVec(&c, &c);
|
||
c += current.pos;
|
||
daPy_getPlayerActorClass()->setPlayerPosAndAngle(
|
||
&c, cLib_targetAngleY(&c, ¤t.pos), 0);
|
||
} break;
|
||
case 0x1e:
|
||
setLookMode(0);
|
||
break;
|
||
case 0x28:
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0x12, -1.0f, 0);
|
||
break;
|
||
case 0x3c: {
|
||
dComIfGp_getVibration().StartShock(8, 0xf, cXyz(0.0f, 1.0f, 0.0f));
|
||
speedF = 0.0f;
|
||
mEventTimer = 0x2d;
|
||
} break;
|
||
case 0x32:
|
||
break;
|
||
}
|
||
}
|
||
|
||
switch (sp24) {
|
||
case 0:
|
||
r28 = 1;
|
||
break;
|
||
case 0xa:
|
||
if (field_0x14D8 == 0x29) {
|
||
r28 = 1;
|
||
} else {
|
||
if (mpMorf->getFrame() >= 79.0f) {
|
||
field_0x150C = 0;
|
||
} else if (mpMorf->getFrame() >= 7.0f) {
|
||
field_0x150C = 1;
|
||
} else {
|
||
field_0x150C = 0;
|
||
}
|
||
if (mpMorf->getFrame() >= 93.0f && mpMorf->getFrame() < 94.0f) {
|
||
mCreature.startCreatureVoice(Z2SE_GRA_V_SPAWATER_SHOUT, -1);
|
||
}
|
||
}
|
||
break;
|
||
case 0x14:
|
||
if (talkProc(NULL, 1, NULL)) {
|
||
r28 = 1;
|
||
}
|
||
break;
|
||
case 0x1e:
|
||
if (home.angle.y != mCurAngle.y) {
|
||
if (step(home.angle.y, 0x17, 0x16, 0xf)) {
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0, -1.0f, 0);
|
||
}
|
||
} else {
|
||
r28 = 1;
|
||
}
|
||
break;
|
||
case 0x28:
|
||
if (field_0x14D8 == 0x1b) {
|
||
if (mpMorf->isStop()) {
|
||
setMotion(0x13, -1.0f, 0);
|
||
} else if (mpMorf->checkFrame(14.0f)) {
|
||
cXyz c(0.0f, 0.0f, 20.0f);
|
||
mDoMtx_stack_c::transS(current.pos);
|
||
mDoMtx_stack_c::YrotM(mCurAngle.y);
|
||
mDoMtx_stack_c::multVec(&c, &mParticleManager[0].mPos);
|
||
mParticleManager[0].mAngle = mCurAngle;
|
||
mParticleManager[0].field_0x0 = 1;
|
||
}
|
||
} else if (field_0x14D8 == 0x1a) {
|
||
mpMorf->setPlaySpeed(0.0f);
|
||
mpMorf->setEndFrame(29.0f);
|
||
r28 = 1;
|
||
field_0x14D4 = 0.0f;
|
||
}
|
||
break;
|
||
case 0x32:
|
||
cLib_addCalc2(&field_0x14D4, 5.0f, 0.1f, 0.1f);
|
||
mpMorf->setPlaySpeed(field_0x14D4);
|
||
speedF = field_0x14D4 * 10.0f;
|
||
if (mAcch.ChkWallHit()) {
|
||
r28 = 1;
|
||
}
|
||
break;
|
||
case 0x3c:
|
||
cLib_addCalc2(&field_0x14D4, 5.0f, 0.1f, 0.1f);
|
||
mpMorf->setPlaySpeed(field_0x14D4);
|
||
if (!cLib_calcTimer(&mEventTimer)) {
|
||
r28 = 1;
|
||
}
|
||
break;
|
||
default:
|
||
r28 = 1;
|
||
break;
|
||
}
|
||
|
||
if (field_0x14D8 == 0x1a) {
|
||
if (field_0x14D4 >= 1.0f) {
|
||
f32 f31 = 1.0f;
|
||
if (sp24 >= 0x3c) {
|
||
f31 = GET_HIO(mParticleSize);
|
||
}
|
||
setRollPrtcl(current.pos, f31);
|
||
}
|
||
f32 v = cLib_minMaxLimit(fabsf(field_0x14D4) * 20.0f, 1.0f, 127.0f);
|
||
mCreature.startCreatureSound(Z2SE_GORON_ROLLING, v, -1);
|
||
}
|
||
return r28;
|
||
}
|
||
|
||
/* 809C6608-809C681C 007DA8 0214+00 1/0 0/0 0/0 .text ECut_talkSpaWater__11daNpc_grA_cFi
|
||
*/
|
||
BOOL daNpc_grA_c::ECut_talkSpaWater(int i_staffID) {
|
||
dEvent_manager_c& manager = dComIfGp_getEventManager();
|
||
int r26 = 0;
|
||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||
int r30 = 0;
|
||
int* r29 = 0;
|
||
int r28 = -1;
|
||
int r24 = 0;
|
||
r29 = dComIfGp_evmng_getMyIntegerP(i_staffID, "prm");
|
||
if (r29 != NULL) {
|
||
r28 = *r29;
|
||
}
|
||
if (manager.getIsAddvance(i_staffID)) {
|
||
switch (r28) {
|
||
case 0:
|
||
setLookMode(0);
|
||
field_0x1690 = 1;
|
||
break;
|
||
case 0xa: {
|
||
initTalk(0x30, NULL);
|
||
cXyz c(0.0f, 0.0f, 500.0f);
|
||
mDoMtx_stack_c::transS(home.pos);
|
||
if ((daPy_getPlayerActorClass()->current.pos.z - current.pos.z) < 0.0f) {
|
||
mDoMtx_stack_c::YrotM(home.angle.y + 0x1000);
|
||
} else {
|
||
mDoMtx_stack_c::YrotM(home.angle.y - 0x1000);
|
||
}
|
||
mDoMtx_stack_c::multVec(&c, &c);
|
||
cXyz c2 = c;
|
||
c2.y += 500.0f;
|
||
if (fopAcM_gc_c::gndCheck(&c2)) {
|
||
c.y = fopAcM_gc_c::getGroundY();
|
||
}
|
||
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&c, cLib_targetAngleY(c, home.pos), 0);
|
||
} break;
|
||
}
|
||
}
|
||
switch (r28) {
|
||
case 0:
|
||
r30 = 1;
|
||
break;
|
||
case 10:
|
||
if (talkProc(NULL, 1, NULL)) {
|
||
r30 = 1;
|
||
}
|
||
break;
|
||
default:
|
||
r30 = 1;
|
||
}
|
||
return r30;
|
||
}
|
||
|
||
/* 809C681C-809C69B8 007FBC 019C+00 3/0 0/0 0/0 .text wait__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::wait(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0, -1.0f, 0);
|
||
setLookMode(0);
|
||
mTurnMode = 0;
|
||
field_0x1472 = 2;
|
||
// fallthrough
|
||
case 2:
|
||
if (mDamageTimer == 0) {
|
||
if (mNpcfActorManager[0].getActorP() != NULL) {
|
||
if (!chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
} else if (chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
|
||
if (mNpcfActorManager[0].getActorP() != NULL) {
|
||
setLookMode(2);
|
||
} else{
|
||
setLookMode(0);
|
||
if (home.angle.y != mCurAngle.y && step(home.angle.y, 0x17, 0x16, 0xf)) {
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0, -1.0f, 0);
|
||
field_0x1472 = 0;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C69B8-809C6AAC 008158 00F4+00 1/0 0/0 0/0 .text waitTW__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::waitTW(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0, 0.0f, 0);
|
||
setLookMode(0);
|
||
mTurnMode = 0;
|
||
field_0x1472 = 2;
|
||
// fallthrough
|
||
case 2:
|
||
if (!mIsDamaged) {
|
||
setLookMode(0);
|
||
if (home.angle.y != mCurAngle.y && step(home.angle.y, -1, -1, 0xf)) {
|
||
field_0x1472 = 0;
|
||
}
|
||
}
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C6AAC-809C6D48 00824C 029C+00 1/0 0/0 0/0 .text waitCheer__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::waitCheer(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
setExpressionAnm(0, TRUE);
|
||
setMotion(0, -1.0f, FALSE);
|
||
setLookMode(0);
|
||
mTurnMode = 0;
|
||
field_0x1472 = 2;
|
||
// fallthrough
|
||
case 2:
|
||
if (field_0x1489 == 0) {
|
||
fopAc_ac_c* r29 = (fopAc_ac_c*)fpcM_Search(s_sub, this);
|
||
if (r29 != NULL) {
|
||
daTagGra_c* r27 = (daTagGra_c*)r29;
|
||
field_0x148C = r27->getGraPos();
|
||
field_0x1498 = r27->getGraAngle();
|
||
field_0x14BC = home.pos;
|
||
field_0x14C8 = home.angle;
|
||
fopAcM_delete(r29);
|
||
field_0x1489 = 1;
|
||
}
|
||
}
|
||
if (field_0x149E == 0) {
|
||
fopAc_ac_c* r28 = (fopAc_ac_c*)fpcM_Search(s_sub2, this);
|
||
if (r28 != NULL) {
|
||
daTagGra_c* r26 = (daTagGra_c*)r28;
|
||
field_0x14A0 = r26->getGraPos();
|
||
field_0x14AC = r26->getGraAngle();
|
||
fopAcM_delete(r28);
|
||
field_0x149E = 1;
|
||
if (daNpcF_chkEvtBit(0x3f)) {
|
||
setTagJump2();
|
||
}
|
||
}
|
||
}
|
||
if (mDamageTimer == 0) {
|
||
if (mNpcfActorManager[0].getActorP() != NULL) {
|
||
if (!chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
} else if (chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
if (mNpcfActorManager[0].getActorP() != NULL) {
|
||
setLookMode(2);
|
||
} else {
|
||
setLookMode(0);
|
||
if (home.angle.y != mCurAngle.y && step(home.angle.y, -1, -1, 0xf)) {
|
||
field_0x1472 = 0;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C6D48-809C73FC 0084E8 06B4+00 1/0 0/0 0/0 .text waitGate__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::waitGate(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
setExpressionAnm(0, TRUE);
|
||
setMotion(5, -1.0f, FALSE);
|
||
setLookMode(0);
|
||
mTurnMode = 0;
|
||
field_0x9ea = 1;
|
||
field_0x1472 = 2;
|
||
// fallthrough
|
||
case 2:
|
||
if (field_0x1489 == 0 || field_0x149E == 0) {
|
||
if (getMode1() == 1 && field_0x149E == 0) {
|
||
fopAc_ac_c* r27 = (fopAc_ac_c*)fpcM_Search(s_sub, this);
|
||
if (r27 != NULL) {
|
||
daTagGra_c* r28 = (daTagGra_c*)r27;
|
||
field_0x14A0 = r28->getGraPos();
|
||
field_0x14AC = r28->getGraAngle();
|
||
field_0x14B4 = r28->getGraExtent();
|
||
field_0x14B8 = r28->getGraHeight();
|
||
fopAcM_delete(r27);
|
||
field_0x149E = 1;
|
||
if (daNpcF_chkEvtBit(0x40) &&
|
||
!dComIfGs_isSwitch(mSwBit, fopAcM_GetRoomNo(this)))
|
||
{
|
||
dComIfGs_onSwitch(mSwBit, fopAcM_GetRoomNo(this));
|
||
}
|
||
}
|
||
} else {
|
||
field_0x149E = 1;
|
||
}
|
||
if (field_0x149E == 1) {
|
||
cXyz c(150.0f, 0.0f, 0.0f);
|
||
if (mMode == 0) {
|
||
c.x = -150.0f;
|
||
}
|
||
cLib_offsetPos(&field_0x148C, ¤t.pos, current.angle.y, &c);
|
||
field_0x1498 = home.angle;
|
||
field_0x14BC = home.pos;
|
||
field_0x14C8 = home.angle;
|
||
field_0x1489 = 1;
|
||
if (daNpcF_chkEvtBit(0x3e)) {
|
||
if (getMode1() == 1) {
|
||
if (dComIfGs_isSwitch(mSwBit, fopAcM_GetRoomNo(this))) {
|
||
setTagJump();
|
||
field_0x14D0 = 1;
|
||
field_0x14D1 = 1;
|
||
}
|
||
} else {
|
||
setTagJump();
|
||
field_0x14D0 = 1;
|
||
field_0x14D1 = 1;
|
||
}
|
||
} else if (daNpcF_chkEvtBit(0x3f) && getMode1() != 1) {
|
||
setTagJump();
|
||
field_0x14D0 = 1;
|
||
field_0x14D1 = 1;
|
||
}
|
||
}
|
||
} else {
|
||
if (getMode1() == 1 && daNpcF_chkEvtBit(0x3e) &&
|
||
!dComIfGs_isSwitch(mSwBit, fopAcM_GetRoomNo(this)))
|
||
{
|
||
cXyz diff = (daPy_getPlayerActorClass()->current.pos - field_0x14A0);
|
||
if (diff.absXZ() < field_0x14B4) {
|
||
mOrderEvtNo = 2;
|
||
break;
|
||
}
|
||
}
|
||
if (field_0x14D1 == 0 && field_0x14D0 == 1) {
|
||
if (mMotion == 5) {
|
||
if (mMode == 0) {
|
||
setMotion(0x18, -1.0f, 0);
|
||
} else {
|
||
setMotion(0x17, -1.0f, 0);
|
||
}
|
||
mAcch.SetWallNone();
|
||
}
|
||
setLookMode(0);
|
||
if (field_0x14D8 != 0x17) {
|
||
cLib_chaseAngleS(¤t.angle.y, home.angle.y, 0x400);
|
||
setAngle(current.angle.y);
|
||
cLib_chasePosXZ(¤t.pos, field_0x148C, 30.f / 11.f);
|
||
if (mpMorf->isStop()) {
|
||
field_0x14D1 = 1;
|
||
setMotion(5, -1.0f, 0);
|
||
home.pos = field_0x148C;
|
||
home.angle = field_0x1498;
|
||
} else {
|
||
return TRUE;
|
||
}
|
||
} else {
|
||
return TRUE;
|
||
}
|
||
}
|
||
}
|
||
if (mDamageTimer == 0) {
|
||
if (mNpcfActorManager[0].getActorP() != NULL) {
|
||
if (!chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
} else if (chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
if (mNpcfActorManager[0].getActorP() != NULL) {
|
||
setLookMode(2);
|
||
} else {
|
||
setLookMode(0);
|
||
if (home.angle.y != mCurAngle.y && step(home.angle.y, -1, -1, 0xf)) {
|
||
field_0x1472 = 0;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C73FC-809C770C 008B9C 0310+00 1/0 0/0 0/0 .text waitKickOut__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::waitKickOut(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(1, 0.0f, 0);
|
||
setLookMode(0);
|
||
mTurnMode = 0;
|
||
field_0x1694 = 0;
|
||
field_0x1472 = 2;
|
||
// fallthrough
|
||
case 2:
|
||
field_0x1693 = field_0x1692;
|
||
field_0x1692 = 0;
|
||
fpcM_Search(s_subCarry, this);
|
||
if (field_0x1693 > field_0x1692) {
|
||
if (field_0x1690 == 1) {
|
||
mOrderEvtNo = 4;
|
||
} else {
|
||
mOrderEvtNo = 5;
|
||
}
|
||
} else if (daPy_getPlayerActorClass()->current.pos.y - current.pos.y < 200.0f &&
|
||
daPy_getPlayerActorClass()->checkPlayerFly() == 0)
|
||
{
|
||
mOrderEvtNo = 3;
|
||
} else if (daPy_getPlayerActorClass()->checkWolfRopeHang() &&
|
||
chkActorInSight(daPy_getPlayerActorClass(), GET_HIO(mNpcFParams.fov)))
|
||
{
|
||
mOrderEvtNo = 3;
|
||
} else if (field_0xDD4.getPathInfo() != NULL) {
|
||
cXyz c;
|
||
if (field_0x1694 == 0) {
|
||
BOOL b = field_0xDD4.getDstPos(current.pos, c);
|
||
if (b) {
|
||
field_0xDD4.reverse();
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0, -1.0f, 0);
|
||
speedF = 0.0f;
|
||
setLookMode(7);
|
||
field_0x1694 = 0xb4;
|
||
break;
|
||
} else {
|
||
s16 r27 = cLib_targetAngleY(¤t.pos, &c);
|
||
speedF = 5.0f;
|
||
mpMorf->setPlaySpeed(speedF * GET_HIO(mWalkingAnimationSpeed));
|
||
cLib_addCalcAngleS2(¤t.angle.y, r27, GET_HIO(mWalkingRotationDivisions),
|
||
GET_HIO(mWalkingRotationSpeed));
|
||
setAngle(current.angle.y);
|
||
}
|
||
} else if (cLib_calcTimer(&field_0x1694) == 0) {
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(1, -1.0f, 0);
|
||
} else if (field_0x1694 == 0x78) {
|
||
setLookMode(8);
|
||
} else if (field_0x1694 == 0x3c) {
|
||
setLookMode(0);
|
||
}
|
||
}
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C770C-809C77E0 008EAC 00D4+00 2/0 0/0 0/0 .text moveRock__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::moveRock(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
setExpression(0x17, 0.0f);
|
||
setMotion(0x13, 0.0f, 0);
|
||
setLookMode(0);
|
||
mTurnMode = 0;
|
||
mAcch.SetGrndNone();
|
||
mAcch.SetWallNone();
|
||
field_0x1472 = 2;
|
||
// fallthrough
|
||
case 2:
|
||
gravity = 0.0f;
|
||
mOrderEvtNo = 6;
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C77E0-809C7ACC 008F80 02EC+00 1/0 0/0 0/0 .text spaWarm__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::spaWarm(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
if (getMode() == 1) {
|
||
setExpressionAnm(0xa, 1);
|
||
setMotionAnm(0x24, 0);
|
||
} else {
|
||
setExpressionAnm(0x8, 1);
|
||
setMotionAnm(0x22, 0);
|
||
}
|
||
setLookMode(0);
|
||
mTurnMode = 0;
|
||
field_0x1472 = 2;
|
||
field_0x1478 = cLib_getRndValue(3, 7);
|
||
field_0x9ea = 1;
|
||
// fallthrough
|
||
case 2:
|
||
if (field_0x1488 == 1) {
|
||
fopAc_ac_c* p = (fopAc_ac_c*)fpcM_Search(s_subShop, this);
|
||
if (p != NULL) {
|
||
mNpcfActorManager[2].entry(p);
|
||
field_0x1488 = 0;
|
||
}
|
||
}
|
||
|
||
if (mDamageTimer == 0) {
|
||
if (field_0x1487 == 1) {
|
||
setLookMode(5);
|
||
} else {
|
||
if (mNpcfActorManager[0].getActorP() != NULL) {
|
||
if (!chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
} else if (chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
|
||
if (mNpcfActorManager[0].getActorP() != NULL) {
|
||
setLookMode(2);
|
||
} else {
|
||
setLookMode(0);
|
||
|
||
if (home.angle.y != mCurAngle.y && step(home.angle.y, -1, -1, 0xf)) {
|
||
field_0x1472 = 0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (getMode() == 1) {
|
||
if (mMotionLoops >= field_0x1478) {
|
||
setMotion(0xe, 0.0f, 1);
|
||
setExpression(0xe, -1.0f);
|
||
field_0x1478 = cLib_getRndValue(3, 7);
|
||
}
|
||
} else if (mMotionLoops >= field_0x1478) {
|
||
setMotion(0xc, 0.0f, 1);
|
||
setExpression(0xc, -1.0f);
|
||
field_0x1478 = cLib_getRndValue(3, 7);
|
||
}
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C7ACC-809C7F24 00926C 0458+00 3/0 0/0 0/0 .text waitSpaWater__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::waitSpaWater(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
if (field_0x1690 == 2) {
|
||
setExpression(0x16, -1.0f);
|
||
setMotion(0x9, -1.0f, 0);
|
||
} else {
|
||
setExpression(0x16, -1.0f);
|
||
setMotion(0x2, -1.0f, 0);
|
||
}
|
||
setLookMode(0);
|
||
mTurnMode = 0;
|
||
field_0x146C = 0x28;
|
||
field_0x1472 = 2;
|
||
field_0x9ea = 1;
|
||
// fallthrough
|
||
case 2:
|
||
if (field_0x1488 == 1) {
|
||
daOnsTaru_c* p = (daOnsTaru_c*)fpcM_Search(s_subOnsenTaru, this);
|
||
if (p != NULL) {
|
||
if (!daPy_getPlayerActorClass()->setForceGrab(p, 1, 0)) {
|
||
break;
|
||
}
|
||
p->startTimer();
|
||
mNpcfActorManager[2].entry(p);
|
||
field_0x1488 = 0;
|
||
}
|
||
}
|
||
|
||
if (mNpcfActorManager[2].getActorP() != NULL && !dComIfGp_event_runCheck()) {
|
||
daOnsTaru_c* p = (daOnsTaru_c*)mNpcfActorManager[2].getActorP();
|
||
if (fopAcM_GetName(p) == 0x16c) {
|
||
if (!p->getTempStat()) {
|
||
dMeter2Info_setFloatingMessage(0x7fd, 0x96, 0);
|
||
mNpcfActorManager[2].initialize();
|
||
} else if (field_0x1690 == 0) {
|
||
fopAc_ac_c* g = NULL;
|
||
s32 r = fopAcM_SearchByID(daPy_getPlayerActorClass()->getGrabActorID(), &g);
|
||
if (r == 1 && p == g) {
|
||
attention_info.flags = 0;
|
||
if ((attention_info.position -
|
||
daPy_getPlayerActorClass()->attention_info.position)
|
||
.absXZ() <= 1200.0f)
|
||
{
|
||
mOrderEvtNo = 9;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (field_0xC98.ChkTgHit()) {
|
||
daOnsTaru_c* hit = (daOnsTaru_c*)field_0xC98.GetTgHitAc();
|
||
if (fopAcM_GetName(hit) == 0x16c) {
|
||
fopAcM_OnStatus(hit, 0x4000);
|
||
if (hit->getTempStat()) {
|
||
mOrderEvtNo = 7;
|
||
} else {
|
||
mOrderEvtNo = 8;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (mDamageTimer == 0) {
|
||
if (field_0x1690 == 2) {
|
||
setLookMode(0);
|
||
} else {
|
||
if (mNpcfActorManager[0].getActorP() != NULL) {
|
||
if (!chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
} else if (chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
|
||
if (mNpcfActorManager[0].getActorP() != NULL) {
|
||
setLookMode(2);
|
||
} else {
|
||
setLookMode(0);
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C7F24-809C8138 0096C4 0214+00 1/0 0/0 0/0 .text waitSpaBuyer__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::waitSpaBuyer(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0x10, -1.0f, 0);
|
||
setLookMode(0);
|
||
mTurnMode = 0;
|
||
field_0x1478 = cLib_getRndValue(3, 7);
|
||
field_0x9ea = 1;
|
||
field_0x1472 = 2;
|
||
// fallthrough
|
||
case 2:
|
||
if (mDamageTimer == 0) {
|
||
if (field_0x14D8 == 0x31) {
|
||
mNpcfActorManager[0].remove();
|
||
} else if (mNpcfActorManager[0].getActorP()) {
|
||
if (!chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
} else {
|
||
if (chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
}
|
||
|
||
if (mNpcfActorManager[0].getActorP()) {
|
||
setLookMode(2);
|
||
mMotionLoops = 0;
|
||
field_0x1478 = cLib_getRndValue(1, 7);
|
||
} else {
|
||
setLookMode(0);
|
||
if (home.angle.y != mCurAngle.y) {
|
||
if (step(home.angle.y, 0x17, 0x16, 0xf)) {
|
||
field_0x1472 = 0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (mNpcfActorManager[0].getActorP() == NULL && mMotionLoops >= field_0x1478) {
|
||
setMotion(0x11, -1.0f, 1);
|
||
setExpression(0x17, -1.0f);
|
||
field_0x1478 = cLib_getRndValue(3, 7);
|
||
}
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C8138-809C82A8 0098D8 0170+00 1/0 0/0 0/0 .text waitSpaBuyerTW__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::waitSpaBuyerTW(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0x10, -1.0f, 0);
|
||
setLookMode(0);
|
||
mTurnMode = 0;
|
||
field_0x1478 = cLib_getRndValue(3, 7);
|
||
field_0x9ea = 1;
|
||
field_0x1472 = 2;
|
||
case 2:
|
||
if (mDamageTimer == 0) {
|
||
setLookMode(0);
|
||
if (home.angle.y != mCurAngle.y) {
|
||
if (step(home.angle.y, 0x17, 0x16, 0xf)) {
|
||
field_0x1472 = 0;
|
||
}
|
||
}
|
||
}
|
||
if (mMotionLoops >= field_0x1478) {
|
||
setMotion(0x11, -1.0f, 1);
|
||
setExpression(0x17, -1.0f);
|
||
field_0x1478 = cLib_getRndValue(3, 7);
|
||
}
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C82A8-809C8514 009A48 026C+00 1/0 0/0 0/0 .text beforeCrashWait__11daNpc_grA_cFPv
|
||
*/
|
||
BOOL daNpc_grA_c::beforeCrashWait(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
setExpression(0x14, -1.0f);
|
||
setMotion(0x1a, -1.0f, 0);
|
||
setLookMode(0);
|
||
mTurnMode = 0;
|
||
field_0x1472 = 2;
|
||
// fallthrough
|
||
case 2:
|
||
if (field_0x1488 == 1) {
|
||
fopAc_ac_c* p = (fopAc_ac_c*)fpcM_Search(s_subCrashed, this);
|
||
if (p != NULL) {
|
||
home.pos = current.pos = old.pos = p->current.pos;
|
||
setAngle(p->current.angle.y);
|
||
home.angle.y = current.angle.y;
|
||
field_0x1488 = 0;
|
||
}
|
||
}
|
||
|
||
if (mDamageTimer == 0) {
|
||
if (mNpcfActorManager[0].getActorP()) {
|
||
if (!chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
} else {
|
||
if (chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
}
|
||
|
||
if (mNpcfActorManager[0].getActorP()) {
|
||
setLookMode(2);
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0, -1.0f, 0);
|
||
} else {
|
||
setLookMode(0);
|
||
if (home.angle.y != mCurAngle.y) {
|
||
if (step(home.angle.y, 0x17, 0x16, 0xf)) {
|
||
field_0x1472 = 0;
|
||
}
|
||
} else {
|
||
setExpression(0x14, -1.0f);
|
||
setMotion(0x1a, -1.0f, 0);
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C8514-809C8694 009CB4 0180+00 1/0 0/0 0/0 .text crashRoll__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::crashRoll(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0x13, -1.0f, 0);
|
||
setLookMode(0);
|
||
mTurnMode = 0;
|
||
speedF = 50.0f;
|
||
field_0x1472 = 2;
|
||
// fallthrough
|
||
case 2:
|
||
if (mAcch.ChkWallHit()) {
|
||
field_0x1486 = 2;
|
||
}
|
||
field_0x14D4 = 5.0f;
|
||
mpMorf->setPlaySpeed(field_0x14D4);
|
||
mpMorf->setEndFrame(29.0f);
|
||
if (field_0x14D8 == 0x1a) {
|
||
if (field_0x14D4 >= 1.0f) {
|
||
setRollPrtcl(current.pos, 1.0f);
|
||
}
|
||
f32 a = cLib_minMaxLimit(fabsf(field_0x14D4) * 20.0f, 1.0f, 127.0f);
|
||
u32 b = a;
|
||
mCreature.startCreatureSound(Z2SE_GORON_ROLLING, b, -1);
|
||
}
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C8694-809C884C 009E34 01B8+00 1/0 0/0 0/0 .text crashRollWait__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::crashRollWait(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0x13, -1.0f, 0);
|
||
setLookMode(0);
|
||
mTurnMode = 0;
|
||
speedF = 0.0f;
|
||
field_0x1472 = 2;
|
||
// fallthrough
|
||
case 2:
|
||
field_0x14D4 = 5.0f;
|
||
mpMorf->setPlaySpeed(field_0x14D4);
|
||
mpMorf->setEndFrame(29.0f);
|
||
if (field_0x14D8 == 0x1a) {
|
||
if (field_0x14D4 >= 1.0f) {
|
||
cXyz c(0.0f, 0.0f, 0.0f);
|
||
mDoMtx_stack_c::YrotS(shape_angle.y);
|
||
mDoMtx_stack_c::multVec(&c, &c);
|
||
c += current.pos;
|
||
setRollPrtcl(c, GET_HIO(mParticleSize));
|
||
}
|
||
f32 a = cLib_minMaxLimit(fabsf(field_0x14D4) * 20.0f, 1.0f, 127.0f);
|
||
u32 b = a;
|
||
mCreature.startCreatureSound(Z2SE_GORON_ROLLING, b, -1);
|
||
}
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C884C-809C8A2C 009FEC 01E0+00 1/0 0/0 0/0 .text crashedWait__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::crashedWait(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0, -1.0f, 0);
|
||
setLookMode(0);
|
||
mTurnMode = 0;
|
||
field_0x1472 = 2;
|
||
// fallthrough
|
||
case 2:
|
||
if (field_0x1488 == 1) {
|
||
fopAc_ac_c* found = (fopAc_ac_c*)fpcM_Search(s_subCrashed, this);
|
||
if (found) {
|
||
home.pos = current.pos = old.pos = found->current.pos;
|
||
setAngle(found->current.angle.y);
|
||
home.angle.y = current.angle.y;
|
||
field_0x1488 = 0;
|
||
}
|
||
}
|
||
if (mDamageTimer == 0) {
|
||
if (mNpcfActorManager[0].getActorP() != NULL) {
|
||
if (chkFindPlayer() == 0) {
|
||
mTurnMode = 0;
|
||
}
|
||
} else if (chkFindPlayer() != 0) {
|
||
mTurnMode = 0;
|
||
}
|
||
if (mNpcfActorManager[0].getActorP() != NULL) {
|
||
setLookMode(2);
|
||
} else {
|
||
setLookMode(0);
|
||
if (home.angle.y != mCurAngle.y && step(home.angle.y, 0x17, 0x16, 0xf)) {
|
||
field_0x1472 = 0;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C8A2C-809C8BD4 00A1CC 01A8+00 1/0 0/0 0/0 .text waitBuyer__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::waitBuyer(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
if (field_0x1691 == 0 && home.angle.y == mCurAngle.y) {
|
||
setExpressionAnm(0, 1.0f);
|
||
setMotion(5, -1.0f, 0);
|
||
}
|
||
mTurnMode = 0;
|
||
field_0x1472 = 2;
|
||
// fallthrough
|
||
case 2:
|
||
if (mDamageTimer == 0) {
|
||
if (mNpcfActorManager[0].getActorP() != NULL) {
|
||
if (chkFindPlayer() == 0) {
|
||
mTurnMode = 0;
|
||
}
|
||
} else if (chkFindPlayer() != 0) {
|
||
mTurnMode = 0;
|
||
}
|
||
if (mNpcfActorManager[0].getActorP() != NULL) {
|
||
setLookMode(2);
|
||
} else {
|
||
setLookMode(0);
|
||
if (home.angle.y != mCurAngle.y && step(home.angle.y, 0x17, 0x16, 0xf)) {
|
||
setExpression(0x17, -1.0f);
|
||
setMotion(0, -1.0f, 0);
|
||
field_0x1472 = 0;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C8BD4-809C9044 00A374 0470+00 2/0 0/0 0/0 .text talk__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::talk(void*) {
|
||
int spc = 0;
|
||
BOOL r29 = 0;
|
||
int r27 = 0;
|
||
BOOL r26 = 0;
|
||
int sp8 = 0;
|
||
switch (field_0x1472)
|
||
{
|
||
case 0:
|
||
if (mDamageTimer != 0)
|
||
break;
|
||
if (mType == 4 && getMode1() == 1 &&
|
||
dComIfGs_isSwitch(mSwBit, fopAcM_GetRoomNo(this)) == 0)
|
||
{
|
||
r27 = 0xa;
|
||
if (daNpcF_chkEvtBit(0x3e)) {
|
||
dComIfGs_onSwitch(mSwBit, fopAcM_GetRoomNo(this));
|
||
setGateWalk();
|
||
}
|
||
} else {
|
||
r27 = field_0x146C;
|
||
}
|
||
initTalk(r27, NULL);
|
||
field_0x1484 = fopAcM_searchPlayerAngleY(this);
|
||
if (mType == 0xb) {
|
||
if (field_0x1691 == 0) {
|
||
daNpcF_offTmpBit(0xb);
|
||
daNpcF_offTmpBit(0xc);
|
||
}
|
||
} else if (mType == 0xa) {
|
||
if (field_0x1486 == 0) {
|
||
daNpcF_offTmpBit(0xb);
|
||
}
|
||
}
|
||
mTurnMode = 0;
|
||
field_0x1691 = 0;
|
||
field_0x1472 = 2;
|
||
// fallthrough
|
||
case 2:
|
||
if (field_0x9ea || mTwilight || mType == 5) {
|
||
r26 = 1;
|
||
if (mType == 5) {
|
||
setLookMode(0);
|
||
} else if (!mTwilight && mType != 5) {
|
||
if (mType != 7 || field_0x1690 != 2) {
|
||
setLookMode(2);
|
||
}else{
|
||
|
||
}
|
||
}
|
||
} else {
|
||
setLookMode(3);
|
||
mNpcfActorManager[0].entry(daPy_getPlayerActorClass());
|
||
if (field_0x1484 == mCurAngle.y) {
|
||
r26 = 1;
|
||
} else if (step(field_0x1484, 0x17, 0x16, 0xf)) {
|
||
setExpression(0x17, -1.0f);
|
||
if (mType == 8) {
|
||
setMotion(0x10, -1.0f, 0);
|
||
} else {
|
||
setMotion(0, -1.0f, 0);
|
||
}
|
||
mTurnMode = 0;
|
||
}
|
||
}
|
||
if (r26 && talkProc(NULL, TRUE, NULL)) {
|
||
if (mFlow.getEventId(&sp8) == 1) {
|
||
field_0x1480 =
|
||
fopAcM_createItemForPresentDemo(¤t.pos, sp8, 0, -1, -1, NULL, NULL);
|
||
if (field_0x1480 != fpcM_ERROR_PROCESS_ID_e) {
|
||
s16 r25 = dComIfGp_getEventManager().getEventIdx(this, "DEFAULT_GETITEM", 0xff);
|
||
dComIfGp_getEvent().reset(this);
|
||
fopAcM_orderChangeEventId(this, r25, 1, -1);
|
||
field_0x9ec = 1;
|
||
r29 = 1;
|
||
mOrderNewEvt = 1;
|
||
if (mType == 0xb) {
|
||
field_0x1691 = 1;
|
||
}
|
||
}
|
||
} else {
|
||
if (mType == 0xa && field_0x1486 == 0 && daNpcF_chkEvtBit(0x187)) {
|
||
dComIfGp_getEvent().reset(this);
|
||
field_0x9ec = 1;
|
||
mOrderNewEvt = 1;
|
||
mOrderEvtNo = 0xa;
|
||
changeEvent(l_resNames[l_evtGetParamList[mOrderEvtNo][1]],
|
||
l_evtNames[l_evtGetParamList[mOrderEvtNo][0]], 1, -1);
|
||
}
|
||
r29 = 1;
|
||
}
|
||
}
|
||
if (r29) {
|
||
field_0x1472 = 3;
|
||
if (field_0x9ec == 0) {
|
||
dComIfGp_event_reset();
|
||
}
|
||
field_0x9ec = 0;
|
||
}
|
||
|
||
break;
|
||
case 3:
|
||
break;
|
||
}
|
||
return r29;
|
||
}
|
||
|
||
/* 809C9044-809C9128 00A7E4 00E4+00 2/0 0/0 0/0 .text test__11daNpc_grA_cFPv */
|
||
BOOL daNpc_grA_c::test(void*) {
|
||
switch (field_0x1472) {
|
||
case 0:
|
||
speedF = 0.0f;
|
||
speed.setall(0.0f);
|
||
field_0x1472 = 2;
|
||
// fallthrough
|
||
|
||
case 2:
|
||
if (GET_HIO(mNpcFParams.face_expression) != mExpression) {
|
||
setExpression(GET_HIO(mNpcFParams.face_expression), GET_HIO(mNpcFParams.morf_frame));
|
||
}
|
||
setMotion(GET_HIO(mNpcFParams.motion), GET_HIO(mNpcFParams.morf_frame), 0);
|
||
setLookMode(GET_HIO(mNpcFParams.look_mode));
|
||
mOrderEvtNo = 0;
|
||
attention_info.flags = 0;
|
||
case 1:
|
||
case 3:
|
||
break;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
/* 809C9128-809C9148 00A8C8 0020+00 1/0 0/0 0/0 .text daNpc_grA_Create__FPv */
|
||
static BOOL daNpc_grA_Create(void* i_this) {
|
||
return ((daNpc_grA_c*)i_this)->create();
|
||
}
|
||
|
||
/* 809C9148-809C9168 00A8E8 0020+00 1/0 0/0 0/0 .text daNpc_grA_Delete__FPv */
|
||
static BOOL daNpc_grA_Delete(void* i_this) {
|
||
return ((daNpc_grA_c*)i_this)->Delete();
|
||
}
|
||
|
||
/* 809C9168-809C9188 00A908 0020+00 1/0 0/0 0/0 .text daNpc_grA_Execute__FPv */
|
||
static BOOL daNpc_grA_Execute(void* i_this) {
|
||
return ((daNpc_grA_c*)i_this)->Execute();
|
||
}
|
||
|
||
/* 809C9188-809C91A8 00A928 0020+00 1/0 0/0 0/0 .text daNpc_grA_Draw__FPv */
|
||
static BOOL daNpc_grA_Draw(void* i_this) {
|
||
return ((daNpc_grA_c*)i_this)->Draw();
|
||
}
|
||
|
||
/* 809C91A8-809C91B0 00A948 0008+00 1/0 0/0 0/0 .text daNpc_grA_IsDelete__FPv */
|
||
static BOOL daNpc_grA_IsDelete(void* i_this) {
|
||
return true;
|
||
}
|
||
|
||
/* 809CB1B0-809CB1D0 -00001 0020+00 1/0 0/0 0/0 .data daNpc_grA_MethodTable */
|
||
static actor_method_class daNpc_grA_MethodTable = {
|
||
(process_method_func)daNpc_grA_Create,
|
||
(process_method_func)daNpc_grA_Delete,
|
||
(process_method_func)daNpc_grA_Execute,
|
||
(process_method_func)daNpc_grA_IsDelete,
|
||
(process_method_func)daNpc_grA_Draw,
|
||
};
|
||
|
||
/* 809CB1D0-809CB200 -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_GRA */
|
||
extern actor_process_profile_definition g_profile_NPC_GRA = {
|
||
fpcLy_CURRENT_e, // mLayerID
|
||
7, // mListID
|
||
fpcPi_CURRENT_e, // mListPrio
|
||
PROC_NPC_GRA, // mProcName
|
||
&g_fpcLf_Method.base, // sub_method
|
||
sizeof(daNpc_grA_c), // mSize
|
||
0, // mSizeOther
|
||
0, // mParameters
|
||
&g_fopAc_Method.base, // sub_method
|
||
306, // mPriority
|
||
&daNpc_grA_MethodTable, // sub_method
|
||
0x00044100, // mStatus
|
||
fopAc_NPC_e, // mActorType
|
||
fopAc_CULLBOX_CUSTOM_e, // cullType
|
||
};
|
||
|
||
AUDIO_INSTANCES;
|