Add base damage for m3 and xm1014. Fix m_flBaseDamageSil (#335)

* Add base damage for m3 and xm1014. Fix m_flBaseDamageSil
This commit is contained in:
fant1kua 2019-01-13 13:41:14 +02:00 committed by Dmitry Novikov
parent 9baea02b37
commit 7398bb7d71
5 changed files with 122 additions and 7 deletions

View File

@ -1131,6 +1131,91 @@ void CBaseEntity::FireBullets(ULONG cShots, Vector vecSrc, Vector vecDirShooting
ApplyMultiDamage(pev, pevAttacker);
}
void CBaseEntity::FireBuckshots(ULONG cShots, Vector vecSrc, Vector vecDirShooting, Vector vecSpread, float flDistance, int iTracerFreq, int iDamage, entvars_t *pevAttacker)
{
static int tracerCount;
int tracer;
TraceResult tr;
Vector vecRight, vecUp;
vecRight = gpGlobals->v_right;
vecUp = gpGlobals->v_up;
if (!pevAttacker)
{
// the default attacker is ourselves
pevAttacker = pev;
}
ClearMultiDamage();
gMultiDamage.type = (DMG_BULLET | DMG_NEVERGIB);
for (ULONG iShot = 1; iShot <= cShots; iShot++)
{
// get circular gaussian spread
float x, y, z;
do
{
x = RANDOM_FLOAT(-0.5, 0.5) + RANDOM_FLOAT(-0.5, 0.5);
y = RANDOM_FLOAT(-0.5, 0.5) + RANDOM_FLOAT(-0.5, 0.5);
z = x * x + y * y;
}
while (z > 1);
Vector vecDir, vecEnd;
vecDir = vecDirShooting + x * vecSpread.x * vecRight + y * vecSpread.y * vecUp;
vecEnd = vecSrc + vecDir * flDistance;
UTIL_TraceLine(vecSrc, vecEnd, dont_ignore_monsters, ENT(pev), &tr);
tracer = 0;
if (iTracerFreq != 0 && !(tracerCount++ % iTracerFreq))
{
Vector vecTracerSrc;
if (IsPlayer())
{
// adjust tracer position for player
vecTracerSrc = vecSrc + Vector(0, 0, -4) + gpGlobals->v_right * 2 + gpGlobals->v_forward * 16;
}
else
{
vecTracerSrc = vecSrc;
}
// guns that always trace also always decal
if (iTracerFreq != 1)
tracer = 1;
MESSAGE_BEGIN(MSG_PAS, SVC_TEMPENTITY, vecTracerSrc);
WRITE_BYTE(TE_TRACER);
WRITE_COORD(vecTracerSrc.x);
WRITE_COORD(vecTracerSrc.y);
WRITE_COORD(vecTracerSrc.z);
WRITE_COORD(tr.vecEndPos.x);
WRITE_COORD(tr.vecEndPos.y);
WRITE_COORD(tr.vecEndPos.z);
MESSAGE_END();
}
// do damage, paint decals
if (tr.flFraction != 1.0f)
{
CBaseEntity *pEntity = CBaseEntity::Instance(tr.pHit);
float flDamage = ((1 - tr.flFraction) * iDamage);
pEntity->TraceAttack(pevAttacker, int(flDamage), vecDir, &tr, DMG_BULLET);
}
// make bullet trails
UTIL_BubbleTrail(vecSrc, tr.vecEndPos, int((flDistance * tr.flFraction) / 64));
}
ApplyMultiDamage(pev, pevAttacker);
}
bool EXT_FUNC IsPenetrableEntity_default(Vector &vecSrc, Vector &vecEnd, entvars_t *pevAttacker, edict_t *pHit)
{
return true;

View File

@ -146,6 +146,7 @@ public:
void EXPORT SUB_CallUseToggle() { Use(this, this, USE_TOGGLE, 0); }
int ShouldToggle(USE_TYPE useType, BOOL currentState);
void FireBullets(ULONG cShots, Vector vecSrc, Vector vecDirShooting, Vector vecSpread, float flDistance, int iBulletType, int iTracerFreq = 4, int iDamage = 0, entvars_t *pevAttacker = nullptr);
void FireBuckshots(ULONG cShots, Vector vecSrc, Vector vecDirShooting, Vector vecSpread, float flDistance, int iTracerFreq, int iDamage, entvars_t *pevAttacker = nullptr);
Vector FireBullets3(Vector vecSrc, Vector vecDirShooting, float vecSpread, float flDistance, int iPenetration, int iBulletType, int iDamage, float flRangeModifier, entvars_t *pevAttacker, bool bPistol, int shared_rand = 0);
void SUB_UseTargets(CBaseEntity *pActivator, USE_TYPE useType, float value);
bool Intersects(CBaseEntity *pOther);

View File

@ -552,15 +552,14 @@ public:
void USPFire(float flSpread, float flCycleTime, BOOL fUseSemi);
void MakeBeam();
void BeamUpdate();
int m_iShell;
private:
unsigned short m_usFireUSP;
#ifdef REGAMEDLL_API
float m_flBaseDamageSil;
#endif
private:
unsigned short m_usFireUSP;
};
@ -1228,6 +1227,7 @@ private:
const float M3_MAX_SPEED = 230.0f;
const float M3_DAMAGE = 20.0f;
const Vector M3_CONE_VECTOR = Vector(0.0675, 0.0675, 0.0); // special shotgun spreads
enum m3_e
@ -1325,12 +1325,12 @@ public:
int m_iShell;
int iShellOn;
private:
unsigned short m_usFireM4A1;
#ifdef REGAMEDLL_API
float m_flBaseDamageSil;
#endif
private:
unsigned short m_usFireM4A1;
};
@ -1633,6 +1633,7 @@ private:
const float XM1014_MAX_SPEED = 240.0f;
const float XM1014_DAMAGE = 20.0f;
const Vector XM1014_CONE_VECTOR = Vector(0.0725, 0.0725, 0.0); // special shotgun spreads
enum xm1014_e

