Tweaked SMG values(+acc), added cvars guns_recoil_strength, guns_random_recoil_direction, guns_movement_inaccuracy, guns_firing_inaccuracy

This commit is contained in:
mikota 2023-07-05 07:52:55 +02:00
parent 1c45c48d05
commit fe57af3876
5 changed files with 33 additions and 19 deletions

View File

@ -150,7 +150,7 @@ w_deagle_primary(player pl)
return;
float accuracy = Cstrike_CalculateAccuracy(pl, 30,2.2)+0.005;
float accuracy = Cstrike_CalculateAccuracy(pl, 25,2.2)+0.005;
int dmg;
pl.deagle_mag--;
@ -186,7 +186,7 @@ w_deagle_primary(player pl)
Sound_Play(pl, CHAN_WEAPON, "weapon_deagle.fire");
#endif
Cstrike_ShotMultiplierAdd(pl, 30, .3);
Cstrike_ShotMultiplierAdd(pl, 20, .25);
pl.gflags |= GF_SEMI_TOGGLED;
pl.w_attack_next = 0.2f;
pl.w_idle_next = pl.w_attack_next;

View File

@ -118,7 +118,7 @@ w_mac10_primary(player pl)
}
float accuracy = Cstrike_CalculateAccuracy(pl, 80,0.9)+0.011;
float accuracy = Cstrike_CalculateAccuracy(pl, 80,0.7)+0.009f;
pl.mac10_mag--;
int r = (float)input_sequence % 3;
@ -146,9 +146,9 @@ w_mac10_primary(player pl)
dmg = Skill_GetValue("plr_mac10_dmg", 29);
TraceAttack_SetRangeModifier(1.25); /* 9, but not 10 */
TraceAttack_SetPenetrationPower(1);
g_CstrikeBulletRecoil.ApplyPre(pl,1.2);
g_CstrikeBulletRecoil.ApplyPre(pl,1.125);
TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_MAC10, "Impact.BigShot");
g_CstrikeBulletRecoil.ApplyPost(pl,1.2);
g_CstrikeBulletRecoil.ApplyPost(pl,1.125);
Sound_Play(pl, CHAN_WEAPON, "weapon_mac10.fire");
#endif

View File

@ -116,7 +116,7 @@ w_mp5_primary(player pl)
return;
float accuracy = Cstrike_CalculateAccuracy(pl,100,1)+0.0065f;
float accuracy = Cstrike_CalculateAccuracy(pl,100,1)+0.004f;
pl.mp5_mag--;
int r = (float)input_sequence % 3;

View File

@ -116,7 +116,7 @@ w_tmp_primary(player pl)
return;
float accuracy = Cstrike_CalculateAccuracy(pl, 40)+0.0085;
float accuracy = Cstrike_CalculateAccuracy(pl, 30,0.8)+0.0035;
pl.tmp_mag--;
int r = (float)input_sequence % 3;
@ -150,7 +150,7 @@ w_tmp_primary(player pl)
Sound_Play(pl, CHAN_WEAPON, "weapon_tmp.fire");
#endif
Cstrike_ShotMultiplierAdd(pl, 0.7, 1.25);
Cstrike_ShotMultiplierAdd(pl, 0.8, 1.35);
pl.w_attack_next = 0.07f;
pl.w_idle_next = pl.w_attack_next;
}

View File

@ -28,6 +28,11 @@
* to other weapons.
*/
var float autocvar_guns_recoil_strength = 1.0f;
var bool autocvar_guns_random_recoil_direction = TRUE;
var float autocvar_guns_movement_inaccuracy = 1.0f;
var float autocvar_guns_firing_inaccuracy = 1.0f;
weapontype_t
csweapon_ranged_type(player pl)
{
@ -63,16 +68,20 @@ Cstrike_ShotMultiplierAdd(player pl, int shots, float strength)
if (pl.cs_shotmultiplier < 1.6) {
pl.cs_prev_hor_rec = 0;
if (pseudorandom() > 0.5) {
pl.cs_hor_rec_sign = 1;
} else {
pl.cs_hor_rec_sign = 1;
if (autocvar_guns_random_recoil_direction && pseudorandom() >= 0.5) {
pl.cs_hor_rec_sign = -1;
}
}
if (pseudorandom() > 0.83) {
pl.cs_hor_rec_sign = -pl.cs_hor_rec_sign;
if (autocvar_guns_random_recoil_direction == 1) {
if (pseudorandom() > 0.83) {
pl.cs_hor_rec_sign = -pl.cs_hor_rec_sign;
}
} else {
if ( pl.cs_shotmultiplier > 9) {
pl.cs_hor_rec_sign = -1;
}
}
/* more than 12 is enough, you can barely hit the barn */
float new_shotmultiplier
= pl.cs_shotmultiplier
+ 1.5
@ -85,14 +94,17 @@ Cstrike_ShotMultiplierAdd(player pl, int shots, float strength)
float movement_inaccuracy = bound(0.92,Cstrike_CalculateMovementInaccuracy(pl),1.25);
pl.punchangle[0] = -(pl.cs_shotmultiplier)*0.3*movement_inaccuracy*strength+0.5;
pl.punchangle[0] *= autocvar_guns_recoil_strength;
float hor_recoil
= pl.cs_shotmultiplier*0.005
+ (pseudorandom() - 0.35)*0.75;
+ (pseudorandom() - 0.35)*0.75*autocvar_guns_firing_inaccuracy;
hor_recoil *= movement_inaccuracy * strength * autocvar_guns_recoil_strength;
if (pl.cs_hor_rec_sign > 0) {
pl.cs_prev_hor_rec += hor_recoil*movement_inaccuracy*strength;
pl.cs_prev_hor_rec += hor_recoil;
} else if (pl.cs_hor_rec_sign < 0) {
pl.cs_prev_hor_rec -= hor_recoil*movement_inaccuracy*strength;
pl.cs_prev_hor_rec -= hor_recoil;
}
pl.punchangle[1] = pl.cs_prev_hor_rec;
r = (float)input_sequence % 5;
@ -133,11 +145,11 @@ Cstrike_CalculateAccuracy(player pl, float divisor, float movement_penalty=1)
/* snipers shoot way less accurate overall. */
return (pl.viewzoom < 1.0f) ? (0.0f) : (0.05 * m);
} else {
inacc = pl.cs_shotmultiplier*pl.cs_shotmultiplier;
inacc = pl.cs_shotmultiplier*pl.cs_shotmultiplier * autocvar_guns_firing_inaccuracy;
inacc = inacc / divisor / 1000;
inacc = inacc * m;
if (m > 1) {
inacc += m * 0.0025*movement_penalty;
inacc += m * 0.0025*movement_penalty * autocvar_guns_movement_inaccuracy;
} else {
inacc += m * 0.0025;
}
@ -151,9 +163,11 @@ class CstrikeBulletRecoil {
public:
void ApplyPre(player pl, float strength) {
m_flRandomSpread = (pseudorandom() - 0.5) * 2.0;
strength *= autocvar_guns_recoil_strength;
pl.v_angle += strength*pl.punchangle*(2 + pl.cs_shotmultiplier/100*(m_flRandomSpread-0.5));
};
void ApplyPost(player pl, float strength) {
strength *= autocvar_guns_recoil_strength;
pl.v_angle -= strength*pl.punchangle*(2 + pl.cs_shotmultiplier/100*(m_flRandomSpread-0.5));
};
};