diff options
author | Sergeanur <s.anureev@yandex.ua> | 2020-01-07 16:26:23 +0100 |
---|---|---|
committer | Sergeanur <s.anureev@yandex.ua> | 2020-01-07 16:26:40 +0100 |
commit | f7e962beaa9bb09629990a9fc8cd42f7ef29de7d (patch) | |
tree | be625fef86277d78ea20785f0055b377708f7d74 | |
parent | CPlayerPed & CMenuManager (#286) (diff) | |
download | re3-f7e962beaa9bb09629990a9fc8cd42f7ef29de7d.tar re3-f7e962beaa9bb09629990a9fc8cd42f7ef29de7d.tar.gz re3-f7e962beaa9bb09629990a9fc8cd42f7ef29de7d.tar.bz2 re3-f7e962beaa9bb09629990a9fc8cd42f7ef29de7d.tar.lz re3-f7e962beaa9bb09629990a9fc8cd42f7ef29de7d.tar.xz re3-f7e962beaa9bb09629990a9fc8cd42f7ef29de7d.tar.zst re3-f7e962beaa9bb09629990a9fc8cd42f7ef29de7d.zip |
-rw-r--r-- | src/audio/AudioManager.cpp | 5 | ||||
-rw-r--r-- | src/objects/ObjectData.cpp | 2 | ||||
-rw-r--r-- | src/objects/Projectile.cpp | 14 | ||||
-rw-r--r-- | src/objects/Projectile.h | 1 | ||||
-rw-r--r-- | src/weapons/CProjectileInfo.cpp | 10 | ||||
-rw-r--r-- | src/weapons/CProjectileInfo.h | 20 | ||||
-rw-r--r-- | src/weapons/ProjectileInfo.cpp | 9 | ||||
-rw-r--r-- | src/weapons/ProjectileInfo.h | 20 |
8 files changed, 47 insertions, 34 deletions
diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index abfbde00..d825fb89 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -8,7 +8,6 @@ #include "Automobile.h" #include "Boat.h" #include "Bridge.h" -#include "CProjectileInfo.h" #include "Camera.h" #include "DMAudio.h" #include "Entity.h" @@ -25,6 +24,8 @@ #include "Plane.h" #include "PlayerPed.h" #include "Pools.h" +#include "Projectile.h" +#include "ProjectileInfo.h" #include "Replay.h" #include "Stats.h" #include "SurfaceTable.h" @@ -6954,7 +6955,7 @@ cAudioManager::ProcessProjectiles() } m_sQueueSample.field_48 = 4.0; m_sQueueSample.field_76 = 3; - m_sQueueSample.m_vecPos = CProjectileInfo::ms_apProjectile[i].GetPosition(); + m_sQueueSample.m_vecPos = CProjectileInfo::ms_apProjectile[i]->GetPosition(); float distSquared = GetDistanceSquared(&m_sQueueSample.m_vecPos); if(distSquared < maxDist) { m_sQueueSample.m_fDistance = Sqrt(distSquared); diff --git a/src/objects/ObjectData.cpp b/src/objects/ObjectData.cpp index 775a87a1..92e9d544 100644 --- a/src/objects/ObjectData.cpp +++ b/src/objects/ObjectData.cpp @@ -57,7 +57,7 @@ CObjectData::Initialise(const char *filename) &ms_aObjectInfo[id].m_fCollisionDamageMultiplier, &damageEffect, &responseCase, &camAvoid); - ms_aObjectInfo[id].m_fBuoyancy = 100.0f/percentSubmerged * 0.008*ms_aObjectInfo[id].m_fMass; + ms_aObjectInfo[id].m_fBuoyancy = 100.0f/percentSubmerged * GRAVITY *ms_aObjectInfo[id].m_fMass; ms_aObjectInfo[id].m_nCollisionDamageEffect = damageEffect; ms_aObjectInfo[id].m_nSpecialCollisionResponseCases = responseCase; ms_aObjectInfo[id].m_bCameraToAvoidThisObject = camAvoid; diff --git a/src/objects/Projectile.cpp b/src/objects/Projectile.cpp index c6c2d6e1..38bbfdfa 100644 --- a/src/objects/Projectile.cpp +++ b/src/objects/Projectile.cpp @@ -2,12 +2,26 @@ #include "patcher.h" #include "Projectile.h" +CProjectile::CProjectile(int32 model) : CObject() +{ + m_fMass = 1.0f; + m_fTurnMass = 1.0f; + m_fAirResistance = 0.99f; + m_fElasticity = 0.75f; + m_fBuoyancy = GRAVITY * m_fMass * 0.1f; + bExplosionProof = true; + SetModelIndex(model); + ObjectCreatedBy = MISSION_OBJECT; +} + class CProjectile_ : public CProjectile { public: + CProjectile* ctor(int32 model) { return ::new (this) CProjectile(model); } void dtor(void) { CProjectile::~CProjectile(); } }; STARTPATCHES + InjectHook(0x4BFE30, &CProjectile_::ctor, PATCH_JUMP); InjectHook(0x4BFED0, &CProjectile_::dtor, PATCH_JUMP); ENDPATCHES diff --git a/src/objects/Projectile.h b/src/objects/Projectile.h index 4d5041f8..2f2b541c 100644 --- a/src/objects/Projectile.h +++ b/src/objects/Projectile.h @@ -7,4 +7,5 @@ class CProjectile : public CObject { public: + CProjectile(int32); }; diff --git a/src/weapons/CProjectileInfo.cpp b/src/weapons/CProjectileInfo.cpp deleted file mode 100644 index f3c78ed8..00000000 --- a/src/weapons/CProjectileInfo.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "CProjectileInfo.h" - -CProjectileInfo *gaProjectileInfo = (CProjectileInfo *)0x64ED50; -CProjectileInfo *CProjectileInfo::ms_apProjectile = (CProjectileInfo *)0x87C748; - -CProjectileInfo * -CProjectileInfo::GetProjectileInfo(int32 id) -{ - return &gaProjectileInfo[id]; -} diff --git a/src/weapons/CProjectileInfo.h b/src/weapons/CProjectileInfo.h deleted file mode 100644 index 426d25f1..00000000 --- a/src/weapons/CProjectileInfo.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include "Object.h" -#include "Weapon.h" - -struct CProjectileInfo : public CObject { - eWeaponType m_eWeaponType; - CEntity *m_pSource; - int m_nExplosionTime; - char m_bInUse; - char field_13; - char field_14; - char field_15; - CVector m_vecPos; - - static CProjectileInfo *GetProjectileInfo(int32 id); - static CProjectileInfo *ms_apProjectile; -}; - -extern CProjectileInfo *gaProjectileInfo;
\ No newline at end of file diff --git a/src/weapons/ProjectileInfo.cpp b/src/weapons/ProjectileInfo.cpp index 7919b8ab..efb9dab3 100644 --- a/src/weapons/ProjectileInfo.cpp +++ b/src/weapons/ProjectileInfo.cpp @@ -3,6 +3,15 @@ #include "ProjectileInfo.h" #include "Projectile.h" +CProjectileInfo* gaProjectileInfo = (CProjectileInfo*)0x64ED50; +CProjectile* (&CProjectileInfo::ms_apProjectile)[32] = *(CProjectile*(*)[32])*(uintptr*)0x87C748; + WRAPPER void CProjectileInfo::RemoveAllProjectiles(void) { EAXJMP(0x55BB80); } WRAPPER bool CProjectileInfo::RemoveIfThisIsAProjectile(CObject *pObject) { EAXJMP(0x55BBD0); } WRAPPER bool CProjectileInfo::IsProjectileInRange(float x1, float x2, float y1, float y2, float z1, float z2, bool remove) { EAXJMP(0x55BA50); } + +CProjectileInfo* +CProjectileInfo::GetProjectileInfo(int32 id) +{ + return &gaProjectileInfo[id]; +} diff --git a/src/weapons/ProjectileInfo.h b/src/weapons/ProjectileInfo.h index e1faf028..7a1b5b53 100644 --- a/src/weapons/ProjectileInfo.h +++ b/src/weapons/ProjectileInfo.h @@ -1,11 +1,29 @@ #pragma once
+class CEntity;
class CObject;
+class CProjectile;
+enum eWeaponType;
class CProjectileInfo
{
public:
+ eWeaponType m_eWeaponType;
+ CEntity* m_pSource;
+ int m_nExplosionTime;
+ char m_bInUse;
+ char field_13;
+ char field_14;
+ char field_15;
+ CVector m_vecPos;
+
+public:
+ static CProjectileInfo* GetProjectileInfo(int32 id);
+ static CProjectile* (&ms_apProjectile)[32];
+
static bool RemoveIfThisIsAProjectile(CObject *pObject);
static void RemoveAllProjectiles(void);
static bool IsProjectileInRange(float x1, float x2, float y1, float y2, float z1, float z2, bool remove);
-};
\ No newline at end of file +};
+
+extern CProjectileInfo* gaProjectileInfo;
\ No newline at end of file |