View File

@ -11,6 +11,10 @@ void CM3::Spawn()
m_iDefaultAmmo = M3_DEFAULT_GIVE;
#ifdef REGAMEDLL_API
CSPlayerWeapon()->m_flBaseDamage = M3_DAMAGE;
#endif
// Get ready to fall down
FallInit();
@ -100,7 +104,17 @@ void CM3::PrimaryAttack()
vecSrc = m_pPlayer->GetGunPosition();
vecAiming = gpGlobals->v_forward;
#ifdef REGAMEDLL_API
float flBaseDamage = CSPlayerWeapon()->m_flBaseDamage;
#else
float flBaseDamage = M3_DAMAGE;
#endif
#ifdef REGAMEDLL_FIXES
m_pPlayer->FireBuckshots(9, vecSrc, vecAiming, M3_CONE_VECTOR, 3000, 0, flBaseDamage);
#else
m_pPlayer->FireBullets(9, vecSrc, vecAiming, M3_CONE_VECTOR, 3000, BULLET_PLAYER_BUCKSHOT, 0);
#endif
#ifdef CLIENT_WEAPONS
flag = FEV_NOTHOST;

View File

@ -11,6 +11,10 @@ void CXM1014::Spawn()
m_iDefaultAmmo = XM1014_DEFAULT_GIVE;
#ifdef REGAMEDLL_API
CSPlayerWeapon()->m_flBaseDamage = XM1014_DAMAGE;
#endif
// Get ready to fall down
FallInit();
@ -98,7 +102,17 @@ void CXM1014::PrimaryAttack()
vecSrc = m_pPlayer->GetGunPosition();
vecAiming = gpGlobals->v_forward;
#ifdef REGAMEDLL_API
float flBaseDamage = CSPlayerWeapon()->m_flBaseDamage;
#else
float flBaseDamage = XM1014_DAMAGE;
#endif
#ifdef REGAMEDLL_FIXES
m_pPlayer->FireBuckshots(6, vecSrc, vecAiming, XM1014_CONE_VECTOR, 3048, 0, flBaseDamage);
#else
m_pPlayer->FireBullets(6, vecSrc, vecAiming, XM1014_CONE_VECTOR, 3048, BULLET_PLAYER_BUCKSHOT, 0);
#endif
#ifdef CLIENT_WEAPONS
flag = FEV_NOTHOST;