Skip to content

Commit

Permalink
Spread parity (NeotokyoRebuild#560)
Browse files Browse the repository at this point in the history
* Parity spread values
* Add sv_neo_accuracy_scale cvar for future playtesting
* Cleanup of weapon classes to eliminate duplicate code
  • Loading branch information
Agiel authored Sep 8, 2024
1 parent 4ae348f commit ef1e86e
Show file tree
Hide file tree
Showing 54 changed files with 259 additions and 2,563 deletions.
96 changes: 6 additions & 90 deletions mp/src/game/shared/neo/weapons/weapon_aa13.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,87 +43,6 @@ CWeaponAA13::CWeaponAA13(void)
// m_nNumShotsFired = 0;
}

Activity CWeaponAA13::GetPrimaryAttackActivity()
{
if (m_nNumShotsFired < 1)
return ACT_VM_PRIMARYATTACK;

if (m_nNumShotsFired < 2)
return ACT_VM_RECOIL1;

if (m_nNumShotsFired < 3)
return ACT_VM_RECOIL2;

return ACT_VM_RECOIL3;
}

void CWeaponAA13::UpdatePenaltyTime()
{
auto owner = ToBasePlayer(GetOwner());

if (!owner)
{
return;
}

if (((owner->m_nButtons & IN_ATTACK) == false) &&
(m_flSoonestAttack < gpGlobals->curtime))
{
// Update the penalty time decay
m_flAccuracyPenalty -= gpGlobals->frametime;
m_flAccuracyPenalty = clamp(m_flAccuracyPenalty, 0.0f, GetMaxAccuracyPenalty());
}
}

void CWeaponAA13::ItemPreFrame()
{
UpdatePenaltyTime();

BaseClass::ItemPreFrame();
}

void CWeaponAA13::ItemBusyFrame()
{
UpdatePenaltyTime();

BaseClass::ItemBusyFrame();
}

void CWeaponAA13::ItemPostFrame()
{
ProcessAnimationEvents();

BaseClass::ItemPostFrame();

if (m_bInReload)
{
return;
}

CNEO_Player *pOwner = ToNEOPlayer((GetOwner()));

if (!pOwner)
{
return;
}

if (pOwner->m_nButtons & IN_ATTACK)
{
if (m_flSoonestAttack < gpGlobals->curtime)
{
if (m_iClip1 <= 0)
{
DryFire();
m_flSoonestAttack = gpGlobals->curtime + GetFastestDryRefireTime();
}
else
{
m_flSoonestAttack = gpGlobals->curtime + GetFireRate();
}
}
}
}

void CWeaponAA13::AddViewKick()
{
CNEO_Player *pOwner = ToNEOPlayer((GetOwner()));
Expand All @@ -142,18 +61,13 @@ void CWeaponAA13::AddViewKick()
pOwner->ViewPunch(viewPunch);
}

void CWeaponAA13::DryFire()
{
WeaponSound(EMPTY);
SendWeaponAnim(ACT_VM_DRYFIRE);
m_flNextPrimaryAttack = gpGlobals->curtime + SequenceDuration();
}

