From ca41270d36ea1dc707a1e674b851922137c7540f Mon Sep 17 00:00:00 2001 From: YunataSavior <58997725+YunataSavior@users.noreply.github.com> Date: Sun, 16 Nov 2025 12:30:21 -0800 Subject: [PATCH] Link kasi_hana, kasi_kyu. (#2813) * kasi_mich and ashB equiv --- configure.py | 10 +- include/d/actor/d_a_npc_ashB.h | 4 +- include/d/actor/d_a_npc_kasi_hana.h | 54 +++++-- include/d/actor/d_a_npc_kasi_kyu.h | 6 +- include/d/actor/d_a_npc_kasi_mich.h | 6 +- src/d/actor/d_a_npc_ashB.cpp | 172 ++++++++++++++------- src/d/actor/d_a_npc_kasi_hana.cpp | 226 ++++++++++++++++------------ src/d/actor/d_a_npc_kasi_kyu.cpp | 53 +++++-- src/d/actor/d_a_npc_kasi_mich.cpp | 26 +++- 9 files changed, 372 insertions(+), 185 deletions(-) diff --git a/configure.py b/configure.py index 1b51cef1542..01aeeae979a 100755 --- a/configure.py +++ b/configure.py @@ -1840,8 +1840,8 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_myna"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_ni"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_aru"), - ActorRel(NonMatching, "d_a_npc_ash", extra_cflags=[DANPCF_C_HACK]), # weak func order - ActorRel(NonMatching, "d_a_npc_ashB", extra_cflags=[DANPCF_C_HACK]), + ActorRel(Equivalent, "d_a_npc_ash", extra_cflags=[DANPCF_C_HACK]), # weak func order + ActorRel(Equivalent, "d_a_npc_ashB", extra_cflags=[DANPCF_C_HACK]), # weak func order ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_bans"), ActorRel(NonMatching, "d_a_npc_blue_ns", extra_cflags=[DANPCF_C_HACK]), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_bou"), @@ -1879,9 +1879,9 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_inko"), ActorRel(Equivalent, "d_a_npc_ins", extra_cflags=[DANPCF_C_HACK]), # weak func order ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_jagar"), - ActorRel(NonMatching, "d_a_npc_kasi_hana", extra_cflags=[DANPCF_C_HACK]), - ActorRel(NonMatching, "d_a_npc_kasi_kyu", extra_cflags=[DANPCF_C_HACK]), - ActorRel(NonMatching, "d_a_npc_kasi_mich", extra_cflags=[DANPCF_C_HACK]), + ActorRel(MatchingFor("GZ2E01"), "d_a_npc_kasi_hana", extra_cflags=[DANPCF_C_HACK]), + ActorRel(MatchingFor("GZ2E01"), "d_a_npc_kasi_kyu", extra_cflags=[DANPCF_C_HACK]), + ActorRel(Equivalent, "d_a_npc_kasi_mich", extra_cflags=[DANPCF_C_HACK]), # idk this why can't link ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01", "Shield"), "d_a_npc_kdk"), ActorRel(NonMatching, "d_a_npc_kn"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_knj"), diff --git a/include/d/actor/d_a_npc_ashB.h b/include/d/actor/d_a_npc_ashB.h index 7572cd829db..490f11a2e29 100644 --- a/include/d/actor/d_a_npc_ashB.h +++ b/include/d/actor/d_a_npc_ashB.h @@ -108,8 +108,8 @@ public: /* 8095E9C8 */ bool ctrlJoint(J3DJoint*, J3DModel*); /* 8095EB94 */ static BOOL createHeapCallBack(fopAc_ac_c*); /* 8095EBB4 */ static BOOL ctrlJointCallBack(J3DJoint*, int); - /* 8095EC00 */ bool setExpressionAnm(int, bool); - /* 8095EE00 */ bool setExpressionBtp(int); + /* 8095EC00 */ inline bool setExpressionAnm(int, bool); + /* 8095EE00 */ inline bool setExpressionBtp(int); /* 8095EEE0 */ void setMotionAnm(int, f32); /* 8095F0A4 */ void reset(); /* 8095F21C */ inline bool setAction(ActionFn i_actionFn); diff --git a/include/d/actor/d_a_npc_kasi_hana.h b/include/d/actor/d_a_npc_kasi_hana.h index d8d0a3747ea..b31f1d57bd8 100644 --- a/include/d/actor/d_a_npc_kasi_hana.h +++ b/include/d/actor/d_a_npc_kasi_hana.h @@ -21,14 +21,27 @@ struct daNpcKasiHana_HIOParam { /* 0x78 */ f32 escape_spd; // 逃げる速度 - Escape Speed }; -class daNpcKasiHana_HIO_c -#ifdef DEBUG -: public mDoHIO_entry_c -#endif -{ - /* 0x8 */ daNpcKasiHana_HIOParam param; +class daNpcKasiHana_Param_c { +public: + /* 80A2067C */ virtual ~daNpcKasiHana_Param_c() {} + + static daNpcKasiHana_HIOParam const m; }; +#if DEBUG +class daNpcKasiHana_HIO_c : public mDoHIO_entry_c { +public: + daNpcKasiHana_HIO_c(); + void genMessage(JORMContext*); + + daNpcKasiHana_HIOParam m; +}; + +#define NPC_KASI_HANA_HIO_CLASS daNpcKasiHana_HIO_c +#else +#define NPC_KASI_HANA_HIO_CLASS daNpcKasiHana_Param_c +#endif + class daNpcKasi_Mng_c { public: daNpcKasi_Mng_c() { @@ -36,6 +49,7 @@ public: mCenterPos.set(0.0f, 0.0f, 0.0f); mSygnal = 0; } + ~daNpcKasi_Mng_c() {} /* 80A1AFAC */ void calcEscapeForm(); /* 80A1B0D8 */ BOOL calcCenterPos(); /* 80A1B1C8 */ f32 getDistFromCenter(); @@ -57,7 +71,7 @@ public: /* 80A1BCF0 */ void deleteAllMember(); /* 80A1BD6C */ void chgWeightHeavy(); /* 80A1BDD8 */ void chgWeightLight(); - /* 80A2065C */ cXyz getCenterPos(); + /* 80A2065C */ cXyz getCenterPos() { return mCenterPos; } void setKyuPos(const cXyz& i_pos) { mKyuPos = i_pos; } void setMichPos(const cXyz& i_pos) { mMichPos = i_pos; } @@ -70,6 +84,24 @@ public: fopAc_ac_c* getKyuActor() { return mKyuActorMngr.getActorP(); } fopAc_ac_c* getMichActor() { return mMichActorMngr.getActorP(); } + void setKyuActor(fopAc_ac_c* kyu_p) { + if (kyu_p != NULL) { + mKyuActorMngr.entry(kyu_p); + } + } + + void setMichActor(fopAc_ac_c* mich_p) { + if (mich_p != NULL) { + mMichActorMngr.entry(mich_p); + } + } + + void setDanchoActor(fopAc_ac_c* dancho_p) { + if (dancho_p != NULL) { + mDanchoActorMngr.entry(dancho_p); + } + } + /* 0x00 */ daNpcF_ActorMngr_c mHanaActorMngr; /* 0x08 */ daNpcF_ActorMngr_c mKyuActorMngr; /* 0x10 */ daNpcF_ActorMngr_c mMichActorMngr; @@ -145,9 +177,9 @@ public: /* 80A2016C */ BOOL _Evt_Kasi_Cheer2(int); /* 80A20244 */ BOOL _Evt_Kasi_Cheer2_CutInit(int const&); /* 80A20350 */ BOOL _Evt_Kasi_Cheer2_CutMain(int const&, int); - /* 80A20678 */ void adjustShapeAngle(); + /* 80A20678 */ void adjustShapeAngle() {} - int getMessageNo() { return home.angle.x; } + s16 getMessageNo() { return s16(home.angle.x); } s8 getType() { s8 rv = fopAcM_GetParam(this) & 0xFF; @@ -162,7 +194,7 @@ public: BOOL is_escape() { return mEscape; } void chgWeightHeavy() { mCcStts.SetWeight(0xFE); } void chgWeightLight() { mCcStts.SetWeight(0xD8); } - u8 getRailNo() { return fopAcM_GetParam(this) >> 8; } + int getRailNo() { return s8((fopAcM_GetParam(this) >> 8) & 0xFF); } bool chkAction(actionFunc action) { return action == mAction; } int getSwitchBitNo() { return (fopAcM_GetParam(this) >> 16) & 0xFF; } BOOL pl_front_check() { return actor_front_check(daPy_getPlayerActorClass()); } @@ -179,7 +211,7 @@ private: /* 0x0BF0 */ daNpcF_Lookat_c mLookat; /* 0x0C8C */ daNpcF_ActorMngr_c mActorMngr[1]; /* 0x0C94 */ daNpcF_Path_c mPath; - /* 0x12C4 */ daNpcKasiHana_HIO_c* mHIO; + /* 0x12C4 */ NPC_KASI_HANA_HIO_CLASS* mHIO; /* 0x12C8 */ dCcD_Cyl mCyl; /* 0x1404 */ s8 mType; /* 0x1405 */ u8 field_0x1405; diff --git a/include/d/actor/d_a_npc_kasi_kyu.h b/include/d/actor/d_a_npc_kasi_kyu.h index d5dc5393238..310304fce15 100644 --- a/include/d/actor/d_a_npc_kasi_kyu.h +++ b/include/d/actor/d_a_npc_kasi_kyu.h @@ -95,9 +95,9 @@ public: int getMessageNo() { return home.angle.x; } u8 getRailNo() { return fopAcM_GetParam(this) >> 8; } void setSygnal(int i_sygnal) { mSygnal = i_sygnal; } - void setChacePos(cXyz& i_chacePos) { mChacePos = i_chacePos; } - void setCenterPos(cXyz& i_centerPos) { mCenterPos = i_centerPos; } - void setPlPoint(int i_plPoint) { mPlPoint = i_plPoint; } + void setChacePos(const cXyz& i_chacePos) { mChacePos = i_chacePos; } + void setCenterPos(const cXyz& i_centerPos) { mCenterPos = i_centerPos; } + void setPlPoint(const int& i_plPoint) { mPlPoint = i_plPoint; } void off_talked() { mTalked = false; } BOOL is_talked() { return mTalked; } BOOL is_fear() { return mFear; } diff --git a/include/d/actor/d_a_npc_kasi_mich.h b/include/d/actor/d_a_npc_kasi_mich.h index e6a19be0b19..219b6e8bd70 100644 --- a/include/d/actor/d_a_npc_kasi_mich.h +++ b/include/d/actor/d_a_npc_kasi_mich.h @@ -96,9 +96,9 @@ public: int getMessageNo() { return home.angle.x; } u8 getRailNo() { return fopAcM_GetParam(this) >> 8; } void setSygnal(int i_sygnal) { mSygnal = i_sygnal; } - void setChacePos(cXyz& i_chacePos) { mChacePos = i_chacePos; } - void setCenterPos(cXyz& i_centerPos) { mCenterPos = i_centerPos; } - void setPlPoint(int i_plPoint) { mPlPoint = i_plPoint; } + void setChacePos(const cXyz& i_chacePos) { mChacePos = i_chacePos; } + void setCenterPos(const cXyz& i_centerPos) { mCenterPos = i_centerPos; } + void setPlPoint(const int& i_plPoint) { mPlPoint = i_plPoint; } void off_talked() { mTalked = false; } BOOL is_talked() { return mTalked; } BOOL is_fear() { return mFear; } diff --git a/src/d/actor/d_a_npc_ashB.cpp b/src/d/actor/d_a_npc_ashB.cpp index 81ba8ac4025..287580b3013 100644 --- a/src/d/actor/d_a_npc_ashB.cpp +++ b/src/d/actor/d_a_npc_ashB.cpp @@ -46,16 +46,6 @@ const daNpcAshB_HIOParam daNpcAshB_Param_c::m = { 400.0f, // field_0x6c }; -#if DEBUG -daNpcAshB_HIO_c::daNpcAshB_HIO_c() { - m = daNpcAshB_Param_c::m; -} - -void daNpcAshB_HIO_c::genMessage(JORMContext* ctext) { - // TODO -} -#endif - NPC_ASHB_HIO_CLASS l_HIO; /* 80962438-80962534 000020 00FC+00 1/2 0/0 0/0 .data l_bckGetParamList */ @@ -96,6 +86,18 @@ static char* l_evtNames[2] = { /* 809625A0-809625A4 -00001 0004+00 0/2 0/0 0/0 .data l_myName */ static char* l_myName = "AshB"; +#if DEBUG +daNpcAshB_HIO_c::daNpcAshB_HIO_c() { + m = daNpcAshB_Param_c::m; +} + +void daNpcAshB_HIO_c::genMessage(JORMContext* ctext) { + // Post-conversation follow-up distance + ctext->genSlider("会話後追従距離", &m.field_0x6c, 0.0f, 2000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + daNpcF_commonGenMessage(ctext, &m.common); +} +#endif + /* 809625B0-809625C8 000198 0018+00 1/2 0/0 0/0 .data mEvtSeqList__11daNpcAshB_c */ daNpcAshB_c::EventFn daNpcAshB_c::mEvtSeqList[2] = { NULL, @@ -114,6 +116,12 @@ daNpcAshB_c::~daNpcAshB_c() { if (heap != NULL) { mAnm_p->stopZelAnime(); } + +#if DEBUG + if (mpHIO) { + mpHIO->removeHIO(); + } +#endif } /* 8095E224-8095E4A0 0004C4 027C+00 1/1 0/0 0/0 .text Create__11daNpcAshB_cFv */ @@ -148,6 +156,11 @@ cPhs__Step daNpcAshB_c::Create() { fopAcM_SetMtx(this, mAnm_p->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -100.0f, -50.0f, -100.0f, 100.0f, 220.0f, 100.0f); mCreatureSound.init(¤t.pos, &eyePos, 3, 1); +#if DEBUG + mpHIO = &l_HIO; + // Ash (cold climate model) + mpHIO->entryHIO("アッシュ(寒冷地仕様)"); +#endif mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), @@ -176,10 +189,14 @@ cPhs__Step daNpcAshB_c::Create() { /* 8095E4A0-8095E758 000740 02B8+00 1/1 0/0 0/0 .text CreateHeap__11daNpcAshB_cFv */ BOOL daNpcAshB_c::CreateHeap() { - J3DModelData* modelData = static_cast(dComIfG_getObjectRes(l_arcNames[0], 28)); - mAnm_p = new mDoExt_McaMorfSO(modelData, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mCreatureSound, - 0x80000, 0x11020284); - if (mAnm_p != NULL && mAnm_p->mpModel == NULL) { + J3DModelData* mdlData_p = NULL; + J3DModel* model = NULL; + mdlData_p = static_cast(dComIfG_getObjectRes(l_arcNames[0], 28)); + JUT_ASSERT(332, NULL != mdlData_p); + u32 sp_0x18 = 0x11020284; + mAnm_p = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mCreatureSound, + 0x80000, sp_0x18); + if (mAnm_p != NULL && mAnm_p->getModel() == NULL) { mAnm_p->stopZelAnime(); mAnm_p = NULL; } @@ -187,9 +204,9 @@ BOOL daNpcAshB_c::CreateHeap() { return false; } - J3DModel* model = mAnm_p->getModel(); - for (u16 jointNo = 0; jointNo < modelData->getJointNum(); jointNo++) { - modelData->getJointNodePointer(jointNo)->setCallBack(ctrlJointCallBack); + model = mAnm_p->getModel(); + for (u16 jointNo = 0; jointNo < mdlData_p->getJointNum(); jointNo++) { + mdlData_p->getJointNodePointer(jointNo)->setCallBack(ctrlJointCallBack); } model->setUserArea((uintptr_t)this); @@ -197,9 +214,9 @@ BOOL daNpcAshB_c::CreateHeap() { if (mpMatAnm == NULL) { return false; } else { - mpModel = mDoExt_J3DModel__create( - static_cast(dComIfG_getObjectRes(l_arcNames[0], 29)), 0x80000, - 0x11000084); + mdlData_p = (J3DModelData*) dComIfG_getObjectRes(l_arcNames[0], 29); + JUT_ASSERT(366, NULL != mdlData_p); + mpModel = mDoExt_J3DModel__create(mdlData_p, 0x80000, 0x11000084); if (mpModel == NULL) { return false; } else { @@ -215,6 +232,7 @@ BOOL daNpcAshB_c::CreateHeap() { /* 8095E914-8095E948 000BB4 0034+00 1/1 0/0 0/0 .text Delete__11daNpcAshB_cFv */ int daNpcAshB_c::Delete() { + fopAcM_RegisterDeleteID(this, "NPC_ASHB"); this->~daNpcAshB_c(); return 1; } @@ -227,7 +245,8 @@ int daNpcAshB_c::Execute() { /* 8095E96C-8095E9C8 000C0C 005C+00 1/1 0/0 0/0 .text Draw__11daNpcAshB_cFv */ int daNpcAshB_c::Draw() { - mAnm_p->getModel()->getModelData()->getMaterialNodePointer(2)->setMaterialAnm(mpMatAnm); + J3DModelData* model_data = mAnm_p->getModel()->getModelData(); + model_data->getMaterialNodePointer(2)->setMaterialAnm(mpMatAnm); draw(false, false, mpHIO->m.common.real_shadow_size, NULL, false); return 1; } @@ -235,7 +254,8 @@ int daNpcAshB_c::Draw() { /* 8095E9C8-8095EB94 000C68 01CC+00 1/1 0/0 0/0 .text * ctrlJoint__11daNpcAshB_cFP8J3DJointP8J3DModel */ bool daNpcAshB_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { - int jointNo = i_joint->getJntNo(); + J3DJoint* my_joint = i_joint; + int jointNo = my_joint->getJntNo(); int lookatJoints[3] = {1, 9, 10}; if (jointNo == 0) { @@ -271,7 +291,8 @@ bool daNpcAshB_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { /* 8095EB94-8095EBB4 000E34 0020+00 1/1 0/0 0/0 .text * createHeapCallBack__11daNpcAshB_cFP10fopAc_ac_c */ BOOL daNpcAshB_c::createHeapCallBack(fopAc_ac_c* i_this) { - return static_cast(i_this)->CreateHeap(); + daNpcAshB_c* a_this = static_cast(i_this); + return a_this->CreateHeap(); } /* 8095EBB4-8095EC00 000E54 004C+00 1/1 0/0 0/0 .text ctrlJointCallBack__11daNpcAshB_cFP8J3DJointi @@ -288,28 +309,67 @@ BOOL daNpcAshB_c::ctrlJointCallBack(J3DJoint* i_joint, int param_1) { } inline void daNpcAshB_c::setLookMode(int i_lookMode) { - if (i_lookMode != mLookMode) { + if (i_lookMode >= 0 && i_lookMode < 5 && i_lookMode != mLookMode) { mLookMode = i_lookMode; } } +#if DEBUG +static s16 dummy_lit_120628(int sel) { + const s16 arr[2] = {0x00C8, 0x00FF}; + return arr[sel]; +} + +static s16 dummy_lit_120631(int sel) { + const s16 arr[2] = {0xC800, 0x00FF}; + return arr[sel]; +} + +static s16 dummy_lit_120638(int sel) { + const s16 arr[2] = {0x0000, 0xC8FF}; + return arr[sel]; +} + +static s16 dummy_lit_120641(int sel) { + const s16 arr[2] = {0x0000, 0xC8FF}; + return arr[sel]; +} + +static s16 dummy_lit_120644(int sel) { + const s16 arr[2] = {0x0000, 0xC8FF}; + return arr[sel]; +} + +static s16 dummy_lit_120647(int sel) { + const s16 arr[2] = {0x8080, 0x80A0}; + return arr[sel]; +} + +static s16 dummy_lit_120650(int sel) { + const s16 arr[2] = {0x8080, 0x80A0}; + return arr[sel]; +} +#endif + inline BOOL daNpcAshB_c::chkFindPlayer() { - BOOL ret; if (!chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) { mActorMngr[0].remove(); - ret = false; - } else { - if (mActorMngr[0].getActorP() == NULL) { - ret = chkPlayerInSpeakArea(this); - } else { - ret = chkPlayerInTalkArea(this); - } - if (ret) { - mActorMngr[0].entry(daPy_getPlayerActorClass()); - } else { - mActorMngr[0].remove(); - } + return FALSE; } + + BOOL ret = FALSE; + if (mActorMngr[0].getActorP() == NULL) { + ret = chkPlayerInSpeakArea(this); + } else { + ret = chkPlayerInTalkArea(this); + } + + if (ret) { + mActorMngr[0].entry(daPy_getPlayerActorClass()); + } else { + mActorMngr[0].remove(); + } + return ret; } @@ -456,13 +516,10 @@ bool daNpcAshB_c::setExpressionAnm(int i_idx, bool i_modify) { } mAnmFlags &= ~ANM_EXPRESSION_FLAGS; - J3DAnmTransform* bckAnm; - if (l_bckGetParamList[i_idx].fileIdx >= 0) { - bckAnm = getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_idx].arcIdx], - l_bckGetParamList[i_idx].fileIdx); - } else { - bckAnm = NULL; - } + J3DAnmTransform* bckAnm = (l_bckGetParamList[i_idx].fileIdx >= 0) ? + getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_idx].arcIdx], + l_bckGetParamList[i_idx].fileIdx) + : NULL; s32 attr = l_bckGetParamList[i_idx].attr; bool res = false; @@ -507,6 +564,7 @@ bool daNpcAshB_c::setExpressionAnm(int i_idx, bool i_modify) { return true; } + OS_REPORT("%s: 表情Bckアニメーションの登録に失敗しました!\n", __FILE__); return false; } @@ -527,6 +585,8 @@ bool daNpcAshB_c::setExpressionBtp(int i_idx) { } return true; } + + OS_REPORT("%s: 表情Btpアニメーションの登録に失敗しました!\n", __FILE__); return false; } @@ -560,7 +620,6 @@ void daNpcAshB_c::setMotionAnm(int i_idx, f32 i_morf) { mAnmFlags &= 0xffffffc0; if (i_idx == 12) { bool unused_bool = setExpressionBtp(1); - (void)unused_bool; } if (morfAnm && setMcaMorfAnm(morfAnm, 1.0f, i_morf, oiVar5, 0, -1)) { @@ -589,8 +648,8 @@ void daNpcAshB_c::reset() { mpActionFn = NULL; mLookMode = -1; mMode = 0; - current.pos = home.pos; - old.pos = current.pos; + current.pos.set(home.pos); + old.pos.set(current.pos); current.angle.set(0, home.angle.y, 0); old.angle = current.angle; shape_angle = current.angle; @@ -659,7 +718,6 @@ bool daNpcAshB_c::step(s16 i_targetAngle, int param_2, f32 i_rate) { } /* 8095F2C4-8095FC70 001564 09AC+00 4/0 0/0 0/0 .text wait__11daNpcAshB_cFPv */ -// NONMATCHING - regalloc bool daNpcAshB_c::wait(void* param_0) { switch (mMode) { case 0: @@ -681,7 +739,7 @@ bool daNpcAshB_c::wait(void* param_0) { if (fopAcM_seenPlayerAngleY(this) > res) { field_0xdea = fopAcM_searchPlayerAngleY(this); } - } else if (step(mCurAngle.y, 1, 15.0f)) { + } else if (step(field_0xdea, 1, 15.0f)) { setExpression(EXPR_EXPLAIN_B, -1.0f); setMotion(MOT_WAIT_A, -1.0f, false); mTurnMode = 0; @@ -716,7 +774,7 @@ bool daNpcAshB_c::wait(void* param_0) { /* dSv_event_flag_c::F_0335 - Snowpeak mountain - Obtained scribble from Ashei at mountain * pass */ if (!daNpcF_chkEvtBit(0x14F) && field_0xded == 0 && !daPy_py_c::checkNowWolf()) { - f32 res = pow(600.0f, 2.0f); + f32 res = std::pow(600.0f, 2.0f); if (fopAcM_searchPlayerDistanceXZ2(this) <= res) { daNpcF_offTmpBit(0xb); daNpcF_offTmpBit(0xc); @@ -903,7 +961,6 @@ bool daNpcAshB_c::talk(void* param_0) { } /* 809602E0-809604C8 002580 01E8+00 1/0 0/0 0/0 .text demo__11daNpcAshB_cFPv */ -// NONMATCHING - extra instruction at dComIfGp_event_runCheck() causing regalloc issues? bool daNpcAshB_c::demo(void* param_0) { dEvent_manager_c& evtmgr = dComIfGp_getEventManager(); BOOL r26 = FALSE; @@ -916,7 +973,14 @@ bool daNpcAshB_c::demo(void* param_0) { // fallthrough case 2: - if (dComIfGp_event_runCheck() != FALSE && !eventInfo.checkCommandTalk()) { +#if VERSION != VERSION_SHIELD_DEBUG + // TODO: gameInfo fake match to force reuse of pointer + dComIfG_play_c* play = &g_dComIfG_gameInfo.play; + if (play->getEvent().runCheck() && !eventInfo.checkCommandTalk()) +#else + if (dComIfGp_event_runCheck() && !eventInfo.checkCommandTalk()) +#endif + { s32 staff_id = evtmgr.getMyStaffId(l_myName, NULL, 0); if (staff_id != -1) { mStaffID = staff_id; @@ -929,7 +993,11 @@ bool daNpcAshB_c::demo(void* param_0) { if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && evtmgr.endCheck(mEventIdx)) { +#if VERSION != VERSION_SHIELD_DEBUG + play->getEvent().reset(); +#else dComIfGp_event_reset(); +#endif mOrderEvtNo = 0; mEventIdx = -1; setAction(&daNpcAshB_c::wait); diff --git a/src/d/actor/d_a_npc_kasi_hana.cpp b/src/d/actor/d_a_npc_kasi_hana.cpp index b21a9bd8ba5..03096b41257 100644 --- a/src/d/actor/d_a_npc_kasi_hana.cpp +++ b/src/d/actor/d_a_npc_kasi_hana.cpp @@ -145,15 +145,8 @@ enum Type { /* 0x1 */ TYPE_CHEER, }; -class daNpcKasiHana_Param_c { -public: - /* 80A2067C */ virtual ~daNpcKasiHana_Param_c() {} - - static daNpcKasiHana_HIOParam const m; -}; - /* 80A21854-80A21858 000054 0004+00 1/1 0/0 0/0 .bss l_HIO */ -static daNpcKasiHana_Param_c l_HIO; +static NPC_KASI_HANA_HIO_CLASS l_HIO; /* 80A1AFAC-80A1B09C 0000EC 00F0+00 1/1 0/0 0/0 .text calcEscapeForm__15daNpcKasi_Mng_cFv */ void daNpcKasi_Mng_c::calcEscapeForm() { @@ -362,7 +355,7 @@ BOOL daNpcKasi_Mng_c::chkEscape() { daNpcKasiMich_c* mich_p = (daNpcKasiMich_c*)mMichActorMngr.getActorP(); if (hana_p == NULL || kyu_p == NULL || mich_p == NULL) { - OS_REPORT("---------------------some girl no exist!!\n"); + OS_REPORT("-------- caution : some girl not exist!!\n"); return TRUE; } @@ -383,7 +376,10 @@ BOOL daNpcKasi_Mng_c::chkEscape() { /* 80A1B920-80A1BAAC 000A60 018C+00 1/1 0/0 0/0 .text createHearts__15daNpcKasi_Mng_cFv */ BOOL daNpcKasi_Mng_c::createHearts() { - fopAc_ac_c* actors[3] = {mHanaActorMngr.getActorP(), mKyuActorMngr.getActorP(), mMichActorMngr.getActorP()}; + fopAc_ac_c* actors[3] = {NULL, NULL, NULL}; + actors[0] = mHanaActorMngr.getActorP(); + actors[1] = mKyuActorMngr.getActorP(); + actors[2] = mMichActorMngr.getActorP(); f32 i_speedF = 0.0f; f32 i_speedY = 30.0f; cXyz i_scale(1.0f, 1.0f, 1.0f); @@ -459,17 +455,16 @@ BOOL daNpcKasi_Mng_c::isMiniGamePlaying() { void daNpcKasi_Mng_c::schMemberActor() { if (mKyuActorMngr.getPId() == fpcM_ERROR_PROCESS_ID_e) { fopAc_ac_c* kyu_p = NULL; - - if (fopAcM_SearchByName(PROC_NPC_KASIKYU, (fopAc_ac_c**)&kyu_p) != 0 && kyu_p != NULL) { - mKyuActorMngr.entry(kyu_p); + if (fopAcM_SearchByName(PROC_NPC_KASIKYU, (fopAc_ac_c**)&kyu_p) != 0) { + setKyuActor(kyu_p); } } if (mMichActorMngr.getPId() == fpcM_ERROR_PROCESS_ID_e) { fopAc_ac_c* mich_p = NULL; - if (fopAcM_SearchByName(PROC_NPC_KASIMICH, (fopAc_ac_c**)&mich_p) != 0 && mich_p != NULL) { - mMichActorMngr.entry(mich_p); + if (fopAcM_SearchByName(PROC_NPC_KASIMICH, (fopAc_ac_c**)&mich_p) != 0) { + setMichActor(mich_p); } } } @@ -479,8 +474,8 @@ void daNpcKasi_Mng_c::schDanchoActor() { if (mDanchoActorMngr.getPId() == fpcM_ERROR_PROCESS_ID_e) { fopAc_ac_c* dancho_p = NULL; - if (fopAcM_SearchByName(PROC_NPC_CHIN, (fopAc_ac_c**)&dancho_p) != 0 && dancho_p != NULL) { - mDanchoActorMngr.entry(dancho_p); + if (fopAcM_SearchByName(PROC_NPC_CHIN, (fopAc_ac_c**)&dancho_p) != 0) { + setDanchoActor(dancho_p); } } } @@ -504,6 +499,8 @@ void daNpcKasi_Mng_c::deleteAllMember() { fopAcM_delete(hana_p); mHanaActorMngr.remove(); } + + OS_REPORT("------------- three girl all delete!!\n"); } /* 80A1BD6C-80A1BDD8 000EAC 006C+00 1/1 0/0 0/0 .text chgWeightHeavy__15daNpcKasi_Mng_cFv */ @@ -586,30 +583,6 @@ static char* l_evtNames[6] = { /* 80A214D8-80A214DC -00001 0004+00 0/2 0/0 0/0 .data l_myName */ static char* l_myName = "kasi_hana"; -/* 80A21518-80A21560 000144 0048+00 0/2 0/0 0/0 .data mEvtSeqList__15daNpcKasiHana_c */ -daNpcKasiHana_c::EventFn daNpcKasiHana_c::mEvtSeqList[6] = { - NULL, - &daNpcKasiHana_c::_Evt_Kasi_Appear, - &daNpcKasiHana_c::_Evt_Kasi_Talk, - &daNpcKasiHana_c::_Evt_Kasi, - &daNpcKasiHana_c::_Evt_Kasi_Cheer, - &daNpcKasiHana_c::_Evt_Kasi_Cheer2, -}; - -/* 80A1BE44-80A1C0A4 000F84 0260+00 1/1 0/0 0/0 .text __ct__15daNpcKasiHana_cFv */ -daNpcKasiHana_c::daNpcKasiHana_c() {} - -/* 80A1C0A4-80A1C334 0011E4 0290+00 1/0 0/0 0/0 .text __dt__15daNpcKasiHana_cFv */ -daNpcKasiHana_c::~daNpcKasiHana_c() { - for (int i = 0; i < 3; i++) { - dComIfG_resDelete(&mPhases[i], l_arcNames[i]); - } - - if (heap != NULL) { - mAnm_p->stopZelAnime(); - } -} - /* 80A210C8-80A21144 000048 007C+00 5/12 0/0 0/0 .rodata m__21daNpcKasiHana_Param_c */ daNpcKasiHana_HIOParam const daNpcKasiHana_Param_c::m = { 55.0f, @@ -651,6 +624,50 @@ daNpcKasiHana_HIOParam const daNpcKasiHana_Param_c::m = { 16.0f, }; +#if DEBUG +daNpcKasiHana_HIO_c::daNpcKasiHana_HIO_c() { + m = daNpcKasiHana_Param_c::m; +} + +void daNpcKasiHana_HIO_c::genMessage(JORMContext* ctext) { + ctext->genSlider("追跡開始距離", &m.track_start_dist, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("追跡停止距離", &m.track_stop_dist, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("追跡速度", &m.track_spd, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + ctext->genSlider("逃げる速度", &m.escape_spd, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 24); + daNpcF_commonGenMessage(ctext, &m.common); +} +#endif + +/* 80A21518-80A21560 000144 0048+00 0/2 0/0 0/0 .data mEvtSeqList__15daNpcKasiHana_c */ +daNpcKasiHana_c::EventFn daNpcKasiHana_c::mEvtSeqList[6] = { + NULL, + &daNpcKasiHana_c::_Evt_Kasi_Appear, + &daNpcKasiHana_c::_Evt_Kasi_Talk, + &daNpcKasiHana_c::_Evt_Kasi, + &daNpcKasiHana_c::_Evt_Kasi_Cheer, + &daNpcKasiHana_c::_Evt_Kasi_Cheer2, +}; + +/* 80A1BE44-80A1C0A4 000F84 0260+00 1/1 0/0 0/0 .text __ct__15daNpcKasiHana_cFv */ +daNpcKasiHana_c::daNpcKasiHana_c() {} + +/* 80A1C0A4-80A1C334 0011E4 0290+00 1/0 0/0 0/0 .text __dt__15daNpcKasiHana_cFv */ +daNpcKasiHana_c::~daNpcKasiHana_c() { + for (int i = 0; i < 3; i++) { + dComIfG_resDelete(&mPhases[i], l_arcNames[i]); + } + + if (heap != NULL) { + mAnm_p->stopZelAnime(); + } + +#if DEBUG + if (mHIO) { + mHIO->removeHIO(); + } +#endif +} + /* 80A1C334-80A1C5B0 001474 027C+00 1/1 0/0 0/0 .text Create__15daNpcKasiHana_cFv */ cPhs__Step daNpcKasiHana_c::Create() { fopAcM_ct(this, daNpcKasiHana_c); @@ -672,12 +689,17 @@ cPhs__Step daNpcKasiHana_c::Create() { return cPhs_ERROR_e; } - J3DModel* model = mAnm_p->getModel(); + J3DModelData* model_data = mAnm_p->getModel()->getModelData(); fopAcM_SetMtx(this, mAnm_p->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -60.0f, -10.0f, -60.0f, 60.0f, 160.0f, 60.0f); mSound.init(¤t.pos, &eyePos, 3, 1); +#if DEBUG + mHIO = &l_HIO; + // three daughters: Hana: + mHIO->entryHIO("三人娘:ハナ"); +#endif - mAcchCir.SetWall(daNpcKasiHana_Param_c::m.common.width, daNpcKasiHana_Param_c::m.common.knee_length); + mAcchCir.SetWall(mHIO->m.common.width, mHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); @@ -686,8 +708,8 @@ cPhs__Step daNpcKasiHana_c::Create() { mCyl.SetStts(&mCcStts); mCyl.SetTgType(0); mCyl.SetTgSPrm(0); - mCyl.SetH(daNpcKasiHana_Param_c::m.common.height); - mCyl.SetR(daNpcKasiHana_Param_c::m.common.width); + mCyl.SetH(mHIO->m.common.height); + mCyl.SetR(mHIO->m.common.width); mGndChk = mAcch.m_gnd; mGroundH = mAcch.GetGroundH(); @@ -705,8 +727,9 @@ int daNpcKasiHana_c::CreateHeap() { J3DModelData* mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_arcNames[0], 5); JUT_ASSERT(950, NULL != mdlData_p); + u32 reg_r25 = 0x11020084; - mAnm_p = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, 0x11020084); + mAnm_p = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, reg_r25); if (mAnm_p != NULL && mAnm_p->getModel() == NULL) { mAnm_p->stopZelAnime(); mAnm_p = NULL; @@ -746,7 +769,7 @@ int daNpcKasiHana_c::Execute() { /* 80A1C78C-80A1C7D8 0018CC 004C+00 1/1 0/0 0/0 .text Draw__15daNpcKasiHana_cFv */ int daNpcKasiHana_c::Draw() { if (!mEscape) { - draw(FALSE, FALSE, daNpcKasiHana_Param_c::m.common.real_shadow_size, NULL, FALSE); + draw(FALSE, FALSE, mHIO->m.common.real_shadow_size, NULL, FALSE); } return 1; @@ -772,7 +795,7 @@ int daNpcKasiHana_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case JNT_BACKBONE: case JNT_NECK: case JNT_HEAD: - setLookatMtx(jntNo, i_jointList, daNpcKasiHana_Param_c::m.common.neck_rotation_ratio); + setLookatMtx(jntNo, i_jointList, mHIO->m.common.neck_rotation_ratio); break; } @@ -808,10 +831,17 @@ void daNpcKasiHana_c::setParam() { mKasiMng.initPath(getRailNo(), 6); } - attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(daNpcKasiHana_Param_c::m.common.attention_distance, daNpcKasiHana_Param_c::m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(mHIO->m.common.attention_distance, mHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(daNpcKasiHana_Param_c::m.common.talk_distance, daNpcKasiHana_Param_c::m.common.talk_angle); + attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(mHIO->m.common.talk_distance, mHIO->m.common.talk_angle); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; + +#if DEBUG + scale.set(mHIO->m.common.scale, mHIO->m.common.scale, mHIO->m.common.scale); + mAcchCir.SetWallR(mHIO->m.common.width); + mAcchCir.SetWallH(mHIO->m.common.knee_length); + gravity = mHIO->m.common.gravity; +#endif } /* 80A1CA60-80A1CD28 001BA0 02C8+00 1/0 0/0 0/0 .text main__15daNpcKasiHana_cFv */ @@ -893,7 +923,7 @@ void daNpcKasiHana_c::setAttnPos() { mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &sp1c); mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &sp1c); - attention_info.position.set(mHeadPos.x, mHeadPos.y + daNpcKasiHana_Param_c::m.common.attention_offset, mHeadPos.z); + attention_info.position.set(mHeadPos.x, mHeadPos.y + mHIO->m.common.attention_offset, mHeadPos.z); cXyz sp28; @@ -902,8 +932,8 @@ void daNpcKasiHana_c::setAttnPos() { sp28.y = current.pos.y; mCyl.SetC(sp28); #ifdef DEBUG - mCyl.SetH(daNpcKasiHana_Param_c::m.common.height); - mCyl.SetR(daNpcKasiHana_Param_c::m.common.width); + mCyl.SetH(mHIO->m.common.height); + mCyl.SetR(mHIO->m.common.width); #endif dComIfG_Ccsp()->Set(&mCyl); } @@ -990,34 +1020,34 @@ void daNpcKasiHana_c::reset() { /* 80A1D238-80A1D604 002378 03CC+00 1/1 0/0 0/0 .text playMotion__15daNpcKasiHana_cFv */ void daNpcKasiHana_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_MICH_KYA_TALK, daNpcKasiHana_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_MICH_KYA_TALK, mHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_MICH_IYAN_WAIT, daNpcKasiHana_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat1 = {ANM_MICH_IYAN_WAIT, mHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; - daNpcF_anmPlayData dat2 = {ANM_MICH_OUEN_WAIT_A, daNpcKasiHana_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2 = {ANM_MICH_OUEN_WAIT_A, mHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {ANM_MICH_OUEN_WAIT_B, daNpcKasiHana_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat3 = {ANM_MICH_OUEN_WAIT_B, mHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4 = {ANM_W_WAIT_A, daNpcKasiHana_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat4 = {ANM_W_WAIT_A, mHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5 = {ANM_W_TALK_B, daNpcKasiHana_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat5 = {ANM_W_TALK_B, mHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6 = {ANM_W_TO_WOLF, daNpcKasiHana_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat6 = {ANM_W_TO_WOLF, mHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[1] = {&dat6}; - daNpcF_anmPlayData dat7 = {ANM_W_WALK_A, daNpcKasiHana_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat7 = {ANM_W_WALK_A, mHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8 = {ANM_W_LOOK_B, daNpcKasiHana_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat8 = {ANM_W_LOOK_B, mHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[1] = {&dat8}; - daNpcF_anmPlayData dat9 = {ANM_W_RUN_A, daNpcKasiHana_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat9 = {ANM_W_RUN_A, mHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[1] = {&dat9}; - daNpcF_anmPlayData dat10 = {ANM_W_SURPRISE, daNpcKasiHana_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat10 = {ANM_W_SURPRISE, mHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat10[1] = {&dat10}; - daNpcF_anmPlayData dat11a = {ANM_W_WAIT_A_2, daNpcKasiHana_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11b = {ANM_W_2LADYTALK_B, daNpcKasiHana_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11c = {ANM_W_TALK_A, daNpcKasiHana_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11d = {ANM_W_WAIT_A_2, daNpcKasiHana_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11e = {ANM_W_TALK_B, daNpcKasiHana_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat11f = {ANM_W_2NORMALTALK_B, daNpcKasiHana_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat11a = {ANM_W_WAIT_A_2, mHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11b = {ANM_W_2LADYTALK_B, mHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11c = {ANM_W_TALK_A, mHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11d = {ANM_W_WAIT_A_2, mHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11e = {ANM_W_TALK_B, mHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11f = {ANM_W_2NORMALTALK_B, mHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat11[6] = {&dat11a, &dat11b, &dat11c, &dat11d, &dat11e, &dat11f}; daNpcF_anmPlayData** ppDat[12] = { @@ -1071,7 +1101,7 @@ void daNpcKasiHana_c::playMotionAnmLoop(daNpcF_c::daNpcF_anmPlayData*** i_data) if (mMotionPhase == 0) { if (mMotion == MOT_W_WAIT_A_LOOP) { - i_morf = daNpcKasiHana_Param_c::m.common.morf_frame; + i_morf = mHIO->m.common.morf_frame; } else if (0.0f <= mMotionMorfOverride) { i_morf = mMotionMorfOverride; } @@ -1115,14 +1145,14 @@ void daNpcKasiHana_c::lookat() { daPy_py_c* player = NULL; J3DModel* model = mAnm_p->getModel(); BOOL i_snap = FALSE; - f32 body_angleX_min = daNpcKasiHana_Param_c::m.common.body_angleX_min; - f32 body_angleX_max = daNpcKasiHana_Param_c::m.common.body_angleX_max; - f32 body_angleY_min = daNpcKasiHana_Param_c::m.common.body_angleY_min; - f32 body_angleY_max = daNpcKasiHana_Param_c::m.common.body_angleY_max; - f32 head_angleX_min = daNpcKasiHana_Param_c::m.common.head_angleX_min; - f32 head_angleX_max = daNpcKasiHana_Param_c::m.common.head_angleX_max; - f32 head_angleY_min = daNpcKasiHana_Param_c::m.common.head_angleY_min; - f32 head_angleY_max = daNpcKasiHana_Param_c::m.common.head_angleY_max; + f32 body_angleX_min = mHIO->m.common.body_angleX_min; + f32 body_angleX_max = mHIO->m.common.body_angleX_max; + f32 body_angleY_min = mHIO->m.common.body_angleY_min; + f32 body_angleY_max = mHIO->m.common.body_angleY_max; + f32 head_angleX_min = mHIO->m.common.head_angleX_min; + f32 head_angleX_max = mHIO->m.common.head_angleX_max; + f32 head_angleY_min = mHIO->m.common.head_angleY_min; + f32 head_angleY_max = mHIO->m.common.head_angleY_max; s16 angle_delta = mCurAngle.y - mOldAngle.y; cXyz lookatPos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; csXyz* lookatAngle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; @@ -1196,7 +1226,7 @@ BOOL daNpcKasiHana_c::step(s16 i_targetAngle, int param_2) { /* 80A1DB1C-80A1DC00 002C5C 00E4+00 1/1 0/0 0/0 .text chkFindPlayer__15daNpcKasiHana_cFv */ BOOL daNpcKasiHana_c::chkFindPlayer() { - if (!chkActorInSight(daPy_getPlayerActorClass(), daNpcKasiHana_Param_c::m.common.fov)) { + if (!chkActorInSight(daPy_getPlayerActorClass(), mHIO->m.common.fov)) { mActorMngr[0].remove(); return FALSE; } @@ -1273,14 +1303,14 @@ int daNpcKasiHana_c::wait(int param_1) { } f32 distFromCenter = mKasiMng.getDistFromCenter(); - if (distFromCenter >= 0.0f && distFromCenter < daNpcKasiHana_Param_c::m.track_start_dist) { + if (distFromCenter >= 0.0f && distFromCenter < mHIO->m.track_start_dist) { field_0x1441 = 1; mKasiMng.onSygnal(0x200); setAction(&daNpcKasiHana_c::chace_st); return 1; } } else if (pl_front_check()) { - if (actorDistance >= daNpcKasiHana_Param_c::m.track_stop_dist + 50.0f) { + if (actorDistance >= mHIO->m.track_stop_dist + 50.0f) { setAction(&daNpcKasiHana_c::chace); return 1; } @@ -1362,7 +1392,7 @@ int daNpcKasiHana_c::chace(int param_1) { setMotion(MOT_W_RUN_A, -1.0f, 0); setLookMode(LOOK_NONE); fopAcM_SetSpeed(this, 0.0f, 0.0f, 0.0f); - fopAcM_SetSpeedF(this, daNpcKasiHana_Param_c::m.track_spd); + fopAcM_SetSpeedF(this, mHIO->m.track_spd); mKasiMng.chgWeightLight(); mMode = 1; break; @@ -1372,7 +1402,7 @@ int daNpcKasiHana_c::chace(int param_1) { _turn_pos(chacePos, 0x800); if (pl_front_check()) { - if (fopAcM_searchActorDistanceXZ(this, daPy_getPlayerActorClass()) < daNpcKasiHana_Param_c::m.track_stop_dist) { + if (fopAcM_searchActorDistanceXZ(this, daPy_getPlayerActorClass()) < mHIO->m.track_stop_dist) { setAction(&daNpcKasiHana_c::wait); } } else { @@ -1703,7 +1733,7 @@ int daNpcKasiHana_c::escape(int param_1) { case 0: setMotion(MOT_W_RUN_A, -1.0f, 0); fopAcM_SetSpeed(this, 0.0f, 0.0f, 0.0f); - fopAcM_SetSpeedF(this, daNpcKasiHana_Param_c::m.escape_spd); + fopAcM_SetSpeedF(this, mHIO->m.escape_spd); setEscapePathDir(); mKasiMng.onSygnal(0x20); mSound.startCreatureVoice(Z2SE_HANA_V_FEAR, -1); @@ -1727,7 +1757,6 @@ int daNpcKasiHana_c::escape(int param_1) { /* 80A1EF90-80A1F198 0040D0 0208+00 3/0 0/0 0/0 .text cheer__15daNpcKasiHana_cFi */ int daNpcKasiHana_c::cheer(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -1760,11 +1789,22 @@ int daNpcKasiHana_c::cheer(int param_1) { field_0x1440 = 1; } - if (dComIfGp_event_runCheck()) { +#if VERSION != VERSION_SHIELD_DEBUG + // TODO: gameInfo fake match to force reuse of pointer + dComIfG_play_c* play = &g_dComIfG_gameInfo.play; + if (play->getEvent().runCheck()) +#else + if (dComIfGp_event_runCheck()) +#endif + { if (eventInfo.checkCommandTalk()) { if (!dComIfGp_event_chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) { mTalked = true; +#if VERSION != VERSION_SHIELD_DEBUG + play->getEvent().reset(); +#else dComIfGp_event_reset(); +#endif } } } else { @@ -2232,9 +2272,10 @@ BOOL daNpcKasiHana_c::_Evt_Kasi_Cheer2(int i_index) { OS_REPORT("-------------------daNpcKasiHana_c::_Evt_Kasi_Cheer2\n"); dEvent_manager_c& eventManager = dComIfGp_getEventManager(); + int* cutId = NULL; int i_cutIndex = -1; - int* cutId = dComIfGp_evmng_getMyIntegerP(i_index, "cutId"); + cutId = dComIfGp_evmng_getMyIntegerP(i_index, "cutId"); if (cutId != NULL) { i_cutIndex = *cutId; } else { @@ -2245,8 +2286,9 @@ BOOL daNpcKasiHana_c::_Evt_Kasi_Cheer2(int i_index) { _Evt_Kasi_Cheer2_CutInit(i_cutIndex); } + int* mesNo = NULL; int iVar2 = -1; - int* mesNo = dComIfGp_evmng_getMyIntegerP(i_index, "mesNo1"); + mesNo = dComIfGp_evmng_getMyIntegerP(i_index, "mesNo1"); if (mesNo != NULL) { iVar2 = *mesNo; } @@ -2360,12 +2402,6 @@ static int daNpcKasiHana_IsDelete(void* a_this) { return 1; } -/* 80A2065C-80A20678 00579C 001C+00 1/1 0/0 0/0 .text getCenterPos__15daNpcKasi_Mng_cFv*/ -cXyz daNpcKasi_Mng_c::getCenterPos() { return mCenterPos; } - -/* 80A20678-80A2067C 0057B8 0004+00 1/0 0/0 0/0 .text adjustShapeAngle__15daNpcKasiHana_cFv */ -void daNpcKasiHana_c::adjustShapeAngle() {} - AUDIO_INSTANCES; /* 80A216C0-80A216E0 -00001 0020+00 1/0 0/0 0/0 .data daNpcKasiHana_MethodTable */ diff --git a/src/d/actor/d_a_npc_kasi_kyu.cpp b/src/d/actor/d_a_npc_kasi_kyu.cpp index 3e72347b054..2f9cf87c5e0 100644 --- a/src/d/actor/d_a_npc_kasi_kyu.cpp +++ b/src/d/actor/d_a_npc_kasi_kyu.cpp @@ -199,7 +199,7 @@ daNpcKasiKyu_HIOParam const daNpcKasiKyu_Param_c::m = { 0, false, false, - 10, + 5, 16.0f, }; @@ -761,7 +761,6 @@ BOOL daNpcKasiKyu_c::chkFindPlayer() { /* 80A23708-80A23AB4 001E28 03AC+00 8/0 0/0 0/0 .text wait__14daNpcKasiKyu_cFi */ int daNpcKasiKyu_c::wait(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -808,13 +807,24 @@ int daNpcKasiKyu_c::wait(int param_1) { } } - if (dComIfGp_event_runCheck()) { +#if VERSION != VERSION_SHIELD_DEBUG + // TODO: gameInfo fake match to force reuse of pointer + dComIfG_play_c* play = &g_dComIfG_gameInfo.play; + if (play->getEvent().runCheck()) +#else + if (dComIfGp_event_runCheck()) +#endif + { if (eventInfo.checkCommandTalk()) { if (!dComIfGp_event_chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) { OS_REPORT("------------------kyu talk reset!!\n"); mTalked = true; +#if VERSION != VERSION_SHIELD_DEBUG + play->getEvent().reset(); +#else dComIfGp_event_reset(); +#endif } } } else { @@ -962,9 +972,20 @@ int daNpcKasiKyu_c::getWolfPathNearIdx() { return rv; } +daNpcKasiKyu_c::actionFunc dummy_lit_4960() { + return &daNpcKasiKyu_c::wait; +} + +daNpcKasiKyu_c::actionFunc dummy_lit_4968() { + return &daNpcKasiKyu_c::wait; +} + +daNpcKasiKyu_c::actionFunc dummy_lit_5003() { + return &daNpcKasiKyu_c::wait; +} + /* 80A23EFC-80A23FA0 00261C 00A4+00 2/0 0/0 0/0 .text chace_st__14daNpcKasiKyu_cFi */ int daNpcKasiKyu_c::chace_st(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -987,7 +1008,6 @@ int daNpcKasiKyu_c::chace_st(int param_1) { /* 80A23FA0-80A24110 0026C0 0170+00 4/0 0/0 0/0 .text chace__14daNpcKasiKyu_cFi */ int daNpcKasiKyu_c::chace(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -1018,6 +1038,10 @@ int daNpcKasiKyu_c::chace(int param_1) { return 1; } +daNpcKasiKyu_c::actionFunc dummy_lit_5106() { + return &daNpcKasiKyu_c::chace; +} + /* 80A24110-80A241CC 002830 00BC+00 1/1 0/0 0/0 .text getChacePos__14daNpcKasiKyu_cFv */ cXyz daNpcKasiKyu_c::getChacePos() { int plPoint = mPlPoint; @@ -1041,7 +1065,6 @@ cXyz daNpcKasiKyu_c::getChacePos() { /* 80A241CC-80A2428C 0028EC 00C0+00 2/0 0/0 0/0 .text turn_link__14daNpcKasiKyu_cFi */ int daNpcKasiKyu_c::turn_link(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -1064,7 +1087,6 @@ int daNpcKasiKyu_c::turn_link(int param_1) { /* 80A2428C-80A24370 0029AC 00E4+00 1/0 0/0 0/0 .text turn_home__14daNpcKasiKyu_cFi */ int daNpcKasiKyu_c::turn_home(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -1092,7 +1114,6 @@ int daNpcKasiKyu_c::turn_home(int param_1) { /* 80A24370-80A24440 002A90 00D0+00 1/0 0/0 0/0 .text turn_center__14daNpcKasiKyu_cFi */ int daNpcKasiKyu_c::turn_center(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -1186,7 +1207,6 @@ int daNpcKasiKyu_c::kya2(int param_1) { /* 80A24628-80A246FC 002D48 00D4+00 2/0 0/0 0/0 .text kya_stop__14daNpcKasiKyu_cFi */ int daNpcKasiKyu_c::kya_stop(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -1230,7 +1250,6 @@ int daNpcKasiKyu_c::iyan(int param_1) { /* 80A24774-80A2484C 002E94 00D8+00 1/0 0/0 0/0 .text iyan_look__14daNpcKasiKyu_cFi */ int daNpcKasiKyu_c::iyan_look(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -1336,7 +1355,6 @@ int daNpcKasiKyu_c::wait_dummy(int param_1) { /* 80A24AD8-80A24CC4 0031F8 01EC+00 1/0 0/0 0/0 .text cheer__14daNpcKasiKyu_cFi */ int daNpcKasiKyu_c::cheer(int param_1) { - // NONMATCHING switch (mMode) { case -1: break; @@ -1373,11 +1391,22 @@ int daNpcKasiKyu_c::cheer(int param_1) { current.angle.y = mCurAngle.y; shape_angle.y = mCurAngle.y; - if (dComIfGp_event_runCheck()) { +#if VERSION != VERSION_SHIELD_DEBUG + // TODO: gameInfo fake match to force reuse of pointer + dComIfG_play_c* play = &g_dComIfG_gameInfo.play; + if (play->getEvent().runCheck()) +#else + if (dComIfGp_event_runCheck()) +#endif + { if (eventInfo.checkCommandTalk()) { if (!dComIfGp_event_chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) { mTalked = true; +#if VERSION != VERSION_SHIELD_DEBUG + play->getEvent().reset(); +#else dComIfGp_event_reset(); +#endif } } } else { diff --git a/src/d/actor/d_a_npc_kasi_mich.cpp b/src/d/actor/d_a_npc_kasi_mich.cpp index 5dfe234cdb0..3e1fdf2aa1e 100644 --- a/src/d/actor/d_a_npc_kasi_mich.cpp +++ b/src/d/actor/d_a_npc_kasi_mich.cpp @@ -808,13 +808,24 @@ int daNpcKasiMich_c::wait(int param_1) { } } - if (dComIfGp_event_runCheck()) { +#if VERSION != VERSION_SHIELD_DEBUG + // TODO: gameInfo fake match to force reuse of pointer + dComIfG_play_c* play = &g_dComIfG_gameInfo.play; + if (play->getEvent().runCheck()) +#else + if (dComIfGp_event_runCheck()) +#endif + { if (eventInfo.checkCommandTalk()) { if (!dComIfGp_event_chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) { OS_REPORT("------------------mich talk reset!!\n"); mTalked = true; +#if VERSION != VERSION_SHIELD_DEBUG + play->getEvent().reset(); +#else dComIfGp_event_reset(); +#endif } } } else { @@ -1371,11 +1382,22 @@ int daNpcKasiMich_c::cheer(int param_1) { current.angle.y = mCurAngle.y; shape_angle.y = mCurAngle.y; - if (dComIfGp_event_runCheck()) { +#if VERSION != VERSION_SHIELD_DEBUG + // TODO: gameInfo fake match to force reuse of pointer + dComIfG_play_c* play = &g_dComIfG_gameInfo.play; + if (play->getEvent().runCheck()) +#else + if (dComIfGp_event_runCheck()) +#endif + { if (eventInfo.checkCommandTalk()) { if (!dComIfGp_event_chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) { mTalked = true; +#if VERSION != VERSION_SHIELD_DEBUG + play->getEvent().reset(); +#else dComIfGp_event_reset(); +#endif } } } else {