mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-05-25 23:15:06 -04:00
2135 lines
78 KiB
C++
2135 lines
78 KiB
C++
/**
|
|
* @file d_a_npc_cdn3.cpp
|
|
*
|
|
*/
|
|
|
|
#include "d/actor/d_a_npc_cdn3.h"
|
|
#include "d/d_msg_object.h"
|
|
#include "dol2asm.h"
|
|
|
|
|
|
//
|
|
// Forward References:
|
|
//
|
|
|
|
extern "C" static void createHeapCallBack__FP10fopAc_ac_c();
|
|
extern "C" void setAction__11daNpcCdn3_cFQ211daNpcCdn3_c6Mode_e();
|
|
extern "C" void callInit__11daNpcCdn3_cFv();
|
|
extern "C" void callExecute__11daNpcCdn3_cFv();
|
|
extern "C" void initWait__11daNpcCdn3_cFv();
|
|
extern "C" void executeWait__11daNpcCdn3_cFv();
|
|
extern "C" void initPath__11daNpcCdn3_cFv();
|
|
extern "C" void executePath__11daNpcCdn3_cFv();
|
|
extern "C" void __dt__8cM3dGPlaFv();
|
|
extern "C" void __dt__4cXyzFv();
|
|
extern "C" void initTalk__11daNpcCdn3_cFv();
|
|
extern "C" void executeTalk__11daNpcCdn3_cFv();
|
|
extern "C" void initEscape__11daNpcCdn3_cFv();
|
|
extern "C" void executeEscape__11daNpcCdn3_cFv();
|
|
extern "C" void initFear__11daNpcCdn3_cFv();
|
|
extern "C" void executeFear__11daNpcCdn3_cFv();
|
|
extern "C" void initFear2__11daNpcCdn3_cFv();
|
|
extern "C" void executeFear2__11daNpcCdn3_cFv();
|
|
extern "C" void initFight__11daNpcCdn3_cFv();
|
|
extern "C" void executeFight__11daNpcCdn3_cFv();
|
|
extern "C" void initRelief__11daNpcCdn3_cFv();
|
|
extern "C" void executeRelief__11daNpcCdn3_cFv();
|
|
extern "C" void setAngle__11daNpcCdn3_cFv();
|
|
extern "C" void pathMoveF__11daNpcCdn3_cFv();
|
|
extern "C" void ctrlMsgAnm__11daNpcCdn3_cFv();
|
|
extern "C" static void s_sub1__FPvPv();
|
|
extern "C" void searchNextScheduleTagSub__11daNpcCdn3_cFP10fopAc_ac_c();
|
|
extern "C" static void s_sub2__FPvPv();
|
|
extern "C" void searchFirstScheduleTagSub__11daNpcCdn3_cFP10fopAc_ac_c();
|
|
extern "C" void checkSchedule__11daNpcCdn3_cFv();
|
|
extern "C" void setSchedule__11daNpcCdn3_cFP15daTagSchedule_c();
|
|
extern "C" void isInShop__11daNpcCdn3_cFv();
|
|
extern "C" void isChairStyle__11daNpcCdn3_cFv();
|
|
extern "C" void isNoTurnTalk__11daNpcCdn3_cFv();
|
|
extern "C" void waita__11daNpcCdn3_cFPv();
|
|
extern "C" void talka__11daNpcCdn3_cFPv();
|
|
extern "C" void waitwall__11daNpcCdn3_cFPv();
|
|
extern "C" void talkwall__11daNpcCdn3_cFPv();
|
|
extern "C" void talkbwall__11daNpcCdn3_cFPv();
|
|
extern "C" void talkb__11daNpcCdn3_cFPv();
|
|
extern "C" void talkc__11daNpcCdn3_cFPv();
|
|
extern "C" void waitb__11daNpcCdn3_cFPv();
|
|
extern "C" void sitwaita__11daNpcCdn3_cFPv();
|
|
extern "C" void sittalka__11daNpcCdn3_cFPv();
|
|
extern "C" void sittalkab__11daNpcCdn3_cFPv();
|
|
extern "C" void sitwaitb__11daNpcCdn3_cFPv();
|
|
extern "C" void sittalkb__11daNpcCdn3_cFPv();
|
|
extern "C" void sittalkbb__11daNpcCdn3_cFPv();
|
|
extern "C" void looka__11daNpcCdn3_cFPv();
|
|
extern "C" void lookb__11daNpcCdn3_cFPv();
|
|
extern "C" void playm__11daNpcCdn3_cFPv();
|
|
extern "C" void turnr__11daNpcCdn3_cFPv();
|
|
extern "C" void turnl__11daNpcCdn3_cFPv();
|
|
extern "C" void walka__11daNpcCdn3_cFPv();
|
|
extern "C" void walkb__11daNpcCdn3_cFPv();
|
|
extern "C" void runa__11daNpcCdn3_cFPv();
|
|
extern "C" void runb__11daNpcCdn3_cFPv();
|
|
extern "C" void browsea__11daNpcCdn3_cFPv();
|
|
extern "C" void browseb__11daNpcCdn3_cFPv();
|
|
extern "C" void dance__11daNpcCdn3_cFPv();
|
|
extern "C" void ladytalka__11daNpcCdn3_cFPv();
|
|
extern "C" void ladytalkb__11daNpcCdn3_cFPv();
|
|
extern "C" void normtalka__11daNpcCdn3_cFPv();
|
|
extern "C" void normtalkb__11daNpcCdn3_cFPv();
|
|
extern "C" void sellme__11daNpcCdn3_cFPv();
|
|
extern "C" void sing__11daNpcCdn3_cFPv();
|
|
extern "C" static void daNpcCdn3_Create__FPv();
|
|
extern "C" void create__11daNpcCdn3_cFv();
|
|
extern "C" void create_init__11daNpcCdn3_cFv();
|
|
extern "C" void setMtx__11daNpcCdn3_cFv();
|
|
extern "C" void lookat__11daNpcCdn3_cFv();
|
|
extern "C" void __dt__5csXyzFv();
|
|
extern "C" static void daNpcCdn3_Delete__FPv();
|
|
extern "C" void __dt__11daNpcCdn3_cFv();
|
|
extern "C" static void daNpcCdn3_Execute__FPv();
|
|
extern "C" void execute__11daNpcCdn3_cFv();
|
|
extern "C" void checkTimeSchedule__11daNpcCdn3_cFv();
|
|
extern "C" static void daNpcCdn3_Draw__FPv();
|
|
extern "C" static bool daNpcCdn3_IsDelete__FPv();
|
|
extern "C" void __dt__10cCcD_GSttsFv();
|
|
extern "C" void __sinit_d_a_npc_cdn3_cpp();
|
|
extern "C" static void func_8097EFD8();
|
|
extern "C" static void func_8097EFE0();
|
|
extern "C" void __dt__18daNpcT_ActorMngr_cFv();
|
|
extern "C" void __dt__10daNpcCd2_cFv();
|
|
extern "C" void __dt__16dNpcLib_lookat_cFv();
|
|
extern "C" void __dt__8cM3dGCylFv();
|
|
extern "C" void __dt__8cM3dGAabFv();
|
|
extern "C" void __dt__10dCcD_GSttsFv();
|
|
extern "C" void __dt__12dBgS_AcchCirFv();
|
|
extern "C" void __dt__12dBgS_ObjAcchFv();
|
|
extern "C" extern char const* const d_a_npc_cdn3__stringBase0;
|
|
extern "C" u8 ActionTable__11daNpcCdn3_c[192];
|
|
extern "C" void* m_funcTbl__11daNpcCdn3_c[44];
|
|
extern "C" u8 m_seq00_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq01_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq02_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq03_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq04_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq05_funcTbl__11daNpcCdn3_c[48];
|
|
extern "C" u8 m_seq06_funcTbl__11daNpcCdn3_c[48];
|
|
extern "C" u8 m_seq07_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq08_funcTbl__11daNpcCdn3_c[84];
|
|
extern "C" u8 m_seq09_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq10_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq11_funcTbl__11daNpcCdn3_c[72];
|
|
extern "C" u8 m_seq12_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq13_funcTbl__11daNpcCdn3_c[72];
|
|
extern "C" u8 m_seq14_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq15_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq16_funcTbl__11daNpcCdn3_c[84];
|
|
extern "C" u8 m_seq17_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq18_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq19_funcTbl__11daNpcCdn3_c[84];
|
|
extern "C" u8 m_seq20_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq21_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq22_funcTbl__11daNpcCdn3_c[48];
|
|
extern "C" u8 m_seq23_funcTbl__11daNpcCdn3_c[84];
|
|
extern "C" u8 m_seq24_funcTbl__11daNpcCdn3_c[60];
|
|
extern "C" u8 m_seq25_funcTbl__11daNpcCdn3_c[84];
|
|
extern "C" u8 m_seq26_funcTbl__11daNpcCdn3_c[36];
|
|
extern "C" u8 m_seq27_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq28_funcTbl__11daNpcCdn3_c[36];
|
|
extern "C" u8 m_seq29_funcTbl__11daNpcCdn3_c[36];
|
|
extern "C" u8 m_seq30_funcTbl__11daNpcCdn3_c[72];
|
|
extern "C" u8 m_seq31_funcTbl__11daNpcCdn3_c[72];
|
|
extern "C" u8 m_seq32_funcTbl__11daNpcCdn3_c[84];
|
|
extern "C" u8 m_seq33_funcTbl__11daNpcCdn3_c[84];
|
|
extern "C" u8 m_seq34_funcTbl__11daNpcCdn3_c[108];
|
|
extern "C" u8 m_seq35_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq36_funcTbl__11daNpcCdn3_c[48];
|
|
extern "C" u8 m_seq37_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq38_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq39_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq40_funcTbl__11daNpcCdn3_c[36];
|
|
extern "C" u8 m_seq41_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq42_funcTbl__11daNpcCdn3_c[24];
|
|
extern "C" u8 m_seq43_funcTbl__11daNpcCdn3_c[36];
|
|
|
|
//
|
|
// External References:
|
|
//
|
|
|
|
extern "C" void mDoMtx_YrotM__FPA4_fs();
|
|
extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
|
|
extern "C" void setMorf__13mDoExt_morf_cFf();
|
|
extern "C" void modelCalc__16mDoExt_McaMorfSOFv();
|
|
extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv();
|
|
extern "C" void __ct__10fopAc_ac_cFv();
|
|
extern "C" void __dt__10fopAc_ac_cFv();
|
|
extern "C" void fopAc_IsActor__FPv();
|
|
extern "C" void fopAcM_delete__FP10fopAc_ac_c();
|
|
extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
|
|
extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff();
|
|
extern "C" void fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz();
|
|
extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c();
|
|
extern "C" void fopAcM_getPolygonAngle__FPC8cM3dGPlas();
|
|
extern "C" void fpcEx_Search__FPFPvPv_PvPv();
|
|
extern "C" void getLayerNo__14dComIfG_play_cFi();
|
|
extern "C" void isEventBit__11dSv_event_cCFUs();
|
|
extern "C" void onSwitch__12dSv_danBit_cFi();
|
|
extern "C" void reset__14dEvt_control_cFv();
|
|
extern "C" void convPId__14dEvt_control_cFUi();
|
|
extern "C" void ChkPresentEnd__16dEvent_manager_cFv();
|
|
extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla();
|
|
extern "C" void __ct__12dBgS_AcchCirFv();
|
|
extern "C" void SetWallR__12dBgS_AcchCirFf();
|
|
extern "C" void SetWall__12dBgS_AcchCirFff();
|
|
extern "C" void __dt__9dBgS_AcchFv();
|
|
extern "C" void __ct__9dBgS_AcchFv();
|
|
extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz();
|
|
extern "C" void CrrPos__9dBgS_AcchFR4dBgS();
|
|
extern "C" void SetObj__16dBgS_PolyPassChkFv();
|
|
extern "C" void __ct__10dCcD_GSttsFv();
|
|
extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
|
|
extern "C" void __ct__12dCcD_GObjInfFv();
|
|
extern "C" void __dt__12dCcD_GObjInfFv();
|
|
extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl();
|
|
extern "C" void initialize__18daNpcT_ActorMngr_cFv();
|
|
extern "C" void entry__18daNpcT_ActorMngr_cFP10fopAc_ac_c();
|
|
extern "C" void remove__18daNpcT_ActorMngr_cFv();
|
|
extern "C" void getActorP__18daNpcT_ActorMngr_cFv();
|
|
extern "C" void NpcCreate__10daNpcCd2_cFi();
|
|
extern "C" void ObjCreate__10daNpcCd2_cFi();
|
|
extern "C" void ChairCreate__10daNpcCd2_cFf();
|
|
extern "C" void isM___10daNpcCd2_cFv();
|
|
extern "C" void getAnmP__10daNpcCd2_cFii();
|
|
extern "C" void setAttention__10daNpcCd2_cFi();
|
|
extern "C" void loadResrc__10daNpcCd2_cFii();
|
|
extern "C" void removeResrc__10daNpcCd2_cFii();
|
|
extern "C" void setEnvTevCol__10daNpcCd2_cFv();
|
|
extern "C" void setRoomNo__10daNpcCd2_cFv();
|
|
extern "C" void animation__10daNpcCd2_cFi();
|
|
extern "C" void setAnm__10daNpcCd2_cFP18J3DAnmTransformKeyffiii();
|
|
extern "C" void drawShadow__10daNpcCd2_cFf();
|
|
extern "C" void drawObj__10daNpcCd2_cFiP8J3DModelf();
|
|
extern "C" void drawNpc__10daNpcCd2_cFv();
|
|
extern "C" void getEscapeTag__10daNpcCd2_cFv();
|
|
extern "C" void checkFearSituation__10daNpcCd2_cFv();
|
|
extern "C" void setPath__11PathTrace_cFiiiP4cXyzb();
|
|
extern "C" void checkPoint__11PathTrace_cF4cXyzf();
|
|
extern "C" void checkPathEnd__11PathTrace_cF4cXyzf();
|
|
extern "C" void getTargetPoint__11PathTrace_cFP3Vec();
|
|
extern "C" void setNextPoint__11PathTrace_cFR4cXyz();
|
|
extern "C" void checkObstacle__11PathTrace_cFP10fopAc_ac_c();
|
|
extern "C" void checkNowWolfEyeUp__9daPy_py_cFv();
|
|
extern "C" void dKy_getdaytime_hour__Fv();
|
|
extern "C" void dKy_getdaytime_minute__Fv();
|
|
extern "C" void dKy_getDarktime_hour__Fv();
|
|
extern "C" void dKy_getDarktime_minute__Fv();
|
|
extern "C" void dKy_getDarktime_week__Fv();
|
|
extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
|
|
extern "C" void dKy_get_dayofweek__Fv();
|
|
extern "C" void dKy_darkworld_check__Fv();
|
|
extern "C" void getActor__12dMsgObject_cFv();
|
|
extern "C" void __ct__10dMsgFlow_cFv();
|
|
extern "C" void __dt__10dMsgFlow_cFv();
|
|
extern "C" void init__10dMsgFlow_cFP10fopAc_ac_ciiPP10fopAc_ac_c();
|
|
extern "C" void doFlow__10dMsgFlow_cFP10fopAc_ac_cPP10fopAc_ac_ci();
|
|
extern "C" void __ct__16dNpcLib_lookat_cFv();
|
|
extern "C" void init__16dNpcLib_lookat_cFP8J3DModelPiP5csXyzP5csXyz();
|
|
extern "C" void action__16dNpcLib_lookat_cF4cXyz4cXyzP10fopAc_ac_cPA4_fi();
|
|
extern "C" void dbView__16dNpcLib_lookat_cFv();
|
|
extern "C" void Set__4cCcSFP8cCcD_Obj();
|
|
extern "C" void __ct__5csXyzFsss();
|
|
extern "C" void __dt__13cBgS_PolyInfoFv();
|
|
extern "C" void __dt__8cM3dGCirFv();
|
|
extern "C" void SetC__8cM3dGCylFRC4cXyz();
|
|
extern "C" void SetH__8cM3dGCylFf();
|
|
extern "C" void SetR__8cM3dGCylFf();
|
|
extern "C" void cLib_addCalc2__FPffff();
|
|
extern "C" void cLib_addCalcAngleS__FPsssss();
|
|
extern "C" void cLib_addCalcAngleS2__FPssss();
|
|
extern "C" void cLib_chaseF__FPfff();
|
|
extern "C" void cLib_targetAngleY__FPC3VecPC3Vec();
|
|
extern "C" void cLib_targetAngleY__FRC3VecRC3Vec();
|
|
extern "C" void cLib_distanceAngleS__Fss();
|
|
extern "C" void __ct__17Z2CreatureCitizenFv();
|
|
extern "C" void __dt__17Z2CreatureCitizenFv();
|
|
extern "C" void playVoice__17Z2CreatureCitizenFi();
|
|
extern "C" void __dl__FPv();
|
|
extern "C" void checkPass__12J3DFrameCtrlFf();
|
|
extern "C" void __destroy_arr();
|
|
extern "C" void __ptmf_test();
|
|
extern "C" void __ptmf_scall();
|
|
extern "C" void _savegpr_28();
|
|
extern "C" void _savegpr_29();
|
|
extern "C" void _restgpr_28();
|
|
extern "C" void _restgpr_29();
|
|
extern "C" u8 const m_cylDat__10daNpcCd2_c[68];
|
|
extern "C" extern u8 const __ptmf_null[12 + 4 /* padding */];
|
|
extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */];
|
|
extern "C" extern void* __vt__8dCcD_Cyl[36];
|
|
extern "C" extern void* __vt__9dCcD_Stts[11];
|
|
extern "C" extern void* __vt__12cCcD_CylAttr[25];
|
|
extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
|
|
extern "C" extern void* __vt__9cCcD_Stts[8];
|
|
extern "C" u8 now__14mDoMtx_stack_c[48];
|
|
extern "C" f32 Zero__4cXyz[3];
|
|
|
|
//
|
|
// Declarations:
|
|
//
|
|
|
|
/* 80978CD8-80978DD4 000078 00FC+00 1/1 0/0 0/0 .text createHeapCallBack__FP10fopAc_ac_c
|
|
*/
|
|
static int createHeapCallBack(fopAc_ac_c* param_0) {
|
|
daNpcCdn3_c* i_this = (daNpcCdn3_c*)param_0;
|
|
int rv = i_this->NpcCreate(i_this->m_type);
|
|
if (rv != 0) {
|
|
if (i_this->mObjNum != 0) {
|
|
rv = (i_this->field_0xac8 = i_this->ObjCreate(i_this->mObjNum)) != NULL;
|
|
if (!rv) {
|
|
i_this->mpMorf->stopZelAnime();
|
|
}
|
|
} else {
|
|
i_this->field_0xac8 = NULL;
|
|
}
|
|
if (i_this->isChairStyle()) {
|
|
f32 scale = Cd2_HIO_objScale(i_this->m_type);
|
|
|
|
J3DModel* model = i_this->ChairCreate(scale);
|
|
i_this->field_0xacc = model;
|
|
rv = model != 0;
|
|
if (rv == 0) {
|
|
i_this->mpMorf->stopZelAnime();
|
|
}
|
|
} else {
|
|
i_this->field_0xacc = NULL;
|
|
rv = 1;
|
|
}
|
|
}
|
|
return rv;
|
|
}
|
|
|
|
UNK_REL_DATA
|
|
|
|
/* 8097F788-8097F848 0000E0 00C0+00 1/2 0/0 0/0 .data ActionTable__11daNpcCdn3_c */
|
|
daNpcCdn3_c::actionFunc daNpcCdn3_c::ActionTable[8][2] = {
|
|
&daNpcCdn3_c::initWait,
|
|
&daNpcCdn3_c::executeWait,
|
|
&daNpcCdn3_c::initPath,
|
|
&daNpcCdn3_c::executePath,
|
|
&daNpcCdn3_c::initTalk,
|
|
&daNpcCdn3_c::executeTalk,
|
|
&daNpcCdn3_c::initEscape,
|
|
&daNpcCdn3_c::executeEscape,
|
|
&daNpcCdn3_c::initFear,
|
|
&daNpcCdn3_c::executeFear,
|
|
&daNpcCdn3_c::initFear2,
|
|
&daNpcCdn3_c::executeFear2,
|
|
&daNpcCdn3_c::initFight,
|
|
&daNpcCdn3_c::executeFight,
|
|
&daNpcCdn3_c::initRelief,
|
|
&daNpcCdn3_c::executeRelief,
|
|
};
|
|
|
|
/* 80978DD4-80978E18 000174 0044+00 9/9 0/0 0/0 .text
|
|
* setAction__11daNpcCdn3_cFQ211daNpcCdn3_c6Mode_e */
|
|
void daNpcCdn3_c::setAction(daNpcCdn3_c::Mode_e i_action) {
|
|
JUT_ASSERT(366, i_action < MODE_MAX_e);
|
|
mPrevMode = mMode;
|
|
mMode = i_action;
|
|
mAction = ActionTable[mMode];
|
|
callInit();
|
|
}
|
|
|
|
/* 80978E18-80978E40 0001B8 0028+00 1/1 0/0 0/0 .text callInit__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::callInit() {
|
|
JUT_ASSERT(408, mAction != 0);
|
|
(this->*(mAction[0]))();
|
|
}
|
|
|
|
/* 80978E40-80978E6C 0001E0 002C+00 1/1 0/0 0/0 .text callExecute__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::callExecute() {
|
|
JUT_ASSERT(421, mAction != 0);
|
|
(this->*(mAction[1]))();
|
|
}
|
|
|
|
/* 8097F848-8097F8F8 -00001 00B0+00 5/5 0/0 0/0 .data m_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc* daNpcCdn3_c::m_funcTbl[44] = {
|
|
daNpcCdn3_c::m_seq00_funcTbl, daNpcCdn3_c::m_seq01_funcTbl,
|
|
daNpcCdn3_c::m_seq02_funcTbl, daNpcCdn3_c::m_seq03_funcTbl,
|
|
daNpcCdn3_c::m_seq04_funcTbl, daNpcCdn3_c::m_seq05_funcTbl,
|
|
daNpcCdn3_c::m_seq06_funcTbl, daNpcCdn3_c::m_seq07_funcTbl,
|
|
daNpcCdn3_c::m_seq08_funcTbl, daNpcCdn3_c::m_seq09_funcTbl,
|
|
daNpcCdn3_c::m_seq10_funcTbl, daNpcCdn3_c::m_seq11_funcTbl,
|
|
daNpcCdn3_c::m_seq12_funcTbl, daNpcCdn3_c::m_seq13_funcTbl,
|
|
daNpcCdn3_c::m_seq14_funcTbl, daNpcCdn3_c::m_seq15_funcTbl,
|
|
daNpcCdn3_c::m_seq16_funcTbl, daNpcCdn3_c::m_seq17_funcTbl,
|
|
daNpcCdn3_c::m_seq18_funcTbl, daNpcCdn3_c::m_seq19_funcTbl,
|
|
daNpcCdn3_c::m_seq20_funcTbl, daNpcCdn3_c::m_seq21_funcTbl,
|
|
daNpcCdn3_c::m_seq22_funcTbl, daNpcCdn3_c::m_seq23_funcTbl,
|
|
daNpcCdn3_c::m_seq24_funcTbl, daNpcCdn3_c::m_seq25_funcTbl,
|
|
daNpcCdn3_c::m_seq26_funcTbl, daNpcCdn3_c::m_seq27_funcTbl,
|
|
daNpcCdn3_c::m_seq28_funcTbl, daNpcCdn3_c::m_seq29_funcTbl,
|
|
daNpcCdn3_c::m_seq30_funcTbl, daNpcCdn3_c::m_seq31_funcTbl,
|
|
daNpcCdn3_c::m_seq32_funcTbl, daNpcCdn3_c::m_seq33_funcTbl,
|
|
daNpcCdn3_c::m_seq34_funcTbl, daNpcCdn3_c::m_seq35_funcTbl,
|
|
daNpcCdn3_c::m_seq36_funcTbl, daNpcCdn3_c::m_seq37_funcTbl,
|
|
daNpcCdn3_c::m_seq38_funcTbl, daNpcCdn3_c::m_seq39_funcTbl,
|
|
daNpcCdn3_c::m_seq40_funcTbl, daNpcCdn3_c::m_seq41_funcTbl,
|
|
daNpcCdn3_c::m_seq42_funcTbl, daNpcCdn3_c::m_seq43_funcTbl,
|
|
};
|
|
|
|
/* 8097F904-8097F91C 00025C 0018+00 1/1 0/0 0/0 .data m_seq00_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq00_funcTbl[2] = {&daNpcCdn3_c::walka, NULL};
|
|
|
|
/* 8097F928-8097F940 000280 0018+00 1/1 0/0 0/0 .data m_seq01_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq01_funcTbl[2] = {&daNpcCdn3_c::runa, NULL};
|
|
|
|
/* 8097F94C-8097F964 0002A4 0018+00 1/1 0/0 0/0 .data m_seq02_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq02_funcTbl[2] = {&daNpcCdn3_c::waita, NULL};
|
|
|
|
/* 8097F970-8097F988 0002C8 0018+00 1/1 0/0 0/0 .data m_seq03_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq03_funcTbl[2] = {&daNpcCdn3_c::talka, NULL};
|
|
|
|
/* 8097F994-8097F9AC 0002EC 0018+00 1/1 0/0 0/0 .data m_seq04_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq04_funcTbl[2] = {&daNpcCdn3_c::runb, NULL};
|
|
|
|
/* 8097F9D0-8097FA00 000328 0030+00 1/1 0/0 0/0 .data m_seq05_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq05_funcTbl[4] = {&daNpcCdn3_c::turnr, &daNpcCdn3_c::waita,
|
|
&daNpcCdn3_c::talka, NULL};
|
|
|
|
/* 8097FA24-8097FA54 00037C 0030+00 1/1 0/0 0/0 .data m_seq06_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq06_funcTbl[4] = {&daNpcCdn3_c::turnl, &daNpcCdn3_c::waita,
|
|
&daNpcCdn3_c::talka, NULL};
|
|
|
|
/* 8097FA60-8097FA78 0003B8 0018+00 1/1 0/0 0/0 .data m_seq07_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq07_funcTbl[2] = {&daNpcCdn3_c::waitwall, NULL};
|
|
|
|
/* 8097FAC0-8097FB14 000418 0054+00 1/1 0/0 0/0 .data m_seq08_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq08_funcTbl[7] = {
|
|
&daNpcCdn3_c::talkwall,
|
|
&daNpcCdn3_c::waitwall,
|
|
&daNpcCdn3_c::talkbwall,
|
|
&daNpcCdn3_c::waitwall,
|
|
&daNpcCdn3_c::talkwall,
|
|
&daNpcCdn3_c::talkbwall,
|
|
NULL,
|
|
};
|
|
|
|
/* 8097FB20-8097FB38 000478 0018+00 1/1 0/0 0/0 .data m_seq09_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq09_funcTbl[2] = {&daNpcCdn3_c::talkb, NULL};
|
|
|
|
/* 8097FB44-8097FB5C 00049C 0018+00 1/1 0/0 0/0 .data m_seq10_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq10_funcTbl[2] = {&daNpcCdn3_c::talkc, NULL};
|
|
|
|
/* 8097FB98-8097FBE0 0004F0 0048+00 1/1 0/0 0/0 .data m_seq11_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq11_funcTbl[6] = {&daNpcCdn3_c::talka, &daNpcCdn3_c::waita,
|
|
&daNpcCdn3_c::talkb, &daNpcCdn3_c::waitb,
|
|
&daNpcCdn3_c::talkc, NULL};
|
|
|
|
/* 8097FBEC-8097FC04 000544 0018+00 1/1 0/0 0/0 .data m_seq12_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq12_funcTbl[2] = {&daNpcCdn3_c::waitb, NULL};
|
|
|
|
/* 8097FC40-8097FC88 000598 0048+00 1/1 0/0 0/0 .data m_seq13_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq13_funcTbl[6] = {
|
|
&daNpcCdn3_c::browsea, &daNpcCdn3_c::browseb, &daNpcCdn3_c::talka,
|
|
&daNpcCdn3_c::talkb, &daNpcCdn3_c::waita, NULL};
|
|
|
|
/* 8097FC94-8097FCAC 0005EC 0018+00 1/1 0/0 0/0 .data m_seq14_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq14_funcTbl[2] = {&daNpcCdn3_c::walkb, NULL};
|
|
|
|
/* 8097FCB8-8097FCD0 000610 0018+00 1/1 0/0 0/0 .data m_seq15_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq15_funcTbl[2] = {&daNpcCdn3_c::sitwaita, NULL};
|
|
|
|
/* 8097FD18-8097FD6C 000670 0054+00 1/1 0/0 0/0 .data m_seq16_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq16_funcTbl[7] = {
|
|
&daNpcCdn3_c::sittalka,
|
|
&daNpcCdn3_c::sitwaita,
|
|
&daNpcCdn3_c::sittalkab,
|
|
&daNpcCdn3_c::sitwaita,
|
|
&daNpcCdn3_c::sittalka,
|
|
&daNpcCdn3_c::sittalkab,
|
|
NULL,
|
|
};
|
|
|
|
/* 8097FD78-8097FD90 0006D0 0018+00 1/1 0/0 0/0 .data m_seq17_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq17_funcTbl[2] = {
|
|
&daNpcCdn3_c::playm,
|
|
NULL,
|
|
};
|
|
|
|
/* 8097FD9C-8097FDB4 0006F4 0018+00 1/1 0/0 0/0 .data m_seq18_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq18_funcTbl[2] = {&daNpcCdn3_c::sitwaitb, NULL};
|
|
|
|
/* 8097FDFC-8097FE50 000754 0054+00 1/1 0/0 0/0 .data m_seq19_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq19_funcTbl[7] = {
|
|
&daNpcCdn3_c::sittalkb,
|
|
&daNpcCdn3_c::sitwaitb,
|
|
&daNpcCdn3_c::sittalkbb,
|
|
&daNpcCdn3_c::sitwaitb,
|
|
&daNpcCdn3_c::sittalkb,
|
|
&daNpcCdn3_c::sittalkbb,
|
|
NULL,
|
|
};
|
|
|
|
/* 8097FE5C-8097FE74 0007B4 0018+00 1/1 0/0 0/0 .data m_seq20_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq20_funcTbl[2] = {&daNpcCdn3_c::looka, NULL};
|
|
|
|
/* 8097FE80-8097FE98 0007D8 0018+00 1/1 0/0 0/0 .data m_seq21_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq21_funcTbl[2] = {&daNpcCdn3_c::lookb, NULL};
|
|
|
|
/* 8097FEBC-8097FEEC 000814 0030+00 1/1 0/0 0/0 .data m_seq22_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq22_funcTbl[4] = {&daNpcCdn3_c::looka, &daNpcCdn3_c::lookb,
|
|
&daNpcCdn3_c::waita, NULL};
|
|
|
|
/* 8097FF34-8097FF88 00088C 0054+00 1/1 0/0 0/0 .data m_seq23_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq23_funcTbl[7] = {
|
|
&daNpcCdn3_c::talka,
|
|
&daNpcCdn3_c::waita,
|
|
&daNpcCdn3_c::talkb,
|
|
&daNpcCdn3_c::waita,
|
|
&daNpcCdn3_c::talka,
|
|
&daNpcCdn3_c::talkb,
|
|
NULL,
|
|
};
|
|
|
|
/* 8097FFB8-8097FFF4 000910 003C+00 1/1 0/0 0/0 .data m_seq24_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq24_funcTbl[5] = {
|
|
&daNpcCdn3_c::talkb, &daNpcCdn3_c::talka, &daNpcCdn3_c::talkc, &daNpcCdn3_c::waita, NULL,
|
|
};
|
|
|
|
/* 8098003C-80980090 000994 0054+00 1/1 0/0 0/0 .data m_seq25_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq25_funcTbl[7] = {
|
|
&daNpcCdn3_c::browsea,
|
|
&daNpcCdn3_c::browseb,
|
|
&daNpcCdn3_c::talka,
|
|
&daNpcCdn3_c::talkb,
|
|
&daNpcCdn3_c::talkc,
|
|
&daNpcCdn3_c::waita,
|
|
NULL,
|
|
};
|
|
|
|
/* 809800A8-809800CC 000A00 0024+00 1/1 0/0 0/0 .data m_seq26_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq26_funcTbl[3] = {
|
|
&daNpcCdn3_c::browsea,
|
|
&daNpcCdn3_c::browseb,
|
|
NULL,
|
|
};
|
|
|
|
/* 809800D8-809800F0 000A30 0018+00 1/1 0/0 0/0 .data m_seq27_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq27_funcTbl[2] = {&daNpcCdn3_c::dance, NULL};
|
|
|
|
/* 80980108-8098012C 000A60 0024+00 1/1 0/0 0/0 .data m_seq28_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq28_funcTbl[3] = {
|
|
&daNpcCdn3_c::ladytalka,
|
|
&daNpcCdn3_c::normtalka,
|
|
NULL,
|
|
};
|
|
|
|
/* 80980144-80980168 000A9C 0024+00 1/1 0/0 0/0 .data m_seq29_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq29_funcTbl[3] = {
|
|
&daNpcCdn3_c::ladytalkb,
|
|
&daNpcCdn3_c::normtalkb,
|
|
NULL,
|
|
};
|
|
|
|
/* 809801A4-809801EC 000AFC 0048+00 1/1 0/0 0/0 .data m_seq30_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq30_funcTbl[6] = {
|
|
&daNpcCdn3_c::talka, &daNpcCdn3_c::ladytalka, &daNpcCdn3_c::waita,
|
|
&daNpcCdn3_c::talkb, &daNpcCdn3_c::waita, NULL,
|
|
};
|
|
|
|
/* 80980228-80980270 000B80 0048+00 1/1 0/0 0/0 .data m_seq31_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq31_funcTbl[6] = {
|
|
&daNpcCdn3_c::waita, &daNpcCdn3_c::ladytalkb, &daNpcCdn3_c::talka,
|
|
&daNpcCdn3_c::waita, &daNpcCdn3_c::talkb, NULL,
|
|
};
|
|
|
|
/* 809802B8-8098030C 000C10 0054+00 1/1 0/0 0/0 .data m_seq32_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq32_funcTbl[7] = {
|
|
&daNpcCdn3_c::talka,
|
|
&daNpcCdn3_c::ladytalka,
|
|
&daNpcCdn3_c::waita,
|
|
&daNpcCdn3_c::talkb,
|
|
&daNpcCdn3_c::waita,
|
|
&daNpcCdn3_c::normtalka,
|
|
NULL,
|
|
};
|
|
|
|
/* 80980354-809803A8 000CAC 0054+00 1/1 0/0 0/0 .data m_seq33_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq33_funcTbl[7] = {
|
|
&daNpcCdn3_c::waita,
|
|
&daNpcCdn3_c::ladytalkb,
|
|
&daNpcCdn3_c::talka,
|
|
&daNpcCdn3_c::waita,
|
|
&daNpcCdn3_c::talkb,
|
|
&daNpcCdn3_c::normtalkb,
|
|
NULL,
|
|
};
|
|
|
|
/* 80980408-80980474 000D60 006C+00 1/1 0/0 0/0 .data m_seq34_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq34_funcTbl[9] = {
|
|
&daNpcCdn3_c::talka, &daNpcCdn3_c::ladytalka, &daNpcCdn3_c::ladytalkb,
|
|
&daNpcCdn3_c::waita, &daNpcCdn3_c::talkb, &daNpcCdn3_c::waita,
|
|
&daNpcCdn3_c::normtalka, &daNpcCdn3_c::normtalkb, NULL,
|
|
};
|
|
|
|
/* 80980480-80980498 000DD8 0018+00 1/1 0/0 0/0 .data m_seq35_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq35_funcTbl[2] = {
|
|
&daNpcCdn3_c::sellme,
|
|
NULL,
|
|
};
|
|
|
|
/* 809804BC-809804EC 000E14 0030+00 1/1 0/0 0/0 .data m_seq36_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq36_funcTbl[4] = {
|
|
&daNpcCdn3_c::ladytalkb,
|
|
&daNpcCdn3_c::talka,
|
|
&daNpcCdn3_c::waita,
|
|
NULL,
|
|
};
|
|
|
|
/* 809804F8-80980510 000E50 0018+00 1/1 0/0 0/0 .data m_seq37_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq37_funcTbl[2] = {
|
|
&daNpcCdn3_c::sing, NULL,
|
|
};
|
|
|
|
/* 8098051C-80980534 000E74 0018+00 1/1 0/0 0/0 .data m_seq38_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq38_funcTbl[2] = {
|
|
&daNpcCdn3_c::sittalka, NULL,
|
|
};
|
|
|
|
/* 80980540-80980558 000E98 0018+00 1/1 0/0 0/0 .data m_seq39_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq39_funcTbl[2] = {
|
|
&daNpcCdn3_c::sittalkab, NULL,
|
|
};
|
|
|
|
/* 80980570-80980594 000EC8 0024+00 1/1 0/0 0/0 .data m_seq40_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq40_funcTbl[3] = {
|
|
&daNpcCdn3_c::sittalka, &daNpcCdn3_c::sittalkab, NULL,
|
|
};
|
|
|
|
/* 809805A0-809805B8 000EF8 0018+00 1/1 0/0 0/0 .data m_seq41_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq41_funcTbl[2] = {
|
|
&daNpcCdn3_c::sittalkb, NULL,
|
|
};
|
|
|
|
/* 809805C4-809805DC 000F1C 0018+00 1/1 0/0 0/0 .data m_seq42_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq42_funcTbl[2] = {
|
|
&daNpcCdn3_c::sittalkbb, NULL,
|
|
|
|
};
|
|
|
|
/* 809805F4-80980618 000F4C 0024+00 1/1 0/0 0/0 .data m_seq43_funcTbl__11daNpcCdn3_c */
|
|
daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq43_funcTbl[3] = {
|
|
&daNpcCdn3_c::sittalkb, &daNpcCdn3_c::sittalkbb, NULL,
|
|
};
|
|
|
|
/* 80978E6C-80978ED0 00020C 0064+00 1/0 0/0 0/0 .text initWait__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::initWait() {
|
|
speedF = 0.0f;
|
|
field_0xb97 = 0;
|
|
field_0xb94 = 1;
|
|
(this->*(m_funcTbl[mSeqNum][field_0xb97]))(NULL);
|
|
}
|
|
|
|
/* 80978ED0-80979080 000270 01B0+00 1/0 0/0 0/0 .text executeWait__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::executeWait() {
|
|
if ((this->*(m_funcTbl[mSeqNum][field_0xb97]))(NULL) != 0) {
|
|
int newIndex;
|
|
field_0xb97 = (m_funcTbl[mSeqNum][field_0xb97 + 1] == NULL) ? 0 : field_0xb97 + 1;
|
|
field_0xb94 = 1;
|
|
if (mpMorf->getAnm() == getAnmP(8, mObjNum)) {
|
|
mCitizen.playVoice(3);
|
|
} else if (mpMorf->getAnm() == getAnmP(49, mObjNum)) {
|
|
mCitizen.playVoice(4);
|
|
} else if (mpMorf->getAnm() == getAnmP(20, mObjNum) || mpMorf->getAnm() == getAnmP(21, mObjNum)) {
|
|
mCitizen.playVoice(5);
|
|
}
|
|
}
|
|
checkSchedule();
|
|
if (checkFearSituation()) {
|
|
if (mObjNum == 2 && (m_type == 0 || m_type == 1)) {
|
|
setAction(MODE_FIGHT);
|
|
} else {
|
|
setAction(MODE_FEAR);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80979080-80979144 000420 00C4+00 1/0 0/0 0/0 .text initPath__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::initPath() {
|
|
setAnm((J3DAnmTransformKey*) getAnmP(2, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xb68 = 2;
|
|
field_0xb97 = 0;
|
|
field_0xb94 = 1;
|
|
field_0xb98 = 0;
|
|
if (mTagSched != NULL) {
|
|
mSeqNum = mTagSched->getSeqNum();
|
|
if (mSeqNum >= 0 && mSeqNum < 44) {
|
|
(this->*(m_funcTbl[mSeqNum][0]))(NULL);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80979144-809799B0 0004E4 086C+00 1/0 0/0 0/0 .text executePath__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::executePath() {
|
|
if (m_path.isPath()) {
|
|
switch (field_0xb98) {
|
|
case 0:
|
|
if (m_path.checkPoint(current.pos, speedF)) {
|
|
field_0xb74 = -1;
|
|
if (m_path.getArg0() != -1) {
|
|
field_0xb74 = getTimeMinute() + getTimeHour() * 60 + m_path.getArg0() * 10;
|
|
}
|
|
mSeqNum = m_path.getArg1();
|
|
if (m_path.checkPathEnd(current.pos, speedF)) {
|
|
if (getGroupID() != 0xff) {
|
|
if ((int)mTagSched->getStartEnd() == 1) {
|
|
setSchedule(field_0xb88);
|
|
field_0xb88 = NULL;
|
|
field_0xb95 = 1;
|
|
} else {
|
|
if (m_path.isClose()) {
|
|
m_path.setNextPoint(current.pos);
|
|
} else {
|
|
if (mSeqNum < 0 || mSeqNum >= 44) {
|
|
#ifdef DEBUG
|
|
JUT_PANIC(517, 0);
|
|
#else
|
|
OSReport_Error("城下町の町人 パス点引数設定値異常 引数1モーションシーケンス=%dが異常です。\n", mSeqNum);
|
|
#endif
|
|
}
|
|
field_0xb68 = 0;
|
|
setAction(MODE_WAIT);
|
|
}
|
|
}
|
|
checkSchedule();
|
|
} else {
|
|
if (!m_path.isClose()) {
|
|
int time = getTime();
|
|
field_0xb8c = time + field_0xb90;
|
|
current.pos.set(m_path.getPoint(0));
|
|
home.pos.set(current.pos);
|
|
old.pos.set(current.pos);
|
|
current.angle.y = cLib_targetAngleY(m_path.getPoint(0), m_path.getPoint(1));
|
|
shape_angle.y = current.angle.y;
|
|
home.angle.y = current.angle.y;
|
|
old.angle.y = current.angle.y;
|
|
m_path.setPath(getPathID(), fopAcM_GetRoomNo(this), 1, ¤t.pos,
|
|
false);
|
|
setAction(MODE_PATH);
|
|
field_0xb95 = 1;
|
|
}
|
|
}
|
|
} else {
|
|
if (mSeqNum >= 0 && mSeqNum < 44) {
|
|
field_0xb68 = 0;
|
|
field_0xb98 = 1;
|
|
} else {
|
|
if (mTagSched != NULL) {
|
|
mSeqNum = mTagSched->getSeqNum();
|
|
if (mSeqNum >= 0 && mSeqNum < 44) {
|
|
(this->*(m_funcTbl[mSeqNum][0]))(NULL);
|
|
}
|
|
}
|
|
m_path.setNextPoint(current.pos);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
if (field_0xb74 != -1) {
|
|
if ((this->*(m_funcTbl[mSeqNum][field_0xb97]))(NULL)) {
|
|
field_0xb97 = (m_funcTbl[mSeqNum][field_0xb97 + 1] == NULL) ? 0 : field_0xb97 + 1;
|
|
field_0xb94 = 1;
|
|
}
|
|
int time = getTime();
|
|
if (field_0xb74 <= time) {
|
|
if (field_0xb68 == 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(2, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xb68 = 2;
|
|
}
|
|
field_0xb97 = 0;
|
|
field_0xb94 = 1;
|
|
m_path.setNextPoint(current.pos);
|
|
field_0xb98 = 0;
|
|
}
|
|
} else {
|
|
if ((this->*(m_funcTbl[mSeqNum][field_0xb97]))(NULL)) {
|
|
if (m_funcTbl[mSeqNum][field_0xb97 + 1] == NULL) {
|
|
if (field_0xb68 == 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(2, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xb68 = 2;
|
|
}
|
|
field_0xb97 = 0;
|
|
m_path.setNextPoint(current.pos);
|
|
field_0xb98 = 0;
|
|
} else {
|
|
field_0xb97++;
|
|
}
|
|
field_0xb94 = 1;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
JUT_PANIC(598, 0);
|
|
break;
|
|
}
|
|
|
|
if (field_0xb68 == 2 || field_0xb68 == 1) {
|
|
if (!fopAcM_CheckCondition(this, 4)) {
|
|
m_path.checkObstacle(this);
|
|
}
|
|
cXyz cStack_58;
|
|
m_path.getTargetPoint(&cStack_58);
|
|
s16 sVar10 = cLib_targetAngleY(¤t.pos, &cStack_58);
|
|
cLib_addCalcAngleS2(&shape_angle.y, sVar10, 0xd, 0x600);
|
|
if (current.pos.y != old.pos.y) {
|
|
s16 sVar10 = 0;
|
|
cM3dGPla acStack_4c;
|
|
if (dComIfG_Bgsp().GetTriPla(mAcch.m_gnd, &acStack_4c) != 0) {
|
|
sVar10 = fopAcM_getPolygonAngle(&acStack_4c, shape_angle.y);
|
|
}
|
|
if (sVar10 != 0) {
|
|
field_0xb64 = current.pos.y;
|
|
}
|
|
}
|
|
if (mAcch.ChkWallHit() && current.pos.abs(old.pos) < 2.0f) {
|
|
field_0xb99++;
|
|
if (field_0xb99 > 30) {
|
|
setAction(MODE_RELIEF);
|
|
}
|
|
} else {
|
|
field_0xb99 = 0;
|
|
}
|
|
}
|
|
setAngle();
|
|
pathMoveF();
|
|
mAcch.CrrPos(dComIfG_Bgsp());
|
|
if (checkFearSituation()) {
|
|
if (mObjNum == 2 && (m_type == 0 || m_type == 1)) {
|
|
setAction(MODE_FIGHT);
|
|
} else {
|
|
setAction(MODE_FEAR);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80979A34-80979B2C 000DD4 00F8+00 1/0 0/0 0/0 .text initTalk__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::initTalk() {
|
|
field_0xb68 = 0;
|
|
m_targetAct.entry(dComIfGp_getLinkPlayer());
|
|
field_0xb92 = shape_angle.y;
|
|
field_0xb80 = mpMorf->getAnm();
|
|
field_0xb7c = mSeqNum;
|
|
JUT_ASSERT(658, 0 != m_targetAct.getActorP());
|
|
if (!isInShop() && !isNoTurnTalk()) {
|
|
int uVar2;
|
|
if (isChairStyle()) {
|
|
uVar2 = 15;
|
|
} else {
|
|
uVar2 = 2;
|
|
}
|
|
mSeqNum = uVar2;
|
|
field_0xb97 = 0;
|
|
AnmNum anmNum;
|
|
if (isChairStyle()) {
|
|
anmNum = CD2_ANM_14;
|
|
} else {
|
|
anmNum = CD2_ANM_0;
|
|
}
|
|
setAnm((J3DAnmTransformKey*)getAnmP(anmNum, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
}
|
|
field_0xb98 = 0;
|
|
}
|
|
|
|
/* 80979B2C-80979F08 000ECC 03DC+00 1/0 0/0 0/0 .text executeTalk__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::executeTalk() {
|
|
if (mpMorf->getAnm() == getAnmP(47,mObjNum)) {
|
|
if (m_type == 17) {
|
|
mCitizen.startCreatureVoiceLevel(Z2SE_WAD_A_MV_DANCE, -1);
|
|
} else if (m_type == 2) {
|
|
mCitizen.startCreatureVoiceLevel(Z2SE_MCN_A_V_DANCE, -1);
|
|
} else if (m_type == 26) {
|
|
mCitizen.startCreatureVoiceLevel(Z2SE_WCN_A_V_DANCE, -1);
|
|
}
|
|
}
|
|
switch (field_0xb98) {
|
|
case 0:
|
|
if (mIsDarkWorld || isInShop() || isNoTurnTalk()) {
|
|
field_0xb98++;
|
|
} else {
|
|
s16 actorAngle = fopAcM_searchActorAngleY(this, m_targetAct.getActorP());
|
|
if (cLib_addCalcAngleS(&shape_angle.y, actorAngle, 4, 0x800, 0x10) == 0) {
|
|
speedF = 0.0f;
|
|
field_0xb98++;
|
|
}
|
|
setAngle();
|
|
}
|
|
break;
|
|
case 1:
|
|
if (dComIfGp_event_chkTalkXY()) {
|
|
if (!dComIfGp_evmng_ChkPresentEnd()) {
|
|
break;
|
|
}
|
|
field_0xb98++;
|
|
} else {
|
|
field_0xb98++;
|
|
}
|
|
mMsgFlow.init(this, mFlowNodeNum, 0, NULL);
|
|
case 2:
|
|
if (mMsgFlow.doFlow(this, NULL, 0)) {
|
|
dComIfGp_event_reset();
|
|
m_targetAct.remove();
|
|
mSeqNum = field_0xb7c;
|
|
if (field_0xb68 != 0) {
|
|
setAction(mPrevMode);
|
|
} else {
|
|
if (!isInShop()) {
|
|
int iVar8 = 0;
|
|
if (isChairStyle()) {
|
|
iVar8 = 14;
|
|
}
|
|
setAnm((J3DAnmTransformKey*)getAnmP(iVar8, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
}
|
|
field_0xb98++;
|
|
}
|
|
} else {
|
|
int msgAnm = ctrlMsgAnm();
|
|
if (msgAnm != -1) {
|
|
mSeqNum = msgAnm;
|
|
field_0xb97 = 0;
|
|
field_0xb94 = 1;
|
|
}
|
|
JUT_ASSERT(726, m_funcTbl[mSeqNum][field_0xb97] != 0);
|
|
if ((this->*(m_funcTbl[mSeqNum][field_0xb97]))(NULL) != 0) {
|
|
field_0xb97 = (m_funcTbl[mSeqNum][field_0xb97 + 1] == NULL) ? 0 : field_0xb97 + 1;
|
|
field_0xb94 = 1;
|
|
}
|
|
}
|
|
break;
|
|
case 3:
|
|
if (cLib_addCalcAngleS(&shape_angle.y, field_0xb92, 4, 0x800, 0x10) == 0) {
|
|
setAnm((J3DAnmTransformKey*)field_0xb80, 1.0f, 12.0f, 2, 0, -1);
|
|
setAction(mPrevMode);
|
|
}
|
|
setAngle();
|
|
return;
|
|
default:
|
|
JUT_PANIC(741, 0);
|
|
}
|
|
}
|
|
|
|
/* 80979F08-8097A028 0012A8 0120+00 1/0 0/0 0/0 .text initEscape__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::initEscape() {
|
|
mEscapeTag = getEscapeTag();
|
|
JUT_ASSERT(816, mEscapeTag != 0);
|
|
JUT_ASSERT(817, mEscapeTag->getPathID() != 0xff);
|
|
m_path.setPath(mEscapeTag->getPathID(), fopAcM_GetRoomNo(this), 1, ¤t.pos, true);
|
|
JUT_ASSERT(819, m_path.isPath());
|
|
m_path.setNextPoint(current.pos);
|
|
if (mObjNum == 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(41, mObjNum), 1.0f, 0.0f, 0, 0, -1);
|
|
mCitizen.playVoice(1);
|
|
field_0xb68 = 0;
|
|
} else {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(4, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
mCitizen.playVoice(0);
|
|
field_0xb68 = 1;
|
|
}
|
|
mFlowNodeNum = 0;
|
|
dComIfGs_onSaveDunSwitch(0x3c);
|
|
}
|
|
|
|
/* 8097A028-8097A398 0013C8 0370+00 1/0 0/0 0/0 .text executeEscape__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::executeEscape() {
|
|
if (field_0xb68 == 0) {
|
|
if (mpMorf->isStop()) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(4, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
mCitizen.playVoice(0);
|
|
field_0xb68 = 1;
|
|
}
|
|
cLib_addCalcAngleS2(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 3, 0x600);
|
|
} else if (field_0xb68 == 1) {
|
|
if (fopAcM_CheckCondition(this, 4)) {
|
|
fopAcM_delete(this);
|
|
}
|
|
|
|
if (m_path.checkPoint(current.pos, speedF)) {
|
|
if (m_path.checkPathEnd(current.pos, speedF)) {
|
|
fopAcM_delete(this);
|
|
}
|
|
m_path.setNextPoint(current.pos);
|
|
}
|
|
m_path.checkObstacle(this);
|
|
cXyz cStack_40;
|
|
m_path.getTargetPoint(&cStack_40);
|
|
cLib_addCalcAngleS2(&shape_angle.y, cLib_targetAngleY(¤t.pos, &cStack_40), 3, 0x600);
|
|
if (current.pos.y != old.pos.y) {
|
|
s16 gndAngle = 0;
|
|
cM3dGPla plane;
|
|
if (dComIfG_Bgsp().GetTriPla(mAcch.m_gnd, &plane)) {
|
|
gndAngle = fopAcM_getPolygonAngle(&plane, shape_angle.y);
|
|
}
|
|
if (gndAngle != 0) {
|
|
field_0xb64 = current.pos.y;
|
|
}
|
|
}
|
|
setAngle();
|
|
pathMoveF();
|
|
mAcch.CrrPos(dComIfG_Bgsp());
|
|
if (mAcch.ChkWallHit() && current.pos.abs(old.pos) < 2.0f) {
|
|
field_0xb99++;
|
|
if (field_0xb99 > 30) {
|
|
setAction(MODE_FEAR2);
|
|
}
|
|
} else {
|
|
field_0xb99 = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 8097A398-8097A518 001738 0180+00 1/0 0/0 0/0 .text initFear__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::initFear() {
|
|
int a_anmNum = 0x26;
|
|
if (mpMorf->getAnm() == getAnmP(14, mObjNum) ||
|
|
mpMorf->getAnm() == getAnmP(15, mObjNum) ||
|
|
mpMorf->getAnm() == getAnmP(16, mObjNum))
|
|
{
|
|
a_anmNum = 0x27;
|
|
} else if (mpMorf->getAnm() == getAnmP(17, mObjNum) ||
|
|
mpMorf->getAnm() == getAnmP(18, mObjNum) ||
|
|
mpMorf->getAnm() == getAnmP(19, mObjNum))
|
|
{
|
|
a_anmNum = 0x28;
|
|
}
|
|
|
|
mSeqNum = a_anmNum;
|
|
setAnm((J3DAnmTransformKey*)getAnmP(0x29, mObjNum), 1.0f, 0.0f, 0, 0, -1);
|
|
field_0xb92 = fopAcM_searchPlayerAngleY(this);
|
|
mFlowNodeNum = 0;
|
|
speedF = 0.0f;
|
|
dComIfGs_onSaveDunSwitch(0x3c);
|
|
field_0xb68 = 0;
|
|
}
|
|
|
|
/* 8097A518-8097A60C 0018B8 00F4+00 1/0 0/0 0/0 .text executeFear__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::executeFear() {
|
|
if (mpMorf->checkFrame(1.0f)) {
|
|
mCitizen.playVoice(2);
|
|
}
|
|
if (mpMorf->isStop()) {
|
|
mObjNum = 0;
|
|
setAnm((J3DAnmTransformKey*)getAnmP(mSeqNum, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xb92 = cLib_targetAngleY(fopAcM_GetPosition_p(daPy_getPlayerActorClass()), ¤t.pos);
|
|
}
|
|
cLib_addCalcAngleS2(&shape_angle.y, field_0xb92, 3, 0x600);
|
|
}
|
|
|
|
/* 8097A60C-8097A6AC 0019AC 00A0+00 1/0 0/0 0/0 .text initFear2__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::initFear2() {
|
|
mObjNum = 0;
|
|
setAnm((J3DAnmTransformKey*)getAnmP(38, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xb92 = cLib_targetAngleY(fopAcM_GetPosition_p(daPy_getPlayerActorClass()), ¤t.pos);
|
|
mFlowNodeNum = 0;
|
|
speedF = 0.0f;
|
|
field_0xb68 = 2;
|
|
}
|
|
|
|
/* 8097A6AC-8097A724 001A4C 0078+00 1/0 0/0 0/0 .text executeFear2__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::executeFear2() {
|
|
if (mpMorf->checkFrame(1.0f)) {
|
|
mCitizen.playVoice(2);
|
|
}
|
|
if (fopAcM_CheckCondition(this, 4)) {
|
|
fopAcM_delete(this);
|
|
}
|
|
cLib_addCalcAngleS2(&shape_angle.y, field_0xb92, 3, 0x600);
|
|
}
|
|
|
|
/* 8097A724-8097A7E0 001AC4 00BC+00 1/0 0/0 0/0 .text initFight__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::initFight() {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(41, mObjNum), 1.0f, 0.0f, 0, 0, -1);
|
|
mCitizen.playVoice(1);
|
|
mFlowNodeNum = 0;
|
|
speedF = 0;
|
|
fopAcM_setCullSizeBox(this, -40.0f, -10.0f, -80.0f, 40.0f, 190.0f, 200.0f);
|
|
dComIfGs_onSaveDunSwitch(0x3c);
|
|
field_0xb68 = 0;
|
|
}
|
|
|
|
/* 8097A7E0-8097A960 001B80 0180+00 1/0 0/0 0/0 .text executeFight__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::executeFight() {
|
|
if (mpMorf->isStop()) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(42, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
}
|
|
field_0xb92 = fopAcM_searchPlayerAngleY(this);
|
|
if (mpMorf->getAnm() != getAnmP(41, mObjNum)) {
|
|
if (mpMorf->checkFrame(1.0f)) {
|
|
mCitizen.playVoice(2);
|
|
}
|
|
if (cLib_distanceAngleS(shape_angle.y, field_0xb92) > 0x600) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(44, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
} else {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(42, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
}
|
|
}
|
|
cLib_addCalcAngleS2(&shape_angle.y, field_0xb92, 3, 0x600);
|
|
}
|
|
|
|
/* 8097A960-8097A9E4 001D00 0084+00 1/0 0/0 0/0 .text initRelief__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::initRelief() {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(0, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
speedF = 0.0f;
|
|
field_0xb92 = shape_angle.y + 0x8000;
|
|
field_0xb68 = 2;
|
|
}
|
|
|
|
/* 8097A9E4-8097ABDC 001D84 01F8+00 1/0 0/0 0/0 .text executeRelief__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::executeRelief() {
|
|
if (getGroupID() == 0xff && fopAcM_CheckCondition(this, 4)) {
|
|
int time = getTime();
|
|
field_0xb8c = time + field_0xb90;
|
|
current.pos.set(m_path.getPoint(0));
|
|
home.pos.set(current.pos);
|
|
old.pos.set(current.pos);
|
|
current.angle.y = cLib_targetAngleY(m_path.getPoint(0), m_path.getPoint(1));
|
|
shape_angle.y = current.angle.y;
|
|
home.angle.y = current.angle.y;
|
|
old.angle.y = current.angle.y;
|
|
m_path.setPath(getPathID(), fopAcM_GetRoomNo(this), 1, ¤t.pos, false);
|
|
setAction(MODE_PATH);
|
|
field_0xb95 = 1;
|
|
}
|
|
if (checkFearSituation()) {
|
|
if (mObjNum == 2 && (m_type == 0 || m_type == 1)) {
|
|
setAction(MODE_FIGHT);
|
|
} else {
|
|
setAction(MODE_FEAR);
|
|
}
|
|
}
|
|
cLib_addCalcAngleS2(&shape_angle.y, field_0xb92, 3, 0x600);
|
|
}
|
|
|
|
/* 8097ABDC-8097ABE8 001F7C 000C+00 3/3 0/0 0/0 .text setAngle__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::setAngle() {
|
|
current.angle.y = shape_angle.y;
|
|
}
|
|
|
|
/* 8097ABE8-8097AF14 001F88 032C+00 2/2 0/0 0/0 .text pathMoveF__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::pathMoveF() {
|
|
f32 walkSpeed = 0.0f;
|
|
f32 anmSpeed = 0.0f;
|
|
cXyz* movePos = mStts.GetCCMoveP();
|
|
if (field_0xb68 == 2) {
|
|
walkSpeed = Cd2_HIO_walkMaxSpeed(m_type);
|
|
anmSpeed = Cd2_HIO_walkAnmPlaySpeed(m_type);
|
|
|
|
cLib_chaseF(&field_0xb5c, 0.8f, 0.05f);
|
|
setSpeed(&field_0xb60, 0.7f, walkSpeed, 0);
|
|
setSpeed(&speedF, 0.7f, walkSpeed, 1);
|
|
} else if (field_0xb68 == 1) {
|
|
walkSpeed = Cd2_HIO_maxSpeed(m_type);
|
|
anmSpeed = Cd2_HIO_anmPlaySpeed(m_type);
|
|
if (mMode == MODE_ESCAPSE) {
|
|
walkSpeed *= 1.5f;
|
|
anmSpeed *= 1.5f;
|
|
}
|
|
cLib_chaseF(&field_0xb5c, 1.0, 0.05f);
|
|
setSpeed(&field_0xb60, 0.7f, walkSpeed, 0);
|
|
setSpeed(&speedF, 0.7f, walkSpeed, 1);
|
|
} else if (field_0xb68 == 0) {
|
|
cLib_chaseF(&field_0xb5c, 0.0, 0.05f);
|
|
cLib_chaseF(&field_0xb60, 0.0f, 1.5f);
|
|
cLib_chaseF(&speedF, 0.0f, 1.5f);
|
|
}
|
|
cXyz targetPoint;
|
|
m_path.getTargetPoint(&targetPoint);
|
|
if (cLib_distanceAngleS(shape_angle.y, cLib_targetAngleY(¤t.pos, &targetPoint)) >= 0x2000) {
|
|
cLib_chaseF(&field_0xb5c, 0.0f, 0.05f);
|
|
cLib_chaseF(&field_0xb60, 0.0f, 1.2f);
|
|
cLib_chaseF(&speedF, 0.0f, 1.2f);
|
|
}
|
|
fopAcM_posMoveF(this, movePos);
|
|
if (field_0xb68 != 0) {
|
|
walkSpeed = field_0xb60 / walkSpeed;
|
|
if (walkSpeed > 1.0f) {
|
|
walkSpeed = 1.0f;
|
|
}
|
|
f32 playSpeed = anmSpeed * walkSpeed;
|
|
if (playSpeed < 0.6f) {
|
|
playSpeed = 0.6f;
|
|
}
|
|
mpMorf->setPlaySpeed(playSpeed);
|
|
}
|
|
}
|
|
|
|
/* 8097AF14-8097AFE0 0022B4 00CC+00 1/1 0/0 0/0 .text ctrlMsgAnm__11daNpcCdn3_cFv */
|
|
int daNpcCdn3_c::ctrlMsgAnm() {
|
|
int rv = -1;
|
|
if (!eventInfo.checkCommandTalk()) {
|
|
return -1;
|
|
}
|
|
if (dComIfGp_event_getTalkPartner() == this) {
|
|
msg_class* msg_p = dMsgObject_c::getActor();
|
|
JUT_ASSERT(1524, 0 != msg_p);
|
|
if (msg_p->mode == 2 || msg_p->mode == 3) {
|
|
mMsgIndex = -1;
|
|
} else if (msg_p->mode == 6) {
|
|
if (msg_p->msg_idx != mMsgIndex) {
|
|
rv = dComIfGp_getMesgAnimeAttrInfo();
|
|
mMsgIndex = msg_p->msg_idx;
|
|
}
|
|
} else {
|
|
mMsgIndex = -1;
|
|
}
|
|
} else {
|
|
mMsgIndex = -1;
|
|
}
|
|
return rv;
|
|
}
|
|
|
|
/* 8097AFE0-8097B04C 002380 006C+00 1/1 0/0 0/0 .text s_sub1__FPvPv */
|
|
static void* s_sub1(void* param_1, void* param_2) {
|
|
if (fopAcM_IsActor(param_1) && fopAcM_GetName(param_1) == PROC_Tag_Schedule &&
|
|
static_cast<daNpcCdn3_c*>(param_2)->searchNextScheduleTagSub(
|
|
static_cast<fopAc_ac_c*>(param_1)))
|
|
{
|
|
return param_1;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 8097B04C-8097B128 0023EC 00DC+00 1/1 0/0 0/0 .text
|
|
* searchNextScheduleTagSub__11daNpcCdn3_cFP10fopAc_ac_c */
|
|
bool daNpcCdn3_c::searchNextScheduleTagSub(fopAc_ac_c* param_1) {
|
|
if (getGroupID() == ((daTagSchedule_c*)param_1)->getGroupID()) {
|
|
int uVar3 = mTagSched->getStartTime();
|
|
uVar3 = (u16)((uVar3 / 10) * 60 + (uVar3 % 10) * 10);
|
|
int uVar4 = ((daTagSchedule_c*)param_1)->getStartTime();
|
|
int uVar4a = (u16)((uVar4 / 10) * 60 + (uVar4 % 10) * 10);
|
|
if (uVar4a <= (int)uVar3) {
|
|
uVar4a += 24 * 60;
|
|
}
|
|
if (uVar4a > uVar3) {
|
|
if (field_0xb88 == NULL) {
|
|
field_0xb88 = (daTagSchedule_c*)param_1;
|
|
} else {
|
|
u16 uVar5 = field_0xb88->getStartTime();
|
|
int uVar5a = (u16)((uVar5 / 10) * 60 + (uVar5 % 10) * 10);
|
|
if (uVar5a <= uVar3) {
|
|
uVar5a += 24 * 60;
|
|
}
|
|
if (uVar4a < uVar5a) {
|
|
field_0xb88 = (daTagSchedule_c*)param_1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097B128-8097B194 0024C8 006C+00 1/1 0/0 0/0 .text s_sub2__FPvPv */
|
|
static void* s_sub2(void* param_1, void* param_2) {
|
|
if (fopAcM_IsActor(param_1) && fopAcM_GetName(param_1) == PROC_Tag_Schedule &&
|
|
static_cast<daNpcCdn3_c*>(param_2)->searchFirstScheduleTagSub(
|
|
static_cast<fopAc_ac_c*>(param_1)))
|
|
{
|
|
return param_1;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 8097B194-8097B288 002534 00F4+00 1/1 0/0 0/0 .text
|
|
* searchFirstScheduleTagSub__11daNpcCdn3_cFP10fopAc_ac_c */
|
|
bool daNpcCdn3_c::searchFirstScheduleTagSub(fopAc_ac_c* param_1) {
|
|
if (getGroupID() == ((daTagSchedule_c*)param_1)->getGroupID()) {
|
|
int uVar3 = ((daTagSchedule_c*)param_1)->getStartTime();
|
|
int uVar3a = (u16)((uVar3 / 10) * 60 + (uVar3 % 10) * 10);
|
|
int iVar1 = getTime();
|
|
if (mTagSched == NULL) {
|
|
mTagSched = (daTagSchedule_c*)param_1;
|
|
} else {
|
|
u8 uVar4 = mTagSched->getStartTime();
|
|
if (uVar3a > iVar1) {
|
|
if (uVar3a < uVar4) {
|
|
mTagSched = (daTagSchedule_c*)param_1;
|
|
}
|
|
} else if (uVar3a > uVar4) {
|
|
mTagSched = (daTagSchedule_c*)param_1;
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097B288-8097B38C 002628 0104+00 2/2 0/0 0/0 .text checkSchedule__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::checkSchedule() {
|
|
if (getGroupID() != 0xff && field_0xb88 != NULL) {
|
|
u16 rawStartTime = field_0xb88->getStartTime();
|
|
int schedStartTime = (u16)((rawStartTime / 10) * 60 + (rawStartTime % 10) * 10);
|
|
int currentTime = getTime();
|
|
int currentDay = getDayOfWeek();
|
|
int schedDay = field_0xb88->getWeekNum();
|
|
if (schedDay == currentDay && schedStartTime <= currentTime) {
|
|
setSchedule(field_0xb88);
|
|
field_0xb88 = NULL;
|
|
setAction(MODE_PATH);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 8097B38C-8097B5A8 00272C 021C+00 3/3 0/0 0/0 .text
|
|
* setSchedule__11daNpcCdn3_cFP15daTagSchedule_c */
|
|
void daNpcCdn3_c::setSchedule(daTagSchedule_c* param_1) {
|
|
mTagSched = param_1;
|
|
int iVar8;
|
|
if (mTagSched->getPathID() != 0xff) {
|
|
if (mTagSched->getStartEnd() == 0) {
|
|
iVar8 = 1;
|
|
} else {
|
|
if (mTagSched->getStartEnd() == 1) {
|
|
iVar8 = -1;
|
|
} else {
|
|
iVar8 = 1;
|
|
}
|
|
}
|
|
m_path.setPath(mTagSched->getPathID(), fopAcM_GetRoomNo(this), iVar8,
|
|
¤t.pos, false);
|
|
if (iVar8 == -1) {
|
|
m_path.setLastPointNum();
|
|
}
|
|
}
|
|
u16 startTime = mTagSched->getStartTime();
|
|
field_0xb8c = (startTime / 10) * 60 + (startTime % 10) * 10;
|
|
mSeqNum = mTagSched->getSeqNum();
|
|
mFlowNodeNum = mTagSched->getFlowNodeNum();
|
|
if (mSeqNum < 0 || mSeqNum >= 44) {
|
|
OSReport_Error("城下町の町人 スケジュールタグ設定値異常 引数1モーションシーケンス=%dが異常です。\n", mSeqNum);
|
|
JUT_PANIC(1825, 0);
|
|
}
|
|
if (mTagSched->getStartEnd() == 0) {
|
|
current.pos.set(m_path.getPoint(0));
|
|
home.pos.set(current.pos);
|
|
old.pos.set(current.pos);
|
|
current.angle.y = cLib_targetAngleY(m_path.getPoint(0), m_path.getPoint(1));
|
|
shape_angle.y = current.angle.y;
|
|
home.angle.y = current.angle.y;
|
|
old.angle.y = current.angle.y;
|
|
field_0xb95 = 1;
|
|
}
|
|
if (m_path.isPath()) {
|
|
setAction(MODE_PATH);
|
|
} else {
|
|
setAction(MODE_WAIT);
|
|
}
|
|
const char* dayStr = "";
|
|
switch (mTagSched->getWeekNum()) {
|
|
case 0:
|
|
dayStr = "日";
|
|
break;
|
|
case 1:
|
|
dayStr = "月";
|
|
break;
|
|
case 2:
|
|
dayStr = "火";
|
|
break;
|
|
case 3:
|
|
dayStr = "水";
|
|
break;
|
|
case 4:
|
|
dayStr = "木";
|
|
break;
|
|
case 5:
|
|
dayStr = "金";
|
|
break;
|
|
case 6:
|
|
dayStr = "土";
|
|
break;
|
|
default:
|
|
JUT_PANIC(1856, 0);
|
|
break;
|
|
}
|
|
OS_REPORT("町人スケジュールセット\n");
|
|
OS_REPORT("開始時刻: %s曜日 %d時 %d分\n", dayStr, startTime / 10, (startTime % 10) * 10);
|
|
OS_REPORT("グループID: %d\n", mTagSched->getGroupID());
|
|
OS_REPORT("レールID: %d\n", mTagSched->getPathID());
|
|
OS_REPORT("モーションシーケンス: %d\n", mSeqNum);
|
|
OS_REPORT("スタート、エンド: %d\n", mTagSched->getStartEnd());
|
|
OS_REPORT("メッセージID: %d\n", mFlowNodeNum);
|
|
}
|
|
|
|
/* 8097B5A8-8097B60C 002948 0064+00 2/2 0/0 0/0 .text isInShop__11daNpcCdn3_cFv */
|
|
inline bool daNpcCdn3_c::isInShop() {
|
|
BOOL rv = FALSE;
|
|
if (strcmp(dComIfGp_getStartStageName(), "R_SP160") == 0 && dComIfG_play_c::getLayerNo(0) <= 1) {
|
|
rv = TRUE;
|
|
}
|
|
return rv;
|
|
}
|
|
|
|
/* 8097B60C-8097B684 0029AC 0078+00 3/3 0/0 0/0 .text isChairStyle__11daNpcCdn3_cFv */
|
|
bool daNpcCdn3_c::isChairStyle() {
|
|
if (mSeqNum == 15 || mSeqNum == 16 || (mSeqNum == 17 && isM_()) ||
|
|
mSeqNum == 38 || mSeqNum == 39 || mSeqNum == 40)
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/* 8097B684-8097B6D0 002A24 004C+00 2/2 0/0 0/0 .text isNoTurnTalk__11daNpcCdn3_cFv */
|
|
bool daNpcCdn3_c::isNoTurnTalk() {
|
|
if (mSeqNum == 7 || mSeqNum == 8 || mSeqNum == 18 || mSeqNum == 19 ||
|
|
mSeqNum == 41 || mSeqNum == 42 || mSeqNum == 43)
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/* 8097B6D0-8097B754 002A70 0084+00 21/0 0/0 0/0 .text waita__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::waita(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(0, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097B754-8097B7D8 002AF4 0084+00 15/0 0/0 0/0 .text talka__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::talka(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(6, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097B7D8-8097B85C 002B78 0084+00 3/0 0/0 0/0 .text waitwall__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::waitwall(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(11, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097B85C-8097B8E0 002BFC 0084+00 2/0 0/0 0/0 .text talkwall__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::talkwall(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(12, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097B8E0-8097B964 002C80 0084+00 2/0 0/0 0/0 .text talkbwall__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::talkbwall(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(13, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097B964-8097B9E8 002D04 0084+00 12/0 0/0 0/0 .text talkb__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::talkb(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(7, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097B9E8-8097BA6C 002D88 0084+00 4/0 0/0 0/0 .text talkc__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::talkc(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(8, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097BA6C-8097BAF0 002E0C 0084+00 2/0 0/0 0/0 .text waitb__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::waitb(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(1, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097BAF0-8097BB74 002E90 0084+00 3/0 0/0 0/0 .text sitwaita__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::sitwaita(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(14, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097BB74-8097BBF8 002F14 0084+00 4/0 0/0 0/0 .text sittalka__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::sittalka(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(15, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097BBF8-8097BC7C 002F98 0084+00 4/0 0/0 0/0 .text sittalkab__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::sittalkab(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(16, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097BC7C-8097BD00 00301C 0084+00 3/0 0/0 0/0 .text sitwaitb__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::sitwaitb(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(17, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097BD00-8097BD84 0030A0 0084+00 4/0 0/0 0/0 .text sittalkb__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::sittalkb(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(18, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097BD84-8097BE08 003124 0084+00 4/0 0/0 0/0 .text sittalkbb__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::sittalkbb(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(19, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097BE08-8097BE8C 0031A8 0084+00 2/0 0/0 0/0 .text looka__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::looka(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(9, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097BE8C-8097BF10 00322C 0084+00 2/0 0/0 0/0 .text lookb__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::lookb(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(10, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097BF10-8097C070 0032B0 0160+00 1/0 0/0 0/0 .text playm__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::playm(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(34, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
if (isM_()) {
|
|
if (getType() == 4) {
|
|
mCitizen.startCreatureVoiceLevel(Z2SE_CSL_TOWN_BAND_GT_1, -1);
|
|
} else {
|
|
if (getType() == 5) {
|
|
mCitizen.startCreatureVoiceLevel(Z2SE_CSL_TOWN_BAND_GT_2, -1);
|
|
} else {
|
|
if (getType() == 6) {
|
|
mCitizen.startCreatureVoiceLevel(Z2SE_CSL_TOWN_BAND_GT_3, -1);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
mCitizen.startCreatureVoiceLevel(Z2SE_CSL_TOWN_BAND_FLUTE, -1);
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097C070-8097C12C 003410 00BC+00 1/0 0/0 0/0 .text turnr__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::turnr(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(0, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xb92 = shape_angle.y - 0x4000;
|
|
field_0xb94 = 0;
|
|
}
|
|
cLib_addCalcAngleS2(&shape_angle.y, field_0xb92, 4, 0x2000);
|
|
if (abs(field_0xb92 - shape_angle.y) <= 4) {
|
|
shape_angle.y = field_0xb92;
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097C12C-8097C1E8 0034CC 00BC+00 1/0 0/0 0/0 .text turnl__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::turnl(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(0, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xb92 = shape_angle.y + 0x4000;
|
|
field_0xb94 = 0;
|
|
}
|
|
cLib_addCalcAngleS2(&shape_angle.y, field_0xb92, 4, 0x2000);
|
|
if (abs(field_0xb92 - shape_angle.y) <= 4) {
|
|
shape_angle.y = field_0xb92;
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097C1E8-8097C250 003588 0068+00 1/0 0/0 0/0 .text walka__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::walka(void* param_0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(2, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xb68 = 2;
|
|
return 1;
|
|
}
|
|
|
|
/* 8097C250-8097C2B8 0035F0 0068+00 1/0 0/0 0/0 .text walkb__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::walkb(void* param_0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(3, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xb68 = 2;
|
|
return 1;
|
|
}
|
|
|
|
/* 8097C2B8-8097C320 003658 0068+00 1/0 0/0 0/0 .text runa__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::runa(void* param_0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(4, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xb68 = 1;
|
|
return 1;
|
|
}
|
|
|
|
/* 8097C320-8097C388 0036C0 0068+00 1/0 0/0 0/0 .text runb__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::runb(void* param_0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(5, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xb68 = 1;
|
|
return 1;
|
|
}
|
|
|
|
/* 8097C388-8097C40C 003728 0084+00 3/0 0/0 0/0 .text browsea__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::browsea(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(20, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097C40C-8097C490 0037AC 0084+00 3/0 0/0 0/0 .text browseb__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::browseb(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(21, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097C490-8097C5B0 003830 0120+00 1/0 0/0 0/0 .text dance__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::dance(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(47, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
if (m_type == 17) {
|
|
mCitizen.startCreatureVoiceLevel(Z2SE_WAD_A_MV_DANCE, -1);
|
|
} else {
|
|
if (m_type == 2) {
|
|
mCitizen.startCreatureVoiceLevel(Z2SE_MCN_A_V_DANCE, -1);
|
|
} else {
|
|
if (m_type == 26) {
|
|
mCitizen.startCreatureVoiceLevel(Z2SE_WCN_A_V_DANCE, -1);
|
|
}
|
|
}
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097C5B0-8097C634 003950 0084+00 4/0 0/0 0/0 .text ladytalka__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::ladytalka(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(48, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097C634-8097C6B8 0039D4 0084+00 5/0 0/0 0/0 .text ladytalkb__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::ladytalkb(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(49, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097C6B8-8097C73C 003A58 0084+00 3/0 0/0 0/0 .text normtalka__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::normtalka(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(50, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097C73C-8097C7C0 003ADC 0084+00 3/0 0/0 0/0 .text normtalkb__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::normtalkb(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(51, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097C7C0-8097C844 003B60 0084+00 1/0 0/0 0/0 .text sellme__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::sellme(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(52, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097C844-8097C8F0 003BE4 00AC+00 1/0 0/0 0/0 .text sing__11daNpcCdn3_cFPv */
|
|
int daNpcCdn3_c::sing(void* param_0) {
|
|
if (isStop()) {
|
|
if (field_0xb94 != 0) {
|
|
setAnm((J3DAnmTransformKey*)getAnmP(53, mObjNum), 1.0f, 12.0f, 2, 0, -1);
|
|
field_0xaa0 = 1;
|
|
field_0xb94 = 0;
|
|
}
|
|
mCitizen.startCreatureVoiceLevel(Z2SE_CSL_TOWN_BAND_VOCAL, -1);
|
|
return field_0xaa0 == 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 8097C8F0-8097C910 003C90 0020+00 1/0 0/0 0/0 .text daNpcCdn3_Create__FPv */
|
|
static int daNpcCdn3_Create(void* i_this) {
|
|
return static_cast<daNpcCdn3_c*>(i_this)->create();
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
/* 8097F5AC-8097F5AC 00006C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_DEAD static char const* const stringBase_8097F652 =
|
|
"城下町の町人 マップツール設定値異常 引数1モーションシーケンス=%dが異常です。\n";
|
|
#pragma pop
|
|
|
|
/* 8097C910-8097CC58 003CB0 0348+00 3/1 0/0 0/0 .text create__11daNpcCdn3_cFv */
|
|
int daNpcCdn3_c::create() {
|
|
fopAcM_SetupActor(this, daNpcCdn3_c);
|
|
mIsDarkWorld = dKy_darkworld_check();
|
|
m_type = getType();
|
|
mObjNum = getObjNum();
|
|
mSeqNum = getSeqNum();
|
|
mFlowNodeNum = getFlowNodeNum();
|
|
if (mSeqNum < 0 || 44 <= mSeqNum) {
|
|
OSReport_Error("城下町の町人 マップツール設定値異常 引数1モーションシーケンス=%dが異常です。\n", mSeqNum);
|
|
JUT_PANIC(175, 0);
|
|
}
|
|
int rv = loadResrc(m_type, mObjNum);
|
|
if (rv == cPhs_COMPLEATE_e) {
|
|
if (fopAcM_entrySolidHeap(this, createHeapCallBack, 0x80002890) == 0) {
|
|
OS_REPORT("アクター生成失敗しました!\n");
|
|
return cPhs_ERROR_e;
|
|
}
|
|
create_init();
|
|
}
|
|
return rv;
|
|
}
|
|
|
|
/* 8097CC58-8097D078 003FF8 0420+00 1/1 0/0 0/0 .text create_init__11daNpcCdn3_cFv */
|
|
// NONMATCHING - issues with initParamTime division and mod interaction with u16
|
|
void daNpcCdn3_c::create_init() {
|
|
gravity = -3.0f;
|
|
initTimeSchedule();
|
|
fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
|
|
fopAcM_setCullSizeBox(this, -40.0f, -10.0f, -40.0f, 40.0f, 190.0f,
|
|
40.0f);
|
|
f32 chkWallR = Cd2_HIO_chkWallR(m_type);
|
|
f32 chkWallH = Cd2_HIO_chkWallH(m_type);
|
|
mAcchCir.SetWall(chkWallH, chkWallR);
|
|
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));
|
|
mAcch.SetRoofNone();
|
|
mAcch.SetWaterNone();
|
|
mAcch.CrrPos(dComIfG_Bgsp());
|
|
setEnvTevCol();
|
|
setRoomNo();
|
|
initCollision();
|
|
if (strcmp(dComIfGp_getStartStageName(), "F_SP116") == 0 &&
|
|
dComIfGp_getStartStageRoomNo() == 3 && getType() == 7)
|
|
{
|
|
attention_info.distances[fopAc_attn_SPEAK_e] = 0xda;
|
|
attention_info.distances[fopAc_attn_TALK_e] = 0xda;
|
|
} else {
|
|
attention_info.distances[fopAc_attn_SPEAK_e] = 0xd9;
|
|
attention_info.distances[fopAc_attn_TALK_e] = 0xd9;
|
|
}
|
|
|
|
if (isInShop()) {
|
|
fopAcM_OnStatus(this, 0x4000);
|
|
}
|
|
|
|
if (m_path.setPath(getPathID(), fopAcM_GetRoomNo(this), 1, ¤t.pos, false)) {
|
|
setAction(MODE_PATH);
|
|
} else {
|
|
setAction(MODE_WAIT);
|
|
}
|
|
|
|
mpMorf->setMorf(0.0f);
|
|
f32 gnd = mAcch.GetGroundH();
|
|
current.pos.y = gnd;
|
|
field_0xb64 = gnd;
|
|
setMtx();
|
|
}
|
|
|
|
/* 8097D078-8097D120 004418 00A8+00 2/2 0/0 0/0 .text setMtx__11daNpcCdn3_cFv */
|
|
void daNpcCdn3_c::setMtx() {
|
|
mDoMtx_stack_c::transS(current.pos.x, field_0xb64, current.pos.z);
|
|
mDoMtx_stack_c::YrotM(shape_angle.y);
|
|
mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
field_0xa9c = 0;
|
|
mpMorf->modelCalc();
|
|
setAttention(m_type);
|
|
lookat();
|
|
field_0xa9c = 1;
|
|
mpMorf->modelCalc();
|
|
setAttention(m_type);
|
|
}
|
|
|
|
/* 8097D120-8097D614 0044C0 04F4+00 1/1 0/0 0/0 .text lookat__11daNpcCdn3_cFv */
|
|
// NONMATCHING - stack + r3 init order
|
|
void daNpcCdn3_c::lookat() {
|
|
int local_68[4];
|
|
csXyz cStack_4c = csXyz(Cd2_HIO_maxLmtX_BACKBONE(m_type), Cd2_HIO_maxLmtY_BACKBONE(m_type), 0);
|
|
csXyz cStack_46 = csXyz(Cd2_HIO_maxLmtX_NECK(m_type), Cd2_HIO_maxLmtY_NECK(m_type), 0);
|
|
csXyz cStack_40 = csXyz(Cd2_HIO_maxLmtX_HEAD(m_type), Cd2_HIO_maxLmtY_HEAD(m_type), 0);
|
|
csXyz cStack_60 = csXyz(Cd2_HIO_minLmtX_BACKBONE(m_type), Cd2_HIO_minLmtY_BACKBONE(m_type), 0);
|
|
csXyz cStack_5a = csXyz(Cd2_HIO_minLmtX_NECK(m_type), Cd2_HIO_minLmtY_NECK(m_type), 0);
|
|
csXyz cStack_54 = csXyz(Cd2_HIO_minLmtX_HEAD(m_type), Cd2_HIO_minLmtY_HEAD(m_type), 0);
|
|
cXyz cStack_80(cXyz::Zero);
|
|
if (isM_()) {
|
|
local_68[0] = 1;
|
|
local_68[1] = 2;
|
|
local_68[2] = 3;
|
|
local_68[3] = -1;
|
|
} else {
|
|
local_68[0] = 1;
|
|
local_68[1] = 2;
|
|
local_68[2] = 3;
|
|
local_68[3] = -1;
|
|
}
|
|
mLookat.init(mpMorf->getModel(), local_68, &cStack_4c,&cStack_60);
|
|
Mtx afStack_38;
|
|
if (m_targetAct.getActorP() != NULL) {
|
|
cMtx_copy(mpMorf->getModel()->getBaseTRMtx(), afStack_38);
|
|
cStack_80 = m_targetAct.getActorP()->eyePos;
|
|
} else {
|
|
cMtx_copy(mpMorf->getModel()->getBaseTRMtx(), afStack_38);
|
|
cStack_80 = cXyz::Zero;
|
|
}
|
|
mLookat.action(cStack_80, eyePos, this, afStack_38, m_targetAct.getActorP() != NULL);
|
|
}
|
|
|
|
/* 8097D650-8097D684 0049F0 0034+00 1/0 0/0 0/0 .text daNpcCdn3_Delete__FPv */
|
|
static int daNpcCdn3_Delete(void* i_this) {
|
|
static_cast<daNpcCdn3_c*>(i_this)->~daNpcCdn3_c();
|
|
return 1;
|
|
}
|
|
|
|
/* 8097D684-8097D728 004A24 00A4+00 1/0 0/0 0/0 .text __dt__11daNpcCdn3_cFv */
|
|
daNpcCdn3_c::~daNpcCdn3_c() {
|
|
removeResrc(m_type, mObjNum);
|
|
if (heap != NULL) {
|
|
mpMorf->stopZelAnime();
|
|
}
|
|
}
|
|
|
|
/* 8097D728-8097D748 004AC8 0020+00 1/0 0/0 0/0 .text daNpcCdn3_Execute__FPv */
|
|
static int daNpcCdn3_Execute(void* i_this) {
|
|
return static_cast<daNpcCdn3_c*>(i_this)->execute();
|
|
}
|
|
|
|
/* 8097D748-8097DABC 004AE8 0374+00 1/1 0/0 0/0 .text execute__11daNpcCdn3_cFv */
|
|
// NONMATCHING - isInShop bool issue
|
|
int daNpcCdn3_c::execute() {
|
|
mAcchCir.SetWallH(Cd2_HIO_chkWallH(m_type));
|
|
mAcchCir.SetWallR(Cd2_HIO_chkWallR(m_type));
|
|
checkTimeSchedule();
|
|
if (field_0xb95 != 0) {
|
|
fopAcM_OnStatus(this, 0x8000000);
|
|
} else {
|
|
fopAcM_OffStatus(this, 0x8000000);
|
|
}
|
|
if (field_0xb95 != 0) {
|
|
if (!mIsDarkWorld && daPy_py_c::checkNowWolf()) {
|
|
fopAcM_delete(this);
|
|
}
|
|
return 1;
|
|
} else {
|
|
if (getGroupID() == 0xff && mMode == MODE_WAIT && !isInShop() && !isOrchestra() &&
|
|
fopAcM_CheckCondition(this, 4))
|
|
{
|
|
return 1;
|
|
}
|
|
if (!chkEvent()) {
|
|
orderEvent();
|
|
}
|
|
callExecute();
|
|
cLib_addCalc2(&field_0xb64, current.pos.y, 0.4f, 25.0f);
|
|
animation(-1);
|
|
setCollision();
|
|
setMtx();
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
inline bool daNpcCdn3_c::searchFirstScheduleTag(fopAc_ac_c* param_1) {
|
|
field_0xb88 = NULL;
|
|
fpcM_Search(s_sub2, this);
|
|
if (mTagSched != NULL) {
|
|
mTagSched->setWeekNum((u32)getDayOfWeek() % 7);
|
|
}
|
|
return mTagSched != NULL;
|
|
}
|
|
|
|
inline bool daNpcCdn3_c::searchNextScheduleTag() {
|
|
if (mTagSched == NULL) {
|
|
return 0;
|
|
}
|
|
field_0xb88 = 0;
|
|
fpcM_Search(s_sub1, this);
|
|
if (field_0xb88 != 0) {
|
|
u32 uVar2 = mTagSched->getWeekNum();
|
|
u32 bVar3 = mTagSched->getStartTime();
|
|
u32 bVar4 = field_0xb88->getStartTime();
|
|
if (bVar4 <= bVar3) {
|
|
uVar2 = (uVar2 + 1) % 7;
|
|
}
|
|
field_0xb88->setWeekNum(uVar2 % 7);
|
|
}
|
|
return field_0xb88 != NULL;
|
|
}
|
|
|
|
/* 8097DABC-8097DEF4 004E5C 0438+00 1/1 0/0 0/0 .text checkTimeSchedule__11daNpcCdn3_cFv
|
|
*/
|
|
// NONMATCHING - getLastPointNum issues
|
|
void daNpcCdn3_c::checkTimeSchedule() {
|
|
int iVar2 = getTime();
|
|
if (getGroupID() == 0xff) {
|
|
if (field_0xb96 == 0 && fopAcM_CheckCondition(this, 4)) {
|
|
if (field_0xb8c <= iVar2 && field_0xb8e > iVar2) {
|
|
field_0xb95 = 0;
|
|
} else {
|
|
field_0xb95 = 1;
|
|
}
|
|
}
|
|
} else {
|
|
if (mTagSched == NULL) {
|
|
if (searchFirstScheduleTag(this)) {
|
|
setSchedule(mTagSched);
|
|
if (mTagSched->getStartEnd() == 1) {
|
|
if (field_0xb88 == 0) {
|
|
searchNextScheduleTag();
|
|
}
|
|
setSchedule(field_0xb88);
|
|
field_0xb88 = NULL;
|
|
field_0xb95 = 1;
|
|
} else if (field_0xb8c < iVar2) {
|
|
current.pos.set(m_path.getPoint(m_path.getLastPointNum()));
|
|
home.pos.set(current.pos);
|
|
old.pos.set(current.pos);
|
|
current.angle.y =
|
|
cLib_targetAngleY(m_path.getPoint(m_path.getLastPointNum()),
|
|
m_path.getPoint(m_path.getLastPointNum() - 1));
|
|
shape_angle.y = current.angle.y;
|
|
home.angle.y = current.angle.y;
|
|
old.angle.y = current.angle.y;
|
|
m_path.setLastPointNum();
|
|
}
|
|
}
|
|
} else if (field_0xb95 != 0 && mTagSched->getStartEnd() != 1) {
|
|
int day = getDayOfWeek();
|
|
int schedDay = mTagSched->getWeekNum();
|
|
if (schedDay == day && field_0xb8c <= iVar2) {
|
|
field_0xb95 = 0;
|
|
}
|
|
}
|
|
if (field_0xb88 == 0) {
|
|
searchNextScheduleTag();
|
|
}
|
|
}
|
|
}
|
|
|
|
inline int daNpcCdn3_c::draw() {
|
|
if (field_0xb95 != 0) {
|
|
return 1;
|
|
}
|
|
drawNpc();
|
|
drawObj(mObjNum, field_0xac8, Cd2_HIO_objScale(m_type));
|
|
if (field_0xacc != NULL) {
|
|
g_env_light.setLightTevColorType_MAJI(field_0xacc,
|
|
&tevStr);
|
|
dComIfGd_setListBG();
|
|
mDoExt_modelUpdateDL(field_0xacc);
|
|
dComIfGd_setList();
|
|
}
|
|
drawShadow(60.0f);
|
|
mLookat.dbView();
|
|
return 1;
|
|
}
|
|
|
|
/* 8097DEF4-8097E000 005294 010C+00 1/0 0/0 0/0 .text daNpcCdn3_Draw__FPv */
|
|
static int daNpcCdn3_Draw(void* i_this) {
|
|
return static_cast<daNpcCdn3_c*>(i_this)->draw();
|
|
}
|
|
|
|
/* 8097E000-8097E008 0053A0 0008+00 1/0 0/0 0/0 .text daNpcCdn3_IsDelete__FPv */
|
|
static int daNpcCdn3_IsDelete(void* i_this) {
|
|
return 1;
|
|
}
|
|
|
|
/* 80980658-80980678 -00001 0020+00 1/0 0/0 0/0 .data daNpcCdn3_METHODS */
|
|
static actor_method_class daNpcCdn3_METHODS = {
|
|
(process_method_func)daNpcCdn3_Create,
|
|
(process_method_func)daNpcCdn3_Delete,
|
|
(process_method_func)daNpcCdn3_Execute,
|
|
(process_method_func)daNpcCdn3_IsDelete,
|
|
(process_method_func)daNpcCdn3_Draw,
|
|
};
|
|
|
|
/* 80980678-809806A8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_CD3 */
|
|
extern actor_process_profile_definition g_profile_NPC_CD3 = {
|
|
fpcLy_CURRENT_e, // mLayerID
|
|
7, // mListID
|
|
fpcPi_CURRENT_e, // mListPrio
|
|
PROC_NPC_CD3, // mProcName
|
|
&g_fpcLf_Method.base, // sub_method
|
|
sizeof(daNpcCdn3_c), // mSize
|
|
0, // mSizeOther
|
|
0, // mParameters
|
|
&g_fopAc_Method.base, // sub_method
|
|
395, // mPriority
|
|
&daNpcCdn3_METHODS, // sub_method
|
|
0x00040107, // mStatus
|
|
fopAc_NPC_e, // mActorType
|
|
fopAc_CULLBOX_CUSTOM_e, // cullType
|
|
};
|
|
|
|
/* 8097F5AC-8097F5AC 00006C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|