From 766b58a6eefeda9c8bc00e21ca6faa90d2d546c5 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Wed, 13 May 2026 19:03:24 -0400 Subject: [PATCH] Misc matches (#1000) --- configure.py | 4 +- include/d/actor/d_a_lod_bg.h | 2 + include/d/actor/d_a_npc_cb1.h | 80 +--------------- include/d/actor/d_a_stone2.h | 4 +- include/d/d_particle.h | 12 ++- src/d/actor/d_a_lod_bg.cpp | 10 ++ src/d/actor/d_a_npc_cb1.cpp | 161 ++++++++++++++++++++++++++------ src/d/actor/d_a_npc_ji1.cpp | 2 +- src/d/actor/d_a_obj_ikada.cpp | 44 ++++----- src/d/actor/d_a_ship.cpp | 167 +++++++++++++++------------------- src/d/actor/d_a_stone2.cpp | 16 ++-- src/d/actor/d_a_warphr.cpp | 2 +- 12 files changed, 272 insertions(+), 232 deletions(-) diff --git a/configure.py b/configure.py index 9956055dc..2bbc2d6a5 100755 --- a/configure.py +++ b/configure.py @@ -1477,7 +1477,7 @@ config.libs = [ ActorRel(Matching, "d_a_spotbox"), ActorRel(Matching, "d_a_ssk"), ActorRel(Matching, "d_a_stone"), - ActorRel(MatchingFor("D44J01"), "d_a_stone2"), + ActorRel(Matching, "d_a_stone2"), ActorRel(Matching, "d_a_swc00"), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_swhit0"), ActorRel(Matching, "d_a_swtdoor"), @@ -1528,7 +1528,7 @@ config.libs = [ ActorRel(Matching, "d_a_ks"), ActorRel(NonMatching, "d_a_kt"), # regalloc ActorRel(Matching, "d_a_mflft"), - ActorRel(NonMatching, "d_a_npc_cb1"), + ActorRel(MatchingFor("GZLE01", "GZLP01"), "d_a_npc_cb1"), ActorRel(NonMatching, "d_a_npc_md"), ActorRel(NonMatching, "d_a_npc_so"), ActorRel(Matching, "d_a_nzg"), diff --git a/include/d/actor/d_a_lod_bg.h b/include/d/actor/d_a_lod_bg.h index c852a58c3..558c72dee 100644 --- a/include/d/actor/d_a_lod_bg.h +++ b/include/d/actor/d_a_lod_bg.h @@ -19,8 +19,10 @@ public: void setExecute(BOOL (daLodbg_c::*func)()) { mExecuteFunc = func; } void deleteModelData(); +#if VERSION > VERSION_DEMO BOOL loadModelData(const char*, J3DModelData*&, JKRSolidHeap*&, unsigned long&); BOOL createModelData(); +#endif BOOL execCreateWait(); BOOL execReadWait(); BOOL execDeleteWait(); diff --git a/include/d/actor/d_a_npc_cb1.h b/include/d/actor/d_a_npc_cb1.h index b6f72f471..2d55573d9 100644 --- a/include/d/actor/d_a_npc_cb1.h +++ b/include/d/actor/d_a_npc_cb1.h @@ -30,10 +30,11 @@ public: }; // daPy_py_c virtuals - f32 getBaseAnimeFrame() { return 0.0f; } - f32 getBaseAnimeFrameRate() { return 1.0f; } - MtxP getLeftHandMatrix() { return cullMtx; } - MtxP getRightHandMatrix() { return cullMtx; } + virtual f32 getGroundY() { return mAcch.GetGroundH(); } + virtual MtxP getLeftHandMatrix() { return cullMtx; } + virtual MtxP getRightHandMatrix() { return cullMtx; } + virtual f32 getBaseAnimeFrameRate() { return 1.0f; } + virtual f32 getBaseAnimeFrame() { return 0.0f; } s16 XyCheckCB(int i_itemBtn) { if(dComIfGp_getSelectItem(i_itemBtn) == dItem_WIND_WAKER_e && dComIfGs_isEventBit(dSv_event_flag_c::UNK_1880)) { @@ -49,7 +50,6 @@ public: s16 getBackbone_y() { return mJntCtrl.getBackbone_y(); } s16 getHead_y() { return mJntCtrl.getHead_y(); } cXyz& getEyePos() { return mEyePos; } - f32 getGroundY() { return mAcch.GetGroundH(); } cXyz& getNusSpeed() { return mNusSpeed; } // not entirely sure about this one cXyz& getNutPos() { return mNutPos; } // not entirely sure about this one s16 getWork3() { return m8FA; } @@ -322,74 +322,4 @@ private: static mode_entry_t m_evProcTbl[]; }; -class daNpc_Cb1_HIO_c : public JORReflexible { -public: - daNpc_Cb1_HIO_c(); - virtual ~daNpc_Cb1_HIO_c() {} - void genMessage(JORMContext*) {} - -public: - /* 0x04 */ s8 mNo; - /* 0x08 */ dNpc_HIO_c mNpc; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 mPlayerChaseDistance; // distance from the player before Makar starts following him (while called) - /* 0x38 */ f32 mChaseDistScale; // scales the distance to the player to get a target speed - /* 0x3C */ f32 mMaxWalkSpeed; - /* 0x40 */ f32 mMinWalkSpeed; - /* 0x44 */ f32 mForwardAccel; - /* 0x48 */ f32 mDecelScale; // scales speed to get deceleration in daNpc_Cb1_c::breaking() - /* 0x4C */ f32 mMaxDecel; - /* 0x50 */ f32 mDecel; - /* 0x54 */ f32 mWalkAnmSpeedScale; - /* 0x58 */ f32 mMaxWalkAnmSpeed; - /* 0x5C */ f32 mNpcFlyLaunchSpeedF; // forward speed when Makar jumps to start flying - /* 0x60 */ f32 mNpcFlyLaunchSpeedY; - /* 0x64 */ f32 field_0x64; - /* 0x68 */ f32 mHitSpeedScaleF; // scales forward speed when Makar is hit - /* 0x6C */ f32 mHitSpeedScaleY; // scales forward speed to get y recoil speed when Makar is hit - /* 0x70 */ f32 field_0x70; - /* 0x74 */ f32 field_0x74; - /* 0x78 */ f32 field_0x78; - /* 0x7C */ f32 field_0x7C; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ f32 field_0x84; - /* 0x88 */ f32 mStickWalkSpeedScale; // scales main stick value to get a target speed - /* 0x8C */ f32 field_0x8C; - /* 0x90 */ f32 field_0x90; - /* 0x94 */ u8 field_0x94[4]; - /* 0x98 */ f32 field_0x98; - /* 0x9C */ f32 field_0x9C; - /* 0xA0 */ f32 field_0xA0; - /* 0xA4 */ f32 field_0xA4; - /* 0xA8 */ f32 field_0xA8; - /* 0xAC */ f32 mStickFlySpeedScale; - /* 0xB0 */ f32 field_0xB0; - /* 0xB4 */ f32 field_0xB4; - /* 0xB8 */ f32 field_0xB8; - /* 0xBC */ f32 mFlyLaunchSpeedY; - /* 0xC0 */ f32 field_0xC0; - /* 0xC4 */ f32 field_0xC4; - /* 0xC8 */ s16 field_0xC8; - /* 0xCA */ s16 mPlayerFlyTimer; - /* 0xCC */ s16 field_0xCC; - /* 0xCE */ s16 field_0xCE; - /* 0xD0 */ s16 field_0xD0; - /* 0xD2 */ s16 field_0xD2; - /* 0xD4 */ s16 field_0xD4; - /* 0xD6 */ s16 field_0xD6; - /* 0xD8 */ s16 field_0xD8; - /* 0xDA */ s16 field_0xDA; - /* 0xDC */ s16 mNpcFlyTimer; - /* 0xDE */ s16 field_0xDE; - /* 0xE0 */ s16 field_0xE0; - /* 0xE2 */ s16 field_0xE2; - /* 0xE4 */ s16 field_0xE4; - /* 0xE6 */ s16 field_0xE6; - /* 0xE8 */ s16 field_0xE8; - /* 0xEA */ s16 field_0xEA; - /* 0xEC */ s16 field_0xEC; - /* 0xEE */ u8 mDamageTimer; - /* 0xEF */ u8 field_0xEF; -}; // Size: 0xF0 - #endif /* D_A_NPC_CB1_H */ diff --git a/include/d/actor/d_a_stone2.h b/include/d/actor/d_a_stone2.h index 37200a849..60e727beb 100644 --- a/include/d/actor/d_a_stone2.h +++ b/include/d/actor/d_a_stone2.h @@ -68,13 +68,13 @@ namespace daStone2 { virtual ~Act_c() {} const Attr_c& attr() { return M_attr[m644]; } - s32 prmZ_get_evId() const { return m64C; } s32 prm_get_cull() const { return daObj::PrmAbstract(this, PRM_CULL_W, PRM_CULL_S); } s32 prm_get_itemNo() const { return daObj::PrmAbstract(this, PRM_ITEMNO_W, PRM_ITEMNO_S); } s32 prm_get_itemSave() const { return daObj::PrmAbstract(this, PRM_ITEMSAVE_W, PRM_ITEMSAVE_S); } bool prm_get_shadow() const { return daObj::PrmAbstract(this, PRM_SHADOW_W, PRM_SHADOW_S); } s32 prm_get_swSave() const { return daObj::PrmAbstract(this, PRM_SWSAVE_W, PRM_SWSAVE_S); } s32 prm_get_type() const { return daObj::PrmAbstract(this, PRM_TYPE_W, PRM_TYPE_S); } + u8 prmZ_get_evId() const { return mPrmZ & 0xFF; } void prmZ_init(); bool is_switch() const; @@ -138,7 +138,7 @@ namespace daStone2 { /* 0x648 */ s32 m648; /* 0x64C */ s32 m64C; /* 0x650 */ s16 m650; - /* 0x652 */ u16 m652; + /* 0x652 */ u16 mPrmZ; /* 0x654 */ s16 m654; /* 0x656 */ bool m656; /* 0x657 */ u8 m657; diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 6f2862d6d..c6dbc7077 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -130,10 +130,16 @@ public: void setPitch(f32 pitch) { mVelFade2 = pitch; } void setMaxSpeed(f32 vel) { mMaxParticleVelocity = vel; } void setMaxDisSpeed(f32 vel) { mVelSpeed = vel; } - void setAnchor(const cXyz* anchorPos1, const cXyz* anchorPos2) { mCollapsePos[0].set(*anchorPos1); mCollapsePos[1].set(*anchorPos2); } + void setAnchor(const cXyz* anchorPos1, const cXyz* anchorPos2) { + mCollapsePos[0] = *anchorPos1; + mCollapsePos[1] = *anchorPos2; + } + void end() { remove(); } + void stop() { mState = 1; } virtual ~dPa_waveEcallBack() {} +public: /* 0x04 */ s16 mState; /* 0x06 */ s16 mFadeTimer; /* 0x08 */ f32 mVelFade1; @@ -157,9 +163,12 @@ public: JPABaseEmitter* getEmitter() { return mpBaseEmitter; } void setSpeed (f32 vel) { mScaleTimer = vel; } void setMaxSpeed (f32 vel) { mMaxScaleTimer = vel; } + void end() { remove(); } + void stop() { mState = 1; } virtual ~dPa_splashEcallBack() {} +private: /* 0x04 */ s16 mState; /* 0x08 */ f32 mScaleTimer; /* 0x0C */ f32 mMaxScaleTimer; @@ -186,6 +195,7 @@ public: virtual ~dPa_trackEcallBack() {} +private: /* 0x04 */ s16 mState; /* 0x08 */ f32 mBaseY; /* 0x0C */ f32 mMinY; diff --git a/src/d/actor/d_a_lod_bg.cpp b/src/d/actor/d_a_lod_bg.cpp index 96a6b3b03..f82494eae 100644 --- a/src/d/actor/d_a_lod_bg.cpp +++ b/src/d/actor/d_a_lod_bg.cpp @@ -96,6 +96,7 @@ void daLodbg_c::deleteModelData() { } } +#if VERSION > VERSION_DEMO /* 0000046C-00000738 .text loadModelData__9daLodbg_cFPCcRP12J3DModelDataRP12JKRSolidHeapRUl */ BOOL daLodbg_c::loadModelData(const char* filename, J3DModelData*& mModelData, JKRSolidHeap*& mDataHeap, u32& mDataSize) { /* Nonmatching - regalloc */ @@ -150,7 +151,9 @@ BOOL daLodbg_c::loadModelData(const char* filename, J3DModelData*& mModelData, J else return FALSE; } +#endif +#if VERSION > VERSION_DEMO /* 00000738-000008B8 .text createModelData__9daLodbg_cFv */ BOOL daLodbg_c::createModelData() { static char resPath[32]; @@ -173,6 +176,7 @@ BOOL daLodbg_c::createModelData() { return TRUE; } +#endif /* 000008B8-00000A38 .text createHeap__9daLodbg_cFv */ BOOL daLodbg_c::createHeap() { @@ -231,25 +235,31 @@ BOOL daLodbg_c::execReadWait() { if (!mMountCommand->sync()) return TRUE; +#if VERSION > VERSION_DEMO JUT_ASSERT(VERSION_SELECT(506, 506, 535, 535), mArchive == NULL); mArchive = mMountCommand->getArchive(); delete mMountCommand; mMountCommand = NULL; +#endif if (mArchive == NULL) { setExecute(&daLodbg_c::execDeleteWait); return TRUE; } +#if VERSION > VERSION_DEMO createModelData(); JUT_ASSERT(VERSION_SELECT(542, 542, 571, 571), mModel == NULL); JUT_ASSERT(VERSION_SELECT(543, 543, 572, 572), mModel2[0] == NULL); JUT_ASSERT(VERSION_SELECT(544, 544, 573, 573), mModel2[1] == NULL); +#endif if (!fopAcM_entrySolidHeap(this, createHeapCallBack, 0)) { +#if VERSION > VERSION_DEMO mModel = NULL; mModel2[0] = NULL; mModel2[1] = NULL; +#endif setExecute(&daLodbg_c::execDeleteWait); return TRUE; } diff --git a/src/d/actor/d_a_npc_cb1.cpp b/src/d/actor/d_a_npc_cb1.cpp index f8f799041..39c88a28f 100644 --- a/src/d/actor/d_a_npc_cb1.cpp +++ b/src/d/actor/d_a_npc_cb1.cpp @@ -20,6 +20,76 @@ #include "d/actor/d_a_player_main.h" #include "d/res/res_cb.h" +class daNpc_Cb1_HIO_c : public JORReflexible { +public: + daNpc_Cb1_HIO_c(); + virtual ~daNpc_Cb1_HIO_c() {} + void genMessage(JORMContext*) {} + +public: + /* 0x04 */ s8 mNo; + /* 0x08 */ dNpc_HIO_c mNpc; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 mPlayerChaseDistance; // distance from the player before Makar starts following him (while called) + /* 0x38 */ f32 mChaseDistScale; // scales the distance to the player to get a target speed + /* 0x3C */ f32 mMaxWalkSpeed; + /* 0x40 */ f32 mMinWalkSpeed; + /* 0x44 */ f32 mForwardAccel; + /* 0x48 */ f32 mDecelScale; // scales speed to get deceleration in daNpc_Cb1_c::breaking() + /* 0x4C */ f32 mMaxDecel; + /* 0x50 */ f32 mDecel; + /* 0x54 */ f32 mWalkAnmSpeedScale; + /* 0x58 */ f32 mMaxWalkAnmSpeed; + /* 0x5C */ f32 mNpcFlyLaunchSpeedF; // forward speed when Makar jumps to start flying + /* 0x60 */ f32 mNpcFlyLaunchSpeedY; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ f32 mHitSpeedScaleF; // scales forward speed when Makar is hit + /* 0x6C */ f32 mHitSpeedScaleY; // scales forward speed to get y recoil speed when Makar is hit + /* 0x70 */ f32 field_0x70; + /* 0x74 */ f32 field_0x74; + /* 0x78 */ f32 field_0x78; + /* 0x7C */ f32 field_0x7C; + /* 0x80 */ f32 field_0x80; + /* 0x84 */ f32 field_0x84; + /* 0x88 */ f32 mStickWalkSpeedScale; // scales main stick value to get a target speed + /* 0x8C */ f32 field_0x8C; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ u8 field_0x94[4]; + /* 0x98 */ f32 field_0x98; + /* 0x9C */ f32 field_0x9C; + /* 0xA0 */ f32 field_0xA0; + /* 0xA4 */ f32 field_0xA4; + /* 0xA8 */ f32 field_0xA8; + /* 0xAC */ f32 mStickFlySpeedScale; + /* 0xB0 */ f32 field_0xB0; + /* 0xB4 */ f32 field_0xB4; + /* 0xB8 */ f32 field_0xB8; + /* 0xBC */ f32 mFlyLaunchSpeedY; + /* 0xC0 */ f32 field_0xC0; + /* 0xC4 */ f32 field_0xC4; + /* 0xC8 */ s16 field_0xC8; + /* 0xCA */ s16 mPlayerFlyTimer; + /* 0xCC */ s16 field_0xCC; + /* 0xCE */ s16 field_0xCE; + /* 0xD0 */ s16 field_0xD0; + /* 0xD2 */ s16 field_0xD2; + /* 0xD4 */ s16 field_0xD4; + /* 0xD6 */ s16 field_0xD6; + /* 0xD8 */ s16 field_0xD8; + /* 0xDA */ s16 field_0xDA; + /* 0xDC */ s16 mNpcFlyTimer; + /* 0xDE */ s16 field_0xDE; + /* 0xE0 */ s16 field_0xE0; + /* 0xE2 */ s16 field_0xE2; + /* 0xE4 */ s16 field_0xE4; + /* 0xE6 */ s16 field_0xE6; + /* 0xE8 */ s16 field_0xE8; + /* 0xEA */ s16 field_0xEA; + /* 0xEC */ s16 field_0xEC; + /* 0xEE */ u8 mDamageTimer; + /* 0xEF */ u8 field_0xEF; +}; // Size: 0xF0 + daNpc_Cb1_HIO_c l_HIO; static dCcD_SrcCyl l_cyl_src = { @@ -245,8 +315,13 @@ cPhs_State daNpc_Cb1_c::create() { dComIfGs_setRestartOption(&dComIfGs_getPlayerPriestPos(), dComIfGs_getPlayerPriestRotate(), dComIfGs_getPlayerPriestRoomNo(), 1); } +#if VERSION > VERSION_DEMO checkRestart(1); +#endif } +#if VERSION == VERSION_DEMO + checkRestart(1); +#endif if(dComIfGp_getCb1Player()) { return cPhs_ERROR_e; @@ -860,7 +935,7 @@ BOOL daNpc_Cb1_c::isFlyAction() { /* 00002914-00002A2C .text sowCheck__11daNpc_Cb1_cFv */ BOOL daNpc_Cb1_c::sowCheck() { #if VERSION > VERSION_DEMO - if(!dComIfGp_event_runCheck() && (m4E4 & 1) == 0) + if(!dComIfGp_event_runCheck() && !isReturnLink()) #endif { dAttList_c* list = dComIfGp_getAttention().getActionBtnB(); @@ -992,7 +1067,7 @@ static char* l_cutNameTbl[] = { /* 00002AD8-00002DC8 .text eventProc__11daNpc_Cb1_cFv */ BOOL daNpc_Cb1_c::eventProc() { -#if VERSION > VERSION_DEMO +#if VERSION > VERSION_JPN mAcch.ClrWallNone(); #endif @@ -1005,7 +1080,7 @@ BOOL daNpc_Cb1_c::eventProc() { mDoAud_seStart(JA_SE_CTRL_NPC_TO_LINK); } - m4E4 |= 2; + onEventAccept(); m8DD = -1; } @@ -1030,20 +1105,20 @@ BOOL daNpc_Cb1_c::eventProc() { mPlayerAction = NULL; mNpcAction = NULL; -#if VERSION > VERSION_DEMO +#if VERSION > VERSION_JPN mAcch.SetWallNone(); #endif } - if(m4E4 & 2) { + if(isEventAccept()) { if(dComIfGp_evmng_endCheck(mEventIdx[m8E3])) { dComIfGp_event_reset(); - m4E4 &= ~2; + offEventAccept(); if(m8E3 == 1) { returnLinkPlayer(); - m4E4 &= ~1; + offReturnLink(); } m8E3 = 0xFF; @@ -1216,7 +1291,7 @@ BOOL daNpc_Cb1_c::evActWalk(int staffIdx) { f32* speed_p = dComIfGp_evmng_getMyFloatP(staffIdx, "Speed"); f32* pDist = dComIfGp_evmng_getMyFloatP(staffIdx, "Dist"); - JUT_ASSERT(DEMO_SELECT(2042, 2060), speed_p != NULL); + JUT_ASSERT(VERSION_SELECT(2042, 2055, 2060, 2060), speed_p != NULL); cXyz* pPos = dComIfGp_evmng_getMyXyzP(staffIdx, "Pos"); cXyz temp; @@ -1230,7 +1305,7 @@ BOOL daNpc_Cb1_c::evActWalk(int staffIdx) { cXyz* pOffset = dComIfGp_evmng_getMyXyzP(staffIdx, "Offset"); if(pOffset) { fopAc_ac_c* target = dComIfGp_event_getTalkPartner(); - JUT_ASSERT(DEMO_SELECT(2059, 2077), target != NULL); + JUT_ASSERT(VERSION_SELECT(2059, 2072, 2077, 2077), target != NULL); cLib_offsetPos(&temp, &target->current.pos, fopAcM_searchActorAngleY(this, target), pOffset); temp4 = target->current.pos; @@ -1291,7 +1366,7 @@ BOOL daNpc_Cb1_c::evActToLink(int staffIdx) { f32* speed_p = dComIfGp_evmng_getMyFloatP(staffIdx, "Speed"); f32* dist_p = dComIfGp_evmng_getMyFloatP(staffIdx, "Dist"); - JUT_ASSERT(DEMO_SELECT(2131, 2149), speed_p != NULL && dist_p != NULL); + JUT_ASSERT(VERSION_SELECT(2131, 2144, 2149, 2149), speed_p != NULL && dist_p != NULL); if(fopAcM_searchActorDistanceXZ(this, dComIfGp_getPlayer(0)) < *dist_p) { setAnm(ANM_00); @@ -1390,7 +1465,7 @@ BOOL daNpc_Cb1_c::evActTurn(int staffIdx) { target = dComIfGp_event_getTalkPartner(); } - JUT_ASSERT(DEMO_SELECT(2308, 2326), target != NULL); + JUT_ASSERT(VERSION_SELECT(2308, 2321, 2326, 2326), target != NULL); angle = fopAcM_searchActorAngleY(this, target); } @@ -1415,7 +1490,7 @@ void daNpc_Cb1_c::evInitSow(int staffIdx) { onNut(); int* timer_p = dComIfGp_evmng_getMyIntegerP(staffIdx, "Timer"); - JUT_ASSERT(DEMO_SELECT(2353, 2371), timer_p != NULL); + JUT_ASSERT(VERSION_SELECT(2353, 2366, 2371, 2371), timer_p != NULL); m8EE = *timer_p; } @@ -1462,7 +1537,7 @@ void daNpc_Cb1_c::evInitSetGoal(int staffIdx) { /* 00003E74-00003E98 .text evActSetGoal__11daNpc_Cb1_cFi */ BOOL daNpc_Cb1_c::evActSetGoal(int param_1) { -#if VERSION > VERSION_DEMO +#if VERSION > VERSION_JPN evInitSetGoal(param_1); #endif @@ -1730,8 +1805,6 @@ BOOL daNpc_Cb1_c::talkNpcAction(void*) { /* 000047B0-00004B74 .text carryNpcAction__11daNpc_Cb1_cFPv */ BOOL daNpc_Cb1_c::carryNpcAction(void*) { - /* Nonmatching - regswap */ - if(m8F0 == 0) { cLib_offBit(attention_info.flags, fopAc_Attn_ACTION_CARRY_e); offNpcCallCommand(); @@ -1783,7 +1856,7 @@ BOOL daNpc_Cb1_c::carryNpcAction(void*) { cLib_chaseF(&m904.z, l_HIO.field_0x7C, 1.0f); cLib_chaseAngleS(&m8F4, 0, 0x800); - shape_angle.y += m8F4; + shape_angle.y = pPlayer->shape_angle.y + m8F4; } if(!fopAcM_checkCarryNow(this)) { @@ -2076,7 +2149,7 @@ BOOL daNpc_Cb1_c::jumpNpcAction(void* param_1) { /* 00006518-00006574 .text rescueNpcAction__11daNpc_Cb1_cFPv */ BOOL daNpc_Cb1_c::rescueNpcAction(void*) { -#if VERSION == VERSION_DEMO +#if VERSION <= VERSION_JPN if(m8F0 == 0) { setAnm(ANM_00); fopDwTg_DrawQTo(&draw_tag); @@ -2297,7 +2370,7 @@ BOOL daNpc_Cb1_c::hitPlayerAction(void*) { setAnm(ANM_02); } else if(m8F0 != -1 && mAcch.ChkGroundHit()) { - m4E4 |= 1; + returnLink(); speedF = 0.0f; } @@ -2802,7 +2875,34 @@ BOOL daNpc_Cb1_c::init() { } offMusic(); } -#else +#elif VERSION == VERSION_JPN + onNpcNotChange(); + + if(isTypeKazeBoss() || isTypeForest() || isTypeWaterFall()) { + setNpcAction(&daNpc_Cb1_c::musicNpcAction, NULL); + home.roomNo = -1; + current.roomNo = -1; + gravity = -0.1f; + } else if(isTypeBossDie()) { + daNpc_Cb1_c::ActionFunc_t func = + dComIfGs_isStageBossEnemy(dSv_save_c::STAGE_FW) ? + &daNpc_Cb1_c::waitNpcAction : + &daNpc_Cb1_c::rescueNpcAction; + setNpcAction(func, NULL); + } else if(!isTypeEkaze() && !isTypeKaze() && shipRideCheck()) { + attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0xAF; + attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0xAF; + } else { + if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_1610)) { + offNpcNotChange(); + } + if(isTypeEkaze()) { + onNpcCallCommand(); + } + setNpcAction(&daNpc_Cb1_c::waitNpcAction, NULL); + offMusic(); + } +#else // VERSION_USA or VERSION_PAL static const char* l_eventNameTbl[] = { "cb_rescue", "OPTION_CHAR_END", @@ -2832,7 +2932,7 @@ BOOL daNpc_Cb1_c::init() { gravity = -0.1f; } else if(isTypeBossDie()) { - setNpcAction(dComIfGs_isStageBossEnemy(4) ? &daNpc_Cb1_c::waitNpcAction : &daNpc_Cb1_c::rescueNpcAction, NULL); + setNpcAction(dComIfGs_isStageBossEnemy(dSv_save_c::STAGE_FW) ? &daNpc_Cb1_c::waitNpcAction : &daNpc_Cb1_c::rescueNpcAction, NULL); } else if(!isTypeEkaze() && !isTypeKaze() && shipRideCheck()) { attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0xAF; @@ -2859,7 +2959,7 @@ BOOL daNpc_Cb1_c::init() { mWindCyl.Set(l_wind_cyl_src); mWindCyl.SetStts(&mStts); -#if VERSION == VERSION_DEMO +#if VERSION <= VERSION_JPN static const char* l_eventNameTbl[] = { "cb_rescue", "OPTION_CHAR_END", @@ -2873,6 +2973,9 @@ BOOL daNpc_Cb1_c::init() { } m8E3 = -1; +#if VERSION == VERSION_JPN + m8DD = -1; +#endif eventInfo.setXyCheckCB(&daNpc_Cb1_XyCheckCB); eventInfo.setXyEventCB(&daNpc_Cb1_XyEventCB); @@ -3059,7 +3162,7 @@ BOOL daNpc_Cb1_c::execute() { f32 temp3 = 3.0f; if(!fopAcM_checkCarryNow(this) && !isShipRide()) { - if(checkNowPosMove("Cb1") && !(m4E4 & 1)) { + if(checkNowPosMove("Cb1") && !isReturnLink()) { f32 temp4 = current.pos.y; fopAcM_posMoveF(this, mStts.GetCCMoveP()); m900 += temp4 - current.pos.y; @@ -3134,7 +3237,9 @@ BOOL daNpc_Cb1_c::execute() { if(checkNowPosMove("Cb1")) { playAnm(); } +#endif +#if VERSION > VERSION_JPN if(dComIfGp_getPlayer(0) == this) { dComIfGp_setDoStatus(dActStts_BLANK_e); dComIfGp_setAStatus(dActStts_HIDDEN_e); @@ -3167,11 +3272,11 @@ BOOL daNpc_Cb1_c::execute() { cLib_addCalcPosXZ(&m88C, temp2, 0.5f, temp3, 0.5f); if(dComIfGp_getPlayer(0) == this) { -#if VERSION == VERSION_DEMO +#if VERSION <= VERSION_JPN int r4 = dActStts_BLANK_e; dComIfGp_setDoStatus(r4); dComIfGp_setAStatus(dActStts_HIDDEN_e); - if(mAcch.ChkGroundHit()) { + if(mAcch.ChkGroundHit() != false) { r4 = dActStts_RETURN_e; } dComIfGp_setRStatusForce(r4); @@ -3183,25 +3288,25 @@ BOOL daNpc_Cb1_c::execute() { fopAcM_SetStatusMap(this, 0x12); - if(m4E4 & 1) { + if(isReturnLink()) { m8DD = 1; } else { if(isNoCarryAction()) { setPlayerAction(&daNpc_Cb1_c::carryPlayerAction, NULL); - m4E4 |= 1; + returnLink(); } #if VERSION == VERSION_DEMO playerAction(NULL); if(dComIfGp_getRStatusForce() == 7 && !dComIfGp_event_runCheck() && (CPad_CHECK_TRIG_R(0) || CPad_CHECK_TRIG_START(0))) { - m4E4 |= 1; + returnLink(); } else #else if(!dComIfGp_event_runCheck() && dComIfGp_getRStatusForce() == 7 && !dComIfGp_event_runCheck() && (CPad_CHECK_TRIG_R(0) || CPad_CHECK_TRIG_START(0))) { - m4E4 |= 1; + returnLink(); } playerAction(NULL); diff --git a/src/d/actor/d_a_npc_ji1.cpp b/src/d/actor/d_a_npc_ji1.cpp index 0dbe3e6ca..491b4bf7e 100644 --- a/src/d/actor/d_a_npc_ji1.cpp +++ b/src/d/actor/d_a_npc_ji1.cpp @@ -3319,7 +3319,7 @@ void daNpc_Ji1_c::battleSubActionNockBackInit(int param_1) { /* 0000A5FC-0000A744 .text battleSubActionNockBack__11daNpc_Ji1_cFv */ BOOL daNpc_Ji1_c::battleSubActionNockBack() { - /* Nonmatching - load order */ + /* Nonmatching - retail-only 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)) { diff --git a/src/d/actor/d_a_obj_ikada.cpp b/src/d/actor/d_a_obj_ikada.cpp index cb873adf5..abfcef598 100644 --- a/src/d/actor/d_a_obj_ikada.cpp +++ b/src/d/actor/d_a_obj_ikada.cpp @@ -238,14 +238,10 @@ void daObj_Ikada_c::setCollision() { /* 00000AA4-00000DFC .text checkTgHit__13daObj_Ikada_cFv */ bool daObj_Ikada_c::checkTgHit() { - cCcD_Obj* sp64; - cXyz sp58; - cXyz sp4C; - cXyz sp40; daPy_py_c* player = daPy_getPlayerActorClass(); if (player->checkHammerQuake()) { - sp58 = player->getSwordTopPos(); + cXyz sp58 = player->getSwordTopPos(); f32 abs = (sp58 - current.pos).absXZ(); if (abs < 1000.0f && mbIsLinkRiding) { mLinkRideRockAmpl = 200; @@ -255,10 +251,14 @@ bool daObj_Ikada_c::checkTgHit() { } mStts.Move(); + + cXyz sp4C; + cXyz sp40; + CcAtInfo atInfo; if (cLib_calcTimer(&m12E4) == 0) { cCcD_Obj* pcVar3 = mSph.GetTgHitObj(); sp4C = *mSph.GetTgHitPosP(); - sp64 = mSph.GetTgHitObj(); + atInfo.mpObj = mSph.GetTgHitObj(); if (pcVar3 == NULL) { return false; } @@ -357,6 +357,7 @@ void daObj_Ikada_c::createWave() { /* 000012EC-00001528 .text setWave__13daObj_Ikada_cFv */ void daObj_Ikada_c::setWave() { + /* Nonmatching */ f32 fVar2 = l_HIO.mTrackVel; f32 fVar1 = l_HIO.mWaveVelFade; f32 target = l_HIO.mSplashScaleMax; @@ -445,6 +446,7 @@ void daObj_Ikada_c::incRopeCnt(int arg1, int arg2) { void daObj_Ikada_c::setRopePos() { static cXyz ripple_scale(0.6f, 0.6f, 0.6f); + int i; cXyz spBC; cXyz spB0; cXyz spA4; @@ -475,7 +477,7 @@ void daObj_Ikada_c::setRopePos() { pcVar6--; pcVar7--; - for (s32 i = m07D8 - 2; i >= 0; i--, pcVar6--, pcVar7--) { + for (i = m07D8 - 2; i >= 0; i--, pcVar6--, pcVar7--) { *pcVar6 = pcVar6[1] + spB0; *pcVar7 = cXyz::Zero; } @@ -483,7 +485,7 @@ void daObj_Ikada_c::setRopePos() { pcVar6--; pcVar7--; - for (s32 i = m07D8 - 2; i >= 0; i--, pcVar6--, pcVar7--) { + for (i = m07D8 - 2; i >= 0; i--, pcVar6--, pcVar7--) { spBC = *pcVar6; if (pcVar6->y < dLib_getWaterY(*pcVar6, mObjAcch)) { *pcVar7 *= 0.6f; @@ -541,7 +543,7 @@ void daObj_Ikada_c::setRopePos() { if (fVar1 > pcVar7->y) { cXyz* ptr = pcVar7; - for (s32 i = m07D8; i > 0; i--, pcVar7++) { + for (i = m07D8; i > 0; i--, pcVar7++) { if (pcVar7->y <= fVar1) { ptr = pcVar7; } @@ -1156,9 +1158,9 @@ bool daObj_Ikada_c::_execute() { f32 s = scale.x; s32 uVar5 = fopAcM_checkCullingBox(mpModel->getBaseTRMtx(), s * -1000.0f, s * -50.0f, s * -1000.0f, s * 1000.0f, s * 1000.0f, s * 1000.0f); if (speedF <= 2.0f || uVar5 & 0xFF || fopAcM_searchPlayerDistanceXZ(this) > 18000.0f) { - mWaveRCallback.remove(); - mWaveLCallback.remove(); - mSplashCallBack.remove(); + mWaveRCallback.end(); + mWaveLCallback.end(); + mSplashCallBack.end(); mTrackCallBack.stop(); } else { setWave(); @@ -1273,18 +1275,18 @@ bool daObj_Ikada_c::_draw() { /* 00003EE0-00003F34 .text getArg__13daObj_Ikada_cFv */ void daObj_Ikada_c::getArg() { - u32 uVar2 = fopAcM_GetParam(this); - u32 sVar1 = home.angle.x; + u32 param = fopAcM_GetParam(this); + u32 prmX = home.angle.x; - mType = uVar2 & 0xF; + mType = fopAcM_GetParamBit(param, 0, 4); if (mType != 4) { - m0294 = (uVar2 >> 4) & 0x3F; - m0298 = (uVar2 >> 10) & 0xFF; - m02A0 = (uVar2 >> 18) & 0xFF; - m029C = (sVar1 >> 0) & 0xFF; - mPathId = (sVar1 >> 8) & 0xFF; + m0294 = fopAcM_GetParamBit(param, 4, 6); + m0298 = fopAcM_GetParamBit(param, 10, 8); + m02A0 = fopAcM_GetParamBit(param, 18, 8); + m029C = fopAcM_GetParamBit(prmX, 0, 8); + mPathId = fopAcM_GetParamBit(prmX, 8, 8); } else { - mPathId = (uVar2 >> 0x10) & 0xFF; + mPathId = fopAcM_GetParamBit(param, 16, 8); } } diff --git a/src/d/actor/d_a_ship.cpp b/src/d/actor/d_a_ship.cpp index d300d8358..0d5d5497e 100644 --- a/src/d/actor/d_a_ship.cpp +++ b/src/d/actor/d_a_ship.cpp @@ -249,12 +249,12 @@ static BOOL daShip_headJointCallBack1(J3DNode* node, int calcTiming) { /* 00000628-00000AD8 .text draw__8daShip_cFv */ BOOL daShip_c::draw() { static GXColor rope_color = {0xC8, 0x96, 0x32, 0xFF}; - J3DModel* model = mpBodyAnm->getModel(); - J3DModel* model_00 = mpHeadAnm->getModel(); + J3DModel* bodyModel = mpBodyAnm->getModel(); + J3DModel* headModel = mpHeadAnm->getModel(); g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr); - g_env_light.setLightTevColorType(model, &tevStr); - g_env_light.setLightTevColorType(model_00, &tevStr); + g_env_light.setLightTevColorType(bodyModel, &tevStr); + g_env_light.setLightTevColorType(headModel, &tevStr); dComIfGd_setListP1(); @@ -264,6 +264,7 @@ BOOL daShip_c::draw() { cXyz local_5c(current.pos.x, current.pos.y + m03D8 + 5.0f, current.pos.z); + // Fakematch, causes regalloc for demo f32 x = local_5c.x; f32 y = local_5c.y; f32 z = local_5c.z; @@ -287,7 +288,7 @@ BOOL daShip_c::draw() { dComIfGp_getAttention().Lockon() || daPy_getPlayerLinkActorClass()->getBodyAngleX() > -0x1000 ) { - mDoExt_modelEntryDL(model); + mDoExt_modelEntryDL(bodyModel); } if ( @@ -296,7 +297,7 @@ BOOL daShip_c::draw() { !dComIfGp_checkCameraAttentionStatus(0, dCamAttnStts_SUBJECT_e | dCamAttnStts_00000020_e) ) { offStateFlg(daSFLG_HEAD_NO_DRAW_e); - mDoExt_modelEntryDL(model_00); + mDoExt_modelEntryDL(headModel); } else { onStateFlg(daSFLG_HEAD_NO_DRAW_e); @@ -319,12 +320,11 @@ BOOL daShip_c::draw() { dComIfGd_setList(); - mShadowId = dComIfGd_setShadow(mShadowId, 0, model, ¤t.pos, 1500.0f, 250.0f, - current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, - &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); - + mShadowId = dComIfGd_setShadow(mShadowId, 0, bodyModel, ¤t.pos, 1500.0f, 250.0f, + current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr); + if (mShadowId != 0) { - dComIfGd_addRealShadow(mShadowId, model_00); + dComIfGd_addRealShadow(mShadowId, headModel); if (mPart == PART_CANNON_e) { dComIfGd_addRealShadow(mShadowId, mpCannonModel); } @@ -2115,10 +2115,6 @@ BOOL daShip_c::procZevDemo_init() { /* 00005574-00006310 .text procZevDemo__8daShip_cFv */ BOOL daShip_c::procZevDemo() { - float fVar3; - short sVar5; - short sVar15; - float fVar17; cXyz local_7c; cXyz local_70; cXyz local_64; @@ -2166,6 +2162,7 @@ BOOL daShip_c::procZevDemo() { } if (m0351 == DEMO_INIT_e || m0351 == DEMO_OPEN_e) { + s16 sVar15; if (angleP) { sVar15 = (s16)*angleP; } @@ -2225,14 +2222,15 @@ BOOL daShip_c::procZevDemo() { else { local_70 = current.pos - *posP; - fVar17 = local_70.absXZ(); + f32 fVar17 = local_70.absXZ(); if (!dComIfGp_evmng_getMyFloatP(mEvtStaffId, "rad")) { JUT_ASSERT(DEMO_SELECT(3722, 3741), 0); } - fVar3 = *dComIfGp_evmng_getMyFloatP(mEvtStaffId, "rad"); + f32 fVar3 = *dComIfGp_evmng_getMyFloatP(mEvtStaffId, "rad"); + s16 sVar15; if (fVar17 < 0.1f) { sVar15 = 0x4000; local_64.set(posP->x, posP->y, posP->z + fVar3); @@ -2247,7 +2245,7 @@ BOOL daShip_c::procZevDemo() { local_7c = local_64 - current.pos; } - fVar17 = local_7c.absXZ(); + f32 fVar17 = local_7c.absXZ(); if (fVar17 < 10.0f) { speedF = 0.0f; @@ -2269,6 +2267,7 @@ BOOL daShip_c::procZevDemo() { } else { speedF = fVar17 * 0.2f; + f32 fVar3; if (speedP) { fVar3 = *speedP; } @@ -2281,11 +2280,11 @@ BOOL daShip_c::procZevDemo() { } } if (fVar17 > 1.0f) { - sVar15 = shape_angle.y; + s16 sVar15 = shape_angle.y; cLib_addCalcAngleS(&shape_angle.y, cM_atan2s(local_7c.x, local_7c.z), 3, 0x2000, 0x80); current.angle.y = shape_angle.y; - sVar5 = shape_angle.y - sVar15; + s16 sVar5 = shape_angle.y - sVar15; if (sVar5 > 0) { sVar5 = 0x2000; } @@ -2335,6 +2334,7 @@ BOOL daShip_c::procZevDemo() { fileIndex = SHIP_BCK_FN_LOOK_L; } + f32 fVar17; if (partP && (s32)*partP == 2) { fVar17 = -1.0f; } @@ -2642,7 +2642,6 @@ BOOL daShip_c::procTornadoUp_init() { /* 00006DE0-00006FDC .text procTornadoUp__8daShip_cFv */ BOOL daShip_c::procTornadoUp() { - int iVar1; daTornado_c* tornadoActor = mTornadoActor; cLib_addCalc(¤t.pos.x, tornadoActor->getJointXPos(m037A), 0.5f, 80.0f, 20.0f); @@ -2668,11 +2667,11 @@ BOOL daShip_c::procTornadoUp() { if (m03A6 == 0 && current.pos.y > tornadoActor->current.pos.y + 5000.0f) { m03A6 = 1; - iVar1 = (s32)cM_rndF(8.0f) + 0xC6; - if (iVar1 >= 0xCE) { - iVar1 = 0xCD; + int exitId = (s32)cM_rndF(8.0f) + 0xC6; + if (exitId >= 0xCE) { + exitId = 0xCD; } - dStage_changeScene(iVar1, 0.0f, 0, 0xFF); + dStage_changeScene(exitId, 0.0f, 0, 0xFF); } return TRUE; @@ -2977,16 +2976,16 @@ void daShip_c::setEffectData(float param_1, short param_2) { GXColor diff; if (checkStateFlg(daSFLG_FLY_e) && current.pos.y - 40.0f > param_1) { - mWaveR.mState = 1; - mWaveL.mState = 1; - mSplash.mState = 1; - mTrack.mState = 1; + mWaveR.stop(); + mWaveL.stop(); + mSplash.stop(); + mTrack.stop(); } else { if (speedF <= 0.0f) { - mWaveR.mState = 1; - mWaveL.mState = 1; - mSplash.mState = 1; + mWaveR.stop(); + mWaveL.stop(); + mSplash.stop(); } } @@ -3153,21 +3152,9 @@ void daShip_c::incRopeCnt(int lengthChange, int minSegmentLimit) { /* 0000882C-00009314 .text setRopePos__8daShip_cFv */ void daShip_c::setRopePos() { - /* Nonmatching - regalloc */ - float fVar1; - float fVar2; - float fVar17; - - cXyz* r4; - int iVar11; - short sVar14; - int sVar12; - JPABaseEmitter* emitter; - cXyz* r3; + int i; cXyz* ropeSegments; cXyz* currentRopeSegment; - short currentRopeSegmentIndex; - MtxP pMVar5; cXyz spF8; cXyz spEC; @@ -3180,7 +3167,7 @@ void daShip_c::setRopePos() { static Vec rope_offset = {160.0f, 0.0f, 0.0f}; static Vec water_drop_scale = {1.5f, 1.0f, 1.5f}; - currentRopeSegmentIndex = mRopeCnt; + s16 currentRopeSegmentIndex = mRopeCnt; if (currentRopeSegmentIndex == 0) { currentRopeSegment = mRopeLine.getPos(0); @@ -3207,7 +3194,7 @@ void daShip_c::setRopePos() { currentRopeSegment--; ropeSegments--; - for (int i = mRopeCnt + -2; i >= 0; i--, currentRopeSegment--, ropeSegments--) { + for (i = mRopeCnt + -2; i >= 0; i--, currentRopeSegment--, ropeSegments--) { currentRopeSegment->set(*(currentRopeSegment + 1) + spEC); ropeSegments->set(cXyz::Zero); } @@ -3216,7 +3203,7 @@ void daShip_c::setRopePos() { currentRopeSegment--; ropeSegments--; - for (int i = mRopeCnt + -2; i >= 0; i--, currentRopeSegment--, ropeSegments--) { + for (i = mRopeCnt + -2; i >= 0; i--, currentRopeSegment--, ropeSegments--) { spF8 = *currentRopeSegment; if (currentRopeSegment->y < m03F4) { @@ -3232,7 +3219,7 @@ void daShip_c::setRopePos() { spEC.set(*currentRopeSegment - *(currentRopeSegment + 1)); - fVar17 = std::sqrtf(spEC.abs2()); + f32 fVar17 = std::sqrtf(spEC.abs2()); if (fVar17 < 0.01f) { currentRopeSegment->set(*(currentRopeSegment + 1) + l_rope_base_vec); @@ -3244,7 +3231,7 @@ void daShip_c::setRopePos() { *ropeSegments += (*currentRopeSegment - spF8) * 0.05f; } if (mRopeCnt == 20 && checkStateFlg(daSFLG_UNK10000000_e)) { - r4 = mRopeLine.getPos(0); + cXyz* r4 = mRopeLine.getPos(0); mDoMtx_multVecZero(mpSalvageArmModel->getAnmMtx(1), &spE0); spE0 -= *r4; @@ -3262,7 +3249,7 @@ void daShip_c::setRopePos() { f2 * cM_scos(shape_angle.y) ); - for (int i = 0; i < 20; i++, currentRopeSegment++) { + for (i = 0; i < 20; i++, currentRopeSegment++) { *currentRopeSegment += spD0; spD0 *= 0.95f; } @@ -3274,24 +3261,24 @@ void daShip_c::setRopePos() { currentRopeSegment = mRopeLine.getPos(0); + s16 sVar14; + s16 sVar12; if (mRopeCnt > 2) { spC8 = *currentRopeSegment - *(currentRopeSegment + 1); sVar14 = 0; sVar12 = 0; } else { - pMVar5 = mpSalvageArmModel->getAnmMtx(1); spC8.set( - currentRopeSegment->x - pMVar5[0][3], - currentRopeSegment->y - pMVar5[1][3], - currentRopeSegment->z - pMVar5[2][3] + currentRopeSegment->x - mpSalvageArmModel->getAnmMtx(1)[0][3], + currentRopeSegment->y - mpSalvageArmModel->getAnmMtx(1)[1][3], + currentRopeSegment->z - mpSalvageArmModel->getAnmMtx(1)[2][3] ); sVar14 = 0x7fff; - iVar11 = 0x8000 - (m0398 * 2); - sVar12 = iVar11 - (0x8000 - mCraneBaseAngle) * ((float)m0398 / (float)mCraneBaseAngle); + sVar12 = (0x8000 - (m0398 * 2)) - (0x8000 - mCraneBaseAngle) * ((float)m0398 / (float)mCraneBaseAngle); } - fVar17 = mpLinkModel->getBaseTRMtx()[1][3]; + f32 fVar17 = mpLinkModel->getBaseTRMtx()[1][3]; f32 sin = cM_ssin(shape_angle.y); f32 cos = cM_scos(shape_angle.y); @@ -3300,11 +3287,11 @@ void daShip_c::setRopePos() { spBC.z = sin * spC8.x + cos * spC8.z; mDoMtx_trans(mDoMtx_stack_c::get(), currentRopeSegment->x, currentRopeSegment->y, currentRopeSegment->z); - fVar1 = std::sqrtf(spBC.y * spBC.y + spBC.z * spBC.z); - s16 z = sVar12 + cM_atan2s(-spBC.x, fVar1); - s16 y = shape_angle.y; - s16 x = sVar14 + cM_atan2s(spBC.z, spBC.y); - mDoMtx_stack_c::ZXYrotM(x, y, z); + mDoMtx_stack_c::ZXYrotM( + sVar14 + cM_atan2s(spBC.z, spBC.y), + shape_angle.y, + sVar12 + cM_atan2s(-spBC.x, std::sqrtf(spBC.y * spBC.y + spBC.z * spBC.z)) + ); mDoMtx_stack_c::XrotM(-0x4000); if (m0392 == SHIP_BCK_FN_MAST_ON2) { @@ -3315,19 +3302,20 @@ void daShip_c::setRopePos() { mpLinkModel->setBaseTRMtx(mDoMtx_stack_c::get()); - fVar1 = currentRopeSegment->y; + f32 fVar1 = currentRopeSegment->y; getMaxWaterY(currentRopeSegment); - fVar2 = currentRopeSegment->y; + f32 fVar2 = currentRopeSegment->y; currentRopeSegment->y = fVar1; if (fVar2 > currentRopeSegment->y) { ropeSegments = currentRopeSegment; + cXyz* r3; r3 = currentRopeSegment; - for (int i = 0; i < mRopeCnt; i++, ropeSegments++) { + for (i = 0; i < mRopeCnt; i++, ropeSegments++) { if (ropeSegments->y <= fVar2) { r3 = ropeSegments; } @@ -3363,7 +3351,7 @@ void daShip_c::setRopePos() { if (m19AC.getEmitter() == NULL) { ropeSegments = mRopeLine.getPos(0); - emitter = dComIfGp_particle_setP1(dPa_name::ID_IT_JN_LK_NURE_POTA00, ropeSegments, NULL, NULL, 0xFF, &m19AC); + JPABaseEmitter* emitter = dComIfGp_particle_setP1(dPa_name::ID_IT_JN_LK_NURE_POTA00, ropeSegments, NULL, NULL, 0xFF, &m19AC); if(emitter) { emitter->setGlobalParticleScale(1.5f, 1.5f); @@ -3377,7 +3365,7 @@ void daShip_c::setRopePos() { dComIfGp_getVibration().StartShock(3, 1, cXyz(0.0f, 1.0f, 0.0f)); if (m19C0.getEmitter() == NULL) { - emitter = dComIfGp_particle_setShipTail(dPa_name::ID_AK_JN_HAMON00, &m1074, NULL, &ripple_scale, 0xFF, &m19C0); + JPABaseEmitter* emitter = dComIfGp_particle_setShipTail(dPa_name::ID_AK_JN_HAMON00, &m1074, NULL, &ripple_scale, 0xFF, &m19C0); if (emitter) { emitter->setVolumeSize(30); @@ -3677,7 +3665,7 @@ BOOL daShip_c::execute() { procCraneUp_init(); } - short sVar26; + s16 sVar26; sVar26 = m0366; if (mAnmTransform) { @@ -3717,7 +3705,7 @@ BOOL daShip_c::execute() { !dComIfGp_event_runCheck() ) { if (mTornadoActor) { - short sVar16; + s16 sVar16; sVar16 = shape_angle.y; cLib_addCalcAngleS(&shape_angle.y, m040C * 10430.378f + 20480.0f, 5, 0x2000, 0x200); setControllAngle(getAimControllAngle(sVar16)); @@ -3769,7 +3757,7 @@ BOOL daShip_c::execute() { cLib_chaseS(&m03B8, 0x4E8, 0x80); } - float fVar4; + f32 fVar4; if (mCurMode != 12 && mCurMode != 15) { if (mCurMode != 7 && mCurMode != MODE_CRANE_UP_e) { if ( @@ -3868,8 +3856,7 @@ BOOL daShip_c::execute() { } if (r23) { cXyz sp114(current.pos - old.pos); - f32 dVar27; - dVar27 = sp114.absXZ(); + f32 dVar27 = sp114.absXZ(); if (dVar27 > 1.0f) { prev_speedF = speedF / dVar27; current.pos.x = old.pos.x + sp114.x * prev_speedF; @@ -3946,8 +3933,8 @@ BOOL daShip_c::execute() { f32 diff = m03F4 - current.pos.y; - mTrack.mBaseY = m03F4; - mTrack.mMinY = m03F8; + mTrack.setWaterY(m03F4); + mTrack.setWaterFlatY(m03F8); s16 sp12; s16 sp10; @@ -4092,11 +4079,7 @@ BOOL daShip_c::execute() { grid->m2200 = 1.0f - (spD8.abs() / 265.0f); // No idea why this is generating an extra lwz instruction for loading mpGrid when the instructions above don't if (mTornadoActor) { -#if VERSION == VERSION_DEMO - mpGrid->force_calc_wind_rel_angle(REG4_S(5)); -#else - mpGrid->force_calc_wind_rel_angle(0x3000); -#endif + mpGrid->force_calc_wind_rel_angle(DEMO_SELECT(REG4_S(5), 0x3000)); } } @@ -4106,10 +4089,10 @@ BOOL daShip_c::execute() { iVar6 = abs(iVar23); iVar23 *= m0366; - if (iVar23 > 0 && (float)iVar6 > 420.00003f) { + if (iVar23 > 0 && (f32)iVar6 > 420.00003f) { seStart(JA_SE_LK_SHIP_RUDDER_OUT, &mTillerTopPos); } - else if (iVar23 < 0 && (float)iVar6 > 525.0f) { + else if (iVar23 < 0 && (f32)iVar6 > 525.0f) { seStart(JA_SE_LK_SHIP_RUDDER_OUT, &mTillerTopPos); } @@ -4125,7 +4108,7 @@ BOOL daShip_c::execute() { } // This should probably use the mDoMtx_multVecZero inline, but it's not getting inlined - // mDoMtx_multVecZero(mModel2->getAnmMtx(16), &eyePos); + // mDoMtx_multVecZero(model2->getAnmMtx(16), &eyePos); MtxP jnt_mtx; jnt_mtx = model2->getAnmMtx(16); eyePos.x = jnt_mtx[0][3]; @@ -4318,16 +4301,16 @@ BOOL daShip_c::execute() { mFwdVel += (m1044.x * cM_ssin(current.angle.y) + m1044.z * cM_scos(current.angle.y)); if (std::fabsf(mFwdVel) <= 0.01f || prev_fwdvel * mFwdVel < 0.0f || mFwdVel * speedF < 0.0f) { - mWaveL.mState = 1; - mWaveR.mState = 1; - mSplash.mState = 1; - mTrack.mState = 1; + mWaveL.stop(); + mWaveR.stop(); + mSplash.stop(); + mTrack.stop(); } setEffectData(m03F4, sp10); - float sin = cM_ssin(shape_angle.y); - float cos = cM_scos(shape_angle.y); + f32 sin = cM_ssin(shape_angle.y); + f32 cos = cM_scos(shape_angle.y); dCcD_Cyl* cyl = mCyl; @@ -4771,9 +4754,9 @@ cPhs_State daShip_c::create() { dComIfGp_setShipActor(this); - mTrack.mMinVel = 3.0f; - mWaveL.mMaxParticleVelocity = 40.0f; - mWaveR.mMaxParticleVelocity = 40.0f; + mTrack.setLimitSpeed(3.0f); + mWaveL.setMaxSpeed(40.0f); + mWaveR.setMaxSpeed(40.0f); m19C0.mRate = 0.0f; if (dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_SEA_e) { diff --git a/src/d/actor/d_a_stone2.cpp b/src/d/actor/d_a_stone2.cpp index 48011d926..a661e9ee6 100644 --- a/src/d/actor/d_a_stone2.cpp +++ b/src/d/actor/d_a_stone2.cpp @@ -89,7 +89,7 @@ void Act_c::prmZ_init() { if (m656) { return; } - m652 = home.angle.z; + mPrmZ = home.angle.z; m656 = true; home.angle.z = 0; current.angle.z = 0; @@ -163,7 +163,7 @@ BOOL Act_c::Create() { m6A9 = 0; m65A = 2; mode_wait_init(); - m650 = dComIfGp_evmng_getEventIdx(NULL, m652); + m650 = dComIfGp_evmng_getEventIdx(NULL, prmZ_get_evId()); demo_non_init(); fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); init_mtx(); @@ -622,7 +622,7 @@ bool Act_c::mode_proc_call() { } if (m648 == 3) { - if (prmZ_get_evId() == 0 && m65C.isEnd()) { + if (m64C == 0 && m65C.isEnd()) { BOOL tmp; if (m6A8) { tmp = m688.isEnd(); @@ -650,9 +650,8 @@ void Act_c::demo_non() { /* 000021AC-00002214 .text demo_req_init__Q28daStone25Act_cFv */ void Act_c::demo_req_init() { - if (prmZ_get_evId() == 0) { - u8 evno = m652; - fopAcM_orderOtherEventId(this, m650, evno); + if (m64C == 0) { + fopAcM_orderOtherEventId(this, m650, prmZ_get_evId()); eventInfo.onCondition(dEvtCmd_INDEMO_e); m64C = 1; } @@ -664,8 +663,7 @@ void Act_c::demo_req() { if (eventInfo.checkCommandDemoAccrpt()) { demo_run_init(); } else { - u8 evno = m652; - fopAcM_orderOtherEventId(this, m650, evno); + fopAcM_orderOtherEventId(this, m650, prmZ_get_evId()); eventInfo.onCondition(dEvtCmd_INDEMO_e); } } else { @@ -694,7 +692,7 @@ void Act_c::demo_proc_call() { &Act_c::demo_req, &Act_c::demo_run, }; - (this->*demo_proc[prmZ_get_evId()])(); + (this->*demo_proc[m64C])(); } /* 000023BC-00002574 .text Execute__Q28daStone25Act_cFPPA3_A4_f */ diff --git a/src/d/actor/d_a_warphr.cpp b/src/d/actor/d_a_warphr.cpp index dbea48362..d2c9b3dc6 100644 --- a/src/d/actor/d_a_warphr.cpp +++ b/src/d/actor/d_a_warphr.cpp @@ -394,7 +394,7 @@ void daWarphr_c::set_end_anim() { /* 000012F8-0000134C .text get_return_count__10daWarphr_cFv */ s32 daWarphr_c::get_return_count() { - if (!dComIfGs_isStageBossEnemy(2)) { + if (!dComIfGs_isStageBossEnemy(dSv_save_c::STAGE_FF)) { return 0; }