]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Save on netuse by using Ent_DamageInfo for vehicle particles / sounds on weapon impac...
authorJakob MG <jakob_mg@hotmail.com>
Wed, 6 Apr 2011 08:38:09 +0000 (10:38 +0200)
committerJakob MG <jakob_mg@hotmail.com>
Wed, 6 Apr 2011 08:38:09 +0000 (10:38 +0200)
qcsrc/client/damage.qc
qcsrc/common/constants.qh
qcsrc/server/vehicles/racer.qc
qcsrc/server/vehicles/raptor.qc
qcsrc/server/vehicles/spiderbot.qc
qcsrc/server/vehicles/vehicles.qc
qcsrc/server/w_common.qc

index 783f66759b50b3881d533b083e732db2866d7d55..245ab24f78f937fffc623d9c7b7a06dad50ddf79 100644 (file)
@@ -69,9 +69,70 @@ void Ent_DamageInfo(float isNew)
        }
 
        self = oldself;
-
-       // TODO spawn particle effects and sounds based on w_deathtype
        
+       if(DEATH_ISVEHICLE(w_deathtype))
+       {
+           traceline(w_org - normalize(force) * 16, w_org + normalize(force) * 16, MOVE_NOMONSTERS, world);
+           if(trace_plane_normal != '0 0 0')       
+            w_backoff = trace_plane_normal;
+        else
+            w_backoff = -1 * normalize(w_org - (w_org + normalize(force) * 16));
+           
+           setorigin(self, w_org + w_backoff * 2); // for sound() calls
+           
+           switch(w_deathtype)
+           {            
+            case DEATH_VHCRUSH:
+                break;
+                
+            case DEATH_SBMINIGUN:
+                string _snd;
+                _snd = strcat("weapons/ric", ftos(1 + rint(random() * 2)), ".waw");
+                sound(self, CHAN_PROJECTILE, _snd, VOL_BASE, ATTN_NORM);
+                pointparticles(particleeffectnum("spiderbot_minigun_impact"), self.origin, w_backoff * 1000, 1);
+                break;
+            case DEATH_SBROCKET:
+                sound(self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+                pointparticles(particleeffectnum("spiderbot_rocket_explode"), self.origin, w_backoff * 1000, 1);
+                break;
+            case DEATH_SBBLOWUP:
+                sound(self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN);
+                pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1);
+                break;
+                
+            case DEATH_WAKIGUN:
+                sound(self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
+                pointparticles(particleeffectnum("wakizashi_gun_impact"), self.origin, w_backoff * 1000, 1);
+                break;
+            case DEATH_WAKIROCKET:
+                sound(self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+                pointparticles(particleeffectnum("wakizashi_rocket_explode"), self.origin, w_backoff * 1000, 1);
+                break;
+            case DEATH_WAKIBLOWUP:
+                sound(self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN);
+                pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1);
+                break;
+                
+            case DEATH_RAPTOR_CANNON:
+                sound(self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
+                pointparticles(particleeffectnum("raptor_cannon_impact"), self.origin, w_backoff * 1000, 1);
+                break;
+            case DEATH_RAPTOR_BOMB_SPLIT:
+                sound(self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+                pointparticles(particleeffectnum("raptor_bomb_spread"), self.origin, w_backoff * 1000, 1);
+                break;
+            case DEATH_RAPTOR_BOMB:
+                sound(self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+                pointparticles(particleeffectnum("raptor_bomb_impact"), self.origin, w_backoff * 1000, 1);
+                break;
+            case DEATH_RAPTOR_DEATH:
+                sound(self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_MIN);
+                pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1);
+                break;
+           }
+       }
+       
+       // TODO spawn particle effects and sounds based on w_deathtype
        if(!DEATH_ISSPECIAL(w_deathtype))
        {
                float hitwep;
index 0398d84ffc4544a7916f1a944391ab069b83388e..93ace6f5f8ec836c4c180a09994349b397a98914 100644 (file)
@@ -543,9 +543,10 @@ float DEATH_HEADSHOT = 10022;
 #define DEATH_WAKIBLOWUP    10036
 #define DEATH_RAPTOR_CANNON 10037
 #define DEATH_RAPTOR_BOMB   10038
-#define DEATH_RAPTOR_DEATH  10039
-#define DEATH_VHLAST        10039
-#define DEATH_ISVEHICLE(t)            ((t) >= DEATH_VHFIRST && (t) <= DEATH_VHLAST)
+#define DEATH_RAPTOR_BOMB_SPLIT 10039
+#define DEATH_RAPTOR_DEATH  10040
+#define DEATH_VHLAST        10040
+#define DEATH_ISVEHICLE(t)  ((t) >= DEATH_VHFIRST && (t) <= DEATH_VHLAST)
 
 float DEATH_GENERIC = 10050;
 
index 091cf3e613094fde005270248ad45c04433f2ae8..b0432dbe43da3c02af4264a90bcf239cbce43e58 100644 (file)
@@ -123,7 +123,7 @@ void racer_fire_cannon(string tagname)
     entity bolt;
 
     v = gettaginfo(self, gettagindex(self, tagname));
-    bolt = vehicles_projectile("wakizashi_gun_impact", "weapons/laserimpact.wav", "wakizashi_gun_muzzleflash", "weapons/lasergun_fire.wav",
+    bolt = vehicles_projectile("wakizashi_gun_muzzleflash", "weapons/lasergun_fire.wav",
                            v, normalize(v_forward + randomvec() * autocvar_g_vehicle_racer_cannon_spread) * autocvar_g_vehicle_racer_cannon_speed,
                            autocvar_g_vehicle_racer_cannon_damage, autocvar_g_vehicle_racer_cannon_radius, autocvar_g_vehicle_racer_cannon_force,  0,
                            DEATH_WAKIGUN, PROJECTILE_WAKICANNON, 0);
@@ -233,7 +233,7 @@ void racer_fire_rocket(string tagname, entity trg)
     entity rocket;
 
     v = gettaginfo(self, gettagindex(self, tagname));
-    rocket = vehicles_projectile("wakizashi_rocket_explode", "weapons/rocket_impact.wav", "wakizashi_rocket_launch", "weapons/rocket_fire.wav",
+    rocket = vehicles_projectile("wakizashi_rocket_launch", "weapons/rocket_fire.wav",
                            v, v_forward * autocvar_g_vehicle_racer_rocket_speed,
                            autocvar_g_vehicle_racer_rocket_damage, autocvar_g_vehicle_racer_rocket_radius, autocvar_g_vehicle_racer_rocket_force, 3,
                            DEATH_WAKIROCKET, PROJECTILE_WAKIROCKET, 20);
index e86d02762bc2ed6372c646a0c0d71599ea65e709..89c811c88c21c2f3ef60d4e73f92dd8c4c1f6a43 100644 (file)
@@ -74,12 +74,10 @@ float raptor_altitude(float amax)
 
 void raptor_bomblet_boom()
 {
-    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
-    pointparticles(particleeffectnum("raptor_bomb_impact"), self.origin, trace_plane_normal * 1000, 1);
     RadiusDamage (self, self.realowner, autocvar_g_vehicle_raptor_bomblet_damage,
                                     autocvar_g_vehicle_raptor_bomblet_edgedamage,
                                     autocvar_g_vehicle_raptor_bomblet_radius, world,
-                                    autocvar_g_vehicle_raptor_bomblet_force, DEATH_SBROCKET, world);
+                                    autocvar_g_vehicle_raptor_bomblet_force, DEATH_RAPTOR_BOMB, world);
     remove(self);
 }
 
@@ -110,9 +108,11 @@ void raptor_bomb_burst()
     entity bomblet;
     float i;
 
-    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
-    pointparticles(particleeffectnum("raptor_bomb_spread"), self.origin, self.velocity, 1);
-
+    //sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+    //pointparticles(particleeffectnum("raptor_bomb_spread"), self.origin, self.velocity, 1);
+    
+    Damage_DamageInfo(self.origin, 0, 0, 0, '0 0 0', DEATH_RAPTOR_BOMB_SPLIT, self);
+    
     for(i = 0; i < autocvar_g_vehicle_raptor_bomblets; ++i)
     {
         bomblet = spawn();
@@ -181,10 +181,10 @@ void raptor_fire_cannon(entity gun, string tagname)
     entity bolt;
     vector b_org;    
     b_org = gettaginfo(gun, gettagindex(gun, tagname));
-    bolt = vehicles_projectile("raptor_cannon_impact", "weapons/laserimpact.wav", "raptor_cannon_muzzleflash", "weapons/lasergun_fire.wav",
+    bolt = vehicles_projectile("raptor_cannon_muzzleflash", "weapons/lasergun_fire.wav",
                            b_org, normalize(v_forward + randomvec() * autocvar_g_vehicle_raptor_cannon_spread) * autocvar_g_vehicle_raptor_cannon_speed,
                            autocvar_g_vehicle_raptor_cannon_damage, autocvar_g_vehicle_raptor_cannon_radius, autocvar_g_vehicle_raptor_cannon_force,  0,
-                           DEATH_WAKIGUN, PROJECTILE_RAPTORCANNON, 0);
+                           DEATH_RAPTOR_CANNON, PROJECTILE_RAPTORCANNON, 0);
 }
 
 void raptor_think()
index 9cb629ce91bb0a9c3507bd0b5b2b1b24990f0694..d2111c45f4a4e0bcfdfa18ff32f188dc896350a7 100644 (file)
@@ -150,7 +150,7 @@ void spiderbot_rocket_do()
     crosshair_trace(self.owner);
 //normalize(v_forward + (v_up * 0.5) + randomvec() * 0.25) * autocvar_g_vehicle_spiderbot_rocket_speed,
     v = gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire"));
-    rocket = vehicles_projectile("spiderbot_rocket_explode", "weapons/rocket_impact.wav", "spiderbot_rocket_launch", "weapons/rocket_fire.wav",
+    rocket = vehicles_projectile("spiderbot_rocket_launch", "weapons/rocket_fire.wav",
                            v, normalize(v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
                            autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
                            DEATH_SBROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health);
@@ -188,7 +188,7 @@ void spiderbot_minigun_fire(entity gun, float trail)
         sound (gun, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
         trailparticles(self, particleeffectnum("spiderbot_minigun_trail"), v, trace_endpos);
         pointparticles(particleeffectnum("spiderbot_minigun_muzzleflash"), v, v_forward * 2500, 1);
-        pointparticles(particleeffectnum("spiderbot_minigun_impact"), trace_endpos, trace_plane_normal * 2500,1);
+        //pointparticles(particleeffectnum("spiderbot_minigun_impact"), trace_endpos, trace_plane_normal * 2500,1);
     }
 }
 
index 72b18e5f4eea631ecea18622bd8af0be90dd4320..5ba0722c02a58cb477225bbc76c91bf18461063a 100644 (file)
@@ -135,7 +135,6 @@ void vehicles_locktarget(float incr, float decr, float _lock_time)
     }
 }
 
-
 #define VEHICLE_UPDATE_PLAYER(fld,vhname) \
 self.owner.vehicle_##fld = self.vehicle_##fld / autocvar_g_vehicle_##vhname##_##fld
 
@@ -206,14 +205,12 @@ void vehicles_projectile_explode()
        PROJECTILE_TOUCH;
 
        self.event_damage = SUB_Null;
-    sound (self, CHAN_PROJECTILE, self.target2, VOL_BASE, ATTN_NORM);
-    pointparticles(particleeffectnum(self.target3), findbetterlocation (self.origin, 16), '0 0 0', 1);
     RadiusDamage (self, self.realowner, self.shot_dmg, 0, self.shot_radius, self, self.shot_force, self.totalfrags, other);
 
     remove (self);
 }
 
-entity vehicles_projectile(string _impactfx, string _impactsnd, string _mzlfx, string _mzlsound,
+entity vehicles_projectile(string _mzlfx, string _mzlsound,
                            vector _org, vector _vel,
                            float _dmg, float _radi, float _force,  float _size,
                            float _deahtype, float _projtype, float _health)
@@ -229,8 +226,6 @@ entity vehicles_projectile(string _impactfx, string _impactsnd, string _mzlfx, s
     proj.shot_radius      = _radi;
     proj.shot_force       = _force;
     proj.totalfrags       = _deahtype;
-    proj.target2          = _impactsnd;
-    proj.target3          = _impactfx;
     proj.solid            = SOLID_BBOX;
     proj.movetype         = MOVETYPE_FLYMISSILE;
     proj.flags            = FL_PROJECTILE;
index c20b6aa4c67f438a704f8b9c2a21ae381b225025..03fddcf7862f1a275ed18bdab3720d5708997f9e 100644 (file)
@@ -517,8 +517,8 @@ void fireBullet (vector start, vector dir, float spread, float damage, float for
 
        if ((trace_fraction != 1.0) && (pointcontents (trace_endpos) != CONTENT_SKY))
        {
-               if (trace_ent.solid == SOLID_BSP && !(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT))
-                       Damage_DamageInfo(trace_endpos, damage, 0, 0, dir * max(1, force), dtype, self);
+               if not (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+                       Damage_DamageInfo(trace_endpos, damage, 0, 0, dir * max(1, force), dtype, self);                    
 
                Damage (trace_ent, self, self, damage, dtype, trace_endpos, dir * force);
        }