summaryrefslogtreecommitdiff
path: root/src/weapons/Weapon.h
diff options
context:
space:
mode:
authorclaude-bot <[email protected]>2026-07-13 12:27:07 +0000
committerclaude-bot <[email protected]>2026-07-13 12:27:07 +0000
commit9f61c9e6ac6b1ac5692cf6352d2ebbd47a31a686 (patch)
treea84756b82513739a2672db3a1f0ec579db6d18ff /src/weapons/Weapon.h
downloadre3-9f61c9e6ac6b1ac5692cf6352d2ebbd47a31a686.tar.gz
re3-9f61c9e6ac6b1ac5692cf6352d2ebbd47a31a686.zip
Import Cai1Hsu/re3 @ miami (reVC / GTA:VC decompilation)HEADmiami
Snapshot import (no upstream history) into git.ancap.in.ua/claude, per @lzcnt. Source: https://github.com/Cai1Hsu/re3 branch miami.
Diffstat (limited to 'src/weapons/Weapon.h')
-rw-r--r--src/weapons/Weapon.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/weapons/Weapon.h b/src/weapons/Weapon.h
new file mode 100644
index 0000000..f720b31
--- /dev/null
+++ b/src/weapons/Weapon.h
@@ -0,0 +1,90 @@
+#pragma once
+
+#include "WeaponType.h"
+
+#define CAR_DRIVEBYAUTOAIMING_MAXDIST (2.5f)
+#define DOOMAUTOAIMING_MAXDIST (9000.0f)
+
+class CEntity;
+class CPhysical;
+class CVehicle;
+class CPed;
+struct CColPoint;
+class CWeaponInfo;
+
+class CWeapon
+{
+public:
+ eWeaponType m_eWeaponType;
+ eWeaponState m_eWeaponState;
+ int32 m_nAmmoInClip;
+ int32 m_nAmmoTotal;
+ uint32 m_nTimer;
+ bool m_bAddRotOffset;
+
+ static bool bPhotographHasBeenTaken;
+
+ CWeapon() {
+ m_bAddRotOffset = false;
+ }
+ CWeapon(eWeaponType type, int32 ammo);
+
+ CWeaponInfo *GetInfo();
+
+ static void InitialiseWeapons(void);
+ static void ShutdownWeapons (void);
+ static void UpdateWeapons (void);
+
+ void Initialise(eWeaponType type, int32 ammo);
+ void Shutdown();
+
+ bool Fire (CEntity *shooter, CVector *fireSource);
+ bool FireFromCar (CVehicle *shooter, bool left, bool right);
+ bool FireMelee (CEntity *shooter, CVector &fireSource);
+ bool FireInstantHit(CEntity *shooter, CVector *fireSource);
+
+ static void AddGunFlashBigGuns(CVector start, CVector end);
+ void AddGunshell (CEntity *shooter, CVector const &source, CVector2D const &direction, float size);
+ void DoBulletImpact(CEntity *shooter, CEntity *victim, CVector *source, CVector *target, CColPoint *point, CVector2D ahead);
+
+ bool FireShotgun (CEntity *shooter, CVector *fireSource);
+ bool FireProjectile(CEntity *shooter, CVector *fireSource, float power);
+
+ static void GenerateFlameThrowerParticles(CVector pos, CVector dir);
+
+ bool FireAreaEffect (CEntity *shooter, CVector *fireSource);
+ bool LaserScopeDot (CVector *pOutPos, float *pOutSize);
+ bool FireSniper (CEntity *shooter);
+ bool TakePhotograph (CEntity *shooter);
+ bool FireM16_1stPerson (CEntity *shooter);
+ bool FireInstantHitFromCar(CVehicle *shooter, bool left, bool right);
+
+ static void DoDoomAiming (CEntity *shooter, CVector *source, CVector *target);
+ static void DoTankDoomAiming (CEntity *shooter, CEntity *driver, CVector *source, CVector *target);
+ static void DoDriveByAutoAiming(CEntity *driver, CVehicle *vehicle, CVector *source, CVector *target);
+
+ void Reload(void);
+ void Update(int32 audioEntity, CPed *pedToAdjustSound);
+ bool IsTypeMelee (void);
+ bool IsType2Handed(void);
+
+ static void MakePedsJumpAtShot(CPhysical *shooter, CVector *source, CVector *target);
+
+ bool HitsGround(CEntity *holder, CVector *fireSource, CEntity *aimingTo);
+ static void BlowUpExplosiveThings(CEntity *thing);
+ bool HasWeaponAmmoToBeUsed(void);
+
+ static bool IsShotgun(int weapon) { return weapon == WEAPONTYPE_SHOTGUN || weapon == WEAPONTYPE_SPAS12_SHOTGUN || weapon == WEAPONTYPE_STUBBY_SHOTGUN; }
+
+ 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);
+
+ static void CheckForShootingVehicleOccupant(CEntity **victim, CColPoint *point, eWeaponType weapon, CVector const& source, CVector const& target);
+
+#ifdef COMPATIBLE_SAVES
+ void Save(uint8*& buf);
+ void Load(uint8*& buf);
+#endif
+};
+VALIDATE_SIZE(CWeapon, 0x18);
+
+void FireOneInstantHitRound(CVector *source, CVector *target, int32 damage); \ No newline at end of file