From: Mario Date: Fri, 12 Jul 2013 00:36:55 +0000 (+1000) Subject: Move footsteps & norecoil out of the mutator system X-Git-Tag: xonotic-v0.8.0~366^2~7 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=d61ceb72d685a54d20e7b8f612096cdb382361a3;p=xonotic%2Fxonotic-data.pk3dir.git Move footsteps & norecoil out of the mutator system --- diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index 63e31030e..3d640de5d 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -930,6 +930,7 @@ float autocvar_g_nix_with_laser; 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; diff --git a/qcsrc/server/cl_physics.qc b/qcsrc/server/cl_physics.qc index 329e7b56f..a7051ff14 100644 --- a/qcsrc/server/cl_physics.qc +++ b/qcsrc/server/cl_physics.qc @@ -852,6 +852,29 @@ void SV_PlayerPhysics() self.angles_z = 0; } + if(self.flags & FL_ONGROUND) + if(IS_PLAYER(self)) // no fall sounds for observers thank you very much + if(self.wasFlying) + { + self.wasFlying = 0; + + if(self.waterlevel < WATERLEVEL_SWIMMING) + if(time >= self.ladder_time) + if not(self.hook) + { + self.nextstep = time + 0.3 + random() * 0.1; + trace_dphitq3surfaceflags = 0; + tracebox(self.origin, self.mins, self.maxs, self.origin - '0 0 1', MOVE_NOMONSTERS, self); + if not(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOSTEPS) + { + if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_METALSTEPS) + GlobalSound(globalsound_metalfall, CH_PLAYER, VOICETYPE_PLAYERSOUND); + else + GlobalSound(globalsound_fall, CH_PLAYER, VOICETYPE_PLAYERSOUND); + } + } + } + if(IsFlying(self)) self.wasFlying = 1; diff --git a/qcsrc/server/cl_weaponsystem.qc b/qcsrc/server/cl_weaponsystem.qc index 22404828d..81a4f5a7e 100644 --- a/qcsrc/server/cl_weaponsystem.qc +++ b/qcsrc/server/cl_weaponsystem.qc @@ -233,7 +233,8 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, vector s_forward, vector m ent.dphitcontentsmask = oldsolid; // restore solid type (generally SOLID_SLIDEBOX) - ent.punchangle_x = recoil * -1; + if (!autocvar_g_norecoil) + ent.punchangle_x = recoil * -1; if (snd != "") { diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index 47e4ebe83..74d4345b8 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -16,7 +16,7 @@ noref float require_spawnfunc_prefix; // if this float exists, only functions wi // Globals -float g_cloaked, g_grappling_hook, g_minstagib; +float g_cloaked, g_footsteps, g_grappling_hook, g_minstagib; float g_warmup_limit; float g_warmup_allguns; float g_warmup_allow_timeout; @@ -226,6 +226,9 @@ float alreadychangedlevel; .float in_swamp; // bool .entity swampslug; // Uses this to release from swamp ("untouch" fix) +// footstep interval +.float nextstep; + float blockSpectators; //if set, new or existing spectators or observers will be removed unless they become a player within g_maxplayers_spectator_blocktime seconds .float spectatortime; //point in time since the client is spectating or observing void checkSpectatorBlock(); diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index 85bab3c55..19961d8ae 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -702,6 +702,10 @@ void spawnfunc_worldspawn (void) 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"); diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index 7c4c33938..018e4a3cb 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -919,13 +919,11 @@ void readlevelcvars(void) 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_multijump", mutator_multijump, 1); - CHECK_MUTATOR_ADD("g_footsteps", mutator_footsteps, 1); CHECK_MUTATOR_ADD("g_melee_only", mutator_melee_only, !cvar("g_minstagib")); CHECK_MUTATOR_ADD("g_nades", mutator_nades, 1); CHECK_MUTATOR_ADD("g_sandbox", sandbox, 1); - CHECK_MUTATOR_ADD("g_riflearena", mutator_riflearena, !cvar("g_minstagib")); + CHECK_MUTATOR_ADD("g_riflearena", mutator_riflearena, !cvar("g_minstagib")); CHECK_MUTATOR_ADD("g_campcheck", mutator_campcheck, 1); #undef CHECK_MUTATOR_ADD @@ -956,6 +954,7 @@ void readlevelcvars(void) g_cloaked = cvar("g_cloaked"); if(g_cts) g_cloaked = 1; // always enable cloak in CTS + g_footsteps = cvar("g_footsteps"); g_grappling_hook = cvar("g_grappling_hook"); g_jetpack = cvar("g_jetpack"); sv_maxidle = cvar("sv_maxidle"); @@ -1336,6 +1335,12 @@ void precache() precache_playermodel(s); } + if (g_footsteps) + { + PrecacheGlobalSound((globalsound_step = "misc/footstep0 6")); + PrecacheGlobalSound((globalsound_metalstep = "misc/metalfootstep0 6")); + } + // gore and miscellaneous sounds //precache_sound ("misc/h2ohit.wav"); precache_model ("models/hook.md3"); diff --git a/qcsrc/server/mutators/mutator_footsteps.qc b/qcsrc/server/mutators/mutator_footsteps.qc deleted file mode 100644 index 1538c3f60..000000000 --- a/qcsrc/server/mutators/mutator_footsteps.qc +++ /dev/null @@ -1,87 +0,0 @@ -// footstep interval -.float nextstep; - -MUTATOR_HOOKFUNCTION(footsteps_PlayerPhysics) -{ - if(self.flags & FL_ONGROUND) - if(IS_PLAYER(self)) // no fall sounds for observers thank you very much - if(self.wasFlying) - { - self.wasFlying = 0; - - if(self.waterlevel < WATERLEVEL_SWIMMING) - if(time >= self.ladder_time) - if not(self.hook) - { - self.nextstep = time + 0.3 + random() * 0.1; - trace_dphitq3surfaceflags = 0; - tracebox(self.origin, self.mins, self.maxs, self.origin - '0 0 1', MOVE_NOMONSTERS, self); - if not(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOSTEPS) - { - if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_METALSTEPS) - GlobalSound(globalsound_metalfall, CH_PLAYER, VOICETYPE_PLAYERSOUND); - else - GlobalSound(globalsound_fall, CH_PLAYER, VOICETYPE_PLAYERSOUND); - } - } - } - - return FALSE; -} - -MUTATOR_HOOKFUNCTION(footsteps_StartFrame) -{ - entity oldself = self; - - if(gameover) - return FALSE; - - for(self = world; (self = findfloat(self, damagedbycontents, TRUE)); ) - { - float velocity_len = vlen(self.velocity); - // play stupid sounds - if (self.flags & FL_ONGROUND) - if (velocity_len > autocvar_sv_maxspeed * 0.6) - if (!self.deadflag) - if (time < self.lastground + 0.2) - { - if((time > self.nextstep) || (time < (self.nextstep - 10.0))) - { - self.nextstep = time + 0.3 + random() * 0.1; - trace_dphitq3surfaceflags = 0; - tracebox(self.origin, self.mins, self.maxs, self.origin - '0 0 1', MOVE_NOMONSTERS, self); - if not(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOSTEPS) - { - if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_METALSTEPS) - GlobalSound(globalsound_metalstep, CH_PLAYER, VOICETYPE_PLAYERSOUND); - else - GlobalSound(globalsound_step, CH_PLAYER, VOICETYPE_PLAYERSOUND); - } - } - } - } - self = oldself; - - return FALSE; -} - -MUTATOR_HOOKFUNCTION(footsteps_BuildMutatorsString) -{ - ret_string = strcat(ret_string, ":Footsteps"); - return FALSE; -} - -MUTATOR_DEFINITION(mutator_footsteps) -{ - MUTATOR_HOOK(PlayerPhysics, footsteps_PlayerPhysics, CBC_ORDER_ANY); - MUTATOR_HOOK(SV_StartFrame, footsteps_StartFrame, CBC_ORDER_ANY); - MUTATOR_HOOK(BuildMutatorsString, footsteps_BuildMutatorsString, CBC_ORDER_ANY); - - MUTATOR_ONADD - { - PrecacheGlobalSound((globalsound_step = "misc/footstep0 6")); - PrecacheGlobalSound((globalsound_metalstep = "misc/metalfootstep0 6")); - } - - return FALSE; -} diff --git a/qcsrc/server/mutators/mutator_norecoil.qc b/qcsrc/server/mutators/mutator_norecoil.qc deleted file mode 100644 index e2ce2688e..000000000 --- a/qcsrc/server/mutators/mutator_norecoil.qc +++ /dev/null @@ -1,21 +0,0 @@ -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, norecoil_BuildMutatorsString, CBC_ORDER_ANY); - - return FALSE; -} diff --git a/qcsrc/server/mutators/mutators.qh b/qcsrc/server/mutators/mutators.qh index 84dad48ca..6af356658 100644 --- a/qcsrc/server/mutators/mutators.qh +++ b/qcsrc/server/mutators/mutators.qh @@ -25,9 +25,7 @@ MUTATOR_DECLARATION(mutator_pinata); MUTATOR_DECLARATION(mutator_midair); MUTATOR_DECLARATION(mutator_bloodloss); MUTATOR_DECLARATION(mutator_random_gravity); -MUTATOR_DECLARATION(mutator_norecoil); MUTATOR_DECLARATION(mutator_multijump); -MUTATOR_DECLARATION(mutator_footsteps); MUTATOR_DECLARATION(mutator_melee_only); MUTATOR_DECLARATION(mutator_nades); MUTATOR_DECLARATION(mutator_riflearena); diff --git a/qcsrc/server/progs.src b/qcsrc/server/progs.src index 6ee5e68ca..839d1dd68 100644 --- a/qcsrc/server/progs.src +++ b/qcsrc/server/progs.src @@ -254,9 +254,7 @@ mutators/mutator_pinata.qc mutators/mutator_midair.qc mutators/mutator_bloodloss.qc mutators/mutator_random_gravity.qc -mutators/mutator_norecoil.qc mutators/mutator_multijump.qc -mutators/mutator_footsteps.qc mutators/mutator_melee_only.qc mutators/mutator_nades.qc mutators/mutator_riflearena.qc diff --git a/qcsrc/server/sv_main.qc b/qcsrc/server/sv_main.qc index 424b124f5..a9b2443b7 100644 --- a/qcsrc/server/sv_main.qc +++ b/qcsrc/server/sv_main.qc @@ -106,6 +106,34 @@ void CreatureFrame (void) if(autocvar_g_maxspeed > 0 && velocity_len > autocvar_g_maxspeed) Damage (self, world, world, 100000, DEATH_SHOOTING_STAR, self.origin, '0 0 0'); + // play stupid sounds + if (g_footsteps) + if (!gameover) + if (self.flags & FL_ONGROUND) + if (velocity_len > autocvar_sv_maxspeed * 0.6) + if (!self.deadflag) + if (time < self.lastground + 0.2) + { + if((time > self.nextstep) || (time < (self.nextstep - 10.0))) + { + self.nextstep = time + 0.3 + random() * 0.1; + trace_dphitq3surfaceflags = 0; + tracebox(self.origin, self.mins, self.maxs, self.origin - '0 0 1', MOVE_NOMONSTERS, self); + /* + if(trace_fraction == 1) + dprint("nohit\n"); + else + dprint(ftos(trace_dphitq3surfaceflags), "\n"); + */ + if not(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOSTEPS) + { + if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_METALSTEPS) + GlobalSound(globalsound_metalstep, CH_PLAYER, VOICETYPE_PLAYERSOUND); + else + GlobalSound(globalsound_step, CH_PLAYER, VOICETYPE_PLAYERSOUND); + } + } + } } self.oldvelocity = self.velocity; diff --git a/qcsrc/server/w_hlac.qc b/qcsrc/server/w_hlac.qc index ec2d6726f..618a21ffe 100644 --- a/qcsrc/server/w_hlac.qc +++ b/qcsrc/server/w_hlac.qc @@ -41,9 +41,11 @@ void W_HLAC_Attack (void) 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); - - self.punchangle_x = random () - 0.5; - self.punchangle_y = random () - 0.5; + if (!autocvar_g_norecoil) + { + self.punchangle_x = random () - 0.5; + self.punchangle_y = random () - 0.5; + } missile = spawn (); missile.owner = missile.realowner = self; @@ -126,9 +128,12 @@ void W_HLAC_Attack2 (void) for(i=autocvar_g_balance_hlac_secondary_shots;i>0;--i) W_HLAC_Attack2f(); - - self.punchangle_x = random () - 0.5; - self.punchangle_y = random () - 0.5; + + if (!autocvar_g_norecoil) + { + self.punchangle_x = random () - 0.5; + self.punchangle_y = random () - 0.5; + } } // weapon frames diff --git a/qcsrc/server/w_uzi.qc b/qcsrc/server/w_uzi.qc index a1fa8a99c..38793a96f 100644 --- a/qcsrc/server/w_uzi.qc +++ b/qcsrc/server/w_uzi.qc @@ -52,9 +52,11 @@ void UziFlash() 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)); - - self.punchangle_x = random () - 0.5; - self.punchangle_y = random () - 0.5; + if (!autocvar_g_norecoil) + { + 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(); @@ -127,9 +129,11 @@ void uzi_mode1_fire_auto() 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); - - self.punchangle_x = random () - 0.5; - self.punchangle_y = random () - 0.5; + if (!autocvar_g_norecoil) + { + 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); @@ -152,9 +156,11 @@ void uzi_mode1_fire_auto() 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); - - self.punchangle_x = random () - 0.5; - self.punchangle_y = random () - 0.5; + if (!autocvar_g_norecoil) + { + 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();