// // Generated by dtk // Translation Unit: d_a_npc_md.cpp // #include "d/actor/d_a_npc_md.h" #include "d/d_procname.h" #include "d/d_com_inf_game.h" #include "d/d_item_data.h" #include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_mtx.h" #include "d/actor/d_a_player_main.h" #include "d/d_snap.h" #include "d/actor/d_a_ship.h" #include "d/d_kankyo_wether.h" #include "d/d_camera.h" #include "d/d_detect.h" // Needed for the .data section to match. static f32 dummy1[3] = {1.0f, 1.0f, 1.0f}; static f32 dummy2[3] = {1.0f, 1.0f, 1.0f}; static u8 dummy3[4] = {0x02, 0x00, 0x02, 0x01}; static f64 dummy4[2] = {3.0, 0.5}; static u8 temp[0x4C]; // TODO static daNpc_Md_HIO_c l_HIO; static cXyz l_ms_light_local_vec; static cXyz l_ms_light_local_start; static char* l_arc_name = "Md"; static char* l_arc_name_ship = "Md_ship"; static char* l_staff_name = "Md1"; static char* event_name_tbl[] = { "Md_ItemGet", "Md_RopeGet", "MD_FLY", "md_cliff", "Md_Fly2", "Md_Tact", "Md_TactTrue", "Md_HarpTalk", "OPTION_CHAR_END", "DEFAULT_TALK_XY", }; static dCcD_SrcCyl l_cyl_src = { // dCcD_SrcGObjInf { /* Flags */ 0, /* SrcObjAt Type */ 0, /* SrcObjAt Atp */ 0, /* SrcObjAt SPrm */ 0, /* SrcObjTg Type */ ~(AT_TYPE_BOOMERANG | AT_TYPE_LEAF_WIND | AT_TYPE_LIGHT), /* SrcObjTg SPrm */ TG_SPRM_SET | TG_SPRM_IS_PLAYER, /* SrcObjCo SPrm */ CO_SPRM_SET | CO_SPRM_IS_UNK4 | CO_SPRM_VSGRP, /* SrcGObjAt Se */ 0, /* SrcGObjAt HitMark */ 0, /* SrcGObjAt Spl */ 0, /* SrcGObjAt Mtrl */ 0, /* SrcGObjAt SPrm */ 0, /* SrcGObjTg Se */ 0, /* SrcGObjTg HitMark */ 0, /* SrcGObjTg Spl */ 0, /* SrcGObjTg Mtrl */ 0, /* SrcGObjTg SPrm */ G_TG_SPRM_NO_HIT_MARK, /* SrcGObjCo SPrm */ 0, }, // cM3dGCylS { /* Center */ 0.0f, 0.0f, 0.0f, /* Radius */ 30.0f, /* Height */ 80.0f, }, }; static dCcD_SrcCyl l_light_cyl_src = { // dCcD_SrcGObjInf { /* Flags */ 0, /* SrcObjAt Type */ 0, /* SrcObjAt Atp */ 0, /* SrcObjAt SPrm */ 0, /* SrcObjTg Type */ AT_TYPE_LIGHT, /* SrcObjTg SPrm */ TG_SPRM_SET | TG_SPRM_IS_ENEMY, /* SrcObjCo SPrm */ 0, /* SrcGObjAt Se */ 0, /* SrcGObjAt HitMark */ 0, /* SrcGObjAt Spl */ 0, /* SrcGObjAt Mtrl */ 0, /* SrcGObjAt SPrm */ 0, /* SrcGObjTg Se */ 0, /* SrcGObjTg HitMark */ 0, /* SrcGObjTg Spl */ 0, /* SrcGObjTg Mtrl */ 0, /* SrcGObjTg SPrm */ G_TG_SPRM_NO_HIT_MARK, /* SrcGObjCo SPrm */ 0, }, // cM3dGCylS { /* Center */ 0.0f, 0.0f, 0.0f, /* Radius */ 30.0f, /* Height */ 80.0f, }, }; static dCcD_SrcCps l_fan_light_cps_src = { // dCcD_SrcGObjInf { /* Flags */ 0, /* SrcObjAt Type */ AT_TYPE_LIGHT, /* SrcObjAt Atp */ 0, /* SrcObjTg SPrm */ TG_SPRM_SET | TG_SPRM_GRP, /* SrcObjTg Type */ 0, /* SrcObjTg SPrm */ 0, /* SrcObjCo SPrm */ 0, /* SrcGObjAt Se */ 0, /* SrcGObjAt HitMark */ 0, /* SrcGObjAt Spl */ 0, /* SrcGObjAt Mtrl */ 0, /* SrcGObjAt SPrm */ G_AT_SPRM_NO_HIT_MARK, /* SrcGObjTg Se */ 0, /* SrcGObjTg HitMark */ 0, /* SrcGObjTg Spl */ 0, /* SrcGObjTg Mtrl */ 0, /* SrcGObjTg SPrm */ 0, /* SrcGObjCo SPrm */ 0, }, // cM3dGCpsS { /* Start */ 0.0f, 0.0f, 0.0f, /* End */ 0.0f, 0.0f, 0.0f, /* Radius */ 70.0f, }, }; static dCcD_SrcCyl l_wind_cyl_src = { // dCcD_SrcGObjInf { /* Flags */ 0, /* SrcObjAt Type */ 0, /* SrcObjAt Atp */ 0, /* SrcObjAt SPrm */ 0, /* SrcObjTg Type */ AT_TYPE_LEAF_WIND, /* SrcObjTg SPrm */ TG_SPRM_SET | TG_SPRM_IS_ENEMY, /* SrcObjCo SPrm */ 0, /* SrcGObjAt Se */ 0, /* SrcGObjAt HitMark */ 0, /* SrcGObjAt Spl */ 0, /* SrcGObjAt Mtrl */ 0, /* SrcGObjAt SPrm */ 0, /* SrcGObjTg Se */ 0, /* SrcGObjTg HitMark */ 0, /* SrcGObjTg Spl */ 0, /* SrcGObjTg Mtrl */ 0, /* SrcGObjTg SPrm */ G_TG_SPRM_NO_HIT_MARK, /* SrcGObjCo SPrm */ 0, }, // cM3dGCylS { /* Center */ 0.0f, 0.0f, 0.0f, /* Radius */ 30.0f, /* Height */ 80.0f, }, }; /* 000000EC-0000013C .text __ct__15daNpc_Md_HIO6_cFv */ daNpc_Md_HIO6_c::daNpc_Md_HIO6_c() { m04 = 500.0f; m08 = 430; m0A = 9000; m0C = -5000; m0E = -9000; m10 = 0; m12 = 0; m14 = 0; m16 = 0; } /* 0000013C-00000164 .text __ct__15daNpc_Md_HIO5_cFv */ daNpc_Md_HIO5_c::daNpc_Md_HIO5_c() { m4 = 16.0f; m8 = 0.6f; } /* 00000164-00000188 .text __ct__15daNpc_Md_HIO4_cFv */ daNpc_Md_HIO4_c::daNpc_Md_HIO4_c() { /* Nonmatching */ m4 = 86.0f; m8 = 0; } /* 00000188-000001F4 .text __ct__15daNpc_Md_HIO3_cFv */ daNpc_Md_HIO3_c::daNpc_Md_HIO3_c() { m04 = 0.8f; m08 = 0.2f; m0C = -5.0f; m10 = -5.0f; m14 = 0.0f; m18 = 0; m1A = 0; m1C = 0; m1E = 3800; m20 = 5800; m22 = 0x7FFF; m24 = -0x7FFF; } /* 000001F4-00000274 .text __ct__15daNpc_Md_HIO2_cFv */ daNpc_Md_HIO2_c::daNpc_Md_HIO2_c() { m26 = 0x19; m28 = 0x7FFF; m2A = 1; m04 = 5.0f; m08 = 17.0f; m0C = 7.0f; m10 = 6.0f; m14 = 0.7f; m20 = 3300; m22 = 2900; m24 = 5; m18 = 2.6f; m1C = 0.6f; } /* 00000274-00000574 .text __ct__14daNpc_Md_HIO_cFv */ daNpc_Md_HIO_c::daNpc_Md_HIO_c() { mNpc.m04 = -25.0f; mNpc.m08 = 0x2328; mNpc.mMaxHeadRot = 0x2328; mNpc.m0A = 0x0; mNpc.mMaxBackBoneRot = 0x1F40; mNpc.m10 = -0x2328; mNpc.mMinHeadRot = -0x2328; mNpc.m12 = 0x0; mNpc.mMinBackBoneRot = -0x1F40; mNpc.m18 = 0x1000; mNpc.mMaxHeadTurnVel = 0x800; mNpc.m1C = 130.0f; mNpc.m20 = 0x4000; mNpc.m22 = 0x0; mNpc.m24 = 150.0f; mpActor = NULL; m0B8 = 770.0f; m0BC = 250.0f; m0C0 = -450.0f; m0C4 = 90.0f; m0C8 = 400.0f; m0CC = 600.0f; m0D0 = 0.05; m0D4 = 17.0f; m0D8 = 0.0f; m0DC = 0.5; m0E0 = 0.3; m0E4 = 0.9; m0E8 = 15.0f; m0EC = 22.0f; m0F0 = 9.0f; m0F4 = 4.0f; m0F8 = -1.51367; m0FC = -1.09863; m100 = -0.56152; m104 = 0.1; m108 = 0.2; m10C = 10.0f; m110 = -50.0f; m114 = 1.3; m128 = 1200.0f; m12C = 1500.0f; m118 = 1.0f; m11C = 1.5; m120 = 2.0f; m124 = 1.6; m130 = 3.0f; m134 = 1.25; m138 = 0.2; m13C = 100.0f; m140 = 50.0f; m144 = 9.0f; m1B4 = 0x17; m1B6 = 0x14; m1C7 = 0x0; m148 = 0.9; m1C6 = 0x1; m14C = 6.0f; m1B8 = 0x4000; m150 = 10.0f; m1BA = 0x78; m1BC = 0x1F4; m154 = 5.0f; m158 = 2.2; m15C = -11.681; m160 = 1.3; m164 = 88.692; m168 = 57.066; m16C = 179.286; m1C8 = 0x0; m170 = 0.0f; m174 = 1.0f; m178 = 1.5; m17C = -100.0f; m180 = 100.0f; m184 = 10.0f; m188 = 1.0f; m18C = -10.0f; m1BE = 0x46; m1C0 = 0x5; m1C2 = 0x1C2; m1C4 = 0x96; m190 = 43.0f; m194 = 14.65; m198 = 13.99; m19C = 0.0f; m1A0 = -98.0f; m1A4 = 0.0f; m1A8 = 3.0f; m1AC = 1000.0f; m1B0 = 1000.0f; mChildID = -0x1; } /* 000006DC-000006FC .text daNpc_Md_XyCheckCB__FPvi */ static s16 daNpc_Md_XyCheckCB(void* i_this, int param_1) { return static_cast(i_this)->XyCheckCB(param_1); } /* 000006FC-000007FC .text XyCheckCB__10daNpc_Md_cFi */ s16 daNpc_Md_c::XyCheckCB(int equippedItemIdx) { u8 selectItemNo = dComIfGp_getSelectItem(equippedItemIdx); if (m3138 == 3) { if (selectItemNo == WIND_TACT) { return TRUE; } if (selectItemNo == GOLDEN_FEATHER) { if (!dComIfGs_isEventBit(0x2E40) || (dComIfGs_isEventBit(0x2E40) && m_seaTalk)) { return TRUE; } } } else if (m3138 == 5 || m3138 == 4) { if (selectItemNo == GOLDEN_FEATHER && !dComIfGs_isEventBit(0x3B80)) { return TRUE; } } if (selectItemNo == GOLDEN_FEATHER) { dComIfGs_onEventBit(0x2C08); } return FALSE; } /* 000007FC-0000081C .text daNpc_Md_XyEventCB__FPvi */ static s16 daNpc_Md_XyEventCB(void* i_this, int param_1) { return static_cast(i_this)->XyEventCB(param_1); } /* 0000081C-00000864 .text XyEventCB__10daNpc_Md_cFi */ s16 daNpc_Md_c::XyEventCB(int equippedItemIdx) { u8 selectItemNo = dComIfGp_getSelectItem(equippedItemIdx); if (selectItemNo == WIND_TACT) { offDefaultTalkXY(); return mEventIdxTable[5]; } else if (selectItemNo == GOLDEN_FEATHER) { onDefaultTalkXY(); } return -1; } /* 00000864-00000884 .text CheckCreateHeap__FP10fopAc_ac_c */ static BOOL CheckCreateHeap(fopAc_ac_c* i_this) { return static_cast(i_this)->createHeap(); } /* 00000884-00000D80 .text create__10daNpc_Md_cFv */ s32 daNpc_Md_c::create() { m313D = 0; strcpy(mModelArcName, l_arc_name); int heapSizeIdx = 0; fopAcM_SetupActor(this, daNpc_Md_c); m3138 = fopAcM_GetParam(this) >> 0x08; if (m3138 == -2) { dComIfGs_onEventBit(0x1620); } else { if (dComIfGs_isCollect(0, 2)) { if (strcmp(dComIfGp_getStartStageName(), "M_DaiB") != 0) { return cPhs_ERROR_e; } else { setTypeM_DaiB(); } } else if (strcmp(dComIfGp_getStartStageName(), "sea") == 0) { if (dComIfGs_isEventBit(0x2E04) || !dComIfGs_isEventBit(0x1820) || !dComIfGs_isStageBossEnemy(dSv_save_c::STAGE_DRC)) { return cPhs_ERROR_e; } } else if (strcmp(dComIfGp_getStartStageName(), "Atorizk") == 0) { if (dComIfGs_isEventBit(0x2E04) || dNpc_chkLetterPassed()) { return cPhs_ERROR_e; } } else if (strcmp(dComIfGp_getStartStageName(), "Adanmae") == 0) { if (dComIfGs_isEventBit(0x2E04) || !dNpc_chkLetterPassed()) { return cPhs_ERROR_e; } } else if (strcmp(dComIfGp_getStartStageName(), "M_Dra09") == 0) { if (dComIfGs_isEventBit(0x2E04) || dComIfGs_isEventBit(0x1101)) { return cPhs_ERROR_e; } } else if (strcmp(dComIfGp_getStartStageName(), "Edaichi") == 0) { if (!dComIfGs_isEventBit(0x2E04) || dComIfGs_isEventBit(0x2920)) { return cPhs_ERROR_e; } setTypeEdaichi(); } else if (strcmp(dComIfGp_getStartStageName(), "M_Dai") == 0) { if (!dComIfGs_isEventBit(0x2E04) || !dComIfGs_isEventBit(0x2920)) { return cPhs_ERROR_e; } setTypeM_Dai(); } else if (strcmp(dComIfGp_getStartStageName(), "M_DaiB") == 0) { return cPhs_ERROR_e; } } if (!dComIfGs_isEventBit(0x2E04) && dComIfGs_isEventBit(0x1608)) { setTypeShipRide(); strcpy(mModelArcName, l_arc_name_ship); heapSizeIdx = 1; } s32 phase_state = dComIfG_resLoad(&mPhs, mModelArcName); m313D = 1; if (phase_state == cPhs_COMPLEATE_e) { if (dComIfGp_getCb1Player() != NULL) { return cPhs_ERROR_e; } static int l_heep_size[] = { 0x7660, 0x61C0, }; if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, l_heep_size[heapSizeIdx])) { mpMorf = NULL; mpArmMorf = NULL; mpWingMorf = NULL; return cPhs_ERROR_e; } if (m3138 == 5) { u8 flag = dComIfGs_getPlayerPriestFlag(); if (flag == 2) { s8 roomNo = dComIfGs_getPlayerPriestRoomNo(); s16 angle = dComIfGs_getPlayerPriestRotate(); cXyz& pos = dComIfGs_getPlayerPriestPos(); dComIfGs_setRestartOption(&pos, angle, roomNo, 2); dComIfGs_setPlayerPriest(2, pos, angle, roomNo); } checkRestart(2); } fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); if (l_HIO.mChildID < 0) { l_HIO.mChildID = mDoHIO_root.mDoHIO_createChild("リト族(メドリ)", &l_HIO); l_HIO.mpActor = this; } if (!init()) { return cPhs_ERROR_e; } setBaseMtx(); fopAcM_setStageLayer(this); } return phase_state; } /* 000012C0-00001444 .text nodeCallBack__FP7J3DNodei */ static BOOL nodeCallBack(J3DNode* node, int param_1) { if (!param_1) { J3DModel* model = j3dSys.getModel(); J3DJoint* joint = (J3DJoint*)node; daNpc_Md_c* i_this = (daNpc_Md_c*)model->getUserArea(); if (i_this) { static cXyz l_offsetAttPos(0.0f, 0.0f, 0.0f); static cXyz l_offsetEyePos(15.0f, 0.0f, 0.0f); s32 jntNo = joint->getJntNo(); mDoMtx_stack_c::copy(model->getAnmMtx(jntNo)); mDoMtx_stack_c::multVec(&l_offsetAttPos, &i_this->getAttentionBasePos()); mDoMtx_stack_c::XrotM(i_this->getHead_y()); mDoMtx_stack_c::ZrotM(-i_this->getHead_x()); mDoMtx_stack_c::multVec(&l_offsetEyePos, &i_this->getEyePos()); i_this->incAttnSetCount(); cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); model->setAnmMtx(jntNo, mDoMtx_stack_c::get()); } } return TRUE; } static Vec waistVecDat[4] = { {40.0f, -10.0f, -30.0f}, {40.0f, -10.0f, 30.0f}, {-30.0f, -10.0f, -30.0f}, {-30.0f, -10.0f, 30.0f}, }; /* 00001444-0000154C .text waistNodeCallBack__FP7J3DNodei */ static BOOL waistNodeCallBack(J3DNode* node, int param_1) { if (!param_1) { J3DModel* model = j3dSys.getModel(); J3DJoint* joint = (J3DJoint*)node; daNpc_Md_c* i_this = (daNpc_Md_c*)model->getUserArea(); if (i_this) { s32 jntNo = joint->getJntNo(); mDoMtx_multVecArray(model->getAnmMtx(jntNo), waistVecDat, i_this->getPHairWall(), ARRAY_SIZE(waistVecDat)); mDoMtx_stack_c::copy(model->getAnmMtx(jntNo)); if (cLib_checkBit(i_this->m30F0, 0x4000UL)) { mDoMtx_stack_c::XrotM(i_this->getWaistRotY()); mDoMtx_stack_c::ZrotM(i_this->getWaistRotX()); } else { mDoMtx_stack_c::XrotM(i_this->getBackbone_y()); mDoMtx_stack_c::ZrotM(-i_this->getBackbone_x()); } cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); model->setAnmMtx(jntNo, mDoMtx_stack_c::get()); } } return TRUE; } /* 0000154C-0000160C .text armNodeCallBack__FP7J3DNodei */ static BOOL armNodeCallBack(J3DNode* node, int param_1) { // This handles copying the matrices of Medli's arms and wings from the body model to the // separate arm/wing models. if (!param_1) { J3DModel* armModel = j3dSys.getModel(); J3DJoint* joint = (J3DJoint*)node; daNpc_Md_c* i_this = (daNpc_Md_c*)armModel->getUserArea(); if (i_this) { s32 armJntNo = joint->getJntNo(); s32 bodyJntNo; if (armJntNo == i_this->getArmRlocJntNum()) { bodyJntNo = i_this->getArmRJntNum(); } else if (armJntNo == i_this->getArmLlocJntNum()) { bodyJntNo = i_this->getArmLJntNum(); } J3DModel* bodyModel = i_this->getModel(); cMtx_copy(bodyModel->getAnmMtx(bodyJntNo), J3DSys::mCurrentMtx); armModel->setAnmMtx(armJntNo, bodyModel->getAnmMtx(bodyJntNo)); } } return TRUE; } /* 0000160C-00001C60 .text hairCross__FP4cXyzP4cXyzP4cXyz */ static BOOL hairCross(cXyz* i_r3, cXyz* i_r4, cXyz* i_r5) { cM3dGTri r1_198(&i_r3[0], &i_r3[1], &i_r3[2]); cM3dGTri r1_160(&i_r3[1], &i_r3[3], &i_r3[2]); cM3dGLin r1_144; r1_144.SetStartEnd(*i_r4, *i_r5); cXyz r1_138; if (r1_198.cross(&r1_144, &r1_138, true, false)) { r1_198.Up(2.0f); if (r1_198.cross(&r1_144, &r1_138, true, false)) { f32 f31 = r1_198.getSignedLenPos(i_r4); cXyz r1_12c = *r1_198.GetNP(); cXyz r1_120 = *i_r4 + (r1_12c * -f31); cXyz r1_e4 = (*i_r4 - *i_r5); f32 f30 = r1_e4.abs(); cXyz r1_108 = (r1_138 - r1_120); r1_108.normalizeZP(); r1_108 = r1_108 * sqrtf(f30 * f30 - f31 * f31); *i_r5 = r1_120 + r1_108; return TRUE; } } else if (r1_160.cross(&r1_144, &r1_138, true, false)) { r1_160.Up(2.0f); if (r1_160.cross(&r1_144, &r1_138, true, false)) { f32 f31 = r1_160.getSignedLenPos(i_r4); cXyz r1_12c = *r1_160.GetNP(); cXyz r1_120 = *i_r4 + (r1_12c * -f31); cXyz r1_e4 = (*i_r4 - *i_r5); f32 f30 = r1_e4.abs(); cXyz r1_108 = (r1_138 - r1_120); r1_108.normalizeZP(); r1_108 = r1_108 * sqrtf(f30 * f30 - f31 * f31); *i_r5 = r1_120 + r1_108; return TRUE; } } return FALSE; } /* 00001CBC-00001D0C .text hairTopNodeCallBack__FP7J3DNodei */ static BOOL hairTopNodeCallBack(J3DNode* node, int param_1) { if (!param_1) { J3DModel* model = j3dSys.getModel(); daNpc_Md_c* i_this = (daNpc_Md_c*)model->getUserArea(); if (i_this) { J3DJoint* joint = (J3DJoint*)node; s32 jntNo = joint->getJntNo(); MtxP mtx = model->getAnmMtx(jntNo); cXyz* hairTopPos = i_this->getPHairPos(0); hairTopPos->set(mtx[0][3], mtx[1][3], mtx[2][3]); } } return TRUE; } /* 00001D0C-00001F5C .text vecChange__FP4cXyzP4cXyzs */ static void vecChange(cXyz* i_r3, cXyz* i_r4, s16 i_r5) { if (!cM3d_IsZero(i_r3->abs())) { if (!cM3d_IsZero(i_r4->abs())) { cXyz r1_4c = i_r3->norm(); cXyz r1_40 = i_r4->norm(); f32 dot = r1_4c.inprod(r1_40); if (dot < cM_scos(i_r5)) { cXyz r1_34 = r1_4c.outprod(r1_40); mDoMtx_stack_c::rotAxisRadS(&r1_34, cM_s2rad(i_r5)); mDoMtx_stack_c::multVec(&r1_4c, i_r4); } else { *i_r4 = r1_40; } } } } static u8 HairModeMaskData[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, }; static s16 baseAngleX[] = { 0x8000, 0x9000, 0xA000, 0xB000, 0xB000, 0xC000, 0xC000, 0xC000, }; /* 00001F5C-0000240C .text hairNodeCallBack__FP7J3DNodei */ static BOOL hairNodeCallBack(J3DNode* node, int param_1) { if (!param_1) { J3DModel* model = j3dSys.getModel(); daNpc_Md_c* i_this = (daNpc_Md_c*)model->getUserArea(); if (i_this) { J3DJoint* joint = (J3DJoint*)node; s32 jntNo = joint->getJntNo(); for (int i = 1; i < 8; i++) { if (i_this->getHairJntNum(i) != jntNo) { continue; } MtxP mtx = model->getAnmMtx(jntNo); if (!i_this->checkBitHairMode(HairModeMaskData[i])) { i_this->setBitHairMode(HairModeMaskData[i]); cXyz* hairPos = i_this->getPHairPos(i); hairPos->set(mtx[0][3], mtx[1][3], mtx[2][3]); f32* hairDist = i_this->getPHairDist(i); cXyz* r29 = i_this->getPHairVec(i); *r29 = (*hairPos - *i_this->getPHairPos(i-1)); *hairDist = r29->abs(); break; } cXyz* r25 = i_this->getPHairPos(i-1); cXyz* r28 = i_this->getPHairPos(i); cXyz* r24 = i_this->getPHairVec(i); if (i <= 1) { r28->x = mtx[0][3]; r28->y = mtx[1][3]; r28->z = mtx[2][3]; *r24 = (*r28 - *r25); break; } f32* hairDist = i_this->getPHairDist(i); cXyz* r22 = i_this->getPHairVec(i-1); cXyz r1_e8; cXyz r1_dc; cXyz r1_d0 = *r28; cXyz r1_c4 = r1_d0 - *r25; r1_e8.set(0.0f, -1.0f, 0.0f); r1_e8 *= l_HIO.m14C; f32 power; dKyw_get_AllWind_vec(&i_this->current.pos, &r1_dc, &power); r1_e8 += r1_dc * power * 3.0f; r1_c4 += r1_e8; r1_c4 = r1_c4.normZP() * *hairDist; vecChange(r22, &r1_c4, 0x1000); *r24 = r1_c4 * *hairDist; *r28 = *r24 + *r25; if (hairCross(i_this->getPHairWall(), i_this->getPHairPos(1), r28)) { *r24 = (*r28 - *r25); r24->normalizeZP(); r1_c4 = *r24; *r28 = r1_c4 * *hairDist + *r25; } s16 prevHaitJntNo = i_this->getHairJntNum(i-1); cXyz r1_b8 = r22->normZP(); Mtx r1_124; cM3d_UpMtx_Base(r1_b8, r1_c4, r1_124); Mtx r1_f4; mDoMtx_copy(model->getAnmMtx(prevHaitJntNo), r1_f4); r1_f4[0][3] = 0.0f; r1_f4[1][3] = 0.0f; r1_f4[2][3] = 0.0f; mDoMtx_stack_c::copy(r1_f4); mDoMtx_stack_c::revConcat(r1_124); mDoMtx_copy(mDoMtx_stack_c::get(), mtx); mtx[0][3] = r28->x; mtx[1][3] = r28->y; mtx[2][3] = r28->z; cMtx_copy(mtx, J3DSys::mCurrentMtx); break; } } } return TRUE; } static char* hairName[] = { "hair1", "hair2", "hair3", "hair4", "hair5", "hair6", "hair7", "hair8", }; /* 0000240C-00002F80 .text createHeap__10daNpc_Md_cFv */ BOOL daNpc_Md_c::createHeap() { /* Nonmatching */ char wait_anim_name[32]; char arm_wait_anim_name[32]; if (m3138 == 7) { strcpy(wait_anim_name, "md_shipwait.bck"); strcpy(arm_wait_anim_name, "mdarm_shipwait.bck"); } else { strcpy(wait_anim_name, "md_wait01.bck"); strcpy(arm_wait_anim_name, "mdarm_wait01.bck"); } J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(mModelArcName, "md.bdl"); JUT_ASSERT(1995, modelData != 0); mpMorf = new mDoExt_McaMorf2( modelData, NULL, NULL, (J3DAnmTransformKey*)dComIfG_getObjectRes(mModelArcName, wait_anim_name), NULL, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, 1, NULL, 0x00080000, 0x11020022 ); if (!mpMorf || !mpMorf->getModel()) { return FALSE; } m_backbone1_jnt_num = modelData->getJointName()->getIndex("backbone1"); JUT_ASSERT(2013, m_backbone1_jnt_num >= 0); m_backbone2_jnt_num = modelData->getJointName()->getIndex("backbone2"); JUT_ASSERT(2016, m_backbone2_jnt_num >= 0); m_armR_jnt_num = modelData->getJointName()->getIndex("armR"); JUT_ASSERT(2019, m_armR_jnt_num >= 0); m_armL_jnt_num = modelData->getJointName()->getIndex("armL"); JUT_ASSERT(2022, m_armL_jnt_num >= 0); m_neck_jnt_num = modelData->getJointName()->getIndex("neck"); JUT_ASSERT(2025, m_neck_jnt_num >= 0); s16 head_jnt_num = modelData->getJointName()->getIndex("head"); if (head_jnt_num >= 0) { modelData->getJointNodePointer(head_jnt_num)->setCallBack(nodeCallBack); } modelData->getJointNodePointer(m_backbone1_jnt_num)->setCallBack(waistNodeCallBack); m_hair_jnt_nums[0] = modelData->getJointName()->getIndex(hairName[0]); if (m_hair_jnt_nums[0] >= 0) { modelData->getJointNodePointer(m_hair_jnt_nums[0])->setCallBack(hairTopNodeCallBack); } for (int i = 1; i < (int)ARRAY_SIZE(hairName); i++) { m_hair_jnt_nums[i] = modelData->getJointName()->getIndex(hairName[i]); if (m_hair_jnt_nums[i] >= 0) { modelData->getJointNodePointer(m_hair_jnt_nums[i])->setCallBack(hairNodeCallBack); } } mpMorf->getModel()->setUserArea((u32)this); modelData = (J3DModelData*)dComIfG_getObjectRes(mModelArcName, "mdarm.bdl"); JUT_ASSERT(2051, modelData != 0); mpArmMorf = new mDoExt_McaMorf2( modelData, NULL, NULL, (J3DAnmTransformKey*)dComIfG_getObjectRes(mModelArcName, arm_wait_anim_name), NULL, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, 0, NULL, 0x00000000, 0x11020203 ); if (!mpArmMorf || !mpArmMorf->getModel()) { return FALSE; } m_armRloc_jnt_num = modelData->getJointName()->getIndex("armRloc"); JUT_ASSERT(2065, m_armRloc_jnt_num >= 0); m_armLloc_jnt_num = modelData->getJointName()->getIndex("armLloc"); JUT_ASSERT(2068, m_armLloc_jnt_num >= 0); m_handL_jnt_num = modelData->getJointName()->getIndex("handL"); JUT_ASSERT(2071, m_handL_jnt_num >= 0); modelData->getJointNodePointer(m_armRloc_jnt_num)->setCallBack(armNodeCallBack); modelData->getJointNodePointer(m_armLloc_jnt_num)->setCallBack(armNodeCallBack); mpArmMorf->getModel()->setUserArea((u32)this); if (m3138 != 7) { modelData = (J3DModelData*)dComIfG_getObjectRes(mModelArcName, "mdwing.bdl"); JUT_ASSERT(2083, modelData != 0); mpWingMorf = new mDoExt_McaMorf( modelData, NULL, NULL, (J3DAnmTransformKey*)dComIfG_getObjectRes(mModelArcName, "mdwing_wait01.bck"), J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, 0, NULL, 0x00000000, 0x11020203 ); if (!mpWingMorf || !mpWingMorf->getModel()) { return FALSE; } m_wingRloc_jnt_num = modelData->getJointName()->getIndex("wingRloc"); JUT_ASSERT(2097, m_wingRloc_jnt_num >= 0); m_wingLloc_jnt_num = modelData->getJointName()->getIndex("wingLloc"); JUT_ASSERT(2100, m_wingLloc_jnt_num >= 0); m_wingR2_jnt_num = modelData->getJointName()->getIndex("wingR2"); JUT_ASSERT(2103, m_wingR2_jnt_num >= 0); m_wingL2_jnt_num = modelData->getJointName()->getIndex("wingL2"); JUT_ASSERT(2106, m_wingL2_jnt_num >= 0); m_wingR3_jnt_num = modelData->getJointName()->getIndex("wingR3"); JUT_ASSERT(2109, m_wingR3_jnt_num >= 0); m_wingL3_jnt_num = modelData->getJointName()->getIndex("wingL3"); JUT_ASSERT(2112, m_wingL3_jnt_num >= 0); modelData->getJointNodePointer(m_wingRloc_jnt_num)->setCallBack(armNodeCallBack); modelData->getJointNodePointer(m_wingLloc_jnt_num)->setCallBack(armNodeCallBack); mpWingMorf->getModel()->setUserArea((u32)this); } modelData = (J3DModelData*)dComIfG_getObjectRes(mModelArcName, "md_harp.bdl"); mpHarpModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203); if (!mpHarpModel) { return FALSE; } modelData = (J3DModelData*)dComIfG_getObjectRes(mModelArcName, "ymdhp00.bdl"); mpHarpLightModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203); if (!mpHarpLightModel) { return FALSE; } if (!initLightBtkAnm(false)) { return FALSE; } if (!initTexPatternAnm(0, 0)) { return FALSE; } mAcchCir[0].SetWall(20.0f, 20.0f); mAcchCir[1].SetWall(60.0f, 20.0f); mAcch.Set(¤t.pos, &next.pos, this, ARRAY_SIZE(mAcchCir), mAcchCir, &speed); mAcch.ClrRoofNone(); mAcch.SetRoofCrrHeight(120.0f); mAcch.OnLineCheck(); mAcch.ClrWaterNone(); return TRUE; } /* 00002F80-00003050 .text setAction__10daNpc_Md_cFPM10daNpc_Md_cFPCvPvPv_iM10daNpc_Md_cFPCvPvPv_iPv */ BOOL daNpc_Md_c::setAction(ActionFunc* pCurrActionFunc, ActionFunc newActionFunc, void* arg) { if (*pCurrActionFunc != newActionFunc) { if (*pCurrActionFunc) { mActionStatus = ACTION_ENDING; (this->**pCurrActionFunc)(arg); } *pCurrActionFunc = newActionFunc; mActionStatus = ACTION_STARTING; m3144 = 0; m3146 = 0; m3148 = 0; m314A = 0; m3150 = 0.0f; (this->**pCurrActionFunc)(arg); } return TRUE; } /* 00003050-00003124 .text npcAction__10daNpc_Md_cFPv */ void daNpc_Md_c::npcAction(void* arg) { if (!mCurrNpcActionFunc) { speedF = 0.0f; if (m3104 == 0x20) { setNpcAction(&mwaitNpcAction, NULL); } else { setNpcAction(&waitNpcAction, NULL); } } (this->*mCurrNpcActionFunc)(arg); } /* 00003124-00003194 .text setNpcAction__10daNpc_Md_cFM10daNpc_Md_cFPCvPvPv_iPv */ void daNpc_Md_c::setNpcAction(ActionFunc actionFunc, void* arg) { m_flying = false; mCurrPlayerActionFunc = NULL; setAction(&mCurrNpcActionFunc, actionFunc, arg); } /* 00003194-00003360 .text playerAction__10daNpc_Md_cFPv */ void daNpc_Md_c::playerAction(void* arg) { /* Nonmatching */ if (!mCurrPlayerActionFunc) { speedF = 0.0f; setPlayerAction(&waitPlayerAction, NULL); } if (mAcch.ChkGroundHit() && isOldLightBodyHit()) { dComIfGp_setRStatusForce(0x07); // Show "Return" on the R button if (chkPlayerAction(mkamaePlayerAction)) { dComIfGp_setDoStatus(0x00); // Show the A button without anything on it dComIfGp_setAStatus(0x08); // TODO } else { dComIfGp_setDoStatus(0x2E); // TODO dComIfGp_setAStatus(0x3E); // Do not display the B button icon at all if (!m3140) { dComIfGp_getVibration().StartShock(4, -0x21, cXyz(0.0f, 1.0f, 0.0f)); } } } else { dComIfGp_setDoStatus(0x23); // Show "Fly" on the A button if (chkPlayerAction(flyPlayerAction)) { dComIfGp_setRStatusForce(0x3E); // TODO dComIfGp_setAStatus(0x06); // Show "Let Go" on the B button icon } else { dComIfGp_setRStatusForce(0x07); // Show "Return" on the R button dComIfGp_setAStatus(0x3E); // Do not display the B button icon at all } } (this->*mCurrPlayerActionFunc)(arg); } /* 00003360-000033C4 .text setPlayerAction__10daNpc_Md_cFM10daNpc_Md_cFPCvPvPv_iPv */ void daNpc_Md_c::setPlayerAction(ActionFunc actionFunc, void* arg) { mCurrNpcActionFunc = NULL; setAction(&mCurrPlayerActionFunc, actionFunc, arg); } /* 000033C4-00003430 .text getStickAngY__10daNpc_Md_cFi */ s16 daNpc_Md_c::getStickAngY(BOOL param_1) { if (param_1) { return g_mDoCPd_cpadInfo[0].mMainStickAngle + 0x8000; } else { s16 angleY = dCam_getControledAngleY(dComIfGp_getCamera(0)); return g_mDoCPd_cpadInfo[0].mMainStickAngle + 0x8000 + angleY; } } /* 00003430-00003588 .text calcStickPos__10daNpc_Md_cFsP4cXyz */ int daNpc_Md_c::calcStickPos(s16 param_1, cXyz* param_2) { /* Nonmatching - dAttention_c::Lockon regswap */ dAttList_c* attList = dComIfGp_getAttention().GetLockonList(0); bool r26 = dComIfGp_getAttention().Lockon(); int r31; if (!r26) { r31 = 0; } else { BOOL lockon = dComIfGp_getAttention().LockonTruth(); r31 = -1; if (lockon) { r31 = 1; } } if (attList == NULL) { attList = dComIfGp_getAttention().GetActionList(0); } if (attList) { *param_2 = attList->getActor()->mEyePos; return r31; } if (r26) { param_1 = shape_angle.y; } param_2->set( current.pos.x + 100.0f * cM_ssin(param_1), current.pos.y, current.pos.z + 100.0f * cM_scos(param_1) ); return r31; } /* 00003588-0000362C .text flyCheck__10daNpc_Md_cFv */ BOOL daNpc_Md_c::flyCheck() { if (!CPad_CHECK_TRIG_A(0)) { return FALSE; } if (isOldLightBodyHit()) { setPlayerAction(&mkamaePlayerAction, NULL); } else { setPlayerAction(&flyPlayerAction, NULL); } return TRUE; } /* 0000362C-00003648 .text mirrorCancelCheck__10daNpc_Md_cFv */ bool daNpc_Md_c::mirrorCancelCheck() { return CPad_CHECK_TRIG_B(0) != false; } /* 00003648-00003674 .text setWingEmitter__10daNpc_Md_cFv */ void daNpc_Md_c::setWingEmitter() { particle_set(m0508, 0x819B); } /* 00003674-000036C0 .text setHane02Emitter__10daNpc_Md_cFv */ void daNpc_Md_c::setHane02Emitter() { particle_set(&m0508[2], 0x8217); particle_set(&m0508[3], 0x8217); } /* 000036C0-000036FC .text deleteHane02Emitter__10daNpc_Md_cFv */ void daNpc_Md_c::deleteHane02Emitter() { emitterDelete(&m0508[2]); emitterDelete(&m0508[3]); } /* 000036FC-00003748 .text setHane03Emitter__10daNpc_Md_cFv */ void daNpc_Md_c::setHane03Emitter() { particle_set(&m0508[4], 0x827D); particle_set(&m0508[5], 0x827D); } /* 00003748-00003784 .text deleteHane03Emitter__10daNpc_Md_cFv */ void daNpc_Md_c::deleteHane03Emitter() { emitterDelete(&m0508[4]); emitterDelete(&m0508[5]); } /* 00003784-000037C4 .text returnLinkPlayer__10daNpc_Md_cFv */ void daNpc_Md_c::returnLinkPlayer() { changePlayer(dComIfGp_getLinkPlayer()); m_flying = false; m_mirror = false; } /* 000037C4-00003824 .text shipRideCheck__10daNpc_Md_cFv */ BOOL daNpc_Md_c::shipRideCheck() { if (isTypeShipRide()) { setNpcAction(&shipNpcAction, NULL); return TRUE; } return FALSE; } /* 00003824-00003908 .text isFallAction__10daNpc_Md_cFv */ BOOL daNpc_Md_c::isFallAction() { return chkPlayerAction(jumpPlayerAction) || chkNpcAction(fallNpcAction) || chkNpcAction(fall02NpcAction); } /* 00003908-00003958 .text returnLinkCheck__10daNpc_Md_cFv */ BOOL daNpc_Md_c::returnLinkCheck() { if (!dComIfGp_event_runCheck()) { if (CPad_CHECK_TRIG_R(0) || CPad_CHECK_TRIG_START(0)) { if (mAcch.ChkGroundHit()) { return TRUE; } } } return FALSE; } /* 00003958-00003D20 .text lightHitCheck__10daNpc_Md_cFv */ BOOL daNpc_Md_c::lightHitCheck() { BOOL lightHit = FALSE; cXyz lightVec; cMtx_multVecSR(mpHarpModel->getBaseTRMtx(), &l_ms_light_local_vec, &lightVec); offLightBodyHit(); if (dComIfGp_getDetect().chk_light(¤t.pos)) { onLightBodyHit(); lightHit = TRUE; } else { cCcD_Obj* hitObj = mCyl3.GetTgHitObj(); if (hitObj && hitObj->ChkAtType(AT_TYPE_LIGHT)) { onLightBodyHit(); if (mCyl3.GetTgRVecP()->inprod(lightVec) < 0.0f) { lightHit = TRUE; } } } if (lightHit) { onLightHit(); if (mCps.ChkAtHit()) { fopAc_ac_c* hitActor = mCps.GetAtHitAc(); if (fopAcM_checkStatus(this, fopAcStts_CARRY_e) && !isNoCarryAction()) { if (hitActor != dComIfGp_getLinkPlayer() && m3058.getEmitter() == NULL) { dComIfGp_particle_set(0x8232, ¤t.pos, NULL, NULL, 0xFF, &m3058); } } else if (m3058.getEmitter() == NULL) { dComIfGp_particle_set(0x8232, ¤t.pos, NULL, NULL, 0xFF, &m3058); } cM3d_lineVsPosSuisenCross(mCps.GetStart(), mCps.GetEnd(), *mCps.GetAtHitPosP(), &m3058.getPos()); s16 angleY = cM_atan2s(lightVec.x, lightVec.z); s16 angleX = cM_atan2s(-lightVec.y, lightVec.absXZ()); m3058.setAngle(angleX, angleY, 0); } else { m3058.end(); } if (!mCps.ChkAtSet()) { fopAcM_seStartCurrent(this, JA_SE_OBJ_MIRROR_REFLECT, 0); } else { fopAcM_seStartCurrent(this, JA_SE_OBJ_MIRROR_LIGHT, 0); } if (m304C.getEmitter() == NULL) { m304C.makeEmitter(0x8226, mpHarpLightModel->getBaseTRMtx(), ¤t.pos, NULL); JPABaseEmitter* emitter = m304C.getEmitter(); JGeometry::TVec3 temp; temp.set(1.0f, 1.0f, 1.0f); emitter->setEmitterScale(temp); temp.set(0.0f, 4.0f, 0.0f); emitter->setEmitterTranslation(temp); } } else { offLightHit(); m3058.end(); if (m304C.getEmitter()) { m304C.getEmitter()->setGlobalAlpha(0); m304C.end(); } } return lightHit; } /* 00003D20-00003D68 .text wallHitCheck__10daNpc_Md_cFv */ int daNpc_Md_c::wallHitCheck() { if (mAcch.ChkWallHit()) { for (int i = 0; i < ARRAY_SIZE(mAcchCir); i++) { if (mAcchCir[i].ChkWallHit()) { return i; } } } return -1; } /* 00003D68-00003E74 .text NpcCall__10daNpc_Md_cFPi */ void daNpc_Md_c::NpcCall(int*) { /* Nonmatching */ } /* 00003E74-00003FE0 .text checkCollision__10daNpc_Md_cFi */ void daNpc_Md_c::checkCollision(int) { /* Nonmatching */ } /* 00003FE0-00004040 .text restartPoint__10daNpc_Md_cFs */ void daNpc_Md_c::restartPoint(s16 i_point) { setPointRestart(i_point, 2); setNpcAction(&waitNpcAction, NULL); } /* 00004040-00004174 .text isTagCheckOK__10daNpc_Md_cFv */ BOOL daNpc_Md_c::isTagCheckOK() { /* Nonmatching */ } /* 00004174-00004230 .text setMessageAnimation__10daNpc_Md_cFUc */ void daNpc_Md_c::setMessageAnimation(u8) { /* Nonmatching */ } /* 00004230-0000433C .text waitGroundCheck__10daNpc_Md_cFv */ void daNpc_Md_c::waitGroundCheck() { /* Nonmatching */ } /* 0000433C-000043D4 .text chkAdanmaeDemoOrder__10daNpc_Md_cFv */ void daNpc_Md_c::chkAdanmaeDemoOrder() { /* Nonmatching */ } /* 000043D4-00004B04 .text waitNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::waitNpcAction(void*) { /* Nonmatching */ } /* 00004B04-00004CFC .text harpWaitNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::harpWaitNpcAction(void*) { /* Nonmatching */ } static u32 l_msgId; static msg_class* l_msg; /* 00004CFC-00004D40 .text XYTalkCheck__10daNpc_Md_cFv */ BOOL daNpc_Md_c::XYTalkCheck() { BOOL ret = TRUE; if (isXYTalk()) { ret = dComIfGp_evmng_ChkPresentEnd(); } return ret; } /* 00004D40-0000504C .text talkNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::talkNpcAction(void*) { /* Nonmatching */ } /* 0000504C-000051FC .text shipTalkNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::shipTalkNpcAction(void*) { /* Nonmatching */ } /* 000051FC-00005308 .text kyohiNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::kyohiNpcAction(void*) { /* Nonmatching */ } /* 00005308-00005534 .text shipNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::shipNpcAction(void*) { /* Nonmatching */ } /* 00005534-000057B0 .text mwaitNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::mwaitNpcAction(void*) { /* Nonmatching */ } /* 000057B0-000058E0 .text squatdownNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::squatdownNpcAction(void*) { /* Nonmatching */ } /* 000058E0-00005A74 .text sqwait01NpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::sqwait01NpcAction(void*) { /* Nonmatching */ } /* 00005A74-00005AB0 .text changeCaught02__10daNpc_Md_cFv */ void daNpc_Md_c::changeCaught02() { setAnm(0x25); cLib_onBit(m30F0, 0x01UL); } /* 00005AB0-000061A8 .text carryNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::carryNpcAction(void*) { /* Nonmatching */ } /* 000061A8-00006450 .text throwNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::throwNpcAction(void*) { /* Nonmatching */ } /* 00006450-00006764 .text glidingNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::glidingNpcAction(void*) { /* Nonmatching */ } /* 00006764-00006B24 .text windProc__10daNpc_Md_cFv */ void daNpc_Md_c::windProc() { /* Nonmatching */ } /* 00006B24-00006C80 .text fallNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::fallNpcAction(void*) { /* Nonmatching */ } /* 00006C80-00006F70 .text fall02NpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::fall02NpcAction(void*) { /* Nonmatching */ } /* 00006F70-000071E4 .text wallHitNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::wallHitNpcAction(void*) { /* Nonmatching */ } /* 000071E4-000073BC .text land01NpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::land01NpcAction(void*) { /* Nonmatching */ } /* 000073BC-000074C0 .text land02NpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::land02NpcAction(void*) { /* Nonmatching */ } /* 000074C0-000075C4 .text land03NpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::land03NpcAction(void*) { /* Nonmatching */ } /* 000075C4-00007824 .text piyo2NpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::piyo2NpcAction(void*) { /* Nonmatching */ } /* 00007824-0000786C .text deleteNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::deleteNpcAction(void*) { if (mActionStatus == ACTION_STARTING) { mActionStatus++; // ACTION_ONGOING } else if (mActionStatus != ACTION_ENDING) { fopAcM_delete(this); } return TRUE; } /* 0000786C-00007A98 .text demoFlyNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::demoFlyNpcAction(void*) { /* Nonmatching */ } /* 00007A98-00007B64 .text routeAngCheck__10daNpc_Md_cFR4cXyzPs */ void daNpc_Md_c::routeAngCheck(cXyz&, s16*) { /* Nonmatching */ } /* 00007B64-00007DC8 .text routeWallCheck__10daNpc_Md_cFR4cXyzR4cXyzPs */ void daNpc_Md_c::routeWallCheck(cXyz&, cXyz&, s16*) { /* Nonmatching */ } /* 00007DC8-00008054 .text checkForwardGroundY__10daNpc_Md_cFs */ void daNpc_Md_c::checkForwardGroundY(s16) { /* Nonmatching */ } /* 000081EC-000082C0 .text checkWallJump__10daNpc_Md_cFs */ void daNpc_Md_c::checkWallJump(s16) { /* Nonmatching */ } /* 000082C0-00008858 .text routeCheck__10daNpc_Md_cFfPs */ void daNpc_Md_c::routeCheck(f32, s16*) { /* Nonmatching */ } /* 00008858-00008CEC .text searchNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::searchNpcAction(void*) { /* Nonmatching */ } /* 00008CEC-00008E54 .text hitNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::hitNpcAction(void*) { /* Nonmatching */ } /* 00008E54-00008FFC .text setNormalSpeedF__10daNpc_Md_cFfffff */ void daNpc_Md_c::setNormalSpeedF(f32, f32, f32, f32, f32) { /* Nonmatching */ } /* 00008FFC-000090EC .text setSpeedAndAngleNormal__10daNpc_Md_cFfs */ void daNpc_Md_c::setSpeedAndAngleNormal(f32, s16) { /* Nonmatching */ } /* 000090EC-00009180 .text walkProc__10daNpc_Md_cFfs */ void daNpc_Md_c::walkProc(f32, s16) { /* Nonmatching */ } /* 00009180-000092E0 .text jumpNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::jumpNpcAction(void*) { /* Nonmatching */ } /* 000092E0-000095C8 .text escapeNpcAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::escapeNpcAction(void*) { /* Nonmatching */ } /* 000095C8-00009894 .text waitPlayerAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::waitPlayerAction(void*) { if (mActionStatus == ACTION_STARTING) { cLib_offBit(m30F0, 0x10UL | 0x02UL | 0x01UL); // TODO cLib_onBit(m30F0, 0x04UL); // TODO setAnm(0); speedF = 0.0f; mAcchCir[1].SetWall(60.0f, 20.0f); m311A = 0; m310C = 0.0f; m3114 = 0; m3116 = 0; mActionStatus += 1; // ACTION_ONGOING } else if (mActionStatus != ACTION_ENDING && !flyCheck()) { dAttention_c& attention = dComIfGp_getAttention(); if (g_mDoCPd_cpadInfo[0].mMainStickValue >= l_HIO.m104 || attention.Lockon()) { s16 stickAngle = getStickAngY(0); cLib_addCalcAngleS(¤t.angle.y, stickAngle, l_HIO.m008.m26, l_HIO.m008.m28, l_HIO.m008.m2A); cXyz stickPos; int temp = calcStickPos(stickAngle, &stickPos); if (temp == 0) { shape_angle.y = current.angle.y; } else if (g_mDoCPd_cpadInfo[0].mMainStickValue >= l_HIO.m108) { shape_angle.y = current.angle.y; } s16 tempAngle = shape_angle.y; mJntCtrl.lookAtTarget(&tempAngle, &stickPos, current.pos, shape_angle.y, l_HIO.mNpc.m18, false); if (temp > 0) { shape_angle.y = tempAngle; } current.angle.y = shape_angle.y; if (g_mDoCPd_cpadInfo[0].mMainStickValue >= l_HIO.m108) { if (temp == 0) { current.angle.y = stickAngle; setPlayerAction(walkPlayerAction, NULL); } } } else { mJntCtrl.lookAtTarget(&shape_angle.y, NULL, cXyz::Zero, shape_angle.y, 0, false); waitGroundCheck(); current.angle.y = shape_angle.y; } setAttention(mpMorf->isMorf()); } return TRUE; } /* 00009894-00009B08 .text walkPlayerAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::walkPlayerAction(void*) { /* Nonmatching */ } /* 00009B08-00009CCC .text hitPlayerAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::hitPlayerAction(void*) { /* Nonmatching */ } /* 00009CCC-00009E7C .text jumpPlayerAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::jumpPlayerAction(void*) { /* Nonmatching */ } /* 00009E7C-0000A534 .text flyPlayerAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::flyPlayerAction(void*) { /* Nonmatching */ } /* 0000A534-0000A698 .text landPlayerAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::landPlayerAction(void*) { /* Nonmatching */ } /* 0000A698-0000A8D0 .text mkamaePlayerAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::mkamaePlayerAction(void*) { /* Nonmatching */ } /* 0000A8D0-0000A9BC .text carryPlayerAction__10daNpc_Md_cFPv */ BOOL daNpc_Md_c::carryPlayerAction(void*) { /* Nonmatching */ } /* 0000A9BC-0000AC80 .text eventProc__10daNpc_Md_cFv */ void daNpc_Md_c::eventProc() { /* Nonmatching */ } /* 0000AC80-0000AC84 .text initialDefault__10daNpc_Md_cFi */ void daNpc_Md_c::initialDefault(int) { } /* 0000AC84-0000ACB4 .text actionDefault__10daNpc_Md_cFi */ bool daNpc_Md_c::actionDefault(int) { lookBack(0, 0, 1); return TRUE; } /* 0000ACB4-0000AD9C .text initialWaitEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialWaitEvent(int) { /* Nonmatching */ } /* 0000AD9C-0000ADCC .text actionWaitEvent__10daNpc_Md_cFi */ bool daNpc_Md_c::actionWaitEvent(int) { return cLib_calcTimer(&m3118) == 0; } /* 0000ADCC-0000AEB8 .text initialLetterEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialLetterEvent(int) { /* Nonmatching */ } /* 0000AEB8-0000AFB0 .text initialMsgSetEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialMsgSetEvent(int) { /* Nonmatching */ } /* 0000AFB0-0000AFFC .text actionMsgSetEvent__10daNpc_Md_cFi */ bool daNpc_Md_c::actionMsgSetEvent(int) { lookBack(1, 0, 0); setAttention(true); return talk_init(); } /* 0000AFFC-0000B070 .text actionMsgEndEvent__10daNpc_Md_cFi */ BOOL daNpc_Md_c::actionMsgEndEvent(int param_1) { BOOL ret = talk(0); if (ret) { initialEndEvent(param_1); } lookBack(1, 0, 0); setAttention(true); return ret; } /* 0000B070-0000B728 .text initialMovePosEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialMovePosEvent(int) { /* Nonmatching */ } /* 0000B728-0000B79C .text initialFlyEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialFlyEvent(int) { /* Nonmatching */ } /* 0000B79C-0000B870 .text actionFlyEvent__10daNpc_Md_cFi */ bool daNpc_Md_c::actionFlyEvent(int) { /* Nonmatching */ } /* 0000B870-0000B890 .text initialGlidingEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialGlidingEvent(int) { mGravity = l_HIO.m0F4; mMaxFallSpeed = -100.0f; } /* 0000B890-0000B934 .text actionGlidingEvent__10daNpc_Md_cFi */ bool daNpc_Md_c::actionGlidingEvent(int) { /* Nonmatching */ } /* 0000B934-0000B99C .text initialLandingEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialLandingEvent(int) { /* Nonmatching */ } /* 0000B99C-0000B9E0 .text actionLandingEvent__10daNpc_Md_cFi */ bool daNpc_Md_c::actionLandingEvent(int) { if (m312A != 0) { setAnm(0); return true; } setAttention(true); return false; } /* 0000B9E0-0000B9F8 .text initialWalkEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialWalkEvent(int) { speedF = 0.0f; m3118 = 20*30; } /* 0000B9F8-0000BCC4 .text actionWalkEvent__10daNpc_Md_cFi */ bool daNpc_Md_c::actionWalkEvent(int) { /* Nonmatching */ } /* 0000BCC4-0000BF1C .text actionDashEvent__10daNpc_Md_cFi */ bool daNpc_Md_c::actionDashEvent(int) { /* Nonmatching */ } /* 0000BF1C-0000C12C .text initialEndEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialEndEvent(int) { /* Nonmatching */ } /* 0000C12C-0000C250 .text actionTactEvent__10daNpc_Md_cFi */ bool daNpc_Md_c::actionTactEvent(int) { /* Nonmatching */ } /* 0000C250-0000C288 .text initialTakeOffEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialTakeOffEvent(int) { setAnm(0x18); m312A = 0; } /* 0000C288-0000C2C4 .text actionTakeOffEvent__10daNpc_Md_cFi */ bool daNpc_Md_c::actionTakeOffEvent(int) { if (m312A != 0) { return TRUE; } setAttention(true); return FALSE; } /* 0000C2C4-0000C360 .text initialOnetimeEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialOnetimeEvent(int) { /* Nonmatching */ } /* 0000C360-0000C3C4 .text actionOnetimeEvent__10daNpc_Md_cFi */ bool daNpc_Md_c::actionOnetimeEvent(int) { if (m312A != 0) { if (m3104 == 0x1A) { setAnm(0); } else { return true; } } setAttention(true); return false; } /* 0000C3C4-0000C48C .text initialQuake__10daNpc_Md_cFi */ void daNpc_Md_c::initialQuake(int) { /* Nonmatching */ } /* 0000C48C-0000C4DC .text setHarpPlayNum__10daNpc_Md_cFi */ void daNpc_Md_c::setHarpPlayNum(int) { /* Nonmatching */ } /* 0000C4DC-0000C500 .text initialHarpPlayEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialHarpPlayEvent(int) { setHarpPlayNum(0); } /* 0000C500-0000C554 .text actionHarpPlayEvent__10daNpc_Md_cFi */ bool daNpc_Md_c::actionHarpPlayEvent(int) { if (m312A != 0) { setHarpPlayNum(0); } if (daPy_getPlayerLinkActorClass()->checkEndTactMusic()) { return true; } return false; } /* 0000C554-0000C570 .text initialOffLinkEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialOffLinkEvent(int) { daPy_getPlayerLinkActorClass()->onPlayerNoDraw(); } /* 0000C570-0000C58C .text initialOnLinkEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialOnLinkEvent(int) { daPy_getPlayerLinkActorClass()->offPlayerNoDraw(); } /* 0000C58C-0000C654 .text initialTurnEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialTurnEvent(int) { /* Nonmatching */ } /* 0000C654-0000C7CC .text actionTurnEvent__10daNpc_Md_cFi */ bool daNpc_Md_c::actionTurnEvent(int) { /* Nonmatching */ } /* 0000C7CC-0000CA5C .text initialSetAnmEvent__10daNpc_Md_cFi */ void daNpc_Md_c::initialSetAnmEvent(int) { /* Nonmatching */ } /* 0000CA5C-0000CA80 .text initialLookDown__10daNpc_Md_cFi */ void daNpc_Md_c::initialLookDown(int) { setAnm(0x2F); } /* 0000CA80-0000CAA4 .text initialLookUp__10daNpc_Md_cFi */ void daNpc_Md_c::initialLookUp(int) { setAnm(5); } /* 0000CAA4-0000CB8C .text actionLookDown__10daNpc_Md_cFi */ bool daNpc_Md_c::actionLookDown(int) { /* Nonmatching */ } /* 0000CB8C-0000CC10 .text talk_init__10daNpc_Md_cFv */ bool daNpc_Md_c::talk_init() { if (l_msgId == fpcM_ERROR_PROCESS_ID_e) { if (mMsgId == 0x5AC) { l_msgId = fopMsgM_tactMessageSet(); } else { l_msgId = fopMsgM_messageSet(mMsgId, this); } } else { l_msg = fopMsgM_SearchByID(l_msgId); if (l_msg) { return true; } } return false; } /* 0000CC10-0000CDCC .text talk__10daNpc_Md_cFi */ BOOL daNpc_Md_c::talk(int) { /* Nonmatching */ } /* 0000CDCC-0000CDF4 .text getAnmType__10daNpc_Md_cFUc */ void daNpc_Md_c::getAnmType(u8) { /* Nonmatching */ } /* 0000CDF4-0000CF18 .text initTexPatternAnm__10daNpc_Md_cFUcb */ BOOL daNpc_Md_c::initTexPatternAnm(u8 btpIdx, bool param_2) { struct btp_anm_tbl { /* 0x00 */ char m00[0x20]; /* 0x20 */ u8 m20; }; static btp_anm_tbl btpAnmTbl[] = { {}, // TODO }; J3DModelData* modelData = mpMorf->getModel()->getModelData(); bool ret = false; J3DAnmTexPattern* eyeTexPtrn = (J3DAnmTexPattern*)dComIfG_getObjectRes(mModelArcName, btpAnmTbl[btpIdx].m00); JUT_ASSERT(7502, eyeTexPtrn != 0); if (m0520.init(modelData, eyeTexPtrn, 1, 1, 1.0f, 0, -1, param_2, 0)) { m3112 = eyeTexPtrn->getFrameMax(); m3133 = 0; m3136 = btpAnmTbl[btpIdx].m20; m3137 = btpIdx; ret = true; } return ret; } /* 0000CF18-0000CFCC .text playTexPatternAnm__10daNpc_Md_cFv */ void daNpc_Md_c::playTexPatternAnm() { /* Nonmatching */ } /* 0000CFCC-0000D0B8 .text initLightBtkAnm__10daNpc_Md_cFb */ BOOL daNpc_Md_c::initLightBtkAnm(bool) { /* Nonmatching */ } /* 0000D0B8-0000D0DC .text playLightBtkAnm__10daNpc_Md_cFv */ void daNpc_Md_c::playLightBtkAnm() { mLightBtkAnm.play(); } /* 0000D0DC-0000D4CC .text setAnm__10daNpc_Md_cFi */ bool daNpc_Md_c::setAnm(int anmIdx) { struct anm_tbl { /* 0x00 */ char m00[0x20]; /* 0x20 */ char m20[0x20]; }; struct anm_prm { /* 0x00 */ s8 m00; /* 0x01 */ u8 m01; /* 0x02 */ u8 m02; /* 0x04 */ int loopMode; /* 0x08 */ f32 morf; /* 0x0C */ f32 speed; }; static anm_tbl l_anmTbl[0x27] = { // TODO }; static anm_prm l_anmPrm[0x32] = { // TODO }; static anm_tbl armAnmTbl[0x20] = { // TODO }; static anm_tbl wingAnmTbl[8] = { // TODO }; bool ret = false; m3104 = anmIdx; anm_prm* prm = &l_anmPrm[anmIdx]; f32 speed = prm->speed; f32 morf = prm->morf; if (anmIdx == 6) { speed = l_HIO.m118; } else if (anmIdx == 9 || anmIdx == 0xA) { speed = l_HIO.m11C; } else if (anmIdx == 0x2E) { speed = l_HIO.m124; } else if (anmIdx == 0x28) { morf = l_HIO.m068.m4; speed = l_HIO.m068.m8; } if (anmIdx == 7 || anmIdx == 8) { morf = l_HIO.m1A8; } if (prm->m00 != m312D || mpMorf->getPlaySpeed() != prm->speed) { m312D = prm->m00; anm_tbl* bodyAnm = &l_anmTbl[m312D]; m312A = 0; dNpc_Md_setAnm(mpMorf, m30FC, prm->loopMode, morf, speed, bodyAnm->m00, bodyAnm->m20, mModelArcName); m30D0 = mpMorf->getFrame(); if (prm->m01 < 0x80) { anm_tbl* armAnm = &armAnmTbl[prm->m01]; dNpc_Md_setAnm(mpArmMorf, m30FC, prm->loopMode, morf, speed, armAnm->m00, armAnm->m20, mModelArcName); ret = false; } else { if (m3138 != 7) { dNpc_Md_setAnm(mpWingMorf, prm->loopMode, morf, speed, wingAnmTbl[prm->m01 - 0x80].m00, mModelArcName); } ret = true; } if (m3104 == 0x12 || m3104 == 0x1F) { fopAcM_seStartCurrent(this, JA_SE_CM_MD_HARP_SET_UP, 0); } else if (m3104 == 0x13 || m3104 == 0x21) { fopAcM_seStartCurrent(this, JA_SE_CM_MD_HARP_TAKE_OFF, 0); } } if (prm->m02 != m3137) { initTexPatternAnm(prm->m02, true); } if (m312D == 0x0E || m312D == 0x12 || m312D == 0x13 || m312D == 0x1A || m312D == 0x1C || m312D == 0x25) { cLib_onBit(m30F0, 0x80UL); // TODO inline } else if (m312D != 0x0F && m312D != 0x1B) { cLib_offBit(m30F0, 0x80UL); // TODO inline } if (m312D == 0x1B || m312D == 0x1C) { cLib_onBit(m30F0, 0x4000UL); // TODO inline } else { cLib_offBit(m30F0, 0x4000UL); // TODO inline } if (m312D == 0x10) { if (m0508[1] == NULL) { m0508[1] = dComIfGp_particle_set(0x819D, ¤t.pos, NULL, NULL, 0xFF, NULL, fopAcM_GetRoomNo(this), &mTevStr.mColorK0, &mTevStr.mColorK0); if (m0508[1]) { m0508[1]->becomeImmortalEmitter(); } } } else { deletePiyoPiyo(); } return ret; } /* 0000D4CC-0000D5E4 .text dNpc_Md_setAnm__10daNpc_Md_cFP15mDoExt_McaMorf2fiffPcPcPCc */ bool daNpc_Md_c::dNpc_Md_setAnm(mDoExt_McaMorf2* pMorf, f32 param_f1, int loopMode, f32 morf, f32 speed, char* fileName1, char* filename2, const char* arcName) { bool ret = false; J3DAnmTransform* bck1 = NULL; J3DAnmTransform* bck2 = NULL; if (pMorf) { bck1 = (J3DAnmTransform*)dComIfG_getObjectRes(arcName, fileName1); if (strcmp(filename2, "") != 0) { bck2 = (J3DAnmTransform*)dComIfG_getObjectRes(arcName, filename2); } pMorf->setAnm(bck1, bck2, param_f1, loopMode, morf, speed, 0.0f, -1.0f, NULL); ret = true; } return ret; } /* 0000D5E4-0000D614 .text dNpc_Md_setAnm__10daNpc_Md_cFP14mDoExt_McaMorfiffPcPCc */ bool daNpc_Md_c::dNpc_Md_setAnm(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f32 speed, char* animFilename, const char* arcName) { return dNpc_setAnmFNDirect(pMorf, loopMode, morf, speed, animFilename, NULL, arcName); } /* 0000D614-0000D82C .text chkAttention__10daNpc_Md_cF4cXyzsi */ void daNpc_Md_c::chkAttention(cXyz, s16, int) { /* Nonmatching */ } /* 0000D82C-0000D8FC .text chkArea__10daNpc_Md_cFP4cXyz */ void daNpc_Md_c::chkArea(cXyz*) { /* Nonmatching */ } /* 0000D8FC-0000D950 .text carryCheck__10daNpc_Md_cFv */ void daNpc_Md_c::carryCheck() { /* Nonmatching */ } /* 0000D950-0000DAD4 .text eventOrder__10daNpc_Md_cFv */ void daNpc_Md_c::eventOrder() { /* Nonmatching */ } /* 0000DAD4-0000DC14 .text checkOrder__10daNpc_Md_cFv */ void daNpc_Md_c::checkOrder() { /* Nonmatching */ } /* 0000DC14-0000DCB0 .text checkCommandTalk__10daNpc_Md_cFv */ bool daNpc_Md_c::checkCommandTalk() { if (mEvtInfo.checkCommandTalk()) { if (dComIfGp_event_chkTalkXY()) { onXYTalk(); if (!isDefaultTalkXY()) { if (mCurEventMode == 3) { mCurEventMode = 0; } return false; } } else { offXYTalk(); } return true; } else { offXYTalk(); return false; } } /* 0000DCB0-0000E410 .text next_msgStatus__10daNpc_Md_cFPUl */ u16 daNpc_Md_c::next_msgStatus(u32* pCurrMsgNo) { u16 msgStatus = dNpcMsgStts_MSG_CONTINUES_e; switch (*pCurrMsgNo) { case 0x5AC: msgStatus = dNpcMsgStts_MSG_ENDS_e; break; case 0x17D5: case 0x1805: *pCurrMsgNo = 0x17D6; break; case 0x17D6: *pCurrMsgNo = 0x17D7; break; case 0x17D7: *pCurrMsgNo = 0x17D8; break; case 0x17D8: mCurEventMode = 4; msgStatus = dNpcMsgStts_MSG_ENDS_e; break; case 0x17D9: *pCurrMsgNo = 0x1802; break; case 0x1802: *pCurrMsgNo = 0x17DA; break; case 0x17DA: *pCurrMsgNo = 0x17DB; break; case 0x17DB: dComIfGs_onEventBit(0x0E02); msgStatus = dNpcMsgStts_MSG_ENDS_e; break; case 0x17DD: *pCurrMsgNo = 0x17DE; break; case 0x17DE: mCurEventMode = 5; msgStatus = dNpcMsgStts_MSG_ENDS_e; break; case 0x17DF: *pCurrMsgNo = 0x17E0; break; case 0x17E0: *pCurrMsgNo = 0x17E1; break; case 0x17E1: *pCurrMsgNo = 0x17E2; break; case 0x17E2: *pCurrMsgNo = 0x17E3; break; case 0x17E4: dComIfGs_onEventBit(0x1101); msgStatus = dNpcMsgStts_MSG_ENDS_e; break; case 0x17E5: dComIfGs_onEventBit(0x1280); msgStatus = dNpcMsgStts_MSG_ENDS_e; break; case 0x17E6: *pCurrMsgNo = 0x17E7; break; case 0x17E7: *pCurrMsgNo = 0x17E8; break; case 0x17E8: *pCurrMsgNo = 0x17E9; break; case 0x17E9: *pCurrMsgNo = 0x17EA; break; case 0x17EA: *pCurrMsgNo = 0x17EB; break; case 0x17EB: *pCurrMsgNo = 0x17EC; break; case 0x17EC: *pCurrMsgNo = 0x17ED; break; case 0x17ED: *pCurrMsgNo = 0x17EE; break; case 0x17EE: if (l_msg->mSelectedChoiceIdx == 1) { *pCurrMsgNo = 0x17EF; } else { *pCurrMsgNo = 0x17F0; } break; case 0x17EF: *pCurrMsgNo = 0x17ED; break; case 0x17F0: *pCurrMsgNo = 0x17F1; break; case 0x17F1: mCurEventMode = 7; msgStatus = dNpcMsgStts_MSG_ENDS_e; break; case 0x17F3: *pCurrMsgNo = 0x17F4; break; case 0x17F4: dComIfGs_onEventBit(0x1104); // Fall-through case 0x17F8: cLib_onBit(m30F0, 0x40UL); msgStatus = dNpcMsgStts_MSG_ENDS_e; break; case 0x17F7: *pCurrMsgNo = 0x17F8; break; case 0x17FA: *pCurrMsgNo = 0x17FB; break; case 0x17FB: *pCurrMsgNo = 0x17FC; break; case 0x17FC: *pCurrMsgNo = 0x17FD; break; case 0x17FD: *pCurrMsgNo = 0x17FE; break; case 0x17FE: *pCurrMsgNo = 0x17FF; break; case 0x1800: *pCurrMsgNo = 0x1801; break; case 0x1801: dComIfGs_onEventBit(0x1102); msgStatus = dNpcMsgStts_MSG_ENDS_e; break; case 0x19C9: *pCurrMsgNo = 0x19ca; break; case 0x19CA: *pCurrMsgNo = 0x19CB; break; case 0x19CB: *pCurrMsgNo = 0x19CC; break; case 0x19CC: *pCurrMsgNo = 0x19CD; break; case 0x19CD: *pCurrMsgNo = 0x19CE; break; case 0x19CE: *pCurrMsgNo = 0x19CF; break; case 0x19CF: *pCurrMsgNo = 0x19D0; break; case 0x19D0: *pCurrMsgNo = 0x19D1; break; case 0x19D1: dComIfGs_onEventBit(0x1402); onSeaTalk(); msgStatus = dNpcMsgStts_MSG_ENDS_e; break; case 0x19D2: *pCurrMsgNo = 0x19D3; break; case 0x19D3: *pCurrMsgNo = 0x19D4; break; case 0x19D4: *pCurrMsgNo = 0x19D5; break; case 0x19D6: *pCurrMsgNo = 0x19D7; break; case 0x19D7: *pCurrMsgNo = 0x19D8; break; case 0x19D8: dComIfGs_onEventBit(0x1504); case 0x19D9: msgStatus = dNpcMsgStts_MSG_ENDS_e; break; case 0x19DA: *pCurrMsgNo = 0x19db; break; case 0x19DD: *pCurrMsgNo = 0x19de; break; case 0x19E0: *pCurrMsgNo = 0x19e1; break; case 0x19E1: *pCurrMsgNo = 0x19e2; break; case 0x19E2: *pCurrMsgNo = 0x19e3; break; case 0x19E3: *pCurrMsgNo = 0x19e4; break; case 0x19E5: *pCurrMsgNo = 0x19e6; break; case 0x19E7: *pCurrMsgNo = 0x19e8; break; case 0x19F6: *pCurrMsgNo = 0x19f7; break; case 0x19F7: *pCurrMsgNo = 0x19d2; break; case 0x19F8: *pCurrMsgNo = 0x19f9; break; case 0x19F9: *pCurrMsgNo = 0x19fa; break; case 0x19FA: *pCurrMsgNo = 0x19fb; break; case 0x19FB: case 0x19FF: dComIfGs_onEventBit(0x2E40); onSeaTalk(); // Fall-through case 0x1A01: dComIfGs_onEventBit(0x2C08); msgStatus = dNpcMsgStts_MSG_ENDS_e; break; case 0x19FC: *pCurrMsgNo = 0x19FD; break; case 0x19FD: *pCurrMsgNo = 0x19FE; break; case 0x19FE: *pCurrMsgNo = 0x19FF; break; case 0x1A00: *pCurrMsgNo = 0x1A01; break; case 0x1A02: dComIfGs_onEventBit(0x3B80); msgStatus = dNpcMsgStts_MSG_ENDS_e; break; default: msgStatus = dNpcMsgStts_MSG_ENDS_e; break; } return msgStatus; } /* 0000E410-0000E64C .text getMsg__10daNpc_Md_cFv */ void daNpc_Md_c::getMsg() { /* Nonmatching */ } /* 0000E64C-0000E95C .text setCollision__10daNpc_Md_cFv */ void daNpc_Md_c::setCollision() { /* Nonmatching */ } /* 0000E95C-0000E9F0 .text setAttention__10daNpc_Md_cFb */ void daNpc_Md_c::setAttention(bool) { /* Nonmatching */ } /* 0000E9F0-0000EB28 .text lookBack__10daNpc_Md_cFiii */ void daNpc_Md_c::lookBack(int, int, int) { /* Nonmatching */ } /* 0000EB28-0000EC38 .text lookBack__10daNpc_Md_cFP4cXyzii */ void daNpc_Md_c::lookBack(cXyz*, int, int) { /* Nonmatching */ } /* 0000EC38-0000EDD0 .text lookBackWaist__10daNpc_Md_cFsf */ void daNpc_Md_c::lookBackWaist(s16, f32) { /* Nonmatching */ } /* 0000EDD0-0000F100 .text setBaseMtx__10daNpc_Md_cFv */ void daNpc_Md_c::setBaseMtx() { /* Nonmatching */ } /* 0000F100-0000F160 .text deletePiyoPiyo__10daNpc_Md_cFv */ void daNpc_Md_c::deletePiyoPiyo() { /* Nonmatching */ } /* 0000F160-0000F4E0 .text init__10daNpc_Md_cFv */ BOOL daNpc_Md_c::init() { /* Nonmatching */ } /* 0000F4E0-0000F8EC .text draw__10daNpc_Md_cFv */ BOOL daNpc_Md_c::draw() { if (cLib_checkBit(m30F0, 0x1000UL)) { if (dComIfGp_getShipActor() && dComIfGp_getShipActor()->checkHeadNoDraw()) { return TRUE; } } else { if (fopAcM_GetHomeRoomNo(this) < 0) { return TRUE; } if (!dComIfGp_roomControl_checkStatusFlag(current.roomNo, 0x10)) { return TRUE; } } J3DModel* model = mpMorf->getModel(); J3DModelData* modelData = model->getModelData(); g_env_light.settingTevStruct(0, ¤t.pos, &mTevStr); drawDamageFog(); g_env_light.setLightTevColorType(model, &mTevStr); m0520.entry(modelData); mpMorf->entryDL(); m0520.remove(modelData); if (!isTypeShipRide()) { if (cLib_checkBit(m30F0, 0x1UL)) { model = mpWingMorf->getModel(); g_env_light.setLightTevColorType(model, &mTevStr); mpWingMorf->entryDL(); } else { model = mpArmMorf->getModel(); g_env_light.setLightTevColorType(model, &mTevStr); mpArmMorf->entryDL(); } } else { model = mpArmMorf->getModel(); g_env_light.setLightTevColorType(model, &mTevStr); mpArmMorf->entryDL(); } g_env_light.setLightTevColorType(mpHarpModel, &mTevStr); mDoExt_modelUpdateDL(mpHarpModel); if (cLib_checkBit(m30F0, 0x2000UL)) { mLightBtkAnm.entry(mpHarpLightModel->getModelData()); mDoExt_modelUpdateDL(mpHarpLightModel); mLightBtkAnm.remove(mpHarpLightModel->getModelData()); mDoMtx_copy(mpHarpModel->getBaseTRMtx(), mDoMtx_stack_c::get()); mDoMtx_stack_c::transM(l_HIO.m034.m0C, l_HIO.m034.m10, l_HIO.m034.m14); Mtx mtx; mDoMtx_copy(mDoMtx_stack_c::get(), mtx); mDoMtx_stack_c::transS(l_ms_light_local_start); mDoMtx_stack_c::YrotM(0x8000); f32 temp = mCps.GetAtVecP()->abs(); mDoMtx_stack_c::scaleM(0.1f, 0.1f, temp * (1.0f/9600.0f)); mDoMtx_stack_c::revConcat(mtx); m0B70.update(mDoMtx_stack_c::get(), 0xFF, 90.0f); dComIfGd_getXluList()->entryImm(&m0B70, 0x1F); } if (!cLib_checkBit(m30F0, 0x1000UL) && !fopAcM_checkStatus(this, fopAcStts_CARRY_e) && cLib_checkBit(m30F0, 0x20000UL)) { cXyz shadowPos(current.pos.x, current.pos.y + 150.0f, current.pos.z); mShadowId = dComIfGd_setShadow( mShadowId, 0, mpMorf->getModel(), &shadowPos, 800.0f, 20.0f, current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &mTevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex() ); if (mShadowId != 0) { dComIfGd_addRealShadow(mShadowId, model); dComIfGd_addRealShadow(mShadowId, mpHarpModel); } } dSnap_RegistFig(DSNAP_TYPE_MD, this, 1.0f, 1.0f, 1.0f); return TRUE; } /* 0000F8EC-0000FC18 .text animationPlay__10daNpc_Md_cFv */ void daNpc_Md_c::animationPlay() { /* Nonmatching */ } /* 0000FC18-0000FC58 .text checkPlayerRoom__10daNpc_Md_cFv */ void daNpc_Md_c::checkPlayerRoom() { /* Nonmatching */ } /* 0000FC58-000108B0 .text execute__10daNpc_Md_cFv */ BOOL daNpc_Md_c::execute() { /* Nonmatching */ } /* 000108B0-00010948 .text particle_set__10daNpc_Md_cFPP14JPABaseEmitterUs */ void daNpc_Md_c::particle_set(JPABaseEmitter** pEmitter, u16 particleID) { if (*pEmitter) { return; } (*pEmitter) = dComIfGp_particle_set(particleID, ¤t.pos, ¤t.angle, NULL, 0xFF, NULL, fopAcM_GetRoomNo(this), &mTevStr.mColorK0, &mTevStr.mColorK0); if (*pEmitter) { (*pEmitter)->becomeImmortalEmitter(); } } /* 00010948-000109A0 .text emitterTrace__10daNpc_Md_cFP14JPABaseEmitterPA4_fP5csXyz */ void daNpc_Md_c::emitterTrace(JPABaseEmitter* emitter, MtxP mtx, csXyz* angle) { if (emitter == NULL) { return; } JGeometry::TVec3 pos; pos.x = mtx[0][3]; pos.y = mtx[1][3]; pos.z = mtx[2][3]; emitter->setGlobalTranslation(pos); if (angle) { JGeometry::TVec3 rot; rot.x = angle->x; rot.y = angle->y; rot.z = angle->z; emitter->setGlobalRotation(rot); } } /* 000109A0-000109DC .text emitterDelete__10daNpc_Md_cFPP14JPABaseEmitter */ void daNpc_Md_c::emitterDelete(JPABaseEmitter** pEmitter) { if (*pEmitter == NULL) { return; } (*pEmitter)->quitImmortalEmitter(); (*pEmitter)->becomeInvalidEmitter(); (*pEmitter) = NULL; } /* 000109DC-000110BC .text __dt__10daNpc_Md_cFv */ daNpc_Md_c::~daNpc_Md_c() { dComIfG_resDelete(&mPhs, mModelArcName); if (heap) { mpMorf->stopZelAnime(); } deletePiyoPiyo(); emitterDelete(m0508); deleteHane02Emitter(); deleteHane03Emitter(); m3058.end(); m304C.end(); m3074.remove(); if (l_HIO.mChildID >= 0) { mDoHIO_root.mDoHIO_deleteChild(l_HIO.mChildID); l_HIO.mChildID = -1; } m_flying = false; m_mirror = false; m_playerRoom = false; } /* 000110BC-000110DC .text daNpc_Md_Create__FP10fopAc_ac_c */ static s32 daNpc_Md_Create(fopAc_ac_c* i_this) { return static_cast(i_this)->create(); } /* 000110DC-00011104 .text daNpc_Md_Delete__FP10daNpc_Md_c */ static BOOL daNpc_Md_Delete(daNpc_Md_c* i_this) { i_this->~daNpc_Md_c(); return TRUE; } /* 00011104-00011124 .text daNpc_Md_Execute__FP10daNpc_Md_c */ static BOOL daNpc_Md_Execute(daNpc_Md_c* i_this) { return i_this->execute(); } /* 00011124-00011144 .text daNpc_Md_Draw__FP10daNpc_Md_c */ static BOOL daNpc_Md_Draw(daNpc_Md_c* i_this) { return i_this->draw(); } /* 00011144-0001114C .text daNpc_Md_IsDelete__FP10daNpc_Md_c */ static BOOL daNpc_Md_IsDelete(daNpc_Md_c* i_this) { return TRUE; } /* 0001114C-0001119C .text execute__26daNpc_Md_followEcallBack_cFP14JPABaseEmitter */ void daNpc_Md_followEcallBack_c::execute(JPABaseEmitter* emitter) { emitter->setGlobalTranslation(mPos.x, mPos.y, mPos.z); JGeometry::TVec3 rot; rot.x = mAngle.x; rot.y = mAngle.y; rot.z = mAngle.z; emitter->setGlobalRotation(rot); } /* 0001119C-000111A4 .text setup__26daNpc_Md_followEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ void daNpc_Md_followEcallBack_c::setup(JPABaseEmitter* emitter, const cXyz*, const csXyz*, s8) { mpEmitter = emitter; } /* 000111A4-000111D8 .text end__26daNpc_Md_followEcallBack_cFv */ void daNpc_Md_followEcallBack_c::end() { if (mpEmitter) { mpEmitter->becomeInvalidEmitter(); mpEmitter->setEmitterCallBackPtr(NULL); mpEmitter = NULL; } } static actor_method_class l_daNpc_Md_Method = { (process_method_func)daNpc_Md_Create, (process_method_func)daNpc_Md_Delete, (process_method_func)daNpc_Md_Execute, (process_method_func)daNpc_Md_IsDelete, (process_method_func)daNpc_Md_Draw, }; actor_process_profile_definition g_profile_NPC_MD = { /* LayerID */ fpcLy_CURRENT_e, /* ListID */ 7, /* ListPrio */ fpcLy_CURRENT_e, /* ProcName */ PROC_NPC_MD, /* Proc SubMtd */ &g_fpcLf_Method.mBase, /* Size */ sizeof(daNpc_Md_c), /* SizeOther */ 0, /* Parameters */ 0, /* Leaf SubMtd */ &g_fopAc_Method.base, /* Priority */ 0x0175, /* Actor SubMtd */ &l_daNpc_Md_Method, /* Status */ 0x08 | fopAcStts_SHOWMAP_e | fopAcStts_CULL_e | fopAcStts_FREEZE_e | fopAcStts_UNK4000_e | fopAcStts_UNK40000_e | fopAcStts_UNK2000000_e, /* Group */ fopAc_ACTOR_e, /* CullType */ fopAc_CULLBOX_0_e, };