tp/src/d/actor/d_a_npc_grs.cpp

1392 lines
42 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file d_a_npc_grs.cpp
*
*/
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_npc_grs.h"
#include "d/d_debug_viewer.h"
#include "d/actor/d_a_tag_push.h"
#include "Z2AudioLib/Z2Instances.h"
enum Event_Cut_Nums {
NUM_EVT_CUTS_e = 2,
};
enum Animation {
/* 0x00 */ ANM_NONE,
/* 0x01 */ ANM_UNK_1,
/* 0x02 */ ANM_UNK_2,
/* 0x03 */ ANM_UNK_3,
/* 0x04 */ ANM_UNK_4,
/* 0x05 */ ANM_UNK_5,
/* 0x06 */ ANM_UNK_6,
/* 0x07 */ ANM_UNK_7,
};
enum LookMode {
/* -1 */ LOOK_MODE_NONE = -1,
/* 0x00 */ LOOK_MODE_UNK_0,
/* 0x01 */ LOOK_MODE_SNAP,
/* 0x02 */ LOOK_MODE_UNK_2,
/* 0x03 */ LOOK_MODE_UNK_3,
/* 0x04 */ LOOK_MODE_UNK_4,
};
/* 809E7FE4-809E7FF4 000020 0010+00 1/1 0/0 0/0 .data l_bmdGetParamList */
static daNpc_GetParam1 l_bmdGetParamList[2] = {
{16, 0},
{17, 0},
};
/* 809E7FF4-809E8034 000030 0040+00 1/2 0/0 0/0 .data l_bckGetParamList */
static daNpc_GetParam1 l_bckGetParamList[8] = {
{-1, 0},
{8, 0},
{7, 0},
{9, 0},
{13, 0},
{11, 0},
{12, 0},
{10, 0},
};
/* 809E8034-809E804C 000070 0018+00 1/1 0/0 0/0 .data l_btpGetParamList */
static daNpc_GetParam1 l_btpGetParamList[3] = {
{23, 0},
{24, 0},
{25, 0},
};
/* 809E804C-809E8054 000088 0008+00 1/2 0/0 0/0 .data l_btkGetParamList */
static daNpc_GetParam1 l_btkGetParamList[1] = {
{20, 0},
};
/* 809E8054-809E8064 000090 0010+00 0/1 0/0 0/0 .data l_evtGetParamList */
static daNpc_GetParam1 l_evtGetParamList[2] = {
{0, 0},
{1, 0},
};
/* 809E8064-809E8070 0000A0 000C+00 1/0 0/0 0/0 .data l_loadRes_GRSa */
static int l_loadRes_GRSa[3] = {0, -1, -1};
/* 809E8070-809E807C 0000AC 000C+00 1/0 0/0 0/0 .data l_loadRes_GRS0 */
static int l_loadRes_GRS0[3] = {0, -1, -1};
/* 809E807C-809E8084 -00001 0008+00 2/2 0/0 0/0 .data l_loadRes_list */
static int* l_loadRes_list[2] = {
(int*)&l_loadRes_GRSa,
(int*)&l_loadRes_GRS0,
};
/* 809E8084-809E8088 -00001 0004+00 6/8 0/0 0/0 .data l_resNames */
static char* l_resNames[1] = {
"grS",
};
/* 809E8088-809E8090 -00001 0008+00 0/1 0/0 0/0 .data l_evtNames */
static char* l_evtNames[2] = {
NULL,
"PUSHOUT",
};
/* 809E8090-809E8094 -00001 0004+00 0/1 0/0 0/0 .data l_myName */
static char* l_myName = "grS";
/* 809E8284-809E8288 000054 0004+00 1/1 0/0 0/0 .bss l_HIO */
static NPC_GRS_HIO_CLASS l_HIO;
/* 809E8094-809E809C -00001 0008+00 0/1 0/0 0/0 .data mEvtCutNameList__11daNpc_grS_c */
char* daNpc_grS_c::mEvtCutNameList[2] = {
"",
"PUSHOUT",
};
daNpc_grS_c::cutFunc daNpc_grS_c::mEvtCutList[2] = {
NULL,
&daNpc_grS_c::cutPushOut,
};
/* 809E40CC-809E4250 0000EC 0184+00 1/1 0/0 0/0 .text __ct__11daNpc_grS_cFv */
daNpc_grS_c::daNpc_grS_c() {
}
/* 809E42E0-809E44E0 000300 0200+00 1/0 0/0 0/0 .text __dt__11daNpc_grS_cFv */
daNpc_grS_c::~daNpc_grS_c() {
for (int i = 0; l_loadRes_list[mType][i] >= 0; i++) {
dComIfG_resDelete(&mPhases[i], l_resNames[l_loadRes_list[mType][i]]);
}
if (heap != NULL) {
mAnm_p->stopZelAnime();
}
#if DEBUG
if (mpHIO != NULL) {
mpHIO->removeHIO();
}
#endif
}
/* ############################################################################################## */
/* 809E7DCC-809E7E38 000000 006C+00 14/14 0/0 0/0 .rodata m__17daNpc_grS_Param_c */
const daNpc_grS_HIOParam daNpc_grS_Param_c::m = {
120.0f, -3.0f, 1.0f, 600.0f, 255.0f, 120.0f, 35.0f, 60.0f,
0.0f, 0.0f, 10.0f, -10.0f, 30.0f, -30.0f, 45.0f, -45.0f,
0.6f, 12.0f,
3, 6, 5, 6,
180.0f, 500.0f, 300.0f, -300.0f,
60, 8, 0, 0, 0,
FALSE, FALSE,
};
/* 809E44E0-809E47B4 000500 02D4+00 1/1 0/0 0/0 .text create__11daNpc_grS_cFv */
int daNpc_grS_c::create() {
J3DModelData* modelData;
int loadResult;
int loadedCount;
int i;
int i_copy;
fopAcM_ct(this, daNpc_grS_c);
mType = getTypeFromParam();
if (home.angle.x != 0xffff) {
field_0xe0c = home.angle.x;
} else {
field_0xe0c = -1;
}
if (isDelete()) {
return cPhs_ERROR_e;
}
loadedCount = 0;
i = 0;
i_copy = i;
while (l_loadRes_list[mType][i] >= 0) {
// Declaring a dummy variable inside the loop scope forces r31 to be used for the stack
// pointer instead of r1. Ideally we'd declare loadedResult here instead, but that causes a
// regswap with loadedCount.
int dummy;
loadResult = dComIfG_resLoad(&mPhases[i], l_resNames[l_loadRes_list[mType][i]]);
if (loadResult == cPhs_ERROR_e || loadResult == cPhs_UNK3_e) {
return cPhs_ERROR_e;
}
if (loadResult == cPhs_COMPLEATE_e) {
loadedCount++;
}
i++;
}
if (loadedCount == i) {
if (!fopAcM_entrySolidHeap(this, createHeapCallBack, 0x3e30)) {
return cPhs_ERROR_e;
}
modelData = mAnm_p->getModel()->getModelData();
fopAcM_SetMtx(this, mAnm_p->getModel()->getBaseTRMtx());
fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f);
mSound.init(&current.pos, &eyePos, 3, 1);
#if DEBUG
mpHIO = &l_HIO;
// "Little elder Goron"
mpHIO->entryHIO("チビ長老ゴロン");
#endif
mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.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(mpHIO->m.common.weight, 0, this);
mCyl.Set(mCcDCyl);
mCyl.SetStts(&mCcStts);
mCyl.SetTgHitCallback(tgHitCallBack);
mAcch.CrrPos(dComIfG_Bgsp());
mGndChk = mAcch.m_gnd;
mGroundH = mAcch.GetGroundH();
setEnvTevColor();
setRoomNo();
reset();
Execute();
return cPhs_COMPLEATE_e;
}
return cPhs_INIT_e;
}
/* 809E47B4-809E4A9C 0007D4 02E8+00 1/1 0/0 0/0 .text CreateHeap__11daNpc_grS_cFv */
int daNpc_grS_c::CreateHeap() {
J3DModelData* mdlData_p = NULL;
J3DModel* model = NULL;
if (l_bmdGetParamList[0].fileIdx >= 0) {
mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNames[l_bmdGetParamList[0].arcIdx],
l_bmdGetParamList[0].fileIdx);
}
JUT_ASSERT(420, NULL != mdlData_p);
u32 differedDlistFlag = 0x11020284;
mAnm_p = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000,
differedDlistFlag);
if (mAnm_p != NULL && mAnm_p->getModel() == NULL) {
mAnm_p->stopZelAnime();
mAnm_p = NULL;
}
if (mAnm_p == NULL) {
return 0;
}
model = mAnm_p->getModel();
for (u16 i = 0; i < mdlData_p->getJointNum(); i++) {
mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack);
}
model->setUserArea((uintptr_t)this);
mpMatAnm = new daNpcF_MatAnm_c();
if (mpMatAnm == NULL) {
return 0;
}
mdlData_p = (J3DModelData*)dComIfG_getObjectRes(
l_resNames[l_bmdGetParamList[1].arcIdx], l_bmdGetParamList[1].fileIdx);
if (mdlData_p != NULL) {
mpModel = mDoExt_J3DModel__create(mdlData_p, 0x80000, 0x11000084);
} else {
mpModel = NULL;
}
if (!setExpressionAnm(1, 0)) {
return 0;
}
setMotionAnm(4, 0.0f);
return 1;
}
/* 809E4C58-809E4C8C 000C78 0034+00 1/1 0/0 0/0 .text Delete__11daNpc_grS_cFv */
int daNpc_grS_c::Delete() {
fpc_ProcID unusedId = fopAcM_GetID(this);
this->~daNpc_grS_c();
return 1;
}
/* 809E4C8C-809E4CAC 000CAC 0020+00 2/2 0/0 0/0 .text Execute__11daNpc_grS_cFv */
int daNpc_grS_c::Execute() {
execute();
}
/* 809E4CAC-809E4D3C 000CCC 0090+00 1/1 0/0 0/0 .text Draw__11daNpc_grS_cFv */
int daNpc_grS_c::Draw() {
J3DModelData* modelData = mAnm_p->getModel()->getModelData();
modelData->getMaterialNodePointer(2)->setMaterialAnm(mpMatAnm);
draw(chkAction(&daNpc_grS_c::test),0, mpHIO->m.common.real_shadow_size,NULL,0);
}
/* 809E4D3C-809E4F70 000D5C 0234+00 1/1 0/0 0/0 .text
* ctrlJoint__11daNpc_grS_cFP8J3DJointP8J3DModel */
int daNpc_grS_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) {
J3DJoint* joint = i_joint;
int mtxIdx = joint->getJntNo();
int local_24[3] = {1, 3, 4};
if (mtxIdx == 0) {
mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(1));
mDoMtx_stack_c::multVecZero(&mLookatPos[0]);
mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(3));
mDoMtx_stack_c::multVecZero(&mLookatPos[1]);
mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(4));
mDoMtx_stack_c::multVecZero(&mLookatPos[2]);
}
mDoMtx_stack_c::copy(i_model->getAnmMtx(mtxIdx));
switch (mtxIdx) {
case 1:
case 3:
case 4:
setLookatMtx(mtxIdx, local_24, mpHIO->m.common.neck_rotation_ratio);
break;
}
if (mtxIdx == 1) {
mDoMtx_stack_c::YrotM(-field_0x908[0].z);
mDoMtx_stack_c::ZrotM(field_0x908[0].x);
} else if (mtxIdx == 4) {
mDoMtx_stack_c::YrotM(-field_0x908[2].z);
mDoMtx_stack_c::ZrotM(field_0x908[2].x);
}
i_model->setAnmMtx(mtxIdx, mDoMtx_stack_c::get());
cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
if ((mtxIdx == 4 || mtxIdx == 8) && (mAnmFlags & 0x100)) {
J3DAnmTransform* bckTransform = mBckAnm.getBckAnm();
mBckAnm.changeBckOnly(mAnm_p->getAnm());
mAnm_p->changeAnm(bckTransform);
}
return 1;
}
/* 809E4F70-809E4F90 000F90 0020+00 1/1 0/0 0/0 .text
* createHeapCallBack__11daNpc_grS_cFP10fopAc_ac_c */
int daNpc_grS_c::createHeapCallBack(fopAc_ac_c* i_this) {
daNpc_grS_c* grS = (daNpc_grS_c*)i_this;
grS->CreateHeap();
}
/* 809E4F90-809E4FDC 000FB0 004C+00 1/1 0/0 0/0 .text ctrlJointCallBack__11daNpc_grS_cFP8J3DJointi
*/
int daNpc_grS_c::ctrlJointCallBack(J3DJoint* i_joint, int param_1) {
if (param_1 == 0) {
J3DModel* model = j3dSys.getModel();
daNpc_grS_c* grS = (daNpc_grS_c*)model->getUserArea();
if (grS != NULL) {
grS->ctrlJoint(i_joint, model);
}
}
return 1;
}
/* 809E4FDC-809E510C 000FFC 0130+00 1/0 0/0 0/0 .text setParam__11daNpc_grS_cFv */
void daNpc_grS_c::setParam() {
actionFunc oldAction = mpNextActionFn;
#if DEBUG
u32 flags = 0x42;
#else
u32 flags = 0xa;
#endif
selectAction();
if (!mTwilight && daPy_py_c::checkNowWolf()) {
flags = 0;
}
if (mpNextActionFn != oldAction) {
// BUG: i is initialized incorrectly; the loop never actually runs.
for (int i = 2; i < 2; i++) {
mActorMngrs[i].initialize();
}
}
field_0xdfc = 0;
field_0xe00 = 0;
s16 unkInt1;
s16 unkInt2;
s16 unkInt3 = 3;
s16 unkInt4 = 6;
unkInt1 = 5;
unkInt2 = 6;
attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(unkInt1, unkInt2);
attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[0];
attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(unkInt3, unkInt4);
attention_info.flags = flags;
scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale,
mpHIO->m.common.scale);
mAcchCir.SetWallR(mpHIO->m.common.width);
mAcchCir.SetWallH(mpHIO->m.common.knee_length);
gravity = mpHIO->m.common.gravity;
}
/* 809E510C-809E528C 00112C 0180+00 1/0 0/0 0/0 .text main__11daNpc_grS_cFv */
int daNpc_grS_c::main() {
u16 temp = 0xffff;
if (!doEvent()) {
doNormalAction(1);
}
if (checkHide()) {
attention_info.flags = 0;
}
if (!mpHIO->m.common.debug_mode_ON) {
if (!dComIfGp_event_runCheck() || (mOrderNewEvt && dComIfGp_getEvent().isOrderOK())) {
if (mOrderEvtNo != 0) {
eventInfo.setArchiveName(l_resNames[l_evtGetParamList[mOrderEvtNo].arcIdx]);
}
orderEvent(mIsSpeaking, l_evtNames[l_evtGetParamList[mOrderEvtNo].fileIdx], temp, 40,
0xff, 1);
}
}
if (field_0x9ee) {
mExpressionMorfOverride = 0.0f;
mMotionMorfOverride = 0.0f;
field_0x9ee = false;
}
playExpression();
playMotion();
return 1;
}
/* 809E528C-809E536C 0012AC 00E0+00 1/0 0/0 0/0 .text ctrlBtk__11daNpc_grS_cFv */
int daNpc_grS_c::ctrlBtk() {
if (mpMatAnm != NULL) {
J3DAnmTextureSRTKey* iVar2 = 0;
if (l_btkGetParamList[0].fileIdx >= 0) {
iVar2 = getTexSRTKeyAnmP(l_resNames[l_btkGetParamList[0].arcIdx],
l_btkGetParamList[0].fileIdx);
}
if (iVar2 == mBtkAnm.getBtkAnm()) {
mpMatAnm->setNowOffsetX(cM_ssin(mEyeAngle.y) * 0.02f * -1.0f);
mpMatAnm->setNowOffsetY(cM_ssin(mEyeAngle.x) * 0.02f);
mpMatAnm->onEyeMoveFlag();
return 1;
}
mpMatAnm->offEyeMoveFlag();
}
return 0;
}
/* 809E536C-809E5874 00138C 0508+00 1/0 0/0 0/0 .text setAttnPos__11daNpc_grS_cFv */
void daNpc_grS_c::setAttnPos() {
static cXyz eyeOffset(16.0f, 20.0f, 0.0f);
cXyz* this_01 = NULL;
int unusedInt1 = 0;
cXyz local_74;
cXyz local_80;
cXyz cStack_8c;
cXyz local_98;
f32 attnOffset = mpHIO->m.common.attention_offset;
f32 newZ = 0.0f;
f32 heightOff = 0.0f;
f32 widthOff = 0.0f;
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++) {
cStack_8c.set(0.0f, 0.0f, field_0x984[i] * cM_ssin(field_0x992));
mDoMtx_stack_c::multVec(&cStack_8c, &local_98);
field_0x908[i].x = -local_98.z;
field_0x908[i].z = -local_98.x;
}
cLib_chaseS(&field_0x992, 0, 0x555);
if (mLookMode == LOOK_MODE_SNAP) {
for (int i = 0; i < 3; i++) {
mLookatAngle[i].setall(0);
}
}
setMtx();
lookat();
setPrtcl();
mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(4));
mDoMtx_stack_c::multVecZero(&mHeadPos);
mDoMtx_stack_c::multVec(&eyeOffset, &eyePos);
eyeOffset.x = 0.0f;
mDoMtx_stack_c::multVec(&eyeOffset, &cStack_8c);
mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &cStack_8c);
mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &cStack_8c);
this_01 = mLookat.getAttnPos();
if (this_01 != NULL) {
local_80 = *this_01 - eyePos;
mEyeAngle.y = -mLookatAngle[2].y - mCurAngle.y;
mEyeAngle.y += cM_atan2s(local_80.x, local_80.z);
mEyeAngle.x = -cM_atan2s(local_80.y, local_80.absXZ());
} else {
mEyeAngle.y = 0;
mEyeAngle.x = 0;
}
newZ = 0.0f;
heightOff = 0.0f;
widthOff = 0.0f;
local_80.set(0.0f, 0.0f, newZ);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(mCurAngle.x, mCurAngle.y, mCurAngle.z);
mDoMtx_stack_c::multVec(&local_80, &local_74);
attention_info.position.set(local_74.x, local_74.y + attnOffset, local_74.z);
if (!mHide && mTwilight == 0) {
if (!mIsDamaged) {
mCyl.SetTgType(0xd8fbfdff);
mCyl.SetTgSPrm(31);
mCyl.OnTgNoHitMark();
} else {
mCyl.SetTgType(0);
mCyl.SetTgSPrm(0);
}
mCyl.SetC(local_74);
mCyl.SetH(mpHIO->m.common.height + heightOff);
mCyl.SetR(mpHIO->m.common.width + widthOff);
dComIfG_Ccsp()->Set(&mCyl);
}
mCyl.ClrTgHit();
}
/* 809E5874-809E5A08 001894 0194+00 1/0 0/0 0/0 .text setExpressionAnm__11daNpc_grS_cFib
*/
bool daNpc_grS_c::setExpressionAnm(int param_0, bool param_1) {
J3DAnmTransform* bck = NULL;
s32 iVar2 = 0;
mAnmFlags = mAnmFlags & ~0x1fc0;
if (l_bckGetParamList[param_0].fileIdx >= 0) {
bck = (J3DAnmTransform*)getTrnsfrmKeyAnmP(l_resNames[l_bckGetParamList[param_0].arcIdx],
l_bckGetParamList[param_0].fileIdx);
}
bool exprResult = false;
switch (param_0) {
case 0:
exprResult = setExpressionBtp(0);
break;
case 1:
exprResult = setExpressionBtp(0);
break;
case 2:
exprResult = setExpressionBtp(1);
break;
case 3:
exprResult = setExpressionBtp(2);
iVar2 = 2;
break;
default:
bck = NULL;
break;
}
if (!exprResult) {
return false;
}
if (bck == NULL) {
return true;
}
if (setBckAnm(bck, 1.0f, iVar2, 0, -1, param_1)) {
mAnmFlags |= 0x140;
mExpressionLoops = 0;
return true;
}
// "Failed to register facial expression Bck animation!"
OS_REPORT("%s: 表情Bckアニメーションの登録に失敗しました\n", __FILE__);
return false;
}
/* 809E5A08-809E5B1C 001A28 0114+00 1/0 0/0 0/0 .text setExpressionBtp__11daNpc_grS_cFi
*/
bool daNpc_grS_c::setExpressionBtp(int param_0) {
J3DAnmTexPattern* anmTexPattern = NULL;
s32 btpAnmAttr = 0;
mAnmFlags = mAnmFlags & ~0xa80;
if (l_btpGetParamList[param_0].fileIdx >= 0) {
anmTexPattern = getTexPtrnAnmP(l_resNames[l_btpGetParamList[param_0].arcIdx],
l_btpGetParamList[param_0].fileIdx);
}
switch (param_0) {
case 1:
break;
case 0:
case 2:
btpAnmAttr = 2;
break;
default:
anmTexPattern = NULL;
break;
}
if (anmTexPattern == NULL) {
return true;
}
if (setBtpAnm(anmTexPattern, mAnm_p->getModel()->getModelData(), 1.0f, btpAnmAttr)) {
mAnmFlags |= 0x280;
if (param_0 == 0) {
mAnmFlags |= 0x800;
}
return true;
}
// "Failed to register facial BTP animation!"
OS_REPORT("%s: 表情Btpアニメーションの登録に失敗しました\n", __FILE__);
return false;
}
/* 809E5B1C-809E5B48 001B3C 002C+00 1/0 0/0 0/0 .text setExpression__11daNpc_grS_cFif */
void daNpc_grS_c::setExpression(int param_0, f32 param_1) {
if (param_0 >= 0 && param_0 < 4) {
mExpression = param_0;
mExpressionMorfOverride = param_1;
mExpressionPrevPhase = -1;
mExpressionPhase = 0;
}
}
/* 809E5B48-809E5CB8 001B68 0170+00 1/0 0/0 0/0 .text setMotionAnm__11daNpc_grS_cFif */
void daNpc_grS_c::setMotionAnm(int param_0, f32 param_1) {
J3DAnmTransformKey* anmTransformKey = NULL;
J3DAnmTextureSRTKey* anmTexSRTKey = NULL;
s32 bckIdx = 0;
s32 anmMode = 2;
s32 btkAnmMode = 2;
mAnmFlags = mAnmFlags & ~0x3f;
if (l_bckGetParamList[param_0].fileIdx >= 0) {
anmTransformKey = getTrnsfrmKeyAnmP(l_resNames[l_bckGetParamList[param_0].arcIdx],
l_bckGetParamList[param_0].fileIdx);
}
switch (param_0) {
case 5:
case 6:
case 7:
anmMode = 0;
break;
case 4:
break;
default:
anmTransformKey = NULL;
anmTexSRTKey = NULL;
break;
}
if (l_btkGetParamList[bckIdx].fileIdx >= 0) {
anmTexSRTKey = getTexSRTKeyAnmP(l_resNames[l_btkGetParamList[bckIdx].arcIdx],
l_btkGetParamList[bckIdx].fileIdx);
}
if (anmTexSRTKey != NULL) {
if (setBtkAnm(anmTexSRTKey, mAnm_p->getModel()->getModelData(), 1.0f, btkAnmMode)) {
mAnmFlags |= 0x12;
}
}
if (anmTransformKey != NULL && setMcaMorfAnm(anmTransformKey, 1.0f, param_1, anmMode, 0, -1)) {
mAnmFlags |= 0x9;
mMotionLoops = 0;
}
}
/* 809E5CB8-809E5CFC 001CD8 0044+00 1/0 0/0 0/0 .text setMotion__11daNpc_grS_cFifi */
void daNpc_grS_c::setMotion(int param_0, f32 param_1, int param_2) {
s16 param_0_copy = param_0;
if ((param_2 != 0 || mMotion != param_0_copy) && param_0 >= 0 && param_0 < 4) {
mMotion = param_0_copy;
mMotionMorfOverride = param_1;
mMotionPrevPhase = -1;
mMotionPhase = 0;
}
}
/* 809E5CFC-809E5D04 001D1C 0008+00 1/0 0/0 0/0 .text drawDbgInfo__11daNpc_grS_cFv */
int daNpc_grS_c::drawDbgInfo() {
#if DEBUG
if (mpHIO->m.common.debug_info_ON) {
cXyz acStack_48;
f32 distMax1 = dComIfGp_getAttention()
->getDistTable(attention_info.distances[fopAc_attn_SPEAK_e])
.mDistMax;
f32 distMax2 = dComIfGp_getAttention()
->getDistTable(attention_info.distances[fopAc_attn_TALK_e])
.mDistMax;
s16 targetAngleX = cLib_targetAngleX(&current.pos, &eyePos);
s16 targetAngleY = cLib_targetAngleY(&current.pos, &eyePos);
dDbVw_drawCircleOpa(attention_info.position, distMax1,
(GXColor){0x0, 0xc8, 0x0, 0xff}, 1, 12);
dDbVw_drawCircleOpa(attention_info.position, distMax2,
(GXColor){0xc8, 0x0, 0x0, 0xff}, 1, 12);
if (mpHIO->m.common.fov != 180.0f) {
cXyz cStack_54(0.0f, 0.0f, mpHIO->m.common.search_distance);
mDoMtx_stack_c::transS(attention_info.position);
mDoMtx_stack_c::YrotM(mHeadAngle.y);
mDoMtx_stack_c::YrotM(cM_deg2s(-mpHIO->m.common.fov));
mDoMtx_stack_c::multVec(&cStack_54, &acStack_48);
dDbVw_drawLineOpa(attention_info.position, acStack_48, (GXColor){0x0, 0x0, 0xc8, 0xff},
1, 12);
mDoMtx_stack_c::transS(attention_info.position);
mDoMtx_stack_c::YrotM(mHeadAngle.y);
mDoMtx_stack_c::YrotM(cM_deg2s(mpHIO->m.common.fov));
mDoMtx_stack_c::multVec(&cStack_54, &acStack_48);
dDbVw_drawLineOpa(attention_info.position, acStack_48, (GXColor){0x0, 0x0, 0xc8, 0xff},
1, 12);
}
dDbVw_drawCircleOpa(attention_info.position, mpHIO->m.common.search_distance,
(GXColor){0x0, 0x0, 0xc8, 0xff}, 1, 12);
dDbVw_drawSphereXlu(eyePos, 18.0f, (GXColor){0x80, 0x80, 0x80, 0xa0}, 1);
dDbVw_drawSphereXlu(mLookPos, 18.0f, (GXColor){0x80, 0x80, 0x80, 0xa0}, 1);
int idx = getDistTableIdx(field_0xdfc, field_0xe00);
distMax1 = dComIfGp_getAttention()->getDistTable(idx).mDistMax;
dDbVw_drawCircleOpa(attention_info.position, distMax1,
(GXColor){0xc8, 0xc8, 0xc8, 0xff}, 1, 12);
}
#endif
return 0;
}
/* 809E5D04-809E5DB4 001D24 00B0+00 1/0 0/0 0/0 .text drawOtherMdls__11daNpc_grS_cFv */
void daNpc_grS_c::drawOtherMdls() {
Mtx mtx;
J3DModel* model = mAnm_p->getModel();
if (mpModel != NULL) {
g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr);
mDoMtx_stack_c::copy(model->getAnmMtx(12));
cMtx_copy(mDoMtx_stack_c::get(), mtx);
mpModel->setBaseTRMtx(mtx);
mDoExt_modelUpdateDL(mpModel);
dComIfGd_addRealShadow(mShadowKey, mpModel);
}
}
/* 809E5DB4-809E5DD4 001DD4 0020+00 1/1 0/0 0/0 .text getTypeFromParam__11daNpc_grS_cFv
*/
u8 daNpc_grS_c::getTypeFromParam() {
int temp = (u8)fopAcM_GetParam(this);
switch ((u8)temp) {
case 0:
return 0;
default:
return 0;
}
}
/* 809E5DD4-809E5E58 001DF4 0084+00 1/1 0/0 0/0 .text isDelete__11daNpc_grS_cFv */
int daNpc_grS_c::isDelete() {
if (strcmp(dComIfGp_getStartStageName(), "D_MN04") == 0 && daNpcF_chkEvtBit(0x40)) {
return 1;
}
if (mType == 1 || mType == 0) {
return 0;
}
return 1;
}
/* 809E5E58-809E6000 001E78 01A8+00 1/1 0/0 0/0 .text reset__11daNpc_grS_cFv */
void daNpc_grS_c::reset() {
initialize();
mpMatAnm->initialize();
mLookat.initialize();
for (int i = 0; i < 2; i++) {
mActorMngrs[i].initialize();
}
mpNextActionFn = NULL;
mpActionFn = NULL;
field_0xdfc = 0;
field_0xe00 = 0;
field_0xe04 = 0;
field_0xe08 = 0;
mLookMode = LOOK_MODE_NONE;
mActionState = 0;
mPresentItemId = fpcM_ERROR_PROCESS_ID_e;
for (int i = 0; i < ARRAY_SIZE(mParticleIds); i++) {
mParticleIds[i] = fpcM_ERROR_PROCESS_ID_e;
}
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);
mIsSpeaking = false;
field_0x9ee = true;
}
/* 809E6000-809E6164 002020 0164+00 1/1 0/0 0/0 .text playExpression__11daNpc_grS_cFv */
void daNpc_grS_c::playExpression() {
daNpcF_anmPlayData dat0a = {ANM_UNK_1, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat0[1] = {&dat0a};
daNpcF_anmPlayData dat1a = {ANM_UNK_2, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat1b = {ANM_UNK_3, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b};
daNpcF_anmPlayData dat2a = {ANM_UNK_3, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat2[1] = {&dat2a};
daNpcF_anmPlayData dat3a = {ANM_NONE, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat3[1] = {&dat3a};
daNpcF_anmPlayData** ppDat[4] = {
pDat0, pDat1, pDat2, pDat3
};
if (mExpression >= 0 && mExpression < ARRAY_SIZE(ppDat)) {
playExpressionAnm(ppDat);
}
}
/* 809E6164-809E62F0 002184 018C+00 1/1 0/0 0/0 .text playMotion__11daNpc_grS_cFv */
void daNpc_grS_c::playMotion() {
daNpcF_anmPlayData dat0a = {ANM_UNK_4, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat0[1] = {&dat0a};
daNpcF_anmPlayData dat1a = {ANM_UNK_5, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat1b = {ANM_UNK_4, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b};
daNpcF_anmPlayData dat2a = {ANM_UNK_6, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat2b = {ANM_UNK_4, 0.0f, 0};
daNpcF_anmPlayData* pDat2[2] = {&dat2a, &dat2b};
daNpcF_anmPlayData dat3a = {ANM_UNK_7, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat3[1] = {&dat3a};
daNpcF_anmPlayData** ppDat[4] = {
pDat0,
pDat1,
pDat2,
pDat3,
};
if (mMotion >= 0 && mMotion < ARRAY_SIZE(ppDat)) {
playMotionAnm(ppDat);
}
}
/* 809E62F0-809E631C 002310 002C+00 2/2 0/0 0/0 .text
* chkAction__11daNpc_grS_cFM11daNpc_grS_cFPCvPvPv_i */
int daNpc_grS_c::chkAction(actionFunc i_func) {
return mpActionFn == i_func;
}
/* 809E631C-809E63C4 00233C 00A8+00 2/2 0/0 0/0 .text
* setAction__11daNpc_grS_cFM11daNpc_grS_cFPCvPvPv_i */
int daNpc_grS_c::setAction(actionFunc i_func) {
mActionState = 3;
if (mpActionFn != NULL) {
(this->*mpActionFn)(NULL);
}
mActionState = 0;
mpActionFn = i_func;
if (mpActionFn != NULL) {
(this->*mpActionFn)(NULL);
}
return 1;
}
/* 809E63C4-809E6444 0023E4 0080+00 1/1 0/0 0/0 .text selectAction__11daNpc_grS_cFv */
int daNpc_grS_c::selectAction() {
mpNextActionFn = NULL;
if (mpHIO->m.common.debug_mode_ON) {
mpNextActionFn = &daNpc_grS_c::test;
}
else {
(int)mType;
mpNextActionFn = &daNpc_grS_c::wait;
}
return 1;
}
/* 809E6444-809E6570 002464 012C+00 1/1 0/0 0/0 .text doNormalAction__11daNpc_grS_cFi */
void daNpc_grS_c::doNormalAction(int param_0) {
if (param_0 != 0 && hitChk2(&mCyl, 1, 0)) {
int damageTime = mCutType == 8 ? 20 : mpHIO->m.common.damage_time;
setDamage(damageTime, 3, 0);
setLookMode(1);
} else {
if (mIsDamaged && mDamageTimer == 0) {
mActionState = 0;
mIsDamaged = false;
}
}
if (field_0x9ef == 8) {
mOrderEvtNo = 1;
} else {
mOrderEvtNo = 0;
}
if (mpNextActionFn != NULL) {
if (mpActionFn == mpNextActionFn) {
(this->*mpActionFn)(NULL);
} else {
setAction(mpNextActionFn);
}
}
}
/* 809E6570-809E6854 002590 02E4+00 1/1 0/0 0/0 .text doEvent__11daNpc_grS_cFv */
int daNpc_grS_c::doEvent() {
dEvent_manager_c* eventManager = NULL;
int result = 0;
int evtCutNo;
int staffId;
if (dComIfGp_event_runCheck() != FALSE) {
eventManager = &dComIfGp_getEventManager();
if ((eventInfo.checkCommandTalk() || eventInfo.checkCommandDemoAccrpt()) &&
!mIsSpeaking)
{
mOrderNewEvt = false;
}
if (eventInfo.checkCommandTalk()) {
if (chkAction(&daNpc_grS_c::talk)) {
(this->*mpActionFn)(NULL);
} else {
if (dComIfGp_event_chkTalkXY() == FALSE || dComIfGp_evmng_ChkPresentEnd()) {
setAction(&daNpc_grS_c::talk);
}
}
result = 1;
} else {
if (mPresentItemId != fpcM_ERROR_PROCESS_ID_e) {
dComIfGp_event_setItemPartnerId(mPresentItemId);
mPresentItemId = fpcM_ERROR_PROCESS_ID_e;
}
staffId = eventManager->getMyStaffId(l_myName, NULL, 0);
if (staffId != -1) {
mStaffID = staffId;
evtCutNo = eventManager->getMyActIdx(staffId, mEvtCutNameList, 2, 0, 0);
JUT_ASSERT(0x63f, (0 <= evtCutNo) && (evtCutNo < NUM_EVT_CUTS_e));
JUT_ASSERT(0x640, NULL != mEvtCutList[evtCutNo]);
if ((this->*mEvtCutList[evtCutNo])(staffId)) {
eventManager->cutEnd(staffId);
}
result = 1;
}
if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 &&
eventManager->endCheck(mEventIdx))
{
(int)mOrderEvtNo;
dComIfGp_event_reset();
mOrderEvtNo = 0;
mEventIdx = -1;
}
}
int expression;
int motion;
int msgTimerOld = mMsgTimer;
if (ctrlMsgAnm(expression, motion, this, 0)) {
if (!field_0x9eb) {
setExpression(expression, -1.0f);
setMotion(motion, -1.0f, 0);
}
} else {
if (msgTimerOld != 0 && !field_0x9eb) {
setExpressionTalkAfter();
}
}
} else {
mMsgTimer = 0;
if (mStaffID != -1) {
mpActionFn = NULL;
mStaffID = -1;
}
}
return result;
}
/* 809E6854-809E6878 002874 0024+00 5/5 0/0 0/0 .text setLookMode__11daNpc_grS_cFi */
void daNpc_grS_c::setLookMode(int i_mode) {
if (i_mode >= 0 && i_mode < 5 && i_mode != mLookMode) {
mLookMode = i_mode;
}
}
/* 809E6878-809E6B00 002898 0288+00 1/1 0/0 0/0 .text lookat__11daNpc_grS_cFv */
void daNpc_grS_c::lookat() {
daPy_py_c* player = NULL;
J3DModel* model = mAnm_p->getModel();
s32 snap = 0;
f32 bodyAngleXMin = mpHIO->m.common.body_angleX_min;
f32 bodyAngleXMax = mpHIO->m.common.body_angleX_max;
f32 bodyAngleYMin = mpHIO->m.common.body_angleY_min;
f32 bodyAngleYMax = mpHIO->m.common.body_angleY_max;
f32 headAngleXMin = mpHIO->m.common.head_angleX_min;
f32 headAngleXMax = mpHIO->m.common.head_angleX_max;
f32 headAngleYMin = mpHIO->m.common.head_angleY_min;
f32 headAngleYMax = mpHIO->m.common.head_angleY_max;
s16 yawDiff = mCurAngle.y - mOldAngle.y;
cXyz lookatPositions[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]};
csXyz* lookatAngles[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]};
cXyz unusedXyz1;
switch (mLookMode) {
case LOOK_MODE_UNK_0:
break;
case LOOK_MODE_SNAP:
snap = 1;
break;
case LOOK_MODE_UNK_2:
case LOOK_MODE_UNK_3:
player = daPy_getPlayerActorClass();
if (mLookMode == 3) {
headAngleYMin = -80.0f;
headAngleYMax = 80.0f;
}
break;
case LOOK_MODE_UNK_4:
player = (daPy_py_c*)mActorMngrs[1].getActorP();
break;
}
if (player != NULL) {
mLookPos = player->attention_info.position;
if (mLookMode != LOOK_MODE_UNK_2 && mLookMode != LOOK_MODE_UNK_3 &&
mLookMode != LOOK_MODE_UNK_4)
{
mLookPos.y = mLookPos.y - 40.0f;
}
mLookat.setAttnPos(&mLookPos);
} else {
mLookat.setAttnPos(0);
}
mLookat.setParam(bodyAngleXMin, bodyAngleXMax, bodyAngleYMin, bodyAngleYMax, 0.0f, 0.0f, 0.0f,
0.0f, headAngleXMin, headAngleXMax, headAngleYMin, headAngleYMax, mCurAngle.y,
lookatPositions);
mLookat.calc(this, model->getBaseTRMtx(), lookatAngles, snap, yawDiff, 0);
}
/* 809E6B00-809E6B74 002B20 0074+00 1/1 0/0 0/0 .text setExpressionTalkAfter__11daNpc_grS_cFv */
void daNpc_grS_c::setExpressionTalkAfter() {
// possible bug? first case always falls through to default
switch (mExpression) {
case 1:
setExpression(2, -1.0f);
default:
setExpression(3, -1.0f);
}
}
/* 809E6B74-809E6D54 002B94 01E0+00 1/0 0/0 0/0 .text cutPushOut__11daNpc_grS_cFi */
int daNpc_grS_c::cutPushOut(int param_0) {
daTag_Push_c *actor_p = NULL;
int result = 0;
int *prm_p = NULL;
int prm = -1;
prm_p = dComIfGp_evmng_getMyIntegerP(param_0, "prm");
if (prm_p != NULL) {
prm = *prm_p;
}
if (dComIfGp_getEventManager().getIsAddvance(param_0)) {
switch (prm) {
case 0:
actor_p = (daTag_Push_c *)field_0x824.getActorP();
JUT_ASSERT(0x738, NULL != actor_p);
actor_p->pushBackPlayer(0);
break;
case 1:
setExpression(3, 0.0f);
setMotion(0, 0.0f, 1);
setLookMode(1);
initTalk(mFlowNodeNo,NULL);
setAngle(fopAcM_searchPlayerAngleY(this));
break;
}
}
switch (prm) {
case 0:
result = 1;
break;
case 1:
if (talkProc(NULL,1,NULL)) {
result = 1;
}
break;
}
return result;
}
/* 809E6D54-809E6F5C 002D74 0208+00 1/0 0/0 0/0 .text wait__11daNpc_grS_cFPv */
int daNpc_grS_c::wait(void* param_0) {
switch (mActionState) {
case 0:
setExpression(3, -1.0f);
setMotion(0, -1.0f, 0);
setLookMode(0);
mTurnMode = 0;
mActionState = 2;
case 2:
if (!mIsDamaged) {
BOOL isActorFound = NULL != mActorMngrs[0].getActorP();
BOOL isPlayerFound = chkFindPlayer2(isActorFound, shape_angle.y);
if (isPlayerFound) {
if (!isActorFound) {
mActorMngrs[0].entry(daPy_getPlayerActorClass());
mTurnMode = 0;
}
} else {
if (isActorFound) {
mActorMngrs[0].remove();
mTurnMode = 0;
}
}
if (mActorMngrs[0].getActorP() != NULL) {
setLookMode(2);
} else {
setLookMode(0);
if (home.angle.y != mCurAngle.y) {
if (step(home.angle.y, 3, 3, 15)) {
mActionState = 0;
}
}
}
if (home.angle.y == mCurAngle.y) {
fopAc_ac_c* pfVar5 = getAttnActorP(
NULL != mActorMngrs[0].getActorP(), srchAttnActor1,
mpHIO->m.common.search_distance, mpHIO->m.common.search_height,
mpHIO->m.common.search_depth, mpHIO->m.common.fov, shape_angle.y, 0x78, 1);
if (pfVar5 != NULL) {
mActorMngrs[1].entry(pfVar5);
setLookMode(4);
}
} else {
mAttnChangeTimer = 0;
}
}
break;
case 3:
default:
break;
}
return 1;
}
/* 809E6F5C-809E721C 002F7C 02C0+00 2/0 0/0 0/0 .text talk__11daNpc_grS_cFPv */
int daNpc_grS_c::talk(void* param_0) {
int unusedInt1 = 0;
BOOL result = 0;
int unkInt1 = 0;
BOOL unkFlag1 = FALSE;
int unkInt2 = 0;
switch (mActionState) {
case 0:
if (mIsDamaged) {
break;
}
if (strcmp(dComIfGp_getStartStageName(), "D_MN04") == 0 && !mIsSpeaking) {
daNpcF_offTmpBit(11);
}
unkInt1 = field_0xe0c;
mIsSpeaking = false;
initTalk(unkInt1, NULL);
mTurnMode = 0;
mActionState = 2;
case 2:
if (field_0x9ea) {
unkFlag1 = TRUE;
} else {
setLookMode(3);
mActorMngrs[0].entry(daPy_getPlayerActorClass());
if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) {
unkFlag1 = TRUE;
} else {
if (step(fopAcM_searchPlayerAngleY(this), 3, 3, 15)) {
setExpression(3, -1.0f);
setMotion(0, -1.0f, 0);
mTurnMode = 0;
}
}
}
if (unkFlag1 && talkProc(NULL, 1, NULL)) {
if (mType == 0) {
if (mFlow.getEventId(&unkInt2) == 1) {
mPresentItemId =
fopAcM_createItemForPresentDemo(&current.pos, unkInt2, 0, -1, -1, 0, 0);
if (mPresentItemId != fpcM_ERROR_PROCESS_ID_e) {
s16 eventIdx =
dComIfGp_getEventManager().getEventIdx(this, "DEFAULT_GETITEM", 0xff);
dComIfGp_getEvent().reset(this);
fopAcM_orderChangeEventId(this, eventIdx, 1, 0xffff);
mIsSpeaking = true;
field_0x9ec = true;
result = TRUE;
mOrderNewEvt = true;
}
} else {
result = TRUE;
}
} else {
result = TRUE;
}
}
if (result) {
mActionState = 3;
if (!field_0x9ec) {
dComIfGp_event_reset();
}
field_0x9ec = false;
}
break;
case 3:
default:
break;
}
return result;
}
/* 809E721C-809E7300 00323C 00E4+00 2/0 0/0 0/0 .text test__11daNpc_grS_cFPv */
int daNpc_grS_c::test(void* param_0) {
switch (mActionState) {
case 0:
speedF = 0.0f;
speed.setall(0.0f);
mActionState = 2;
case 2:
if (mpHIO->m.common.face_expression != mExpression) {
setExpression(mpHIO->m.common.face_expression, mpHIO->m.common.morf_frame);
}
setMotion(mpHIO->m.common.motion,mpHIO->m.common.morf_frame,0);
setLookMode(mpHIO->m.common.look_mode);
mOrderEvtNo = 0;
attention_info.flags = 0;
break;
case 3:
default:
break;
}
return 1;
}
/* 809E7300-809E743C 003320 013C+00 1/1 0/0 0/0 .text setPrtcl__11daNpc_grS_cFv */
void daNpc_grS_c::setPrtcl() {
static const u16 id[6] = {
dPa_RM(ID_ZI_S_GRS_SMOKE_A),
dPa_RM(ID_ZI_S_GRS_SMOKE_B),
dPa_RM(ID_ZI_S_GRS_SMOKE_C),
dPa_RM(ID_ZI_S_GRS_SMOKE_D),
dPa_RM(ID_ZI_S_GRS_SMOKE_E),
dPa_RM(ID_ZI_S_GRS_SMOKE_F),
};
static const int jointNo[6] = {4, 2, 2, 2, 2, 2};
JPABaseEmitter* emitter = NULL;
cXyz position;
cXyz scale(0.7f,0.7f,0.7f);
for (int i = 0; i < 6; i++) {
mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(jointNo[i]));
mDoMtx_stack_c::multVecZero(&position);
mParticleIds[i] = dComIfGp_particle_set(mParticleIds[i], id[i], &position, NULL, &scale);
emitter = dComIfGp_particle_getEmitter(mParticleIds[i]);
if (emitter != NULL) {
emitter->setGlobalRTMatrix(mDoMtx_stack_c::get());
}
}
}
/* 809E743C-809E745C 00345C 0020+00 1/0 0/0 0/0 .text daNpc_grS_Create__FPv */
static int daNpc_grS_Create(void* i_this) {
return ((daNpc_grS_c*)i_this)->create();
}
/* 809E745C-809E747C 00347C 0020+00 1/0 0/0 0/0 .text daNpc_grS_Delete__FPv */
static int daNpc_grS_Delete(void* i_this) {
return ((daNpc_grS_c*)i_this)->Delete();
}
/* 809E747C-809E749C 00349C 0020+00 1/0 0/0 0/0 .text daNpc_grS_Execute__FPv */
static int daNpc_grS_Execute(void* i_this) {
return ((daNpc_grS_c*)i_this)->Execute();
}
/* 809E749C-809E74BC 0034BC 0020+00 1/0 0/0 0/0 .text daNpc_grS_Draw__FPv */
static int daNpc_grS_Draw(void* i_this) {
return ((daNpc_grS_c*)i_this)->Draw();
}
/* 809E74BC-809E74C4 0034DC 0008+00 1/0 0/0 0/0 .text daNpc_grS_IsDelete__FPv */
static int daNpc_grS_IsDelete(void* i_this) {
return TRUE;
}
/* 809E80FC-809E811C -00001 0020+00 1/0 0/0 0/0 .data daNpc_grS_MethodTable */
static actor_method_class daNpc_grS_MethodTable = {
(process_method_func)daNpc_grS_Create,
(process_method_func)daNpc_grS_Delete,
(process_method_func)daNpc_grS_Execute,
(process_method_func)daNpc_grS_IsDelete,
(process_method_func)daNpc_grS_Draw,
};
/* 809E811C-809E814C -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_GRS */
extern actor_process_profile_definition g_profile_NPC_GRS = {
fpcLy_CURRENT_e, // mLayerID
7, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_NPC_GRS, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(daNpc_grS_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
313, // mPriority
&daNpc_grS_MethodTable, // sub_method
0x00044100, // mStatus
fopAc_NPC_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};
AUDIO_INSTANCES