void CWeaponAA13::PrimaryAttack(void)
{
// Combo of the neobasecombatweapon and the Supa7 attack
Assert(!ShootingIsPrevented());

if (ShootingIsPrevented())
{
return;
}
if (gpGlobals->curtime < m_flSoonestAttack)
{
return;
Expand Down Expand Up @@ -204,6 +118,8 @@ void CWeaponAA13::PrimaryAttack(void)
FireBulletsInfo_t info(5, vecSrc, vecAiming, vecSpread, MAX_TRACE_LENGTH, m_iPrimaryAmmoType);
info.m_pAttacker = pPlayer;

m_flNextPrimaryAttack = m_flNextPrimaryAttack + GetFireRate();

// Fire the bullets, and force the first shot to be perfectly accurate
pPlayer->FireBullets(info);

Expand Down
13 changes: 0 additions & 13 deletions mp/src/game/shared/neo/weapons/weapon_aa13.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,28 +23,15 @@ class CWeaponAA13 : public CNEOBaseCombatWeapon

CWeaponAA13(void);

void UpdatePenaltyTime(void);

virtual void ItemPostFrame(void) OVERRIDE;
virtual void ItemPreFrame(void) OVERRIDE;
virtual void ItemBusyFrame(void) OVERRIDE;
virtual void PrimaryAttack(void) OVERRIDE;
virtual void SecondaryAttack(void) OVERRIDE { if (!ShootingIsPrevented()) { BaseClass::SecondaryAttack(); } }
virtual void AddViewKick(void) OVERRIDE;
void DryFire(void);

virtual NEO_WEP_BITS_UNDERLYING_TYPE GetNeoWepBits(void) const OVERRIDE { return NEO_WEP_AA13; }
virtual int GetNeoWepXPCost(const int neoClass) const OVERRIDE { return 20; }

virtual float GetSpeedScale(void) const OVERRIDE { return 145.0 / 170.0; }

Activity GetPrimaryAttackActivity(void) OVERRIDE;

virtual const Vector& GetBulletSpread(void) OVERRIDE { static const Vector cone = VECTOR_CONE_7DEGREES; return cone; };

protected:
virtual float GetAccuracyPenalty() const OVERRIDE { return 0.2f; }
virtual float GetMaxAccuracyPenalty() const OVERRIDE { return 1.5f; }
virtual float GetFastestDryRefireTime() const OVERRIDE { return 0.2f; }

private:
Expand Down
106 changes: 0 additions & 106 deletions mp/src/game/shared/neo/weapons/weapon_jitte.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,112 +30,6 @@ CWeaponJitte::CWeaponJitte()
m_nNumShotsFired = 0;
}

void CWeaponJitte::DryFire()
{
WeaponSound(EMPTY);
SendWeaponAnim(ACT_VM_DRYFIRE);

m_flNextPrimaryAttack = gpGlobals->curtime + SequenceDuration();
}

void CWeaponJitte::Spawn()
{
BaseClass::Spawn();
}

bool CWeaponJitte::Deploy(void)
{
return BaseClass::Deploy();
}

void CWeaponJitte::UpdatePenaltyTime()
{
auto owner = ToBasePlayer(GetOwner());

if (!owner)
{
return;
}

if (((owner->m_nButtons & IN_ATTACK) == false) &&
(m_flSoonestAttack < gpGlobals->curtime))
{
m_flAccuracyPenalty -= gpGlobals->frametime;
m_flAccuracyPenalty = clamp(m_flAccuracyPenalty,
0.0f, GetMaxAccuracyPenalty());
}
}

void CWeaponJitte::ItemPreFrame()
{
UpdatePenaltyTime();

BaseClass::ItemPreFrame();
}

void CWeaponJitte::ItemBusyFrame()
{
UpdatePenaltyTime();

BaseClass::ItemBusyFrame();
}

void CWeaponJitte::ItemPostFrame()
{
ProcessAnimationEvents();

BaseClass::ItemPostFrame();

if (m_bInReload)
{
return;
}

auto owner = ToBasePlayer(GetOwner());

if (!owner)
{
return;
}

if (owner->m_nButtons & IN_ATTACK)
{
if (m_flSoonestAttack < gpGlobals->curtime)
{
if (m_iClip1 <= 0)
{
DryFire();

m_flSoonestAttack = gpGlobals->curtime + GetFastestDryRefireTime();
}
else
{
m_flSoonestAttack = gpGlobals->curtime + GetFireRate();
}
}
}
}

Activity CWeaponJitte::GetPrimaryAttackActivity()
{
if (m_nNumShotsFired < 1)
{
return ACT_VM_PRIMARYATTACK;
}

if (m_nNumShotsFired < 2)
{
return ACT_VM_RECOIL1;
}

if (m_nNumShotsFired < 3)
{
return ACT_VM_RECOIL2;
}

return ACT_VM_RECOIL3;
}

void CWeaponJitte::AddViewKick()
{
auto owner = ToBasePlayer(GetOwner());
Expand Down
15 changes: 0 additions & 15 deletions mp/src/game/shared/neo/weapons/weapon_jitte.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,29 +33,14 @@ class CWeaponJitte : public CNEOBaseCombatWeapon

CWeaponJitte();

virtual void ItemPostFrame(void) OVERRIDE;
virtual void ItemPreFrame(void) OVERRIDE;
virtual void ItemBusyFrame(void) OVERRIDE;
virtual void PrimaryAttack(void) OVERRIDE { if (!ShootingIsPrevented()) { BaseClass::PrimaryAttack(); } }
virtual void SecondaryAttack(void) OVERRIDE { if (!ShootingIsPrevented()) { BaseClass::SecondaryAttack(); } }
virtual void AddViewKick(void) OVERRIDE;
void DryFire(void);

virtual void Spawn(void) OVERRIDE;
virtual bool Deploy(void) OVERRIDE;

virtual NEO_WEP_BITS_UNDERLYING_TYPE GetNeoWepBits(void) const OVERRIDE { return NEO_WEP_JITTE; }
virtual int GetNeoWepXPCost(const int neoClass) const OVERRIDE { return 0; }

virtual float GetSpeedScale(void) const OVERRIDE { return 160.0 / 170.0; }

void UpdatePenaltyTime(void);

Activity GetPrimaryAttackActivity(void) OVERRIDE;

protected:
virtual float GetAccuracyPenalty() const OVERRIDE { return 0.2f; }
virtual float GetMaxAccuracyPenalty() const OVERRIDE { return 0.5f; }
virtual float GetFastestDryRefireTime() const OVERRIDE { return 0.2f; }

private:
Expand Down
Loading

0 comments on commit ef1e86e

Please sign in to comment.