float autocvar_g_nix_with_powerups;
float autocvar_g_nodepthtestitems;
float autocvar_g_nodepthtestplayers;
-float autocvar_g_norecoil;
float autocvar_g_onslaught_cp_buildhealth;
float autocvar_g_onslaught_cp_buildtime;
float autocvar_g_onslaught_cp_health;
ent.dphitcontentsmask = oldsolid; // restore solid type (generally SOLID_SLIDEBOX)
- if (!g_norecoil)
- ent.punchangle_x = recoil * -1;
+ ent.punchangle_x = recoil * -1;
if (snd != "")
{
// Globals
-float g_cloaked, g_footsteps, g_jump_grunt, g_grappling_hook, g_minstagib, g_norecoil;
+float g_cloaked, g_footsteps, g_jump_grunt, g_grappling_hook, g_minstagib;
float g_warmup_limit;
float g_warmup_allguns;
float g_warmup_allow_timeout;
if(autocvar_g_weaponarena != "0")
s = strcat(s, ":", autocvar_g_weaponarena, " arena");
- // TODO to mutator system
- if(autocvar_g_norecoil)
- s = strcat(s, ":norecoil");
-
// TODO to mutator system
if(autocvar_g_powerups == 0)
s = strcat(s, ":no_powerups");
CHECK_MUTATOR_ADD("g_midair", mutator_midair, 1);
CHECK_MUTATOR_ADD("g_bloodloss", mutator_bloodloss, !cvar("g_minstagib"));
CHECK_MUTATOR_ADD("g_random_gravity", mutator_random_gravity, 1);
+ CHECK_MUTATOR_ADD("g_norecoil", mutator_norecoil, 1);
CHECK_MUTATOR_ADD("g_sandbox", sandbox, 1);
#undef CHECK_MUTATOR_ADD
g_footsteps = cvar("g_footsteps");
g_grappling_hook = cvar("g_grappling_hook");
g_jetpack = cvar("g_jetpack");
- g_norecoil = cvar("g_norecoil");
sv_maxidle = cvar("sv_maxidle");
sv_maxidle_spectatorsareidle = cvar("sv_maxidle_spectatorsareidle");
sv_autotaunt = cvar("sv_autotaunt");
--- /dev/null
+MUTATOR_HOOKFUNCTION(norecoil_PlayerThink)
+{
+ if(IS_PLAYER(self))
+ self.punchangle = '0 0 0';
+
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(norecoil_BuildMutatorsString)
+{
+ ret_string = strcat(ret_string, ":norecoil");
+ return FALSE;
+}
+
+MUTATOR_DEFINITION(mutator_norecoil)
+{
+ MUTATOR_HOOK(PlayerPreThink, norecoil_PlayerThink, CBC_ORDER_ANY);
+ MUTATOR_HOOK(BuildMutatorsString, midair_BuildMutatorsString, CBC_ORDER_ANY);
+
+ return FALSE;
+}
MUTATOR_DECLARATION(mutator_midair);
MUTATOR_DECLARATION(mutator_bloodloss);
MUTATOR_DECLARATION(mutator_random_gravity);
+MUTATOR_DECLARATION(mutator_norecoil);
MUTATOR_DECLARATION(sandbox);
mutators/mutator_midair.qc
mutators/mutator_bloodloss.qc
mutators/mutator_random_gravity.qc
+mutators/mutator_norecoil.qc
../warpzonelib/anglestransform.qc
../warpzonelib/mathlib.qc
W_SetupShot (self, FALSE, 3, "weapons/lasergun_fire.wav", CH_WEAPON_A, autocvar_g_balance_hlac_primary_damage);
pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
- if (!g_norecoil)
- {
- self.punchangle_x = random () - 0.5;
- self.punchangle_y = random () - 0.5;
- }
+
+ self.punchangle_x = random () - 0.5;
+ self.punchangle_y = random () - 0.5;
missile = spawn ();
missile.owner = missile.realowner = self;
for(i=autocvar_g_balance_hlac_secondary_shots;i>0;--i)
W_HLAC_Attack2f();
-
- if (!g_norecoil)
- {
- self.punchangle_x = random () - 0.5;
- self.punchangle_y = random () - 0.5;
- }
+
+ self.punchangle_x = random () - 0.5;
+ self.punchangle_y = random () - 0.5;
}
// weapon frames
void W_UZI_Attack (float deathtype)
{
W_SetupShot (self, autocvar_g_antilag_bullets && autocvar_g_balance_uzi_speed >= autocvar_g_antilag_bullets, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, ((self.misc_bulletcounter == 1) ? autocvar_g_balance_uzi_first_damage : autocvar_g_balance_uzi_sustained_damage));
- if (!g_norecoil)
- {
- self.punchangle_x = random () - 0.5;
- self.punchangle_y = random () - 0.5;
- }
+
+ self.punchangle_x = random () - 0.5;
+ self.punchangle_y = random () - 0.5;
// this attack_finished just enforces a cooldown at the end of a burst
ATTACK_FINISHED(self) = time + autocvar_g_balance_uzi_first_refire * W_WeaponRateFactor();
W_DecreaseAmmo(ammo_nails, autocvar_g_balance_uzi_sustained_ammo, autocvar_g_balance_uzi_reload_ammo);
W_SetupShot (self, autocvar_g_antilag_bullets && autocvar_g_balance_uzi_speed >= autocvar_g_antilag_bullets, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, autocvar_g_balance_uzi_sustained_damage);
- if (!g_norecoil)
- {
- self.punchangle_x = random () - 0.5;
- self.punchangle_y = random () - 0.5;
- }
+
+ self.punchangle_x = random () - 0.5;
+ self.punchangle_y = random () - 0.5;
uzi_spread = bound(autocvar_g_balance_uzi_spread_min, autocvar_g_balance_uzi_spread_min + (autocvar_g_balance_uzi_spread_add * self.misc_bulletcounter), autocvar_g_balance_uzi_spread_max);
fireBallisticBullet(w_shotorg, w_shotdir, uzi_spread, autocvar_g_balance_uzi_speed, 5, autocvar_g_balance_uzi_sustained_damage, autocvar_g_balance_uzi_sustained_force, WEP_UZI, 0, 1, autocvar_g_balance_uzi_bulletconstant);
void uzi_mode1_fire_burst()
{
W_SetupShot (self, autocvar_g_antilag_bullets && autocvar_g_balance_uzi_speed >= autocvar_g_antilag_bullets, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, autocvar_g_balance_uzi_sustained_damage);
- if (!g_norecoil)
- {
- self.punchangle_x = random () - 0.5;
- self.punchangle_y = random () - 0.5;
- }
+
+ self.punchangle_x = random () - 0.5;
+ self.punchangle_y = random () - 0.5;
fireBallisticBullet(w_shotorg, w_shotdir, autocvar_g_balance_uzi_burst_spread, autocvar_g_balance_uzi_speed, 5, autocvar_g_balance_uzi_sustained_damage, autocvar_g_balance_uzi_sustained_force, WEP_UZI, 0, 1, autocvar_g_balance_uzi_bulletconstant);
endFireBallisticBullet();