From 4aadd65d723b1fbdb2d703b5af0ce27f594cf7ea Mon Sep 17 00:00:00 2001 From: SuperDude88 <82904174+SuperDude88@users.noreply.github.com> Date: Fri, 20 Jun 2025 13:45:04 -0400 Subject: [PATCH] Match Most of daNpc_ji1_c (#796) * More npc_ji1 Work - Match most remaining code Still need to fix setHairAngle and do a ton of cleanup * setHairAngle Closer * Oops Why was this not causing an error locally * More Field Names --- include/d/actor/d_a_npc_ji1.h | 120 +- include/d/actor/d_a_player.h | 2 +- include/dolphin/mtx/quat.h | 4 + include/m_Do/m_Do_audio.h | 4 +- src/d/actor/d_a_npc_ji1.cpp | 2357 +++++++++++++++++++++++++++------ 5 files changed, 2027 insertions(+), 460 deletions(-) diff --git a/include/d/actor/d_a_npc_ji1.h b/include/d/actor/d_a_npc_ji1.h index bfbe403f0..238d4e427 100644 --- a/include/d/actor/d_a_npc_ji1.h +++ b/include/d/actor/d_a_npc_ji1.h @@ -17,29 +17,29 @@ public: void SpRollCutChcek() {} bool checkAction(Action_t action) { - return field_0x2B0 == action; + return mAction == action; } bool checkSubAction(SubAction_t subAction) { - return field_0x2D4 == subAction; + return mSubAction == subAction; } void setAction(Action_t action, void* arg) { - if(field_0x2B0 != action) { - if(field_0x2B0) { + if(mAction != action) { + if(mAction) { field_0xC78 = 0xFF; - (this->*field_0x2B0)(arg); + (this->*mAction)(arg); } - field_0x2BC = field_0x2B0; - field_0x2B0 = action; + field_0x2BC = mAction; + mAction = action; field_0xC78 = 0; - (this->*field_0x2B0)(arg); + (this->*mAction)(arg); } } void setSubAction(SubAction_t subAction) { - field_0x2D4 = subAction; + mSubAction = subAction; } BOOL isGuardAnim(); @@ -93,10 +93,10 @@ public: BOOL endspeakAction(void*); BOOL reiAction(void*); BOOL plmoveAction(void*); - void teachMove(f32); + BOOL teachMove(f32); BOOL teachSpRollCutMove(f32); - void calcCoCorrectValue(); - void calcBgCorrectValue(); + f32 calcCoCorrectValue(); + f32 calcBgCorrectValue(); BOOL MoveToPlayer(f32, u8); void teachSubActionAttackInit(); BOOL teachSubActionAttack(); @@ -105,7 +105,7 @@ public: BOOL teachAction(void*); BOOL teachSPRollCutAction(void*); void battleGameSetTimer(); - void battleMove(f32); + BOOL battleMove(f32); void battleSubActionWaitInit(); BOOL battleSubActionWait(); void battleSubActionNockBackInit(int); @@ -124,7 +124,7 @@ public: BOOL battleSubActionJpGuard(); void battleSubActionGuardInit(); BOOL battleSubActionGuard(); - void battleAtSet(); + BOOL battleAtSet(); BOOL battleGuardCheck(); BOOL battleAction(void*); BOOL checkCutType(int, int); @@ -153,29 +153,29 @@ public: /* 0x2A0 */ f32 field_0x2A0; /* 0x2A4 */ f32 field_0x2A4; /* 0x2A8 */ u8 field_0x2A8; - /* 0x2AC */ u32 field_0x2AC; - /* 0x2B0 */ Action_t field_0x2B0; + /* 0x2AC */ u32 mMsgNo; + /* 0x2B0 */ Action_t mAction; /* 0x2BC */ Action_t field_0x2BC; /* 0x2C8 */ Action_t field_0x2C8; - /* 0x2D4 */ SubAction_t field_0x2D4; + /* 0x2D4 */ SubAction_t mSubAction; /* 0x2E0 */ dPa_smokeEcallBack field_0x2E0; /* 0x300 */ dPa_smokeEcallBack field_0x300; /* 0x320 */ cXyz field_0x320; /* 0x32C */ s16 field_0x32C; - /* 0x330 */ mDoExt_McaMorf* field_0x330; + /* 0x330 */ mDoExt_McaMorf* mpOrcaMorf; /* 0x334 */ dNpc_EventCut_c mEventCut; /* 0x3A0 */ dNpc_JntCtrl_c m_jnt; /* 0x3D4 */ J3DAnmTexPattern* headTexPattern; - /* 0x3D8 */ mDoExt_btpAnm field_0x3D8; - /* 0x3EC */ u8 field_0x3EC; - /* 0x3EE */ s16 field_0x3EE; - /* 0x3F0 */ u32 field_0x3F0; - /* 0x3F4 */ mDoExt_McaMorf* mpMorf; - /* 0x3F8 */ J3DModel* field_0x3F8; - /* 0x3FC */ mDoExt_brkAnm field_0x3FC; - /* 0x414 */ f32 field_0x414; - /* 0x418 */ mDoExt_btkAnm field_0x418; - /* 0x42C */ f32 field_0x42C; + /* 0x3D8 */ mDoExt_btpAnm mBlinkAnim; + /* 0x3EC */ u8 mBlinkFrame; + /* 0x3EE */ s16 mBlinkTimer; + /* 0x3F0 */ u32 mShadowId; + /* 0x3F4 */ mDoExt_McaMorf* mpSpearMorf; + /* 0x3F8 */ J3DModel* mpTearsModel; + /* 0x3FC */ mDoExt_brkAnm mCryBrk; + /* 0x414 */ f32 mCryBrkFrame; + /* 0x418 */ mDoExt_btkAnm mCryBtk; + /* 0x42C */ f32 mCryBtkFrame; /* 0x430 */ JPABaseEmitter* field_0x430; /* 0x434 */ dBgS_ObjAcch mAcch; /* 0x5F8 */ dBgS_AcchCir mAcchCir; @@ -205,65 +205,57 @@ public: /* 0xBB2 */ s16 field_0xBB2; /* 0xBB4 */ s16 field_0xBB4; /* 0xBB6 */ s16 field_0xBB6; - /* 0xBB8 */ s16 field_0xB86; + /* 0xBB8 */ s16 field_0xBB8; /* 0xBBA */ s16 field_0xBBA; /* 0xBBC */ s16 field_0xBBC; /* 0xBBE */ s16 field_0xBBE; /* 0xBC0 */ s16 field_0xBC0; /* 0xBC2 */ s16 field_0xBC2; - /* 0xBC4 */ s16 field_0xBC4; - /* 0xBC6 */ s16 field_0xBC6; - /* 0xBC8 */ s16 field_0xBC8; - /* 0xBCA */ s16 field_0xBCA; - /* 0xBCC */ s16 field_0xBCC; - /* 0xBCE */ s16 field_0xBCE; + /* 0xBC4 */ cXyz field_0xBC4; /* 0xBD0 */ s16 field_0xBD0; /* 0xBD2 */ s16 field_0xBD2; /* 0xBD4 */ s16 field_0xBD4; /* 0xBD6 */ s16 field_0xBD6; /* 0xBD8 */ cXyz field_0xBD8[3]; - /* 0xBFC */ dNpc_HeadAnm_c field_0xBFC; + /* 0xBFC */ dNpc_HeadAnm_c mHeadAnm; /* 0xC20 */ u32 pad_0xC20; /* 0xC24 */ s32 field_0xC24; /* 0xC28 */ u32 field_0xC28; - /* 0xC2C */ u32 field_0xC2C; + /* 0xC2C */ s32 field_0xC2C; /* 0xC30 */ s32 field_0xC30; - /* 0xC34 */ s32 field_0xC34; + /* 0xC34 */ int field_0xC34; /* 0xC38 */ s32 field_0xC38; /* 0xC3C */ int field_0xC3C; /* 0xC40 */ cXyz field_0xC40; /* 0xC4C */ f32 field_0xC4C; /* 0xC50 */ f32 field_0xC50; - /* 0xC54 */ s16 field_0xC54[0x12]; + /* 0xC54 */ s16 mEventIdx[0x12]; /* 0xC78 */ s8 field_0xC78; - /* 0xC7C */ request_of_phase_process_class field_0xC7C; + /* 0xC7C */ request_of_phase_process_class mPhs; /* 0xC84 */ u32 field_0xC84; /* 0xC88 */ s16 field_0xC88; /* 0xC8C */ s32 field_0xC8C; /* 0xC90 */ s32 field_0xC90; - /* 0xC94 */ u32 field_0xC94; - /* 0xC98 */ u32 field_0xC98; + /* 0xC94 */ s32 field_0xC94; + /* 0xC98 */ s32 field_0xC98; /* 0xC9C */ f32 field_0xC9C; /* 0xCA0 */ Mtx field_0xCA0; /* 0xCD0 */ cXyz field_0xCD0; /* 0xCDC */ cXyz field_0xCDC; /* 0xCE8 */ u8 pad_0xCE8[0xC]; /* 0xCF4 */ Quaternion field_0xCF4; - /* 0xD04 */ f32 field_0xD04; - /* 0xD08 */ f32 field_0xD08; - /* 0xD0C */ f32 field_0xD0C; - /* 0xD10 */ f32 field_0xD10; + /* 0xD04 */ Quaternion field_0xD04; /* 0xD14 */ s16 field_0xD14; /* 0xD16 */ s16 field_0xD16; /* 0xD18 */ f32 field_0xD18; /* 0xD1C */ cXyz field_0xD1C; /* 0xD28 */ cXyz field_0xD28; - /* 0xD34 */ u32 field_0xD34; + /* 0xD34 */ s32 field_0xD34; /* 0xD38 */ cXyz field_0xD38; /* 0xD44 */ u8 pad_0xD44[0xC]; /* 0xD50 */ cXyz field_0xD50; /* 0xD5C */ csXyz field_0xD5C; - /* 0xD64 */ s32 field_0xD64; + /* 0xD64 */ s32 mAnimation; /* 0xD68 */ s32 field_0xD68; /* 0xD6C */ s32 field_0xD6C; /* 0xD70 */ s32 field_0xD70; @@ -273,11 +265,11 @@ public: /* 0xD7A */ u8 field_0xD7A; /* 0xD7B */ u8 field_0xD7B; /* 0xD7C */ u8 field_0xD7C; - /* 0xD7D */ u8 field_0xD7D; + /* 0xD7D */ u8 mCreateItemNo; /* 0xD7E */ u8 field_0xD7E; - /* 0xD80 */ u32 field_0xD80; + /* 0xD80 */ u32 mEndMsgNo; /* 0xD84 */ u8 field_0xD84; - /* 0xD85 */ u8 field_0xD85; + /* 0xD85 */ bool mHide; static s8 game_life_point; }; // Size: 0xD88 @@ -324,19 +316,19 @@ public: /* 0x07C */ f32 field_0x7C; /* 0x080 */ f32 field_0x80; /* 0x084 */ f32 field_0x84; - /* 0x088 */ u16 field_0x88; - /* 0x08A */ u16 field_0x8A; - /* 0x08C */ u16 field_0x8C; - /* 0x08E */ u16 field_0x8E; - /* 0x090 */ u16 field_0x90; - /* 0x092 */ u16 field_0x92; - /* 0x094 */ u16 field_0x94; - /* 0x096 */ u16 field_0x96; - /* 0x098 */ u16 field_0x98; - /* 0x09A */ u16 field_0x9A; - /* 0x09C */ u16 field_0x9C; - /* 0x09E */ u16 field_0x9E; - /* 0x0A0 */ u16 field_0xA0; + /* 0x088 */ s16 field_0x88; + /* 0x08A */ s16 field_0x8A; + /* 0x08C */ s16 field_0x8C; + /* 0x08E */ s16 field_0x8E; + /* 0x090 */ s16 field_0x90; + /* 0x092 */ s16 field_0x92; + /* 0x094 */ s16 field_0x94; + /* 0x096 */ s16 field_0x96; + /* 0x098 */ s16 field_0x98; + /* 0x09A */ s16 field_0x9A; + /* 0x09C */ s16 field_0x9C; + /* 0x09E */ s16 field_0x9E; + /* 0x0A0 */ s16 field_0xA0; /* 0x0A2 */ u8 field_0xA2; /* 0x0A4 */ f32 field_0xA4; /* 0x0A8 */ f32 field_0xA8; diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index c7afd1702..972f32ab4 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -475,7 +475,7 @@ public: void onNoResetFlg0(daPy_FLG0 flag) { mNoResetFlg0 |= flag; } void offNoResetFlg0(daPy_FLG0 flag) { mNoResetFlg0 &= ~flag; } u32 checkNoResetFlg0(daPy_FLG0 flag) const { return mNoResetFlg0 & flag; } - bool getCutAtFlg() const { return checkNoResetFlg0(daPyFlg0_CUT_AT_FLG); } + BOOL getCutAtFlg() const { return checkNoResetFlg0(daPyFlg0_CUT_AT_FLG); } void onPushPullKeep() { onNoResetFlg0(daPyFlg0_PUSH_PULL_KEEP); } void offPushPullKeep() { offNoResetFlg0(daPyFlg0_PUSH_PULL_KEEP); } bool checkEquipHoverBoots() const { return checkNoResetFlg0(daPyFlg0_HOVER_BOOTS); } diff --git a/include/dolphin/mtx/quat.h b/include/dolphin/mtx/quat.h index 3383839a2..884ad4e68 100644 --- a/include/dolphin/mtx/quat.h +++ b/include/dolphin/mtx/quat.h @@ -13,14 +13,18 @@ typedef struct Quaternion { void C_QUATMultiply(const Quaternion* a, const Quaternion* b, Quaternion* ab); void PSQUATMultiply(const Quaternion* a, const Quaternion* b, Quaternion* ab); +void C_QUATNormalize(const Quaternion* src, Quaternion* unit); +void PSQUATNormalize(const Quaternion* src, Quaternion* unit); void C_QUATRotAxisRad(Quaternion* q, const Vec* axis, f32 rad); void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t); /* When compiling in debug mode, use C implementations */ #if defined(DEBUG) || !defined(__MWERKS__) #define QUATMultiply C_QUATMultiply +#define QUATNormalize C_QUATNormalize #else #define QUATMultiply PSQUATMultiply +#define QUATNormalize PSQUATNormalize #endif #ifdef __cplusplus diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h index 9137761ae..2c5a48c68 100644 --- a/include/m_Do/m_Do_audio.h +++ b/include/m_Do/m_Do_audio.h @@ -63,7 +63,9 @@ inline void mDoAud_subBgmStop() { mDoAud_zelAudio_c::getInterface()->subBgmStop(); } -inline void mDoAud_changeBgmStatus(s32 status) {} +inline void mDoAud_changeBgmStatus(s32 status) { + mDoAud_zelAudio_c::getInterface()->changeBgmStatus(status); +} inline void mDoAud_changeSubBgmStatus(s32 status) { mDoAud_zelAudio_c::getInterface()->changeSubBgmStatus(status); diff --git a/src/d/actor/d_a_npc_ji1.cpp b/src/d/actor/d_a_npc_ji1.cpp index e027e12aa..ff6ba2cbc 100644 --- a/src/d/actor/d_a_npc_ji1.cpp +++ b/src/d/actor/d_a_npc_ji1.cpp @@ -6,6 +6,8 @@ #include "d/actor/d_a_npc_ji1.h" #include "d/actor/d_a_player.h" #include "d/actor/d_a_tsubo.h" +#include "d/d_kankyo_wether.h" +#include "d/d_s_play.h" #include "d/res/res_ji.h" #include "d/d_com_inf_game.h" #include "d/d_procname.h" @@ -13,11 +15,12 @@ #include "d/d_snap.h" #include "d/d_lib.h" #include "f_op/f_op_msg.h" +#include "d/actor/d_a_player_main.h" #include "weak_data_1811.h" // IWYU pragma: keep #include "weak_bss_936_to_1036.h" // IWYU pragma: keep -static void daNpc_Ji1_setHairAngle(daNpc_Ji1_c*); +static BOOL daNpc_Ji1_setHairAngle(daNpc_Ji1_c*); static daNpc_Ji1_HIO_c l_HIO; @@ -180,13 +183,13 @@ daNpc_Ji1_HIO_c::daNpc_Ji1_HIO_c() { field_0x60[2] = 500; field_0x60[3] = 1000; field_0x68 = 0; - field_0x6C = 0.7; - field_0x70 = 1.5; - field_0x78 = 1.4; - field_0x74 = 1.4; - field_0x80 = 1.4; - field_0x7C = 1.2; - field_0x84 = 0.1; + field_0x6C = 0.7f; + field_0x70 = 1.5f; + field_0x78 = 1.4f; + field_0x74 = 1.4f; + field_0x80 = 1.4f; + field_0x7C = 1.2f; + field_0x84 = 0.1f; field_0x88 = 0xB; field_0x8A = 0x32; field_0x8C = 0x28; @@ -208,14 +211,14 @@ daNpc_Ji1_HIO_c::daNpc_Ji1_HIO_c() { field_0xB8 = 0; field_0xBC = 0.25f; field_0xC0 = -5.0f; - field_0xC4[0].x = 90.0; - field_0xC4[0].y = 5.0; - field_0xC4[0].z = 30.0; - field_0xC4[1].x = 90.0; - field_0xC4[1].y = 5.0; - field_0xC4[1].z = -30.0; - field_0xC4[2].x = -20.0; - field_0xC4[2].y = -20.0; + field_0xC4[0].x = 90.0f; + field_0xC4[0].y = 5.0f; + field_0xC4[0].z = 30.0f; + field_0xC4[1].x = 90.0f; + field_0xC4[1].y = 5.0f; + field_0xC4[1].z = -30.0f; + field_0xC4[2].x = -20.0f; + field_0xC4[2].y = -20.0f; field_0xC4[2].z = 0.0; field_0xE8 = 0xC800; field_0xEA = 0x3800; @@ -245,9 +248,9 @@ static void daJi1_CoHitCallback(fopAc_ac_c* i_this, dCcD_GObjInf*, fopAc_ac_c* a /* 00000404-00000424 .text daJi1_TgHitCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ static void daJi1_TgHitCallback(fopAc_ac_c* i_this, dCcD_GObjInf*, fopAc_ac_c* actor, dCcD_GObjInf*) { - u32 temp = daPy_getPlayerActorClass()->getCutType(); + u32 type = daPy_getPlayerActorClass()->getCutType(); if(actor) { - static_cast(i_this)->field_0xC24 = temp; + static_cast(i_this)->field_0xC24 = type; } } @@ -267,7 +270,7 @@ static void daJi1_AtHitCallback(fopAc_ac_c* i_this, dCcD_GObjInf* param_2, fopAc /* 000004A0-000004CC .text isGuardAnim__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::isGuardAnim() { - if((field_0xD64 >= 8 && field_0xD64 <= 10) || field_0xD64 == 0xF) { + if((mAnimation >= 8 && mAnimation <= 10) || mAnimation == 0xF) { return true; } @@ -276,7 +279,7 @@ BOOL daNpc_Ji1_c::isGuardAnim() { /* 000004CC-000004F8 .text isAttackAnim__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::isAttackAnim() { - if(field_0xD64 == 0x13 || field_0xD64 == 0x14 || field_0xD64 == 7) { + if(mAnimation == 0x13 || mAnimation == 0x14 || mAnimation == 7) { return true; } @@ -285,20 +288,20 @@ BOOL daNpc_Ji1_c::isAttackAnim() { /* 000004F8-0000056C .text isAttackFrame__11daNpc_Ji1_cFv */ int daNpc_Ji1_c::isAttackFrame() { - f32 frame = field_0x330->getFrame(); + f32 frame = mpOrcaMorf->getFrame(); f32 temp2 = 0.0f; f32 temp3 = temp2; - if(field_0xD64 == 0x13) { + if(mAnimation == 0x13) { temp2 = 28.0f; temp3 = 35.0f; } - else if (field_0xD64 == 0x14) { + else if (mAnimation == 0x14) { temp2 = 25.0f; temp3 = 35.0f; } else { - if(field_0xD64 == 7) { + if(mAnimation == 7) { temp2 = 12.0f; temp3 = 28.0f; } @@ -313,7 +316,7 @@ int daNpc_Ji1_c::isAttackFrame() { /* 0000056C-000005A0 .text isItemWaitAnim__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::isItemWaitAnim() { - if(field_0xD64 == 0 || field_0xD64 == 0xC || field_0xD64 == 0xD || field_0xD64 == 0x18) { + if(mAnimation == 0 || mAnimation == 0xC || mAnimation == 0xD || mAnimation == 0x18) { return true; } @@ -356,8 +359,8 @@ static BOOL daNpc_Ji1_plRoomOutCheck() { cXyz plyrPos = daPy_getPlayerActorClass()->current.pos; static cXyz out_chk_pos(0.0f, 0.0f, 500.0f); - cXyz temp = plyrPos - out_chk_pos; - if(temp.absXZ() < 100.0f && dComIfGp_getDoStatus() == dActStts_OPEN_e) { + cXyz posDiff = plyrPos - out_chk_pos; + if(posDiff.absXZ() < 100.0f && dComIfGp_getDoStatus() == dActStts_OPEN_e) { return true; } @@ -379,8 +382,8 @@ BOOL daNpc_Ji1_c::normalSubActionHarpoonGuard(s16 param_1) { fopAcM_seStart(this, JA_SE_OBJ_COL_SWS_NMTLP, 0); } else { - if(field_0xD64 == 0xD) { - if(field_0x330->checkFrame(field_0x330->getEndFrame() - 2.0f) && ++field_0xD68 > 1) { + if(mAnimation == 0xD) { + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f) && ++field_0xD68 > 1) { setAnm(0, 12.0f, 0); } } @@ -389,12 +392,12 @@ BOOL daNpc_Ji1_c::normalSubActionHarpoonGuard(s16 param_1) { if(field_0xD6C == 1) { cLib_addCalcAngleS2(¤t.angle.y, param_1, 2, 0x2000); - if(field_0xD64 == 0xB) { - if(field_0x330->checkFrame(field_0x330->getEndFrame() - 14.0f)) { + if(mAnimation == 0xB) { + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 14.0f)) { setParticle(3, 3.0f, 0.5f); fopAcM_seStart(this, JA_SE_CV_JI_ATTACK, 0); } - else if(field_0x330->checkFrame(field_0x330->getEndFrame() - 2.0f)) { + else if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { dtParticle(); if(field_0xD68++ > 2) { field_0xD6C = 0; @@ -402,31 +405,31 @@ BOOL daNpc_Ji1_c::normalSubActionHarpoonGuard(s16 param_1) { } else { setAnm(0xB, 4.0f, 1); - field_0x330->setPlaySpeed(2.0f); + mpOrcaMorf->setPlaySpeed(2.0f); } } } else { - if(field_0x330->checkFrame(field_0x330->getEndFrame() - 2.0f)) { + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { field_0xD6C = 0; if(field_0xD74 == 3) { setAnm(5, 4.0f, 0); field_0xC84 = 0xC; - field_0x2C8 = field_0x2B0; + field_0x2C8 = mAction; setAction(&daNpc_Ji1_c::eventAction, 0); } else if(field_0xD74 == 5) { setAnm(5, 4.0f, 0); field_0xC84 = 0xD; - field_0x2C8 = field_0x2B0; + field_0x2C8 = mAction; setAction(&daNpc_Ji1_c::eventAction, 0); } else if(field_0xD74 > 5) { setAnm(5, 4.0f, 0); field_0xC84 = 0xE; - field_0x2C8 = field_0x2B0; + field_0x2C8 = mAction; setAction(&daNpc_Ji1_c::eventAction, 0); @@ -455,26 +458,26 @@ BOOL daNpc_Ji1_c::normalSubActionGuard(s16 param_1) { if(field_0xD6C == 1) { cLib_addCalcAngleS2(¤t.angle.y, param_1, 2, 0x2000); - if(field_0x330->checkFrame(field_0x330->getEndFrame() - 2.0f) && field_0xD68++ > 1) { + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f) && field_0xD68++ > 1) { field_0xD6C = 0; if(field_0xD74 == 3) { setAnm(5, 4.0f, 0); field_0xC84 = 0xC; - field_0x2C8 = field_0x2B0; + field_0x2C8 = mAction; setAction(&daNpc_Ji1_c::eventAction, 0); } else if(field_0xD74 == 5) { setAnm(5, 4.0f, 0); field_0xC84 = 0xD; - field_0x2C8 = field_0x2B0; + field_0x2C8 = mAction; setAction(&daNpc_Ji1_c::eventAction, 0); } else if(field_0xD74 > 5) { setAnm(5, 4.0f, 0); field_0xC84 = 0xE; - field_0x2C8 = field_0x2B0; + field_0x2C8 = mAction; setAction(&daNpc_Ji1_c::eventAction, 0); } @@ -520,7 +523,7 @@ BOOL daNpc_Ji1_c::normalAction(void*) { } } - if(temp < l_HIO.field_0x2C && isGuardAnim() == 0 && field_0xD64 != 0xD) { + if(temp < l_HIO.field_0x2C && isGuardAnim() == 0 && mAnimation != 0xD) { eventInfo.onCondition(dEvtCnd_CANTALK_e); if(dComIfGs_isEventBit(0x520)) { eventInfo.onCondition(dEvtCnd_CANTALKITEM_e); @@ -544,8 +547,8 @@ BOOL daNpc_Ji1_c::kaitenExpAction(void*) { cXyz delta = player->current.pos - current.pos; f32 temp = delta.absXZ(); - if(field_0xD64 == 0x10) { - if(field_0x330->checkFrame(19.0f)) { + if(mAnimation == 0x10) { + if(mpOrcaMorf->checkFrame(19.0f)) { if(field_0xD68 == 1) { dComIfGp_getVibration().StartShock(5, -0x11, cXyz(0.0f, 1.0f, 0.0f)); } @@ -555,7 +558,7 @@ BOOL daNpc_Ji1_c::kaitenExpAction(void*) { setParticle(3, 3.0f, 0.5f); } - if(field_0x330->checkFrame(field_0x330->getEndFrame() - 2.0f)) { + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { if(++field_0xD68 > 1) { field_0xD68 = 0; setAnm(0x11, 4.0f, 0); @@ -568,7 +571,7 @@ BOOL daNpc_Ji1_c::kaitenExpAction(void*) { if(field_0xC78 == 0) { setAnm(0x10, 4.0f, 0); if(!eventInfo.checkCommandDemoAccrpt()) { - fopAcM_orderOtherEventId(this, field_0xC54[6]); + fopAcM_orderOtherEventId(this, mEventIdx[6]); eventInfo.onCondition(dEvtCmd_INDEMO_e); return false; @@ -670,7 +673,7 @@ BOOL daNpc_Ji1_c::kaitenwaitAction(void*) { } } - if(temp < l_HIO.field_0x2C && isGuardAnim() == 0 && field_0xD64 != 0xD && r27->speedF < 1.0f) { + if(temp < l_HIO.field_0x2C && isGuardAnim() == 0 && mAnimation != 0xD && r27->speedF < 1.0f) { eventInfo.onCondition(dEvtCnd_CANTALK_e); } @@ -696,7 +699,7 @@ BOOL daNpc_Ji1_c::kaitenwaitAction(void*) { BOOL daNpc_Ji1_c::kaitenAction(void*) { if(field_0xC78 == 0) { if(!eventInfo.checkCommandDemoAccrpt()) { - fopAcM_orderOtherEventId(this, field_0xC54[5]); + fopAcM_orderOtherEventId(this, mEventIdx[5]); eventInfo.onCondition(dEvtCmd_INDEMO_e); return false; @@ -704,7 +707,7 @@ BOOL daNpc_Ji1_c::kaitenAction(void*) { int staffIdx = dComIfGp_evmng_getMyStaffId("Ji1"); l_msgId = -1; - field_0x2AC = 0x974; + mMsgNo = 0x974; dComIfGp_evmng_cutEnd(staffIdx); current.angle.y = 0; field_0xC78 += 1; @@ -714,14 +717,14 @@ BOOL daNpc_Ji1_c::kaitenAction(void*) { int actionNo = getEventActionNo(staffIdx); if(l_msgId == -1) { if(actionNo == 2) { - if(field_0x2AC == 0x974) { + if(mMsgNo == 0x974) { current.angle.y = -0x8000; } - else if(field_0x2AC == 0x975) { + else if(mMsgNo == 0x975) { dComIfGp_evmng_cutEnd(staffIdx); } - l_msgId = fopMsgM_messageSet(field_0x2AC, &eyePos); + l_msgId = fopMsgM_messageSet(mMsgNo, &eyePos); } else if(actionNo == 1) { m_jnt.onHeadLock(); @@ -742,17 +745,17 @@ BOOL daNpc_Ji1_c::kaitenAction(void*) { } } else if(l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) { - l_msg->mStatus = next_msgStatus(&field_0x2AC); + l_msg->mStatus = next_msgStatus(&mMsgNo); if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) { - fopMsgM_messageSet(field_0x2AC); - setAnimFromMsgNo(field_0x2AC); + fopMsgM_messageSet(mMsgNo); + setAnimFromMsgNo(mMsgNo); } } else if(l_msg->mStatus == fopMsgStts_BOX_CLOSED_e) { if(actionNo == 2) { l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e; l_msgId = -1; - field_0x2AC = 0x975; + mMsgNo = 0x975; field_0xC78 = 1; return true; @@ -762,12 +765,12 @@ BOOL daNpc_Ji1_c::kaitenAction(void*) { dComIfGp_evmng_cutEnd(staffIdx); } - if(dComIfGp_evmng_endCheck(field_0xC54[5])) { + if(dComIfGp_evmng_endCheck(mEventIdx[5])) { dComIfGs_onEventBit(0x501); field_0xD28 = home.pos; home.angle.y = 0; l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e; - if(field_0x2AC == 0x967) { + if(mMsgNo == 0x967) { field_0xD70 = -1; fopAcM_seStart(this, JA_SE_VS_JI_OPENING, 0); mDoAud_bgmStop(45); @@ -782,7 +785,7 @@ BOOL daNpc_Ji1_c::kaitenAction(void*) { dComIfGp_event_reset(); } } - else if(dComIfGp_checkMesgSendButton() && actionNo == 3 && field_0x2AC == 0x976) { + else if(dComIfGp_checkMesgSendButton() && actionNo == 3 && mMsgNo == 0x976) { setAnm(2, 4.0f, 0); m_jnt.offHeadLock(); m_jnt.offBackBoneLock(); @@ -898,7 +901,7 @@ u32 daNpc_Ji1_c::getMsg() { /* 00002A60-00002C64 .text next_msgStatus__11daNpc_Ji1_cFPUl */ u16 daNpc_Ji1_c::next_msgStatus(u32* pMsgNo) { u16 status = fopMsgStts_MSG_CONTINUES_e; - switch(field_0x2AC) { + switch(mMsgNo) { case 0x951: case 0x952: case 0x956: @@ -935,42 +938,42 @@ u16 daNpc_Ji1_c::next_msgStatus(u32* pMsgNo) { case 0x9B3: case 0x9B8: case 0x9B9: - field_0x2AC = field_0x2AC + 1; + mMsgNo = mMsgNo + 1; break; case 0x97B: - field_0x2AC = 0x9C0; + mMsgNo = 0x9C0; break; case 0x9A2: if(dComIfGs_isEventBit(0xF10)) { - field_0x2AC = 0x9A3; + mMsgNo = 0x9A3; } else { - field_0x2AC = 0x9A5; + mMsgNo = 0x9A5; } break; case 0x9AF: if(dComIfGs_getBeastNum(3) >= 10) { - field_0x2AC = 0x9B0; + mMsgNo = 0x9B0; } else { - field_0x2AC = 0x9BB; + mMsgNo = 0x9BB; } break; case 0x997: case 0x999: - field_0x2AC = 0x998; + mMsgNo = 0x998; break; case 0x99A: if(dComIfGs_getEventReg(0xD003) == 1) { - field_0x2AC = 0x99B; + mMsgNo = 0x99B; } else if(dComIfGs_getEventReg(0xD003) == 2) { - field_0x2AC = 0x99D; + mMsgNo = 0x99D; } else { - field_0x2AC = 0x99F; + mMsgNo = 0x99F; } break; @@ -980,18 +983,18 @@ u16 daNpc_Ji1_c::next_msgStatus(u32* pMsgNo) { case 0x977: case 0x97A: case 0x9C0: - field_0x2AC = 0x967; + mMsgNo = 0x967; break; case 0x94D: case 0x966: - field_0x2AC = 0x94E; + mMsgNo = 0x94E; break; case 0x967: if(l_msg->mSelectNum == 0) { status = fopMsgStts_MSG_ENDS_e; } else if (l_msg->mSelectNum == 1) { - field_0x2AC = 0x968; + mMsgNo = 0x968; } break; @@ -1000,7 +1003,7 @@ u16 daNpc_Ji1_c::next_msgStatus(u32* pMsgNo) { status = fopMsgStts_MSG_ENDS_e; } else if (l_msg->mSelectNum == 1) { - field_0x2AC = 0x94F; + mMsgNo = 0x94F; } break; @@ -1011,7 +1014,7 @@ u16 daNpc_Ji1_c::next_msgStatus(u32* pMsgNo) { status = fopMsgStts_MSG_ENDS_e; } else if (l_msg->mSelectNum == 1) { - field_0x2AC = 0x995; + mMsgNo = 0x995; } break; @@ -1031,8 +1034,7 @@ BOOL daNpc_Ji1_c::talkAction(void*) { cXyz delta = player->current.pos - current.pos; f32 dummy = delta.absXZ(); - s16 temp = cM_atan2s(delta.x, delta.z); - cLib_addCalcAngleS2(¤t.angle.y, temp, 8, 0x1000); + cLib_addCalcAngleS2(¤t.angle.y, cM_atan2s(delta.x, delta.z), 8, 0x1000); field_0xD7E = 1; m_jnt.onBackBoneLock(); } @@ -1041,36 +1043,36 @@ BOOL daNpc_Ji1_c::talkAction(void*) { } field_0xD7E = 0; - field_0x2AC = getMsg(); + mMsgNo = getMsg(); field_0xC78 += 1; l_msgId = -1; l_msg = 0; } else if(field_0xC78 != -1) { if(l_msgId == -1) { - l_msgId = fopMsgM_messageSet(field_0x2AC, &eyePos); + l_msgId = fopMsgM_messageSet(mMsgNo, &eyePos); } else if(l_msg == 0) { l_msg = fopMsgM_SearchByID(l_msgId); } else { - setAnimFromMsgNo(field_0x2AC); + setAnimFromMsgNo(mMsgNo); if(l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) { - l_msg->mStatus = next_msgStatus(&field_0x2AC); + l_msg->mStatus = next_msgStatus(&mMsgNo); if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) { - fopMsgM_messageSet(field_0x2AC); - setAnimFromMsgNo(field_0x2AC); + fopMsgM_messageSet(mMsgNo); + setAnimFromMsgNo(mMsgNo); } } else if(l_msg->mStatus == fopMsgStts_BOX_CLOSED_e) { l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e; dComIfGp_event_reset(); - if(field_0x2AC == 0x963 || field_0x2AC == 0x98A) { + if(mMsgNo == 0x963 || mMsgNo == 0x98A) { int staffIdx = dComIfGp_evmng_getMyStaffId("Ji1"); dComIfGp_evmng_cutEnd(staffIdx); - if(dComIfGp_evmng_endCheck(field_0xC54[6])) { - if(field_0x2AC == 0x98A) { + if(dComIfGp_evmng_endCheck(mEventIdx[6])) { + if(mMsgNo == 0x98A) { field_0xD70 = -1; fopAcM_seStart(this, JA_SE_VS_JI_OPENING, 0); mDoAud_bgmStop(45); @@ -1082,8 +1084,8 @@ BOOL daNpc_Ji1_c::talkAction(void*) { } } } - else if(field_0x2AC == 0x94E || field_0x2AC == 0x967 || field_0x2AC == 0x9AB || field_0x2AC == 0x9AD || field_0x2AC == 0x9B4) { - if(field_0x2AC == 0x9B4) { + else if(mMsgNo == 0x94E || mMsgNo == 0x967 || mMsgNo == 0x9AB || mMsgNo == 0x9AD || mMsgNo == 0x9B4) { + if(mMsgNo == 0x9B4) { field_0xD7B = 1; } @@ -1093,15 +1095,15 @@ BOOL daNpc_Ji1_c::talkAction(void*) { setAction(&daNpc_Ji1_c::plmoveAction, 0); } - else if(field_0x2AC == 0x995) { - setAction(&daNpc_Ji1_c::plmoveAction, 0); + else if(mMsgNo == 0x995) { + setAction(&daNpc_Ji1_c::normalAction, 0); } else { setAction(field_0x2BC, 0); } } - if(field_0xD64 == 0x16 && field_0x330->getFrame() >= l_HIO.field_0xB4) { + if(mAnimation == 0x16 && mpOrcaMorf->getFrame() >= l_HIO.field_0xB4) { BackSlide(l_HIO.field_0xAC, l_HIO.field_0xB0); } } @@ -1112,6 +1114,166 @@ BOOL daNpc_Ji1_c::talkAction(void*) { /* 000033D0-000039AC .text speakAction__11daNpc_Ji1_cFPv */ BOOL daNpc_Ji1_c::speakAction(void*) { + if(field_0xC78 == 0) { + if(!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderOtherEventId(this, mEventIdx[1]); + eventInfo.onCondition(dEvtCnd_UNK2_e); + return FALSE; + } + + dComIfGp_evmng_cutEnd(dComIfGp_evmng_getMyStaffId("Ji1")); + + if(field_0xD70 == -1) { + mMsgNo = 0x969; + } + else { + switch(field_0xD70) { + case 0: + if(field_0xC90 == 1) { + mMsgNo = 0x97C; + field_0xC94 = 1; + } + else if(field_0xC90 == 3) { + mMsgNo = 0x96A; + } + else { + mMsgNo = 0x96F; + } + + break; + case 1: + if(field_0xC90 == 1) { + mMsgNo = 0x97D; + field_0xC94 = 1; + } + else if(field_0xC90 == 3) { + mMsgNo = 0x96B; + } + else { + mMsgNo = 0x970; + } + + break; + case 2: + if(field_0xC90 == 1) { + mMsgNo = 0x97E; + field_0xC94 = 1; + } + else if(field_0xC90 == 3) { + mMsgNo = 0x97F; + } + else { + mMsgNo = 0x971; + } + + break; + case 3: + if(field_0xC90 == 1) { + mMsgNo = 0x981; + field_0xC94 = 1; + } + else if(field_0xC90 == 3) { + mMsgNo = 0x983; + attention_info.flags |= fopAc_Attn_LOCKON_BATTLE_e; + attention_info.distances[2] = 3; + } + else { + mMsgNo = 0x980; + } + + break; + case 4: + if(field_0xC90 == 1) { + mMsgNo = 0x984; + field_0xC94 = 1; + } + else if(field_0xC90 == 3) { + mMsgNo = 0x96C; + attention_info.flags &= ~fopAc_Attn_LOCKON_BATTLE_e; + attention_info.distances[2] = 0xB5; + } + else { + mMsgNo = 0x985; + } + + break; + default: + if(field_0xC90 == 1) { + mMsgNo = 0x982; + field_0xC94 = 1; + } + else if(field_0xC90 == 3) { + mMsgNo = 0x96D; + } + else { + mMsgNo = 0x972; + } + + break; + } + + if(field_0xC90 == 3) { + field_0xD70++; + field_0xC94 = 0; + mHeadAnm.swing_vertical_init(2, 0x1000, 0x800, 1); + setAnm(5, 4.0f, 0); + } + else { + setAnm(5, 4.0f, 0); + } + } + + field_0xC78++; + l_msgId = fpcM_ERROR_PROCESS_ID_e; + } + else if(field_0xC78 != -1) { + if(l_msgId == fpcM_ERROR_PROCESS_ID_e) { + l_msgId = fopMsgM_messageSet(mMsgNo, &eyePos); + setAnimFromMsgNo(mMsgNo); + } + else { + setAnimFromMsgNo(mMsgNo); + + if(field_0xC78 == 1) { + l_msg = fopMsgM_SearchByID(l_msgId); + if(l_msg) { + field_0xC78++; + } + } + else if(l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) { + l_msg->mStatus = next_msgStatus(&mMsgNo); + if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) { + fopMsgM_messageSet(mMsgNo); + } + } + else if(l_msg->mStatus == fopMsgStts_BOX_CLOSED_e) { + int staffIdx = dComIfGp_evmng_getMyStaffId("Ji1"); + if(staffIdx != -1) { + dComIfGp_evmng_cutEnd(staffIdx); + } + + if(dComIfGp_evmng_endCheck(mEventIdx[1])) { + l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e; + if(mMsgNo == 0x969) { + field_0xD70 = 0; + field_0xC94 = 0; + field_0xC98 = l_HIO.field_0x54[0]; + setAction(&daNpc_Ji1_c::teachAction, NULL); + } + else { + if(field_0xC90 != 1) { + field_0xC98 = l_HIO.field_0x54[field_0xD70]; + } + setAction(field_0x2BC, NULL); + } + + dComIfGp_event_reset(); + } + } + } + } + + return TRUE; } /* 000039AC-00003F54 .text speakBadAction__11daNpc_Ji1_cFPv */ @@ -1119,7 +1281,7 @@ BOOL daNpc_Ji1_c::speakBadAction(void*) { int staffIdx = dComIfGp_evmng_getMyStaffId("Ji1"); if(field_0xC78 == 0) { if(!eventInfo.checkCommandDemoAccrpt()) { - fopAcM_orderOtherEventId(this, field_0xC54[3]); + fopAcM_orderOtherEventId(this, mEventIdx[3]); eventInfo.onCondition(dEvtCnd_UNK2_e); return false; @@ -1132,25 +1294,25 @@ BOOL daNpc_Ji1_c::speakBadAction(void*) { dComIfGp_evmng_cutEnd(staffIdx); switch(field_0xD70) { case 0: - field_0x2AC = 0x96F; + mMsgNo = 0x96F; break; case 1: - field_0x2AC = 0x970; + mMsgNo = 0x970; break; case 2: - field_0x2AC = 0x971; + mMsgNo = 0x971; break; case 3: - field_0x2AC = 0x980; + mMsgNo = 0x980; break; case 4: - field_0x2AC = 0x985; + mMsgNo = 0x985; break; case 5: - field_0x2AC = 0x972; + mMsgNo = 0x972; break; default: - field_0x2AC = 0x9B6; + mMsgNo = 0x9B6; break; } @@ -1160,18 +1322,18 @@ BOOL daNpc_Ji1_c::speakBadAction(void*) { } else if(field_0xC78 != -1) { if(l_msgId == -1) { - if(field_0xD64 == 7) { - if(field_0x330->getFrame() > field_0x330->getEndFrame() - 2.0f) { - l_msgId = fopMsgM_messageSet(field_0x2AC, &eyePos); - field_0xBFC.swing_horizone_init(2, 0x1000, 0x1000, 1); + if(mAnimation == 7) { + if(mpOrcaMorf->getFrame() > mpOrcaMorf->getEndFrame() - 2.0f) { + l_msgId = fopMsgM_messageSet(mMsgNo, &eyePos); + mHeadAnm.swing_horizone_init(2, 0x1000, 0x1000, 1); setAnm(5, 0.0f, 0); } - else if(field_0x330->checkFrame(field_0x330->getEndFrame() - 10.0f)) { + else if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 10.0f)) { dComIfGp_evmng_cutEnd(staffIdx); fopAcM_seStart(this, JA_SE_CV_JI_ATTACK, 0); dComIfGp_getVibration().StartShock(5, -0x11, cXyz(0.0f, 1.0f, 0.0f)); } - else if(field_0x330->checkFrame(field_0x330->getEndFrame() - 14.0f)) { + else if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 14.0f)) { fopAcM_seStart(this, JA_SE_CM_JI_ATTACK, 0); } } @@ -1185,11 +1347,11 @@ BOOL daNpc_Ji1_c::speakBadAction(void*) { } else { if(l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) { - setAnimFromMsgNo(field_0x2AC); - l_msg->mStatus = next_msgStatus(&field_0x2AC); + setAnimFromMsgNo(mMsgNo); + l_msg->mStatus = next_msgStatus(&mMsgNo); if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) { - fopMsgM_messageSet(field_0x2AC); + fopMsgM_messageSet(mMsgNo); } } else if(l_msg->mStatus == fopMsgStts_BOX_CLOSED_e) { @@ -1197,9 +1359,9 @@ BOOL daNpc_Ji1_c::speakBadAction(void*) { dComIfGp_evmng_cutEnd(staffIdx); } - if(dComIfGp_evmng_endCheck(field_0xC54[3])) { + if(dComIfGp_evmng_endCheck(mEventIdx[3])) { l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e; - if(field_0x2AC == 0x969) { + if(mMsgNo == 0x969) { field_0xD70 = 0; setAction(&daNpc_Ji1_c::teachAction, 0); } @@ -1267,18 +1429,18 @@ void daNpc_Ji1_c::createItem() { dComIfGp_event_setItemPartnerId(itemPID); } - field_0xD7D = itemNo; + mCreateItemNo = itemNo; } /* 00004268-00004448 .text set_mtx__11daNpc_Ji1_cFv */ void daNpc_Ji1_c::set_mtx() { - J3DModel* pModel = field_0x330->getModel(); + J3DModel* pModel = mpOrcaMorf->getModel(); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(current.angle.y); pModel->setBaseTRMtx(mDoMtx_stack_c::get()); - field_0x330->calc(); - field_0x3F8->setBaseTRMtx(pModel->getAnmMtx(m_jnt.getHeadJntNum())); + mpOrcaMorf->calc(); + mpTearsModel->setBaseTRMtx(pModel->getAnmMtx(m_jnt.getHeadJntNum())); if(field_0x430) { field_0x430->setGlobalRTMatrix(pModel->getAnmMtx(m_jnt.getHeadJntNum())); @@ -1288,20 +1450,20 @@ void daNpc_Ji1_c::set_mtx() { mDoMtx_stack_c::copy(pModel->getAnmMtx(handRJointNo)); mDoMtx_stack_c::XYZrotM(field_0xD5C); mDoMtx_stack_c::transM(field_0xD50); - mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + mpSpearMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); } - mpMorf->calc(); + mpSpearMorf->calc(); if(field_0xD84) { cXyz temp(0.0f, 0.0f, 100.0f); cXyz temp2(0.0f, 0.0f, -100.0f); - if(field_0xD64 == 0x14) { + if(mAnimation == 0x14) { temp.z = 70.0f; } field_0xB90 = field_0xB78; - mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(1)); + mDoMtx_stack_c::copy(mpSpearMorf->getModel()->getAnmMtx(1)); mDoMtx_stack_c::multVec(&temp, &field_0xB78); mDoMtx_stack_c::multVec(&temp2, &field_0xB84); } @@ -1327,7 +1489,7 @@ BOOL daNpc_Ji1_c::eventAction(void*) { if(field_0xC78 == 0) { int staffIdx = dComIfGp_evmng_getMyStaffId(mEventCut.getActorName()); if(!eventInfo.checkCommandDemoAccrpt() && staffIdx == -1) { - fopAcM_orderOtherEventId(this, field_0xC54[field_0xC84]); + fopAcM_orderOtherEventId(this, mEventIdx[field_0xC84]); eventInfo.onCondition(dEvtCnd_UNK2_e); return false; @@ -1342,7 +1504,7 @@ BOOL daNpc_Ji1_c::eventAction(void*) { int staffIdx = dComIfGp_evmng_getMyStaffId(mEventCut.getActorName()); privateCut(); AnimeControlToWait(); - if(dComIfGp_evmng_endCheck(field_0xC54[field_0xC84])) { + if(dComIfGp_evmng_endCheck(mEventIdx[field_0xC84])) { dComIfGp_event_reset(); setAction(field_0x2C8, 0); @@ -1398,38 +1560,38 @@ u32 daNpc_Ji1_c::evn_talk_init(int staffIdx) { l_msgId = fpcM_ERROR_PROCESS_ID_e; l_msg = 0; if(pMsgNo) { - field_0x2AC = *pMsgNo; - if(field_0x2AC == 0x9A4) { + mMsgNo = *pMsgNo; + if(mMsgNo == 0x9A4) { if(field_0xC38 == 2) { - field_0x2AC = 0x9A9; + mMsgNo = 0x9A9; } - else if(field_0xD7D == 7) { - field_0x2AC = 0x9A6; + else if(mCreateItemNo == 7) { + mMsgNo = 0x9A6; } } - else if(field_0x2AC == 0x9A1) { + else if(mMsgNo == 0x9A1) { if(field_0xC38 == 2) { - field_0x2AC = 0x9A7; + mMsgNo = 0x9A7; } } - else if(field_0x2AC == 0x9B7) { + else if(mMsgNo == 0x9B7) { if(field_0x2C8 == &daNpc_Ji1_c::kaitenwaitAction) { - field_0x2AC = 0x95E; + mMsgNo = 0x95E; } else if(field_0x2C8 == &daNpc_Ji1_c::teachAction) { - field_0x2AC = 0x95D; + mMsgNo = 0x95D; } } } else { - field_0x2AC = 0; + mMsgNo = 0; } if(pEndMsgNo) { - field_0xD80 = *pEndMsgNo; + mEndMsgNo = *pEndMsgNo; } else { - field_0xD80 = 0; + mEndMsgNo = 0; } return 1; @@ -1438,25 +1600,25 @@ u32 daNpc_Ji1_c::evn_talk_init(int staffIdx) { /* 000049AC-00004B1C .text evn_talk__11daNpc_Ji1_cFv */ u32 daNpc_Ji1_c::evn_talk() { if(l_msgId == fpcM_ERROR_PROCESS_ID_e) { - l_msgId = fopMsgM_messageSet(field_0x2AC, &eyePos); + l_msgId = fopMsgM_messageSet(mMsgNo, &eyePos); } else if(!l_msg) { l_msg = fopMsgM_SearchByID(l_msgId); fopMsgM_demoMsgFlagOn(); } else { - setAnimFromMsgNo(field_0x2AC); + setAnimFromMsgNo(mMsgNo); if(l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) { - l_msg->mStatus = next_msgStatus(&field_0x2AC); + l_msg->mStatus = next_msgStatus(&mMsgNo); if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) { - fopMsgM_messageSet(field_0x2AC); + fopMsgM_messageSet(mMsgNo); } else if(l_msg->mStatus == fopMsgStts_MSG_ENDS_e) { - if(field_0x2AC == 0x9BA) { + if(mMsgNo == 0x9BA) { field_0xD7B = 0; field_0xD6C = 0; } - else if(field_0x2AC == 0x95A) { + else if(mMsgNo == 0x95A) { field_0xD7C = 0; field_0xD6C = 0; } @@ -1471,8 +1633,8 @@ u32 daNpc_Ji1_c::evn_talk() { return true; } - if((l_msg->mStatus == fopMsgStts_BOX_OPENING_e || l_msg->mStatus == fopMsgStts_MSG_TYPING_e) && field_0x2AC == field_0xD80) { - field_0xD80 = 0; + if((l_msg->mStatus == fopMsgStts_BOX_OPENING_e || l_msg->mStatus == fopMsgStts_MSG_TYPING_e) && mMsgNo == mEndMsgNo) { + mEndMsgNo = 0; return true; } } @@ -1486,10 +1648,10 @@ u32 daNpc_Ji1_c::evn_continue_talk_init(int staffIdx) { int* data = dComIfGp_evmng_getMyIntegerP(staffIdx, "EndMsgNo"); if(data) { - field_0xD80 = *data; + mEndMsgNo = *data; } else { - field_0xD80 = 0; + mEndMsgNo = 0; } return 1; @@ -1498,25 +1660,25 @@ u32 daNpc_Ji1_c::evn_continue_talk_init(int staffIdx) { /* 00004B84-00004CF4 .text evn_continue_talk__11daNpc_Ji1_cFv */ u32 daNpc_Ji1_c::evn_continue_talk() { if(l_msgId == fpcM_ERROR_PROCESS_ID_e) { - l_msgId = fopMsgM_messageSet(field_0x2AC, &eyePos); + l_msgId = fopMsgM_messageSet(mMsgNo, &eyePos); } else if(!l_msg) { l_msg = fopMsgM_SearchByID(l_msgId); fopMsgM_demoMsgFlagOn(); } else { - setAnimFromMsgNo(field_0x2AC); + setAnimFromMsgNo(mMsgNo); if(l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) { - l_msg->mStatus = next_msgStatus(&field_0x2AC); + l_msg->mStatus = next_msgStatus(&mMsgNo); if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) { - fopMsgM_messageSet(field_0x2AC); + fopMsgM_messageSet(mMsgNo); } else if(l_msg->mStatus == fopMsgStts_MSG_ENDS_e) { - if(field_0x2AC == 0x9BA) { + if(mMsgNo == 0x9BA) { field_0xD7B = 0; field_0xD6C = 0; } - else if(field_0x2AC == 0x95A) { + else if(mMsgNo == 0x95A) { field_0xD7C = 0; field_0xD6C = 0; } @@ -1531,8 +1693,8 @@ u32 daNpc_Ji1_c::evn_continue_talk() { return true; } - if((l_msg->mStatus == fopMsgStts_BOX_OPENING_e || l_msg->mStatus == fopMsgStts_MSG_TYPING_e) && field_0x2AC == field_0xD80) { - field_0xD80 = 0; + if((l_msg->mStatus == fopMsgStts_BOX_OPENING_e || l_msg->mStatus == fopMsgStts_MSG_TYPING_e) && mMsgNo == mEndMsgNo) { + mEndMsgNo = 0; return true; } } @@ -1588,13 +1750,13 @@ u32 daNpc_Ji1_c::evn_head_swing_init(int staffIdx) { switch(value) { case 0: - field_0xBFC.swing_horizone_init(2, 0x1000, 0x1000, 1); + mHeadAnm.swing_horizone_init(2, 0x1000, 0x1000, 1); break; case 1: - field_0xBFC.swing_vertical_init(2, 0x1000, 0x800, 1); + mHeadAnm.swing_vertical_init(2, 0x1000, 0x800, 1); break; case 2: - field_0xBFC.swing_vertical_init(1, 0x1400, 0x1000, 1); + mHeadAnm.swing_vertical_init(1, 0x1400, 0x1000, 1); break; } @@ -1658,14 +1820,14 @@ u32 daNpc_Ji1_c::evn_RollAtControl() { BackSlideInit(); setHitParticle(&hit_scale, JA_SE_CV_JI_FUTTOBI); } - if(field_0xD64 == 0x19) { - if(field_0x330->getFrame() < 10.0f) { + if(mAnimation == 0x19) { + if(mpOrcaMorf->getFrame() < 10.0f) { daPy_py_c* player = daPy_getPlayerActorClass(); - cXyz temp = player->current.pos - current.pos; - cLib_addCalcAngleS2(¤t.angle.y, cM_atan2s(temp.x, temp.z), 2, 0x2000); + cXyz posDiff = player->current.pos - current.pos; + cLib_addCalcAngleS2(¤t.angle.y, cM_atan2s(posDiff.x, posDiff.z), 2, 0x2000); } else { - if(field_0x330->checkFrame(20.0f) && field_0xD68++ < 2) { + if(mpOrcaMorf->checkFrame(20.0f) && field_0xD68++ < 2) { setHitParticle(&hit_scale, JA_SE_CV_JI_FUTTOBI); BackSlideInit(); setAnm(0x19, 4.0f, 1); @@ -1736,10 +1898,10 @@ u32 daNpc_Ji1_c::evn_hide_init(int staffIdx) { } if((value & 1) == 0) { - field_0xD85 = 0; + mHide = false; } else { - field_0xD85 = 1; + mHide = true; } if(value & 2) { @@ -1755,8 +1917,8 @@ u32 daNpc_Ji1_c::evn_hide_init(int staffIdx) { /* 00005508-000055E4 .text AnimeControlToWait__11daNpc_Ji1_cFv */ void daNpc_Ji1_c::AnimeControlToWait() { /* Nonmatching */ - if(field_0x330->getPlayMode() == J3DFrameCtrl::EMode_NONE) { - if(field_0x330->checkFrame(field_0x330->getEndFrame() - 1.0f)) { + if(mpOrcaMorf->getPlayMode() == J3DFrameCtrl::EMode_NONE) { + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 1.0f)) { if(isAttackAnim() || isGuardAnim()) { setAnm(5, 4.0f, 0); } @@ -1933,7 +2095,99 @@ void daNpc_Ji1_c::dtParticleAT() { /* 00005A20-00005F30 .text startspeakAction__11daNpc_Ji1_cFPv */ BOOL daNpc_Ji1_c::startspeakAction(void*) { - /* Nonmatching */ + if(field_0xC78 == 0) { + if(!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderOtherEventId(this, mEventIdx[0]); + eventInfo.onCondition(dEvtCnd_UNK2_e); + return FALSE; + } + + dComIfGp_evmng_cutEnd(dComIfGp_evmng_getMyStaffId("Ji1")); + + if(dComIfGs_isEventBit(0x520)) { + if(field_0xD7B) { + mMsgNo = 0x9B5; + } + else if(!dComIfGs_isEventBit(0xF20)) { + switch(dComIfGs_getEventReg(0xD003)) { + case 0: + mMsgNo = 0x98B; + + break; + case 1: + mMsgNo = 0x98D; + + break; + case 2: + mMsgNo = 0x98F; + + break; + case 3: + mMsgNo = 0x991; + + break; + } + } + else { + mMsgNo = 0x993; + } + } + else { + mMsgNo = 0x969; + } + + field_0xC78++; + l_msgId = fpcM_ERROR_PROCESS_ID_e; + } + else if(field_0xC78 != -1) { + if(l_msgId == fpcM_ERROR_PROCESS_ID_e) { + l_msgId = fopMsgM_messageSet(mMsgNo, &eyePos); + setAnm(5, 4.0f, 0); + } + else { + if(field_0xC78 == 1) { + l_msg = fopMsgM_SearchByID(l_msgId); + if(l_msg) { + field_0xC78++; + } + } + else if(l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) { + l_msg->mStatus = next_msgStatus(&mMsgNo); + if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) { + fopMsgM_messageSet(mMsgNo); + } + } + else if(l_msg->mStatus == fopMsgStts_BOX_CLOSED_e) { + int staffIdx = dComIfGp_evmng_getMyStaffId("Ji1"); + if(staffIdx != -1) { + dComIfGp_evmng_cutEnd(staffIdx); + } + + if(dComIfGp_evmng_endCheck(mEventIdx[0])) { + l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e; + if(mMsgNo == 0x969) { + field_0xD70 = 0; + field_0xC94 = 0; + field_0xC98 = l_HIO.field_0x54[0]; + setAction(&daNpc_Ji1_c::teachAction, NULL); + } + else if(mMsgNo == 0x98C || mMsgNo == 0x98E || mMsgNo == 0x990 || mMsgNo == 0x992 || mMsgNo == 0x994) { + field_0xD70 = 0; + setAction(&daNpc_Ji1_c::battleAction, NULL); + } + else { + field_0xD70 = 0; + field_0xC94 = 0; + setAction(&daNpc_Ji1_c::teachSPRollCutAction, NULL); + } + + dComIfGp_event_reset(); + } + } + } + } + + return TRUE; } /* 00005F30-00006238 .text endspeakAction__11daNpc_Ji1_cFPv */ @@ -1943,7 +2197,7 @@ BOOL daNpc_Ji1_c::endspeakAction(void*) { if(field_0xC78 == 0) { if(!eventInfo.checkCommandDemoAccrpt()) { - fopAcM_orderOtherEventId(this, field_0xC54[2]); + fopAcM_orderOtherEventId(this, mEventIdx[2]); eventInfo.onCondition(dEvtCnd_UNK2_e); return false; @@ -1954,16 +2208,16 @@ BOOL daNpc_Ji1_c::endspeakAction(void*) { } if(dComIfGs_isEventBit(0x520)) { - field_0x2AC = 0x996; + mMsgNo = 0x996; } else if(dComIfGs_isEventBit(0x1)) { - field_0x2AC = 0x96D; + mMsgNo = 0x96D; } else if(!dComIfGs_isEventBit(0x2F40)) { - field_0x2AC = 0x950; + mMsgNo = 0x950; } else { - field_0x2AC = 0x954; + mMsgNo = 0x954; } field_0xC78 += 1; @@ -1971,7 +2225,7 @@ BOOL daNpc_Ji1_c::endspeakAction(void*) { } else if(field_0xC78 != -1) { if(l_msgId == -1) { - l_msgId = fopMsgM_messageSet(field_0x2AC, &eyePos); + l_msgId = fopMsgM_messageSet(mMsgNo, &eyePos); setAnm(5, 4.0f, 0); } else { @@ -1983,11 +2237,11 @@ BOOL daNpc_Ji1_c::endspeakAction(void*) { } else { if(l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) { - setAnimFromMsgNo(field_0x2AC); - l_msg->mStatus = next_msgStatus(&field_0x2AC); + setAnimFromMsgNo(mMsgNo); + l_msg->mStatus = next_msgStatus(&mMsgNo); if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) { - fopMsgM_messageSet(field_0x2AC); + fopMsgM_messageSet(mMsgNo); } } else if(l_msg->mStatus == fopMsgStts_BOX_CLOSED_e) { @@ -2004,74 +2258,734 @@ BOOL daNpc_Ji1_c::endspeakAction(void*) { /* 00006238-00006728 .text reiAction__11daNpc_Ji1_cFPv */ BOOL daNpc_Ji1_c::reiAction(void*) { - /* Nonmatching */ + int staffIdx = dComIfGp_evmng_getMyStaffId("Ji1"); + int actionNo = getEventActionNo(staffIdx); + + if(field_0xC78 == 0) { + if(actionNo == 1) { + dComIfGp_evmng_cutEnd(staffIdx); + return FALSE; + } + + if(actionNo == 2) { + initPos(0); + + if(dComIfGp_getMiniGameType() == 6) { + dComIfGp_endMiniGame(6); + } + if(dComIfGp_getMiniGameType() == 2) { + dComIfGp_endMiniGame(2); + } + + dComIfGp_evmng_cutEnd(staffIdx); + return FALSE; + } + + mDoAud_bgmStart(JA_BGM_HOUSE_G); + + if(dComIfGs_isEventBit(0x520)) { + if(field_0xD70 == 0) { + mMsgNo = 0x997; + } + else { + dComIfGp_setMessageCountNumber(field_0xD70); + mMsgNo = 0x999; + } + } + else if(dComIfGs_isEventBit(0x1)) { + mMsgNo = 0x96E; + } + else if(!dComIfGs_isEventBit(0x2F40)) { + dComIfGs_onEventBit(0x2F40); + mMsgNo = 0x951; + } + else { + mMsgNo = 0x955; + } + + field_0xC78++; + l_msgId = fpcM_ERROR_PROCESS_ID_e; + dComIfGp_onCameraAttentionStatus(0, 4); + } + else if(field_0xC78 != -1) { + if(l_msgId == fpcM_ERROR_PROCESS_ID_e) { + l_msgId = fopMsgM_messageSet(mMsgNo, &eyePos); + } + else { + if(field_0xC78 == 1) { + l_msg = fopMsgM_SearchByID(l_msgId); + if(l_msg) { + field_0xC78++; + } + } + else if(l_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) { + l_msg->mStatus = next_msgStatus(&mMsgNo); + if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) { + fopMsgM_messageSet(mMsgNo); + setAnimFromMsgNo(mMsgNo); + } + } + else if(l_msg->mStatus == fopMsgStts_BOX_CLOSING_e) { + if(actionNo == 3) { + dComIfGp_evmng_cutEnd(staffIdx); + } + } + else if(l_msg->mStatus == fopMsgStts_BOX_CLOSED_e) { + if(actionNo == 4) { + if(mAnimation == 0xC && mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { + dComIfGp_evmng_cutEnd(staffIdx); + setAnm(0, 0.0f, 0); + } + else { + if(mAnimation != 0xC) { + fopAcM_seStart(this, JA_SE_VS_JI_ENDING, NULL); + } + setAnm(0xC, 8.0f, 0); + } + } + else { + dComIfGp_evmng_cutEnd(staffIdx); + } + + if(dComIfGp_evmng_endCheck(mEventIdx[2])) { + l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e; + setAnm(0, 16.0f, 0); + setAction(&daNpc_Ji1_c::normalAction, NULL); + dComIfGp_event_reset(); + dComIfGp_offCameraAttentionStatus(0, 4); + field_0xD74 = 0; + } + } + } + } + + return TRUE; } /* 00006728-00006C1C .text plmoveAction__11daNpc_Ji1_cFPv */ BOOL daNpc_Ji1_c::plmoveAction(void*) { - /* Nonmatching */ + int staffIdx = dComIfGp_evmng_getMyStaffId("Ji1"); + int actionNo = getEventActionNo(staffIdx); + + if(field_0xC78 == 0) { + if(dComIfGp_evmng_startCheck(mEventIdx[4])) { + dComIfGp_evmng_cutEnd(staffIdx); + field_0xC78++; + } + else { + fopAcM_orderOtherEventId(this, mEventIdx[4]); + eventInfo.onCondition(dEvtCnd_UNK2_e); + } + } + else if(field_0xC78 != -1) { + if(mAnimation == 0xB) { + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 14.0f)) { + fopAcM_seStart(this, JA_SE_CM_JI_ATTACK, 0); + setParticle(3, 3.0f, 0.5f); + } + else { + if(mpOrcaMorf->getFrame() < mpOrcaMorf->getEndFrame() - 14.0f && mpOrcaMorf->getFrame() > 5.0f) { + current.pos.x -= cM_ssin(current.angle.y) * 8.0f; + current.pos.z -= cM_scos(current.angle.y) * 8.0f; + } + else if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { + setAnm(5, 4.0f, 0); + dComIfGp_evmng_cutEnd(staffIdx); + } + } + } + else { + if(mAnimation == 0xC && mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { + setAnm(0xB, 4.0f, 0); + mDoAud_bgmStart(JA_BGM_JI_TRAINING); + dComIfGp_evmng_cutEnd(staffIdx); + } + else if(actionNo == 2 && mAnimation != 0xC) { + setAnm(0xC, 8.0f, 0); + } + else if(actionNo == 1) { + dComIfGp_evmng_cutEnd(staffIdx); + field_0xD84 = 1; + + initPos(0); + + if(dComIfGs_isEventBit(0x520) && field_0xD7B == 0) { + dComIfGp_startMiniGame(6); + game_life_point = 3; + } + else if(field_0xD7B == 0) { + dComIfGp_startMiniGame(2); + } + } + } + + if(dComIfGp_evmng_endCheck(mEventIdx[4])) { + fopAcM_orderOtherEventId(this, mEventIdx[0]); + eventInfo.onCondition(dEvtCnd_UNK2_e); + setAction(&daNpc_Ji1_c::startspeakAction, NULL); + dComIfGp_event_reset(); + dtParticle(); + } + } + + return TRUE; } /* 00006C1C-00007140 .text teachMove__11daNpc_Ji1_cFf */ -void daNpc_Ji1_c::teachMove(f32 param_1) { - /* Nonmatching */ +BOOL daNpc_Ji1_c::teachMove(f32 param_1) { + daPy_py_c* player = daPy_getPlayerActorClass(); + + cXyz temp1 = home.pos - current.pos; + cXyz temp2 = player->current.pos - current.pos; + f32 temp6 = temp1.abs(); + f32 temp3 = temp2.abs(); + f32 temp4 = (player->current.pos - home.pos).abs(); + + cM_atan2s(temp1.x, temp1.z); + s16 temp5 = cM_atan2s(temp2.x, temp2.z); + BOOL temp13 = FALSE; + BOOL temp20 = FALSE; + cXyz temp8 = (home.pos * 0.3f) + (player->current.pos * 0.7f); + temp8.y = 0.0f; + + f32 temp10 = 150.0f; + if(field_0xD70 == 3 && !player->checkCutCharge()) { + temp10 = 280.0f; + } + + if(checkAction(&daNpc_Ji1_c::speakBadAction)) { + temp3 = 10.0f; + } + else { + if(temp3 > temp10) { + temp3 = (temp3 / temp10 - 1.0f) * 5.0f + 0.5f; + } + else { + temp3 = 2.5f; + temp8 = player->current.pos; + temp8.x -= temp10 * cM_ssin(temp5); + temp8.z -= temp10 * cM_scos(temp5); + } + } + + f32 temp12 = (temp8 - current.pos).absXZ(); + if(temp12 > 25.0f) { + cLib_addCalcPos2(¤t.pos, temp8, 0.1f, temp3 * param_1); + if(temp3 > 1.0f) { + temp13 = TRUE; + } + } + + if(abs((s16)(temp5 - current.angle.y)) > 0x1000) { + temp20 = TRUE; + } + cLib_addCalcAngleS2(¤t.angle.y, temp5, 8, 0x1000); + + if(temp20 == TRUE || temp13 == TRUE) { + if(!isGuardAnim() || mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { + setAnm(6, 4.0f, 0); + } + + if(mAnimation == 6) { + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x48 * param_1); + } + + return TRUE; + } + + return FALSE; } /* 00007140-00007424 .text teachSpRollCutMove__11daNpc_Ji1_cFf */ -BOOL daNpc_Ji1_c::teachSpRollCutMove(float) { - /* Nonmatching */ +BOOL daNpc_Ji1_c::teachSpRollCutMove(float param_1) { + fopAc_ac_c* player = dComIfGp_getPlayer(0); + cXyz temp = home.pos - current.pos; + cXyz temp2 = player->current.pos - current.pos; + f32 temp7 = temp.abs(); + f32 temp8 = temp2.abs(); + f32 temp9 = (player->current.pos - home.pos).abs(); + + s16 temp6 = cM_atan2s(temp.x, temp.z); + s16 temp4 = cM_atan2s(temp2.x, temp2.z); + BOOL temp5 = FALSE; + if(abs((s16)(temp4 - current.angle.y)) > 0x1000) { + temp5 = TRUE; + } + cLib_addCalcAngleS2(¤t.angle.y, temp4, 8, 0x1000); + if(temp5 == TRUE) { + if(!isGuardAnim() || mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { + setAnm(6, 4.0f, 0); + } + + if(mAnimation == 6) { + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x48 * param_1); + } + + return TRUE; + } + + return FALSE; } /* 00007424-000074B0 .text calcCoCorrectValue__11daNpc_Ji1_cFv */ -void daNpc_Ji1_c::calcCoCorrectValue() { - /* Nonmatching */ +f32 daNpc_Ji1_c::calcCoCorrectValue() { + cXyz temp(cM_ssin(current.angle.y), 0.0f, cM_scos(current.angle.y)); + field_0xC4C += field_0x638.GetCCMoveP()->getDotProduct(temp); + return field_0xC4C; } /* 000074B0-00007548 .text calcBgCorrectValue__11daNpc_Ji1_cFv */ -void daNpc_Ji1_c::calcBgCorrectValue() { - /* Nonmatching */ +f32 daNpc_Ji1_c::calcBgCorrectValue() { + cXyz temp(cM_ssin(current.angle.y), 0.0f, cM_scos(current.angle.y)); + if(mAcch.ChkWallHit()) { + field_0xC50 += field_0xC40.getDotProduct(temp); + } + + return field_0xC50; } /* 00007548-00007A80 .text MoveToPlayer__11daNpc_Ji1_cFfUc */ -BOOL daNpc_Ji1_c::MoveToPlayer(f32, u8) { - /* Nonmatching */ +BOOL daNpc_Ji1_c::MoveToPlayer(f32 param_1, u8 param_2) { + daPy_py_c* player = daPy_getPlayerActorClass(); + + cXyz temp = player->current.pos - current.pos; + f32 temp2 = temp.absXZ(); + + s16 temp3 = cM_atan2s(temp.x, temp.z); + + BOOL temp13 = FALSE; + BOOL temp5 = FALSE; + + if(calcCoCorrectValue() < -200.0f) { + if(mAnimation != 0xE) { + setAnm(0xE, 4.0f, 0); + fopAcM_seStart(this, JA_SE_CV_JI_ATTACK, 0); + } + + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { + field_0xC4C = 0; + field_0xC2C = 0x14; + field_0x910.SetC(current.pos); + dComIfG_Ccsp()->Set(&field_0x910); + dComIfGp_getVibration().StartShock(5, -0x11, cXyz(0.0f, 1.0f, 0.0f)); + } + + return TRUE; + } + if(calcBgCorrectValue() < -200.0f) { + if(mAnimation != 0xE) { + setAnm(0xE, 4.0f, 0); + fopAcM_seStart(this, JA_SE_CV_JI_ATTACK, 0); + } + + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { + field_0xC50 = 0; + return FALSE; + } + + return TRUE; + } + + if(field_0xC2C > 0) { + field_0xC2C--; + return TRUE; + } + + if(temp2 > param_1) { + cXyz temp = player->current.pos; + temp2 = (temp2 / param_1 - 1.0f) * 12.0f + 2.0f; + temp.x -= param_1 * cM_ssin(temp3); + temp.z -= param_1 * cM_scos(temp3); + + f32 temp12 = (temp - current.pos).absXZ(); + if(temp12 > 25.0f) { + cLib_addCalcPos2(¤t.pos, temp, 0.1f, temp2); + if(temp2 > 1.0f) { + temp13 = TRUE; + } + } + } + + if(abs((s16)(temp3 - current.angle.y)) > 0x1000) { + temp5 = TRUE; + } + cLib_addCalcAngleS2(¤t.angle.y, temp3, 8, 0x1000); + if(temp5 == TRUE || temp13 == TRUE) { + if(mAnimation != 6 || mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { + setAnm(6, 4.0f, 0); + } + + if(mAnimation == 6) { + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x48); + } + + return TRUE; + } + + return FALSE; } /* 00007A80-00007B14 .text teachSubActionAttackInit__11daNpc_Ji1_cFv */ void daNpc_Ji1_c::teachSubActionAttackInit() { - /* Nonmatching */ - setAnm(0x7, 0.0f, 0); - field_0x330->setPlaySpeed(0.4f); + mpOrcaMorf->setPlaySpeed(0.4f); fopAcM_seStart(this, JA_SE_CV_JI_ATTACK, 0); } /* 00007B14-00007D2C .text teachSubActionAttack__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::teachSubActionAttack() { - /* Nonmatching */ + s16 target = cLib_targetAngleY(¤t.pos, &dComIfGp_getPlayer(0)->current.pos); + f32 frame = mpOrcaMorf->getFrame(); + field_0x29C = 0.0f; + field_0x2A0 = 12.0f; + field_0x298 = 300.0f; + field_0x2A8 = 2; + field_0x2A4 = frame; + + if(!field_0xA40.ChkAtShieldHit() && field_0xA40.ChkAtHit()) { + field_0xA40.ClrAtHit(); + } + + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 1.0f)) { + setAnm(5, 4.0f, 0); + + return FALSE; + } + + if(mpOrcaMorf->checkFrame(10.0f)) { + mpOrcaMorf->setPlaySpeed(2.0f); + } + + if(frame > 12.0f && frame < 28.0f) { + cXyz temp = field_0xD38; + temp.x += cM_ssin(current.angle.y) * 40.0f; + temp.z += cM_scos(current.angle.y) * 40.0f; + cLib_addCalcPos2(¤t.pos, temp, 0.25f, 20.0f); + } + else if(frame < 12.0f) { + cLib_addCalcAngleS2(¤t.angle.y, target, 4, 0x200); + field_0xD38 = current.pos; + } + + return TRUE; } /* 00007D2C-00007D8C .text teachSubActionJumpInit__11daNpc_Ji1_cFv */ void daNpc_Ji1_c::teachSubActionJumpInit() { setAnm(0xB, 0.0f, 1); - field_0xC9C = 0; + field_0xC9C = 0.0f; field_0xD38 = current.pos; } /* 00007D8C-00007F14 .text teachSubActionJump__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::teachSubActionJump() { - /* Nonmatching */ + cXyz temp = dComIfGp_getPlayer(0)->current.pos - current.pos; + s16 temp2 = cM_atan2s(temp.x, temp.z); + cLib_addCalc2(&field_0xC9C, 120.0f, 0.25, 50.0f); + cLib_addCalcAngleS2(¤t.angle.y, temp2, 4, 0x1000); + cXyz temp3 = field_0xD38; + temp3.x -= field_0xC9C * cM_ssin(current.angle.y); + temp3.z -= field_0xC9C * cM_scos(current.angle.y); + float temp4 = 25.0f; + if(mAcch.ChkWallHit()) { + temp4 = 10.0f; + } + + cLib_addCalcPosXZ(¤t.pos, temp3, 0.8f, temp4, 1.0f); + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 10.0f)) { + setParticle(3, 3.0f, 0.5f); + } + + return TRUE; } /* 00007F14-00009070 .text teachAction__11daNpc_Ji1_cFPv */ BOOL daNpc_Ji1_c::teachAction(void*) { - /* Nonmatching */ + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + + if(field_0xC78 == 0) { + setAnm(5, 0.0f, 0); + cLib_onBit(attention_info.flags, fopAc_Attn_LOCKON_MISC_e); + field_0xC90 = 0; + field_0xD34 = 0; + if(field_0xD70 == 4) { + field_0xC30 = 90; + } + else { + field_0xC30 = 0; + } + + field_0xC78++; + } + else if(field_0xC78 != -1) { + if(!dComIfGs_isEventBit(0x2F10) && daNpc_Ji1_plRoomOutCheck()) { + field_0xC84 = 9; + setAction(&daNpc_Ji1_c::eventAction, 0); + field_0x2C8 = &daNpc_Ji1_c::teachAction; + + return true; + } + + cXyz temp = player->current.pos - current.pos; + cM_atan2s(temp.x, temp.z); + f32 what = temp.absXZ(); + + if(checkCutType(player->getCutType(), field_0xD70)) { + field_0x7E0.OffTgShield(); + } + else { + field_0x7E0.OnTgShield(); + } + + + if(field_0x7E0.ChkTgHit() && field_0xD6C != 1) { + switch(field_0xC24) { + case 0xF: + teachSubActionJumpInit(); + break; + case 1: + case 6: + case 8: + case 9: + setAnm(8, 0.0f, 1); + break; + case 10: + setAnm(10, 0.0f, 1); + field_0xC9C = 0.0f; + field_0xD38 = current.pos; + break; + default: + setAnm(9, 0.0f, 1); + } + + if(checkCutType(field_0xC24, field_0xD70)) { + setHitParticle(0, 0x4833); + field_0xC9C = 0.0f; + field_0xD38 = current.pos; + setParticle(0x10, 1.0f, 0.1f); + + u32 status; + + if(field_0xD70 < 3) { + status = l_HIO.field_0x54[field_0xD70] - field_0xC98 + 1; + } + else if(field_0xD70 < 5) { + if(field_0xC98 == 2) { + status = 1; + } + else { + status = 9; + } + } + else if(field_0xC98 == 2) { + status = 1; + } + else { + status = 0xA; + } + + if(field_0xC98 > 0) { + mDoAud_changeBgmStatus(status); + } + } + else { + setGuardParticle(); + } + + field_0xD6C = 1; + field_0xC8C = field_0xC24; + } + + if(field_0xD6C == 1) { + if((!player->getCutAtFlg() || mpOrcaMorf->getFrame() > mpOrcaMorf->getEndFrame() - 2.0f) && field_0xC90 == 0) { + if(checkCutType(field_0xC8C, field_0xD70)) { + if(--field_0xC98 > 0) { + if(field_0xC94 == 0 && field_0xC98 > 0 && field_0xD34 == 0) { + if(field_0xC8C != 9) { + fopAcM_orderOtherEventId(this, mEventIdx[1]); + eventInfo.onCondition(dEvtCnd_UNK2_e); + field_0xC90 = 1; + } + else { + field_0xD34 = 1; + } + } + else { + field_0xC90 = 0; + field_0xD6C = 0; + } + } + else if(field_0xC8C != 9 && field_0xD34 == 0) { + if(field_0xD70 >= 5 || (field_0xD70 >= 2 && !dComIfGs_isEventBit(1))) { + if(dComIfGs_isEventBit(1) && dComIfGs_isEventBit(0x2F10) == 0) { + field_0xC84 = 0xF; + fopAcM_orderOtherEventId(this, mEventIdx[field_0xC84]); + } + else { + fopAcM_orderOtherEventId(this, mEventIdx[2]); + } + } + else { + fopAcM_orderOtherEventId(this, mEventIdx[1]); + } + + eventInfo.onCondition(dEvtCnd_UNK2_e); + field_0xC90 = 3; + } + else { + field_0xD34 = 3; + } + } + else if(field_0xC8C != 9 && field_0xD34 == 0) { + fopAcM_orderOtherEventId(this, mEventIdx[3]); + eventInfo.onCondition(dEvtCnd_UNK2_e); + field_0xC90 = 2; + } + else { + field_0xD34 = 2; + } + } + + if(mAnimation == 0xA && checkCutType(field_0xC8C, field_0xD70)) { + if(field_0xC98 == 0) { + cLib_addCalc2(&field_0xC9C, l_HIO.field_0x34 * 2.0f, 0.25f, l_HIO.field_0x38); + } + else { + cLib_addCalc2(&field_0xC9C, l_HIO.field_0x34, 0.25f, l_HIO.field_0x38); + } + cXyz temp(field_0xD38); + temp.x -= field_0xC9C * cM_ssin(current.angle.y); + temp.z -= field_0xC9C * cM_scos(current.angle.y); + + f32 temp2 = 45.0f; + if(mAcch.ChkWallHit()) { + temp2 = 10.0f; + } + + cLib_addCalcPos2(¤t.pos, temp, 0.8f, temp2); + fopAcM_seStart(this, JA_SE_CM_JI_SLIP, 0); + } + else if(mAnimation == 0xB && checkCutType(field_0xC8C, field_0xD70)) { + teachSubActionJump(); + } + else if(mAnimation != 5 && mAnimation != 6 && checkCutType(field_0xC8C, field_0xD70)) { + cLib_addCalc2(&field_0xC9C, l_HIO.field_0x3C, 0.25f, l_HIO.field_0x40); + cXyz temp = field_0xD38; + temp.x -= field_0xC9C * cM_ssin(current.angle.y); + temp.z -= field_0xC9C * cM_scos(current.angle.y); + cLib_addCalcPos2(¤t.pos, temp, 0.8f, 45.0f); + } + + if(mpOrcaMorf->getFrame() > mpOrcaMorf->getEndFrame() - 2.0f) { + field_0x6B0.OffTgShield(); + field_0x7E0.OnTgShield(); + + if(field_0xC8C != 9) { + if(field_0xC90 == 1 || field_0xC90 == 3) { + field_0xD6C = 0; + field_0xC9C = 0.0f; + field_0xD38 = current.pos; + + + if((field_0xD70 >= 5 || (field_0xD70 >= 2 && !dComIfGs_isEventBit(1))) && field_0xC90 == 3) { + if(dComIfGs_isEventBit(1) && dComIfGs_isEventBit(0x2F10) == 0) { + dComIfGs_onEventBit(0x2F10); + field_0xD7C = 1; + field_0xC84 = 0xF; + setAction(&daNpc_Ji1_c::eventAction, NULL); + field_0x2C8 = &daNpc_Ji1_c::normalAction; + } + else { + setAction(&daNpc_Ji1_c::endspeakAction, NULL); + } + } + else { + + setAction(&daNpc_Ji1_c::speakAction, NULL); + } + } + else if(field_0xC90 == 2) { + field_0xD6C = 0; + field_0xC9C = 0.0f; + field_0xD38 = current.pos; + field_0xC4C = 0; + field_0xC50 = 0; + field_0xC2C = 0; + setAction(&daNpc_Ji1_c::speakBadAction, NULL); + } + else { + field_0xC90 = 0; + field_0xD6C = 0; + field_0xC9C = 0.0f; + field_0xD38 = current.pos; + } + } + else { + field_0xC90 = 0; + field_0xD6C = 0; + field_0xC9C = 0.0f; + field_0xD38 = current.pos; + } + } + } + else if(field_0xD70 == 4) { + if(mAnimation == 7) { + teachSubActionAttack(); + } + else if(field_0xC30-- < 0) { + field_0xC30 = 90; + teachSubActionAttackInit(); + } + else if(!teachMove(1.0f)) { + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { + setAnm(5, 4.0f, 0); + } + } + } + else if(!teachMove(1.0f)) { + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { + setAnm(5, 4.0f, 0); + } + } + + + if(field_0xD6C != 1) { + dtParticle(); + } + if(field_0xD6C != 1 && isGuardAnim()) { + if(mpOrcaMorf->getFrame() > mpOrcaMorf->getEndFrame() - 2.0f) { + setAnm(5, 4.0f, 0); + } + } + + if(!player->getCutAtFlg() && field_0xD34) { + field_0xD6C = 0; + field_0xC9C = 0.0f; + field_0xD38 = current.pos; + + if(field_0xD34 == 1) { + field_0xC90 = 1; + setAction(&daNpc_Ji1_c::speakAction, NULL); + } + else if(field_0xD34 == 3) { + field_0xC90 = 3; + setAction(&daNpc_Ji1_c::speakAction, NULL); + } + else if(field_0xD34 == 2) { + field_0xC90 = 2; + field_0xC2C = 0; + field_0xC4C = 0; + field_0xC50 = 0; + setAction(&daNpc_Ji1_c::speakBadAction, NULL); + } + } + } + + return true; } /* 00009070-00009B64 .text teachSPRollCutAction__11daNpc_Ji1_cFPv */ BOOL daNpc_Ji1_c::teachSPRollCutAction(void*) { - /* Nonmatching */ - daPy_py_c* player = daPy_getPlayerActorClass(); if(field_0xC78 == 0) { @@ -2109,7 +3023,7 @@ BOOL daNpc_Ji1_c::teachSPRollCutAction(void*) { field_0xC84 = 10; setAction(&daNpc_Ji1_c::eventAction, 0); - field_0x2C8 = &daNpc_Ji1_c::teachSPRollCutAction; + field_0x2C8 = &daNpc_Ji1_c::normalAction; return TRUE; } @@ -2135,7 +3049,7 @@ BOOL daNpc_Ji1_c::teachSPRollCutAction(void*) { break; case 10: setAnm(10, 0.0f, 1); - field_0xC9C = 0; + field_0xC9C = 0.0f; field_0xD38 = current.pos; break; default: @@ -2144,7 +3058,7 @@ BOOL daNpc_Ji1_c::teachSPRollCutAction(void*) { if(field_0xC24 == 9) { setHitParticle(0, 0x4833); - field_0xC9C = 0; + field_0xC9C = 0.0f; field_0xD38 = current.pos; setParticle(0x10, 1.0f, 0.1f); } @@ -2157,7 +3071,7 @@ BOOL daNpc_Ji1_c::teachSPRollCutAction(void*) { } if(field_0xD6C == 1) { - if(!player->getCutAtFlg() || field_0x330->getFrame() > field_0x330->getEndFrame() - 2.0f) { + if(!player->getCutAtFlg() || mpOrcaMorf->getFrame() > mpOrcaMorf->getEndFrame() - 2.0f) { if(field_0xC90 == 0) { if(field_0xC8C == 9) { field_0xC84 = 0xA; @@ -2169,13 +3083,13 @@ BOOL daNpc_Ji1_c::teachSPRollCutAction(void*) { return true; } - fopAcM_orderOtherEventId(this, field_0xC54[3]); + fopAcM_orderOtherEventId(this, mEventIdx[3]); eventInfo.onCondition(dEvtCnd_UNK2_e); field_0xC90 = 2; } } - if(field_0xD64 == 10 && field_0xC8C == 9) { + if(mAnimation == 10 && field_0xC8C == 9) { cLib_addCalc2(&field_0xC9C, l_HIO.field_0x34 * 2.0f, 0.25f, l_HIO.field_0x38); cXyz temp(field_0xD38); temp.x -= field_0xC9C * cM_ssin(current.angle.y); @@ -2190,7 +3104,7 @@ BOOL daNpc_Ji1_c::teachSPRollCutAction(void*) { fopAcM_seStart(this, JA_SE_CM_JI_SLIP, 0); } - if(field_0x330->getFrame() > field_0x330->getEndFrame() - 2.0f) { + if(mpOrcaMorf->getFrame() > mpOrcaMorf->getEndFrame() - 2.0f) { field_0x6B0.OffTgShield(); field_0x7E0.OnTgShield(); if(field_0xC90 == 2) { @@ -2216,7 +3130,7 @@ BOOL daNpc_Ji1_c::teachSPRollCutAction(void*) { } else { if(!teachSpRollCutMove(1.0f)) { - if(field_0x330->checkFrame(field_0x330->getEndFrame() - 2.0f)) { + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { setAnm(5, 4.0f, 0); } } @@ -2226,7 +3140,7 @@ BOOL daNpc_Ji1_c::teachSPRollCutAction(void*) { dtParticle(); } if(field_0xD6C != 1 && isGuardAnim()) { - if(field_0x330->getFrame() > field_0x330->getEndFrame() - 2.0f) { + if(mpOrcaMorf->getFrame() > mpOrcaMorf->getEndFrame() - 2.0f) { setAnm(5, 4.0f, 0); } } @@ -2237,33 +3151,130 @@ BOOL daNpc_Ji1_c::teachSPRollCutAction(void*) { } /* 00009B64-00009B7C .text playerCutAtCheck__Fv */ -static bool playerCutAtCheck() { - /* Nonmatching */ - +static u32 playerCutAtCheck() { return daPy_getPlayerActorClass()->getCutAtFlg(); } /* 00009B7C-00009F1C .text battleGameSetTimer__11daNpc_Ji1_cFv */ void daNpc_Ji1_c::battleGameSetTimer() { - /* Nonmatching */ + f32 temp1; + f32 temp2; + + if(field_0xD70 < l_HIO.field_0x60[0]) { + f32 temp = (float)field_0xD70 / l_HIO.field_0x60[0]; + temp2 = temp * l_HIO.field_0x8E + (1.0f - temp) * l_HIO.field_0x8A; + temp1 = temp * l_HIO.field_0x9A + (1.0f - temp) * l_HIO.field_0x96; + } + else if(field_0xD70 < l_HIO.field_0x60[1]) { + f32 temp = (float)(field_0xD70 - l_HIO.field_0x60[0]) / (l_HIO.field_0x60[1] - l_HIO.field_0x60[0]); + temp2 = temp * l_HIO.field_0x90 + (1.0f - temp) * l_HIO.field_0x8C; + temp1 = temp * l_HIO.field_0x9C + (1.0f - temp) * l_HIO.field_0x98; + } + else if(field_0xD70 < l_HIO.field_0x60[2]) { + f32 temp = (float)(field_0xD70 - l_HIO.field_0x60[1]) / (l_HIO.field_0x60[2] - l_HIO.field_0x60[1]); + temp2 = temp * l_HIO.field_0x92 + (1.0f - temp) * l_HIO.field_0x8E; + temp1 = temp * l_HIO.field_0x9E + (1.0f - temp) * l_HIO.field_0x9A; + } + else if(field_0xD70 < l_HIO.field_0x60[3]) { + f32 temp = (float)(field_0xD70 - l_HIO.field_0x60[2]) / (l_HIO.field_0x60[3] - l_HIO.field_0x60[2]); + temp2 = temp * l_HIO.field_0x94 + (1.0f - temp) * l_HIO.field_0x8C; + temp1 = temp * l_HIO.field_0xA0 + (1.0f - temp) * l_HIO.field_0x98; + } + + field_0xC30 = temp2 + cM_rndF(temp1); } /* 00009F1C-0000A400 .text battleMove__11daNpc_Ji1_cFf */ -void daNpc_Ji1_c::battleMove(f32) { - /* Nonmatching */ +BOOL daNpc_Ji1_c::battleMove(f32 param_1) { + daPy_py_c* player = daPy_getPlayerActorClass(); + + cXyz temp1 = home.pos - current.pos; + cXyz temp2 = player->current.pos - current.pos; + f32 temp6 = temp1.abs(); + f32 temp3 = temp2.abs(); + f32 temp4 = (player->current.pos - home.pos).abs(); + + cM_atan2s(temp1.x, temp1.z); + s16 temp5 = cM_atan2s(temp2.x, temp2.z); + BOOL temp13 = FALSE; + BOOL temp20 = FALSE; + cXyz temp8 = (home.pos * 0.3f) + (player->current.pos * 0.7f); + temp8.y = 0.0f; + + if(checkAction(&daNpc_Ji1_c::speakBadAction)) { + temp3 = 10.0f; + } + else { + if(temp3 > 150.0f) { + temp3 = (temp3 / 150.0f - 1.0f) * 5.0f + 0.5f; + } + else { + temp3 = 2.5f; + temp8 = player->current.pos; + temp8.x -= 150.0f * cM_ssin(temp5); + temp8.z -= 150.0f * cM_scos(temp5); + } + } + + if((temp8 - current.pos).absXZ() > 25.0f) { + cLib_addCalcPos2(¤t.pos, temp8, 0.1f, temp3 * param_1); + if(temp3 > 1.0f) { + temp13 = TRUE; + } + } + + if(abs((s16)(temp5 - current.angle.y)) > 0x1000) { + temp20 = TRUE; + } + cLib_addCalcAngleS2(¤t.angle.y, temp5, 8, 0x1000); + + if(temp20 == TRUE || temp13 == TRUE) { + if(mAnimation == 5 || mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { + setAnm(6, 4.0f, 0); + } + + if(mAnimation == 6) { + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x48 * param_1); + } + + return TRUE; + } + + return FALSE; } /* 0000A400-0000A430 .text battleSubActionWaitInit__11daNpc_Ji1_cFv */ void daNpc_Ji1_c::battleSubActionWaitInit() { - /* Nonmatching */ - - field_0xC9C = 0; + field_0xC9C = 0.0f; setSubAction(&daNpc_Ji1_c::battleSubActionWait); } /* 0000A430-0000A564 .text battleSubActionWait__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::battleSubActionWait() { - /* Nonmatching */ + if(--field_0xC30 < 0) { + f32 dist = fopAcM_searchActorDistanceXZ(this, dComIfGp_getPlayer(0)); + f32 rnd = cM_rndF(10.0f); + + if(rnd > 3.3f || dist > 100.0f) { + if(rnd > 6.6f || dist < 150.0f) { + battleSubActionYokoAttackInit(); + } + else { + battleSubActionTateAttackInit(); + } + } + else { + battleSubActionAttackInit(); + } + + battleGameSetTimer(); + } + + if(battleMove(1.5f) == FALSE && mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 2.0f)) { + setAnm(5, 4.0f, 0); + } + + return TRUE; } /* 0000A564-0000A5FC .text battleSubActionNockBackInit__11daNpc_Ji1_cFi */ @@ -2272,56 +3283,177 @@ void daNpc_Ji1_c::battleSubActionNockBackInit(int param_1) { setGuardParticle(); } - field_0xC9C = 0; + field_0xC9C = 0.0f; field_0xD38 = current.pos; - field_0x330->setPlaySpeed(-1.0f); + mpOrcaMorf->setPlaySpeed(-1.0f); setSubAction(&daNpc_Ji1_c::battleSubActionNockBack); field_0x2A4 = 30.0f; } /* 0000A5FC-0000A744 .text battleSubActionNockBack__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::battleSubActionNockBack() { - /* Nonmatching */ + /* Nonmatching - load order */ + fopAc_ac_c* player = dComIfGp_getPlayer(0); // doing this in the targetAngleY call fixes load order but breaks regalloc + s16 temp = cLib_targetAngleY(¤t.pos, &player->current.pos); + if(mpOrcaMorf->checkFrame(1.0f)) { + setAnm(5, 4.0f, 0); + field_0xC9C = 0.0f; + field_0xD38 = current.pos; + field_0xD6C = 0; + battleSubActionWaitInit(); + + return FALSE; + } + + cLib_addCalc2(&field_0xC9C, 50.0f, 0.2f, 10.0f); + cXyz temp2 = field_0xD38; + temp2.x -= field_0xC9C * cM_ssin(temp); + temp2.z -= field_0xC9C * cM_scos(temp); + cLib_addCalcPosXZ2(¤t.pos, temp2, 0.25f, 5.0f); + + return TRUE; } /* 0000A744-0000A808 .text battleSubActionAttackInit__11daNpc_Ji1_cFv */ void daNpc_Ji1_c::battleSubActionAttackInit() { - /* Nonmatching */ - setAnm(0x7, 0.0f, 0); - field_0x330->setPlaySpeed(l_HIO.field_0x6C); + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x6C); fopAcM_seStart(this, JA_SE_CV_JI_ATTACK, 0); field_0xC34 = 0; - setSubAction(&daNpc_Ji1_c::battleSubActionYokoAttack); + setSubAction(&daNpc_Ji1_c::battleSubActionAttack); } /* 0000A808-0000AAA4 .text battleSubActionAttack__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::battleSubActionAttack() { - /* Nonmatching */ + s16 temp = cLib_targetAngleY(¤t.pos, &dComIfGp_getPlayer(0)->current.pos); + f32 frame = mpOrcaMorf->getFrame(); + field_0x29C = 0.0f; + field_0x2A0 = 12.0f; + field_0x298 = 500.0f; + field_0x2A8 = 2; + field_0x2A4 = frame; + + if(isAttackFrame() <= 0) { + field_0x7E0.OnTgShield(); + } + + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 1.0f)) { + setAnm(5, 4.0f, 0); + battleSubActionWaitInit(); + + return FALSE; + } + + if(cLib_calcTimer(&field_0xC34) > 0) { + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x84); + field_0xBA4 = field_0xC34 * 0x2800; + field_0xBA2 = field_0xC34 * 0x100; + } + else { + if(mpOrcaMorf->getFrame() > 10.0f) { + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x70); + } + else { + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x6C); + + if(field_0x7E0.ChkTgShieldHit()) { + setGuardParticle(); + field_0xC34 = l_HIO.field_0x88; + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x84); + } + } + } + + if(frame > 12.0f && frame < 28.0f) { + cXyz temp2 = field_0xD38; + temp2.x += cM_ssin(current.angle.y) * 100.0f; + temp2.z += cM_scos(current.angle.y) * 100.0f; + battleAtSet(); + cLib_addCalcPos2(¤t.pos, temp2, 0.25f, 20.0f); + } + else if(frame <= 12.0f) { + cLib_addCalcAngleS2(¤t.angle.y, temp, 4, 0x800); + field_0xD38 = current.pos; + } + + return TRUE; } /* 0000AAA4-0000AB68 .text battleSubActionTateAttackInit__11daNpc_Ji1_cFv */ void daNpc_Ji1_c::battleSubActionTateAttackInit() { - /* Nonmatching */ - setAnm(0x13, 0.0f, 0); - field_0x330->setPlaySpeed(l_HIO.field_0x78); + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x78); fopAcM_seStart(this, JA_SE_CV_JI_ATTACK, 0); field_0xC34 = 0; - setSubAction(&daNpc_Ji1_c::battleSubActionYokoAttack); + setSubAction(&daNpc_Ji1_c::battleSubActionTateAttack); } /* 0000AB68-0000AE2C .text battleSubActionTateAttack__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::battleSubActionTateAttack() { - /* Nonmatching */ + s16 temp = cLib_targetAngleY(¤t.pos, &dComIfGp_getPlayer(0)->current.pos); + f32 frame = mpOrcaMorf->getFrame(); + field_0x29C = 5.0f; + field_0x2A0 = 20.0f; + field_0x298 = 500.0f; + field_0x2A8 = 2; + field_0x2A4 = frame; + + if(isAttackFrame() <= 0) { + field_0x7E0.OnTgShield(); + } + + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 1.0f)) { + setAnm(5, 4.0f, 0); + battleSubActionWaitInit(); + + return FALSE; + } + + if(cLib_calcTimer(&field_0xC34) > 0) { + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x84); + field_0xBA4 = field_0xC34 * 0x2800; + field_0xBA2 = field_0xC34 * 0x100; + } + else { + if(mpOrcaMorf->getFrame() > 26.0f) { + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x74); + } + else { + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x78); + + if(field_0x7E0.ChkTgShieldHit()) { + setGuardParticle(); + field_0xC34 = l_HIO.field_0x88; + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x84); + } + } + } + + if(frame > 28.0f && frame < 35.0f) { + battleAtSet(); + field_0x320 = field_0xB78; + field_0x320.y = 0.0f; + } + else if(frame < 23.0f) { + cLib_addCalcAngleS2(¤t.angle.y, temp, 4, 0x400); + field_0xD38 = current.pos; + } + + if(mpOrcaMorf->checkFrame(35.0f)) { + setParticleAT(1, 10.0f, 0.5f); + fopAcM_seStart(this, JA_SE_CM_JI_SWING, NULL); + } + else if(mpOrcaMorf->checkFrame(40.0f)) { + dtParticleAT(); + } + + return TRUE; } /* 0000AE2C-0000AEF0 .text battleSubActionYokoAttackInit__11daNpc_Ji1_cFv */ void daNpc_Ji1_c::battleSubActionYokoAttackInit() { - /* Nonmatching */ - setAnm(0x14, 0.0f, 0); - field_0x330->setPlaySpeed(l_HIO.field_0x80); + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x80); fopAcM_seStart(this, JA_SE_CV_JI_ATTACK, 0); field_0xC34 = 0; setSubAction(&daNpc_Ji1_c::battleSubActionYokoAttack); @@ -2329,60 +3461,219 @@ void daNpc_Ji1_c::battleSubActionYokoAttackInit() { /* 0000AEF0-0000B254 .text battleSubActionYokoAttack__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::battleSubActionYokoAttack() { - /* Nonmatching */ + s16 temp = cLib_targetAngleY(¤t.pos, &dComIfGp_getPlayer(0)->current.pos); + f32 frame = mpOrcaMorf->getFrame(); + field_0x29C = 0.0f; + field_0x2A0 = 20.0f; + field_0x298 = 500.0f; + field_0x2A8 = 1; + field_0x2A4 = frame; + + if(isAttackFrame() <= 0) { + field_0x7E0.OnTgShield(); + } + + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 1.0f)) { + setAnm(5, 4.0f, 0); + battleSubActionWaitInit(); + + return FALSE; + } + + if(cLib_calcTimer(&field_0xC34) > 0) { + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x84); + field_0xBA4 = field_0xC34 * 0x2800; + field_0xBA2 = field_0xC34 * 0x100; + } + else { + if(mpOrcaMorf->getFrame() > 25.0f) { + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x74); + } + else { + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x78); + + if(field_0x7E0.ChkTgShieldHit()) { + setGuardParticle(); + field_0xC34 = l_HIO.field_0x88; + mpOrcaMorf->setPlaySpeed(l_HIO.field_0x84); + } + } + } + + if(frame > 25.0f && frame < 35.0f) { + battleAtSet(); + field_0x32C -= 0x1400; + field_0x320 = current.pos; + field_0x320.x += cM_ssin(field_0x32C) * 200.0f; + field_0x320.z += cM_scos(field_0x32C) * 200.0f; + } + else if(frame < 15.0f) { + cLib_addCalcAngleS2(¤t.angle.y, temp, 4, 0x600); + field_0xD38 = current.pos; + } + + if(mpOrcaMorf->checkFrame(25.0f)) { + field_0x320 = field_0xB78; + field_0x320.y = 0.0f; + field_0x32C = cLib_targetAngleY(¤t.pos, &field_0x320); + fopAcM_seStart(this, JA_SE_CM_JI_SWING, NULL); + setParticleAT(0xF, 10.0f, 0.5f); + } + else if(mpOrcaMorf->checkFrame(40.0f)) { + dtParticleAT(); + } + + return TRUE; } /* 0000B254-0000B2D4 .text battleSubActionJumpInit__11daNpc_Ji1_cFv */ void daNpc_Ji1_c::battleSubActionJumpInit() { - /* Nonmatching */ - setAnm(0xB, 0.0f, 1); - field_0xC9C = 0; + field_0xC9C = 0.0f; field_0xD38 = current.pos; setSubAction(&daNpc_Ji1_c::battleSubActionJump); } /* 0000B2D4-0000B5EC .text battleSubActionJump__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::battleSubActionJump() { - /* Nonmatching */ + cXyz temp = dComIfGp_getPlayer(0)->current.pos - current.pos; + s16 temp2 = cM_atan2s(temp.x, temp.z); + + if(mAnimation == 0xA) { + cLib_addCalc2(&field_0xC9C, 50.0f, 0.25f, 50.0f); + cLib_addCalcAngleS2(¤t.angle.y, temp2, 4, 0x1000); + + cXyz temp3 = field_0xD38; + temp3.x -= field_0xC9C * cM_ssin(current.angle.y); + temp3.z -= field_0xC9C * cM_scos(current.angle.y); + + cLib_addCalcPosXZ(¤t.pos, temp3, 0.8f, 10.0f, 1.0f); + + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 1.0f)) { + field_0xD6C = 0; + field_0xC9C = 0.0f; + field_0xD38 = current.pos; + setAnm(5, 4.0f, 0); + battleSubActionWaitInit(); + } + } + else { + cLib_addCalc2(&field_0xC9C, 180.0f, 0.25f, 50.0f); + cLib_addCalcAngleS2(¤t.angle.y, temp2, 4, 0x1000); + + cXyz temp3 = field_0xD38; + temp3.x -= field_0xC9C * cM_ssin(current.angle.y); + temp3.z -= field_0xC9C * cM_scos(current.angle.y); + + f32 temp4 = 25.0f; + if(mAcch.ChkWallHit()) { + temp4 = 10.0f; + } + + cLib_addCalcPosXZ(¤t.pos, temp3, 0.8f, temp4, 1.0f); + + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 10.0f)) { + field_0xC9C = 0.0f; + field_0xD38 = current.pos; + setAnm(0xA, 0.0f, 0); + mpOrcaMorf->setStartFrame(0.0f); + mpOrcaMorf->setEndFrame(20.0f); + setParticle(3, 3.0f, 0.75); + } + } + + return TRUE; } /* 0000B5EC-0000B67C .text battleSubActionDamageInit__11daNpc_Ji1_cFv */ void daNpc_Ji1_c::battleSubActionDamageInit() { - /* Nonmatching */ - setAnm(0x19, 0.0f, 1); - field_0x330->setPlaySpeed(1.5f); - field_0xC9C = 0; + mpOrcaMorf->setPlaySpeed(1.5f); + field_0xC9C = 0.0f; field_0xD38 = current.pos; setSubAction(&daNpc_Ji1_c::battleSubActionDamage); } /* 0000B67C-0000B8AC .text battleSubActionDamage__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::battleSubActionDamage() { - /* Nonmatching */ + cXyz temp = dComIfGp_getPlayer(0)->current.pos - current.pos; + s16 temp2 = cM_atan2s(temp.x, temp.z); + cLib_addCalc2(&field_0xC9C, 180.0f, 0.25f, 50.0f); + cXyz temp3 = field_0xD38; + temp3.x -= field_0xC9C * cM_ssin(current.angle.y); + temp3.z -= field_0xC9C * cM_scos(current.angle.y); + + f32 temp4 = 25.0f; + if(mAcch.ChkWallHit()) { + temp4 = 10.0f; + } + + cLib_addCalcPosXZ(¤t.pos, temp3, 0.8f, temp4, 1.0f); + + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 20.0f)) { + setParticle(3, 3.0f, 0.75f); + } + + if(mpOrcaMorf->getFrame() < 15.0f) { + cLib_addCalcAngleS2(¤t.angle.y, temp2, 4, 0x1800); + } + + if(!playerCutAtCheck()) { + field_0xD6C = 0; + } + + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 1.0f)) { + field_0xD6C = 0; + field_0xC9C = 0.0f; + field_0xD38 = current.pos; + setAnm(5, 4.0f, 0); + battleSubActionWaitInit(); + } + + return TRUE; } /* 0000B8AC-0000B92C .text battleSubActionJpGuardInit__11daNpc_Ji1_cFv */ void daNpc_Ji1_c::battleSubActionJpGuardInit() { - /* Nonmatching */ - setAnm(0xA, 0.0f, 1); - field_0xC9C = 0; + field_0xC9C = 0.0f; field_0xD38 = current.pos; setSubAction(&daNpc_Ji1_c::battleSubActionJpGuard); } /* 0000B92C-0000BAEC .text battleSubActionJpGuard__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::battleSubActionJpGuard() { - /* Nonmatching */ + cLib_addCalc2(&field_0xC9C, l_HIO.field_0x34, 0.25f, l_HIO.field_0x38); + + cXyz temp = field_0xD38; + temp.x -= field_0xC9C * cM_ssin(current.angle.y); + temp.z -= field_0xC9C * cM_scos(current.angle.y); + f32 temp2 = 25.0f; + if(mAcch.ChkWallHit()) { + temp2 = 10.0f; + } + + cLib_addCalcPos2(¤t.pos, temp, 0.8f, temp2); + fopAcM_seStart(this, JA_SE_CM_JI_SLIP, NULL); + + if(playerCutAtCheck() == FALSE) { + field_0xD6C = 0; + } + + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 1.0f)) { + field_0xD6C = 0; + field_0xC9C = 0.0f; + field_0xD38 = current.pos; + setAnm(5, 4.0f, 0); + battleSubActionWaitInit(); + } + + return TRUE; } /* 0000BAEC-0000BB6C .text battleSubActionGuardInit__11daNpc_Ji1_cFv */ void daNpc_Ji1_c::battleSubActionGuardInit() { - /* Nonmatching */ - - field_0xC9C = 0; + field_0xC9C = 0.0f; field_0xD38 = current.pos; setParticle(0x10, 1.0f, 0.1f); setSubAction(&daNpc_Ji1_c::battleSubActionGuard); @@ -2390,17 +3681,84 @@ void daNpc_Ji1_c::battleSubActionGuardInit() { /* 0000BB6C-0000BD8C .text battleSubActionGuard__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::battleSubActionGuard() { - /* Nonmatching */ + cLib_addCalc2(&field_0xC9C, 70.0f, 0.35f, l_HIO.field_0x40); + + cXyz temp = field_0xD38; + + if(field_0xC24 != 5) { + temp.x -= field_0xC9C * cM_ssin(current.angle.y); + temp.z -= field_0xC9C * cM_scos(current.angle.y); + } + else { + temp.x += field_0xC9C * 0.25f * cM_ssin(current.angle.y); + temp.z += field_0xC9C * 0.25f * cM_scos(current.angle.y); + } + + cLib_addCalcPos2(¤t.pos, temp, 0.8f, 45.0f); + fopAc_ac_c* player = dComIfGp_getPlayer(0); + s16 target = cLib_targetAngleY(¤t.pos, &player->current.pos); + cLib_addCalcAngleS2(¤t.angle.y, target, 8, 0x400); + + if(playerCutAtCheck() == FALSE) { + field_0xD6C = 0; + } + + if(mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 1.0f)) { + field_0xD6C = 0; + field_0xC9C = 0.0f; + field_0xD38 = current.pos; + setAnm(5, 4.0f, 0); + battleSubActionWaitInit(); + } + + if(field_0xC30 > 0) { + field_0xC30--; + } + + return TRUE; } /* 0000BD8C-0000BFE0 .text battleAtSet__11daNpc_Ji1_cFv */ -void daNpc_Ji1_c::battleAtSet() { - /* Nonmatching */ +BOOL daNpc_Ji1_c::battleAtSet() { + cXyz temp; + f32 sin = cM_ssin(current.angle.y); + f32 cos = cM_scos(current.angle.y); + + if(mAnimation == 0x14) { + field_0xA40.SetR(g_regHIO.mChild[10].mFloatRegs[9] + 85.0f); + field_0xB90.y = field_0xB78.y = g_regHIO.mChild[10].mFloatRegs[10] + 40.0f; + field_0xA40.SetStartEnd(field_0xB90, field_0xB78); + field_0xA40.CalcVec(&temp); + if(!temp.normalizeRS()) { + temp.set(cos, 0.0f, sin); + } + } + else if(mAnimation == 0x13) { + cXyz temp2 = field_0xB84; + cXyz temp3 = field_0xB78 - field_0xB84; + temp3 *= 0.3f; + temp2 += temp3; + temp.set(sin, 0.0f, cos); + field_0xA40.SetR(50.0f); + field_0xA40.SetStartEnd(temp2, field_0xB78); + } + else { + temp.set(sin, 0.0f, cos); + + field_0xA40.SetR(20.0f); + field_0xA40.SetStartEnd(field_0xB84, field_0xB78); + } + + field_0xA40.SetAtVec(temp); + + dComIfG_Ccsp()->Set(&field_0xA40); + + return TRUE; } /* 0000BFE0-0000C7E4 .text battleGuardCheck__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::battleGuardCheck() { - /* Nonmatching */ + &daNpc_Ji1_c::battleSubActionNockBack; // seems super fake, needed to match .data if(field_0x7E0.ChkTgHit() && field_0xD6C != 1) { switch(field_0xC24) { @@ -2475,6 +3833,7 @@ BOOL daNpc_Ji1_c::battleGuardCheck() { case 0x1E: case 0x1F: default: { + &daNpc_Ji1_c::battleSubActionNockBack; // seems super fake, needed to match .data if(!isAttackAnim()) { if(!checkSubAction(&daNpc_Ji1_c::battleSubActionNockBack)) { setAnm(9, 0.0f, 1); @@ -2558,7 +3917,7 @@ BOOL daNpc_Ji1_c::battleGuardCheck() { dComIfGp_setMessageCountNumber(field_0xD70); field_0x2C8 = &daNpc_Ji1_c::normalAction; if (dComIfG_getTimerPtr()) { - dComIfG_TimerDeleteRequest(); + dComIfG_getTimerPtr()->deleteRequest(); setClearRecord(field_0xD70); } @@ -2641,7 +4000,7 @@ BOOL daNpc_Ji1_c::battleAction(void*) { f32 what = temp.absXZ(); field_0x7E0.OffTgShield(); battleGuardCheck(); - (this->*field_0x2D4)(); + (this->*mSubAction)(); if(field_0xD6C != 1) { dtParticle(); @@ -2666,6 +4025,7 @@ BOOL daNpc_Ji1_c::checkCutType(int param_1, int param_2) { case 0: switch(param_1) { case 3: + case 4: case 7: case 0x1A: case 0x1B: @@ -2685,8 +4045,7 @@ BOOL daNpc_Ji1_c::checkCutType(int param_1, int param_2) { break; case 1: switch(param_1) { - case 0: - case 3: + case 1: case 6: case 0x1A: case 0x1B: @@ -2706,8 +4065,7 @@ BOOL daNpc_Ji1_c::checkCutType(int param_1, int param_2) { break; case 2: switch(param_1) { - case 0: - case 3: + case 2: case 6: case 0x1A: case 0x1B: @@ -2763,8 +4121,6 @@ BOOL daNpc_Ji1_c::checkCutType(int param_1, int param_2) { /* 0000CC28-0000CF28 .text setAnimFromMsgNo__11daNpc_Ji1_cFUl */ void daNpc_Ji1_c::setAnimFromMsgNo(u32 msgNo) { - /* Nonmatching */ - if(l_msg) { msgNo = l_msg->mMsgNo; } @@ -2774,56 +4130,52 @@ void daNpc_Ji1_c::setAnimFromMsgNo(u32 msgNo) { case 0x9B1: if(field_0xD84 == 1) { setAnm(0, 4.0f, 0); - return; + break; } setAnm(1, 4.0f, 0); - return; + break; case 0x961: case 0x986: setAnm(3, 8.0f, 0); - return; + break; case 0x962: setAnm(3, 4.0f, 0); - return; + break; case 0x9AF: case 0x9B3: case 0x9B4: if(field_0xD84 == 1) { setAnm(0, 4.0f, 0); - return; + break; } setAnm(2, 4.0f, 0); - return; + break; case 0x963: case 0x964: - case 0x965: - case 0x966: - case 0x967: - case 0x968: setAnm(2, 4.0f, 0); - return; + break; case 0x975: setAnm(4, 4.0f, 0); - return; + break; case 0x9AE: - if(field_0xD64 == 0x16 && field_0x330->checkFrame(field_0x330->getEndFrame() - 1)) { + if(mAnimation == 0x16 && mpOrcaMorf->checkFrame(mpOrcaMorf->getEndFrame() - 1)) { setAnm(0x15, l_HIO.field_0xA8, 0); - return; + break; } - if(field_0xD64 != 0x15) { + if(mAnimation != 0x15) { setAnm(0x16, l_HIO.field_0xA4, 0); } - return; + break; case 0x9B9: if(l_msg->mStatus != 0xE) { - return; + break; } - if(field_0xD64 != 0x17) { - return; + if(mAnimation != 0x17) { + break; } if(field_0x430 != 0) { @@ -2835,22 +4187,29 @@ void daNpc_Ji1_c::setAnimFromMsgNo(u32 msgNo) { setAnm(0x18, 8.0f, 0); field_0xD84 = 1; - return; + break; + case 0x965: + case 0x966: + case 0x967: + case 0x968: + case 0x973: + case 0x97A: + case 0x97B: + default: + break; } } /* 0000CF28-0000DAB0 .text setAnm__11daNpc_Ji1_cFifi */ BOOL daNpc_Ji1_c::setAnm(int param_1, f32 param_2, int param_3) { - /* Nonmatching */ - - if(param_3 == 0 & field_0xD64 - param_1 == 0) { + if(param_3 == 0 & mAnimation - param_1 == 0) { return false; } else { - field_0xD64 = param_1; + mAnimation = param_1; f32 speed = 1.0f; - if(param_1 != field_0xD64 && isGuardAnim()) { + if(param_1 != mAnimation && isGuardAnim()) { fopAcM_seStart(this, JA_SE_CM_JI_DEFENSE, 0); } @@ -3034,12 +4393,12 @@ BOOL daNpc_Ji1_c::setAnm(int param_1, f32 param_2, int param_3) { return 0; } - field_0x330->setAnm(bckAnm, loopMode, param_2, speed, 0.0f, -1.0f, pSoundAnimRes); - if(field_0xD64 == 0x13) { - mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Ji", JI_BCK_JIYARI_TATEATTACK), J3DFrameCtrl::EMode_LOOP, 0.0f, 1.0f, 0.0f, -1.0f, NULL); + mpOrcaMorf->setAnm(bckAnm, loopMode, param_2, speed, 0.0f, -1.0f, pSoundAnimRes); + if(mAnimation == 0x13) { + mpSpearMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Ji", JI_BCK_JIYARI_TATEATTACK), J3DFrameCtrl::EMode_LOOP, 0.0f, 1.0f, 0.0f, -1.0f, NULL); } - else if(field_0xD64 == 0x14) { - mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Ji", JI_BCK_JIYARI_YOKOATTACK), J3DFrameCtrl::EMode_LOOP, 0.0f, 1.0f, 0.0f, -1.0f, NULL); + else if(mAnimation == 0x14) { + mpSpearMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Ji", JI_BCK_JIYARI_YOKOATTACK), J3DFrameCtrl::EMode_LOOP, 0.0f, 1.0f, 0.0f, -1.0f, NULL); } return true; @@ -3048,8 +4407,6 @@ BOOL daNpc_Ji1_c::setAnm(int param_1, f32 param_2, int param_3) { /* 0000DAB0-0000DC04 .text nodeCallBack1__FP7J3DNodei */ static BOOL nodeCallBack1(J3DNode* node, int calcTiming) { - /* Nonmatching */ - if (calcTiming == J3DNodeCBCalcTiming_In) { J3DModel* model = j3dSys.getModel(); J3DJoint* joint = (J3DJoint*)node; @@ -3059,8 +4416,8 @@ static BOOL nodeCallBack1(J3DNode* node, int calcTiming) { if(i_this) { mDoMtx_stack_c::copy(model->getAnmMtx(jntNo)); if(jntNo == i_this->m_jnt.getHeadJntNum()) { - mDoMtx_stack_c::XrotM(i_this->field_0xBFC.field_0x02 + i_this->m_jnt.getHead_y()); - mDoMtx_stack_c::ZrotM(i_this->field_0xBFC.field_0x00 - i_this->m_jnt.getHead_x()); + mDoMtx_stack_c::XrotM(i_this->mHeadAnm.field_0x02 + i_this->m_jnt.getHead_y()); + mDoMtx_stack_c::ZrotM(i_this->mHeadAnm.field_0x00 - i_this->m_jnt.getHead_x()); } if(jntNo == i_this->m_jnt.getBackboneJntNum()) { mDoMtx_stack_c::XrotM(i_this->m_jnt.getBackbone_y()); @@ -3151,7 +4508,7 @@ static BOOL CheckCreateHeap(fopAc_ac_c* i_this) { cPhs_State daNpc_Ji1_c::_create() { fopAcM_SetupActor(this, daNpc_Ji1_c); - cPhs_State state = dComIfG_resLoad(&field_0xC7C, "Ji"); + cPhs_State state = dComIfG_resLoad(&mPhs, "Ji"); if(state == cPhs_COMPLEATE_e) { if(!fopAcM_entrySolidHeap(this, &CheckCreateHeap, 0x16840)) { return cPhs_ERROR_e; @@ -3168,7 +4525,7 @@ BOOL daNpc_Ji1_c::CreateHeap() { /* Nonmatching */ J3DModelData* modelData = static_cast(dComIfG_getObjectRes("Ji", JI_BDL_JI)); - field_0x330 = new mDoExt_McaMorf( + mpOrcaMorf = new mDoExt_McaMorf( modelData, NULL, NULL, static_cast(dComIfG_getObjectRes("Ji", JI_BCK_WAIT01)), @@ -3178,13 +4535,13 @@ BOOL daNpc_Ji1_c::CreateHeap() { 0x11020203 ); - if(field_0x330 == NULL || field_0x330->getModel() == NULL) { + if(mpOrcaMorf == NULL || mpOrcaMorf->getModel() == NULL) { return false; } mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); mDoMtx_stack_c::YrotM(current.angle.y); - field_0x330->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + mpOrcaMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); m_jnt.setHeadJntNum(modelData->getJointName()->getIndex("head")); JUT_ASSERT(0x15AB, m_jnt.getHeadJntNum() >= 0); @@ -3201,7 +4558,7 @@ BOOL daNpc_Ji1_c::CreateHeap() { handRJointNo = modelData->getJointName()->getIndex("handR"); JUT_ASSERT(0x15BA, handRJointNo >= 0); - mpMorf = new mDoExt_McaMorf( + mpSpearMorf = new mDoExt_McaMorf( static_cast(dComIfG_getObjectRes("Ji", JI_BDL_JI_YARI)), NULL, NULL, static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JIYARI_TATEATTACK)), @@ -3212,12 +4569,12 @@ BOOL daNpc_Ji1_c::CreateHeap() { ); - if(mpMorf == NULL || mpMorf->getModel() == NULL) { + if(mpSpearMorf == NULL || mpSpearMorf->getModel() == NULL) { return false; } modelData = static_cast(dComIfG_getObjectRes("Ji", JI_BDL_YJITR00)); - field_0x3F8 = mDoExt_J3DModel__create(modelData, 0, 0x11020203); + mpTearsModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203); J3DAnmTevRegKey* a_brk = static_cast(dComIfG_getObjectRes("Ji", JI_BRK_YJITR00)); JUT_ASSERT(0x15CD, a_brk != NULL); @@ -3225,17 +4582,17 @@ BOOL daNpc_Ji1_c::CreateHeap() { J3DAnmTextureSRTKey* a_btk = static_cast(dComIfG_getObjectRes("Ji", JI_BTK_YJITR00)); JUT_ASSERT(0x15D0, a_btk != NULL); - int temp1 = field_0x3FC.init(modelData, a_brk, false, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, 0); - int temp2 = field_0x418.init(modelData, a_btk, false, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, 0); + int temp1 = mCryBrk.init(modelData, a_brk, false, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, 0); + int temp2 = mCryBtk.init(modelData, a_btk, false, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, 0); - if(field_0x3F8 == 0 || temp1 == 0 || temp2 == 0) { + if(mpTearsModel == 0 || temp1 == 0 || temp2 == 0) { return false; } headTexPattern = static_cast(dComIfG_getObjectRes("Ji", JI_BTP_JI)); JUT_ASSERT(0x15D8, headTexPattern != NULL); - if(field_0x3D8.init(modelData, headTexPattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, 0) == 0) { + if(mBlinkAnim.init(modelData, headTexPattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, 0) == 0) { return false; } @@ -3260,33 +4617,33 @@ BOOL daNpc_Ji1_c::CreateHeap() { } } - field_0x330->getModel()->setUserArea((u32)this); + mpOrcaMorf->getModel()->setUserArea((u32)this); mAcchCir.SetWall(60.0f, 50.0f); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this)); mAcch.OnLineCheck(); - field_0xC54[0] = dComIfGp_evmng_getEventIdx("Ji1_StartSpeak"); - field_0xC54[1] = dComIfGp_evmng_getEventIdx("Ji1_Speak"); - field_0xC54[2] = dComIfGp_evmng_getEventIdx("Ji1_EndSpeak"); - field_0xC54[3] = dComIfGp_evmng_getEventIdx("Ji1_BadSpeak"); - field_0xC54[4] = dComIfGp_evmng_getEventIdx("Ji1_linkmove"); - field_0xC54[5] = dComIfGp_evmng_getEventIdx("Ji1_kaiten"); - field_0xC54[6] = dComIfGp_evmng_getEventIdx("Ji1_kaiten_exp"); - field_0xC54[7] = dComIfGp_evmng_getEventIdx("Ji1_ItemGetEnd"); - field_0xC54[8] = dComIfGp_evmng_getEventIdx("Ji1_ItemGetTalkEnd"); - field_0xC54[9] = dComIfGp_evmng_getEventIdx("Ji1_pl_backroom"); - field_0xC54[0xA] = dComIfGp_evmng_getEventIdx("Ji1_TeachSpRollCut"); - field_0xC54[0xB] = dComIfGp_evmng_getEventIdx("Ji1_SpRollFail"); - field_0xC54[0xC] = dComIfGp_evmng_getEventIdx("Ji1_NormAng"); - field_0xC54[0xD] = dComIfGp_evmng_getEventIdx("Ji1_NormAng2"); - field_0xC54[0xE] = dComIfGp_evmng_getEventIdx("Ji1_NormAngFin"); - field_0xC54[0xF] = dComIfGp_evmng_getEventIdx("Ji1_SwordGetTalkEnd"); - field_0xC54[0x10] = dComIfGp_evmng_getEventIdx("Ji1_KmonTalk"); - field_0xC54[0x11] = dComIfGp_evmng_getEventIdx("Ji1_EquipTalk"); + mEventIdx[0] = dComIfGp_evmng_getEventIdx("Ji1_StartSpeak"); + mEventIdx[1] = dComIfGp_evmng_getEventIdx("Ji1_Speak"); + mEventIdx[2] = dComIfGp_evmng_getEventIdx("Ji1_EndSpeak"); + mEventIdx[3] = dComIfGp_evmng_getEventIdx("Ji1_BadSpeak"); + mEventIdx[4] = dComIfGp_evmng_getEventIdx("Ji1_linkmove"); + mEventIdx[5] = dComIfGp_evmng_getEventIdx("Ji1_kaiten"); + mEventIdx[6] = dComIfGp_evmng_getEventIdx("Ji1_kaiten_exp"); + mEventIdx[7] = dComIfGp_evmng_getEventIdx("Ji1_ItemGetEnd"); + mEventIdx[8] = dComIfGp_evmng_getEventIdx("Ji1_ItemGetTalkEnd"); + mEventIdx[9] = dComIfGp_evmng_getEventIdx("Ji1_pl_backroom"); + mEventIdx[0xA] = dComIfGp_evmng_getEventIdx("Ji1_TeachSpRollCut"); + mEventIdx[0xB] = dComIfGp_evmng_getEventIdx("Ji1_SpRollFail"); + mEventIdx[0xC] = dComIfGp_evmng_getEventIdx("Ji1_NormAng"); + mEventIdx[0xD] = dComIfGp_evmng_getEventIdx("Ji1_NormAng2"); + mEventIdx[0xE] = dComIfGp_evmng_getEventIdx("Ji1_NormAngFin"); + mEventIdx[0xF] = dComIfGp_evmng_getEventIdx("Ji1_SwordGetTalkEnd"); + mEventIdx[0x10] = dComIfGp_evmng_getEventIdx("Ji1_KmonTalk"); + mEventIdx[0x11] = dComIfGp_evmng_getEventIdx("Ji1_EquipTalk"); if(dComIfGs_isEventBit(0x1) && !dComIfGs_isEventBit(0x108)) { - eventInfo.setEventId(field_0xC54[0x11]); + eventInfo.setEventId(mEventIdx[0x11]); } return true; @@ -3294,13 +4651,11 @@ BOOL daNpc_Ji1_c::CreateHeap() { /* 0000F324-0000FB0C .text CreateInit__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::CreateInit() { - /* Nonmatching */ - cXyz temp(190.0f, 230.0f, -1100.0f); csXyz temp2(0, 0, 0); fopAcM_createChild("Kmon", fopAcM_GetID(this), 0, &temp, fopAcM_GetRoomNo(this), &temp2); - fopAcM_SetMtx(this, field_0x330->getModel()->getBaseTRMtx()); + fopAcM_SetMtx(this, mpOrcaMorf->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -70.0f, 0.0f, -70.0f, 70.0f, 200.0f, 70.0f); gravity = -30.0f; attention_info.flags = fopAc_Attn_LOCKON_MISC_e | fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e; @@ -3325,7 +4680,7 @@ BOOL daNpc_Ji1_c::CreateInit() { field_0x290 = 240.0f; field_0x294 = 100.0f; - field_0xD64 = -1; + mAnimation = -1; field_0xD68 = 0; field_0xD6C = 0; field_0xD70 = 0; @@ -3339,7 +4694,7 @@ BOOL daNpc_Ji1_c::CreateInit() { field_0xC2C = 0; field_0xC4C = 0; field_0xC50 = 0; - field_0xC9C = 0; + field_0xC9C = 0.0f; field_0xD38 = current.pos; if(dComIfGs_isEventBit(0x520)) { @@ -3417,8 +4772,8 @@ BOOL daNpc_Ji1_c::CreateInit() { attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0xA9; attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0xA9; attention_info.distances[fopAc_Attn_TYPE_BATTLE_e] = 0xB5; - field_0x414 = 0.0f; - field_0x42C = 0.0f; + mCryBrkFrame = 0.0f; + mCryBtkFrame = 0.0f; field_0x430 = 0; set_mtx(); @@ -3435,9 +4790,9 @@ BOOL daNpc_Ji1_c::_delete() { dComIfGp_endMiniGame(6); } - dComIfG_resDelete(&field_0xC7C, "Ji"); - if(heap && field_0x330) { - field_0x330->stopZelAnime(); + dComIfG_resDelete(&mPhs, "Ji"); + if(heap && mpOrcaMorf) { + mpOrcaMorf->stopZelAnime(); } mDoAud_seDeleteObject(&field_0xB78); @@ -3453,17 +4808,15 @@ BOOL daNpc_Ji1_c::_delete() { /* 0000FC24-00010100 .text _execute__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::_execute() { - /* Nonmatching */ - if(field_0xD84 == 2) { harpoonMove(); } - if(cLib_calcTimer(&field_0x3EE) == 0) { - field_0x3EC++; - if(field_0x3EC >= headTexPattern->getFrameMax()) { - field_0x3EC -= headTexPattern->getFrameMax(); - field_0x3EE = (s16)cM_rndF(100.0f) + 30; + if(cLib_calcTimer(&mBlinkTimer) == 0) { + mBlinkFrame++; + if(mBlinkFrame >= headTexPattern->getFrameMax()) { + mBlinkFrame -= headTexPattern->getFrameMax(); + mBlinkTimer = (s16)cM_rndF(100.0f) + 30; } } @@ -3475,8 +4828,8 @@ BOOL daNpc_Ji1_c::_execute() { else { sound = 0; } - field_0x330->play(¤t.pos, sound, dComIfGp_getReverb(roomNo)); - field_0x330->calc(); + mpOrcaMorf->play(¤t.pos, sound, dComIfGp_getReverb(roomNo)); + mpOrcaMorf->calc(); if(isItemWaitAnim()) { static cXyz aim_offset(-13.0f, -4.0f, 10.0f); @@ -3487,46 +4840,46 @@ BOOL daNpc_Ji1_c::_execute() { } else { static cXyz aim_offset(-13.06f, -4.0f, 44.35f); - static csXyz aim_angle(0x3E84, 0, 0x7E93); + static csXyz aim_angle(0x3E94, 0, 0x7E93); field_0xD5C = aim_angle; cLib_addCalcPos2(&field_0xD50, aim_offset, 0.25f, 5.0f); } - if(field_0xD84 == 1 && (field_0xD64 == 0x13 || field_0xD64 == 0x14)) { - mpMorf->setFrame(field_0x330->getFrame()); + if(field_0xD84 == 1 && (mAnimation == 0x13 || mAnimation == 0x14)) { + mpSpearMorf->setFrame(mpOrcaMorf->getFrame()); } else { - mpMorf->setFrame(0.0f); - mpMorf->setPlaySpeed(0.0f); + mpSpearMorf->setFrame(0.0f); + mpSpearMorf->setPlaySpeed(0.0f); } - mpMorf->calc(); + mpSpearMorf->calc(); - field_0xBFC.move(); + mHeadAnm.move(); - if(field_0xD64 == 0x17) { - field_0x42C += 1.0f; - if(field_0x42C >= 60.0f) { - field_0x42C = 30.0f; + if(mAnimation == 0x17) { + mCryBtkFrame += 1.0f; + if(mCryBtkFrame >= 60.0f) { + mCryBtkFrame = 30.0f; } } else { - if(field_0xD64 != 0x18 && field_0x430 != 0) { + if(mAnimation != 0x18 && field_0x430 != 0) { field_0x430->becomeInvalidEmitter(); field_0x430 = 0; } - if(field_0x42C > 0.0f) { - field_0x414 += 1.0f; - if(field_0x414 >= 30.0f) { - field_0x42C = 0; - field_0x414 = 0; + if(mCryBtkFrame > 0.0f) { + mCryBrkFrame += 1.0f; + if(mCryBrkFrame >= 30.0f) { + mCryBtkFrame = 0.0f; + mCryBrkFrame = 0.0f; } } } - (this->*field_0x2B0)(0); + (this->*mAction)(0); lookBack(); daNpc_Ji1_setHairAngle(this); @@ -3551,38 +4904,36 @@ BOOL daNpc_Ji1_c::_execute() { /* 00010100-0001031C .text _draw__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::_draw() { - /* Nonmatching */ - - if(field_0xD85) { + if(mHide) { return true; } else { - J3DModel* model1 = field_0x330->getModel(); - J3DModelData* modelData1 = model1->getModelData(); - J3DModel* model2 = mpMorf->getModel(); + J3DModel* pOrcaModel = mpOrcaMorf->getModel(); + J3DModelData* pOrcaModelData = pOrcaModel->getModelData(); + J3DModel* pSpearModel = mpSpearMorf->getModel(); g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr); - g_env_light.setLightTevColorType(model1, &tevStr); - g_env_light.setLightTevColorType(model2, &tevStr); - field_0x3D8.entry(modelData1, field_0x3EC); - field_0x330->entryDL(); + g_env_light.setLightTevColorType(pOrcaModel, &tevStr); + g_env_light.setLightTevColorType(pSpearModel, &tevStr); + mBlinkAnim.entry(pOrcaModelData, mBlinkFrame); + mpOrcaMorf->entryDL(); if(field_0xD84 == 1) { - mpMorf->entryDL(); + mpSpearMorf->entryDL(); } else if(field_0xD84 == 2) { - mpMorf->updateDL(); + mpSpearMorf->updateDL(); } - field_0x418.entry(field_0x3F8->getModelData(), (s16)field_0x42C); - field_0x3FC.entry(field_0x3F8->getModelData(), (s16)field_0x414); - mDoExt_modelUpdateDL(field_0x3F8); + mCryBtk.entry(mpTearsModel->getModelData(), (s16)mCryBtkFrame); + mCryBrk.entry(mpTearsModel->getModelData(), (s16)mCryBrkFrame); + mDoExt_modelUpdateDL(mpTearsModel); cXyz temp(current.pos.x, current.pos.y + 150.0f, current.pos.z); - field_0x3F0 = dComIfGd_setShadow( - field_0x3F0, 1, field_0x330->getModel(), &temp, 800.0f, 20.0f, + mShadowId = dComIfGd_setShadow( + mShadowId, 1, mpOrcaMorf->getModel(), &temp, 800.0f, 20.0f, current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr ); - if(field_0x3F0 != 0 && field_0xD84 != 0) { - dComIfGd_addRealShadow(field_0x3F0, mpMorf->getModel()); + if(mShadowId != 0 && field_0xD84 != 0) { + dComIfGd_addRealShadow(mShadowId, mpSpearMorf->getModel()); } dSnap_RegistFig(DSNAP_TYPE_JI1, this, current.pos, current.angle.y, 1.0f, 1.0f, 1.0f); @@ -3595,8 +4946,126 @@ static cXyz l_head_front(0.0f, 1.0f, 0.0f); static cXyz l_head_top(1.0f, 0.0f, 0.0f); /* 0001031C-00010E3C .text daNpc_Ji1_setHairAngle__FP11daNpc_Ji1_c */ -static void daNpc_Ji1_setHairAngle(daNpc_Ji1_c* i_this) { +static BOOL daNpc_Ji1_setHairAngle(daNpc_Ji1_c* i_this) { /* Nonmatching */ + f32 wind = *dKyw_get_wind_power() * *dKyw_get_wind_power() * 25.0f; + cXyz* windVec = dKyw_get_wind_vec(); + + cXyz temp, temp2; + J3DModel* pModel = i_this->mpOrcaMorf->getModel(); + cMtx_multVecSR(i_this->mpOrcaMorf->getModel()->getAnmMtx(i_this->m_jnt.getHeadJntNum()), &l_head_front, &temp2); + cMtx_multVecSR(i_this->mpOrcaMorf->getModel()->getAnmMtx(i_this->m_jnt.getHeadJntNum()), &l_head_top, &temp); + s16 temp3 = i_this->field_0xBA6; + s16 temp4 = i_this->field_0xBA8; + + if(temp.y < 0) { + i_this->field_0xBA6 = cM_atan2s(temp2.y, -temp2.absXZ()); + } + else { + i_this->field_0xBA6 = cM_atan2s(temp2.y, temp2.absXZ()); + } + + i_this->field_0xBA8 = cM_atan2s(temp2.x, temp2.z); + + temp3 = (s16)(i_this->field_0xBA6 - temp3) >> 1; + temp4 = (s16)(i_this->field_0xBA8 - temp4) >> 1; + + MtxP pMtx = pModel->getAnmMtx(i_this->hair1JointNo); + cXyz temp5(pMtx[0][3], pMtx[1][3], pMtx[2][3]); + cXyz temp6; + temp6.x = i_this->field_0xBC4.x - temp5.x; + temp6.y = i_this->field_0xBC4.y - temp5.y - 8.5f; + temp6.z = i_this->field_0xBC4.z - temp5.z; + temp6 += *windVec * wind; + + if(std::fabsf(temp6.x) < 0.01f) { + temp6.x = 0.0f; + } + if(std::fabsf(temp6.z) < 0.01f) { + temp6.z = 0.0f; + } + + s16 temp7 = i_this->field_0xBAA; + s16 temp8 = i_this->field_0xBAC; + + f32 temp10 = temp6.z * cM_scos(i_this->current.angle.y + i_this->m_jnt.getHead_y()) + temp6.x * cM_ssin(i_this->current.angle.y + i_this->m_jnt.getHead_y()); + s16 temp9 = cM_atan2s(-temp10, -temp6.y); + if(temp9 < 0 && temp9 > -0x6000) { + temp9 = 0; + } + else if(temp9 > 0x7C00 || temp9 <= -0x6000) { + temp9 = 0x7C00; + } + temp9 += i_this->field_0xBA6; + + cLib_addCalcAngleS2(&i_this->field_0xBAA, temp9, 5, 0x400); + + i_this->field_0xBAA += (s16)(i_this->field_0xBB6 + temp3); + i_this->field_0xBAA += (s16)(i_this->field_0xBB6 + temp3); + i_this->field_0xBAA = cLib_minMaxLimit(i_this->field_0xBAA, l_HIO.field_0xF4, l_HIO.field_0xF6); + + f32 temp11 = cM_ssin(i_this->current.angle.y + i_this->m_jnt.getHead_y()); + f32 temp12 = cM_scos(i_this->current.angle.y + i_this->m_jnt.getHead_y()); + cLib_addCalcAngleS2(&i_this->field_0xBAC, cM_atan2s(temp6.z * temp11 - temp6.x * temp12, std::sqrtf(temp10 * temp10 + temp6.y * temp6.y)), 5, 0x400); + + i_this->field_0xBAC += (s16)(i_this->field_0xBB8 - temp4); + i_this->field_0xBAC = cLib_minMaxLimit(i_this->field_0xBAC, l_HIO.field_0xE8, l_HIO.field_0xEA); + + i_this->field_0xBB6 = (s16)(i_this->field_0xBAA - temp7) * 0.2f; + i_this->field_0xBB8 = (s16)(i_this->field_0xBAC - temp8) * 0.2f; + s16 temp15 = i_this->field_0xBAA - temp7; + s16 temp16 = i_this->field_0xBAC - temp8; + i_this->field_0xBAE -= temp15; + i_this->field_0xBB0 -= temp16; + + temp7 = i_this->field_0xBAE; + temp8 = i_this->field_0xBB0; + + cLib_addCalcAngleS2(&i_this->field_0xBAE, 0, 5, 0x400); + cLib_addCalcAngleS2(&i_this->field_0xBB0, 0, 5, 0x400); + + i_this->field_0xBAE += (s16)(i_this->field_0xBBA + temp3); + i_this->field_0xBAE = cLib_minMaxLimit(i_this->field_0xBAE, l_HIO.field_0xF8 - i_this->field_0xBAA, l_HIO.field_0xFA - i_this->field_0xBAA); + + i_this->field_0xBB0 += (s16)(i_this->field_0xBBC - temp4); + i_this->field_0xBB0 = cLib_minMaxLimit(i_this->field_0xBB0, l_HIO.field_0xEC - i_this->field_0xBAC, l_HIO.field_0xEE - i_this->field_0xBAC); + + i_this->field_0xBBA = (s16)(i_this->field_0xBAE - temp7) * 0.2f; + i_this->field_0xBBC = (s16)(i_this->field_0xBB0 - temp8) * 0.2f; + s16 temp17 = i_this->field_0xBAE - temp7; + s16 temp18 = i_this->field_0xBB0 - temp8; + i_this->field_0xBB2 -= temp17; + i_this->field_0xBB4 -= temp18; + + temp7 = i_this->field_0xBB2; + temp8 = i_this->field_0xBB4; + + cLib_addCalcAngleS2(&i_this->field_0xBB2, 0, 5, 0x400); + cLib_addCalcAngleS2(&i_this->field_0xBB4, 0, 5, 0x400); + + i_this->field_0xBB2 += (s16)(i_this->field_0xBBE + temp3); + i_this->field_0xBB2 = cLib_minMaxLimit(i_this->field_0xBB2, l_HIO.field_0xFC - i_this->field_0xBAA - i_this->field_0xBAE, l_HIO.field_0xFE - i_this->field_0xBAA - i_this->field_0xBAE); + + i_this->field_0xBB4 += (s16)(i_this->field_0xBC0 - temp4); + i_this->field_0xBB4 = cLib_minMaxLimit(i_this->field_0xBB4, l_HIO.field_0xF0 - i_this->field_0xBB0 - i_this->field_0xBAC, l_HIO.field_0xF2 - i_this->field_0xBB0 - i_this->field_0xBAC); + + i_this->field_0xBBE = (s16)(i_this->field_0xBB2 - temp7) * 0.2f; + i_this->field_0xBC0 = (s16)(i_this->field_0xBB4 - temp8) * 0.2f; + + temp7 = i_this->field_0xBAE; + temp8 = i_this->field_0xBB0; + + + wind = cLib_maxLimit((wind + i_this->field_0xBC4.abs(temp5) * 0.65f) / 30.0f, 1.0f); + + s16 temp14 = wind * 4600.0f + 1500.0f; + i_this->field_0xBD0 += temp14; + i_this->field_0xBD2 = wind * 2280.0f * cM_scos(i_this->field_0xBD0); + i_this->field_0xBD4 = wind * 3908.0f * cM_scos(i_this->field_0xBD0 - temp14 * 3.0f); + i_this->field_0xBD6 = wind * 7568.0f * cM_scos(i_this->field_0xBD0 - temp14 * 6.0f); + i_this->field_0xBC4 = temp5; + + return TRUE; } /* 00010E3C-00010FC0 .text chkAttention__11daNpc_Ji1_cF4cXyzs */ @@ -3651,7 +5120,7 @@ BOOL daNpc_Ji1_c::lookBack() { (checkAction(&daNpc_Ji1_c::kaitenwaitAction) && !dComIfGs_isEventBit(0x501)) || (!checkAction(&daNpc_Ji1_c::normalAction) && dist < 600.0f) ) { - if(field_0xD64 == 0xD) { + if(mAnimation == 0xD) { dstPos = 0; } else { @@ -3666,7 +5135,7 @@ BOOL daNpc_Ji1_c::lookBack() { s16 maxHeadRot = l_HIO.field_0x10; s16 maxSpineRot = l_HIO.field_0x12; - if(field_0xD64 == 0x10 || field_0xD64 == 0x11) { + if(mAnimation == 0x10 || mAnimation == 0x11) { maxHeadRot = 0x3E80; maxSpineRot = 0x1F40; } @@ -3688,8 +5157,6 @@ BOOL daNpc_Ji1_c::lookBack() { /* 0001132C-000114EC .text setHitParticle__11daNpc_Ji1_cFP4cXyzUl */ void daNpc_Ji1_c::setHitParticle(cXyz* param_1, u32 param_2) { - /* Nonmatching */ - cXyz* pRVec = field_0x7E0.GetTgRVecP(); cXyz scale(0.75f, 0.75f, 0.75f); csXyz angle; @@ -3717,14 +5184,12 @@ void daNpc_Ji1_c::setGuardParticle() { /* 0001161C-00011644 .text BackSlideInit__11daNpc_Ji1_cFv */ void daNpc_Ji1_c::BackSlideInit() { - field_0xC9C = 0; + field_0xC9C = 0.0f; field_0xD38 = current.pos; } /* 00011644-0001173C .text BackSlide__11daNpc_Ji1_cFff */ void daNpc_Ji1_c::BackSlide(f32 param_1, f32 param_2) { - /* Nonmatching */ - cLib_addCalc2(&field_0xC9C, param_1, 0.25f, 50.0f); cXyz temp(field_0xD38); temp.x -= field_0xC9C * cM_ssin(current.angle.y); @@ -3739,8 +5204,8 @@ void daNpc_Ji1_c::BackSlide(f32 param_1, f32 param_2) { /* 0001173C-000118E0 .text harpoonRelease__11daNpc_Ji1_cFP4cXyz */ void daNpc_Ji1_c::harpoonRelease(cXyz* param_1) { - MTXCopy(mpMorf->getModel()->getAnmMtx(1), field_0xCA0); - mpMorf->setFrame(0.0f); + MTXCopy(mpSpearMorf->getModel()->getAnmMtx(1), field_0xCA0); + mpSpearMorf->setFrame(0.0f); field_0xCD0.x = field_0xCA0[0][3]; field_0xCD0.y = field_0xCA0[1][3]; field_0xCD0.z = field_0xCA0[2][3]; @@ -3757,10 +5222,10 @@ void daNpc_Ji1_c::harpoonRelease(cXyz* param_1) { field_0xD14 = 0x400; - field_0xD04 = cM_ssin(field_0xD14) * cM_scos(current.angle.y); - field_0xD08 = 0.0f; - field_0xD0C = cM_ssin(field_0xD14) * cM_ssin(current.angle.y); - field_0xD10 = cM_scos(field_0xD14); + field_0xD04.x = cM_ssin(field_0xD14) * cM_scos(current.angle.y); + field_0xD04.y = 0.0f; + field_0xD04.z = cM_ssin(field_0xD14) * cM_ssin(current.angle.y); + field_0xD04.w = cM_scos(field_0xD14); field_0xCF4 = ZeroQuat; @@ -3769,7 +5234,111 @@ void daNpc_Ji1_c::harpoonRelease(cXyz* param_1) { /* 000118E0-00011F74 .text harpoonMove__11daNpc_Ji1_cFv */ void daNpc_Ji1_c::harpoonMove() { - /* Nonmatching */ + f32 hio_bc = l_HIO.field_0xBC; + f32 hio_c0 = l_HIO.field_0xC0; + + cXyz temp(0.0f, 0.0f, 100.0f); + cXyz temp2(0.0f, 0.0f, -100.0f); + cXyz temp3 = field_0xB78; + cXyz temp4 = field_0xB84; + + mDoMtx_quatMultiply(&field_0xCF4, &field_0xD04, &field_0xCF4); + QUATNormalize(&field_0xCF4, &field_0xCF4); + field_0xCD0 += field_0xCDC; + field_0xCDC.y += hio_c0; + field_0xCDC *= 0.95f; + mDoMtx_stack_c::transS(field_0xCD0); + mDoMtx_stack_c::quatM(&field_0xCF4); + mDoMtx_stack_c::concat(field_0xCA0); + mpSpearMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + mDoMtx_stack_c::multVec(&temp, &field_0xB78); + mDoMtx_stack_c::multVec(&temp2, &field_0xB84); + + if(field_0xB78.y < 0 || field_0xB84.y < 0) { + cXyz temp5 = field_0xB78 - field_0xCD0; + cXyz temp6 = field_0xB84 - field_0xCD0; + temp3 -= field_0xCD0; + temp4 -= field_0xCD0; + Quaternion temp7; + Quaternion temp8; + daObj::quat_rotVec(&temp7, temp3, temp5); + daObj::quat_rotVec(&temp8, temp4, temp6); + + Quaternion temp11; + if(field_0xB78.y < 0 && field_0xB84.y >= 0) { + field_0xCD0.y -= field_0xB78.y; + field_0xB84.y -= field_0xB78.y; + field_0xB78.y = 0.0f; + //Quaternion temp9; + temp7.x = -field_0xD04.x; + temp7.y = field_0xD04.y; + temp7.z = -field_0xD04.z; + temp7.w = field_0xD04.w; + cXyz temp10 = temp6; + temp10.y = 0.0f; + daObj::quat_rotVec(&temp11, temp6, temp10); + mDoMtx_quatSlerp(&temp8, &temp11, &temp8, 0.05f); + mDoMtx_quatSlerp(&temp7, &ZeroQuat, &temp7, 0.1f); + mDoMtx_quatSlerp(&temp8, &temp7, &field_0xD04, 0.5f); + cXyz temp12 = temp5 - temp3; + if(temp12.y < -3.0f && temp12.normalizeRS()) { + u32 temp13 = std::abs(temp12.y * 100.0f); + u32 temp14 = cLib_maxLimit(temp13, 100); + + mDoAud_seStart(JA_SE_CM_LANCE_BOUND, &field_0xB78, temp14); + field_0xCDC.y *= hio_bc * temp12.getDotProduct(cXyz::BaseY); + } + else { + field_0xCDC.y = 0.0f; + } + } + else if(field_0xB78.y >= 0 && field_0xB84.y < 0) { + field_0xCD0.y -= field_0xB84.y; + field_0xB78.y -= field_0xB84.y; + field_0xB84.y = 0.0f; + temp8.x = -field_0xD04.x; + temp8.y = field_0xD04.y; + temp8.z = -field_0xD04.z; + temp8.w = field_0xD04.w; + cXyz temp10 = temp5; + temp10.y = 0.0f; + daObj::quat_rotVec(&temp11, temp5, temp10); + mDoMtx_quatSlerp(&temp7, &temp11, &temp7, 0.1f); + mDoMtx_quatSlerp(&temp8, &ZeroQuat, &temp8, 0.1f); + mDoMtx_quatSlerp(&temp7, &temp8, &field_0xD04, 0.5f); + cXyz temp12 = temp6 - temp4; + if(temp12.y < -3.0f && temp12.normalizeRS()) { + u32 temp13 = std::abs(temp12.y * 100.0f); + u32 temp14 = cLib_maxLimit(temp13, 100); + + mDoAud_seStart(JA_SE_CM_LANCE_BOUND, &field_0xB84, temp14); + field_0xCDC.y *= hio_bc * temp12.getDotProduct(cXyz::BaseY); + } + else { + field_0xCDC.y = 0.0f; + } + } + else { + cXyz temp10 = temp5; + temp10.y = 0.0f; + daObj::quat_rotVec(&temp7, temp5, temp10); + field_0xCD0.y -= (field_0xB84.y + field_0xB78.y) * 0.5f; + mDoMtx_quatSlerp(&field_0xD04, &temp7, &field_0xD04, 0.25f); + field_0xCDC.y *= hio_bc; + } + + cXyz temp9 = field_0xB78 - field_0xB84; + cXyz temp12(0.0f, 1.0f, 0.0f); + f32 dot = temp9.getDotProduct(temp12); + if(dot < 1.0f) { + cXyz temp10 = temp5; + temp10.y = 0.0f; + daObj::quat_rotVec(&temp7, temp5, temp10); + field_0xCD0.y -= (field_0xB84.y + field_0xB78.y) * 0.5f; + mDoMtx_quatSlerp(&field_0xD04, &temp7, &field_0xD04, 0.25f); + field_0xCDC.y *= hio_bc; + } + } } /* 00011F74-00011F98 .text daNpc_Ji1_Execute__FP11daNpc_Ji1_c */