2 * Spawn a boom, trow fake bits arround
3 * and hide the real ones.
7 self.effects |= EF_NODRAW;
8 self.nextthink = time + self.respawntime - 0.2;
9 self.think = turret_stdproc_respawn;
12 void turret_stdproc_die()
17 self.deadflag = DEAD_DEAD;
18 self.tur_head.deadflag = self.deadflag;
20 // Unsolidify and hide real parts
21 self.solid = SOLID_NOT;
22 self.tur_head.solid = self.solid;
24 self.event_damage = SUB_Null;
25 self.takedamage = DAMAGE_NO;
29 // Trow fake parts arround
31 if not(self.damage_flags & TFL_DMG_DEATH_NOGIBS)
33 makevectors(self.angles);
36 turret_trowgib(self.origin, '0 0 0', '1 1 1', "models/turrets/base-gib2.md3", min(self.respawntime, 20), 1, 1);
38 t_dir = (v_up * 700) + (randomvec() * 300);
39 turret_trowgib(self.origin, t_dir, '1 1 1', "models/turrets/base-gib3.md3", min(self.respawntime, 10), 1, 1);
41 t_dir = (v_up * 700) + (randomvec() * 300);
42 turret_trowgib(self.origin, t_dir, '1 1 1', "models/turrets/base-gib4.md3", min(self.respawntime, 10), 1, 1);
46 turret_trowgib(self.origin, '0 0 0', '1 1 1', "models/turrets/base-gib1.md3", min(self.respawntime, 20), 1, 1);
49 // Blow the top part up into the air
50 turret_trowgib2( self.origin + (v_up * 50), v_up * 150 + randomvec() * 50, '0.2 0.2 0.2', self.tur_head,time + 0.5 + (random() * 0.5));
54 //RadiusDamage (self,self, min(self.ammo,50),min(self.ammo,50) * 0.25,250,world,min(self.ammo,50)*5,DEATH_TURRET,world);
56 if(self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
58 if (self.turret_diehook)
59 self.turret_diehook();
61 remove(self.tur_head);
67 self.SendFlags |= TNSF_STATUS;
68 self.nextthink = time + 0.2;
69 self.think = turret_hide;
71 if (self.turret_diehook)
72 self.turret_diehook();
76 void turret_stdproc_respawn()
78 // Make sure all parts belong to the same team since
79 // this function doubles as "teamchange" function.
81 self.tur_head.team = self.team;
83 self.effects &~= EF_NODRAW;
84 self.deadflag = DEAD_NO;
85 self.effects = EF_LOWPRECISION;
86 self.solid = SOLID_BBOX;
88 self.takedamage = DAMAGE_AIM;
89 self.event_damage = turret_stdproc_damage;
91 self.avelocity = '0 0 0';
92 self.tur_head.avelocity = self.avelocity;
93 self.tur_head.angles = self.idle_aim;
94 self.health = self.tur_health;
97 self.volly_counter = self.shot_volly;
98 self.ammo = self.ammo_max;
100 self.nextthink = time + self.ticrate;
102 self.SendFlags = TNSF_FULL_UPDATE;
103 self.think = turret_link;
105 if (self.turret_respawnhook)
106 self.turret_respawnhook();
110 * Standard damage proc.
112 void turret_stdproc_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
116 if (self.health <= 0)
119 // Inactive turrets take no damage. (hm..)
120 if not (self.tur_active)
124 if (self.team == attacker.team)
126 // This does not happen anymore. Re-enable if you fix that.
127 if(clienttype(attacker) == CLIENTTYPE_REAL)
128 sprint(attacker, "\{1}Turret tells you: I'm on your team!\n");
130 if(autocvar_g_friendlyfire)
131 damage = damage * autocvar_g_friendlyfire;
136 self.health = self.health - damage;
138 // thorw head slightly off aim when hit?
139 if (self.damage_flags & TFL_DMG_HEADSHAKE)
141 self.tur_head.angles_x = self.tur_head.angles_x + (-0.5 + random()) * damage;
142 self.tur_head.angles_y = self.tur_head.angles_y + (-0.5 + random()) * damage;
144 self.SendFlags |= TNSF_ANG;
148 if (self.turrcaps_flags & TFL_TURRCAPS_MOVE)
149 self.velocity = self.velocity + vforce;
151 // FIXME: Better damage feedback?
153 if (self.health <= 0)
155 self.event_damage = SUB_Null;
156 self.tur_head.event_damage = SUB_Null;
157 self.takedamage = DAMAGE_NO;
158 self.nextthink = time;
159 self.think = turret_stdproc_die;
162 self.SendFlags |= TNSF_STATUS;