summaryrefslogtreecommitdiffstats
path: root/src/weapons
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/weapons/BulletInfo.cpp10
-rw-r--r--src/weapons/ProjectileInfo.cpp4
-rw-r--r--src/weapons/Weapon.cpp68
-rw-r--r--src/weapons/Weapon.h5
-rw-r--r--src/weapons/WeaponInfo.h2
5 files changed, 60 insertions, 29 deletions
diff --git a/src/weapons/BulletInfo.cpp b/src/weapons/BulletInfo.cpp
index 36c3cc78..92d98a50 100644
--- a/src/weapons/BulletInfo.cpp
+++ b/src/weapons/BulletInfo.cpp
@@ -3,7 +3,7 @@
#include "BulletInfo.h"
#include "AnimBlendAssociation.h"
-#include "AudioManager.h"
+#include "DMAudio.h"
#include "AudioScriptObject.h"
#ifdef FIX_BUGS
#include "Collision.h"
@@ -122,7 +122,7 @@ void CBulletInfo::Update(void)
}
if (pPed->GetPedState() == PED_DEAD) {
CAnimBlendAssociation* pAnim;
- if (RpAnimBlendClumpGetFirstAssociation(pPed->GetClump(), ASSOC_FLAG800))
+ if (RpAnimBlendClumpGetFirstAssociation(pPed->GetClump(), ASSOC_FRONTAL))
pAnim = CAnimManager::BlendAnimation(pPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT_F, 8.0f);
else
pAnim = CAnimManager::BlendAnimation(pPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT, 8.0f);
@@ -156,11 +156,11 @@ void CBulletInfo::Update(void)
if (pHitEntity->IsObject()) {
CObject* pObject = (CObject*)pHitEntity;
if (!pObject->bInfiniteMass) {
- if (pObject->bIsStatic && pObject->m_fUprootLimit <= 0.0f) {
+ if (pObject->IsStatic() && pObject->m_fUprootLimit <= 0.0f) {
pObject->bIsStatic = false;
pObject->AddToMovingList();
}
- if (!pObject->bIsStatic)
+ if (!pObject->IsStatic())
pObject->ApplyMoveForce(-BULLET_HIT_FORCE * point.normal);
}
}
@@ -171,7 +171,7 @@ void CBulletInfo::Update(void)
}
if (pBullet->m_eWeaponType == WEAPONTYPE_SNIPERRIFLE && bAddSound) {
cAudioScriptObject* pAudio;
- switch (pHitEntity->m_type) {
+ switch (pHitEntity->GetType()) {
case ENTITY_TYPE_BUILDING:
pAudio = new cAudioScriptObject();
pAudio->Posn = pHitEntity->GetPosition();
diff --git a/src/weapons/ProjectileInfo.cpp b/src/weapons/ProjectileInfo.cpp
index c174305c..8297d953 100644
--- a/src/weapons/ProjectileInfo.cpp
+++ b/src/weapons/ProjectileInfo.cpp
@@ -193,7 +193,7 @@ CProjectileInfo::Update()
if (!gaProjectileInfo[i].m_bInUse) continue;
CPed *ped = (CPed*)gaProjectileInfo[i].m_pSource;
- if (ped != nil && ped->m_type == ENTITY_TYPE_PED && !ped->IsPointerValid())
+ if (ped != nil && ped->IsPed() && !ped->IsPointerValid())
gaProjectileInfo[i].m_pSource = nil;
if (ms_apProjectile[i] == nil) {
@@ -245,7 +245,7 @@ CProjectileInfo::IsProjectileInRange(float x1, float x2, float y1, float y2, flo
for (int i = 0; i < ARRAY_SIZE(ms_apProjectile); i++) {
if (gaProjectileInfo[i].m_bInUse) {
if (gaProjectileInfo[i].m_eWeaponType == WEAPONTYPE_ROCKETLAUNCHER || gaProjectileInfo[i].m_eWeaponType == WEAPONTYPE_MOLOTOV || gaProjectileInfo[i].m_eWeaponType == WEAPONTYPE_GRENADE) {
- CVector &pos = ms_apProjectile[i]->GetPosition();
+ const CVector &pos = ms_apProjectile[i]->GetPosition();
if (pos.x >= x1 && pos.x <= x2 && pos.y >= y1 && pos.y <= y2 && pos.z >= z1 && pos.z <= z2) {
result = true;
if (remove) {
diff --git a/src/weapons/Weapon.cpp b/src/weapons/Weapon.cpp
index a3d52f69..aef53094 100644
--- a/src/weapons/Weapon.cpp
+++ b/src/weapons/Weapon.cpp
@@ -973,7 +973,7 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim,
if ( victimPed->Dead() )
{
CAnimBlendAssociation *asoc;
- if ( RpAnimBlendClumpGetFirstAssociation(victimPed->GetClump(), ASSOC_FLAG800) )
+ if ( RpAnimBlendClumpGetFirstAssociation(victimPed->GetClump(), ASSOC_FRONTAL) )
asoc = CAnimManager::BlendAnimation(victimPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT_F, 8.0f);
else
asoc = CAnimManager::BlendAnimation(victimPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT, 8.0f);
@@ -990,7 +990,7 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim,
}
else
{
- switch ( victim->m_type )
+ switch ( victim->GetType() )
{
case ENTITY_TYPE_BUILDING:
{
@@ -1047,13 +1047,13 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim,
if ( !victimObject->bInfiniteMass )
{
- if ( victimObject->bIsStatic && victimObject->m_fUprootLimit <= 0.0f )
+ if ( victimObject->IsStatic() && victimObject->m_fUprootLimit <= 0.0f )
{
victimObject->bIsStatic = false;
victimObject->AddToMovingList();
}
- if ( !victimObject->bIsStatic )
+ if ( !victimObject->IsStatic())
{
CVector moveForce = point->normal*-4.0f;
victimObject->ApplyMoveForce(moveForce.x, moveForce.y, moveForce.z);
@@ -1065,7 +1065,7 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim,
}
}
- switch ( victim->m_type )
+ switch ( victim->GetType() )
{
case ENTITY_TYPE_BUILDING:
{
@@ -1256,7 +1256,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource)
}
else
{
- switch ( victim->m_type )
+ switch ( victim->GetType() )
{
case ENTITY_TYPE_VEHICLE:
{
@@ -1296,13 +1296,13 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource)
if ( !victimObject->bInfiniteMass )
{
- if ( victimObject->bIsStatic && victimObject->m_fUprootLimit <= 0.0f )
+ if ( victimObject->IsStatic() && victimObject->m_fUprootLimit <= 0.0f )
{
victimObject->bIsStatic = false;
victimObject->AddToMovingList();
}
- if ( !victimObject->bIsStatic )
+ if ( !victimObject->IsStatic())
{
CVector moveForce = point.normal*-5.0f;
victimObject->ApplyMoveForce(moveForce.x, moveForce.y, moveForce.z);
@@ -1315,7 +1315,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource)
}
}
- switch ( victim->m_type )
+ switch ( victim->GetType() )
{
case ENTITY_TYPE_BUILDING:
{
@@ -1724,7 +1724,7 @@ CWeapon::FireInstantHitFromCar(CAutomobile *shooter, bool left)
else
CGlass::WasGlassHitByBullet(victim, point.point);
- switch ( victim->m_type )
+ switch ( victim->GetType() )
{
case ENTITY_TYPE_BUILDING:
{
@@ -1796,10 +1796,10 @@ CWeapon::DoDoomAiming(CEntity *shooter, CVector *source, CVector *target)
if ( (CEntity*)shooterPed != victim && shooterPed->CanSeeEntity(victim, DEGTORAD(22.5f)) )
{
- if ( !(victim->m_status == STATUS_TRAIN_MOVING
- || victim->m_status == STATUS_TRAIN_NOT_MOVING
- || victim->m_status == STATUS_HELI
- || victim->m_status == STATUS_PLANE) )
+ if ( !(victim->GetStatus() == STATUS_TRAIN_MOVING
+ || victim->GetStatus() == STATUS_TRAIN_NOT_MOVING
+ || victim->GetStatus() == STATUS_HELI
+ || victim->GetStatus() == STATUS_PLANE) )
{
float distToVictim = (shooterPed->GetPosition()-victim->GetPosition()).Magnitude2D();
float distToVictimZ = Abs(shooterPed->GetPosition().z-victim->GetPosition().z);
@@ -1866,10 +1866,10 @@ CWeapon::DoTankDoomAiming(CEntity *shooter, CEntity *driver, CVector *source, CV
if ( shooter != victim && driver != victim )
{
- if ( !(victim->m_status == STATUS_TRAIN_MOVING
- || victim->m_status == STATUS_TRAIN_NOT_MOVING
- || victim->m_status == STATUS_HELI
- || victim->m_status == STATUS_PLANE) )
+ if ( !(victim->GetStatus() == STATUS_TRAIN_MOVING
+ || victim->GetStatus() == STATUS_TRAIN_NOT_MOVING
+ || victim->GetStatus() == STATUS_HELI
+ || victim->GetStatus() == STATUS_PLANE) )
{
if ( !(victim->IsVehicle() && victim->bRenderScorched) )
{
@@ -2086,7 +2086,7 @@ FireOneInstantHitRound(CVector *source, CVector *target, int32 damage)
((CVehicle *)victim)->InflictDamage(nil, WEAPONTYPE_UZI, damage);
//BUG ? no CGlass::WasGlassHitByBullet
- switch ( victim->m_type )
+ switch ( victim->GetType() )
{
case ENTITY_TYPE_BUILDING:
{
@@ -2232,7 +2232,7 @@ CWeapon::BlowUpExplosiveThings(CEntity *thing)
object->m_vecMoveSpeed.x += float((CGeneral::GetRandomNumber()&255) - 128) * 0.0002f;
object->m_vecMoveSpeed.y += float((CGeneral::GetRandomNumber()&255) - 128) * 0.0002f;
- if ( object->bIsStatic )
+ if ( object->IsStatic())
{
object->bIsStatic = false;
object->AddToMovingList();
@@ -2257,4 +2257,30 @@ bool
CWeapon::ProcessLineOfSight(CVector const &point1, CVector const &point2, CColPoint &point, CEntity *&entity, eWeaponType type, CEntity *shooter, bool checkBuildings, bool checkVehicles, bool checkPeds, bool checkObjects, bool checkDummies, bool ignoreSeeThrough, bool ignoreSomeObjects)
{
return CWorld::ProcessLineOfSight(point1, point2, point, entity, checkBuildings, checkVehicles, checkPeds, checkObjects, checkDummies, ignoreSeeThrough, ignoreSomeObjects);
-} \ No newline at end of file
+}
+
+#ifdef COMPATIBLE_SAVES
+void
+CWeapon::Save(uint8*& buf)
+{
+ WriteSaveBuf<uint32>(buf, m_eWeaponType);
+ WriteSaveBuf<uint32>(buf, m_eWeaponState);
+ WriteSaveBuf<uint32>(buf, m_nAmmoInClip);
+ WriteSaveBuf<uint32>(buf, m_nAmmoTotal);
+ WriteSaveBuf<uint32>(buf, m_nTimer);
+ WriteSaveBuf<bool>(buf, m_bAddRotOffset);
+ SkipSaveBuf(buf, 3);
+}
+
+void
+CWeapon::Load(uint8*& buf)
+{
+ m_eWeaponType = (eWeaponType)ReadSaveBuf<uint32>(buf);
+ m_eWeaponState = (eWeaponState)ReadSaveBuf<uint32>(buf);
+ m_nAmmoInClip = ReadSaveBuf<uint32>(buf);
+ m_nAmmoTotal = ReadSaveBuf<uint32>(buf);
+ m_nTimer = ReadSaveBuf<uint32>(buf);
+ m_bAddRotOffset = ReadSaveBuf<bool>(buf);
+ SkipSaveBuf(buf, 3);
+}
+#endif
diff --git a/src/weapons/Weapon.h b/src/weapons/Weapon.h
index 2c3a9657..1b2c0320 100644
--- a/src/weapons/Weapon.h
+++ b/src/weapons/Weapon.h
@@ -67,6 +67,11 @@ public:
bool HasWeaponAmmoToBeUsed(void);
static bool ProcessLineOfSight(CVector const &point1, CVector const &point2, CColPoint &point, CEntity *&entity, eWeaponType type, CEntity *shooter, bool checkBuildings, bool checkVehicles, bool checkPeds, bool checkObjects, bool checkDummies, bool ignoreSeeThrough, bool ignoreSomeObjects);
+
+#ifdef COMPATIBLE_SAVES
+ void Save(uint8*& buf);
+ void Load(uint8*& buf);
+#endif
};
VALIDATE_SIZE(CWeapon, 0x18);
diff --git a/src/weapons/WeaponInfo.h b/src/weapons/WeaponInfo.h
index 3bafd324..b5882082 100644
--- a/src/weapons/WeaponInfo.h
+++ b/src/weapons/WeaponInfo.h
@@ -46,4 +46,4 @@ public:
static void Shutdown(void);
};
-static_assert(sizeof(CWeaponInfo) == 0x54, "CWeaponInfo: error"); \ No newline at end of file
+VALIDATE_SIZE(CWeaponInfo, 0x54); \ No newline at end of file