From 03ef438a7283fde341cc4938936ba882c3609993 Mon Sep 17 00:00:00 2001 From: "Walied K. Yassen" Date: Sun, 29 Nov 2020 04:20:28 +0200 Subject: Fix CObject::DeleteAllTempObjectsInArea not considering the given point --- src/objects/Object.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/objects/Object.cpp b/src/objects/Object.cpp index 93b6d581..2319c0d9 100644 --- a/src/objects/Object.cpp +++ b/src/objects/Object.cpp @@ -515,7 +515,8 @@ CObject::DeleteAllTempObjectsInArea(CVector point, float fRadius) CObjectPool *objectPool = CPools::GetObjectPool(); for (int32 i = 0; i < objectPool->GetSize(); i++) { CObject *pObject = objectPool->GetSlot(i); - if (pObject && pObject->ObjectCreatedBy == TEMP_OBJECT && fRadius * fRadius > pObject->GetPosition().MagnitudeSqr()) { + CVector dist = point - pObject->GetPosition(); + if (pObject && pObject->ObjectCreatedBy == TEMP_OBJECT && dist.MagnitudeSqr() < fRadius * fRadius) { CWorld::Remove(pObject); delete pObject; } -- cgit v1.2.3 From afe70003f4c48683c287ca3d16662cc710f8602e Mon Sep 17 00:00:00 2001 From: "Walied K. Yassen" Date: Sun, 29 Nov 2020 08:52:43 +0200 Subject: Fix MI_RCBOMB gravity force and treat MI_PETROLPUMP2 as explosive --- src/objects/Object.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/objects/Object.cpp b/src/objects/Object.cpp index 2319c0d9..9322418f 100644 --- a/src/objects/Object.cpp +++ b/src/objects/Object.cpp @@ -107,7 +107,8 @@ CObject::ProcessControl(void) m_vecMoveSpeed *= fTimeStep; m_vecTurnSpeed *= fTimeStep; } - if ((GetModelIndex() == MI_EXPLODINGBARREL || GetModelIndex() == MI_PETROLPUMP) && bHasBeenDamaged && bIsVisible + auto mi = GetModelIndex(); + if ((mi == MI_EXPLODINGBARREL || mi == MI_PETROLPUMP || mi == MI_PETROLPUMP2) && bHasBeenDamaged && bIsVisible && (CGeneral::GetRandomNumber() & 0x1F) == 10) { bExplosionProof = true; bIsVisible = false; @@ -115,6 +116,13 @@ CObject::ProcessControl(void) bAffectedByGravity = false; m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f); } + if (mi == MI_RCBOMB) { + float fTurnForce = -(m_fTurnMass / 20.0f); + CPhysical::ApplyTurnForce(m_vecMoveSpeed * fTurnForce, -GetForward()); + float fScalar = 1.0f - m_vecMoveSpeed.MagnitudeSqr() / 5.0f; + float fScalarTimed = Pow(fScalar, CTimer::GetTimeStep()); + m_vecMoveSpeed *= fScalarTimed; + } } void -- cgit v1.2.3 From a1ab82b1887a9d2bf8d64b2223c0f135e1403a1d Mon Sep 17 00:00:00 2001 From: "Walied K. Yassen" Date: Sun, 29 Nov 2020 09:14:15 +0200 Subject: Implement MI_BEACHBALL behaviours --- src/core/General.h | 5 +++++ src/objects/Object.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 54 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/core/General.h b/src/core/General.h index 7e06b96e..52850794 100644 --- a/src/core/General.h +++ b/src/core/General.h @@ -159,6 +159,11 @@ public: static int32 GetRandomNumberInRange(int32 low, int32 high) { return low + (high - low)*(GetRandomNumber()/float(MYRAND_MAX + 1)); } + + // Returns inclusive value in the specified range + static int32 GetRandomNumberInRangeInc(int32 low, int32 high) + { return GetRandomNumberInRange(low - 1, high + 1); } + static void SetRandomSeed(int32 seed) { mysrand(seed); } }; diff --git a/src/objects/Object.cpp b/src/objects/Object.cpp index 9322418f..c5365920 100644 --- a/src/objects/Object.cpp +++ b/src/objects/Object.cpp @@ -14,6 +14,8 @@ #include "soundlist.h" #include "WaterLevel.h" #include "Timecycle.h" +#include "Stats.h" +#include "SpecialFX.h" int16 CObject::nNoTempObjects; //int16 CObject::nBodyCastHealth = 1000; @@ -91,9 +93,9 @@ CObject::~CObject(void) nNoTempObjects--; } -void -CObject::ProcessControl(void) -{ +void +CObject::ProcessControl(void) +{ CVector point, impulse; if (m_nCollisionDamageEffect) ObjectDamage(m_fDamageImpulse); @@ -118,11 +120,54 @@ CObject::ProcessControl(void) } if (mi == MI_RCBOMB) { float fTurnForce = -(m_fTurnMass / 20.0f); - CPhysical::ApplyTurnForce(m_vecMoveSpeed * fTurnForce, -GetForward()); + CPhysical::ApplyTurnForce(m_vecMoveSpeed * fTurnForce, -GetForward()); float fScalar = 1.0f - m_vecMoveSpeed.MagnitudeSqr() / 5.0f; float fScalarTimed = Pow(fScalar, CTimer::GetTimeStep()); m_vecMoveSpeed *= fScalarTimed; } + if (mi == MI_BEACHBALL) { + constexpr uint8 BEACHBALL_MAX_SCORE = 250; + constexpr float BEACHBALL_DEACCELERATION = 2.5f; + float fMoveSpeedMag = m_vecMoveSpeed.Magnitude2D(); + float fTimeScale = powf(0.95, CTimer::GetTimeStep()); + m_vecMoveSpeed.x *= fTimeScale; + m_vecMoveSpeed.y *= fTimeScale; + m_vecMoveSpeed.z += fMoveSpeedMag - m_vecMoveSpeed.Magnitude2D(); + if (!FindPlayerVehicle()) { + CVector distance = FindPlayerCoors() - GetPosition(); + float distanceMagnitude = distance.Magnitude2D(); + if (distance.z > 0.0 && distance.z < 1.5f && distanceMagnitude < 1.0) { + CVector playerSpeed = FindPlayerSpeed(); + if (fMoveSpeedMag < 0.05 && playerSpeed.Magnitude() > 0.1) { + playerSpeed.z = 0.0f; + playerSpeed.Normalise(); + playerSpeed.z = 0.3; + m_vecMoveSpeed = CVector(playerSpeed.x / BEACHBALL_DEACCELERATION, playerSpeed.y / BEACHBALL_DEACCELERATION, 1.0f / BEACHBALL_DEACCELERATION * 0.3); + PlayOneShotScriptObject(SCRIPT_SOUND_HIT_BALL, GetPosition()); + if (m_nBeachballBounces > 0) { + m_nBeachballBounces++; + sprintf(gString, "%d", m_nBeachballBounces); + CMoneyMessages::RegisterOne(GetPosition(), gString, 255, 50, 0, 0.6f, 0.5f); + CStats::RegisterHighestScore(3, m_nBeachballBounces); + } + } + } + if (distance.z > -1.05 && distance.z < -0.6 && distanceMagnitude < 0.9 && m_vecMoveSpeed.z < 0.0f) { + m_vecMoveSpeed.x += CGeneral::GetRandomNumberInRangeInc(-3, 4) / 100.0; + m_vecMoveSpeed.y += CGeneral::GetRandomNumberInRangeInc(-3, 4) / 100.0; + m_vecMoveSpeed.z = Max(m_vecMoveSpeed.z + 0.3f, 0.2f); + PlayOneShotScriptObject(SCRIPT_SOUND_HIT_BALL, GetPosition()); + m_vecTurnSpeed.x += CGeneral::GetRandomNumberInRangeInc(-7, 8) / 10.0f; + m_vecTurnSpeed.y += CGeneral::GetRandomNumberInRangeInc(-7, 8) / 10.0f; + if (++m_nBeachballBounces >= BEACHBALL_MAX_SCORE) { + m_nBeachballBounces = BEACHBALL_MAX_SCORE; + } + sprintf(gString, "%d", m_nBeachballBounces); + CMoneyMessages::RegisterOne(GetPosition(), gString, 255, 50, 0, 0.6f, 0.5f); + CStats::RegisterHighestScore(3, m_nBeachballBounces); + } + } + } } void -- cgit v1.2.3 From ac7ea2b9fafca17900a9106c85dbbdb3b508c175 Mon Sep 17 00:00:00 2001 From: "Walied K. Yassen" Date: Mon, 30 Nov 2020 02:09:35 +0200 Subject: Implement the missing damage effects and fix the existing ones --- src/objects/Object.cpp | 458 ++++++++++++++++++++++++++++++++++--------------- src/objects/Object.h | 12 +- 2 files changed, 326 insertions(+), 144 deletions(-) (limited to 'src') diff --git a/src/objects/Object.cpp b/src/objects/Object.cpp index c5365920..42021054 100644 --- a/src/objects/Object.cpp +++ b/src/objects/Object.cpp @@ -21,10 +21,10 @@ int16 CObject::nNoTempObjects; //int16 CObject::nBodyCastHealth = 1000; float CObject::fDistToNearestTree; -void *CObject::operator new(size_t sz) { return CPools::GetObjectPool()->New(); } -void *CObject::operator new(size_t sz, int handle) { return CPools::GetObjectPool()->New(handle);}; -void CObject::operator delete(void *p, size_t sz) { CPools::GetObjectPool()->Delete((CObject*)p); } -void CObject::operator delete(void *p, int handle) { CPools::GetObjectPool()->Delete((CObject*)p); } +void* CObject::operator new(size_t sz) { return CPools::GetObjectPool()->New(); } +void* CObject::operator new(size_t sz, int handle) { return CPools::GetObjectPool()->New(handle); }; +void CObject::operator delete(void* p, size_t sz) { CPools::GetObjectPool()->Delete((CObject*)p); } +void CObject::operator delete(void* p, int handle) { CPools::GetObjectPool()->Delete((CObject*)p); } CObject::CObject(void) { @@ -35,8 +35,8 @@ CObject::CObject(void) m_bCameraToAvoidThisObject = false; ObjectCreatedBy = UNKNOWN_OBJECT; m_nEndOfLifeTime = 0; -// m_nRefModelIndex = -1; // duplicate -// bUseVehicleColours = false; // duplicate + // m_nRefModelIndex = -1; // duplicate + // bUseVehicleColours = false; // duplicate m_colour2 = 0; m_colour1 = m_colour2; m_nBonusValue = 0; @@ -49,7 +49,7 @@ CObject::CObject(void) bHasBeenDamaged = false; m_nRefModelIndex = -1; bUseVehicleColours = false; -// bIsStreetLight = false; // duplicate + // bIsStreetLight = false; // duplicate m_pCurSurface = nil; m_pCollidingEntity = nil; m_nBeachballBounces = 0; @@ -66,7 +66,7 @@ CObject::CObject(int32 mi, bool createRW) Init(); } -CObject::CObject(CDummyObject *dummy) +CObject::CObject(CDummyObject* dummy) { SetModelIndexNoCreate(dummy->GetModelIndex()); @@ -86,10 +86,10 @@ CObject::~CObject(void) { CRadar::ClearBlipForEntity(BLIP_OBJECT, CPools::GetObjectPool()->GetIndex(this)); - if(m_nRefModelIndex != -1) + if (m_nRefModelIndex != -1) CModelInfo::GetModelInfo(m_nRefModelIndex)->RemoveRef(); - if(ObjectCreatedBy == TEMP_OBJECT && nNoTempObjects != 0) + if (ObjectCreatedBy == TEMP_OBJECT && nNoTempObjects != 0) nNoTempObjects--; } @@ -170,9 +170,9 @@ CObject::ProcessControl(void) } } -void +void CObject::Teleport(CVector vecPos) -{ +{ CWorld::Remove(this); m_matrix.GetPosition() = vecPos; m_matrix.UpdateRW(); @@ -187,7 +187,7 @@ CObject::Render(void) return; if (m_nRefModelIndex != -1 && ObjectCreatedBy == TEMP_OBJECT && bUseVehicleColours) { - CVehicleModelInfo *mi = (CVehicleModelInfo*)CModelInfo::GetModelInfo(m_nRefModelIndex); + CVehicleModelInfo* mi = (CVehicleModelInfo*)CModelInfo::GetModelInfo(m_nRefModelIndex); assert(mi->GetModelType() == MITYPE_VEHICLE); mi->SetVehicleColour(m_colour1, m_colour2); } @@ -298,13 +298,15 @@ CObject::Render(void) bool CObject::SetupLighting(void) { - if(bRenderScorched){ + if (bRenderScorched) { WorldReplaceNormalLightsWithScorched(Scene.world, 0.1f); return true; - } else if (bIsPickup) { + } + else if (bIsPickup) { SetFullAmbient(); return true; - } else if (bIsWeapon) { + } + else if (bIsWeapon) { ActivateDirectional(); SetAmbientColoursForPedsCarsAndObjects(); return true; @@ -315,14 +317,14 @@ CObject::SetupLighting(void) void CObject::RemoveLighting(bool reset) { - if(reset) { + if (reset) { SetAmbientColours(); DeActivateDirectional(); } } -void -CObject::ObjectDamage(float amount) +void +CObject::ObjectDamage(float amount) { if (!m_nCollisionDamageEffect || !bUsesCollision) return; @@ -344,128 +346,308 @@ CObject::ObjectDamage(float amount) const float fDirectionZ = 0.0002f * amount; switch (m_nCollisionDamageEffect) { - case DAMAGE_EFFECT_CHANGE_MODEL: - bRenderDamaged = true; - break; - case DAMAGE_EFFECT_SPLIT_MODEL: - break; - case DAMAGE_EFFECT_SMASH_COMPLETELY: - bIsVisible = false; - bUsesCollision = false; - SetIsStatic(true); - bExplosionProof = true; - SetMoveSpeed(0.0f, 0.0f, 0.0f); - SetTurnSpeed(0.0f, 0.0f, 0.0f); - break; - case DAMAGE_EFFECT_CHANGE_THEN_SMASH: - if (!bRenderDamaged) { + case DAMAGE_EFFECT_CHANGE_MODEL: bRenderDamaged = true; + return; + case DAMAGE_EFFECT_SPLIT_MODEL: + return; + case DAMAGE_EFFECT_SMASH_AND_DAMAGE_TRAFFICLIGHTS: { + static RwRGBA debrisColor = { 0xc8,0xc8,0xc8,0xff }; + if (bRenderDamaged) { + break; + } + bRenderDamaged = true; + CBaseModelInfo* modelInfo = CModelInfo::GetModelInfo(GetModelIndex()); + CVector min = modelInfo->GetColModel()->boundingBox.min * 0.85f; + CVector max = modelInfo->GetColModel()->boundingBox.max * 0.85f; + min.z = max.z; + min = GetMatrix() * min; + max = GetMatrix() * max; + CVector temp = (max - min) * 0.02; + + for (int32 i = 0; i < 50; i++) { + float fDirX = CGeneral::GetRandomNumberInRange(-0.35f, 0.35f); + float fDirY = CGeneral::GetRandomNumberInRange(-0.35f, 0.35f); + float fDirZ = CGeneral::GetRandomNumberInRange(0.10f, 0.25f); + ++nFrameGen; + int32 currentFrame = nFrameGen & 3; + CVector pos = min + temp * (float)i; + CVector dir = CVector(fDirX, fDirY, fDirZ); + float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); + float fColorFactor = CGeneral::GetRandomNumberInRange(0.6f, 1.2f); + RwRGBA color = debrisColor; + color.red *= fColorFactor; + color.green *= fColorFactor; + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-0.40f, 0.40f); + CParticle::AddParticle(PARTICLE_CAR_DEBRIS, pos, dir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0); + } + PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, min); + break; } - else { + case DAMAGE_EFFECT_SMASH_COMPLETELY: + case DAMAGE_EFFECT_CHANGE_THEN_SMASH: { + if (m_nCollisionDamageEffect == DAMAGE_EFFECT_CHANGE_THEN_SMASH && !bRenderDamaged) { + bRenderDamaged = true; + return; + } bIsVisible = false; bUsesCollision = false; + if (!GetIsStatic()) { + RemoveFromMovingList(); + } SetIsStatic(true); bExplosionProof = true; SetMoveSpeed(0.0f, 0.0f, 0.0f); SetTurnSpeed(0.0f, 0.0f, 0.0f); + break; } - break; - case DAMAGE_EFFECT_SMASH_CARDBOARD_COMPLETELY: { - bIsVisible = false; - bUsesCollision = false; - SetIsStatic(true); - bExplosionProof = true; - SetMoveSpeed(0.0f, 0.0f, 0.0f); - SetTurnSpeed(0.0f, 0.0f, 0.0f); - const RwRGBA color = { 96, 48, 0, 255 }; - for (int32 i = 0; i < 25; i++) { - CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), - CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), - CGeneral::GetRandomNumberInRange(0.1f, 0.15f) + fDirectionZ); - ++nFrameGen; - int32 currentFrame = nFrameGen & 3; - float fRandom = CGeneral::GetRandomNumberInRange(0.01f, 1.0f); - RwRGBA randomColor = { uint8(color.red * fRandom), uint8(color.green * fRandom) , color.blue, color.alpha }; - float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.18f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80); - CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0); + case DAMAGE_EFFECT_SMASH_CARDBOARD_COMPLETELY: + case DAMAGE_EFFECT_SMASH_YELLOW_TARGET_COMPLETELY: { + bIsVisible = false; + bUsesCollision = false; + if (!GetIsStatic()) { + RemoveFromMovingList(); + } + SetIsStatic(true); + bExplosionProof = true; + SetMoveSpeed(0.0f, 0.0f, 0.0f); + SetTurnSpeed(0.0f, 0.0f, 0.0f); + const RwRGBA color = { 96, 48, 0, 255 }; + for (int32 i = 0; i < 25; i++) { + CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ); + ++nFrameGen; + int32 currentFrame = nFrameGen & 3; + float fRandom = CGeneral::GetRandomNumberInRange(0.01f, 1.0f); + RwRGBA randomColor = color; + if (m_nCollisionDamageEffect == DAMAGE_EFFECT_SMASH_CARDBOARD_COMPLETELY) { + randomColor.red *= fRandom; + randomColor.green *= fRandom; + randomColor.blue *= fRandom; + } + else { + randomColor.red = 0xff; + randomColor.blue = 0xfc; + } + float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); + CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0); + } + PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_2, vecPos); + break; } - PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_2, vecPos); - break; - } - case DAMAGE_EFFECT_SMASH_WOODENBOX_COMPLETELY: { - bIsVisible = false; - bUsesCollision = false; - SetIsStatic(true); - bExplosionProof = true; - SetMoveSpeed(0.0f, 0.0f, 0.0f); - SetTurnSpeed(0.0f, 0.0f, 0.0f); - const RwRGBA color = { 128, 128, 128, 255 }; - for (int32 i = 0; i < 45; i++) { - CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), - CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), - CGeneral::GetRandomNumberInRange(0.1f, 0.15f) + fDirectionZ); - ++nFrameGen; - int32 currentFrame = nFrameGen & 3; - float fRandom = CGeneral::GetRandomNumberInRange(0.5f, 0.5f); - RwRGBA randomColor = { uint8(color.red * fRandom), uint8(color.green * fRandom), uint8(color.blue * fRandom), color.alpha }; - float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.18f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80); - CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0); + case DAMAGE_EFFECT_SMASH_WOODENBOX_COMPLETELY: { + bIsVisible = false; + bUsesCollision = false; + if (!GetIsStatic()) { + RemoveFromMovingList(); + } + SetIsStatic(true); + bExplosionProof = true; + SetMoveSpeed(0.0f, 0.0f, 0.0f); + SetTurnSpeed(0.0f, 0.0f, 0.0f); + static const RwRGBA color = { 128, 128, 128, 255 }; + CVector position = GetPosition(); + for (int32 i = 0; i < 45; i++) { + CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ); + ++nFrameGen; + int32 currentFrame = nFrameGen & 3; + float fRandom = CGeneral::GetRandomNumberInRange(0.5f, 1.0f); + RwRGBA randomColor = { uint8(color.red * fRandom), uint8(color.green * fRandom), uint8(color.blue * fRandom), color.alpha }; + float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); + CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0); + } + PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_1, vecPos); + break; } - PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_1, vecPos); - break; - } - case DAMAGE_EFFECT_SMASH_TRAFFICCONE_COMPLETELY: { - bIsVisible = false; - bUsesCollision = false; - SetIsStatic(true); - bExplosionProof = true; - SetMoveSpeed(0.0f, 0.0f, 0.0f); - SetTurnSpeed(0.0f, 0.0f, 0.0f); - const RwRGBA color1 = { 200, 0, 0, 255 }; - const RwRGBA color2 = { 200, 200, 200, 255 }; - for (int32 i = 0; i < 10; i++) { - CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), - CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), - CGeneral::GetRandomNumberInRange(0.1f, 0.15f) + fDirectionZ); - ++nFrameGen; - int32 currentFrame = nFrameGen & 3; - RwRGBA color = color2; - if (nFrameGen & 1) - color = color1; - float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.18f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80); - CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0); + case DAMAGE_EFFECT_SMASH_TRAFFICCONE_COMPLETELY: + case DAMAGE_EFFECT_BURST_BEACHBALL: { + bIsVisible = false; + bUsesCollision = false; + if (!GetIsStatic()) { + RemoveFromMovingList(); + } + SetIsStatic(true); + bExplosionProof = true; + SetMoveSpeed(0.0f, 0.0f, 0.0f); + SetTurnSpeed(0.0f, 0.0f, 0.0f); + const RwRGBA color1 = { 200, 0, 0, 255 }; + const RwRGBA color2 = { 200, 200, 200, 255 }; + for (int32 i = 0; i < 10; i++) { + CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ); + ++nFrameGen; + int32 currentFrame = nFrameGen & 3; + RwRGBA color = color2; + if (nFrameGen & 1) + color = color1; + float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); + CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0); + } + if (m_nCollisionDamageEffect == DAMAGE_EFFECT_BURST_BEACHBALL) { + PlayOneShotScriptObject(SCRIPT_SOUND_HIT_BALL, vecPos); + } + else { + PlayOneShotScriptObject(SCRIPT_SOUND_TIRE_COLLISION, vecPos); + } + break; } - PlayOneShotScriptObject(SCRIPT_SOUND_TIRE_COLLISION, vecPos); - break; - } - case DAMAGE_EFFECT_SMASH_BARPOST_COMPLETELY: { - bIsVisible = false; - bUsesCollision = false; - SetIsStatic(true); - bExplosionProof = true; - SetMoveSpeed(0.0f, 0.0f, 0.0f); - SetTurnSpeed(0.0f, 0.0f, 0.0f); - const RwRGBA color1 = { 200, 0, 0, 255 }; - const RwRGBA color2 = { 200, 200, 200, 255 }; - for (int32 i = 0; i < 32; i++) { - CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), - CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), - CGeneral::GetRandomNumberInRange(0.1f, 0.15f) + fDirectionZ); - ++nFrameGen; - int32 currentFrame = nFrameGen & 3; - RwRGBA color = color2; - if (nFrameGen & 1) - color = color1; - float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.18f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80); - CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0); + case DAMAGE_EFFECT_SMASH_BARPOST_COMPLETELY: { + bIsVisible = false; + bUsesCollision = false; + if (!GetIsStatic()) { + RemoveFromMovingList(); + } + SetIsStatic(true); + bExplosionProof = true; + SetMoveSpeed(0.0f, 0.0f, 0.0f); + SetTurnSpeed(0.0f, 0.0f, 0.0f); + const RwRGBA color1 = { 200, 0, 0, 255 }; + const RwRGBA color2 = { 200, 200, 200, 255 }; + SetMoveSpeed(0.0f, 0.0f, 0.0f); + SetTurnSpeed(0.0f, 0.0f, 0.0f); + for (int32 i = 0; i < 32; i++) { + CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ); + ++nFrameGen; + int32 currentFrame = nFrameGen & 3; + const RwRGBA& color = nFrameGen & 1 ? color1 : color2; + float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); + CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0); + } + PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, vecPos); + break; } - PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, vecPos); - break; - } + case DAMAGE_EFFECT_SMASH_NEWSTANDNEW1: + case DAMAGE_EFFECT_SMASH_NEWSTANDNEW2: + case DAMAGE_EFFECT_SMASH_NEWSTANDNEW3: + case DAMAGE_EFFECT_SMASH_NEWSTANDNEW4: + case DAMAGE_EFFECT_SMASH_NEWSTANDNEW5: { + bIsVisible = false; + bUsesCollision = false; + if (!GetIsStatic()) { + RemoveFromMovingList(); + } + SetIsStatic(true); + bExplosionProof = true; + SetMoveSpeed(0.0f, 0.0f, 0.0f); + SetTurnSpeed(0.0f, 0.0f, 0.0f); + CRGBA possibleColor1; + CRGBA possibleColor2; + switch (m_nCollisionDamageEffect) { + case DAMAGE_EFFECT_SMASH_NEWSTANDNEW1: + possibleColor1 = CRGBA(0xC0, 0x3E, 0xC, 0xFF); + possibleColor2 = possibleColor1; + break; + case DAMAGE_EFFECT_SMASH_NEWSTANDNEW2: + possibleColor1 = CRGBA(0xA3, 0x36, 0x21, 0xFF); + possibleColor2 = possibleColor1; + break; + case DAMAGE_EFFECT_SMASH_NEWSTANDNEW3: + possibleColor1 = CRGBA(0x12, 0x31, 0x24, 0xFF); + possibleColor2 = possibleColor1; + break; + case DAMAGE_EFFECT_SMASH_NEWSTANDNEW4: + possibleColor1 = CRGBA(0xC0, 0xC8, 0xBE, 0xFF); + possibleColor2 = CRGBA(0x10, 0x57, 0x85, 0xFF); + break; + case DAMAGE_EFFECT_SMASH_NEWSTANDNEW5: + possibleColor1 = CRGBA(0xD0, 0x94, 0x1B, 0xFF); + possibleColor2 = possibleColor1; + break; + } + for (int32 i = 0; i < 16; i++) { + CVector vecDir( + CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), + CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), + CGeneral::GetRandomNumberInRange(0.1f, 0.15f) + fDirectionZ + ); + float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); + nFrameGen++; + int32 nCurFrame = nFrameGen & 0x3; + CRGBA& selectedColor = nFrameGen & 0x1 ? possibleColor1 : possibleColor2; + CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, selectedColor, nRotationSpeed, 0, nCurFrame, 0); + if ((i % 7) == 0) + { + static CRGBA secondParticleColors[4] = { + CRGBA(0xA0, 0x60, 0x60, 0xFF), + CRGBA(0x60, 0xA0, 0x60, 0xFF), + CRGBA(0x60, 0x60, 0xA0, 0xFF), + CRGBA(0xA0, 0xA0, 0xA0, 0xFF) + }; + vecDir *= 0.5f; + CRGBA& secondParticleColor = secondParticleColors[nFrameGen & 3]; + int32 nSecondRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); + CParticle::AddParticle(PARTICLE_DEBRIS, vecPos, vecDir, nil, 0.1f, secondParticleColor, nSecondRotationSpeed, 0, 1, 0); + } + } + PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, vecPos); + break; + } + case DAMAGE_EFFECT_SMASH_BLACKBAG: + case DAMAGE_EFFECT_SMASH_BEACHLOUNGE_WOOD: + case DAMAGE_EFFECT_SMASH_BEACHLOUNGE_TOWEL: { + bIsVisible = false; + bUsesCollision = false; + if (!GetIsStatic()) { + RemoveFromMovingList(); + } + SetIsStatic(true); + bExplosionProof = true; + SetMoveSpeed(0.0f, 0.0f, 0.0f); + SetTurnSpeed(0.0f, 0.0f, 0.0f); + CRGBA possibleColor1; + CRGBA possibleColor2; + switch (m_nCollisionDamageEffect) + { + case DAMAGE_EFFECT_SMASH_BLACKBAG: + possibleColor1 = CRGBA(0, 0, 0, 0xFF); + possibleColor2 = possibleColor1; + break; + case DAMAGE_EFFECT_SMASH_BEACHLOUNGE_WOOD: + possibleColor1 = CRGBA(0x8F, 0x8A, 0x8C, 0xFF); + possibleColor2 = CRGBA(0x73, 0x75, 0x7B, 0xFF); + break; + case DAMAGE_EFFECT_SMASH_BEACHLOUNGE_TOWEL: + possibleColor1 = CRGBA(0x52, 0x92, 0x4A, 0xFF); + possibleColor2 = CRGBA(0xCE, 0xCF, 0xCE, 0xFF); + break; + } + for (int32 i = 0; i < 16; i++) { + CVector vecDir( + CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ + ); + nFrameGen++; + int32 nCurFrame = nFrameGen & 3; + CRGBA& selectedColor = nFrameGen & 1 ? possibleColor1 : possibleColor2; + float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); + CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, selectedColor, nRotationSpeed, 0, nCurFrame, 0); + } + if (m_nCollisionDamageEffect == DAMAGE_EFFECT_SMASH_BLACKBAG) + { + PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_2, vecPos); + } + else if (m_nCollisionDamageEffect == DAMAGE_EFFECT_SMASH_BEACHLOUNGE_WOOD) + { + PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, vecPos); + } + break; + } + default: + DEV("Unhandled collision damage effect id: %d\n", m_nCollisionDamageEffect); + return; } } } @@ -477,9 +659,9 @@ CObject::RefModelInfo(int32 modelId) CModelInfo::GetModelInfo(modelId)->AddRef(); } -void -CObject::Init(void) -{ +void +CObject::Init(void) +{ m_type = ENTITY_TYPE_OBJECT; CObjectData::SetObjectData(GetModelIndex(), *this); m_nEndOfLifeTime = 0; @@ -510,7 +692,7 @@ CObject::Init(void) if (GetModelIndex() == MI_BUOY) bTouchingWater = true; - if(CModelInfo::GetModelInfo(GetModelIndex())->GetModelType() == MITYPE_WEAPON) + if (CModelInfo::GetModelInfo(GetModelIndex())->GetModelType() == MITYPE_WEAPON) bIsWeapon = true; bIsStreetLight = IsLightObject(GetModelIndex()); @@ -549,8 +731,8 @@ CObject::DeleteAllMissionObjects() } } -void -CObject::DeleteAllTempObjects() +void +CObject::DeleteAllTempObjects() { CObjectPool* objectPool = CPools::GetObjectPool(); for (int32 i = 0; i < objectPool->GetSize(); i++) { @@ -562,12 +744,12 @@ CObject::DeleteAllTempObjects() } } -void -CObject::DeleteAllTempObjectsInArea(CVector point, float fRadius) +void +CObject::DeleteAllTempObjectsInArea(CVector point, float fRadius) { - CObjectPool *objectPool = CPools::GetObjectPool(); + CObjectPool* objectPool = CPools::GetObjectPool(); for (int32 i = 0; i < objectPool->GetSize(); i++) { - CObject *pObject = objectPool->GetSlot(i); + CObject* pObject = objectPool->GetSlot(i); CVector dist = point - pObject->GetPosition(); if (pObject && pObject->ObjectCreatedBy == TEMP_OBJECT && dist.MagnitudeSqr() < fRadius * fRadius) { CWorld::Remove(pObject); diff --git a/src/objects/Object.h b/src/objects/Object.h index bc74b58b..80f3b4a1 100644 --- a/src/objects/Object.h +++ b/src/objects/Object.h @@ -32,23 +32,23 @@ enum CollisionDamageEffect DAMAGE_EFFECT_CHANGE_THEN_SMASH, DAMAGE_EFFECT_SMASH_CARDBOARD_COMPLETELY = 50, - DAMAGE_EFFECT_SMASH_YELLOW_TARGET_COMPLETELY, + DAMAGE_EFFECT_SMASH_YELLOW_TARGET_COMPLETELY = 51, DAMAGE_EFFECT_SMASH_WOODENBOX_COMPLETELY = 60, DAMAGE_EFFECT_SMASH_TRAFFICCONE_COMPLETELY = 70, DAMAGE_EFFECT_SMASH_BARPOST_COMPLETELY = 80, DAMAGE_EFFECT_SMASH_NEWSTANDNEW1 = 91, - DAMAGE_EFFECT_SMASH_NEWSTANDNEW21, - DAMAGE_EFFECT_SMASH_NEWSTANDNEW31, - DAMAGE_EFFECT_SMASH_NEWSTANDNEW41, - DAMAGE_EFFECT_SMASH_NEWSTANDNEW51, + DAMAGE_EFFECT_SMASH_NEWSTANDNEW2 = 92, + DAMAGE_EFFECT_SMASH_NEWSTANDNEW3 = 93, + DAMAGE_EFFECT_SMASH_NEWSTANDNEW4 = 94, + DAMAGE_EFFECT_SMASH_NEWSTANDNEW5 = 95, DAMAGE_EFFECT_SMASH_BLACKBAG = 100, DAMAGE_EFFECT_SMASH_VEGPALM = 110, DAMAGE_EFFECT_BURST_BEACHBALL = 120, DAMAGE_EFFECT_SMASH_BEACHLOUNGE_WOOD = 131, - DAMAGE_EFFECT_SMASH_BEACHLOUNGE_TOWEL, + DAMAGE_EFFECT_SMASH_BEACHLOUNGE_TOWEL = 132, }; class CVehicle; -- cgit v1.2.3 From 1dcd7c5b14b6ce771347c48b53eae7f2411e1113 Mon Sep 17 00:00:00 2001 From: "Walied K. Yassen" Date: Mon, 30 Nov 2020 02:57:58 +0200 Subject: Fix the code style issues --- src/core/General.h | 4 - src/objects/Object.cpp | 203 ++++++++++++++++++++++++++----------------------- src/objects/Object.h | 2 +- 3 files changed, 110 insertions(+), 99 deletions(-) (limited to 'src') diff --git a/src/core/General.h b/src/core/General.h index 52850794..4cc0ebf8 100644 --- a/src/core/General.h +++ b/src/core/General.h @@ -160,10 +160,6 @@ public: static int32 GetRandomNumberInRange(int32 low, int32 high) { return low + (high - low)*(GetRandomNumber()/float(MYRAND_MAX + 1)); } - // Returns inclusive value in the specified range - static int32 GetRandomNumberInRangeInc(int32 low, int32 high) - { return GetRandomNumberInRange(low - 1, high + 1); } - static void SetRandomSeed(int32 seed) { mysrand(seed); } }; diff --git a/src/objects/Object.cpp b/src/objects/Object.cpp index 42021054..12ae5294 100644 --- a/src/objects/Object.cpp +++ b/src/objects/Object.cpp @@ -17,14 +17,17 @@ #include "Stats.h" #include "SpecialFX.h" +#define BEACHBALL_MAX_SCORE 250 +#define BEACHBALL_DEACCELERATION 2.5f + int16 CObject::nNoTempObjects; //int16 CObject::nBodyCastHealth = 1000; float CObject::fDistToNearestTree; -void* CObject::operator new(size_t sz) { return CPools::GetObjectPool()->New(); } -void* CObject::operator new(size_t sz, int handle) { return CPools::GetObjectPool()->New(handle); }; -void CObject::operator delete(void* p, size_t sz) { CPools::GetObjectPool()->Delete((CObject*)p); } -void CObject::operator delete(void* p, int handle) { CPools::GetObjectPool()->Delete((CObject*)p); } +void *CObject::operator new(size_t sz) { return CPools::GetObjectPool()->New(); } +void *CObject::operator new(size_t sz, int handle) { return CPools::GetObjectPool()->New(handle); }; +void CObject::operator delete(void *p, size_t sz) { CPools::GetObjectPool()->Delete((CObject *)p); } +void CObject::operator delete(void *p, int handle) { CPools::GetObjectPool()->Delete((CObject *)p); } CObject::CObject(void) { @@ -66,7 +69,7 @@ CObject::CObject(int32 mi, bool createRW) Init(); } -CObject::CObject(CDummyObject* dummy) +CObject::CObject(CDummyObject *dummy) { SetModelIndexNoCreate(dummy->GetModelIndex()); @@ -109,7 +112,7 @@ CObject::ProcessControl(void) m_vecMoveSpeed *= fTimeStep; m_vecTurnSpeed *= fTimeStep; } - auto mi = GetModelIndex(); + int16 mi = GetModelIndex(); if ((mi == MI_EXPLODINGBARREL || mi == MI_PETROLPUMP || mi == MI_PETROLPUMP2) && bHasBeenDamaged && bIsVisible && (CGeneral::GetRandomNumber() & 0x1F) == 10) { bExplosionProof = true; @@ -126,48 +129,54 @@ CObject::ProcessControl(void) m_vecMoveSpeed *= fScalarTimed; } if (mi == MI_BEACHBALL) { - constexpr uint8 BEACHBALL_MAX_SCORE = 250; - constexpr float BEACHBALL_DEACCELERATION = 2.5f; - float fMoveSpeedMag = m_vecMoveSpeed.Magnitude2D(); - float fTimeScale = powf(0.95, CTimer::GetTimeStep()); - m_vecMoveSpeed.x *= fTimeScale; - m_vecMoveSpeed.y *= fTimeScale; - m_vecMoveSpeed.z += fMoveSpeedMag - m_vecMoveSpeed.Magnitude2D(); + float fTimeStep = Pow(0.95f, CTimer::GetTimeStep()); + float fPreviousVecSpeedMag = m_vecMoveSpeed.Magnitude2D(); + m_vecMoveSpeed.x *= fTimeStep; + m_vecMoveSpeed.y *= fTimeStep; + m_vecMoveSpeed.z += fPreviousVecSpeedMag - m_vecMoveSpeed.Magnitude2D(); if (!FindPlayerVehicle()) { CVector distance = FindPlayerCoors() - GetPosition(); float distanceMagnitude = distance.Magnitude2D(); if (distance.z > 0.0 && distance.z < 1.5f && distanceMagnitude < 1.0) { CVector playerSpeed = FindPlayerSpeed(); - if (fMoveSpeedMag < 0.05 && playerSpeed.Magnitude() > 0.1) { + if (fPreviousVecSpeedMag < 0.05 && playerSpeed.Magnitude() > 0.1) { playerSpeed.z = 0.0f; playerSpeed.Normalise(); playerSpeed.z = 0.3; m_vecMoveSpeed = CVector(playerSpeed.x / BEACHBALL_DEACCELERATION, playerSpeed.y / BEACHBALL_DEACCELERATION, 1.0f / BEACHBALL_DEACCELERATION * 0.3); PlayOneShotScriptObject(SCRIPT_SOUND_HIT_BALL, GetPosition()); + m_vecTurnSpeed += CVector( + ((CGeneral::GetRandomNumber() % 16) - 7) / 10.0f, + ((CGeneral::GetRandomNumber() % 16) - 7) / 10.0f, + 0.0f); if (m_nBeachballBounces > 0) { m_nBeachballBounces++; + } + if (m_nBeachballBounces > 0) { sprintf(gString, "%d", m_nBeachballBounces); CMoneyMessages::RegisterOne(GetPosition(), gString, 255, 50, 0, 0.6f, 0.5f); CStats::RegisterHighestScore(3, m_nBeachballBounces); } } } - if (distance.z > -1.05 && distance.z < -0.6 && distanceMagnitude < 0.9 && m_vecMoveSpeed.z < 0.0f) { - m_vecMoveSpeed.x += CGeneral::GetRandomNumberInRangeInc(-3, 4) / 100.0; - m_vecMoveSpeed.y += CGeneral::GetRandomNumberInRangeInc(-3, 4) / 100.0; + if (distanceMagnitude < 0.9 && distance.z > -1.05 && distance.z < -0.6 && m_vecMoveSpeed.z < 0.0f) { + m_vecMoveSpeed.x += (CGeneral::GetRandomNumber() % 8 - 3) / 100.0f; + m_vecMoveSpeed.y += (CGeneral::GetRandomNumber() % 8 - 3) / 100.0f; m_vecMoveSpeed.z = Max(m_vecMoveSpeed.z + 0.3f, 0.2f); PlayOneShotScriptObject(SCRIPT_SOUND_HIT_BALL, GetPosition()); - m_vecTurnSpeed.x += CGeneral::GetRandomNumberInRangeInc(-7, 8) / 10.0f; - m_vecTurnSpeed.y += CGeneral::GetRandomNumberInRangeInc(-7, 8) / 10.0f; - if (++m_nBeachballBounces >= BEACHBALL_MAX_SCORE) { - m_nBeachballBounces = BEACHBALL_MAX_SCORE; - } + m_vecTurnSpeed.x += (CGeneral::GetRandomNumber() % 16 - 7) / 10.0f; + m_vecTurnSpeed.y += (CGeneral::GetRandomNumber() % 16 - 7) / 10.0f; + m_nBeachballBounces++; + m_nBeachballBounces = Min(m_nBeachballBounces, BEACHBALL_MAX_SCORE); sprintf(gString, "%d", m_nBeachballBounces); CMoneyMessages::RegisterOne(GetPosition(), gString, 255, 50, 0, 0.6f, 0.5f); CStats::RegisterHighestScore(3, m_nBeachballBounces); } } } + if (bIsBIGBuilding) { + bIsInSafePosition = true; + } } void @@ -187,7 +196,7 @@ CObject::Render(void) return; if (m_nRefModelIndex != -1 && ObjectCreatedBy == TEMP_OBJECT && bUseVehicleColours) { - CVehicleModelInfo* mi = (CVehicleModelInfo*)CModelInfo::GetModelInfo(m_nRefModelIndex); + CVehicleModelInfo *mi = (CVehicleModelInfo *)CModelInfo::GetModelInfo(m_nRefModelIndex); assert(mi->GetModelType() == MITYPE_VEHICLE); mi->SetVehicleColour(m_colour1, m_colour2); } @@ -301,12 +310,10 @@ CObject::SetupLighting(void) if (bRenderScorched) { WorldReplaceNormalLightsWithScorched(Scene.world, 0.1f); return true; - } - else if (bIsPickup) { + } else if (bIsPickup) { SetFullAmbient(); return true; - } - else if (bIsWeapon) { + } else if (bIsWeapon) { ActivateDirectional(); SetAmbientColoursForPedsCarsAndObjects(); return true; @@ -342,50 +349,51 @@ CObject::ObjectDamage(float amount) } #endif if ((amount * m_fCollisionDamageMultiplier > 150.0f || bBodyCastDamageEffect) && m_nCollisionDamageEffect) { - const CVector& vecPos = m_matrix.GetPosition(); + const CVector &vecPos = m_matrix.GetPosition(); const float fDirectionZ = 0.0002f * amount; - switch (m_nCollisionDamageEffect) - { + switch (m_nCollisionDamageEffect) { case DAMAGE_EFFECT_CHANGE_MODEL: bRenderDamaged = true; return; case DAMAGE_EFFECT_SPLIT_MODEL: return; - case DAMAGE_EFFECT_SMASH_AND_DAMAGE_TRAFFICLIGHTS: { + case DAMAGE_EFFECT_SMASH_AND_DAMAGE_TRAFFICLIGHTS: + { static RwRGBA debrisColor = { 0xc8,0xc8,0xc8,0xff }; if (bRenderDamaged) { break; } bRenderDamaged = true; - CBaseModelInfo* modelInfo = CModelInfo::GetModelInfo(GetModelIndex()); + CBaseModelInfo *modelInfo = CModelInfo::GetModelInfo(GetModelIndex()); CVector min = modelInfo->GetColModel()->boundingBox.min * 0.85f; CVector max = modelInfo->GetColModel()->boundingBox.max * 0.85f; min.z = max.z; min = GetMatrix() * min; max = GetMatrix() * max; - CVector temp = (max - min) * 0.02; - + CVector temp = (max - min) * 0.02f; for (int32 i = 0; i < 50; i++) { - float fDirX = CGeneral::GetRandomNumberInRange(-0.35f, 0.35f); - float fDirY = CGeneral::GetRandomNumberInRange(-0.35f, 0.35f); - float fDirZ = CGeneral::GetRandomNumberInRange(0.10f, 0.25f); + CVector vecDir = CVector( + CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + ); ++nFrameGen; int32 currentFrame = nFrameGen & 3; CVector pos = min + temp * (float)i; - CVector dir = CVector(fDirX, fDirY, fDirZ); float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); float fColorFactor = CGeneral::GetRandomNumberInRange(0.6f, 1.2f); RwRGBA color = debrisColor; color.red *= fColorFactor; color.green *= fColorFactor; int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-0.40f, 0.40f); - CParticle::AddParticle(PARTICLE_CAR_DEBRIS, pos, dir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0); + CParticle::AddParticle(PARTICLE_CAR_DEBRIS, pos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0); } PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, min); break; } case DAMAGE_EFFECT_SMASH_COMPLETELY: - case DAMAGE_EFFECT_CHANGE_THEN_SMASH: { + case DAMAGE_EFFECT_CHANGE_THEN_SMASH: + { if (m_nCollisionDamageEffect == DAMAGE_EFFECT_CHANGE_THEN_SMASH && !bRenderDamaged) { bRenderDamaged = true; return; @@ -402,7 +410,8 @@ CObject::ObjectDamage(float amount) break; } case DAMAGE_EFFECT_SMASH_CARDBOARD_COMPLETELY: - case DAMAGE_EFFECT_SMASH_YELLOW_TARGET_COMPLETELY: { + case DAMAGE_EFFECT_SMASH_YELLOW_TARGET_COMPLETELY: + { bIsVisible = false; bUsesCollision = false; if (!GetIsStatic()) { @@ -414,9 +423,11 @@ CObject::ObjectDamage(float amount) SetTurnSpeed(0.0f, 0.0f, 0.0f); const RwRGBA color = { 96, 48, 0, 255 }; for (int32 i = 0; i < 25; i++) { - CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CVector vecDir = CVector( + CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), - CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ); + CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ + ); ++nFrameGen; int32 currentFrame = nFrameGen & 3; float fRandom = CGeneral::GetRandomNumberInRange(0.01f, 1.0f); @@ -425,19 +436,19 @@ CObject::ObjectDamage(float amount) randomColor.red *= fRandom; randomColor.green *= fRandom; randomColor.blue *= fRandom; - } - else { + } else { randomColor.red = 0xff; - randomColor.blue = 0xfc; + randomColor.green = 0xfc; } float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-41, 41); CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0); } PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_2, vecPos); break; } - case DAMAGE_EFFECT_SMASH_WOODENBOX_COMPLETELY: { + case DAMAGE_EFFECT_SMASH_WOODENBOX_COMPLETELY: + { bIsVisible = false; bUsesCollision = false; if (!GetIsStatic()) { @@ -450,22 +461,25 @@ CObject::ObjectDamage(float amount) static const RwRGBA color = { 128, 128, 128, 255 }; CVector position = GetPosition(); for (int32 i = 0; i < 45; i++) { - CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CVector vecDir = CVector( + CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), - CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ); + CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ + ); ++nFrameGen; int32 currentFrame = nFrameGen & 3; float fRandom = CGeneral::GetRandomNumberInRange(0.5f, 1.0f); RwRGBA randomColor = { uint8(color.red * fRandom), uint8(color.green * fRandom), uint8(color.blue * fRandom), color.alpha }; float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-41, 41); CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0); } PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_1, vecPos); break; } case DAMAGE_EFFECT_SMASH_TRAFFICCONE_COMPLETELY: - case DAMAGE_EFFECT_BURST_BEACHBALL: { + case DAMAGE_EFFECT_BURST_BEACHBALL: + { bIsVisible = false; bUsesCollision = false; if (!GetIsStatic()) { @@ -478,27 +492,29 @@ CObject::ObjectDamage(float amount) const RwRGBA color1 = { 200, 0, 0, 255 }; const RwRGBA color2 = { 200, 200, 200, 255 }; for (int32 i = 0; i < 10; i++) { - CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CVector vecDir = CVector( CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), - CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ); + CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ + ); ++nFrameGen; int32 currentFrame = nFrameGen & 3; RwRGBA color = color2; if (nFrameGen & 1) color = color1; float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-41, 41); CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0); } if (m_nCollisionDamageEffect == DAMAGE_EFFECT_BURST_BEACHBALL) { PlayOneShotScriptObject(SCRIPT_SOUND_HIT_BALL, vecPos); - } - else { + } else { PlayOneShotScriptObject(SCRIPT_SOUND_TIRE_COLLISION, vecPos); } break; } - case DAMAGE_EFFECT_SMASH_BARPOST_COMPLETELY: { + case DAMAGE_EFFECT_SMASH_BARPOST_COMPLETELY: + { bIsVisible = false; bUsesCollision = false; if (!GetIsStatic()) { @@ -513,14 +529,16 @@ CObject::ObjectDamage(float amount) SetMoveSpeed(0.0f, 0.0f, 0.0f); SetTurnSpeed(0.0f, 0.0f, 0.0f); for (int32 i = 0; i < 32; i++) { - CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CVector vecDir = CVector( CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), - CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ); + CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ + ); ++nFrameGen; int32 currentFrame = nFrameGen & 3; - const RwRGBA& color = nFrameGen & 1 ? color1 : color2; + const RwRGBA &color = nFrameGen & 1 ? color1 : color2; float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-41, 41); CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0); } PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, vecPos); @@ -530,7 +548,8 @@ CObject::ObjectDamage(float amount) case DAMAGE_EFFECT_SMASH_NEWSTANDNEW2: case DAMAGE_EFFECT_SMASH_NEWSTANDNEW3: case DAMAGE_EFFECT_SMASH_NEWSTANDNEW4: - case DAMAGE_EFFECT_SMASH_NEWSTANDNEW5: { + case DAMAGE_EFFECT_SMASH_NEWSTANDNEW5: + { bIsVisible = false; bUsesCollision = false; if (!GetIsStatic()) { @@ -566,18 +585,17 @@ CObject::ObjectDamage(float amount) } for (int32 i = 0; i < 16; i++) { CVector vecDir( - CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), - CGeneral::GetRandomNumberInRange(-0.35f, 0.7f), - CGeneral::GetRandomNumberInRange(0.1f, 0.15f) + fDirectionZ + CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), + CGeneral::GetRandomNumberInRange(0.10f, 0.15f) + fDirectionZ ); float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); - nFrameGen++; + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-41, 41); + ++nFrameGen; int32 nCurFrame = nFrameGen & 0x3; - CRGBA& selectedColor = nFrameGen & 0x1 ? possibleColor1 : possibleColor2; + CRGBA &selectedColor = nFrameGen & 0x1 ? possibleColor1 : possibleColor2; CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, selectedColor, nRotationSpeed, 0, nCurFrame, 0); - if ((i % 7) == 0) - { + if (!(i % 7)) { static CRGBA secondParticleColors[4] = { CRGBA(0xA0, 0x60, 0x60, 0xFF), CRGBA(0x60, 0xA0, 0x60, 0xFF), @@ -585,8 +603,8 @@ CObject::ObjectDamage(float amount) CRGBA(0xA0, 0xA0, 0xA0, 0xFF) }; vecDir *= 0.5f; - CRGBA& secondParticleColor = secondParticleColors[nFrameGen & 3]; - int32 nSecondRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); + CRGBA &secondParticleColor = secondParticleColors[nFrameGen & 3]; + int32 nSecondRotationSpeed = CGeneral::GetRandomNumberInRange(-41, 41); CParticle::AddParticle(PARTICLE_DEBRIS, vecPos, vecDir, nil, 0.1f, secondParticleColor, nSecondRotationSpeed, 0, 1, 0); } } @@ -595,7 +613,8 @@ CObject::ObjectDamage(float amount) } case DAMAGE_EFFECT_SMASH_BLACKBAG: case DAMAGE_EFFECT_SMASH_BEACHLOUNGE_WOOD: - case DAMAGE_EFFECT_SMASH_BEACHLOUNGE_TOWEL: { + case DAMAGE_EFFECT_SMASH_BEACHLOUNGE_TOWEL: + { bIsVisible = false; bUsesCollision = false; if (!GetIsStatic()) { @@ -607,8 +626,7 @@ CObject::ObjectDamage(float amount) SetTurnSpeed(0.0f, 0.0f, 0.0f); CRGBA possibleColor1; CRGBA possibleColor2; - switch (m_nCollisionDamageEffect) - { + switch (m_nCollisionDamageEffect) { case DAMAGE_EFFECT_SMASH_BLACKBAG: possibleColor1 = CRGBA(0, 0, 0, 0xFF); possibleColor2 = possibleColor1; @@ -628,19 +646,16 @@ CObject::ObjectDamage(float amount) CGeneral::GetRandomNumberInRange(-0.35f, 0.35f), CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ ); - nFrameGen++; - int32 nCurFrame = nFrameGen & 3; - CRGBA& selectedColor = nFrameGen & 1 ? possibleColor1 : possibleColor2; + ++nFrameGen; + int32 nCurFrame = nFrameGen & 0x3; + CRGBA &selectedColor = nFrameGen & 0x1 ? possibleColor1 : possibleColor2; float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-41, 41); CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, selectedColor, nRotationSpeed, 0, nCurFrame, 0); } - if (m_nCollisionDamageEffect == DAMAGE_EFFECT_SMASH_BLACKBAG) - { + if (m_nCollisionDamageEffect == DAMAGE_EFFECT_SMASH_BLACKBAG) { PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_2, vecPos); - } - else if (m_nCollisionDamageEffect == DAMAGE_EFFECT_SMASH_BEACHLOUNGE_WOOD) - { + } else if (m_nCollisionDamageEffect == DAMAGE_EFFECT_SMASH_BEACHLOUNGE_WOOD) { PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, vecPos); } break; @@ -682,8 +697,8 @@ CObject::Init(void) m_nCostValue = 0; m_pCollidingEntity = nil; CColPoint point; - CEntity* outEntity = nil; - const CVector& vecPos = m_matrix.GetPosition(); + CEntity *outEntity = nil; + const CVector &vecPos = m_matrix.GetPosition(); if (CWorld::ProcessVerticalLine(vecPos, vecPos.z - 10.0f, point, outEntity, true, false, false, false, false, false, nil)) m_pCurSurface = outEntity; else @@ -721,9 +736,9 @@ CObject::CanBeDeleted(void) void CObject::DeleteAllMissionObjects() { - CObjectPool* objectPool = CPools::GetObjectPool(); + CObjectPool *objectPool = CPools::GetObjectPool(); for (int32 i = 0; i < objectPool->GetSize(); i++) { - CObject* pObject = objectPool->GetSlot(i); + CObject *pObject = objectPool->GetSlot(i); if (pObject && pObject->ObjectCreatedBy == MISSION_OBJECT) { CWorld::Remove(pObject); delete pObject; @@ -734,9 +749,9 @@ CObject::DeleteAllMissionObjects() void CObject::DeleteAllTempObjects() { - CObjectPool* objectPool = CPools::GetObjectPool(); + CObjectPool *objectPool = CPools::GetObjectPool(); for (int32 i = 0; i < objectPool->GetSize(); i++) { - CObject* pObject = objectPool->GetSlot(i); + CObject *pObject = objectPool->GetSlot(i); if (pObject && pObject->ObjectCreatedBy == TEMP_OBJECT) { CWorld::Remove(pObject); delete pObject; @@ -747,9 +762,9 @@ CObject::DeleteAllTempObjects() void CObject::DeleteAllTempObjectsInArea(CVector point, float fRadius) { - CObjectPool* objectPool = CPools::GetObjectPool(); + CObjectPool *objectPool = CPools::GetObjectPool(); for (int32 i = 0; i < objectPool->GetSize(); i++) { - CObject* pObject = objectPool->GetSlot(i); + CObject *pObject = objectPool->GetSlot(i); CVector dist = point - pObject->GetPosition(); if (pObject && pObject->ObjectCreatedBy == TEMP_OBJECT && dist.MagnitudeSqr() < fRadius * fRadius) { CWorld::Remove(pObject); @@ -759,7 +774,7 @@ CObject::DeleteAllTempObjectsInArea(CVector point, float fRadius) } bool -IsObjectPointerValid(CObject* pObject) +IsObjectPointerValid(CObject *pObject) { if (!pObject) return false; diff --git a/src/objects/Object.h b/src/objects/Object.h index 80f3b4a1..e34043a8 100644 --- a/src/objects/Object.h +++ b/src/objects/Object.h @@ -76,7 +76,7 @@ public: uint8 m_nCollisionDamageEffect; uint8 m_nSpecialCollisionResponseCases; bool m_bCameraToAvoidThisObject; - int8 m_nBeachballBounces; + uint8 m_nBeachballBounces; uint32 m_obj_unused1; uint32 m_nEndOfLifeTime; int16 m_nRefModelIndex; -- cgit v1.2.3 From 0bd373cd56e187d1c1a1457e56452dc43d21bbcb Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sat, 5 Dec 2020 02:49:32 +0300 Subject: script from other platforms and unused commands --- src/control/Script.cpp | 45 ++++++++- src/control/Script.h | 13 +++ src/control/Script8.cpp | 232 +++++++++++++++++++++++++++++++++++++++++++ src/control/ScriptCommands.h | 33 ++++++ src/core/config.h | 6 ++ 5 files changed, 328 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/control/Script.cpp b/src/control/Script.cpp index 6c4e21d5..be0e9bf0 100644 --- a/src/control/Script.cpp +++ b/src/control/Script.cpp @@ -17,6 +17,9 @@ #include "FileMgr.h" #include "Frontend.h" #include "General.h" +#ifdef MISSION_REPLAY +#include "GenericGameStorage.h" +#endif #include "HandlingMgr.h" #include "Heli.h" #include "Hud.h" @@ -93,6 +96,10 @@ uint32 CTheScripts::LastMissionPassedTime; uint16 CTheScripts::NumberOfExclusiveMissionScripts; bool CTheScripts::bPlayerHasMetDebbieHarry; bool CTheScripts::bPlayerIsInTheStatium; +#if (defined GTA_PC && !defined GTAVC_JP_PATCH || defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT || defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT) +int16 CTheScripts::CardStack[CARDS_IN_DECK * MAX_DECKS]; +int16 CTheScripts::CardStackPosition; +#endif #ifdef MISSION_REPLAY @@ -123,6 +130,9 @@ float oldTargetX; float oldTargetY; int missionRetryScriptIndex; bool doingMissionRetry; +bool gbTryingPorn4Again; +int IsInAmmunation; +int MissionSkipLevel; #endif @@ -1568,6 +1578,39 @@ const tScriptCommandData commands[] = { REGISTER_COMMAND(COMMAND_REGISTER_FIRE_LEVEL, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""), REGISTER_COMMAND(COMMAND_IS_AUSTRALIAN_GAME, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), true, -1, ""), REGISTER_COMMAND(COMMAND_DISARM_CAR_BOMB, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""), +#if (defined GTAVC_JP_PATCH || defined SUPPORT_JAPANESE_SCRIPT) + REGISTER_COMMAND(COMMAND_IS_JAPANESE_GAME, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), true, -1, ""), +#elif (!defined GTA_PS2) + REGISTER_COMMAND(COMMAND_SET_ONSCREEN_COUNTER_FLASH_WHEN_FIRST_DISPLAYED, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""), +#endif +#if (defined GTA_PC && !defined GTAVC_JP_PATCH || defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT || defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT) + REGISTER_COMMAND(COMMAND_SHUFFLE_CARD_DECKS, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""), + REGISTER_COMMAND(COMMAND_FETCH_NEXT_CARD, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(ARGTYPE_INT, ), false, -1, ""), + REGISTER_COMMAND(COMMAND_GET_OBJECT_VELOCITY, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), false, -1, ""), + REGISTER_COMMAND(COMMAND_IS_DEBUG_CAMERA_ON, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), true, -1, ""), + REGISTER_COMMAND(COMMAND_ADD_TO_OBJECT_ROTATION_VELOCITY, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), OUTPUT_ARGUMENTS(), false, -1, ""), + REGISTER_COMMAND(COMMAND_SET_OBJECT_ROTATION_VELOCITY, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), OUTPUT_ARGUMENTS(), false, -1, ""), + REGISTER_COMMAND(COMMAND_IS_OBJECT_STATIC, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), true, -1, ""), + REGISTER_COMMAND(COMMAND_GET_ANGLE_BETWEEN_2D_VECTORS, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), OUTPUT_ARGUMENTS(ARGTYPE_FLOAT, ), false, -1, ""), + REGISTER_COMMAND(COMMAND_DO_2D_RECTANGLES_COLLIDE, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), OUTPUT_ARGUMENTS(), true, -1, ""), + REGISTER_COMMAND(COMMAND_GET_OBJECT_ROTATION_VELOCITY, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), false, -1, ""), + REGISTER_COMMAND(COMMAND_ADD_VELOCITY_RELATIVE_TO_OBJECT_VELOCITY, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), OUTPUT_ARGUMENTS(), false, -1, ""), + REGISTER_COMMAND(COMMAND_GET_OBJECT_SPEED, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(ARGTYPE_FLOAT, ), false, -1, ""), +#endif +#if (defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT) + REGISTER_COMMAND(COMMAND_MARK_CUTSCENE_START, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""), + REGISTER_COMMAND(COMMAND_MARK_CUTSCENE_END, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""), + REGISTER_COMMAND(COMMAND_CUTSCENE_SCROLL, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""), +#elif (defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT) + REGISTER_COMMAND(COMMAND_IS_MISSION_SKIP, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(ARGTYPE_INT, ), false, -1, ""), + REGISTER_COMMAND(COMMAND_SET_IN_AMMUNATION, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""), + REGISTER_COMMAND(COMMAND_DO_SAVE_GAME, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""), + REGISTER_COMMAND(COMMAND_IS_RETRY, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(ARGTYPE_INT, ), false, -1, ""), + REGISTER_COMMAND(COMMAND_DUMMY, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""), + REGISTER_COMMAND(COMMAND_MARK_CUTSCENE_START, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""), + REGISTER_COMMAND(COMMAND_MARK_CUTSCENE_END, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""), + REGISTER_COMMAND(COMMAND_CUTSCENE_SCROLL, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""), +#endif }; #undef REGISTER_COMMAND #undef INPUT_ARGUMENTS @@ -4802,7 +4845,7 @@ void RetryMission(int type, int unk) { if (type == 0) { doingMissionRetry = true; - FrontEndMenuManager.m_nCurrScreen = MENUPAGE_MISSION_RETRY; + FrontEndMenuManager.m_nCurrScreen = 57; // MENUPAGE_MISSION_RETRY FrontEndMenuManager.RequestFrontEndStartUp(); } else if (type == 2) { diff --git a/src/control/Script.h b/src/control/Script.h index f7613d18..983cf6e5 100644 --- a/src/control/Script.h +++ b/src/control/Script.h @@ -306,6 +306,15 @@ class CTheScripts static uint16 ScriptsUpdated; static uint32 LastMissionPassedTime; static uint16 NumberOfExclusiveMissionScripts; +#if (defined GTA_PC && !defined GTAVC_JP_PATCH || defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT || defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT) +#define CARDS_IN_SUIT (13) +#define NUM_SUITS (4) +#define MAX_DECKS (6) +#define CARDS_IN_DECK (CARDS_IN_SUIT * NUM_SUITS) +#define CARDS_IN_STACK (CARDS_IN_DECK * MAX_DECKS) + static int16 CardStack[CARDS_IN_STACK]; + static int16 CardStackPosition; +#endif public: static bool bPlayerIsInTheStatium; static uint8 RiotIntensity; @@ -547,12 +556,16 @@ private: extern int scriptToLoad; #endif #ifdef MISSION_REPLAY +static_assert(false, "Mission replay is not supported"); extern int AllowMissionReplay; extern uint32 WaitForMissionActivate; extern uint32 WaitForSave; extern uint32 MissionStartTime; extern int missionRetryScriptIndex; extern bool doingMissionRetry; +extern bool gbTryingPorn4Again; +extern int IsInAmmunation; +extern int MissionSkipLevel; uint32 AddExtraDeathDelay(); void RetryMission(int, int); diff --git a/src/control/Script8.cpp b/src/control/Script8.cpp index 7af0ac8e..42230f0d 100644 --- a/src/control/Script8.cpp +++ b/src/control/Script8.cpp @@ -4,8 +4,18 @@ #include "ScriptCommands.h" #include "DMAudio.h" +#if ((defined GTAVC_JP_PATCH || defined SUPPORT_JAPANESE_SCRIPT) && defined MORE_LANGUAGES) +#include "Frontend.h" +#endif #include "GameLogic.h" #include "Garages.h" +#ifdef MISSION_REPLAY +#include "GenericGameStorage.h" +#endif +#if (defined GTA_PC && !defined GTAVC_JP_PATCH || defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT || defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT) +#include "General.h" +#include "Maths.h" +#endif #include "Hud.h" #include "Pad.h" #include "PedAttractor.h" @@ -373,6 +383,228 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command) } return 0; } +#if (defined GTAVC_JP_PATCH || defined SUPPORT_JAPANESE_SCRIPT) + case COMMAND_IS_JAPANESE_GAME: +#ifdef MORE_LANGUAGES + UpdateCompareFlag(FrontEndMenuManager.m_PrefsLanguage == LANGUAGE_JAPANESE); +#elif (defined GTAVC_JP_PATCH) + UpdateCompareFlag(true); +#else + UpdateCompareFlag(false); +#endif + return 0; +#elif (!defined GTA_PS2) + case COMMAND_SET_ONSCREEN_COUNTER_FLASH_WHEN_FIRST_DISPLAYED: + script_assert(CTheScripts::ScriptSpace[m_nIp++] == ARGUMENT_GLOBALVAR); + uint16 var = CTheScripts::Read2BytesFromScript(&m_nIp); + CollectParameters(&m_nIp, 1); + //CUserDisplay::OnscnTimer.SetCounterFlashWhenFirstDisplayed(var, ScriptParams[0]); + break; +#endif +#if (defined GTA_PC && !defined GTAVC_JP_PATCH || defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT || defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT) + case COMMAND_SHUFFLE_CARD_DECKS: + { + CollectParameters(&m_nIp, 1); + script_assert(ScriptParams[0] >= 0 && ScriptParams[0] <= 6); + for (int i = 0; i < CARDS_IN_STACK; i++) + CTheScripts::CardStack[i] = 0; + int16 seq[CARDS_IN_STACK]; + for (int i = 0; i < MAX_DECKS * CARDS_IN_DECK; i++) + seq[i] = i; + int cards_left = CARDS_IN_DECK * ScriptParams[0]; + for (int k = 1; k < CARDS_IN_DECK + 1; k++) { + for (int deck = 0; deck < ScriptParams[0]; deck++) { + int index = CGeneral::GetRandomNumberInRange(0, cards_left); + CTheScripts::CardStack[seq[index]] = k; + for (int l = index; l < cards_left; l++) { + if (l + 1 < CARDS_IN_STACK) + seq[l] = seq[l + 1]; + else + seq[l] = 0; + } + --cards_left; + } + } + CTheScripts::CardStackPosition = 0; + return 0; + } + case COMMAND_FETCH_NEXT_CARD: + { + if (CTheScripts::CardStack[CTheScripts::CardStackPosition] == 0) + CTheScripts::CardStackPosition = 0; + ScriptParams[0] = CTheScripts::CardStack[CTheScripts::CardStackPosition++]; + if (CTheScripts::CardStackPosition == CARDS_IN_DECK * MAX_DECKS) + CTheScripts::CardStackPosition = 0; + StoreParameters(&m_nIp, 1); + return 0; + } + case COMMAND_GET_OBJECT_VELOCITY: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]); + *(CVector*)ScriptParams[0] = GAME_SPEED_TO_METERS_PER_SECOND * pObject->GetMoveSpeed(); + StoreParameters(&m_nIp, 3); + return 0; + } + case COMMAND_IS_DEBUG_CAMERA_ON: + UpdateCompareFlag(TheCamera.WorldViewerBeingUsed); + return 0; + case COMMAND_ADD_TO_OBJECT_ROTATION_VELOCITY: + { + CollectParameters(&m_nIp, 4); + CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]); + CVector newSpeed = pObject->GetTurnSpeed() + *(CVector*)ScriptParams[1] / GAME_SPEED_TO_METERS_PER_SECOND; + if (pObject->bIsStatic) { + pObject->SetIsStatic(false); + pObject->AddToMovingList(); + } + pObject->SetTurnSpeed(newSpeed.x, newSpeed.y, newSpeed.z); + return 0; + } + case COMMAND_SET_OBJECT_ROTATION_VELOCITY: + { + CollectParameters(&m_nIp, 4); + CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]); + CVector newSpeed = *(CVector*)ScriptParams[1] / GAME_SPEED_TO_METERS_PER_SECOND; + if (pObject->bIsStatic) { + pObject->SetIsStatic(false); + pObject->AddToMovingList(); + } + pObject->SetTurnSpeed(newSpeed.x, newSpeed.y, newSpeed.z); + return 0; + } + case COMMAND_IS_OBJECT_STATIC: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]); + UpdateCompareFlag(pObject->GetIsStatic()); + return 0; + } + case COMMAND_GET_ANGLE_BETWEEN_2D_VECTORS: + { + CollectParameters(&m_nIp, 4); + CVector2D v1 = *(CVector2D*)ScriptParams[0]; + CVector2D v2 = *(CVector2D*)ScriptParams[2]; + float c = DotProduct2D(v1, v2) / (v1.Magnitude() * v2.Magnitude()); +#ifdef FIX_BUGS // command is a SA leftover where it was fixed to this + *(float*)ScriptParams[0] = RADTODEG(Acos(c)); +#else + *(float*)ScriptParams[0] = Acos(c); +#endif + return 0; + } + case COMMAND_DO_2D_RECTANGLES_COLLIDE: + { + CollectParameters(&m_nIp, 8); + float infX1 = *(float*)&ScriptParams[0] - *(float*)&ScriptParams[2] * 0.5; // NB: not float + float supX1 = *(float*)&ScriptParams[0] + *(float*)&ScriptParams[2] * 0.5; + float infX2 = *(float*)&ScriptParams[4] - *(float*)&ScriptParams[6] * 0.5; + float supX2 = *(float*)&ScriptParams[4] + *(float*)&ScriptParams[6] * 0.5; + float infY1 = *(float*)&ScriptParams[1] - *(float*)&ScriptParams[3] * 0.5; + float supY1 = *(float*)&ScriptParams[1] + *(float*)&ScriptParams[3] * 0.5; + float infY2 = *(float*)&ScriptParams[5] - *(float*)&ScriptParams[7] * 0.5; + float supY2 = *(float*)&ScriptParams[5] + *(float*)&ScriptParams[7] * 0.5; + bool collide = true; + if (infY2 > supY1) + collide = false; + if (infY1 > supY2) + collide = false; + if (infX2 > supX1) + collide = false; + if (infX1 > supX2) + collide = false; + UpdateCompareFlag(collide); + return 0; + } + case COMMAND_GET_OBJECT_ROTATION_VELOCITY: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]); + *(CVector*)ScriptParams[0] = pObject->GetTurnSpeed() * GAME_SPEED_TO_METERS_PER_SECOND; + StoreParameters(&m_nIp, 3); + return 0; + } + case COMMAND_ADD_VELOCITY_RELATIVE_TO_OBJECT_VELOCITY: + { + CollectParameters(&m_nIp, 4); + CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]); + CVector vecAddition = *(CVector*)&ScriptParams[1] * CTimer::GetTimeStep() / GAME_SPEED_TO_METERS_PER_SECOND; + if (!pObject->bIsStatic) { + CVector vecCurrSpeed = pObject->GetSpeed(); + vecCurrSpeed.Normalise(); + if (vecCurrSpeed.z != 1.0) { // NB: not float! + CVector vx = CrossProduct(vecCurrSpeed, CVector(0.0f, 0.0f, 1.0f)); + vx.Normalise(); + CVector vz = CrossProduct(vx, vecCurrSpeed); + vz.Normalise(); + CVector vecNewSpeed = pObject->GetSpeed() + vecAddition.x * vx + vecAddition.y * vecCurrSpeed + vecAddition.z * vecCurrSpeed; + if (pObject->bIsStatic) { + pObject->SetIsStatic(false); + pObject->AddToMovingList(); + } + pObject->SetMoveSpeed(vecNewSpeed); + } + } + return 0; + } + case COMMAND_GET_OBJECT_SPEED: + { + CollectParameters(&m_nIp, 1); + CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]); + *(float*)ScriptParams[0] = pObject->GetMoveSpeed().Magnitude() * GAME_SPEED_TO_METERS_PER_SECOND; + StoreParameters(&m_nIp, 1); + return 0; + } +#endif +#if (defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT) + case COMMAND_IS_MISSION_SKIP: +#ifdef MISSION_REPLAY + ScriptParams[0] = MissionSkipLevel; +#else + ScriptParams[0] = 0; +#endif + StoreParameters(&m_nIp, 1); + return 0; + case COMMAND_SET_IN_AMMUNATION: + CollectParameters(&m_nIp, 1); +#ifdef MISSION_REPLAY + IsInAmmunation = ScriptParams[0]; +#endif + return 0; + case COMMAND_DO_SAVE_GAME: + CollectParameters(&m_nIp, 1); +#ifdef MISSION_REPLAY + SaveGameForPause(ScriptParams[0]); +#endif + return 0; + case COMMAND_IS_RETRY: +#ifdef MISSION_REPLAY + if (strcmp(m_abScriptName, "porno4") != 0) + ScriptParams[0] = AllowMissionReplay; +#ifdef FIX_BUGS + else + ScriptParams[0] = gbTryingPorn4Again; +#else + else if (gbTryingPorn4Again) + ScriptParams[0] = 1; +#endif +#else + ScriptParams[0] = 0; +#endif + StoreParameters(&m_nIp, 1); + return 0; + case COMMAND_DUMMY: + return 0; +#endif +#if (defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT || defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT) + // it is unknown what these commands do but they don't take parameters + case COMMAND_MARK_CUTSCENE_START: + return 0; + case COMMAND_MARK_CUTSCENE_END: + return 0; + case COMMAND_CUTSCENE_SCROLL: + return 0; +#endif default: script_assert(0); } diff --git a/src/control/ScriptCommands.h b/src/control/ScriptCommands.h index 18fc9575..9863e852 100644 --- a/src/control/ScriptCommands.h +++ b/src/control/ScriptCommands.h @@ -1437,6 +1437,39 @@ enum { COMMAND_REGISTER_FIRE_LEVEL, COMMAND_IS_AUSTRALIAN_GAME, COMMAND_DISARM_CAR_BOMB, +#if (defined GTAVC_JP_PATCH || defined SUPPORT_JAPANESE_SCRIPT) + COMMAND_IS_JAPANESE_GAME, +#elif (!defined GTA_PS2) + COMMAND_SET_ONSCREEN_COUNTER_FLASH_WHEN_FIRST_DISPLAYED, +#endif +#if (defined GTA_PC && !defined GTAVC_JP_PATCH || defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT || defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT) + COMMAND_SHUFFLE_CARD_DECKS, + COMMAND_FETCH_NEXT_CARD, + COMMAND_GET_OBJECT_VELOCITY, + COMMAND_IS_DEBUG_CAMERA_ON, + COMMAND_ADD_TO_OBJECT_ROTATION_VELOCITY, + COMMAND_SET_OBJECT_ROTATION_VELOCITY, + COMMAND_IS_OBJECT_STATIC, + COMMAND_GET_ANGLE_BETWEEN_2D_VECTORS, + COMMAND_DO_2D_RECTANGLES_COLLIDE, + COMMAND_GET_OBJECT_ROTATION_VELOCITY, + COMMAND_ADD_VELOCITY_RELATIVE_TO_OBJECT_VELOCITY, + COMMAND_GET_OBJECT_SPEED, +#endif +#if (defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT) + COMMAND_MARK_CUTSCENE_START, + COMMAND_MARK_CUTSCENE_END, + COMMAND_CUTSCENE_SCROLL, +#elif (defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT) + COMMAND_IS_MISSION_SKIP, + COMMAND_SET_IN_AMMUNATION, + COMMAND_DO_SAVE_GAME, + COMMAND_IS_RETRY, + COMMAND_DUMMY, + COMMAND_MARK_CUTSCENE_START, + COMMAND_MARK_CUTSCENE_END, + COMMAND_CUTSCENE_SCROLL, +#endif #ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT LAST_SCRIPT_COMMAND #endif diff --git a/src/core/config.h b/src/core/config.h index e591a560..6e4df00d 100644 --- a/src/core/config.h +++ b/src/core/config.h @@ -310,6 +310,12 @@ enum Config { #define USE_DEBUG_SCRIPT_LOADER // Loads main.scm by default. Hold R for main_freeroam.scm and D for main_d.scm #define USE_MEASUREMENTS_IN_METERS // makes game use meters instead of feet in script #define USE_PRECISE_MEASUREMENT_CONVERTION // makes game convert feet to meeters more precisely +#define SUPPORT_JAPANESE_SCRIPT +//#define SUPPORT_XBOX_SCRIPT +//#define SUPPORT_MOBILE_SCRIPT +#if (defined SUPPORT_XBOX_SCRIPT && defined SUPPORT_MOBILE_SCRIPT) +static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually exclusive"); +#endif //#define MISSION_REPLAY // mobile feature #endif //#define SIMPLIER_MISSIONS // apply simplifications from mobile -- cgit v1.2.3 From a82188ac07ca17fe20457e3d80b5a047c33432ff Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sat, 5 Dec 2020 12:12:56 +0300 Subject: lil fix --- src/control/Script8.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/control/Script8.cpp b/src/control/Script8.cpp index 42230f0d..ddeaf64b 100644 --- a/src/control/Script8.cpp +++ b/src/control/Script8.cpp @@ -14,7 +14,7 @@ #endif #if (defined GTA_PC && !defined GTAVC_JP_PATCH || defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT || defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT) #include "General.h" -#include "Maths.h" +#include "maths.h" #endif #include "Hud.h" #include "Pad.h" -- cgit v1.2.3 From 190bcf68f340538ab727baacddaac32541d571be Mon Sep 17 00:00:00 2001 From: "Walied K. Yassen" Date: Thu, 3 Dec 2020 10:03:23 +0200 Subject: Implement DAMAGE_EFFECT_SMASH_VEGPALM and code style fixes --- src/core/General.h | 1 - src/objects/Object.cpp | 118 ++++++++++++++++++++++++++++++++++--------------- 2 files changed, 83 insertions(+), 36 deletions(-) (limited to 'src') diff --git a/src/core/General.h b/src/core/General.h index 4cc0ebf8..7e06b96e 100644 --- a/src/core/General.h +++ b/src/core/General.h @@ -159,7 +159,6 @@ public: static int32 GetRandomNumberInRange(int32 low, int32 high) { return low + (high - low)*(GetRandomNumber()/float(MYRAND_MAX + 1)); } - static void SetRandomSeed(int32 seed) { mysrand(seed); } }; diff --git a/src/objects/Object.cpp b/src/objects/Object.cpp index 12ae5294..21aeb1e4 100644 --- a/src/objects/Object.cpp +++ b/src/objects/Object.cpp @@ -18,16 +18,17 @@ #include "SpecialFX.h" #define BEACHBALL_MAX_SCORE 250 -#define BEACHBALL_DEACCELERATION 2.5f +// the proportion of the ball speed compared to the player speed when it hits the player +#define BEACHBALL_SPEED_PROPORTION 0.4f int16 CObject::nNoTempObjects; //int16 CObject::nBodyCastHealth = 1000; float CObject::fDistToNearestTree; -void *CObject::operator new(size_t sz) { return CPools::GetObjectPool()->New(); } -void *CObject::operator new(size_t sz, int handle) { return CPools::GetObjectPool()->New(handle); }; -void CObject::operator delete(void *p, size_t sz) { CPools::GetObjectPool()->Delete((CObject *)p); } -void CObject::operator delete(void *p, int handle) { CPools::GetObjectPool()->Delete((CObject *)p); } +void *CObject::operator new(size_t sz) { return CPools::GetObjectPool()->New(); } +void *CObject::operator new(size_t sz, int handle) { return CPools::GetObjectPool()->New(handle);}; +void CObject::operator delete(void *p, size_t sz) { CPools::GetObjectPool()->Delete((CObject*)p); } +void CObject::operator delete(void *p, int handle) { CPools::GetObjectPool()->Delete((CObject*)p); } CObject::CObject(void) { @@ -135,15 +136,21 @@ CObject::ProcessControl(void) m_vecMoveSpeed.y *= fTimeStep; m_vecMoveSpeed.z += fPreviousVecSpeedMag - m_vecMoveSpeed.Magnitude2D(); if (!FindPlayerVehicle()) { - CVector distance = FindPlayerCoors() - GetPosition(); - float distanceMagnitude = distance.Magnitude2D(); - if (distance.z > 0.0 && distance.z < 1.5f && distanceMagnitude < 1.0) { + CVector distance; + distance.x = FindPlayerCoors().x - GetPosition().x; + distance.y = FindPlayerCoors().y - GetPosition().y; + distance.z = FindPlayerCoors().z - GetPosition().z; + if (distance.z > 0.0 && distance.z < 1.5f && distance.Magnitude2D() < 1.0f) { CVector playerSpeed = FindPlayerSpeed(); - if (fPreviousVecSpeedMag < 0.05 && playerSpeed.Magnitude() > 0.1) { + if (fPreviousVecSpeedMag < 0.05f && playerSpeed.Magnitude() > 0.1f) { playerSpeed.z = 0.0f; playerSpeed.Normalise(); - playerSpeed.z = 0.3; - m_vecMoveSpeed = CVector(playerSpeed.x / BEACHBALL_DEACCELERATION, playerSpeed.y / BEACHBALL_DEACCELERATION, 1.0f / BEACHBALL_DEACCELERATION * 0.3); + playerSpeed.z = 0.3f; + m_vecMoveSpeed = CVector( + playerSpeed.x * BEACHBALL_SPEED_PROPORTION, + playerSpeed.y * BEACHBALL_SPEED_PROPORTION, + 0.3f * BEACHBALL_SPEED_PROPORTION + ); PlayOneShotScriptObject(SCRIPT_SOUND_HIT_BALL, GetPosition()); m_vecTurnSpeed += CVector( ((CGeneral::GetRandomNumber() % 16) - 7) / 10.0f, @@ -159,7 +166,7 @@ CObject::ProcessControl(void) } } } - if (distanceMagnitude < 0.9 && distance.z > -1.05 && distance.z < -0.6 && m_vecMoveSpeed.z < 0.0f) { + if (distance.z > -1.05 && distance.z < -0.6 && m_vecMoveSpeed.z < 0.0f && distance.Magnitude2D() < 0.9f) { m_vecMoveSpeed.x += (CGeneral::GetRandomNumber() % 8 - 3) / 100.0f; m_vecMoveSpeed.y += (CGeneral::GetRandomNumber() % 8 - 3) / 100.0f; m_vecMoveSpeed.z = Max(m_vecMoveSpeed.z + 0.3f, 0.2f); @@ -196,7 +203,7 @@ CObject::Render(void) return; if (m_nRefModelIndex != -1 && ObjectCreatedBy == TEMP_OBJECT && bUseVehicleColours) { - CVehicleModelInfo *mi = (CVehicleModelInfo *)CModelInfo::GetModelInfo(m_nRefModelIndex); + CVehicleModelInfo *mi = (CVehicleModelInfo*)CModelInfo::GetModelInfo(m_nRefModelIndex); assert(mi->GetModelType() == MITYPE_VEHICLE); mi->SetVehicleColour(m_colour1, m_colour2); } @@ -364,9 +371,8 @@ CObject::ObjectDamage(float amount) break; } bRenderDamaged = true; - CBaseModelInfo *modelInfo = CModelInfo::GetModelInfo(GetModelIndex()); - CVector min = modelInfo->GetColModel()->boundingBox.min * 0.85f; - CVector max = modelInfo->GetColModel()->boundingBox.max * 0.85f; + CVector min = 0.85f * GetColModel()->boundingBox.min; + CVector max = 0.85f * GetColModel()->boundingBox.max; min.z = max.z; min = GetMatrix() * min; max = GetMatrix() * max; @@ -391,13 +397,14 @@ CObject::ObjectDamage(float amount) PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, min); break; } - case DAMAGE_EFFECT_SMASH_COMPLETELY: - case DAMAGE_EFFECT_CHANGE_THEN_SMASH: - { - if (m_nCollisionDamageEffect == DAMAGE_EFFECT_CHANGE_THEN_SMASH && !bRenderDamaged) { + case DAMAGE_EFFECT_CHANGE_THEN_SMASH: { + if (!bRenderDamaged) { bRenderDamaged = true; return; } + // fall through + } + case DAMAGE_EFFECT_SMASH_COMPLETELY: { bIsVisible = false; bUsesCollision = false; if (!GetIsStatic()) { @@ -430,18 +437,23 @@ CObject::ObjectDamage(float amount) ); ++nFrameGen; int32 currentFrame = nFrameGen & 3; - float fRandom = CGeneral::GetRandomNumberInRange(0.01f, 1.0f); RwRGBA randomColor = color; - if (m_nCollisionDamageEffect == DAMAGE_EFFECT_SMASH_CARDBOARD_COMPLETELY) { - randomColor.red *= fRandom; - randomColor.green *= fRandom; - randomColor.blue *= fRandom; - } else { - randomColor.red = 0xff; - randomColor.green = 0xfc; + switch (m_nCollisionDamageEffect) { + case DAMAGE_EFFECT_SMASH_CARDBOARD_COMPLETELY: { + float fRandom = CGeneral::GetRandomNumberInRange(0.01f, 1.0f); + randomColor.red *= fRandom; + randomColor.green *= fRandom; + randomColor.blue *= fRandom; + break; + } + case DAMAGE_EFFECT_SMASH_YELLOW_TARGET_COMPLETELY: { + randomColor.red = 0xff; + randomColor.green = 0xfc; + break; + } } float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-41, 41); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0); } PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_2, vecPos); @@ -471,7 +483,7 @@ CObject::ObjectDamage(float amount) float fRandom = CGeneral::GetRandomNumberInRange(0.5f, 1.0f); RwRGBA randomColor = { uint8(color.red * fRandom), uint8(color.green * fRandom), uint8(color.blue * fRandom), color.alpha }; float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-41, 41); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0); } PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_1, vecPos); @@ -503,7 +515,7 @@ CObject::ObjectDamage(float amount) if (nFrameGen & 1) color = color1; float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-41, 41); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0); } if (m_nCollisionDamageEffect == DAMAGE_EFFECT_BURST_BEACHBALL) { @@ -538,7 +550,7 @@ CObject::ObjectDamage(float amount) int32 currentFrame = nFrameGen & 3; const RwRGBA &color = nFrameGen & 1 ? color1 : color2; float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-41, 41); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0); } PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, vecPos); @@ -590,7 +602,7 @@ CObject::ObjectDamage(float amount) CGeneral::GetRandomNumberInRange(0.10f, 0.15f) + fDirectionZ ); float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-41, 41); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); ++nFrameGen; int32 nCurFrame = nFrameGen & 0x3; CRGBA &selectedColor = nFrameGen & 0x1 ? possibleColor1 : possibleColor2; @@ -604,13 +616,49 @@ CObject::ObjectDamage(float amount) }; vecDir *= 0.5f; CRGBA &secondParticleColor = secondParticleColors[nFrameGen & 3]; - int32 nSecondRotationSpeed = CGeneral::GetRandomNumberInRange(-41, 41); + int32 nSecondRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); CParticle::AddParticle(PARTICLE_DEBRIS, vecPos, vecDir, nil, 0.1f, secondParticleColor, nSecondRotationSpeed, 0, 1, 0); } } PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, vecPos); break; } + case DAMAGE_EFFECT_SMASH_VEGPALM: + { + static RwRGBA primaryColor1 = { 0x39, 0x4D, 0x29, 0xff }; + static RwRGBA primaryColor2 = { 0x94, 0x7D, 0x73, 0xff }; + bIsVisible = false; + bUsesCollision = false; + if (!GetIsStatic()) { + RemoveFromMovingList(); + } + SetIsStatic(true); + bExplosionProof = true; + SetMoveSpeed(0.0f, 0.0f, 0.0f); + SetTurnSpeed(0.0f, 0.0f, 0.0f); + float fRadius = GetColModel()->boundingSphere.radius; + for (int32 i = 0; i < 32; i++) { + CVector particleDir = CVector( + CGeneral::GetRandomNumberInRange(-0.25f, 0.25f), + CGeneral::GetRandomNumberInRange(-0.25f, 0.25f), + CGeneral::GetRandomNumberInRange(-0.05f, 0.05f) + fDirectionZ + ); + CVector particlePos = vecPos; + particlePos.z += CGeneral::GetRandomNumberInRange(0.0f, 1.0f) * fRadius; + ++nFrameGen; + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); + int32 nCurFrame = nFrameGen & 0x3; + float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); + RwRGBA& particleColor = nFrameGen & 1 ? primaryColor1 : primaryColor2; + CParticle::AddParticle(PARTICLE_CAR_DEBRIS, particlePos, particleDir, nil, fSize, particleColor, nRotationSpeed, 0, nCurFrame, 0); + if ((i % 7) == 0) { + static RwRGBA secondaryColor = { 0x9A, 0x99, 0x99, 0x3E }; + CParticle::AddParticle(PARTICLE_DEBRIS, particlePos, particleDir, nil, 0.3, secondaryColor, nRotationSpeed, 0, 0, 0); + } + } + PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_2, vecPos); + break; + } case DAMAGE_EFFECT_SMASH_BLACKBAG: case DAMAGE_EFFECT_SMASH_BEACHLOUNGE_WOOD: case DAMAGE_EFFECT_SMASH_BEACHLOUNGE_TOWEL: @@ -650,7 +698,7 @@ CObject::ObjectDamage(float amount) int32 nCurFrame = nFrameGen & 0x3; CRGBA &selectedColor = nFrameGen & 0x1 ? possibleColor1 : possibleColor2; float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f); - int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-41, 41); + int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40); CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, selectedColor, nRotationSpeed, 0, nCurFrame, 0); } if (m_nCollisionDamageEffect == DAMAGE_EFFECT_SMASH_BLACKBAG) { -- cgit v1.2.3 From 7ad86595e45d75f26d530f84c408ab9d2b8f1b38 Mon Sep 17 00:00:00 2001 From: withmorten Date: Mon, 7 Dec 2020 01:19:10 +0100 Subject: int32 enum fixed --- src/audio/audio_enums.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/audio/audio_enums.h b/src/audio/audio_enums.h index 65094555..91fcec49 100644 --- a/src/audio/audio_enums.h +++ b/src/audio/audio_enums.h @@ -1274,7 +1274,7 @@ enum AudioEntityHandle { AEHANDLE_ERROR_BADAUDIOTYPE = -1, }; -enum eAudioType : int32 +enum eAudioType { AUDIOTYPE_PHYSICAL = 0, AUDIOTYPE_EXPLOSION, -- cgit v1.2.3 From e6a7a9353c4b23d1601bbdee02d21314d84717ec Mon Sep 17 00:00:00 2001 From: withmorten Date: Mon, 7 Dec 2020 01:20:14 +0100 Subject: uint32 enums fixed --- src/audio/AudioSamples.h | 2 +- src/peds/Ped.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/audio/AudioSamples.h b/src/audio/AudioSamples.h index 703431a5..20159b31 100644 --- a/src/audio/AudioSamples.h +++ b/src/audio/AudioSamples.h @@ -2,7 +2,7 @@ #include "common.h" -enum eSfxSample : uint32 { +enum eSfxSample { SFX_CAR_HORN_JEEP = 0, SFX_CAR_HORN_BMW328, SFX_CAR_HORN_BUS, diff --git a/src/peds/Ped.h b/src/peds/Ped.h index 608bb710..44a4293a 100644 --- a/src/peds/Ped.h +++ b/src/peds/Ped.h @@ -187,7 +187,7 @@ enum eWaitState { WAITSTATE_PLAYANIM_HANDSUP_SIMPLE, }; -enum eObjective : uint32 { +enum eObjective { OBJECTIVE_NONE, OBJECTIVE_WAIT_ON_FOOT, OBJECTIVE_WAIT_ON_FOOT_FOR_COP, -- cgit v1.2.3 From 16ed00aedee6633e228c13eb54be10c823fe3d3c Mon Sep 17 00:00:00 2001 From: withmorten Date: Mon, 7 Dec 2020 01:22:51 +0100 Subject: uint16 enums fixed --- src/audio/soundlist.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/audio/soundlist.h b/src/audio/soundlist.h index 0a1689bc..98982f61 100644 --- a/src/audio/soundlist.h +++ b/src/audio/soundlist.h @@ -1,6 +1,6 @@ #pragma once -enum eSound : uint16 +enum eSound { SOUND_CAR_DOOR_CLOSE_BONNET = 0, SOUND_CAR_DOOR_CLOSE_BUMPER, @@ -208,7 +208,7 @@ enum eSound : uint16 }; -enum eScriptSounds : uint16 { +enum eScriptSounds { SCRIPT_SOUND_BANK_ALARM_LOOP = 0, SCRIPT_SOUND_PART_MISSION_COMPLETE, SCRIPT_SOUND_POLICE_CELL_DOOR_SLIDING_LOOP, -- cgit v1.2.3 From 912e71be537aec6a8b2681c8f0208107a379e216 Mon Sep 17 00:00:00 2001 From: withmorten Date: Mon, 7 Dec 2020 01:30:38 +0100 Subject: int8 enums fixed --- src/audio/AudioLogic.cpp | 2 +- src/control/Garages.cpp | 6 +++--- src/control/Garages.h | 22 +++++++++++----------- src/control/Script3.cpp | 6 +++--- src/control/Script4.cpp | 2 +- src/peds/Ped.h | 4 ++-- 6 files changed, 21 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp index 3f1f568a..1ec33054 100644 --- a/src/audio/AudioLogic.cpp +++ b/src/audio/AudioLogic.cpp @@ -9020,7 +9020,7 @@ cAudioManager::ProcessGarages() const float SOUND_INTENSITY = 80.0f; CEntity *entity; - eGarageState state; + uint8 state; uint32 sampleIndex; uint8 j; float distSquared; diff --git a/src/control/Garages.cpp b/src/control/Garages.cpp index b27b3c20..6ca13014 100644 --- a/src/control/Garages.cpp +++ b/src/control/Garages.cpp @@ -192,7 +192,7 @@ void CGarages::Update(void) aGarages[GarageToBeTidied].TidyUpGarage(); } -int16 CGarages::AddOne(float X1, float Y1, float Z1, float X2, float Y2, float X3, float Y3, float Z2, eGarageType type, int32 targetId) +int16 CGarages::AddOne(float X1, float Y1, float Z1, float X2, float Y2, float X3, float Y3, float Z2, uint8 type, int32 targetId) { if (NumGarages >= NUM_GARAGES) { assert(0); @@ -293,7 +293,7 @@ int16 CGarages::AddOne(float X1, float Y1, float Z1, float X2, float Y2, float X return NumGarages++; } -void CGarages::ChangeGarageType(int16 garage, eGarageType type, int32 mi) +void CGarages::ChangeGarageType(int16 garage, uint8 type, int32 mi) { CGarage* pGarage = &aGarages[garage]; pGarage->m_eGarageType = type; @@ -2074,7 +2074,7 @@ void CGarages::CloseHideOutGaragesBeforeSave() } } -int32 CGarages::CountCarsInHideoutGarage(eGarageType type) +int32 CGarages::CountCarsInHideoutGarage(uint8 type) { int32 total = 0; for (int i = 0; i < NUM_GARAGE_STORED_CARS; i++) { diff --git a/src/control/Garages.h b/src/control/Garages.h index 04c01719..85c52a4c 100644 --- a/src/control/Garages.h +++ b/src/control/Garages.h @@ -7,7 +7,7 @@ class CVehicle; class CCamera; -enum eGarageState : int8 +enum eGarageState { GS_FULLYCLOSED, GS_OPENED, @@ -18,7 +18,7 @@ enum eGarageState : int8 GS_AFTERDROPOFF, }; -enum eGarageType : int8 +enum eGarageType { GARAGE_NONE, GARAGE_MISSION, @@ -93,8 +93,8 @@ VALIDATE_SIZE(CStoredCar, 0x28); class CGarage { - eGarageType m_eGarageType; - eGarageState m_eGarageState; + uint8 m_eGarageType; + uint8 m_eGarageState; uint8 m_nMaxStoredCars; bool field_2; // unused bool m_bClosingWithoutTargetCar; @@ -227,8 +227,8 @@ public: #endif static void Update(void); - static int16 AddOne(float X1, float Y1, float Z1, float X2, float Y2, float X3, float Y3, float Z2, eGarageType type, int32 targetId); - static void ChangeGarageType(int16, eGarageType, int32); + static int16 AddOne(float X1, float Y1, float Z1, float X2, float Y2, float X3, float Y3, float Z2, uint8 type, int32 targetId); + static void ChangeGarageType(int16, uint8, int32); static void PrintMessages(void); static void TriggerMessage(const char* text, int16, uint16 time, int16); static void SetTargetCarForMissonGarage(int16, CVehicle*); @@ -265,9 +265,9 @@ private: static bool IsCarSprayable(CVehicle*); static float FindDoorHeightForMI(int32); static void CloseHideOutGaragesBeforeSave(void); - static int32 CountCarsInHideoutGarage(eGarageType); - static int32 GetBombTypeForGarageType(eGarageType type) { return type - GARAGE_BOMBSHOP1 + 1; } - static int32 GetCarsCollectedIndexForGarageType(eGarageType type) + static int32 CountCarsInHideoutGarage(uint8); + static int32 GetBombTypeForGarageType(uint8 type) { return type - GARAGE_BOMBSHOP1 + 1; } + static int32 GetCarsCollectedIndexForGarageType(uint8 type) { switch (type) { case GARAGE_COLLECTCARS_1: return 0; @@ -278,7 +278,7 @@ private: } return 0; } - static int32 FindSafeHouseIndexForGarageType(eGarageType type) + static int32 FindSafeHouseIndexForGarageType(uint8 type) { switch (type) { case GARAGE_HIDEOUT_ONE: return 0; @@ -296,7 +296,7 @@ private: } return -1; } - static bool IsThisGarageTypeSafehouse(eGarageType type) { return FindSafeHouseIndexForGarageType(type) >= 0; } + static bool IsThisGarageTypeSafehouse(uint8 type) { return FindSafeHouseIndexForGarageType(type) >= 0; } friend class cAudioManager; friend class CReplay; diff --git a/src/control/Script3.cpp b/src/control/Script3.cpp index 2bc29eb7..2fe8b41f 100644 --- a/src/control/Script3.cpp +++ b/src/control/Script3.cpp @@ -286,7 +286,7 @@ int8 CRunningScript::ProcessCommands500To599(int32 command) float supX = *(float*)&ScriptParams[5]; float supY = *(float*)&ScriptParams[6]; float supZ = *(float*)&ScriptParams[7]; - ScriptParams[0] = CGarages::AddOne(infX, infY, infZ, X2, Y2, supX, supY, supZ, (eGarageType)ScriptParams[8], 0); + ScriptParams[0] = CGarages::AddOne(infX, infY, infZ, X2, Y2, supX, supY, supZ, ScriptParams[8], 0); StoreParameters(&m_nIp, 1); return 0; } @@ -302,7 +302,7 @@ int8 CRunningScript::ProcessCommands500To599(int32 command) float supX = *(float*)&ScriptParams[5]; float supY = *(float*)&ScriptParams[6]; float supZ = *(float*)&ScriptParams[7]; - ScriptParams[0] = CGarages::AddOne(infX, infY, infZ, X2, Y2, supX, supY, supZ, (eGarageType)ScriptParams[8], ScriptParams[9]); + ScriptParams[0] = CGarages::AddOne(infX, infY, infZ, X2, Y2, supX, supY, supZ, ScriptParams[8], ScriptParams[9]); StoreParameters(&m_nIp, 1); return 0; } @@ -1848,7 +1848,7 @@ int8 CRunningScript::ProcessCommands700To799(int32 command) } case COMMAND_CHANGE_GARAGE_TYPE: CollectParameters(&m_nIp, 2); - CGarages::ChangeGarageType(ScriptParams[0], (eGarageType)ScriptParams[1], 0); + CGarages::ChangeGarageType(ScriptParams[0], ScriptParams[1], 0); return 0; /* case COMMAND_ACTIVATE_CRUSHER_CRANE: diff --git a/src/control/Script4.cpp b/src/control/Script4.cpp index b2e2aaa5..7de31528 100644 --- a/src/control/Script4.cpp +++ b/src/control/Script4.cpp @@ -1537,7 +1537,7 @@ int8 CRunningScript::ProcessCommands900To999(int32 command) case COMMAND_CHANGE_GARAGE_TYPE_WITH_CAR_MODEL: { CollectParameters(&m_nIp, 3); - CGarages::ChangeGarageType(ScriptParams[0], (eGarageType)ScriptParams[1], ScriptParams[2]); + CGarages::ChangeGarageType(ScriptParams[0], ScriptParams[1], ScriptParams[2]); return 0; } case COMMAND_FIND_DRUG_PLANE_COORDINATES: diff --git a/src/peds/Ped.h b/src/peds/Ped.h index 44a4293a..343e9b22 100644 --- a/src/peds/Ped.h +++ b/src/peds/Ped.h @@ -52,7 +52,7 @@ enum eFormation FORMATION_FRONT }; -enum FightState : int8 { +enum FightState { FIGHTSTATE_MOVE_FINISHED = -2, FIGHTSTATE_JUST_ATTACKED, FIGHTSTATE_NO_MOVE, @@ -598,7 +598,7 @@ public: uint32 m_curFightMove; uint32 m_lastFightMove; uint8 m_fightButtonPressure; - FightState m_fightState; + int8 m_fightState; bool m_takeAStepAfterAttack; uint8 m_bleedCounter; CFire *m_pFire; -- cgit v1.2.3 From 4c0744260d2a7c1d9e015359edc58affb975fa03 Mon Sep 17 00:00:00 2001 From: withmorten Date: Mon, 7 Dec 2020 01:59:17 +0100 Subject: uint8 enums fixed --- src/audio/AudioLogic.cpp | 4 ++-- src/audio/AudioManager.h | 2 +- src/control/AutoPilot.cpp | 6 +++--- src/control/AutoPilot.h | 12 ++++++------ src/control/CarAI.cpp | 4 ++-- src/control/CarAI.h | 4 ++-- src/control/Pickups.cpp | 2 +- src/control/Pickups.h | 4 ++-- src/control/Script.cpp | 4 ++-- src/control/Script4.cpp | 2 +- src/control/Script6.cpp | 2 +- src/control/SetPieces.cpp | 2 +- src/control/SetPieces.h | 4 ++-- src/core/PlayerInfo.h | 4 ++-- src/core/World.cpp | 2 +- src/entities/Entity.h | 12 ++++++------ src/modelinfo/BaseModelInfo.h | 7 +++---- src/modelinfo/VehicleModelInfo.h | 2 +- src/peds/Ped.h | 4 ++-- src/peds/PedFight.cpp | 4 ++-- src/vehicles/Cranes.h | 8 ++++---- src/vehicles/Vehicle.h | 2 +- 22 files changed, 48 insertions(+), 49 deletions(-) (limited to 'src') diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp index 1ec33054..1ce30755 100644 --- a/src/audio/AudioLogic.cpp +++ b/src/audio/AudioLogic.cpp @@ -47,8 +47,8 @@ const int channels = ARRAY_SIZE(cAudioManager::m_asActiveSamples); const int policeChannel = channels + 1; const int allChannels = channels + 2; -enum PLAY_STATUS : uint8 { PLAY_STATUS_STOPPED = 0, PLAY_STATUS_PLAYING, PLAY_STATUS_FINISHED }; -enum LOADING_STATUS : uint8 { LOADING_STATUS_NOT_LOADED = 0, LOADING_STATUS_LOADED, LOADING_STATUS_FAILED }; +enum PLAY_STATUS { PLAY_STATUS_STOPPED = 0, PLAY_STATUS_PLAYING, PLAY_STATUS_FINISHED }; +enum LOADING_STATUS { LOADING_STATUS_NOT_LOADED = 0, LOADING_STATUS_LOADED, LOADING_STATUS_FAILED }; void cAudioManager::PreInitialiseGameSpecificSetup() const diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 2e0af437..dff7d9c8 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -149,7 +149,7 @@ public: class cVehicleParams { public: - eVehicleType m_VehicleType; + uint8 m_VehicleType; bool m_bDistanceCalculated; float m_fDistance; CVehicle *m_pVehicle; diff --git a/src/control/AutoPilot.cpp b/src/control/AutoPilot.cpp index 1b14e3d7..a899518b 100644 --- a/src/control/AutoPilot.cpp +++ b/src/control/AutoPilot.cpp @@ -109,9 +109,9 @@ void CAutoPilot::Load(uint8*& buf) m_nNextDirection = ReadSaveBuf(buf); m_nCurrentLane = ReadSaveBuf(buf); m_nNextLane = ReadSaveBuf(buf); - m_nDrivingStyle = (eCarDrivingStyle)ReadSaveBuf(buf); - m_nCarMission = (eCarMission)ReadSaveBuf(buf); - m_nTempAction = (eCarTempAction)ReadSaveBuf(buf); + m_nDrivingStyle = ReadSaveBuf(buf); + m_nCarMission = ReadSaveBuf(buf); + m_nTempAction = ReadSaveBuf(buf); m_nTimeTempAction = ReadSaveBuf(buf); m_fMaxTrafficSpeed = ReadSaveBuf(buf); m_nCruiseSpeed = ReadSaveBuf(buf); diff --git a/src/control/AutoPilot.h b/src/control/AutoPilot.h index 25feb72d..aa14ccdd 100644 --- a/src/control/AutoPilot.h +++ b/src/control/AutoPilot.h @@ -4,7 +4,7 @@ class CVehicle; struct CPathNode; -enum eCarMission : uint8 +enum eCarMission { MISSION_NONE, MISSION_CRUISE, @@ -35,7 +35,7 @@ enum eCarMission : uint8 MISSION_BLOCKPLAYER_FORWARDANDBACK }; -enum eCarTempAction : uint8 +enum eCarTempAction { TEMPACT_NONE, TEMPACT_WAIT, @@ -50,7 +50,7 @@ enum eCarTempAction : uint8 TEMPACT_SWERVERIGHT }; -enum eCarDrivingStyle : uint8 +enum eCarDrivingStyle { DRIVINGSTYLE_STOP_FOR_CARS, DRIVINGSTYLE_SLOW_DOWN_FOR_CARS, @@ -76,9 +76,9 @@ public: int8 m_nNextDirection; int8 m_nCurrentLane; int8 m_nNextLane; - eCarDrivingStyle m_nDrivingStyle; - eCarMission m_nCarMission; - eCarTempAction m_nTempAction; + uint8 m_nDrivingStyle; + uint8 m_nCarMission; + uint8 m_nTempAction; uint32 m_nTimeTempAction; float m_fMaxTrafficSpeed; uint8 m_nCruiseSpeed; diff --git a/src/control/CarAI.cpp b/src/control/CarAI.cpp index a3fcbf9a..e7f3a546 100644 --- a/src/control/CarAI.cpp +++ b/src/control/CarAI.cpp @@ -634,7 +634,7 @@ void CCarAI::TellCarToBlockOtherCar(CVehicle* pVehicle, CVehicle* pTarget) pVehicle->AutoPilot.m_nCruiseSpeed = Max(6, pVehicle->AutoPilot.m_nCruiseSpeed); } -eCarMission CCarAI::FindPoliceCarMissionForWantedLevel() +uint8 CCarAI::FindPoliceCarMissionForWantedLevel() { switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel){ case 0: @@ -648,7 +648,7 @@ eCarMission CCarAI::FindPoliceCarMissionForWantedLevel() } } -eCarMission CCarAI::FindPoliceBoatMissionForWantedLevel() +uint8 CCarAI::FindPoliceBoatMissionForWantedLevel() { switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel) { case 0: diff --git a/src/control/CarAI.h b/src/control/CarAI.h index d4af1806..dcd76d78 100644 --- a/src/control/CarAI.h +++ b/src/control/CarAI.h @@ -22,8 +22,8 @@ public: static void TellOccupantsToFleeCar(CVehicle*); static void TellCarToRamOtherCar(CVehicle*, CVehicle*); static void TellCarToBlockOtherCar(CVehicle*, CVehicle*); - static eCarMission FindPoliceCarMissionForWantedLevel(); - static eCarMission FindPoliceBoatMissionForWantedLevel(); + static uint8 FindPoliceCarMissionForWantedLevel(); + static uint8 FindPoliceBoatMissionForWantedLevel(); static int32 FindPoliceCarSpeedForWantedLevel(CVehicle*); static void MellowOutChaseSpeed(CVehicle*); static void MellowOutChaseSpeedBoat(CVehicle*); diff --git a/src/control/Pickups.cpp b/src/control/Pickups.cpp index 1ff4f8f6..c136c99f 100644 --- a/src/control/Pickups.cpp +++ b/src/control/Pickups.cpp @@ -852,7 +852,7 @@ CPickups::GenerateNewOne(CVector pos, uint32 modelIndex, uint8 type, uint32 quan if (slot >= NUMPICKUPS) return -1; - aPickUps[slot].m_eType = (ePickupType)type; + aPickUps[slot].m_eType = type; aPickUps[slot].m_bRemoved = false; aPickUps[slot].m_nQuantity = quantity; aPickUps[slot].m_nMoneySpeed = rate; diff --git a/src/control/Pickups.h b/src/control/Pickups.h index 36179f66..af9503e0 100644 --- a/src/control/Pickups.h +++ b/src/control/Pickups.h @@ -1,7 +1,7 @@ #pragma once #include "Weapon.h" -enum ePickupType : uint8 +enum ePickupType { PICKUP_NONE = 0, PICKUP_IN_SHOP, @@ -43,7 +43,7 @@ public: int16 m_eModelIndex; uint16 m_nIndex; char m_sTextKey[8]; - ePickupType m_eType; + uint8 m_eType; bool m_bRemoved; uint8 m_bWasAmmoCollected:1; uint8 m_bWasControlMessageShown:1; diff --git a/src/control/Script.cpp b/src/control/Script.cpp index be0e9bf0..ff72d664 100644 --- a/src/control/Script.cpp +++ b/src/control/Script.cpp @@ -4038,7 +4038,7 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) CollectParameters(&m_nIp, 2); CVehicle* car = CPools::GetVehiclePool()->GetAt(ScriptParams[0]); script_assert(car); - car->AutoPilot.m_nDrivingStyle = (eCarDrivingStyle)ScriptParams[1]; + car->AutoPilot.m_nDrivingStyle = (uint8)ScriptParams[1]; return 0; } case COMMAND_SET_CAR_MISSION: @@ -4046,7 +4046,7 @@ int8 CRunningScript::ProcessCommands100To199(int32 command) CollectParameters(&m_nIp, 2); CVehicle* car = CPools::GetVehiclePool()->GetAt(ScriptParams[0]); script_assert(car); - car->AutoPilot.m_nCarMission = (eCarMission)ScriptParams[1]; + car->AutoPilot.m_nCarMission = (uint8)ScriptParams[1]; car->AutoPilot.m_nAntiReverseTimer = CTimer::GetTimeInMilliseconds(); car->bEngineOn = true; return 0; diff --git a/src/control/Script4.cpp b/src/control/Script4.cpp index 7de31528..9b8f854e 100644 --- a/src/control/Script4.cpp +++ b/src/control/Script4.cpp @@ -1513,7 +1513,7 @@ int8 CRunningScript::ProcessCommands900To999(int32 command) CollectParameters(&m_nIp, 2); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]); script_assert(pVehicle); - pVehicle->SetStatus((eEntityStatus)ScriptParams[1]); + pVehicle->SetStatus(ScriptParams[1]); return 0; } case COMMAND_IS_CHAR_MALE: diff --git a/src/control/Script6.cpp b/src/control/Script6.cpp index 53464804..50a7f745 100644 --- a/src/control/Script6.cpp +++ b/src/control/Script6.cpp @@ -1409,7 +1409,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command) CollectParameters(&m_nIp, 3); CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]); script_assert(pVehicle); - pVehicle->AutoPilot.m_nTempAction = (eCarTempAction)ScriptParams[1]; + pVehicle->AutoPilot.m_nTempAction = (uint8)ScriptParams[1]; pVehicle->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + ScriptParams[2]; return 0; } diff --git a/src/control/SetPieces.cpp b/src/control/SetPieces.cpp index 9b4e0075..c5142a0a 100644 --- a/src/control/SetPieces.cpp +++ b/src/control/SetPieces.cpp @@ -29,7 +29,7 @@ void CSetPieces::AddOne(uint8 type, CVector2D vTriggerInf, CVector2D vTriggerSup { if (NumSetPieces >= NUM_SETPIECES) return; - aSetPieces[NumSetPieces].m_nType = (eSetPieceType)type; + aSetPieces[NumSetPieces].m_nType = type; aSetPieces[NumSetPieces].m_vTriggerInf.x = Min(vTriggerInf.x, vTriggerSup.x); aSetPieces[NumSetPieces].m_vTriggerInf.y = Min(vTriggerInf.y, vTriggerSup.y); aSetPieces[NumSetPieces].m_vTriggerSup.x = Max(vTriggerInf.x, vTriggerSup.x); diff --git a/src/control/SetPieces.h b/src/control/SetPieces.h index 5776d35a..5c228d4c 100644 --- a/src/control/SetPieces.h +++ b/src/control/SetPieces.h @@ -5,7 +5,7 @@ class CVehicle; class CCopPed; -enum eSetPieceType : uint8 +enum eSetPieceType { SETPIECE_NONE = 0, SETPIECE_TWOCOPCARSINALLEY, @@ -20,7 +20,7 @@ enum eSetPieceType : uint8 class CSetPiece { public: - eSetPieceType m_nType; + uint8 m_nType; uint32 m_nLastTimeCreated; CVector2D m_vTriggerInf; CVector2D m_vTriggerSup; diff --git a/src/core/PlayerInfo.h b/src/core/PlayerInfo.h index 7d99a4e0..68a50c82 100644 --- a/src/core/PlayerInfo.h +++ b/src/core/PlayerInfo.h @@ -10,7 +10,7 @@ enum eWastedBustedState WBSTATE_FAILED_CRITICAL_MISSION, }; -enum eBustedAudioState : uint8 +enum eBustedAudioState { BUSTEDAUDIO_NONE, BUSTEDAUDIO_LOADING, @@ -82,7 +82,7 @@ public: bool m_bGetOutOfJailFree; bool m_bGetOutOfHospitalFree; bool m_bDriveByAllowed; - eBustedAudioState m_nBustedAudioStatus; + uint8 m_nBustedAudioStatus; int16 m_nCurrentBustedAudio; char m_aSkinName[32]; RwTexture *m_pSkinTexture; diff --git a/src/core/World.cpp b/src/core/World.cpp index bc104fe9..1d96163c 100644 --- a/src/core/World.cpp +++ b/src/core/World.cpp @@ -1580,7 +1580,7 @@ CWorld::CallOffChaseForAreaSectorListVehicles(CPtrList &list, float x1, float y1 if(pVehicle->m_scanCode != GetCurrentScanCode()) { pVehicle->m_scanCode = GetCurrentScanCode(); const CVector &vehiclePos = pVehicle->GetPosition(); - eCarMission carMission = pVehicle->AutoPilot.m_nCarMission; + uint8 carMission = pVehicle->AutoPilot.m_nCarMission; if(pVehicle != FindPlayerVehicle() && vehiclePos.x > fStartX && vehiclePos.x < fEndX && vehiclePos.y > fStartY && vehiclePos.y < fEndY && pVehicle->bIsLawEnforcer && (carMission == MISSION_RAMPLAYER_FARAWAY || carMission == MISSION_RAMPLAYER_CLOSE || diff --git a/src/entities/Entity.h b/src/entities/Entity.h index 08d1900a..b2ea7217 100644 --- a/src/entities/Entity.h +++ b/src/entities/Entity.h @@ -6,7 +6,7 @@ struct CReference; class CPtrList; -enum eEntityType : uint8 +enum eEntityType { ENTITY_TYPE_NOTHING = 0, ENTITY_TYPE_BUILDING, @@ -16,7 +16,7 @@ enum eEntityType : uint8 ENTITY_TYPE_DUMMY, }; -enum eEntityStatus : uint8 +enum eEntityStatus { STATUS_PLAYER, STATUS_PLAYER_PLAYBACKFROMBUFFER, @@ -99,10 +99,10 @@ public: CReference *m_pFirstReference; public: - eEntityType GetType() const { return (eEntityType)m_type; } - void SetType(eEntityType type) { m_type = type; } - eEntityStatus GetStatus() const { return (eEntityStatus)m_status; } - void SetStatus(eEntityStatus status) { m_status = status; } + uint8 GetType() const { return m_type; } + void SetType(uint8 type) { m_type = type; } + uint8 GetStatus() const { return m_status; } + void SetStatus(uint8 status) { m_status = status; } CColModel *GetColModel(void) { return CModelInfo::GetModelInfo(m_modelIndex)->GetColModel(); } bool GetIsStatic(void) const { return bIsStatic || bIsStaticWaitingForCollision; } void SetIsStatic(bool state) { bIsStatic = state; } diff --git a/src/modelinfo/BaseModelInfo.h b/src/modelinfo/BaseModelInfo.h index e7dd9e4b..3aa0857a 100644 --- a/src/modelinfo/BaseModelInfo.h +++ b/src/modelinfo/BaseModelInfo.h @@ -4,7 +4,7 @@ #define MAX_MODEL_NAME (21) -enum ModelInfoType : uint8 +enum ModelInfoType { MITYPE_NA, MITYPE_SIMPLE, @@ -17,7 +17,6 @@ enum ModelInfoType : uint8 MITYPE_XTRACOMPS, // unused but still in enum MITYPE_HAND // xbox and mobile }; -VALIDATE_SIZE(ModelInfoType, 1); class C2dEffect; @@ -25,7 +24,7 @@ class CBaseModelInfo { protected: char m_name[MAX_MODEL_NAME]; - ModelInfoType m_type; + uint8 m_type; uint8 m_num2dEffects; bool m_bOwnsColModel; CColModel *m_colModel; @@ -47,7 +46,7 @@ public: virtual int GetAnimFileIndex(void) { return -1; } // one day it becomes virtual - ModelInfoType GetModelType() const { return m_type; } + uint8 GetModelType() const { return m_type; } bool IsBuilding(void) { return m_type == MITYPE_SIMPLE || m_type == MITYPE_TIME; } bool IsSimple(void) { return m_type == MITYPE_SIMPLE || m_type == MITYPE_TIME || m_type == MITYPE_WEAPON; } bool IsClump(void) { return m_type == MITYPE_CLUMP || m_type == MITYPE_PED || m_type == MITYPE_VEHICLE; } diff --git a/src/modelinfo/VehicleModelInfo.h b/src/modelinfo/VehicleModelInfo.h index d03ab9bf..c7a41126 100644 --- a/src/modelinfo/VehicleModelInfo.h +++ b/src/modelinfo/VehicleModelInfo.h @@ -24,7 +24,7 @@ enum { ATOMIC_FLAG_NOCULL = 0x800, }; -enum eVehicleType : uint8{ +enum eVehicleType { VEHICLE_TYPE_CAR, VEHICLE_TYPE_BOAT, VEHICLE_TYPE_TRAIN, diff --git a/src/peds/Ped.h b/src/peds/Ped.h index 343e9b22..f8638c4b 100644 --- a/src/peds/Ped.h +++ b/src/peds/Ped.h @@ -271,7 +271,7 @@ enum PedOnGroundState { PED_DEAD_ON_THE_FLOOR }; -enum PointBlankNecessity : uint8 { +enum PointBlankNecessity { NO_POINT_BLANK_PED, POINT_BLANK_FOR_WANTED_PED, POINT_BLANK_FOR_SOMEONE_ELSE @@ -729,7 +729,7 @@ public: CPed *CheckForDeadPeds(void); bool CheckForExplosions(CVector2D &area); CPed *CheckForGunShots(void); - PointBlankNecessity CheckForPointBlankPeds(CPed*); + uint8 CheckForPointBlankPeds(CPed*); bool CheckIfInTheAir(void); void ClearAll(void); void SetPointGunAt(CEntity*); diff --git a/src/peds/PedFight.cpp b/src/peds/PedFight.cpp index 0367ef4c..855a0f1f 100644 --- a/src/peds/PedFight.cpp +++ b/src/peds/PedFight.cpp @@ -367,7 +367,7 @@ CPed::SetAttack(CEntity *victim) if (IsPlayer()) CPad::GetPad(0)->ResetAverageWeapon(); - PointBlankNecessity pointBlankStatus; + uint8 pointBlankStatus; if ((curWeapon->m_eWeaponFire == WEAPON_FIRE_INSTANT_HIT || GetWeapon()->m_eWeaponType == WEAPONTYPE_FLAMETHROWER) && TheCamera.PlayerWeaponMode.Mode != CCam::MODE_M16_1STPERSON && TheCamera.PlayerWeaponMode.Mode != CCam::MODE_M16_1STPERSON_RUNABOUT @@ -611,7 +611,7 @@ CPed::FinishedReloadCB(CAnimBlendAssociation *reloadAssoc, void *arg) } // --MIAMI: Done -PointBlankNecessity +uint8 CPed::CheckForPointBlankPeds(CPed *pedToVerify) { float pbDistance = 1.1f; diff --git a/src/vehicles/Cranes.h b/src/vehicles/Cranes.h index 45ea7a8d..162f9af9 100644 --- a/src/vehicles/Cranes.h +++ b/src/vehicles/Cranes.h @@ -11,7 +11,7 @@ class CBuilding; class CCrane { public: - enum CraneState : uint8 { + enum CraneState { IDLE = 0, GOING_TOWARDS_TARGET = 1, LIFTING_TARGET = 2, @@ -19,7 +19,7 @@ public: ROTATING_TARGET = 4, DROPPING_TARGET = 5 }; - enum CraneStatus : uint8 { + enum CraneStatus { NONE = 0, ACTIVATED = 1, DEACTIVATED = 2 @@ -46,8 +46,8 @@ public: CVector2D m_vecHookVelocity; CVehicle *m_pVehiclePickedUp; uint32 m_nTimeForNextCheck; - CraneStatus m_nCraneStatus; - CraneState m_nCraneState; + uint8 m_nCraneStatus; + uint8 m_nCraneState; uint8 m_nVehiclesCollected; bool m_bIsCrusher; bool m_bIsMilitaryCrane; diff --git a/src/vehicles/Vehicle.h b/src/vehicles/Vehicle.h index 004f1fd9..8f2686e1 100644 --- a/src/vehicles/Vehicle.h +++ b/src/vehicles/Vehicle.h @@ -281,7 +281,7 @@ public: int8 m_comedyControlState; CStoredCollPoly m_aCollPolys[2]; // poly which is under front/rear part of car float m_fSteerInput; - eVehicleType m_vehType; + uint8 m_vehType; static void *operator new(size_t); static void *operator new(size_t sz, int slot); -- cgit v1.2.3 From 64049f0f81c22b321a790636fca502e9d267623c Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Mon, 7 Dec 2020 22:56:22 +0200 Subject: Fix font bug --- src/render/Font.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/render/Font.cpp b/src/render/Font.cpp index 5a6ff94f..9b022394 100644 --- a/src/render/Font.cpp +++ b/src/render/Font.cpp @@ -390,9 +390,9 @@ CFont::PrintChar(float x, float y, wchar c) x + 32.0f * RenderState.scaleX * 1.0f, y + 33.0f * RenderState.scaleY * 0.5f), RenderState.color, - xoff / 16.0f, yoff / 12.8f, - (xoff + 1.0f) / 16.0f - 0.001f, yoff / 12.8f - 0.017f, - xoff / 16.0f, (yoff + 1.0f) / 12.8f, + xoff / 16.0f, yoff / 12.8f + 0.0021f, + (xoff + 1.0f) / 16.0f - 0.001f, yoff / 12.8f + 0.0021f, + xoff / 16.0f, (yoff + 1.0f) / 12.8f - 0.017f, (xoff + 1.0f) / 16.0f - 0.001f, (yoff + 1.0f) / 12.8f - 0.017f); } } else -- cgit v1.2.3 From 8844caf44deda3dd53c4c253d54c79cb2879a633 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Tue, 8 Dec 2020 02:22:02 +0200 Subject: Fix vanilla font bug --- src/render/Font.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/render/Font.cpp b/src/render/Font.cpp index 9b022394..a3132627 100644 --- a/src/render/Font.cpp +++ b/src/render/Font.cpp @@ -374,7 +374,11 @@ CFont::PrintChar(float x, float y, wchar c) if(Details.style == FONT_BANK || Details.style == FONT_STANDARD){ if (bDontPrint) return; if (RenderState.slant == 0.0f) { +#ifdef FIX_BUGS + if (c < 192) { +#else if (c < 193) { +#endif CSprite2d::AddToBuffer( CRect(x, y, x + 32.0f * RenderState.scaleX * 1.0f, -- cgit v1.2.3 From aae4f3319f4dcc4b3338116572bcb3f6d0f05b7e Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Tue, 8 Dec 2020 03:29:08 +0200 Subject: Fixes --- src/control/CarCtrl.cpp | 25 +++++-------------------- src/control/Garages.cpp | 2 -- src/control/Garages.h | 4 ++-- src/control/Record.h | 2 -- src/core/Camera.cpp | 2 ++ src/core/World.cpp | 4 ++-- src/weapons/Weapon.cpp | 7 ++++--- 7 files changed, 15 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/control/CarCtrl.cpp b/src/control/CarCtrl.cpp index 19f2c628..3d52a0b0 100644 --- a/src/control/CarCtrl.cpp +++ b/src/control/CarCtrl.cpp @@ -442,6 +442,11 @@ CCarCtrl::GenerateOneRandomCar() pVehicle->GetRight() = CVector(forwardY, -forwardX, 0.0f); pVehicle->GetUp() = CVector(0.0f, 0.0f, 1.0f); + float currentPathLinkForwardX = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirX(); + float currentPathLinkForwardY = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirY(); + float nextPathLinkForwardX = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirX(); + float nextPathLinkForwardY = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirY(); + #ifdef FIX_BUGS CCarPathLink* pCurrentLink; CCarPathLink* pNextLink; @@ -452,10 +457,6 @@ CCarCtrl::GenerateOneRandomCar() float directionNextLinkX; float directionNextLinkY; if (positionBetweenNodes < 0.5f) { - float currentPathLinkForwardX = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirX(); - float currentPathLinkForwardY = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirY(); - float nextPathLinkForwardX = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirX(); - float nextPathLinkForwardY = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirY(); pCurrentLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo]; pNextLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo]; @@ -486,11 +487,6 @@ CCarCtrl::GenerateOneRandomCar() pVehicle->AutoPilot.m_nTimeEnteredCurve = CTimer::GetTimeInMilliseconds() - (uint32)((positionBetweenNodes - 0.5f) * pVehicle->AutoPilot.m_nTimeToSpendOnCurrentCurve); - float currentPathLinkForwardX = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirX(); - float currentPathLinkForwardY = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirY(); - float nextPathLinkForwardX = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirX(); - float nextPathLinkForwardY = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirY(); - pCurrentLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo]; pNextLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo]; positionOnCurrentLinkIncludingLane = CVector( @@ -1907,7 +1903,6 @@ void CCarCtrl::PickNextNodeRandomly(CVehicle* pVehicle) } if (pVehicle->AutoPilot.m_bStayInFastLane) pVehicle->AutoPilot.m_nNextLane = 0; -#ifdef FIX_BUGS CVector positionOnCurrentLinkIncludingLane( pCurLink->GetX() + ((pVehicle->AutoPilot.m_nCurrentLane + pCurLink->OneWayLaneOffset()) * LANE_WIDTH) #ifdef FIX_BUGS @@ -1922,16 +1917,6 @@ void CCarCtrl::PickNextNodeRandomly(CVehicle* pVehicle) #endif ,pNextLink->GetY() - ((pVehicle->AutoPilot.m_nNextLane + pNextLink->OneWayLaneOffset()) * LANE_WIDTH) * nextPathLinkForwardX, 0.0f); -#else - CVector positionOnCurrentLinkIncludingLane( - pCurLink->GetX() + ((pVehicle->AutoPilot.m_nCurrentLane + pCurLink->OneWayLaneOffset()) * LANE_WIDTH), - pCurLink->GetY() - ((pVehicle->AutoPilot.m_nCurrentLane + pCurLink->OneWayLaneOffset()) * LANE_WIDTH) * currentPathLinkForwardX, - 0.0f); - CVector positionOnNextLinkIncludingLane( - pNextLink->GetX() + ((pVehicle->AutoPilot.m_nNextLane + pNextLink->OneWayLaneOffset()) * LANE_WIDTH) * nextPathLinkForwardY, - pNextLink->GetY() - ((pVehicle->AutoPilot.m_nNextLane + pNextLink->OneWayLaneOffset()) * LANE_WIDTH) * nextPathLinkForwardX, - 0.0f); -#endif float directionCurrentLinkX = pCurLink->GetDirX() * pVehicle->AutoPilot.m_nCurrentDirection; float directionCurrentLinkY = pCurLink->GetDirY() * pVehicle->AutoPilot.m_nCurrentDirection; float directionNextLinkX = pNextLink->GetDirX() * pVehicle->AutoPilot.m_nNextDirection; diff --git a/src/control/Garages.cpp b/src/control/Garages.cpp index b27b3c20..93067079 100644 --- a/src/control/Garages.cpp +++ b/src/control/Garages.cpp @@ -4,9 +4,7 @@ #include "main.h" #include "Bike.h" -#ifdef FIX_BUGS #include "Boat.h" -#endif #include "DMAudio.h" #include "General.h" #include "Font.h" diff --git a/src/control/Garages.h b/src/control/Garages.h index 04c01719..d570c5b3 100644 --- a/src/control/Garages.h +++ b/src/control/Garages.h @@ -148,8 +148,8 @@ class CGarage return Abs(TheCamera.GetPosition().x - GetGarageCenterX()) > SWITCH_GARAGE_DISTANCE_CLOSE || Abs(TheCamera.GetPosition().y - GetGarageCenterY()) > SWITCH_GARAGE_DISTANCE_CLOSE; #else - return Abs(TheCamera.GetPosition().x - m_fX1) > SWITCH_GARAGE_DISTANCE_CLOSE || - Abs(TheCamera.GetPosition().y - m_fY1) > SWITCH_GARAGE_DISTANCE_CLOSE; + return Abs(TheCamera.GetPosition().x - m_fInfX) > SWITCH_GARAGE_DISTANCE_CLOSE || + Abs(TheCamera.GetPosition().y - m_fInfY) > SWITCH_GARAGE_DISTANCE_CLOSE; #endif } void TidyUpGarageClose(); diff --git a/src/control/Record.h b/src/control/Record.h index 8b55b1f4..6a94c408 100644 --- a/src/control/Record.h +++ b/src/control/Record.h @@ -57,9 +57,7 @@ public: static void RestoreInfoForMatrix(CMatrix&, CCarStateEachFrame*); static void RestoreInfoForCar(CAutomobile*, CCarStateEachFrame*, bool); static void ProcessControlCars(void); -#if (defined(GTA_PS2) || defined(FIX_BUGS)) static bool ShouldThisPadBeLeftAlone(uint8 pad); -#endif static void GiveUsACar(int32, CVector, float, CAutomobile**, uint8, uint8); static void StartChaseScene(float); static void CleanUpChaseScene(void); diff --git a/src/core/Camera.cpp b/src/core/Camera.cpp index a6cf71f1..5d2768de 100644 --- a/src/core/Camera.cpp +++ b/src/core/Camera.cpp @@ -3621,6 +3621,8 @@ CCamera::LoadPathSplines(int file) m_arrPathArray[i].m_arr_PathData[j] = atof(token); i++; j = 0; + if (i == MAX_NUM_OF_SPLINETYPES) + reading = false; memset(token, 0, 32); n = 0; } diff --git a/src/core/World.cpp b/src/core/World.cpp index bc104fe9..7581a8b0 100644 --- a/src/core/World.cpp +++ b/src/core/World.cpp @@ -1164,8 +1164,8 @@ CWorld::FindObjectsIntersectingCube(const CVector &vecStartPos, const CVector &v const int32 nEndX = Min(GetSectorIndexX(vecStartPos.x), NUMSECTORS_X - 1); const int32 nEndY = Min(GetSectorIndexY(vecStartPos.y), NUMSECTORS_Y - 1); #else - const int32 nEndX = Min(GetSectorIndexX(vecSectorPos.x), NUMSECTORS_X); - const int32 nEndY = Min(GetSectorIndexY(vecSectorPos.y), NUMSECTORS_Y); + const int32 nEndX = Min(GetSectorIndexX(vecStartPos.x), NUMSECTORS_X); + const int32 nEndY = Min(GetSectorIndexY(vecStartPos.y), NUMSECTORS_Y); #endif for(int32 y = nStartY; y <= nEndY; y++) { for(int32 x = nStartX; x <= nEndX; x++) { diff --git a/src/weapons/Weapon.cpp b/src/weapons/Weapon.cpp index d1f9490d..26ed2037 100644 --- a/src/weapons/Weapon.cpp +++ b/src/weapons/Weapon.cpp @@ -1457,7 +1457,8 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim, #ifndef FIX_BUGS CVector dist = point->point - (*source); - CVector smokePos = point->point - Max(0.1f * dist.Magnitude(), 0.2f) / dist.Magnitude(); + float distMagnitude = dist.Magnitude(); + CVector smokePos = point->point - Max(distMagnitude / 10.0f, 0.2f) * dist / distMagnitude; #else CVector smokePos = point->point; #endif // !FIX_BUGS @@ -1486,9 +1487,9 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim, CParticle::AddParticle(PARTICLE_SPARK, point->point, point->normal * 0.05f); #ifndef FIX_BUGS - CVector dist = point.point - (*fireSource); + CVector dist = point->point - (*source); CVector offset = dist - Max(0.2f * dist.Magnitude(), 0.5f) * CVector(ahead.x, ahead.y, 0.0f); - CVector smokePos = *fireSource + offset; + CVector smokePos = *source + offset; #else CVector smokePos = point->point; #endif -- cgit v1.2.3 From 579efc05fcfa2472b3aa6bfeb6c9cb491f6c3cb3 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Tue, 8 Dec 2020 05:26:48 +0200 Subject: Fix bike's fInAirXRes --- src/vehicles/Bike.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/vehicles/Bike.cpp b/src/vehicles/Bike.cpp index 30d63aca..3a0be35f 100644 --- a/src/vehicles/Bike.cpp +++ b/src/vehicles/Bike.cpp @@ -202,7 +202,7 @@ CVector vecTestResistance(0.9995f, 0.9f, 0.95f); float fDAxisX = 1.0f; float fDAxisXExtra = 100.0f; float fDAxisY = 1000.0f; -float fInAirXRes = 0.88f; +float fInAirXRes = 0.98f; float fFlySpeedMult = -0.6f; void -- cgit v1.2.3 From f3e9c82432a260fa88ed8bc1d4a7432fd4a4fdba Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Tue, 8 Dec 2020 07:52:03 +0200 Subject: Pool fixes from master --- src/control/Garages.cpp | 4 ++-- src/control/Phones.cpp | 2 +- src/control/Pickups.cpp | 4 ++-- src/control/Script5.cpp | 12 ++++++------ src/core/World.cpp | 16 ++++++++++++---- src/core/World.h | 2 +- src/core/templates.h | 12 +++++++++--- src/vehicles/Bike.cpp | 3 ++- src/vehicles/Cranes.cpp | 6 +++--- 9 files changed, 38 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/control/Garages.cpp b/src/control/Garages.cpp index 93067079..a8a7a46b 100644 --- a/src/control/Garages.cpp +++ b/src/control/Garages.cpp @@ -1466,7 +1466,7 @@ static bool DoINeedToRefreshPointer(CEntity * pDoor, bool bIsDummy, uint8 nIndex bool bNeedToFindDoorEntities = false; if (pDoor) { if (bIsDummy) { - if (CPools::GetDummyPool()->IsFreeSlot(CPools::GetDummyPool()->GetJustIndex((CDummy*)pDoor))) + if (CPools::GetDummyPool()->IsFreeSlot(CPools::GetDummyPool()->GetJustIndex_NoFreeAssert((CDummy*)pDoor))) return true; if (nIndex != (CPools::GetDummyPool()->GetIndex((CDummy*)pDoor) & 0x7F)) bNeedToFindDoorEntities = true; @@ -1474,7 +1474,7 @@ static bool DoINeedToRefreshPointer(CEntity * pDoor, bool bIsDummy, uint8 nIndex return true; } else { - if (CPools::GetObjectPool()->IsFreeSlot(CPools::GetObjectPool()->GetJustIndex((CObject*)pDoor))) + if (CPools::GetObjectPool()->IsFreeSlot(CPools::GetObjectPool()->GetJustIndex_NoFreeAssert((CObject*)pDoor))) return true; if (nIndex != (CPools::GetObjectPool()->GetIndex((CObject*)pDoor) & 0x7F)) bNeedToFindDoorEntities = true; diff --git a/src/control/Phones.cpp b/src/control/Phones.cpp index 7f8677ec..edbfe6c2 100644 --- a/src/control/Phones.cpp +++ b/src/control/Phones.cpp @@ -308,7 +308,7 @@ INITSAVEBUF // Convert entity pointer to building pool index while saving if (phone->m_pEntity) { - phone->m_pEntity = (CEntity*) (CPools::GetBuildingPool()->GetJustIndex((CBuilding*)phone->m_pEntity) + 1); + phone->m_pEntity = (CEntity*) (CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert((CBuilding*)phone->m_pEntity) + 1); } } VALIDATESAVEBUF(*size) diff --git a/src/control/Pickups.cpp b/src/control/Pickups.cpp index 1ff4f8f6..45659554 100644 --- a/src/control/Pickups.cpp +++ b/src/control/Pickups.cpp @@ -1458,9 +1458,9 @@ INITSAVEBUF CPickup *buf_pickup = WriteSaveBuf(buf, aPickUps[i]); if (buf_pickup->m_eType != PICKUP_NONE) { if (buf_pickup->m_pObject != nil) - buf_pickup->m_pObject = (CObject*)(CPools::GetObjectPool()->GetJustIndex(buf_pickup->m_pObject) + 1); + buf_pickup->m_pObject = (CObject*)(CPools::GetObjectPool()->GetJustIndex_NoFreeAssert(buf_pickup->m_pObject) + 1); if (buf_pickup->m_pExtraObject != nil) - buf_pickup->m_pExtraObject = (CObject*)(CPools::GetObjectPool()->GetJustIndex(buf_pickup->m_pExtraObject) + 1); + buf_pickup->m_pExtraObject = (CObject*)(CPools::GetObjectPool()->GetJustIndex_NoFreeAssert(buf_pickup->m_pExtraObject) + 1); } } diff --git a/src/control/Script5.cpp b/src/control/Script5.cpp index 7efebb73..1f47c9b9 100644 --- a/src/control/Script5.cpp +++ b/src/control/Script5.cpp @@ -1784,10 +1784,10 @@ INITSAVEBUF handle = 0; } else if (pBuilding->GetIsATreadable()) { type = 1; - handle = CPools::GetTreadablePool()->GetJustIndex((CTreadable*)pBuilding) + 1; + handle = CPools::GetTreadablePool()->GetJustIndex_NoFreeAssert((CTreadable*)pBuilding) + 1; } else { type = 2; - handle = CPools::GetBuildingPool()->GetJustIndex(pBuilding) + 1; + handle = CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert(pBuilding) + 1; } WriteSaveBuf(buf, type); WriteSaveBuf(buf, handle); @@ -1805,19 +1805,19 @@ INITSAVEBUF case ENTITY_TYPE_BUILDING: if (((CBuilding*)pEntity)->GetIsATreadable()) { type = 1; - handle = CPools::GetTreadablePool()->GetJustIndex((CTreadable*)pEntity) + 1; + handle = CPools::GetTreadablePool()->GetJustIndex_NoFreeAssert((CTreadable*)pEntity) + 1; } else { type = 2; - handle = CPools::GetBuildingPool()->GetJustIndex((CBuilding*)pEntity) + 1; + handle = CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert((CBuilding*)pEntity) + 1; } break; case ENTITY_TYPE_OBJECT: type = 3; - handle = CPools::GetObjectPool()->GetJustIndex((CObject*)pEntity) + 1; + handle = CPools::GetObjectPool()->GetJustIndex_NoFreeAssert((CObject*)pEntity) + 1; break; case ENTITY_TYPE_DUMMY: type = 4; - handle = CPools::GetDummyPool()->GetJustIndex((CDummy*)pEntity) + 1; + handle = CPools::GetDummyPool()->GetJustIndex_NoFreeAssert((CDummy*)pEntity) + 1; default: break; } } diff --git a/src/core/World.cpp b/src/core/World.cpp index 7581a8b0..dc04738a 100644 --- a/src/core/World.cpp +++ b/src/core/World.cpp @@ -35,7 +35,7 @@ CColPoint gaTempSphereColPoints[MAX_COLLISION_POINTS]; -CPtrList CWorld::ms_bigBuildingsList[4]; +CPtrList CWorld::ms_bigBuildingsList[NUM_LEVELS]; CPtrList CWorld::ms_listMovingEntityPtrs; CSector CWorld::ms_aSectors[NUMSECTORS_Y][NUMSECTORS_X]; uint16 CWorld::ms_nCurrentScanCode; @@ -1781,21 +1781,29 @@ CWorld::ShutDown(void) CWorld::Remove(pEntity); delete pEntity; } +#ifndef FIX_BUGS pSector->m_lists[ENTITYLIST_BUILDINGS].Flush(); pSector->m_lists[ENTITYLIST_BUILDINGS_OVERLAP].Flush(); pSector->m_lists[ENTITYLIST_DUMMIES].Flush(); pSector->m_lists[ENTITYLIST_DUMMIES_OVERLAP].Flush(); +#endif } - for(int32 i = 0; i < 4; i++) { - for(CPtrNode *pNode = GetBigBuildingList((eLevelName)i).first; pNode; pNode = pNode->next) { + for(int32 i = 0; i < NUM_LEVELS; i++) { + for(CPtrNode *pNode = ms_bigBuildingsList[i].first; pNode; pNode = pNode->next) { CEntity *pEntity = (CEntity *)pNode->item; // Maybe remove from world here? delete pEntity; } - GetBigBuildingList((eLevelName)i).Flush(); + ms_bigBuildingsList[i].Flush(); } for(int i = 0; i < NUMSECTORS_X * NUMSECTORS_Y; i++) { CSector *pSector = GetSector(i % NUMSECTORS_X, i / NUMSECTORS_Y); +#ifdef FIX_BUGS + pSector->m_lists[ENTITYLIST_BUILDINGS].Flush(); + pSector->m_lists[ENTITYLIST_BUILDINGS_OVERLAP].Flush(); + pSector->m_lists[ENTITYLIST_DUMMIES].Flush(); + pSector->m_lists[ENTITYLIST_DUMMIES_OVERLAP].Flush(); +#endif if(pSector->m_lists[ENTITYLIST_BUILDINGS].first) { sprintf(gString, "Building list %d,%d not empty\n", i % NUMSECTORS_X, i / NUMSECTORS_Y); pSector->m_lists[ENTITYLIST_BUILDINGS].Flush(); diff --git a/src/core/World.h b/src/core/World.h index be32db20..74ee4d8a 100644 --- a/src/core/World.h +++ b/src/core/World.h @@ -55,7 +55,7 @@ struct CStoredCollPoly; class CWorld { - static CPtrList ms_bigBuildingsList[4]; + static CPtrList ms_bigBuildingsList[NUM_LEVELS]; static CPtrList ms_listMovingEntityPtrs; static CSector ms_aSectors[NUMSECTORS_Y][NUMSECTORS_X]; static uint16 ms_nCurrentScanCode; diff --git a/src/core/templates.h b/src/core/templates.h index 9f5bd5ea..704331c3 100644 --- a/src/core/templates.h +++ b/src/core/templates.h @@ -124,12 +124,18 @@ public: (T*)&m_entries[handle >> 8] : nil; } int GetIndex(T *entry){ - int i = GetJustIndex(entry); + int i = GetJustIndex_NoFreeAssert(entry); return m_flags[i].u + (i<<8); } int GetJustIndex(T *entry){ - // TODO: the cast is unsafe - return (int)((U*)entry - m_entries); + int index = GetJustIndex_NoFreeAssert(entry); + assert(!IsFreeSlot(index)); + return index; + } + int GetJustIndex_NoFreeAssert(T* entry){ + int index = ((U*)entry - m_entries); + assert((U*)entry == (U*)&m_entries[index]); // cast is unsafe - check required + return index; } int GetNoOfUsedSpaces(void) const { int i; diff --git a/src/vehicles/Bike.cpp b/src/vehicles/Bike.cpp index 3a0be35f..faf31077 100644 --- a/src/vehicles/Bike.cpp +++ b/src/vehicles/Bike.cpp @@ -1213,7 +1213,8 @@ CBike::ProcessControl(void) // Balance bike if(bBalancedByRider || bIsBeingPickedUp || bIsStanding){ - float onSideness = clamp(DotProduct(GetRight(), m_vecAvgSurfaceNormal), -1.0f, 1.0f); + float onSideness = DotProduct(GetRight(), m_vecAvgSurfaceNormal); + onSideness = clamp(onSideness, -1.0f, 1.0f); CVector worldCOM = Multiply3x3(GetMatrix(), m_vecCentreOfMass); // Keep bike upright if(bBalancedByRider){ diff --git a/src/vehicles/Cranes.cpp b/src/vehicles/Cranes.cpp index 2a571a67..8433a0ba 100644 --- a/src/vehicles/Cranes.cpp +++ b/src/vehicles/Cranes.cpp @@ -629,11 +629,11 @@ void CCranes::Save(uint8* buf, uint32* size) for (int i = 0; i < NUM_CRANES; i++) { CCrane *pCrane = WriteSaveBuf(buf, aCranes[i]); if (pCrane->m_pCraneEntity != nil) - pCrane->m_pCraneEntity = (CBuilding*)(CPools::GetBuildingPool()->GetJustIndex(pCrane->m_pCraneEntity) + 1); + pCrane->m_pCraneEntity = (CBuilding*)(CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert(pCrane->m_pCraneEntity) + 1); if (pCrane->m_pHook != nil) - pCrane->m_pHook = (CObject*)(CPools::GetObjectPool()->GetJustIndex(pCrane->m_pHook) + 1); + pCrane->m_pHook = (CObject*)(CPools::GetObjectPool()->GetJustIndex_NoFreeAssert(pCrane->m_pHook) + 1); if (pCrane->m_pVehiclePickedUp != nil) - pCrane->m_pVehiclePickedUp = (CVehicle*)(CPools::GetVehiclePool()->GetJustIndex(pCrane->m_pVehiclePickedUp) + 1); + pCrane->m_pVehiclePickedUp = (CVehicle*)(CPools::GetVehiclePool()->GetJustIndex_NoFreeAssert(pCrane->m_pVehiclePickedUp) + 1); } VALIDATESAVEBUF(*size); -- cgit v1.2.3 From c8b0f0bdf8a29b8efbf5c0d1b6fd00cbb2e4b02f Mon Sep 17 00:00:00 2001 From: aap Date: Tue, 8 Dec 2020 23:16:38 +0100 Subject: fix CObject::DeleteAllTempObjectsInArea --- src/objects/Object.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src') diff --git a/src/objects/Object.cpp b/src/objects/Object.cpp index 21aeb1e4..16483cca 100644 --- a/src/objects/Object.cpp +++ b/src/objects/Object.cpp @@ -813,8 +813,7 @@ CObject::DeleteAllTempObjectsInArea(CVector point, float fRadius) CObjectPool *objectPool = CPools::GetObjectPool(); for (int32 i = 0; i < objectPool->GetSize(); i++) { CObject *pObject = objectPool->GetSlot(i); - CVector dist = point - pObject->GetPosition(); - if (pObject && pObject->ObjectCreatedBy == TEMP_OBJECT && dist.MagnitudeSqr() < fRadius * fRadius) { + if (pObject && pObject->ObjectCreatedBy == TEMP_OBJECT && (point - pObject->GetPosition()).MagnitudeSqr() < SQR(fRadius)) { CWorld::Remove(pObject); delete pObject; } -- cgit v1.2.3