From 431943a893201e6f2e03d2895b26c6c491512c58 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Thu, 29 May 2025 15:41:38 -0400 Subject: [PATCH] Cleanup, demo work, and match daNpcPeople_c::getMsg on retail --- configure.py | 8 +- .../JSystem/J3DGraphAnimator/J3DAnimation.h | 14 +- include/JSystem/J3DGraphBase/J3DSys.h | 12 +- include/d/actor/d_a_branch.h | 2 +- include/d/actor/d_a_ship.h | 16 +- include/f_op/f_op_actor_mng.h | 2 +- src/JSystem/J3DGraphAnimator/J3DJoint.cpp | 2 +- src/JSystem/J3DGraphAnimator/J3DModel.cpp | 20 +- .../J3DGraphAnimator/J3DVisibility.cpp | 4 +- src/JSystem/J3DGraphBase/J3DMatBlock.cpp | 2 +- src/JSystem/J3DGraphBase/J3DMaterial.cpp | 12 +- src/JSystem/J3DGraphBase/J3DSys.cpp | 2 +- src/JSystem/JAudio/JASTrack.cpp | 3 +- src/d/actor/d_a_bk.cpp | 10 +- src/d/actor/d_a_branch.cpp | 30 ++- src/d/actor/d_a_hys.cpp | 2 +- src/d/actor/d_a_msw.cpp | 94 ++++--- src/d/actor/d_a_npc_bs1.cpp | 5 +- src/d/actor/d_a_npc_btsw2.cpp | 2 +- src/d/actor/d_a_npc_md.cpp | 2 +- src/d/actor/d_a_npc_people.cpp | 34 ++- src/d/actor/d_a_npc_photo.cpp | 2 +- src/d/actor/d_a_npc_roten.cpp | 2 +- src/d/actor/d_a_obj_figure.cpp | 2 +- src/d/actor/d_a_obj_mknjd.cpp | 2 +- src/d/actor/d_a_obj_pbco.cpp | 2 +- src/d/actor/d_a_obj_swpush.cpp | 2 +- src/d/actor/d_a_player_main.cpp | 2 +- src/d/actor/d_a_ship.cpp | 236 ++++++++++-------- 29 files changed, 301 insertions(+), 227 deletions(-) diff --git a/configure.py b/configure.py index e72fc4673..4d648abc4 100755 --- a/configure.py +++ b/configure.py @@ -467,7 +467,7 @@ config.libs = [ Object(Matching, "d/d_a_itembase_static.cpp"), Object(Matching, "d/d_a_item_static.cpp"), Object(Matching, "d/d_a_shop_item_static.cpp"), - Object(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d/d_a_race_item_static.cpp"), + Object(Matching, "d/d_a_race_item_static.cpp"), Object(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d/d_a_leaflift_static.cpp"), Object(NonMatching, "d/d_demo.cpp"), Object(Equivalent, "d/d_door.cpp", extra_cflags=['-pragma "nosyminline on"']), # weak func order @@ -599,7 +599,7 @@ config.libs = [ Object(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d/d_s_room.cpp", extra_cflags=['-pragma "nosyminline on"']), Object(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d/d_s_title.cpp"), Object(NonMatching, "d/d_scope.cpp"), - Object(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d/d_throwstone.cpp"), + Object(Matching, "d/d_throwstone.cpp"), Object(Matching, "d/d_timer.cpp"), Object(NonMatching, "d/d_water_mark.cpp"), Object(Matching, "d/d_wind_arrow.cpp"), @@ -1347,7 +1347,7 @@ config.libs = [ ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_att", extra_cflags=['-pragma "nosyminline on"']), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_bflower", extra_cflags=['-pragma "nosyminline on"']), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_bita", extra_cflags=['-pragma "nosyminline on"']), - ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_branch"), + ActorRel(Matching, "d_a_branch"), ActorRel(NonMatching, "d_a_bridge"), ActorRel(NonMatching, "d_a_coming2"), ActorRel(NonMatching, "d_a_coming3"), @@ -1382,7 +1382,7 @@ config.libs = [ ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_magma"), ActorRel(NonMatching, "d_a_majuu_flag"), ActorRel(NonMatching, "d_a_mdoor"), - ActorRel(NonMatching, "d_a_msw"), + ActorRel(MatchingFor("D44J01"), "d_a_msw", extra_cflags=['-pragma "nosyminline on"']), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_mtoge"), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_AjavW", extra_cflags=['-pragma "nosyminline on"']), ActorRel(Matching, "d_a_obj_Ygush00", extra_cflags=['-pragma "nosyminline on"']), diff --git a/include/JSystem/J3DGraphAnimator/J3DAnimation.h b/include/JSystem/J3DGraphAnimator/J3DAnimation.h index 67be0f45e..596ffc38e 100644 --- a/include/JSystem/J3DGraphAnimator/J3DAnimation.h +++ b/include/JSystem/J3DGraphAnimator/J3DAnimation.h @@ -801,16 +801,16 @@ private: class J3DFrameCtrl { public: enum Attribute_e { - EMode_NONE, - EMode_RESET, - EMode_LOOP, - EMode_REVERSE, - EMode_LOOP_REVERSE, + /* 0x0 */ EMode_NONE, + /* 0x1 */ EMode_RESET, + /* 0x2 */ EMode_LOOP, + /* 0x3 */ EMode_REVERSE, + /* 0x4 */ EMode_LOOP_REVERSE, }; enum State_e { - STATE_STOP_E = 0x1, - STATE_LOOP_E = 0x2, + /* 0x1 */ STATE_STOP_E = 0x1, + /* 0x2 */ STATE_LOOP_E = 0x2, }; J3DFrameCtrl() { this->init(0); } diff --git a/include/JSystem/J3DGraphBase/J3DSys.h b/include/JSystem/J3DGraphBase/J3DSys.h index 9c98f9120..58e9bac9f 100644 --- a/include/JSystem/J3DGraphBase/J3DSys.h +++ b/include/JSystem/J3DGraphBase/J3DSys.h @@ -32,9 +32,11 @@ struct J3DTexCoordScaleInfo { }; enum J3DSysFlag { - J3DSysFlag_SkinPosCpu = 0x00000004, - J3DSysFlag_SkinNrmCpu = 0x00000008, - J3DSysFlag_PostTexMtx = 0x40000000, + J3DSysFlag_UNK2 = 0x00000002, + J3DSysFlag_SkinPosCpu = 0x00000004, + J3DSysFlag_SkinNrmCpu = 0x00000008, + J3DSysFlag_PostTexMtx = 0x40000000, + J3DSysFlag_UNK80000000 = 0x80000000, }; struct J3DSys { @@ -75,10 +77,8 @@ public: void setNBTScale(Vec* scale) { mNBTScale = scale; } void onFlag(u32 flag) { mFlags |= flag; } - void offFlag(u32 flag) { mFlags &= ~flag; } - - bool checkFlag(u32 flag) { return mFlags & flag; } + bool checkFlag(u32 flag) { return (mFlags & flag) ? true : false; } void setModelDrawMtx(Mtx* pMtxArr) { mModelDrawMtx = pMtxArr; diff --git a/include/d/actor/d_a_branch.h b/include/d/actor/d_a_branch.h index a3e2892b4..c050d24bd 100644 --- a/include/d/actor/d_a_branch.h +++ b/include/d/actor/d_a_branch.h @@ -15,7 +15,7 @@ public: } } - dComIfG_resDelete(&mPhase, m_arcname); + dComIfG_resDeleteDemo(&mPhase, m_arcname); } inline cPhs_State create(); inline BOOL draw(); diff --git a/include/d/actor/d_a_ship.h b/include/d/actor/d_a_ship.h index f51d099d5..960163988 100644 --- a/include/d/actor/d_a_ship.h +++ b/include/d/actor/d_a_ship.h @@ -77,15 +77,15 @@ public: typedef BOOL (daShip_c::*ProcFunc)(); - bool checkStateFlg(daSHIP_SFLG flag) const { return mStateFlag & flag; } - bool getFlyFlg() { return checkStateFlg(daSFLG_FLY_e); } - bool getJumpFlg() const { return checkStateFlg(daSFLG_JUMP_e); } - bool getLandFlg() const { return checkStateFlg(daSFLG_LAND_e); } - bool getSailOn() { return checkStateFlg(daSFLG_SAIL_ON_e); } + u32 checkStateFlg(daSHIP_SFLG flag) const { return mStateFlag & flag; } + BOOL getFlyFlg() { return checkStateFlg(daSFLG_FLY_e); } + BOOL getJumpFlg() const { return checkStateFlg(daSFLG_JUMP_e); } + BOOL getLandFlg() const { return checkStateFlg(daSFLG_LAND_e); } + BOOL getSailOn() { return checkStateFlg(daSFLG_SAIL_ON_e); } void onJumpRideFlg() { onStateFlg(daSFLG_JUMP_RIDE_e); } - bool checkJumpOkFlg() const { return checkStateFlg(daSFLG_JUMP_OK_e); } - bool checkShootCannon() const { return checkStateFlg(daSFLG_SHOOT_CANNON_e); } - bool checkHeadNoDraw() const { return checkStateFlg(daSFLG_HEAD_NO_DRAW_e); } + BOOL checkJumpOkFlg() const { return checkStateFlg(daSFLG_JUMP_OK_e); } + BOOL checkShootCannon() const { return checkStateFlg(daSFLG_SHOOT_CANNON_e); } + BOOL checkHeadNoDraw() const { return checkStateFlg(daSFLG_HEAD_NO_DRAW_e); } void setSteerMove() { mNextMode = MODE_STEER_MOVE_e; } void setPaddleMove() { mNextMode = MODE_PADDLE_MOVE_e; } diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index 770c91447..f53f67623 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -132,7 +132,7 @@ inline u32 fopAcM_checkCarryNow(fopAc_ac_c* pActor) { return pActor->actor_status & fopAcStts_CARRY_e; } -inline u32 fopAcM_checkHookCarryNow(fopAc_ac_c* pActor) { +inline bool fopAcM_checkHookCarryNow(fopAc_ac_c* pActor) { return fopAcM_CheckStatus(pActor, fopAcStts_HOOK_CARRY_e); } diff --git a/src/JSystem/J3DGraphAnimator/J3DJoint.cpp b/src/JSystem/J3DGraphAnimator/J3DJoint.cpp index 76161fcad..4dd4798a9 100644 --- a/src/JSystem/J3DGraphAnimator/J3DJoint.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DJoint.cpp @@ -230,7 +230,7 @@ void J3DJoint::entryIn() { j3dSys.getDrawBuffer(0)->setZMtx(anmMtx); j3dSys.getDrawBuffer(1)->setZMtx(anmMtx); for (J3DMaterial* mesh = mMesh; mesh != NULL; ) { - if (mesh->getShape()->checkFlag(1)) { + if (mesh->getShape()->checkFlag(J3DShpFlag_Hide)) { mesh = mesh->getNext(); } else { J3DMatPacket* matPacket = j3dSys.getModel()->getMatPacket(mesh->getIndex()); diff --git a/src/JSystem/J3DGraphAnimator/J3DModel.cpp b/src/JSystem/J3DGraphAnimator/J3DModel.cpp index a04c223f5..d182c6498 100644 --- a/src/JSystem/J3DGraphAnimator/J3DModel.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DModel.cpp @@ -402,16 +402,16 @@ void J3DModel::calcMaterial() { j3dSys.setModel(this); j3dSys.setTexture(mModelData->getTexture()); - if (checkFlag(4)) { - j3dSys.onFlag(4); + if (checkFlag(J3DMdlFlag_SkinPosCpu)) { + j3dSys.onFlag(J3DSysFlag_SkinPosCpu); } else { - j3dSys.offFlag(4); + j3dSys.offFlag(J3DSysFlag_SkinPosCpu); } - if (checkFlag(8)) { - j3dSys.onFlag(8); + if (checkFlag(J3DMdlFlag_SkinNrmCpu)) { + j3dSys.onFlag(J3DSysFlag_SkinNrmCpu); } else { - j3dSys.offFlag(8); + j3dSys.offFlag(J3DSysFlag_SkinNrmCpu); } for (u16 i = 0; i < getModelData()->getMaterialNum(); i++) { @@ -755,14 +755,14 @@ void J3DModel::prepareShapePackets() { J3DShapePacket* pkt = getShapePacket(i); if (checkFlag(J3DMdlFlag_SkinPosCpu)) - pShape->onFlag(J3DSysFlag_SkinPosCpu); + pShape->onFlag(J3DShpFlag_SkinPosCpu); else - pShape->offFlag(J3DSysFlag_SkinPosCpu); + pShape->offFlag(J3DShpFlag_SkinPosCpu); if (checkFlag(J3DMdlFlag_SkinNrmCpu) && !pShape->checkFlag(J3DShpFlag_EnableLod)) - pShape->onFlag(J3DSysFlag_SkinNrmCpu); + pShape->onFlag(J3DShpFlag_SkinNrmCpu); else - pShape->offFlag(J3DSysFlag_SkinNrmCpu); + pShape->offFlag(J3DShpFlag_SkinNrmCpu); if (getMtxCalcMode() == 2) pkt->setBaseMtxPtr(&mViewBaseMtx); diff --git a/src/JSystem/J3DGraphAnimator/J3DVisibility.cpp b/src/JSystem/J3DGraphAnimator/J3DVisibility.cpp index 12af46008..4fe24d86c 100644 --- a/src/JSystem/J3DGraphAnimator/J3DVisibility.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DVisibility.cpp @@ -16,9 +16,9 @@ void J3DVisibilityManager::setVisibility(J3DModelData* pModel) { visibility = 0; mAnmVisibility->getVisibility(index, &visibility); if (visibility != 0) { - pModel->getShapeNodePointer(index)->offFlag(1); + pModel->getShapeNodePointer(index)->offFlag(J3DShpFlag_Hide); } else { - pModel->getShapeNodePointer(index)->onFlag(1); + pModel->getShapeNodePointer(index)->onFlag(J3DShpFlag_Hide); } } } diff --git a/src/JSystem/J3DGraphBase/J3DMatBlock.cpp b/src/JSystem/J3DGraphBase/J3DMatBlock.cpp index 53b8a5c8c..161a205c9 100644 --- a/src/JSystem/J3DGraphBase/J3DMatBlock.cpp +++ b/src/JSystem/J3DGraphBase/J3DMatBlock.cpp @@ -1815,7 +1815,7 @@ void J3DPEBlockFull::reset(J3DPEBlock* pBlock) { /* 802E96C8-802E9920 .text calc__21J3DTexGenBlockPatchedFPA4_Cf */ void J3DTexGenBlockPatched::calc(const Mtx modelMtx) { - if (!((j3dSys.mFlags >> 2) & 0x01) || !j3dSys.checkFlag(J3DSysFlag_SkinNrmCpu)) { + if (!j3dSys.checkFlag(J3DSysFlag_SkinPosCpu) || !j3dSys.checkFlag(J3DSysFlag_SkinNrmCpu)) { for (s32 i = 0; i < (s32)ARRAY_SIZE(mTexMtx); i++) { if (mTexMtx[i] == NULL) continue; diff --git a/src/JSystem/J3DGraphBase/J3DMaterial.cpp b/src/JSystem/J3DGraphBase/J3DMaterial.cpp index 939e5c1de..9f7edb416 100644 --- a/src/JSystem/J3DGraphBase/J3DMaterial.cpp +++ b/src/JSystem/J3DGraphBase/J3DMaterial.cpp @@ -213,7 +213,7 @@ void J3DMaterial::makeSharedDisplayList() { /* 802DEAD4-802DEB3C .text load__11J3DMaterialFv */ void J3DMaterial::load() { j3dSys.setMaterialMode(mMaterialMode); - if (!j3dSys.checkFlag(2)) { + if (!j3dSys.checkFlag(J3DSysFlag_UNK2)) { j3dSys.mMatPacket->callDL(); loadNBTScale(*mTexGenBlock->getNBTScale()); } @@ -222,7 +222,7 @@ void J3DMaterial::load() { /* 802DEB3C-802DEBA0 .text loadSharedDL__11J3DMaterialFv */ void J3DMaterial::loadSharedDL() { j3dSys.setMaterialMode(mMaterialMode); - if (!j3dSys.checkFlag(2)) { + if (!j3dSys.checkFlag(J3DSysFlag_UNK2)) { mSharedDLObj->callDL(); loadNBTScale(*mTexGenBlock->getNBTScale()); } @@ -360,7 +360,7 @@ void J3DPatchedMaterial::makeSharedDisplayList() {} /* 802DF268-802DF2AC .text load__18J3DPatchedMaterialFv */ void J3DPatchedMaterial::load() { j3dSys.setMaterialMode(mMaterialMode); - if (j3dSys.checkFlag(0x02)) { + if (j3dSys.checkFlag(J3DSysFlag_UNK2)) { return; } j3dSys.mMatPacket->callDL(); @@ -369,7 +369,7 @@ void J3DPatchedMaterial::load() { /* 802DF2AC-802DF2EC .text loadSharedDL__18J3DPatchedMaterialFv */ void J3DPatchedMaterial::loadSharedDL() { j3dSys.setMaterialMode(mMaterialMode); - if (!j3dSys.checkFlag(0x02)) { + if (!j3dSys.checkFlag(J3DSysFlag_UNK2)) { mSharedDLObj->callDL(); } } @@ -402,7 +402,7 @@ void J3DLockedMaterial::makeSharedDisplayList() {} /* 802DF368-802DF3AC .text load__17J3DLockedMaterialFv */ void J3DLockedMaterial::load() { j3dSys.setMaterialMode(mMaterialMode); - if (j3dSys.checkFlag(0x02)) { + if (j3dSys.checkFlag(J3DSysFlag_UNK2)) { return; } j3dSys.mMatPacket->callDL(); @@ -411,7 +411,7 @@ void J3DLockedMaterial::load() { /* 802DF3AC-802DF3EC .text loadSharedDL__17J3DLockedMaterialFv */ void J3DLockedMaterial::loadSharedDL() { j3dSys.setMaterialMode(mMaterialMode); - if (!j3dSys.checkFlag(0x02)) { + if (!j3dSys.checkFlag(J3DSysFlag_UNK2)) { mSharedDLObj->callDL(); } } diff --git a/src/JSystem/J3DGraphBase/J3DSys.cpp b/src/JSystem/J3DGraphBase/J3DSys.cpp index f7b6c54c0..cc7d17968 100644 --- a/src/JSystem/J3DGraphBase/J3DSys.cpp +++ b/src/JSystem/J3DGraphBase/J3DSys.cpp @@ -126,7 +126,7 @@ void J3DSys::setTexCacheRegion(GXTexCacheSize size) { u32 regionNum = kRegionNum[size]; mTexCacheRegionNum = regionNum; - if (!!(mFlags & 0x80000000)) { + if (checkFlag(J3DSysFlag_UNK80000000)) { for (u32 i = 0; i < regionNum; i++) { if (!!(i & 1)) { GXInitTexCacheRegion(&mTexCacheRegion[i], GX_FALSE, i * kSize[size] + 0x80000, size, i * kSize[size], size); diff --git a/src/JSystem/JAudio/JASTrack.cpp b/src/JSystem/JAudio/JASTrack.cpp index 6aa491d6b..3f307747c 100644 --- a/src/JSystem/JAudio/JASTrack.cpp +++ b/src/JSystem/JAudio/JASTrack.cpp @@ -1110,7 +1110,6 @@ void JASystem::TTrack::writeRegDirect(u8 target, u16 value) { /* 80283164-802836FC .text writeRegParam__Q28JASystem6TTrackFUc */ void JASystem::TTrack::writeRegParam(u8 param) { - /* Nonmatching */ u8 curr_file_byte; u8 bVar0; u8 bVar1; @@ -1246,6 +1245,7 @@ void JASystem::TTrack::writeRegParam(u8 param) { break; } + // Bug: reg_flags is uninitialized in several of these cases. u16 reg_flags; switch (bVar0) { case 0: @@ -1324,7 +1324,6 @@ void JASystem::TTrack::writeSelfPort(int param_1, u16 param_2) { /* 80283744-802837AC .text writePortAppDirect__Q28JASystem6TTrackFUlUs */ int JASystem::TTrack::writePortAppDirect(u32 port, u16 value) { - /* Nonmatching */ mTrackPort.writeImport(port, value); if (port == 0 || port == 1) { TIntrMgr& intrMgr = mIntrMgr; diff --git a/src/d/actor/d_a_bk.cpp b/src/d/actor/d_a_bk.cpp index cce6709e0..27a204559 100644 --- a/src/d/actor/d_a_bk.cpp +++ b/src/d/actor/d_a_bk.cpp @@ -362,7 +362,10 @@ static void search_check_draw(bk_class* i_this) { return; } cXyz sp14[0x10]; - cXyz sp08(0.0f, 0.0f, l_bkHIO.m028); + cXyz sp08; + sp08.x = 0.0f; + sp08.y = 0.0f; + sp08.z = l_bkHIO.m028; int i; s16 r26 = 0; for (i = 0; i < 0x10; i++, r26 += 0x1000) { @@ -493,10 +496,9 @@ static void daBk_shadowDraw(bk_class* i_this) { i_this->current.pos.y + 150.0f + REG8_F(18), i_this->current.pos.z ); - f32 temp = 800.0f + REG8_F(19); - f32 shadowSize = 40.0f + REG8_F(17); i_this->mShadowId = dComIfGd_setShadow( - i_this->mShadowId, 1, model, &shadowPos, temp, shadowSize, + i_this->mShadowId, 1, model, &shadowPos, + 800.0f + REG8_F(19), 40.0f + REG8_F(17), i_this->current.pos.y, i_this->dr.mAcch.GetGroundH(), i_this->dr.mAcch.m_gnd, &i_this->tevStr ); diff --git a/src/d/actor/d_a_branch.cpp b/src/d/actor/d_a_branch.cpp index 80e9e13ea..8cd6fba9b 100644 --- a/src/d/actor/d_a_branch.cpp +++ b/src/d/actor/d_a_branch.cpp @@ -42,10 +42,11 @@ void daBranch_c::set_mtx() { /* 00000128-000001E4 .text set_anim__10daBranch_cFiii */ void daBranch_c::set_anim(int i_animIdx, int i_bckIdx, int i_basIdx) { if (i_bckIdx > 0 && i_basIdx > 0) { - void* pSnd = dComIfG_getObjectIDRes(m_arcname, i_basIdx); - J3DAnmTransform* pAnm = static_cast(dComIfG_getObjectIDRes(m_arcname, i_bckIdx)); - - mAnims[i_animIdx]->setAnm(pAnm, -1, 0.0f, 1.0f, 0.0f, -1.0f, pSnd); + mAnims[i_animIdx]->setAnm( + static_cast(dComIfG_getObjectIDRes(m_arcname, i_bckIdx)), + -1, 0.0f, 1.0f, 0.0f, -1.0f, + dComIfG_getObjectIDRes(m_arcname, i_basIdx) + ); } } @@ -74,12 +75,14 @@ BOOL daBranch_c::CreateHeap() { BOOL status = TRUE; for (int i = 0; i < (s32)ARRAY_SIZE(mAnims); i++) { +#if VERSION > VERSION_DEMO J3DModelData* modelData = static_cast(dComIfG_getObjectIDRes(m_arcname, bmd[i])); J3DAnmTransformKey* bckData = static_cast(dComIfG_getObjectIDRes(m_arcname, bck[i])); JUT_ASSERT(0x1CC, modelData != NULL); // Bug: They probably meant to assert that bckData isn't null, but accidentally used the array of bck file IDs. JUT_ASSERT(0x1CD, bck != NULL); +#endif mAnims[i] = new mDoExt_McaMorf( static_cast(dComIfG_getObjectIDRes(m_arcname, bmd[i])), @@ -89,10 +92,17 @@ BOOL daBranch_c::CreateHeap() { 0, 0x11020203 ); +#if VERSION == VERSION_DEMO + set_anim(i, bck[i], bas[i]); + mAnims[i]->setFrame(0.0f); +#endif + +#if VERSION > VERSION_DEMO if (!mAnims[i]) { status = FALSE; break; } +#endif mModel[i] = mAnims[i]->getModel(); if (!mModel[i]) { @@ -100,8 +110,10 @@ BOOL daBranch_c::CreateHeap() { break; } +#if VERSION > VERSION_DEMO mAnims[i]->setFrame(0.0f); set_anim(i, bck[i], bas[i]); +#endif } return status; @@ -178,10 +190,16 @@ static BOOL daBranch_Delete(daBranch_c* i_this) { } inline cPhs_State daBranch_c::create() { +#if VERSION == VERSION_DEMO + cPhs_State phase_state = dComIfG_resLoad(&mPhase, daBranch_c::m_arcname); + if (phase_state == cPhs_COMPLEATE_e) { + fopAcM_SetupActor(this, daBranch_c); +#else fopAcM_SetupActor(this, daBranch_c); cPhs_State phase_state = dComIfG_resLoad(&mPhase, daBranch_c::m_arcname); if (phase_state == cPhs_COMPLEATE_e) { +#endif if (!fopAcM_entrySolidHeap(this, daBranch_c::solidHeapCB, 0x4000)) { for (int i = 0; i < (s32)ARRAY_SIZE(mAnims); i++) { mAnims[i] = NULL; @@ -241,7 +259,11 @@ actor_process_profile_definition g_profile_BRANCH = { /* Leaf SubMtd */ &g_fopAc_Method.base, /* Priority */ PRIO_BRANCH, /* Actor SubMtd */ &l_daBranch_Method, +#if VERSION == VERSION_DEMO + /* Status */ fopAcStts_CULL_e | fopAcStts_UNK4000_e | fopAcStts_UNK40000_e, +#else /* Status */ fopAcStts_UNK4000_e | fopAcStts_UNK40000_e, +#endif /* Group */ fopAc_ACTOR_e, /* CullType */ fopAc_CULLBOX_CUSTOM_e, }; diff --git a/src/d/actor/d_a_hys.cpp b/src/d/actor/d_a_hys.cpp index 09cbba183..eabe096a6 100644 --- a/src/d/actor/d_a_hys.cpp +++ b/src/d/actor/d_a_hys.cpp @@ -71,7 +71,7 @@ BOOL daHys_c::CreateHeap() { J3DAnmTexPattern* pbtp = (J3DAnmTexPattern *)dComIfG_getObjectRes(m_arcname[mType], m_btpidx[mType]); JUT_ASSERT(0x114, pbtp != NULL); - if (!mBtpAnm.init(modelData, pbtp, 0, 0, 1.0, 0, -1, FALSE, FALSE)) { + if (!mBtpAnm.init(modelData, pbtp, FALSE, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, FALSE, FALSE)) { return FALSE; } field_0x458 = 0; diff --git a/src/d/actor/d_a_msw.cpp b/src/d/actor/d_a_msw.cpp index 87403ccf9..b9f4306fc 100644 --- a/src/d/actor/d_a_msw.cpp +++ b/src/d/actor/d_a_msw.cpp @@ -11,7 +11,6 @@ #include "m_Do/m_Do_ext.h" #include "d/d_com_inf_game.h" #include "d/d_s_play.h" -#include "d/actor/d_a_player.h" /* 00000078-000002D4 .text ride_call_back__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ void ride_call_back(dBgW* bgw, fopAc_ac_c* i_ac, fopAc_ac_c* i_pt) { @@ -107,12 +106,14 @@ static BOOL daMsw_Draw(msw_class* i_this) { void msw_move(msw_class* i_this) { i_this->m298 += 1; +#if VERSION > VERSION_DEMO // Branchless comparison // Probably something #ifdef'd out for debug switch (i_this->m29A) { case 0: break; } +#endif cLib_addCalcAngleS2(&i_this->current.angle.x, 0, 10, 0x200); cLib_addCalcAngleS2(&i_this->current.angle.z, 0, 10, 0x200); @@ -135,23 +136,23 @@ void msw_move(msw_class* i_this) { /* 0000080C-00000AD4 .text daMsw_Execute__FP9msw_class */ static BOOL daMsw_Execute(msw_class* i_this) { - /* Nonmatching */ - static f32 xd[4] = { 1.0f, 1.0f, -1.0f, -1.0f }; - static f32 zd[4] = { 1.0f, -1.0f, 1.0f, -1.0f }; + /* Nonmatching - retail-only regalloc */ + fopAc_ac_c* actor = i_this; + fopAc_ac_c* player = dComIfGp_getPlayer(0); - daPy_py_c* pPlayer = static_cast(dComIfGp_getPlayer(0)); msw_move(i_this); - MtxTrans(i_this->current.pos.x, i_this->current.pos.y, i_this->current.pos.z, false); - cMtx_YrotM(*calc_mtx, i_this->shape_angle.y); - cMtx_XrotM(*calc_mtx, i_this->shape_angle.x); - cMtx_ZrotM(*calc_mtx, i_this->shape_angle.z); - MtxScale(i_this->scale.x, 1.0f, i_this->scale.z, true); - + MtxTrans(actor->current.pos.x, actor->current.pos.y, actor->current.pos.z, false); + cMtx_YrotM(*calc_mtx, actor->shape_angle.y); + cMtx_XrotM(*calc_mtx, actor->shape_angle.x); + cMtx_ZrotM(*calc_mtx, actor->shape_angle.z); + MtxScale(actor->scale.x, 1.0f, actor->scale.z, true); i_this->mpModel->setBaseTRMtx(*calc_mtx); MtxPush(); for (int chainIdx = 0; chainIdx < 4; chainIdx++) { + static f32 xd[4] = { 1.0f, 1.0f, -1.0f, -1.0f }; + static f32 zd[4] = { 1.0f, -1.0f, 1.0f, -1.0f }; cXyz src; src.x = (200.0f + REG0_F(10)) * xd[chainIdx]; src.y = 0.0f; @@ -159,26 +160,23 @@ static BOOL daMsw_Execute(msw_class* i_this) { MtxPosition(&src, &i_this->m2E0[chainIdx]); if (i_this->m844 != 0) { - i_this->m844 -= 1; + i_this->m844--; i_this->m310[chainIdx] = i_this->m2E0[chainIdx]; i_this->m310[chainIdx].y = i_this->m2E0[chainIdx].y + 1000.0f; } if (i_this->m83C[chainIdx] != 0) { - i_this->m83C[chainIdx] -= 1; + i_this->m83C[chainIdx]--; } if (i_this->mChainCyls[chainIdx].ChkTgHit() && i_this->m83C[chainIdx] < 10) { - i_this->m83C[chainIdx] = REG6_S(3) + 0xF; + i_this->m83C[chainIdx] = REG6_S(3) + 15; - mDoAud_seStart(JA_SE_LK_HIT_SBRIDGE_CHAIN, &i_this->m2E0[chainIdx], 0, dComIfGp_getReverb(fopAcM_GetRoomNo(i_this))); + mDoAud_seStart(JA_SE_LK_HIT_SBRIDGE_CHAIN, &i_this->m2E0[chainIdx], 0, dComIfGp_getReverb(fopAcM_GetRoomNo(actor))); cXyz scale; - scale.z = 2.0f; - scale.y = 2.0f; - scale.x = 2.0f; - - dComIfGp_particle_set(dPa_name::ID_COMMON_PURPLE_HIT, i_this->mChainCyls[chainIdx].GetTgHitPosP(), &pPlayer->shape_angle, &scale); + scale.x = scale.y = scale.z = 2.0f; + dComIfGp_particle_set(dPa_name::ID_COMMON_PURPLE_HIT, i_this->mChainCyls[chainIdx].GetTgHitPosP(), &player->shape_angle, &scale); } i_this->mChainCyls[chainIdx].SetC(i_this->m2E0[chainIdx]); @@ -203,7 +201,7 @@ static BOOL daMsw_IsDelete(msw_class* i_this) { /* 00000B38-00000B88 .text daMsw_Delete__FP9msw_class */ static BOOL daMsw_Delete(msw_class* i_this) { - dComIfG_resDelete(&i_this->mPhs, "Msw"); + dComIfG_resDeleteDemo(&i_this->mPhs, "Msw"); dComIfG_Bgsp()->Release(i_this->mpBgW); return TRUE; @@ -221,7 +219,7 @@ BOOL daMsw_CreateInit(fopAc_ac_c* i_this) { } modelData = static_cast(dComIfG_getObjectRes("Msw", MSW_BDL_OBM_CHAIN1)); - JUT_ASSERT(0x20B, modelData != NULL); + JUT_ASSERT(VERSION_SELECT(519, 523, 523, 523), modelData != NULL); for (int chainIdx = 0; chainIdx < 4; chainIdx++) { pActor->mpChainModels[chainIdx] = mDoExt_J3DModel__create(modelData, 0, 0x11020203); @@ -282,62 +280,62 @@ static cPhs_State daMsw_Create(fopAc_ac_c* i_this) { }; fopAcM_SetupActor(i_this, msw_class); - msw_class* pActor = static_cast(i_this); + msw_class* a_this = static_cast(i_this); - cPhs_State phase_state = dComIfG_resLoad(&pActor->mPhs, "Msw"); + cPhs_State phase_state = dComIfG_resLoad(&a_this->mPhs, "Msw"); if (phase_state == cPhs_COMPLEATE_e) { - pActor->m2A0 = (fopAcM_GetParam(pActor) >> 0) & 0xFF; + a_this->m2A0 = (fopAcM_GetParam(a_this) >> 0) & 0xFF; - if (pActor->m2A0 == 0xFF) { - pActor->m2A0 = 0; + if (a_this->m2A0 == 0xFF) { + a_this->m2A0 = 0; } - if (!fopAcM_entrySolidHeap(pActor, daMsw_CreateInit, 0x10040)) { + if (!fopAcM_entrySolidHeap(a_this, daMsw_CreateInit, 0x10040)) { return cPhs_ERROR_e; } - if (pActor->mpModel == NULL) { + if (a_this->mpModel == NULL) { return cPhs_ERROR_e; } - if (dComIfG_Bgsp()->Regist(pActor->mpBgW, pActor)) { + if (dComIfG_Bgsp()->Regist(a_this->mpBgW, a_this)) { return cPhs_ERROR_e; } - switch (pActor->m2A0) { + switch (a_this->m2A0) { case 1: - pActor->scale.x = 1.5f; - pActor->scale.z = 1.5f; + a_this->scale.x = 1.5f; + a_this->scale.z = 1.5f; break; case 2: - pActor->scale.x = 2.0f; - pActor->scale.z = 2.0f; + a_this->scale.x = 2.0f; + a_this->scale.z = 2.0f; break; case 3: - pActor->scale.x = 3.0f; - pActor->scale.z = 3.0f; + a_this->scale.x = 3.0f; + a_this->scale.z = 3.0f; break; default: - pActor->scale.z = 1.0f; - pActor->scale.x = 1.0f; + a_this->scale.z = 1.0f; + a_this->scale.x = 1.0f; break; } - pActor->scale.y = 1.0f; - fopAcM_SetMtx(pActor, pActor->mpModel->getBaseTRMtx()); - fopAcM_SetMin(pActor, pActor->scale.x * -200.0f, -5000.0f, pActor->scale.z * -200.0f); - fopAcM_SetMax(pActor, pActor->scale.x * 200.0f, 5000.0f, pActor->scale.z * 200.0f); + a_this->scale.y = 1.0f; + fopAcM_SetMtx(a_this, a_this->mpModel->getBaseTRMtx()); + fopAcM_SetMin(a_this, a_this->scale.x * -200.0f, -5000.0f, a_this->scale.z * -200.0f); + fopAcM_SetMax(a_this, a_this->scale.x * 200.0f, 5000.0f, a_this->scale.z * 200.0f); - pActor->mStts.Init(0xFF, 0xFF, pActor); + a_this->mStts.Init(0xFF, 0xFF, a_this); for (int chainIdx = 0; chainIdx < 4; chainIdx++) { - pActor->mChainCyls[chainIdx].Set(himo_cyl_src); - pActor->mChainCyls[chainIdx].SetStts(&pActor->mStts); + a_this->mChainCyls[chainIdx].Set(himo_cyl_src); + a_this->mChainCyls[chainIdx].SetStts(&a_this->mStts); } - pActor->m844 = 10; - daMsw_Execute(pActor); + a_this->m844 = 10; + daMsw_Execute(a_this); } return phase_state; diff --git a/src/d/actor/d_a_npc_bs1.cpp b/src/d/actor/d_a_npc_bs1.cpp index 11e79cef7..bbb978775 100644 --- a/src/d/actor/d_a_npc_bs1.cpp +++ b/src/d/actor/d_a_npc_bs1.cpp @@ -191,7 +191,7 @@ BOOL daNpc_Bs1_c::initTexPatternAnm(bool i_modify) { J3DModelData* modelData = mpMorf->getModel()->getModelData(); m_head_tex_pattern = (J3DAnmTexPattern*)dComIfG_getObjectRes("Bs", l_btp_ix_tbl[m828]); JUT_ASSERT(0x1bd, m_head_tex_pattern != NULL); - if (!mBtpAnm.init(modelData, m_head_tex_pattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, i_modify, 0)) { + if (!mBtpAnm.init(modelData, m_head_tex_pattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, i_modify, FALSE)) { return FALSE; } mFrame = 0; @@ -936,8 +936,7 @@ u16 daNpc_Bs1_c::next_msgStatus(u32* pMsgNo) { break; case 0xF4C: case 0xF4E: { - int points = dComIfGs_getEventReg(0x86FF); - points += 1; + int points = dComIfGs_getEventReg(0x86FF) + 1; points = cLib_maxLimit(points, 0xFF); dComIfGs_setEventReg(0x86FF, points); diff --git a/src/d/actor/d_a_npc_btsw2.cpp b/src/d/actor/d_a_npc_btsw2.cpp index cc06b0c8f..a214247d5 100644 --- a/src/d/actor/d_a_npc_btsw2.cpp +++ b/src/d/actor/d_a_npc_btsw2.cpp @@ -135,7 +135,7 @@ BOOL daNpc_Btsw2_c::initTexPatternAnm(bool i_modify) { J3DModelData* modelData = mpMorf->getModel()->getModelData(); m_btp = static_cast(dComIfG_getObjectRes(m_arc_name, l_btp_ix_tbl[m744])); JUT_ASSERT(282, m_btp != NULL); - if (!mBtpAnm.init(modelData, m_btp, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, i_modify, 0)) { + if (!mBtpAnm.init(modelData, m_btp, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, i_modify, FALSE)) { return FALSE; } mBtpFrame = 0; diff --git a/src/d/actor/d_a_npc_md.cpp b/src/d/actor/d_a_npc_md.cpp index b8adc0ddc..fc6446abb 100644 --- a/src/d/actor/d_a_npc_md.cpp +++ b/src/d/actor/d_a_npc_md.cpp @@ -2411,7 +2411,7 @@ BOOL daNpc_Md_c::initTexPatternAnm(u8 btpAnmTblIdx, bool param_2) { bool ret = false; J3DAnmTexPattern* eyeTexPtrn = (J3DAnmTexPattern*)dComIfG_getObjectRes(mModelArcName, btpAnmTbl[btpAnmTblIdx].m00); JUT_ASSERT(7502, eyeTexPtrn != NULL); - if (m0520.init(modelData, eyeTexPtrn, TRUE, J3DFrameCtrl::EMode_RESET, 1.0f, 0, -1, param_2, 0)) { + if (m0520.init(modelData, eyeTexPtrn, TRUE, J3DFrameCtrl::EMode_RESET, 1.0f, 0, -1, param_2, FALSE)) { m3112 = eyeTexPtrn->getFrameMax(); m3133 = 0; m3136 = btpAnmTbl[btpAnmTblIdx].m20; diff --git a/src/d/actor/d_a_npc_people.cpp b/src/d/actor/d_a_npc_people.cpp index 34194fb2d..251ec3f94 100644 --- a/src/d/actor/d_a_npc_people.cpp +++ b/src/d/actor/d_a_npc_people.cpp @@ -3829,7 +3829,11 @@ static u32 l_msg_ug2_out_area[] = { }; static int l_get_item_no[] = { +#if VERSION == VERSION_DEMO + dItem_ORANGE_RUPEE_e, +#else dItem_HEART_PIECE_e, +#endif dItem_COLLECT_MAP_20_e, dItem_COLLECT_MAP_16_e, dItem_HEART_PIECE_e, @@ -3877,7 +3881,11 @@ static PsoData l_pso_ub4 = { 0.0f, 100.0f, 0.0f, +#if VERSION == VERSION_DEMO + 30.0f, +#else 50.0f, +#endif 85.0f, 0x0000, 0xFF, @@ -4581,7 +4589,7 @@ bool daNpcPeople_c::_delete() { /* 0000158C-000018B8 .text _draw__13daNpcPeople_cFv */ bool daNpcPeople_c::_draw() { - /* Nonmatching - regalloc */ + /* Nonmatching - retail-only regalloc */ J3DModel* pModel1 = mpMorf->getModel(); J3DModel* pModel2; @@ -6655,8 +6663,6 @@ u16 daNpcPeople_c::next_msgStatus(u32* pMsgNo) { /* 00005FB8-000073B8 .text getMsg__13daNpcPeople_cFv */ u32 daNpcPeople_c::getMsg() { - /* Nonmatching - extra clrlwi, regalloc */ - u32 msgNo = 0; m734 = NULL; @@ -6681,7 +6687,9 @@ u32 daNpcPeople_c::getMsg() { } else if(!dComIfGs_checkGetItem(dItem_COLLECT_MAP_16_e)) { m734 = l_msg_xy_ub4_get_item; +#if VERSION > VERSION_DEMO dComIfGs_onEventBit(0x2504); +#endif } else { m734 = l_msg_xy_ub4_talk; @@ -6726,9 +6734,11 @@ u32 daNpcPeople_c::getMsg() { } break; +#if VERSION > VERSION_DEMO case 0x10: m734 = l_msg_xy_sa5_no_skull_necklace; break; +#endif } } else if(dComIfGp_event_chkTalkXY()) { @@ -6974,6 +6984,18 @@ u32 daNpcPeople_c::getMsg() { else if(dComIfGs_getEventReg(0xC407) < 7) { m734 = l_msg_um2_no_1day_photo3; } +#if VERSION == VERSION_DEMO + else if(!dComIfGs_isEventBit(0x2240)) { + m734 = l_msg_um2_no_request; + } + else if(!dComIfGs_isEventBit(0x2220)) { + m734 = l_msg_um2_cafe_off; + } + else { + m734 = l_msg_um2_cafe_on; + dComIfGs_setEventReg(0xB907, 1); + } +#else else if(dComIfGs_isEventBit(0x2220)) { m734 = l_msg_um2_cafe_on; dComIfGs_setEventReg(0xB907, 1); @@ -6984,6 +7006,7 @@ u32 daNpcPeople_c::getMsg() { else { m734 = l_msg_um2_cafe_off; } +#endif } else if(dComIfGs_getEventReg(0xB907) < 4) { if(!dComIfGs_isEventBit(0x2204)) { @@ -7153,7 +7176,8 @@ u32 daNpcPeople_c::getMsg() { break; } - dComIfGs_setTmpReg(0xFE03, reg - 1); + reg -= 1; + dComIfGs_setTmpReg(0xFE03, reg); } } else if(!dComIfGs_isEventBit(0x2440)) { @@ -7701,7 +7725,7 @@ BOOL daNpcPeople_c::initTexPatternAnm(bool param_1) { m_head_tex_pattern = (J3DAnmTexPattern*)dComIfG_getObjectIDRes(l_arcname_tbl[mNpcType], l_btp_ix_tbl[mNpcType]); JUT_ASSERT(0x231D, m_head_tex_pattern != NULL); - if(!mBtpAnm.init(modelData, m_head_tex_pattern, 1, 2, 1.0f, 0, -1, param_1, 0)) { + if(!mBtpAnm.init(modelData, m_head_tex_pattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, param_1, FALSE)) { return false; } } diff --git a/src/d/actor/d_a_npc_photo.cpp b/src/d/actor/d_a_npc_photo.cpp index 61a01bd19..a60295d4b 100644 --- a/src/d/actor/d_a_npc_photo.cpp +++ b/src/d/actor/d_a_npc_photo.cpp @@ -2058,7 +2058,7 @@ BOOL daNpcPhoto_c::initTexPatternAnm(bool i_modify, int i_param2) { m_head_tex_pattern = (J3DAnmTexPattern*)dComIfG_getObjectIDRes(l_arcname_tbl[0], l_btp_ix_tbl[i_param2]); JUT_ASSERT(0xBAA, m_head_tex_pattern != NULL); - if(!mBtpAnm.init(modelData, m_head_tex_pattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, i_modify, 0)) { + if(!mBtpAnm.init(modelData, m_head_tex_pattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, i_modify, FALSE)) { return FALSE; } mFrame = 0; diff --git a/src/d/actor/d_a_npc_roten.cpp b/src/d/actor/d_a_npc_roten.cpp index 3cc134801..d0d3fecd6 100644 --- a/src/d/actor/d_a_npc_roten.cpp +++ b/src/d/actor/d_a_npc_roten.cpp @@ -2716,7 +2716,7 @@ BOOL daNpcRoten_c::initTexPatternAnm(bool modify) { m_head_tex_pattern = static_cast(dComIfG_getObjectIDRes(l_arcname_tbl[mNpcNo], l_btp_ix_tbl[mNpcNo])); JUT_ASSERT(0xBFF, m_head_tex_pattern != NULL); - if(!mBtpAnm.init(modelData, m_head_tex_pattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, modify, 0)) { + if(!mBtpAnm.init(modelData, m_head_tex_pattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, modify, FALSE)) { return false; } diff --git a/src/d/actor/d_a_obj_figure.cpp b/src/d/actor/d_a_obj_figure.cpp index edde0143b..c9eefb35d 100644 --- a/src/d/actor/d_a_obj_figure.cpp +++ b/src/d/actor/d_a_obj_figure.cpp @@ -487,7 +487,7 @@ BOOL daObjFigure_c::createHeap() { return false; } - if(!mBtpAnm1.init(pPedestalData, mpPedestalBtp, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, 0)) { + if(!mBtpAnm1.init(pPedestalData, mpPedestalBtp, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, FALSE)) { return false; } diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index d2153fe5c..d6b992510 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -4,7 +4,7 @@ */ #include "d/actor/d_a_obj_mknjd.h" -#include "d/d_s_play.h" +#include "d/d_s_play.h" // IWYU pragma: keep #include "d/res/res_mknjd.h" #include "f_op/f_op_actor_mng.h" #include "f_pc/f_pc_manager.h" diff --git a/src/d/actor/d_a_obj_pbco.cpp b/src/d/actor/d_a_obj_pbco.cpp index 1ee10d8b1..706ae75a2 100644 --- a/src/d/actor/d_a_obj_pbco.cpp +++ b/src/d/actor/d_a_obj_pbco.cpp @@ -86,7 +86,7 @@ bool daObj_Pbco_c::_delete() { if (mpBgW != NULL) { dComIfG_Bgsp()->Release(mpBgW); } - dComIfG_resDelete(&mPhs, M_arcname); + dComIfG_resDeleteDemo(&mPhs, M_arcname); return TRUE; } diff --git a/src/d/actor/d_a_obj_swpush.cpp b/src/d/actor/d_a_obj_swpush.cpp index 823d90e8e..9d46eb436 100644 --- a/src/d/actor/d_a_obj_swpush.cpp +++ b/src/d/actor/d_a_obj_swpush.cpp @@ -168,7 +168,7 @@ bool daObjSwpush::Act_c::create_heap() { if (attr().mBtpArcName != NULL) { J3DAnmTexPattern* btp_data = (J3DAnmTexPattern*) dComIfG_getObjectRes(attr().mBtpArcName, attr().mBtpResIndex); JUT_ASSERT(0x21E, btp_data != NULL); - btp_success = mBtpAnm.init(model_data, btp_data, 1, 0, 1.0f, 0, -1, false, 0); + btp_success = mBtpAnm.init(model_data, btp_data, TRUE, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false, FALSE); } cBgD_t* bg_data = (cBgD_t*) dComIfG_getObjectRes(attr().mBgArcName, attr().mBgResIndex); diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index c69193bf6..38ab16d8a 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -1332,7 +1332,7 @@ s32 daPy_lk_c::setItemModel() { dVar15 = mtx[1][3]; dVar17 = mtx[2][3]; u16 uVar10 = - cM_rad2s(((6.2831855f * (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() - 22.0f)) / + cM_rad2s((((2*M_PI) * (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() - 22.0f)) / mFrameCtrlUnder[UNDER_MOVE0_e].getEnd())); mDoMtx_stack_c::YrotS( (-5500.0f * std::abs(mVelocity / mMaxNormalSpeed) * cM_ssin(uVar10 & 0xFFFF))); diff --git a/src/d/actor/d_a_ship.cpp b/src/d/actor/d_a_ship.cpp index 6ade5838f..138309697 100644 --- a/src/d/actor/d_a_ship.cpp +++ b/src/d/actor/d_a_ship.cpp @@ -7,6 +7,7 @@ #include "d/d_procname.h" #include "d/d_priority.h" #include "d/d_com_inf_game.h" +#include "d/d_s_play.h" // IWYU pragma: keep #include "m_Do/m_Do_mtx.h" #include "d/d_drawlist.h" #include "f_op/f_op_actor_mng.h" @@ -220,8 +221,8 @@ BOOL daShip_c::draw() { dComIfGd_setListP1(); if (m02A0 && m02A4) { - j3dSys.onFlag(0x4); - j3dSys.onFlag(0x8); + j3dSys.onFlag(J3DSysFlag_SkinPosCpu); + j3dSys.onFlag(J3DSysFlag_SkinNrmCpu); cXyz local_5c(current.pos.x, current.pos.y + m03D8 + 5.0f, current.pos.z); @@ -811,8 +812,8 @@ void daShip_c::setWaveAngle(short* param1, short* param2) { *param2 = cM_atan2s(-local_a8.y, local_a8.absXZ()); *param1 = cM_atan2s(-local_9c.y, local_9c.absXZ()); - short iVar3 = *param1 - m0370; - short iVar2 = *param2 - m0372; + s16 iVar2 = *param2 - m0372; + s16 iVar3 = *param1 - m0370; m0376 += (iVar2 * 0.045f); m0372 += m0376; @@ -892,7 +893,8 @@ void daShip_c::setYPos() { } } else { - fVar2 = std::abs(speedF) / 55.0f; + f32 f1 = 55.0f; + fVar2 = std::abs(speedF) / f1; if (fVar2 > 1.0f) { fVar2 = 1.0f; } @@ -1152,13 +1154,15 @@ void daShip_c::changeDemoEndProc() { void daShip_c::setCrashData(short param1) { float fVar1; float fVar2; - daPy_lk_c *link; s16 iVar5; if (!dComIfGp_event_runCheck()) { - link = daPy_getPlayerLinkActorClass(); - if (!link->checkNoDamageMode() && !link->checkNoControll()) { + if (!daPy_getPlayerLinkActorClass()->checkNoDamageMode() +#if VERSION > VERSION_DEMO + && !daPy_getPlayerLinkActorClass()->checkNoControll() +#endif + ) { if (!checkForceMove()) { - link->onShipDrop(param1); + daPy_getPlayerLinkActorClass()->onShipDrop(param1); procWait_init(); } } @@ -2641,6 +2645,9 @@ BOOL daShip_c::procStartModeWarp_init() { cXyz local_38(current.pos.x, m03F4 + 1500.0f, current.pos.z + 2000.0f); camera->mCamera.Set(current.pos, local_38); m037A = 0; +#if VERSION == VERSION_DEMO + mTactWarpID = fopAcM_create(PROC_TORNADO, 2, ¤t.pos, fopAcM_GetRoomNo(this)); +#endif fopAcM_seStartCurrent(this, 0x186D, 0); return TRUE; } @@ -2657,11 +2664,13 @@ BOOL daShip_c::procStartModeWarp() { shape_angle.y += m03A6; current.angle.y = shape_angle.y; if (pfVar2) { +#if VERSION > VERSION_DEMO if (!checkStateFlg(daSFLG_UNK8_e)) { onStateFlg(daSFLG_UNK8_e); pfVar2->current.pos.x = current.pos.x; pfVar2->current.pos.z = current.pos.z; } +#endif iVar5 = 0; for (int i = 0; i < 11; iVar5++, i++) { if (current.pos.y < pfVar2->getJointYPos(i)) break; @@ -2821,10 +2830,15 @@ BOOL daShip_c::procWhirlDown_init() { /* 00007A90-00007BEC .text procWhirlDown__8daShip_cFv */ BOOL daShip_c::procWhirlDown() { - shape_angle.y += (m0408 / 6.2831855f) * 65536.0f; + shape_angle.y += (m0408 / (2*M_PI)) * 65536.0f; if (mWhirlActor) { +#if VERSION == VERSION_DEMO + if (cLib_addCalcPosXZ(¤t.pos, mWhirlActor->current.pos, 1.0f, speedF, 10.0f) < 10.0f) +#else speedF = 40.0f; - if (cLib_addCalcPosXZ(¤t.pos, mWhirlActor->current.pos, 1.0f, 40.0f, 10.0f) < 10.0f) { + if (cLib_addCalcPosXZ(¤t.pos, mWhirlActor->current.pos, 1.0f, 40.0f, 10.0f) < 10.0f) +#endif + { speed.y -= 0.5f; if (speed.y < -10.0f) { speed.y = -10.0f; @@ -3030,7 +3044,7 @@ void daShip_c::setRoomInfo() { m03C4 = dComIfG_Bgsp()->GetGroundCode(mAcch.m_gnd); } else { - roomId = dStage_roomControl_c::mStayNo; + roomId = dComIfGp_roomControl_getStayNo(); m03C4 = 0; } tevStr.mRoomNo = roomId; @@ -3655,9 +3669,9 @@ BOOL daShip_c::execute() { } else { if (mWhirlActor) { - short sVar16; + s16 sVar16; sVar16 = shape_angle.y; - short sVar5; + s16 sVar5; if (m0352) { sVar5 = m040C * 10430.378f + 20480.0f; } @@ -3670,9 +3684,9 @@ BOOL daShip_c::execute() { } } } - short sVar16; + s16 sVar16; sVar16 = -m0384; - short sVar5; + s16 sVar5; sVar5 = sVar16 * 0.05f; if (sVar5 == 0) { if (sVar16 > 0) { @@ -3755,83 +3769,81 @@ BOOL daShip_c::execute() { m1044 = cXyz::Zero; } - else { - if (checkForceMove() && !dComIfGp_event_runCheck()) { - if (mTornadoActor) { - if (!dComIfGp_checkPlayerStatus0(0, daPyStts0_BOW_AIM_e) || !dComIfGp_checkCameraAttentionStatus(0, 0x20)) { - prev_speedF = 25.0f; - } - else { - prev_speedF = 5.0f; - } + else if (checkForceMove() && !dComIfGp_event_runCheck()) { + if (mTornadoActor) { + if (!dComIfGp_checkPlayerStatus0(0, daPyStts0_BOW_AIM_e) || !dComIfGp_checkCameraAttentionStatus(0, 0x20)) { + prev_speedF = 25.0f; } else { - // Bug? This room check assumes we're on the sea without checking? - if (dComIfGs_getBombNum() == 0 && fopAcM_GetRoomNo(this) == dIsleRoom_OutsetIsland_e) { - prev_speedF = 10.0f; - } - else { - prev_speedF = 0.6f; - } - } - - cLib_chaseF(&m0400, 0.0f, prev_speedF); - - m0408 = std::fabsf(speedF) / m0400; - - m040C += m0408; - - BOOL r23; // BUG: this var is never initialized to FALSE - if (mTornadoActor) { - current.pos.x = mTornadoActor->current.pos.x + (m0400 * cM_fsin(m040C)); - current.pos.z = mTornadoActor->current.pos.z + (m0400 * cM_fcos(m040C)); - r23 = TRUE; - } - else if (m0352) { - current.pos.x = mWhirlActor->current.pos.x + (m0400 * cM_fsin(m040C)); - current.pos.z = mWhirlActor->current.pos.z + (m0400 * cM_fcos(m040C)); - r23 = TRUE; - } - else { - prev_speedF = current.pos.y; - fopAcM_posMoveF(this, mStts.GetCCMoveP()); - current.pos.y = prev_speedF; - } - if (r23) { - cXyz sp114(current.pos - old.pos); - float dVar27; - dVar27 = sp114.absXZ(); - if (dVar27 > 1.0f) { - prev_speedF = speedF / dVar27; - current.pos.x = old.pos.x + sp114.x * prev_speedF; - current.pos.z = old.pos.z + sp114.z * prev_speedF; - } + prev_speedF = 5.0f; } } else { - speed.x = (speedF * cM_ssin(current.angle.y)) * cM_scos(m0370); - speed.y = -speedF * cM_ssin(m0370); - speed.z = (speedF * cM_scos(current.angle.y)) * cM_scos(m0370); - fopAcM_posMove(this, mStts.GetCCMoveP()); - if (dComIfGp_event_runCheck()) { - m1044 = cXyz::Zero; - + // Bug? This room check assumes we're on the sea without checking? + if (dComIfGs_getBombNum() == 0 && fopAcM_GetRoomNo(this) == dIsleRoom_OutsetIsland_e) { + prev_speedF = 10.0f; } else { - cXyz sp108; - int sp18; - if (mAcch.GetGroundH() != -G_CM3D_F_INF && dPath_GetPolyRoomPathVec(mAcch.m_gnd, &sp108, &sp18)) { - sp108.normalizeZP(); - sp108 *= sp18 >> 1; - cLib_addCalcPosXZ(&m1044, sp108, 0.5f, 5.0f, 1.0f); - } - else { - cLib_addCalcPosXZ(&m1044, cXyz::Zero, 0.05f, 0.1f, 0.02f); - - } - current.pos += m1044; + prev_speedF = 0.6f; } } + + cLib_chaseF(&m0400, 0.0f, prev_speedF); + + m0408 = std::fabsf(speedF) / m0400; + + m040C += m0408; + + BOOL r23; // BUG: this var is never initialized to FALSE + if (mTornadoActor) { + current.pos.x = mTornadoActor->current.pos.x + (m0400 * cM_fsin(m040C)); + current.pos.z = mTornadoActor->current.pos.z + (m0400 * cM_fcos(m040C)); + r23 = TRUE; + } + else if (m0352) { + current.pos.x = mWhirlActor->current.pos.x + (m0400 * cM_fsin(m040C)); + current.pos.z = mWhirlActor->current.pos.z + (m0400 * cM_fcos(m040C)); + r23 = TRUE; + } + else { + prev_speedF = current.pos.y; + fopAcM_posMoveF(this, mStts.GetCCMoveP()); + current.pos.y = prev_speedF; + } + if (r23) { + cXyz sp114(current.pos - old.pos); + f32 dVar27; + dVar27 = sp114.absXZ(); + if (dVar27 > 1.0f) { + prev_speedF = speedF / dVar27; + current.pos.x = old.pos.x + sp114.x * prev_speedF; + current.pos.z = old.pos.z + sp114.z * prev_speedF; + } + } + } + else { + speed.x = (speedF * cM_ssin(current.angle.y)) * cM_scos(m0370); + speed.y = -speedF * cM_ssin(m0370); + speed.z = (speedF * cM_scos(current.angle.y)) * cM_scos(m0370); + fopAcM_posMove(this, mStts.GetCCMoveP()); + if (dComIfGp_event_runCheck()) { + m1044 = cXyz::Zero; + + } + else { + cXyz sp108; + int sp18; + if (mAcch.GetGroundH() != -G_CM3D_F_INF && dPath_GetPolyRoomPathVec(mAcch.m_gnd, &sp108, &sp18)) { + sp108.normalizeZP(); + sp108 *= sp18 >> 1; + cLib_addCalcPosXZ(&m1044, sp108, 0.5f, 5.0f, 1.0f); + } + else { + cLib_addCalcPosXZ(&m1044, cXyz::Zero, 0.05f, 0.1f, 0.02f); + + } + current.pos += m1044; + } } } else { @@ -3876,7 +3888,7 @@ BOOL daShip_c::execute() { setYPos(); - float diff = m03F4 - current.pos.y; + f32 diff = m03F4 - current.pos.y; mTrack.mBaseY = m03F4; mTrack.mMinY = m03F8; @@ -4001,6 +4013,7 @@ BOOL daShip_c::execute() { cMtx_multVec(mModel1->getAnmMtx(10), &l_tiller_top_offset, &mTillerTopPos); + daGrid_c* grid; MtxP mMtx = mModel1->getAnmMtx(7); m0444.x = mMtx[0][3]; @@ -4008,7 +4021,7 @@ BOOL daShip_c::execute() { m0444.z = mMtx[2][3]; cXyz spD8; - daGrid_c* grid = mpGrid; + grid = mpGrid; if (grid) { static cXyz top_offset(0.0f, 0.0f, -365.0f); static cXyz XZ_top_offset(265.0f, 0.0f, 0.0f); @@ -4023,7 +4036,11 @@ 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 } } @@ -4041,7 +4058,7 @@ BOOL daShip_c::execute() { } if (!checkStateFlg(daSFLG_FLY_e)) { - float shipCruiseSpeed = std::fabsf(speedF) / 55.0f; + f32 shipCruiseSpeed = std::fabsf(speedF) / 55.0f; if (shipCruiseSpeed > 1.0f){ shipCruiseSpeed = 1.0f; } @@ -4063,33 +4080,42 @@ BOOL daShip_c::execute() { link = daPy_getPlayerLinkActorClass(); cXyz spCC; spCC = link->current.pos - current.pos; - float distXz = (spCC.x * cM_ssin(shape_angle.y) + spCC.z * cM_scos(shape_angle.y)); + f32 distXz = (spCC.x * cM_ssin(shape_angle.y) + spCC.z * cM_scos(shape_angle.y)); attention_info.flags = 0; - BOOL bVar21 = FALSE; + BOOL r23_2; + r23_2 = FALSE; attention_info.position.set(eyePos.x, eyePos.y + 30.0f, eyePos.z); cXyz spC0; if (checkStateFlg(daSFLG_UNK1000000_e)) { spC0 = m1068 - eyePos; - bVar21 = TRUE; + r23_2 = TRUE; offStateFlg(daSFLG_UNK1000000_e); } else if (m0428) { spC0 = *m0428 - eyePos; - bVar21 = TRUE; + r23_2 = TRUE; } else if ((mCurMode == 10 || mCurMode == 11) && m0434 && mRopeCnt > 0) { spC0 = *m0434 - eyePos; - bVar21 = TRUE; + r23_2 = TRUE; } else if (mCurMode == 8 || distXz > 125.0f) { if ( - (!dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && (!dComIfGs_isEventBit(0x3910) || dComIfGs_isEventBit(0x2D02))) && - dComIfGp_getMiniGameType() != 1 && fopAcM_searchPlayerDistanceXZ2(this) < 250000.0f + (!dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && + (!dComIfGs_isEventBit(0x3910) || dComIfGs_isEventBit(0x2D02))) && + dComIfGp_getMiniGameType() != 1 ) { - spC0 = link->eyePos - eyePos; - bVar21 = TRUE; +#if VERSION == VERSION_DEMO attention_info.flags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e; +#endif + if (fopAcM_searchPlayerDistanceXZ2(this) < 250000.0f) { + spC0 = link->eyePos - eyePos; + r23_2 = TRUE; +#if VERSION > VERSION_DEMO + attention_info.flags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e; +#endif + } } } else { @@ -4109,9 +4135,9 @@ BOOL daShip_c::execute() { } } - short sVar16; - short sVar5; - if (bVar21) { + s16 sVar16; + s16 sVar5; + if (r23_2) { sVar16 = cM_atan2s(-spC0.y, spC0.absXZ()) - shape_angle.x; if (sVar16 > 0x2000) { @@ -4161,7 +4187,9 @@ BOOL daShip_c::execute() { fopAcM_orderSpeakEvent(this); offStateFlg(daSFLG_UNK400000_e); attention_info.flags |= (fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e); +#if VERSION > VERSION_DEMO eventInfo.onCondition(dEvtCnd_CANTALK_e); +#endif } } if ( @@ -4172,8 +4200,8 @@ BOOL daShip_c::execute() { attention_info.flags &= ~fopAc_Attn_ACTION_SHIP_e; } if (mCurMode != 8 && dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { - BOOL r24; - r24 = TRUE; + BOOL r24_2; + r24_2 = TRUE; if (dComIfGs_isEventBit(0x1E40) && !dComIfGs_isEventBit(0x3840)) { mNextMessageNo = 0x168c; } @@ -4190,11 +4218,13 @@ BOOL daShip_c::execute() { mNextMessageNo = 0x1683; } else { - r24 = FALSE; + r24_2 = FALSE; } - if (r24) { + if (r24_2) { fopAcM_orderSpeakEvent(this); +#if VERSION > VERSION_DEMO eventInfo.onCondition(dEvtCnd_CANTALK_e); +#endif attention_info.flags |= (fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e); offStateFlg(daSFLG_UNK400000_e); }