diff --git a/include/JSystem/JMath/JMath.h b/include/JSystem/JMath/JMath.h index 08e15fb9..343571b8 100644 --- a/include/JSystem/JMath/JMath.h +++ b/include/JSystem/JMath/JMath.h @@ -214,8 +214,8 @@ namespace JMathInlineVEC { } inline f32 C_VECSquareMag(register const Vec* v) { - register f32 z; register f32 x_y; + register f32 z; register f32 res; #ifdef __MWERKS__ asm { diff --git a/include/d/t/d_t_mass_obj.h b/include/d/t/d_t_mass_obj.h index 98a34f69..308ac075 100644 --- a/include/d/t/d_t_mass_obj.h +++ b/include/d/t/d_t_mass_obj.h @@ -1,18 +1,12 @@ #ifndef D_T_MASS_OBJ_H #define D_T_MASS_OBJ_H -#include "c/c_math.h" #include "common.h" -#include "d/d_heap.h" #include "d/t/d_tg.h" #include "egg/core/eggHeap.h" -#include "egg/math/eggMatrix.h" #include "egg/math/eggQuat.h" #include "m/m3d/m_proc.h" -#include "m/m3d/m_scnleaf.h" #include "m/m_angle.h" -#include "m/m_color.h" -#include "m/m_heap.h" #include "m/m_mtx.h" #include "m/m_quat.h" #include "m/m_vec.h" @@ -20,7 +14,6 @@ #include "nw4r/g3d/res/g3d_resshp.h" #include "nw4r/math/math_types.h" #include "rvl/GX/GXTypes.h" -#include "s/s_Math.h" #include "toBeSorted/tlist.h" class dTgMassObjInstance; @@ -49,13 +42,13 @@ public: ~dTgMassObjInstance() {} void reset(); void releaseDynamicTransform(GrassModel *param_2); - s32 checkForHit(GrassModel *param2,GrassModelData *param3,u16 roomid); - undefined4 checkForHit(u32 param_2,dCcMassS_HitInf& param_3,dAcObjBase_c* param_4, + bool checkForHit(GrassModel *param2,GrassModelData *param3,u16 roomid); + bool checkForHit(u32 param_2,dCcMassS_HitInf& param_3,dAcObjBase_c* param_4, GrassModel *param_5,GrassModelData* param_6,undefined4 roomid); - undefined4 FUN_80278c70(u32 param_2,dCcMassS_HitInf & param_3,dAcBase_c *param_4, + bool FUN_80278c70(u32 param_2,dCcMassS_HitInf & param_3,dAcBase_c *param_4, GrassModel *param_5); - undefined4 handleLinkSpinAttack(GrassModel *param_2); - s32 handleTimeshiftZone(); + bool handleLinkSpinAttack(GrassModel *param_2); + bool handleTimeshiftZone(); void getDrawMatrix(mMtx_c *pOut); bool isHidden(f32 param2, f32 param3); bool isItemDrop10() const { @@ -156,16 +149,16 @@ public: /* vt 0x08 */ virtual ~GrassModel() { remove(); } - undefined4 + bool setModelInfo(f32 radius,f32 param_2,int param_4, s32 roomCount,u16 instanceListLength,u16 staticTransformationListLength,int dynamicTransformationListLength, undefined1 param_9,s32 opaDrawPrio,u32 xluDrawPrio,mHeapAllocator_c *allocator); - undefined4 + bool spawnSingleGrass(int modelSubtype,u16 roomid,mVec3_c *groundHeight, u16 yRotation,s32 specialItemDropId,int affectedByTimeshift,int activeInPresent, s32 massObjSubtype,u8 lightingCode); void addToFreeInstances(dTgMassObjInstance *param_2); - s32 addToRoom(u32 param2, s32 roomid, dTgMassObjInstance* param4); + bool addToRoom(u32 param2, s32 roomid, dTgMassObjInstance* param4); void unloadRoom(u16 roomid); void initResForModel(s32 param_2,nw4r::g3d::ResMat pResMat,nw4r::g3d::ResShp pResShp); dTgMassObjTransform* aquireTransform(); diff --git a/include/egg/math/eggVector.h b/include/egg/math/eggVector.h index 8886a45a..515b3e5a 100644 --- a/include/egg/math/eggVector.h +++ b/include/egg/math/eggVector.h @@ -135,10 +135,6 @@ struct Vector3f : public nw4r::math::VEC3 { return squaredLength() <= Math::epsilon(); } - bool isZero2() const { - return fabsf(JMathInlineVEC::C_VECSquareMag(*this)) <= Math::epsilon(); - } - void setZero() { x = y = z = 0.0f; } diff --git a/include/m/m_mtx.h b/include/m/m_mtx.h index 3cdb56bb..fb18660f 100644 --- a/include/m/m_mtx.h +++ b/include/m/m_mtx.h @@ -147,11 +147,6 @@ public: MTXMultVec(*this, ret, ret); return ret; } - mVec3_c multVec2(const mVec3_c &v) const { - mVec3_c ret; - MTXMultVec(*this, v, ret); - return ret; - } void multVecSR(const mVec3_c &in, mVec3_c &out) const { MTXMultVecSR(*this, in, out); diff --git a/src/d/tg/d_t_mass_object.cpp b/src/d/tg/d_t_mass_object.cpp index a6cae7f3..ca696107 100644 --- a/src/d/tg/d_t_mass_object.cpp +++ b/src/d/tg/d_t_mass_object.cpp @@ -39,7 +39,6 @@ #include "nw4r/g3d/res/g3d_resmat.h" #include "nw4r/g3d/res/g3d_resmdl.h" #include "nw4r/g3d/res/g3d_resshp.h" -#include "nw4r/math/math_geometry.h" #include "nw4r/math/math_types.h" #include "rvl/GX/GXTev.h" #include "rvl/GX/GXTransform.h" @@ -49,7 +48,6 @@ #include "toBeSorted/d_emitter.h" #include "toBeSorted/special_item_drop_mgr.h" #include "toBeSorted/time_area_mgr.h" -#include SPECIAL_ACTOR_PROFILE(MASS_OBJ_TAG, dTgMassObj_c, fProfile::MASS_OBJ_TAG, 0x28A, 0, 4); @@ -183,7 +181,7 @@ static const GrassModelNames GRASS_MODEL_NAMES[5] = { }, }; -static const f32 GRASS_VECS[4][3] = { +static const Vec GRASS_VECS[4] = { { -0.5f, 0.5f, @@ -289,9 +287,9 @@ int dTgMassObj_c::actorPostCreate() { mVec3_c minVec(FLOAT_MAX, FLOAT_MAX, FLOAT_MAX); mVec3_c maxVec(FLOAT_MIN, FLOAT_MIN, FLOAT_MIN); - const f32 (*loop)[3] = &GRASS_VECS[0]; + const Vec* loop = &GRASS_VECS[0]; for (s32 i = 0; i < ARRAY_LENGTH(GRASS_VECS); i++) { - mVec3_c mult = mtx.multVec2(mVec3_c(*(loop++))); + mVec3_c mult = mtx * *(loop++); if (mult.x < minVec.x) { minVec.x = mult.x; } @@ -506,39 +504,39 @@ void GrassModel::remove() { m3d::scnLeaf_c::remove(); } -undefined4 GrassModel::setModelInfo(f32 radius,f32 param_2,int param_4, +bool GrassModel::setModelInfo(f32 radius,f32 param_2,int param_4, s32 roomCount,u16 instanceListLength,u16 staticTransformationListLength,int dynamicTransformationListLength, undefined1 param_9,s32 opaDrawPrio,u32 xluDrawPrio,mHeapAllocator_c *allocator) { if (!create(allocator, nullptr)) { - return 0; + return false; } EGG::Heap* heap = allocator->mHeap; mpModelData = new (heap, 4) GrassModelData[param_4]; if (!mpModelData) { remove(); - return 0; + return false; } GrassModelData* modelData = &mpModelData[0]; for (s32 i = 0; i < param_4; i++) { if (!(modelData++)->tryCreateLinkedLists(roomCount, heap)) { remove(); - return 0; + return false; } } mInstanceList = new (heap, 4) dTgMassObjInstance[instanceListLength]; if (!mInstanceList) { remove(); - return 0; + return false; } mStaticTransformationList = new (heap, 4) dTgMassObjTransform[staticTransformationListLength]; if (!mStaticTransformationList) { remove(); - return 0; + return false; } mDynamicTransformationList = new (heap, 4) dTgMassObjTransform[dynamicTransformationListLength]; if (!mDynamicTransformationList) { remove(); - return 0; + return false; } field_0x58 = param_4; mRoomCount = roomCount; @@ -576,61 +574,61 @@ undefined4 GrassModel::setModelInfo(f32 radius,f32 param_2,int param_4, setPriorityDraw(0, xluDrawPrio); setOption(nw4r::g3d::ScnObj::OPTION_DISABLE_DRAW_OPA, 1); } - return 1; + return true; } void GrassModel::initResForModel(s32 room,nw4r::g3d::ResMat pResMat,nw4r::g3d::ResShp pResShp) { mpModelData[room].initRes(pResMat, pResShp); } -undefined4 GrassModel::spawnSingleGrass(int modelSubtype,u16 roomid,mVec3_c *groundHeight, +bool GrassModel::spawnSingleGrass(int modelSubtype,u16 roomid,mVec3_c *groundHeight, u16 yRotation,s32 specialItemDropId,int affectedByTimeshift,int activeInPresent, s32 massObjSubtype,u8 lightingCode) { const dLightEnv_c& lightEnv = dLightEnv_c::GetInstance(); if (mFreeInstances.mCount == 0) { - return 0; + return false; } // almost - dTgMassObjInstance* first = &*mFreeInstances.GetBeginIter(); - mFreeInstances.remove(first); - first->reset(); - first->mGroundHeight.set(*groundHeight); - first->yRotation = yRotation; - first->mSpecialItemDropId = specialItemDropId; - first->mDynamicTransform = nullptr; + dTgMassObjInstance& first = *mFreeInstances.GetBeginIter(); + mFreeInstances.remove(&first); + first.reset(); + first.mGroundHeight.set(*groundHeight); + first.yRotation = yRotation; + first.mSpecialItemDropId = specialItemDropId; + first.mDynamicTransform = nullptr; s32 chosen = cM::rndInt(mStaticTransformationListLength); - first->mInitPosTransform = &mStaticTransformationList[chosen]; - first->field_0x24 = cM::rndFX(0.2f) + 1.f; - first->mMassObjSubtype = massObjSubtype; - first->mLightingCode = lightingCode; - first->mTevColor = lightEnv.GetCurrentSpf().mActorPalette.field_0x02C; - if (first->mLightingCode == 0) { - first->mTevColor.r = 0.7f * first->mTevColor.r; - first->mTevColor.r &= 0xFF; - first->mTevColor.g = 0.6f * first->mTevColor.g; - first->mTevColor.g &= 0xFF; - first->mTevColor.b = 0.7f * first->mTevColor.b; - first->mTevColor.b &= 0xFF; + first.mInitPosTransform = &mStaticTransformationList[chosen]; + first.field_0x24 = cM::rndFX(0.2f) + 1.f; + first.mMassObjSubtype = massObjSubtype; + first.mLightingCode = lightingCode; + first.mTevColor = lightEnv.GetCurrentSpf().mActorPalette.field_0x02C; + if (first.mLightingCode == 0) { + first.mTevColor.r = 0.7f * first.mTevColor.r; + first.mTevColor.r &= 0xFF; + first.mTevColor.g = 0.6f * first.mTevColor.g; + first.mTevColor.g &= 0xFF; + first.mTevColor.b = 0.7f * first.mTevColor.b; + first.mTevColor.b &= 0xFF; } if (affectedByTimeshift) { - first->mGrassFlags |= dTgMassObjInstance::TG_MASS_UNK2_TIMESHIFT_RELATED; + first.mGrassFlags |= dTgMassObjInstance::TG_MASS_UNK2_TIMESHIFT_RELATED; if (activeInPresent) { - first->mActiveInPresent = true; + first.mActiveInPresent = true; } else { - first->mScale = 0.f; + first.mScale = 0.f; } } - mpModelData[modelSubtype].addToRoom(roomid, first); - return 1; + mpModelData[modelSubtype].addToRoom(roomid, &first); + return true; } -s32 GrassModel::addToRoom(u32 modelSubtype, s32 roomid, dTgMassObjInstance* pInstance) { +bool GrassModel::addToRoom(u32 modelSubtype, s32 roomid, dTgMassObjInstance* pInstance) { mpModelData[modelSubtype].addToRoom(roomid, pInstance); if (modelSubtype == 1) { SpecialItemDropMgr::GetInstance()->giveSpecialDropItem(pInstance->mSpecialItemDropId, roomid, &pInstance->mGroundHeight, 0, 0, -1); pInstance->mSpecialItemDropId = 0xFF; } - return 1; + return true; } void GrassModel::addToFreeInstances(dTgMassObjInstance *param_2) { @@ -674,10 +672,10 @@ dTgMassObjTransform* GrassModel::aquireTransform() { return nullptr; } // not exactly, this produces an additional instruction - dTgMassObjTransform * first = &*(mAvailableTransforms.GetBeginIter()); - mAvailableTransforms.remove(first); - mAquiredTransforms.append(first); - return first; + dTgMassObjTransform& first = *mAvailableTransforms.GetBeginIter(); + mAvailableTransforms.remove(&first); + mAquiredTransforms.append(&first); + return &first; } // regalloc, should be equivalent @@ -686,14 +684,12 @@ void GrassModel::releaseTransform(dTgMassObjTransform* param2) { mAvailableTransforms.append(param2); } -static s32 lbl_80573AF0 = 0x1000; - dTgMassObjTransform::dTgMassObjTransform() { field_0x00 = 0; field_0x04 = 0; mRotXSpeed = 0; mRotY = cM::rndInt(0x10000); - mRotX = lbl_80573AF0; + mRotX = 0x1000; mQuat.setUnit(); s32 rnd = cM::rndInt(100); for (s32 i = 0; i < rnd; i++) { @@ -701,12 +697,10 @@ dTgMassObjTransform::dTgMassObjTransform() { } } -#define CLAMP2(low, high, x) ((x) < (low) ? (low) : ((x) > (high) ? (high) : (x))) - // matches besides data void dTgMassObjTransform::update() { mRotXSpeed -= (s16)(mRotX * 0.005f); - mRotXSpeed = CLAMP2(-0x4B, 0x4B, mRotXSpeed); + mRotXSpeed = cM::minMaxLimit(mRotXSpeed, -0x4B, 0x4B); mRotX += mRotXSpeed; mVec3_c tmp1(0, 1, 0); mVec3_c tmp2(0, 1, 0); @@ -757,15 +751,14 @@ void dTgMassObjInstance::getDrawMatrix(mMtx_c *pOut) { } // matches besides data -s32 dTgMassObjInstance::checkForHit(GrassModel *param_2, +bool dTgMassObjInstance::checkForHit(GrassModel *param_2, GrassModelData *param_3,u16 roomid) { dCcMassS_HitInf massHitInf; dAcObjBase_c* actor; u32 chk = dCcS::GetInstance()->GetMassMng().Chk(&mGroundHeight, &actor, &massHitInf); - s32 iVar5 = checkForHit(chk, massHitInf, actor, param_2, param_3, roomid); - if (iVar5 == 0 - && FUN_80278c70(chk, massHitInf, actor, param_2) == 0 - && handleLinkSpinAttack(param_2) == 0) { + if (!checkForHit(chk, massHitInf, actor, param_2, param_3, roomid) + && !FUN_80278c70(chk, massHitInf, actor, param_2) + && !handleLinkSpinAttack(param_2)) { if (mDynamicTransform != nullptr) { EGG::Quatf& dynQuat = mDynamicTransform->mQuat; f32 fVar2 = (mInitPosTransform->mQuat.dot(dynQuat)); @@ -782,21 +775,21 @@ s32 dTgMassObjInstance::checkForHit(GrassModel *param_2, mDynamicTransform = nullptr; } } - return 0; + return false; } else { - return 1; + return true; } } // matches besides data -undefined4 dTgMassObjInstance::checkForHit(u32 param_2,dCcMassS_HitInf& param_3,dAcObjBase_c* param_4, +bool dTgMassObjInstance::checkForHit(u32 param_2,dCcMassS_HitInf& param_3,dAcObjBase_c* param_4, GrassModel *param_5,GrassModelData* param_6,undefined4 roomid) { dAcPy_c * link = dAcPy_c::GetLinkM(); if (link == nullptr) { - return 0; + return false; } if ((param_2 & 1) == 0 || param_4 == nullptr) { - return 0; + return false; } f32 impactDistanceFactor; f32 impactFactor; @@ -926,7 +919,7 @@ undefined4 dTgMassObjInstance::checkForHit(u32 param_2,dCcMassS_HitInf& param_3, impactFactor = cM::rndF(0.05f) + 0.5f; isNotCut = 1; if (distance >= fVar20 + 60.f) { - return 1; + return true; } } } else { @@ -936,10 +929,10 @@ undefined4 dTgMassObjInstance::checkForHit(u32 param_2,dCcMassS_HitInf& param_3, distance = mGroundHeight.distance(hitPosition); if (link->getSpecificAttackDirection() != 2 && link->getSpecificAttackDirection() != 0x80) { - return 1; + return true; } if (distance >= fVar21) { - return 1; + return true; } } if (link->isAttackingSpin()) { @@ -956,7 +949,7 @@ undefined4 dTgMassObjInstance::checkForHit(u32 param_2,dCcMassS_HitInf& param_3, impactFactor = cM::rndF(0.5f) + 0.5f; isNotCut = 1; } else { - return 1; + return true; } } } else { @@ -979,13 +972,13 @@ undefined4 dTgMassObjInstance::checkForHit(u32 param_2,dCcMassS_HitInf& param_3, if (mDynamicTransform == nullptr) { mDynamicTransform = param_5->aquireTransform(); if (mDynamicTransform == nullptr) { - return 0; + return false; } mDynamicTransform->mQuat.set(mInitPosTransform->mQuat); mDynamicTransform->mMtx.fromQuat(mInitPosTransform->mQuat); } if (param_4 == nullptr) { - return 0; + return false; } mVec3_c local108 = mGroundHeight - hitPosition; local108.rotY(0x4000); @@ -1003,7 +996,7 @@ undefined4 dTgMassObjInstance::checkForHit(u32 param_2,dCcMassS_HitInf& param_3, if (!local120.normalizeRS()) { local120 = localB4; } - } else if (local114.isZero2()) { + } else if (cM::isZero(local114.getSquareMag())) { local120 = mGroundHeight - hitPosition; if (!local120.normalizeRS()) { local120.x = 1.f; @@ -1046,13 +1039,13 @@ undefined4 dTgMassObjInstance::checkForHit(u32 param_2,dCcMassS_HitInf& param_3, if (mDynamicTransform == nullptr) { mDynamicTransform = param_5->aquireTransform(); if (mDynamicTransform == nullptr) { - return 0; + return false; } mDynamicTransform->mQuat.set(mInitPosTransform->mQuat); mDynamicTransform->mMtx.fromQuat(mInitPosTransform->mQuat); } if (param_4 == nullptr) { - return 0; + return false; } mVec3_c local150 = mGroundHeight - param_4->mPosition; mQuat_c local160; @@ -1133,23 +1126,23 @@ undefined4 dTgMassObjInstance::checkForHit(u32 param_2,dCcMassS_HitInf& param_3, case 7: ret = dJEffManager_c::spawnEffect(PARTICLE_RESOURCE_ID_MAPPING_838_, local16C, nullptr, nullptr, &local17C, nullptr, 0, 0); if (ret != nullptr) { - ret->bindShpEmitter(0x24, true); + ret->bindShpEmitter(dJEffManager_c::FlowerA00F, true); } ret = dJEffManager_c::spawnEffect(PARTICLE_RESOURCE_ID_MAPPING_839_, local16C, nullptr, nullptr, &local17C, nullptr, 0, 0); if (ret != nullptr) { - ret->bindShpEmitter(0x25, true); + ret->bindShpEmitter(dJEffManager_c::FlowerA00L, true); } break; case 8: ret = dJEffManager_c::spawnEffect(PARTICLE_RESOURCE_ID_MAPPING_840_, local16C, nullptr, nullptr, &local17C, nullptr, 0, 0); if (ret != nullptr) { - ret->bindShpEmitter(0x26, true); + ret->bindShpEmitter(dJEffManager_c::FlowerB00, true); } break; case 9: ret = dJEffManager_c::spawnEffect(PARTICLE_RESOURCE_ID_MAPPING_841_, local16C, nullptr, nullptr, &local17C, nullptr, 0, 0); if (ret != nullptr) { - ret->bindShpEmitter(0x27, true); + ret->bindShpEmitter(dJEffManager_c::FlowerB01, true); } break; } @@ -1157,18 +1150,18 @@ undefined4 dTgMassObjInstance::checkForHit(u32 param_2,dCcMassS_HitInf& param_3, } } } - return 1; + return true; } // non matching -undefined4 dTgMassObjInstance::FUN_80278c70(u32 param_2,dCcMassS_HitInf ¶m_3, dAcBase_c *param_4, +bool dTgMassObjInstance::FUN_80278c70(u32 param_2,dCcMassS_HitInf ¶m_3, dAcBase_c *param_4, GrassModel *param_5) { mVec3_c local54 = mGroundHeight; f32 fVar12 = 1000.f; s32 iVar11 = 0; f32 fVar1 = 0.55f; if ((param_2 & 2) == 0) { - return 0; + return false; } if (param_4 == nullptr) { param_4 = dAcPy_c::GetLinkM(); @@ -1202,7 +1195,7 @@ undefined4 dTgMassObjInstance::FUN_80278c70(u32 param_2,dCcMassS_HitInf ¶m_3 } local54 = mGroundHeight - param_4->getPosition(); if (param_5->mRadiusSquared < local54.squareMagXZ()) { - return 0; + return false; } f32 distance = mGroundHeight.distance(param_4->getPosition()); f32 fVar13; @@ -1220,12 +1213,12 @@ undefined4 dTgMassObjInstance::FUN_80278c70(u32 param_2,dCcMassS_HitInf ¶m_3 if (mDynamicTransform == nullptr) { mDynamicTransform = param_5->aquireTransform(); if (mDynamicTransform == nullptr) { - return 0; + return false; } mDynamicTransform->mQuat.set(mInitPosTransform->mQuat); mDynamicTransform->mMtx.fromQuat(mInitPosTransform->mQuat); } - if (local54.isZero2()) { + if (cM::isZero(local54.getSquareMag())) { local54.set(1.f, 0.5f, 0.f); } mQuat_c local88; @@ -1249,65 +1242,64 @@ undefined4 dTgMassObjInstance::FUN_80278c70(u32 param_2,dCcMassS_HitInf ¶m_3 localA8.makeWPositive(); mDynamicTransform->setQuat(local88); mDynamicTransform->setMtxFromQuat(localA8); - return 1; + return true; } // matches besides data -undefined4 dTgMassObjInstance::handleLinkSpinAttack(GrassModel *param_2) { +bool dTgMassObjInstance::handleLinkSpinAttack(GrassModel *param_2) { const dAcPy_c* link = dAcPy_c::GetLink(); if (link == nullptr) { - return 0; + return false; } if (!link->isAttackingSpin()) { - return 0; - } else { - mVec3_c local3C; - dAcPy_c::GetLink()->getPostionDifferenceOut(mGroundHeight, local3C); - f32 dist = mGroundHeight.distance(dAcPy_c::GetLinkM()->getPosition()); - f32 comparison = 350.f; - if (link->isAttackingDown()) { - comparison = 150.f; - } else if (link->checkSwordAndMoreStates(daPlayerActBase_c::SKYWARD_STRIKE_ACTIVE)) { - comparison = 450.f; - } - if (dist > comparison) { - return 0; - } - mVec3_c local48(0.f, 1.f, 0.f); - if (mDynamicTransform == nullptr) { - mDynamicTransform = param_2->aquireTransform(); - if (mDynamicTransform == nullptr) { - return 0; - } - mDynamicTransform->mQuat.set(mInitPosTransform->mQuat); - mDynamicTransform->mMtx.fromQuat(mInitPosTransform->mQuat); - } - if (local3C.isZero2()) { - local3C.set(1.f, 0.5f, 0.f); - } - mQuat_c local58; - mVec3_c local68 = local3C; - if (!local68.normalizeRS()) { - local68.x = 1.f; - local68.z = 0.f; - } - local68.y = 0.5f; - if (!local68.normalizeRS()) { - local68 = local48; - } - local58.makeVectorRotation(local48, local68); - local58.slerpTo2(cM::rndF(0.5f), mInitPosTransform->mQuat, local58); - local58.normalise(); - local58.makeWPositive(); - mQuat_c local78; - mDynamicTransform->mMtx.toQuat(local78); - local78.slerpTo(local58, cM::rndF(0.3f) + 0.5f, local78); - local78.normalise(); - local78.makeWPositive(); - mDynamicTransform->mQuat.set(local58); - mDynamicTransform->setMtxFromQuat(local78); - return 1; + return false; } + mVec3_c local3C; + dAcPy_c::GetLink()->getPostionDifferenceOut(mGroundHeight, local3C); + f32 dist = mGroundHeight.distance(dAcPy_c::GetLinkM()->getPosition()); + f32 comparison = 350.f; + if (link->isAttackingDown()) { + comparison = 150.f; + } else if (link->checkSwordAndMoreStates(daPlayerActBase_c::SKYWARD_STRIKE_ACTIVE)) { + comparison = 450.f; + } + if (dist > comparison) { + return false; + } + mVec3_c local48(0.f, 1.f, 0.f); + if (mDynamicTransform == nullptr) { + mDynamicTransform = param_2->aquireTransform(); + if (mDynamicTransform == nullptr) { + return false; + } + mDynamicTransform->mQuat.set(mInitPosTransform->mQuat); + mDynamicTransform->mMtx.fromQuat(mInitPosTransform->mQuat); + } + if (cM::isZero(local3C.getSquareMag())) { + local3C.set(1.f, 0.5f, 0.f); + } + mQuat_c local58; + mVec3_c local68 = local3C; + if (!local68.normalizeRS()) { + local68.x = 1.f; + local68.z = 0.f; + } + local68.y = 0.5f; + if (!local68.normalizeRS()) { + local68 = local48; + } + local58.makeVectorRotation(local48, local68); + local58.slerpTo2(cM::rndF(0.5f), mInitPosTransform->mQuat, local58); + local58.normalise(); + local58.makeWPositive(); + mQuat_c local78; + mDynamicTransform->mMtx.toQuat(local78); + local78.slerpTo(local58, cM::rndF(0.3f) + 0.5f, local78); + local78.normalise(); + local78.makeWPositive(); + mDynamicTransform->mQuat.set(local58); + mDynamicTransform->setMtxFromQuat(local78); + return true; } extern "C" bool fn_801BB700(EGG::Quatf*,f32); @@ -1330,21 +1322,21 @@ bool dTgMassObjInstance::isHidden(f32 param2, f32 param3) { } // matches besides data -s32 dTgMassObjInstance::handleTimeshiftZone() { - s32 uVar1 = 1; +bool dTgMassObjInstance::handleTimeshiftZone() { + bool ret = true; f32 fVar2 = dTimeAreaMgr_c::GetInstance()->checkPositionIsInPastState(-1, mGroundHeight, nullptr, 8.f); if (mActiveInPresent == false) { sLib::addCalc(&mScale, fVar2, 0.5f, 0.2f, 0.01f); if (mScale <= 0) { - uVar1 = 0; + ret = false; } } else if (mActiveInPresent == true) { sLib::addCalc(&mScale, 1.f - fVar2, 0.5f, 0.2f, 0.01f); if (mScale <= 0) { - uVar1 = 0; + ret = false; } } - return uVar1; + return ret; } bool GrassModelData::tryCreateLinkedLists(s32 entrycount, EGG::Heap* heap) { @@ -1369,11 +1361,11 @@ void GrassModelData::unloadRoom(GrassModel *param_2,int roomid) { dTgMassObjInstanceList& gll = mLinkedLists[roomid]; dTgMassObjInstanceList::Iterator it = gll.GetBeginIter(); while (it != gll.GetEndIter()) { - dTgMassObjInstance* lst = (&*(it)); + dTgMassObjInstance& lst = *it; ++it; - lst->releaseDynamicTransform(param_2); - gll.remove(lst); - param_2->addToFreeInstances(lst); + lst.releaseDynamicTransform(param_2); + gll.remove(&lst); + param_2->addToFreeInstances(&lst); } } @@ -1450,14 +1442,14 @@ void GrassModelData::draw(f32 param_1,f32 param_2, LoadMaterial(mResMat, 0, nullptr, nullptr, false); nw4r::g3d::G3DState::LoadResShpPrePrimitive(mResShp); const static u32 fifoMtx[8] = { - 0x3C, - 0x3C, - 0x3C, - 0x3C, - 0x3C, - 0x3C, - 0x3C, - 0x3C, + GX_IDENTITY, + GX_IDENTITY, + GX_IDENTITY, + GX_IDENTITY, + GX_IDENTITY, + GX_IDENTITY, + GX_IDENTITY, + GX_IDENTITY, }; nw4r::g3d::fifo::GDSetCurrentMtx(fifoMtx); GXSetCurrentMtx(0); @@ -1468,11 +1460,11 @@ void GrassModelData::draw(f32 param_1,f32 param_2, } dTgMassObjInstanceList::Iterator it = grassList->GetBeginIter(); for (;it != grassList->GetEndIter();++it) { - dTgMassObjInstance* lst = (&*it); - if (!lst->isHidden(param_1, param_2)) { + dTgMassObjInstance& lst = *it; + if (!lst.isHidden(param_1, param_2)) { mMtx_c local160; - lst->getDrawMatrix(&local160); - f32 cameraDist = lst->mGroundHeight.distance(cameraPosition); + lst.getDrawMatrix(&local160); + f32 cameraDist = lst.mGroundHeight.distance(cameraPosition); f32 fVar6 = param_2 * 0.6f; if (cameraDist > fVar6) { f32 fVar7 = (cameraDist - fVar6) / (param_2 - fVar6); @@ -1488,20 +1480,20 @@ void GrassModelData::draw(f32 param_1,f32 param_2, } } if (isInFaronWoods - && lst->mGroundHeight.x <= -5200.f - && lst->mGroundHeight.x >= -5500.f - && lst->mGroundHeight.z <= -5900.f - && lst->mGroundHeight.z >= -6100.f) { + && lst.mGroundHeight.x <= -5200.f + && lst.mGroundHeight.x >= -5500.f + && lst.mGroundHeight.z <= -5900.f + && lst.mGroundHeight.z >= -6100.f) { local160.scaleM(1.f, 1.5f, 1.f); } - f32 fVar7 = ((s32)(lst->mGroundHeight.x + lst->mGroundHeight.z) & 0x1F) / 31.f; + f32 fVar7 = ((s32)(lst.mGroundHeight.x + lst.mGroundHeight.z) & 0x1F) / 31.f; f32 scale = fVar7 * 0.1f + 1.f; local160.scaleM(scale, scale, scale); local160.YrotM(fVar7 * 65535.f); MTXConcat(*pMtx, local160, local160); GXLoadPosMtxImm(local160, 0); GXLoadNrmMtxImm(local160, 0); - GXSetTevColorS10(GX_TEVREG1, lst->mTevColor); + GXSetTevColorS10(GX_TEVREG1, lst.mTevColor); mResShp.CallPrimitiveDisplayList(false); } }