]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/tturrets/system/system_damage.qc
Move turrets death and gib to client (now zero network use for those events)
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / tturrets / system / system_damage.qc
index 72bfaec2b931c581bc3fdfdeb40bf17e20b61f69..10a1b9a599e53b9a188c08104033c420df8cd900 100644 (file)
 /*
-* Trow a turret gib
+* Spawn a boom, trow fake bits arround
+* and hide the real ones.
 */
-void turret_gib_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
-{
-    self.velocity += vforce;
-}
-
-void turret_trowgib(
-    vector v_from, vector v_to, vector v_colormod,
-    string smodel,
-    float f_lifetime, float f_fadetime, float b_burn)
+void turret_hide()
 {
-    local entity gib;
-    local entity burn;
-
-    gib = spawn();
-
-    gib.classname = "turret_gib";
-    setmodel(gib, smodel);
-    setorigin(gib, v_from);
-    SUB_SetFade(gib,time + f_lifetime, 2);
-
-    gib.solid              = SOLID_BBOX;
-    gib.movetype           = MOVETYPE_BOUNCE;
-    gib.takedamage         = DAMAGE_YES;
-    gib.event_damage       = turret_gib_damage;
-    gib.health             = -1;
-    gib.effects            = EF_LOWPRECISION;
-    gib.flags              = FL_NOTARGET;
-    gib.colormod           = v_colormod;
-    gib.velocity           = v_to;
-
-    if (b_burn)
-    {
-        burn = spawn();
-        burn.effects        = EF_LOWPRECISION;//|EF_FLAME;
-        setattachment(burn,gib,"");
-        setorigin(burn,(gib.mins + gib.maxs) * 0.5);
-        SUB_SetFade(burn,time + (f_lifetime * 0.5), 2);
-    }
+    self.effects   |= EF_NODRAW;
+    self.nextthink = time + self.respawntime - 0.2;
+    self.think     = turret_stdproc_respawn;
 }
 
-void turret_gib_boom()
-{
-    entity gib;
-    float i;
-    string s;
-
-    for (i = 1; i < 5; i = i +1)
-    {
-        gib = spawn();
-        gib.classname = "turret_gib";
-
-        s = strcat("models/turrets/head-gib",ftos(i));
-        s = strcat(s,".md3");
-        setmodel(gib, s);
-
-        setorigin(gib,self.origin);
-
-        SUB_SetFade(gib,time + 5,2);
-
-        gib.solid              = SOLID_BBOX;
-        gib.movetype           = MOVETYPE_BOUNCE;
-        gib.gravity            = 0.5;
-        gib.damageforcescale   = 2;
-        gib.takedamage         = DAMAGE_YES;
-        gib.event_damage       = turret_gib_damage;
-        gib.health             = -1;
-        gib.effects            = EF_LOWPRECISION;
-        gib.flags              = FL_NOTARGET;
-        gib.velocity           = self.velocity + (randomvec() * 700);
-        gib.avelocity          = randomvec() * 64;
-    }
-
-    WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
-    WriteByte (MSG_BROADCAST, 78);
-    WriteCoord (MSG_BROADCAST, self.origin_x);
-    WriteCoord (MSG_BROADCAST, self.origin_y);
-    WriteCoord (MSG_BROADCAST, self.origin_z);
-
-    remove(self);
-}
-
-void turret_trowgib2(
-    vector v_from, vector v_to, vector v_colormod,
-    entity e_mimic, float boomtime)
-{
-    entity gib;
-
-    gib = spawn();
-
-    gib.classname = "turret_gib";
-    setmodel(gib,e_mimic.model);
-    setorigin(gib,v_from);
-
-    gib.solid              = SOLID_BBOX;
-
-    gib.movetype           = MOVETYPE_BOUNCE;
-    gib.gravity            = 0.75;
-    gib.damageforcescale   = 2;
-    gib.takedamage         = DAMAGE_YES;
-    gib.event_damage       = turret_gib_damage;
-    gib.health             = -1;
-    gib.effects            = EF_LOWPRECISION;
-    gib.flags              = FL_NOTARGET;
-    gib.colormod           = v_colormod;
-    gib.velocity           = v_to;
-    gib.avelocity          = randomvec() * 32;
-    gib.think              = turret_gib_boom;
-    gib.nextthink          = boomtime;
-    //gib.effects            = EF_FLAME;
-
-
-}
-/*
-* Spawn a boom, trow fake bits arround
-* and hide the real ones.
-*/
 void turret_stdproc_die()
 {
     vector org2;
@@ -124,16 +16,6 @@ void turret_stdproc_die()
 
     self.deadflag           = DEAD_DEAD;
     self.tur_head.deadflag  = self.deadflag;
-    
-    sound (self, CHAN_PLAYER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
-    org2 = self.origin + '0 0 40';
-
-// Explotion grafix
-    WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
-    WriteByte (MSG_BROADCAST, 78);
-    WriteCoord (MSG_BROADCAST, org2_x);
-    WriteCoord (MSG_BROADCAST, org2_y);
-    WriteCoord (MSG_BROADCAST, org2_z);
 
 // Unsolidify and hide real parts
     self.solid              = SOLID_NOT;
@@ -142,9 +24,8 @@ void turret_stdproc_die()
     self.event_damage           = SUB_Null;
     self.takedamage             = DAMAGE_NO;
 
-    self.effects            = EF_NODRAW;
     self.health             = 0;
-
+/*
 // Trow fake parts arround
     // base
     if not(self.damage_flags & TFL_DMG_DEATH_NOGIBS)
@@ -171,7 +52,7 @@ void turret_stdproc_die()
 
 // Go boom
     //RadiusDamage (self,self, min(self.ammo,50),min(self.ammo,50) * 0.25,250,world,min(self.ammo,50)*5,DEATH_TURRET,world);
-
+*/
     if(self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
     {
         if (self.turret_diehook)
@@ -183,8 +64,9 @@ void turret_stdproc_die()
     else
     {
                // Setup respawn
-        self.nextthink      = time + self.respawntime;
-        self.think          = turret_stdproc_respawn;
+        self.SendFlags      = TNSF_DIE;
+        self.nextthink      = time + 0.2;
+        self.think          = turret_hide;
         
         if (self.turret_diehook)
             self.turret_diehook();
@@ -218,11 +100,10 @@ void turret_stdproc_respawn()
     self.nextthink  = time + self.ticrate;
     
     self.SendFlags  = TNSF_FULL_UPDATE;
-    self.think      = turret_link;  // CSQC?
+    self.think      = turret_link;
 
     if (self.turret_respawnhook)
         self.turret_respawnhook();
-
 }
 
 /*
@@ -278,7 +159,5 @@ void turret_stdproc_damage (entity inflictor, entity attacker, float damage, flo
         self.think = turret_stdproc_die;
     }
     
-    // CSQC
     self.SendFlags  |= TNSF_STATUS;
-
 }