From 174672a10e57f3ae0eeb25b2fc15e06e26c93f8a Mon Sep 17 00:00:00 2001 From: lordhavoc Date: Mon, 30 May 2005 08:51:07 +0000 Subject: [PATCH] implemented rocket and electro fly sounds cleaned up nearly all sound() calls to use more appropriate channels renamed sound/weapons/missile_fly.wav to sound/weapons/rocket_fly.wav and sound/weapons/plasmahit.wav to sound/weapons/electro_impact.wav inlined ImpactEffect code (eliminating the unnecessary function) changed bullet richochet sounds to use PointSound rather than playing them at the player location sorted and cleaned worldspawn precaches implemented experimental g_antilag cvar (makes a lagged player autoaim at the enemy they clicked on, not very useful with slow weapons) rewrote SV_PlayerPhysics (now more sane) now does a stuffcmd to set cl_movement cvars on a client when they join added missing file comments to bot waypoint editor code and disabled precaches of these missing files to get rid of warnings git-svn-id: svn://svn.icculus.org/nexuiz/trunk@425 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- qcsrc/default.cfg | 22 ++-- qcsrc/gamec/bot.c | 7 +- qcsrc/gamec/bot_ai.c | 10 -- qcsrc/gamec/bot_ed.c | 4 +- qcsrc/gamec/bot_way.c | 10 +- qcsrc/gamec/cl_client.c | 17 ++- qcsrc/gamec/cl_physics.c | 181 +++++++++++++++----------- qcsrc/gamec/cl_player.c | 6 +- qcsrc/gamec/cl_weapons.c | 21 +++ qcsrc/gamec/g_casings.c | 2 +- qcsrc/gamec/g_subs.c | 42 ------ qcsrc/gamec/g_world.c | 222 +++++++++++++++----------------- qcsrc/gamec/w_common.c | 6 +- qcsrc/gamec/w_electro.c | 5 +- qcsrc/gamec/w_grenadelauncher.c | 8 +- qcsrc/gamec/w_hagar.c | 12 +- qcsrc/gamec/w_laser.c | 2 +- qcsrc/gamec/w_rocketlauncher.c | 7 +- 18 files changed, 304 insertions(+), 280 deletions(-) diff --git a/qcsrc/default.cfg b/qcsrc/default.cfg index 78813fd34..10a7c528f 100755 --- a/qcsrc/default.cfg +++ b/qcsrc/default.cfg @@ -32,17 +32,21 @@ cl_forwardspeed 480 cl_backspeed 480 cl_sidespeed 480 cl_upspeed 400 -sv_maxspeed 400 -cl_movement_maxspeed 400 -sv_accelerate 5.5 cl_movement_accelerate 5.5 -sv_friction 5 +cl_movement_edgefriction 0 cl_movement_friction 5 -sv_stepheight 34 +cl_movement_jumpvelocity 300 +cl_movement_maxairspeed 400 +cl_movement_maxspeed 400 cl_movement_stepheight 34 -edgefriction 0 -cl_movement_edgefriction 0 cl_stairsmoothspeed 200 +edgefriction 0 +set g_balance_jumpheight 300 +set sv_maxairspeed 400 +sv_accelerate 5.5 +sv_friction 5 +sv_maxspeed 400 +sv_stepheight 34 pausable 0 set g_instagib 0 set g_rocketarena 0 @@ -60,10 +64,6 @@ set g_balance_health_regen 0.1 set g_balance_health_rot 0.1 set g_balance_health_stable 100 set g_balance_health_start 150 -set g_balance_jumpheight 300 -cl_movement_jumpvelocity 300 -set g_balance_maxairspeed 50 -cl_movement_maxairspeed 50 set g_balance_selfdamagepercent 0.6 set g_balance_weaponswitchdelay 0.3 // powerup balance settings diff --git a/qcsrc/gamec/bot.c b/qcsrc/gamec/bot.c index b1fbefbb5..36dcbdff7 100644 --- a/qcsrc/gamec/bot.c +++ b/qcsrc/gamec/bot.c @@ -194,7 +194,7 @@ float bot_count, b_options; float waypoint_mode, dump_mode; float waypoints, direct_route; float sv_friction, sv_gravity; -float sv_accelerate, sv_maxspeed, sv_stopspeed; +float sv_accelerate, sv_maxairspeed, sv_maxspeed, sv_stopspeed; entity fixer; entity route_table; entity b_temp1, b_temp2, b_temp3; @@ -749,8 +749,8 @@ void() BotInit = numents = numents + 1; ent = nextent(ent); } - precache_model("progs/s_light.spr"); - precache_model("progs/s_bubble.spr"); + //precache_model("progs/s_light.spr"); // file missing from nexuiz + //precache_model("progs/s_bubble.spr"); // file missing from nexuiz // the bots return! b_options = cvar("saved1"); if (coop || (b_options & OPT_SAVEBOTS)) @@ -1169,6 +1169,7 @@ void() BotFrame = local float num; // for the sake of speed + sv_maxairspeed = cvar("sv_maxairspeed"); sv_maxspeed = cvar("sv_maxspeed"); sv_gravity = cvar("sv_gravity"); sv_friction = cvar("sv_friction"); diff --git a/qcsrc/gamec/bot_ai.c b/qcsrc/gamec/bot_ai.c index 3b0c6b7e4..74e6cf010 100644 --- a/qcsrc/gamec/bot_ai.c +++ b/qcsrc/gamec/bot_ai.c @@ -658,16 +658,6 @@ float(entity thing) priority_for_thing = if (self.armorvalue < 100) thisp = thisp + 25; } - else if (thing.model == "progs/armor.mdl") - { - if (self.armorvalue < 200) - { - if (thing.skin == 2) - thisp = 60; - else if (self.armorvalue < 100) - thisp = thisp + 25; - } - } else if (thing.classname == "weapon_shotgun") { if (!(self.items & IT_SHOTGUN)) diff --git a/qcsrc/gamec/bot_ed.c b/qcsrc/gamec/bot_ed.c index fc5288aa7..904b51674 100644 --- a/qcsrc/gamec/bot_ed.c +++ b/qcsrc/gamec/bot_ed.c @@ -1019,11 +1019,11 @@ void() bot_way_edit = t = way_head; while (t) { - setmodel(t, "progs/s_bubble.spr"); // show the waypoints + setmodel(t, "progs/s_bubble.spr"); // show the waypoints // file missing from nexuiz t = t._next; } if (self.current_way) - setmodel(self.current_way, "progs/s_light.spr"); + setmodel(self.current_way, "progs/s_light.spr"); // file missing from nexuiz } else { diff --git a/qcsrc/gamec/bot_way.c b/qcsrc/gamec/bot_way.c index ada814893..3e3f16038 100644 --- a/qcsrc/gamec/bot_way.c +++ b/qcsrc/gamec/bot_way.c @@ -276,7 +276,7 @@ entity(vector org) make_waypoint = point.count = waypoints; if (waypoint_mode > WM_LOADED) // editor modes - setmodel(point, "progs/s_bubble.spr"); + setmodel(point, "progs/s_bubble.spr"); // file missing from nexuiz return point; }; @@ -422,9 +422,9 @@ void() DynamicWaypoint = } if (editor) { - setmodel(t, "progs/s_light.spr"); + setmodel(t, "progs/s_light.spr"); // file missing from nexuiz if (self.current_way) - setmodel(self.current_way, "progs/s_bubble.spr"); + setmodel(self.current_way, "progs/s_bubble.spr"); // file missing from nexuiz } } self.current_way = t; @@ -472,9 +472,9 @@ void() DynamicWaypoint = if (editor) { - setmodel(t, "progs/s_light.spr"); + setmodel(t, "progs/s_light.spr"); // file missing from nexuiz if (self.current_way) - setmodel(self.current_way, "progs/s_bubble.spr"); + setmodel(self.current_way, "progs/s_bubble.spr"); // file missing from nexuiz } self.current_way = t; self.dyn_flags = 0; diff --git a/qcsrc/gamec/cl_client.c b/qcsrc/gamec/cl_client.c index 2f50490f4..49845ba1b 100644 --- a/qcsrc/gamec/cl_client.c +++ b/qcsrc/gamec/cl_client.c @@ -89,7 +89,7 @@ void PutClientInServer (void) self.movetype = MOVETYPE_WALK; self.solid = SOLID_SLIDEBOX; self.flags = FL_CLIENT; - self.takedamage = DAMAGE_YES; + self.takedamage = DAMAGE_AIM; self.effects = 0; self.health = cvar("g_balance_health_start"); self.armorvalue = cvar("g_balance_armor_start"); @@ -122,7 +122,7 @@ void PutClientInServer (void) self.viewzoom = 0.6; - + self.playermodel = CheckPlayerModel(self.playermodel); precache_model (self.playermodel); @@ -227,9 +227,16 @@ void ClientConnect (void) ClientInRankings(); bprint ("^4",self.netname); bprint (" connected\n"); - stuffcmd(self, "exec maps/"); - stuffcmd(self, mapname); - stuffcmd(self, ".cfg\n"); + stuffcmd(self, strcat("exec maps/", mapname, ".cfg\n")); + // send prediction settings to the client + stuffcmd(self, strcat("cl_movement_maxspeed ", ftos(cvar("sv_maxspeed")), "\n")); + stuffcmd(self, strcat("cl_movement_maxairspeed ", ftos(cvar("sv_maxairspeed")), "\n")); + stuffcmd(self, strcat("cl_movement_accelerate ", ftos(cvar("sv_accelerate")), "\n")); + stuffcmd(self, strcat("cl_movement_friction ", ftos(cvar("sv_friction")), "\n")); + stuffcmd(self, strcat("cl_movement_stopspeed ", ftos(cvar("sv_stopspeed")), "\n")); + stuffcmd(self, strcat("cl_movement_jumpvelocity ", ftos(cvar("g_balance_jumpheight")), "\n")); + stuffcmd(self, strcat("cl_movement_stepheight ", ftos(cvar("sv_stepheight")), "\n")); + stuffcmd(self, strcat("cl_movement_edgefriction 0\n")); } /* diff --git a/qcsrc/gamec/cl_physics.c b/qcsrc/gamec/cl_physics.c index 91d16a33d..1d2ad194d 100644 --- a/qcsrc/gamec/cl_physics.c +++ b/qcsrc/gamec/cl_physics.c @@ -1,6 +1,12 @@ -float sv_maxspeed, sv_friction, sv_accelerate, sv_stopspeed; +float sv_accelerate; +float sv_maxairspeed; +float sv_friction; +float sv_maxspeed; +float sv_stopspeed; +float sv_gravity; .float ladder_time; .entity ladder_entity; +.float gravity; void SV_PlayerPhysics() { @@ -19,20 +25,25 @@ void SV_PlayerPhysics() self.punchangle = '0 0 0'; } + if (self.punchvector != '0 0 0') + { + f = vlen(self.punchvector) - 30 * frametime; + if (f > 0) + self.punchvector = normalize(self.punchvector) * f; + else + self.punchvector = '0 0 0'; + } + // if dead, behave differently - if (self.health <= 0) + if (self.deadflag) return; - // show 1/3 the pitch angle and all the roll angle - self.angles_x = 0; - self.angles_y = self.v_angle_y; // FIXME: rotate the models, not the entity! - self.angles_z = 0; - -/* if (!self.fixangle) + if (!self.fixangle) { - self.angles_x = (self.v_angle_x + self.punchangle_x) * -0.333; - self.angles_y = self.v_angle_y + self.punchangle_y; - }*/ + self.angles_x = 0; + self.angles_y = self.v_angle_y; + self.angles_z = 0; + } if (self.flags & FL_WATERJUMP ) { @@ -43,52 +54,66 @@ void SV_PlayerPhysics() self.flags = self.flags - (self.flags & FL_WATERJUMP); self.teleport_time = 0; } - return; } - - makevectors(self.v_angle); - - if (self.movetype == MOVETYPE_NOCLIP) + else if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY) { - // noclip - self.velocity = v_forward * self.movement_x + v_right * self.movement_y + '0 0 1' * self.movement_z; - return; + // noclipping or flying + self.velocity = self.velocity * (1 - frametime * sv_friction); + makevectors(self.v_angle); + //wishvel = v_forward * self.movement_x + v_right * self.movement_y + v_up * self.movement_z; + wishvel = v_forward * self.movement_x + v_right * self.movement_y + '0 0 1' * self.movement_z; + // acceleration + wishdir = normalize(wishvel); + wishspeed = vlen(wishvel); + if (wishspeed > sv_maxspeed) + wishspeed = sv_maxspeed; + if (time >= self.teleport_time) + { + f = wishspeed - (self.velocity * wishdir); + if (f > 0) + self.velocity = self.velocity + wishdir * min(f, sv_accelerate * frametime * wishspeed); + } } - - if (self.waterlevel >= 2) + else if (self.waterlevel >= 2) { // swimming - // friction - self.velocity = self.velocity * (1 - frametime * sv_friction); + makevectors(self.v_angle); + //wishvel = v_forward * self.movement_x + v_right * self.movement_y + v_up * self.movement_z; wishvel = v_forward * self.movement_x + v_right * self.movement_y + '0 0 1' * self.movement_z; + if (wishvel == '0 0 0') + wishvel = '0 0 -60'; // drift towards bottom + wishdir = normalize(wishvel); wishspeed = vlen(wishvel); if (wishspeed > sv_maxspeed) wishspeed = sv_maxspeed; - if (self.crouch) - wishspeed = wishspeed * 0.5; - wishspeed = wishspeed * 0.6; - // acceleration + wishspeed = wishspeed * 0.7; + + // water friction + self.velocity = self.velocity * (1 - frametime * sv_friction); + + // water acceleration f = wishspeed - (self.velocity * wishdir); if (f > 0) self.velocity = self.velocity + wishdir * min(f, sv_accelerate * frametime * wishspeed); - return; } - - if (time < self.ladder_time) + else if (time < self.ladder_time) { // on a func_ladder or swimming in func_water + self.velocity = self.velocity * (1 - frametime * sv_friction); + makevectors(self.v_angle); + //wishvel = v_forward * self.movement_x + v_right * self.movement_y + v_up * self.movement_z; wishvel = v_forward * self.movement_x + v_right * self.movement_y + '0 0 1' * self.movement_z; - wishdir = normalize(wishvel); - wishspeed = vlen(wishvel); - if (wishspeed > sv_maxspeed) - wishspeed = sv_maxspeed; - if (self.crouch) - wishspeed = wishspeed * 0.5; + if (self.gravity) + self.velocity_z = self.velocity_z + self.gravity * sv_gravity * frametime; + else + self.velocity_z = self.velocity_z + sv_gravity * frametime; if (self.ladder_entity.classname == "func_water") { - if (wishspeed > self.ladder_entity.speed) - wishspeed = self.ladder_entity.speed; + f = vlen(wishvel); + if (f > self.ladder_entity.speed) + wishvel = wishvel * (self.ladder_entity.speed / f); + self.watertype = self.ladder_entity.skin; f = self.ladder_entity.origin_z + self.ladder_entity.maxs_z; if ((self.origin_z + self.view_ofs_z) < f) @@ -103,53 +128,65 @@ void SV_PlayerPhysics() self.watertype = CONTENT_EMPTY; } } - // friction - self.velocity = self.velocity * (1 - frametime * sv_friction); // acceleration - f = wishspeed - (self.velocity * wishdir); - if (f > 0) - self.velocity = self.velocity + wishdir * min(f, sv_accelerate * frametime * wishspeed); - return; + wishdir = normalize(wishvel); + wishspeed = vlen(wishvel); + if (wishspeed > sv_maxspeed) + wishspeed = sv_maxspeed; + if (time >= self.teleport_time) + { + f = wishspeed - (self.velocity * wishdir); + if (f > 0) + self.velocity = self.velocity + wishdir * min(f, sv_accelerate * frametime * wishspeed); + } } - - // calculate wishvel/wishdir/wishspeed for normal walking - makevectors(self.v_angle_y * '0 1 0'); - // hack to not let you back into teleporter - if (time < self.teleport_time && self.movement_x < 0) - wishvel = v_right * self.movement_y; - else - wishvel = v_forward * self.movement_x + v_right * self.movement_y; - wishdir = normalize(wishvel); - wishspeed = vlen(wishvel); - if (wishspeed > sv_maxspeed) - wishspeed = sv_maxspeed; - if (self.crouch) - wishspeed = wishspeed * 0.5; - - if (self.flags & FL_ONGROUND) // walking + else if (self.flags & FL_ONGROUND) { + // walking + makevectors(self.v_angle_y * '0 1 0'); + wishvel = v_forward * self.movement_x + v_right * self.movement_y; // friction if (self.velocity_x || self.velocity_y) { v = self.velocity; v_z = 0; f = vlen(v); - - // apply friction if (f < sv_stopspeed) f = 1 - frametime * (sv_stopspeed / f) * sv_friction; else f = 1 - frametime * sv_friction; - - if (f < 0) - self.velocity = '0 0 0'; - else + if (f > 0) self.velocity = self.velocity * f; + else + self.velocity = '0 0 0'; + } + // acceleration + wishdir = normalize(wishvel); + wishspeed = vlen(wishvel); + if (wishspeed > sv_maxspeed) + wishspeed = sv_maxspeed; + if (time >= self.teleport_time) + { + f = wishspeed - (self.velocity * wishdir); + if (f > 0) + self.velocity = self.velocity + wishdir * min(f, sv_accelerate * frametime * wishspeed); } } - else if (wishspeed > cvar("g_balance_maxairspeed")) - wishspeed = cvar("g_balance_maxairspeed"); - //sv_accelerate = sv_accelerate * 0.1; - - self.velocity = self.velocity + wishdir * sv_accelerate * frametime * wishspeed; -} + else + { + // airborn + makevectors(self.v_angle_y * '0 1 0'); + wishvel = v_forward * self.movement_x + v_right * self.movement_y; + // acceleration + wishdir = normalize(wishvel); + wishspeed = vlen(wishvel); + if (wishspeed > sv_maxairspeed) + wishspeed = sv_maxairspeed; + if (time >= self.teleport_time) + { + f = wishspeed;// - (self.velocity * wishdir); + if (f > 0) + self.velocity = self.velocity + wishdir * min(f, sv_accelerate * frametime * wishspeed); + } + } +}; diff --git a/qcsrc/gamec/cl_player.c b/qcsrc/gamec/cl_player.c index 22090e691..4ad926bfe 100644 --- a/qcsrc/gamec/cl_player.c +++ b/qcsrc/gamec/cl_player.c @@ -207,11 +207,11 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht take = bound(0, damage - save, damage); if (save > 10) - sound (self, CHAN_BODY, "misc/armorimpact.wav", 1, ATTN_NORM); + sound (self, CHAN_IMPACT, "misc/armorimpact.wav", 1, ATTN_NORM); if (take > 10) - sound (self, CHAN_BODY, "misc/bodyimpact1.wav", 1, ATTN_NORM); + sound (self, CHAN_IMPACT, "misc/bodyimpact1.wav", 1, ATTN_NORM); if (take > 30) - sound (self, CHAN_BODY, "misc/bodyimpact2.wav", 1, ATTN_NORM); + sound (self, CHAN_IMPACT, "misc/bodyimpact2.wav", 1, ATTN_NORM); if (take > 50) TossGib (world, "models/gibs/chunk.mdl", hitloc, force * -0.1,1); diff --git a/qcsrc/gamec/cl_weapons.c b/qcsrc/gamec/cl_weapons.c index 0e7187a9e..b6b2c9875 100644 --- a/qcsrc/gamec/cl_weapons.c +++ b/qcsrc/gamec/cl_weapons.c @@ -87,6 +87,27 @@ void() W_WeaponFrame = if (!self.weaponentity || self.health <= 0) return; // Dead player can't use weapons and injure impulse commands + if (cvar("g_antilag")) + { + // if aiming at a player and the original trace won't hit that player + // anymore, try aiming at the player's new position + if (self.cursor_trace_ent) + { + if (self.cursor_trace_ent.takedamage) + { + traceline(self.origin + self.view_ofs, self.cursor_trace_endpos, FALSE, self); + if (trace_ent != self.cursor_trace_ent) + { + traceline(self.origin + self.view_ofs, self.cursor_trace_ent.origin + (self.cursor_trace_ent.mins + self.cursor_trace_ent.maxs) * 0.5, FALSE, self); + if (trace_ent == self.cursor_trace_ent) + self.cursor_trace_endpos = trace_endpos; + } + } + } + self.v_angle = vectoangles(self.cursor_trace_endpos - (self.origin + self.view_ofs)); + self.v_angle_x = 0 - self.v_angle_x; + } + makevectors(self.v_angle); // Change weapon diff --git a/qcsrc/gamec/g_casings.c b/qcsrc/gamec/g_casings.c index 34266d89c..74c6b5deb 100644 --- a/qcsrc/gamec/g_casings.c +++ b/qcsrc/gamec/g_casings.c @@ -3,7 +3,7 @@ void() casingtouch = if (other.solid == SOLID_BSP) if (vlen(self.velocity) >= 50) if (time >= self.attack_finished) - sound (self, CHAN_WEAPON, "weapons/tink1.wav", 0.5, ATTN_NORM); + sound (self, CHAN_IMPACT, "weapons/tink1.wav", 0.5, ATTN_NORM); self.attack_finished = time + 0.2; //self.touch = SUB_Null; // one tink is enough //self.dest = self.origin - self.groundentity.origin; diff --git a/qcsrc/gamec/g_subs.c b/qcsrc/gamec/g_subs.c index c6ace7c35..293f0d752 100644 --- a/qcsrc/gamec/g_subs.c +++ b/qcsrc/gamec/g_subs.c @@ -322,48 +322,6 @@ float crandom (void) return 2 * (random () - 0.5); } -// Violence - -/* -================== -ImpactEffect - -Plays an impact effect -================== -*/ - -void ImpactEffect (entity ent, float weapontype) -{ - vector org2; - org2 = findbetterlocation (ent.origin); - float b; - - if (weapontype == IT_ROCKET_LAUNCHER) - { - te_explosion (org2); - effect (org2, "models/sprites/rocketexplosion.spr32", 0, 20, 40); - sound (ent, CHAN_BODY, "weapons/rocket_impact.wav", 1, ATTN_NORM); - } - else if (weapontype == IT_GRENADE_LAUNCHER) - { - te_explosion (org2); - effect (org2, "models/sprites/grenadeexplosion.spr32", 0, 20, 30); - sound (ent, CHAN_BODY, "weapons/grenade_impact.wav", 1, ATTN_NORM); - } - else if (weapontype == IT_HAGAR) - { - effect (org2, "models/sprites/hagarexplosion.spr32", 0, 20, 30); - b = crandom(); - if (b<-0.7) - sound (ent, CHAN_BODY, "weapons/hagexp1.wav", 1, ATTN_NORM); - else if (b<0.4) - sound (ent, CHAN_BODY, "weapons/hagexp2.wav", 1, ATTN_NORM); - else if (b<1) - sound (ent, CHAN_BODY, "weapons/hagexp3.wav", 1, ATTN_NORM); - } -} - - /* ================== Angc used for animations diff --git a/qcsrc/gamec/g_world.c b/qcsrc/gamec/g_world.c index 05909c43f..26edcaa44 100644 --- a/qcsrc/gamec/g_world.c +++ b/qcsrc/gamec/g_world.c @@ -9,147 +9,137 @@ void worldspawn (void) game = cvar ("gamecfg"); // load game options - precache_model ("models/misc/chatbubble.spr"); - - precache_model ("models/weapons/g_shotgun.md3"); - precache_model ("models/weapons/g_uzi.md3"); - precache_model ("models/weapons/g_gl.md3"); - precache_model ("models/weapons/g_electro.md3"); - precache_model ("models/weapons/g_crylink.md3"); - precache_model ("models/weapons/g_nex.md3"); - precache_model ("models/weapons/g_hagar.md3"); - precache_model ("models/weapons/g_rl.md3"); - - precache_model ("models/weapons/v_laser.md3"); - precache_model ("models/weapons/v_shotgun.md3"); - precache_model ("models/weapons/v_uzi.md3"); - precache_model ("models/weapons/v_gl.md3"); - precache_model ("models/weapons/v_electro.md3"); - precache_model ("models/weapons/v_crylink.md3"); - precache_model ("models/weapons/v_nex.md3"); - precache_model ("models/weapons/v_hagar.md3"); - precache_model ("models/weapons/v_rl.md3"); - - precache_model ("models/sprites/plasmahitwall.spr32"); - precache_model ("models/sprites/muzzleflash.spr32"); - precache_model ("models/sprites/plasmashot.spr32"); - precache_model ("models/sprites/rocketexplosion.spr32"); - precache_model ("models/sprites/hagarexplosion.spr32"); - precache_model ("models/sprites/grenadeexplosion.spr32"); - - precache_model ("models/grenademodel.md3"); - precache_model ("models/hagarmissile.mdl"); - precache_model ("models/rocket.md3"); + //precache_model ("progs/beam.mdl"); precache_model ("models/bullet.mdl"); precache_model ("models/casing_bronze.mdl"); precache_model ("models/casing_shell.mdl"); precache_model ("models/casing_steel.mdl"); - precache_model ("models/beam.mdl"); + precache_model ("models/ebomb.mdl"); + precache_model ("models/elaser.mdl"); precache_model ("models/flash.md3"); - precache_model ("models/nexflash.md3"); + precache_model ("models/gibs/bloodyskull.md3"); + precache_model ("models/gibs/chunk.mdl"); + precache_model ("models/gibs/eye.md3"); + precache_model ("models/gibs/gib1.md3"); + precache_model ("models/gibs/gib2.md3"); + precache_model ("models/gibs/gib3.md3"); + precache_model ("models/gibs/gib4.md3"); + precache_model ("models/gibs/gib5.md3"); + precache_model ("models/gibs/gib6.md3"); + precache_model ("models/grenademodel.md3"); + precache_model ("models/hagarmissile.mdl"); + precache_model ("models/items/a_bullets.mdl"); + precache_model ("models/items/a_cells.md3"); + precache_model ("models/items/a_rockets.md3"); + precache_model ("models/items/a_shells.md3"); + precache_model ("models/items/g_a1.md3"); + precache_model ("models/items/g_a25.md3"); + precache_model ("models/items/g_h1.md3"); + precache_model ("models/items/g_h25.md3"); + precache_model ("models/items/g_h100.md3"); + precache_model ("models/items/g_invincible.md3"); + precache_model ("models/items/g_strength.md3"); precache_model ("models/laser.mdl"); - precache_model ("models/elaser.mdl"); - precache_model ("models/ebomb.mdl"); + precache_model ("models/misc/chatbubble.spr"); + precache_model ("models/nexflash.md3"); precache_model ("models/plasma.mdl"); precache_model ("models/plasmatrail.mdl"); + precache_model ("models/rocket.md3"); + precache_model ("models/sprites/grenadeexplosion.spr32"); + precache_model ("models/sprites/hagarexplosion.spr32"); + precache_model ("models/sprites/muzzleflash.spr32"); + //precache_model ("models/sprites/plasmahitwall.spr32"); + //precache_model ("models/sprites/plasmashot.spr32"); + precache_model ("models/sprites/rocketexplosion.spr32"); precache_model ("models/tracer.mdl"); precache_model ("models/uziflash.md3"); - - precache_model ("models/items/g_h1.md3"); - precache_model ("models/items/g_h25.md3"); - precache_model ("models/items/g_h100.md3"); - - precache_model ("models/items/g_a1.md3"); - precache_model ("models/items/g_a25.md3"); - - precache_model ("models/weapons/w_uzi.zym"); - precache_model ("models/weapons/w_laser.zym"); - precache_model ("models/weapons/w_shotgun.zym"); - precache_model ("models/weapons/w_gl.zym"); - precache_model ("models/weapons/w_electro.zym"); + precache_model ("models/weapons/g_crylink.md3"); + precache_model ("models/weapons/g_electro.md3"); + precache_model ("models/weapons/g_gl.md3"); + precache_model ("models/weapons/g_hagar.md3"); + precache_model ("models/weapons/g_nex.md3"); + precache_model ("models/weapons/g_rl.md3"); + precache_model ("models/weapons/g_shotgun.md3"); + precache_model ("models/weapons/g_uzi.md3"); + precache_model ("models/weapons/v_crylink.md3"); + precache_model ("models/weapons/v_electro.md3"); + precache_model ("models/weapons/v_gl.md3"); + precache_model ("models/weapons/v_hagar.md3"); + precache_model ("models/weapons/v_laser.md3"); + precache_model ("models/weapons/v_nex.md3"); + precache_model ("models/weapons/v_rl.md3"); + precache_model ("models/weapons/v_shotgun.md3"); + precache_model ("models/weapons/v_uzi.md3"); precache_model ("models/weapons/w_crylink.zym"); - precache_model ("models/weapons/w_nex.zym"); + precache_model ("models/weapons/w_electro.zym"); + precache_model ("models/weapons/w_gl.zym"); precache_model ("models/weapons/w_hagar.zym"); + precache_model ("models/weapons/w_laser.zym"); + precache_model ("models/weapons/w_nex.zym"); precache_model ("models/weapons/w_rl.zym"); - - precache_model ("models/items/a_shells.md3"); - precache_model ("models/items/a_cells.md3"); - precache_model ("models/items/a_rockets.md3"); - precache_model ("models/items/a_bullets.mdl"); - - precache_model ("models/items/g_strength.md3"); - precache_model ("models/items/g_invincible.md3"); - - precache_model ("models/gibs/eye.md3"); - precache_model ("models/gibs/gib1.md3"); - precache_model ("models/gibs/gib2.md3"); - precache_model ("models/gibs/gib3.md3"); - precache_model ("models/gibs/gib4.md3"); - precache_model ("models/gibs/gib5.md3"); - precache_model ("models/gibs/gib6.md3"); - precache_model ("models/gibs/chunk.mdl"); - precache_model ("models/gibs/bloodyskull.md3"); - - precache_sound ("weapons/lasergun_fire.wav"); - precache_sound ("weapons/laserimpact.wav"); - precache_sound ("weapons/uzi_fire.wav"); - precache_sound ("weapons/shotgun_fire.wav"); - precache_sound ("weapons/grenade_fire.wav"); - precache_sound ("weapons/grenade_impact.wav"); - precache_sound ("weapons/grenade_bounce.wav"); - precache_sound ("weapons/nexfire.wav"); - precache_sound ("weapons/neximpact.wav"); - precache_sound ("weapons/electro_fire.wav"); - precache_sound ("weapons/electro_fly.wav"); - precache_sound ("weapons/missile_fly.wav"); - precache_sound ("weapons/rocket_fire.wav"); - precache_sound ("weapons/rocket_impact.wav"); - precache_sound ("weapons/hagar_fire.wav"); - precache_sound ("weapons/hagexp1.wav"); - precache_sound ("weapons/hagexp2.wav"); - precache_sound ("weapons/hagexp3.wav"); - precache_sound ("weapons/ric1.wav"); - precache_sound ("weapons/ric2.wav"); - precache_sound ("weapons/ric3.wav"); - precache_sound ("weapons/weaponpickup.wav"); - precache_sound ("weapons/crylink.wav"); - precache_sound ("weapons/crylink2.wav"); - precache_sound ("weapons/plasmahit.wav"); - precache_sound ("weapons/tink1.wav"); - precache_sound ("weapons/weapon_switch.wav"); - - precache_sound ("misc/armor25.wav"); + precache_model ("models/weapons/w_shotgun.zym"); + precache_model ("models/weapons/w_uzi.zym"); + precache_sound ("announcer/1fragleft.wav"); + precache_sound ("announcer/1minuteremains.wav"); + precache_sound ("announcer/2fragsleft.wav"); + precache_sound ("announcer/3fragsleft.wav"); + precache_sound ("announcer/welcometonexuiz.wav"); precache_sound ("misc/armor1.wav"); - precache_sound ("misc/itempickup.wav"); + precache_sound ("misc/armor25.wav"); + precache_sound ("misc/armorimpact.wav"); precache_sound ("misc/bodyimpact1.wav"); precache_sound ("misc/bodyimpact2.wav"); - precache_sound ("misc/armorimpact.wav"); - precache_sound ("misc/hit.wav"); - precache_sound ("misc/teleport.wav"); - precache_sound ("misc/megahealth.wav"); - precache_sound ("misc/mediumhealth.wav"); - precache_sound ("misc/minihealth.wav"); precache_sound ("misc/gib.wav"); - precache_sound ("misc/jumppad.wav"); - precache_sound ("misc/hitground1.wav"); - precache_sound ("misc/hitground2.wav"); - precache_sound ("misc/hitground3.wav"); - precache_sound ("misc/hitground4.wav"); - precache_sound ("misc/talk.wav"); precache_sound ("misc/gib_splat01.wav"); precache_sound ("misc/gib_splat02.wav"); precache_sound ("misc/gib_splat03.wav"); precache_sound ("misc/gib_splat04.wav"); + //precache_sound ("misc/h2ohit.wav"); + precache_sound ("misc/hit.wav"); + precache_sound ("misc/hitground1.wav"); + precache_sound ("misc/hitground2.wav"); + precache_sound ("misc/hitground3.wav"); + precache_sound ("misc/hitground4.wav"); + precache_sound ("misc/itempickup.wav"); + precache_sound ("misc/itemrespawn.wav"); + precache_sound ("misc/jumppad.wav"); + precache_sound ("misc/mediumhealth.wav"); + precache_sound ("misc/megahealth.wav"); + precache_sound ("misc/minihealth.wav"); precache_sound ("misc/powerup.wav"); - precache_sound ("misc/h20hit.wav"); - + precache_sound ("misc/talk.wav"); + precache_sound ("misc/teleport.wav"); precache_sound ("plats/medplat1.wav"); precache_sound ("plats/medplat2.wav"); - - precache_sound ("player/slime.wav"); precache_sound ("player/lava.wav"); - - precache_sound ("misc/itemrespawn.wav"); + precache_sound ("player/slime.wav"); + precache_sound ("weapons/crylink.wav"); + precache_sound ("weapons/crylink2.wav"); + precache_sound ("weapons/electro_fire.wav"); + precache_sound ("weapons/electro_fly.wav"); + precache_sound ("weapons/electro_impact.wav"); + precache_sound ("weapons/grenade_bounce.wav"); + precache_sound ("weapons/grenade_fire.wav"); + precache_sound ("weapons/grenade_impact.wav"); + precache_sound ("weapons/hagar_fire.wav"); + precache_sound ("weapons/hagexp1.wav"); + precache_sound ("weapons/hagexp2.wav"); + precache_sound ("weapons/hagexp3.wav"); + precache_sound ("weapons/lasergun_fire.wav"); + precache_sound ("weapons/laserimpact.wav"); + precache_sound ("weapons/nexfire.wav"); + precache_sound ("weapons/neximpact.wav"); + precache_sound ("weapons/ric1.wav"); + precache_sound ("weapons/ric2.wav"); + precache_sound ("weapons/ric3.wav"); + precache_sound ("weapons/rocket_fire.wav"); + precache_sound ("weapons/rocket_fly.wav"); + precache_sound ("weapons/rocket_impact.wav"); + precache_sound ("weapons/shotgun_fire.wav"); + precache_sound ("weapons/tink1.wav"); + precache_sound ("weapons/uzi_fire.wav"); + precache_sound ("weapons/weapon_switch.wav"); + precache_sound ("weapons/weaponpickup.wav"); diff --git a/qcsrc/gamec/w_common.c b/qcsrc/gamec/w_common.c index a8cfeb413..79ff2f300 100644 --- a/qcsrc/gamec/w_common.c +++ b/qcsrc/gamec/w_common.c @@ -513,11 +513,11 @@ void fireBullet (vector start, vector dir, float spread, float damage, float dty te_gunshot (trace_endpos); r = random (); if (r < 0.10) - sound (self, CHAN_IMPACT, "weapons/ric1.wav", 1, ATTN_NORM); + PointSound (trace_endpos, "weapons/ric1.wav", 1, ATTN_NORM); else if (r < 0.20) - sound (self, CHAN_IMPACT, "weapons/ric2.wav", 1, ATTN_NORM); + PointSound (trace_endpos, "weapons/ric2.wav", 1, ATTN_NORM); else if (r < 0.30) - sound (self, CHAN_IMPACT, "weapons/ric3.wav", 1, ATTN_NORM); + PointSound (trace_endpos, "weapons/ric3.wav", 1, ATTN_NORM); } else if (trace_ent.classname == "player" || trace_ent.classname == "corpse" || trace_ent.classname == "gib") sound (self, CHAN_BODY, "misc/hit.wav", 1, ATTN_NORM); diff --git a/qcsrc/gamec/w_electro.c b/qcsrc/gamec/w_electro.c index 78fa7e02c..214301d65 100644 --- a/qcsrc/gamec/w_electro.c +++ b/qcsrc/gamec/w_electro.c @@ -42,7 +42,7 @@ void W_Plasma_Explode (void) self.event_damage = SUB_Null; RadiusDamage (self, self.owner, cvar("g_balance_electro_damage"), cvar("g_balance_electro_edgedamage"), cvar("g_balance_electro_radius"), world, cvar("g_balance_electro_force"), IT_ELECTRO); - sound (self, CHAN_IMPACT, "weapons/plasmahit.wav", 1, ATTN_NORM); + sound (self, CHAN_BODY, "weapons/electro_impact.wav", 1, ATTN_NORM); remove (self); } @@ -52,7 +52,7 @@ void W_Plasma_Touch (void) if (other.classname == "player" || other.classname == "corpse") W_Plasma_Explode (); else - sound (self, CHAN_BODY, "weapons/grenade_bounce.wav", 1, ATTN_NORM); + sound (self, CHAN_IMPACT, "weapons/grenade_bounce.wav", 1, ATTN_NORM); } void W_Plasma_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) @@ -121,6 +121,7 @@ void() W_Electro_Attack setmodel(proj, "models/elaser.mdl"); setsize(proj, '0 0 0', '0 0 0'); } + sound (proj, CHAN_BODY, "weapons/electro_fly.wav", 1, ATTN_NORM); } // weapon frames diff --git a/qcsrc/gamec/w_grenadelauncher.c b/qcsrc/gamec/w_grenadelauncher.c index c8974af6e..46d701478 100644 --- a/qcsrc/gamec/w_grenadelauncher.c +++ b/qcsrc/gamec/w_grenadelauncher.c @@ -30,7 +30,11 @@ void(float req) w_glauncher = void W_Grenade_Explode (void) { - ImpactEffect (self, IT_GRENADE_LAUNCHER); + vector org2; + org2 = findbetterlocation (self.origin); + te_explosion (org2); + effect (org2, "models/sprites/grenadeexplosion.spr32", 0, 20, 30); + sound (self, CHAN_BODY, "weapons/grenade_impact.wav", 1, ATTN_NORM); self.event_damage = SUB_Null; RadiusDamage (self, self.owner, cvar("g_balance_grenadelauncher_damage"), cvar("g_balance_grenadelauncher_edgedamage"), cvar("g_balance_grenadelauncher_radius"), world, cvar("g_balance_grenadelauncher_force"), IT_GRENADE_LAUNCHER); @@ -43,7 +47,7 @@ void W_Grenade_Touch (void) if (other.classname == "player" || other.classname == "corpse") W_Grenade_Explode (); else - sound (self, CHAN_BODY, "weapons/grenade_bounce.wav", 1, ATTN_NORM); + sound (self, CHAN_IMPACT, "weapons/grenade_bounce.wav", 1, ATTN_NORM); } void W_Grenade_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) diff --git a/qcsrc/gamec/w_hagar.c b/qcsrc/gamec/w_hagar.c index 8269c2c7b..6cd0d6c59 100644 --- a/qcsrc/gamec/w_hagar.c +++ b/qcsrc/gamec/w_hagar.c @@ -30,7 +30,17 @@ void(float req) w_hagar = void W_Hagar_Explode (void) { - ImpactEffect (self, IT_HAGAR); + vector org2; + float b; + org2 = findbetterlocation (self.origin); + effect (org2, "models/sprites/hagarexplosion.spr32", 0, 20, 30); + b = crandom(); + if (b<-0.7) + sound (self, CHAN_BODY, "weapons/hagexp1.wav", 1, ATTN_NORM); + else if (b<0.4) + sound (self, CHAN_BODY, "weapons/hagexp2.wav", 1, ATTN_NORM); + else if (b<1) + sound (self, CHAN_BODY, "weapons/hagexp3.wav", 1, ATTN_NORM); self.event_damage = SUB_Null; RadiusDamage (self, self.owner, cvar("g_balance_hagar_damage"), cvar("g_balance_hagar_edgedamage"), cvar("g_balance_hagar_radius"), world, cvar("g_balance_hagar_force"), IT_HAGAR); diff --git a/qcsrc/gamec/w_laser.c b/qcsrc/gamec/w_laser.c index d449332d2..e83b308ad 100644 --- a/qcsrc/gamec/w_laser.c +++ b/qcsrc/gamec/w_laser.c @@ -52,7 +52,7 @@ void W_Laser_Touch (void) self.event_damage = SUB_Null; RadiusDamage (self, self.owner, cvar("g_balance_laser_damage"), cvar("g_balance_laser_edgedamage"), cvar("g_balance_laser_radius"), world, cvar("g_balance_laser_force"), IT_LASER); - sound (self, CHAN_IMPACT, "weapons/laserimpact.wav", 1, ATTN_NORM); + sound (self, CHAN_BODY, "weapons/laserimpact.wav", 1, ATTN_NORM); remove (self); } diff --git a/qcsrc/gamec/w_rocketlauncher.c b/qcsrc/gamec/w_rocketlauncher.c index 93dc4a724..77f065af0 100644 --- a/qcsrc/gamec/w_rocketlauncher.c +++ b/qcsrc/gamec/w_rocketlauncher.c @@ -31,7 +31,11 @@ void(float req) w_rlauncher = void W_Rocket_Explode (void) { - ImpactEffect (self, IT_ROCKET_LAUNCHER); + vector org2; + org2 = findbetterlocation (self.origin); + te_explosion (org2); + effect (org2, "models/sprites/rocketexplosion.spr32", 0, 20, 40); + sound (self, CHAN_BODY, "weapons/rocket_impact.wav", 1, ATTN_NORM); self.event_damage = SUB_Null; RadiusDamage (self, self.owner, cvar("g_balance_rocketlauncher_damage"), cvar("g_balance_rocketlauncher_edgedamage"), cvar("g_balance_rocketlauncher_radius"), world, cvar("g_balance_rocketlauncher_force"), IT_ROCKET_LAUNCHER); @@ -108,6 +112,7 @@ void W_Rocket_Attack (void) missile.think = W_Rocket_Think; missile.nextthink = time; missile.cnt = time + 9; + sound (missile, CHAN_BODY, "weapons/rocket_fly.wav", 0.4, ATTN_NORM); flash = spawn (); setorigin (flash, org); -- 2.39.2