centerprints now are managed independently per line
[divverent/nexuiz.git] / data / qcsrc / server / g_violence.qc
1 void GibDamage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
2 {
3         float r;
4         r = random ();
5         if (r < 0.60)
6                 sound (self, CHAN_IMPACT, "misc/gib_splat01.wav", 1, ATTN_NORM);
7         else if (r < 0.65)
8                 sound (self, CHAN_IMPACT, "misc/gib_splat02.wav", 1, ATTN_NORM);
9         else if (r < 0.70)
10                 sound (self, CHAN_IMPACT, "misc/gib_splat03.wav", 1, ATTN_NORM);
11         else if (r < 0.75)
12                 sound (self, CHAN_IMPACT, "misc/gib_splat04.wav", 1, ATTN_NORM);
13         te_blood (self.origin + '0 0 1', '0 0 30', 10);
14         self.health = self.health - damage;
15         if (self.health <= -1000)
16         {
17                 self.event_damage = SUB_Null;
18                 SUB_VanishOrRemove (self);
19         }
20 }
21
22
23 void GibTouch ()
24 {
25         if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
26         {
27                 SUB_VanishOrRemove(self);
28                 return;
29         }
30         GibDamage (other, other, 1000, 0, self.origin, '0 0 0');
31 }
32
33
34 .float gibrandom;
35 .float gibmodelindex;
36 float() Gib_customizeentityforclient =
37 {
38         if(self.classname == "player") // the eye
39         {
40                 if(self.gibrandom > other.cvar_cl_nogibs)
41                         setmodel(self, self.model);
42                 else
43                         setmodel(self, "");
44                 return TRUE;
45         }
46         else // other gibs - don't even need to send them
47                 return (self.gibrandom > other.cvar_cl_nogibs);
48 };
49
50 // changes by LordHavoc on 03/30/04
51 // TossGib now takes a gib entity so it can be used for tossing heads
52 // gib.velocity now uses randomvec() instead of a bunch of manual random calls
53 // merged Gib() into PlayerGib()
54 void TossGib (entity gib, string mdlname, vector org, vector v, float destroyontouch)
55 {
56         if (gib == world)
57         {
58                 gib = spawn ();
59                 gib.deadflag = DEAD_DEAD;
60         }
61
62         // don't set his classname to something else or it'll screw up a lot of stuff
63         if(gib.classname != "player")
64                 gib.classname = "gib";
65         gib.iscreature = TRUE;
66         gib.movetype = MOVETYPE_BOUNCE;
67         gib.solid = SOLID_CORPSE;
68         gib.skin = 0;
69         gib.effects = 0;
70         gib.gibrandom = random(); // used for customize function to reduce gibs
71         gib.customizeentityforclient = Gib_customizeentityforclient;
72         gib.effects = EF_LOWPRECISION; // use less bandwidth
73
74         setmodel (gib, mdlname);
75         gib.gibmodelindex = gib.modelindex;
76         setsize (gib, '-8 -8 -8', '8 8 8');
77         setorigin (gib, org);
78
79         gib.health = -1;
80         gib.takedamage = DAMAGE_YES;
81         gib.damageforcescale = 3.5;
82         gib.event_damage = GibDamage;
83         if (destroyontouch == 1)
84                 gib.touch = GibTouch;
85
86         gib.velocity = v + randomvec() * 450;
87         gib.avelocity = randomvec() * 300;
88         gib.oldvelocity = gib.velocity;
89
90         SUB_SetFade (gib, time + 12 + random () * 4, 1);
91 }