1 float generator_precached;
4 vector randompos(vector m1, vector m2)
8 v_x = m2_x * random() + m1_x;
9 v_y = m2_y * random() + m1_y;
10 v_z = m2_z * random() + m1_z;
14 void generator_precache()
16 if(generator_precached)
17 return; // already precached
19 precache_model("models/onslaught/generator.md3");
20 precache_model("models/onslaught/generator_dead.md3");
21 precache_model("models/onslaught/generator_dmg1.md3");
22 precache_model("models/onslaught/generator_dmg2.md3");
23 precache_model("models/onslaught/generator_dmg3.md3");
24 precache_model("models/onslaught/generator_dmg4.md3");
25 precache_model("models/onslaught/generator_dmg5.md3");
26 precache_model("models/onslaught/generator_dmg6.md3");
27 precache_model("models/onslaught/generator_dmg7.md3");
28 precache_model("models/onslaught/generator_dmg8.md3");
29 precache_model("models/onslaught/generator_dmg9.md3");
30 precache_model("models/onslaught/generator_dead.md3");
32 precache_model("models/onslaught/ons_ray.md3");
33 precache_sound("onslaught/shockwave.wav");
34 precache_sound("weapons/grenade_impact.wav");
35 precache_sound("weapons/rocket_impact.wav");
37 precache_model("models/onslaught/gen_gib1.md3");
38 precache_model("models/onslaught/gen_gib2.md3");
39 precache_model("models/onslaught/gen_gib3.md3");
41 generator_precached = TRUE;
44 void ons_gib_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
46 self.velocity = self.velocity + vforce;
51 void gib_draw_noburn()
53 if(time >= self.giblifetime)
59 if(time >= self.move_time)
62 self.move_time = time + 0.05;
64 if(time > self.giblifetime)
79 pointparticles(particleeffectnum("onslaught_generator_gib_flame"), self.origin, '0 0 0', 1);
82 void ons_throwgib(vector v_from, vector v_to, string smodel, float f_lifetime, float b_burn)
88 setmodel(gib, smodel);
89 setorigin(gib, v_from);
90 gib.solid = SOLID_CORPSE;
91 gib.move_movetype = MOVETYPE_BOUNCE;
92 gib.movetype = MOVETYPE_BOUNCE;
94 gib.move_velocity = v_to;
95 gib.move_origin = v_from;
99 gib.drawmask = MASK_NORMAL;
100 gib.giblifetime = time + f_lifetime;
105 gib.draw = gib_draw_noburn;
108 void onslaught_generator_ray_think()
110 self.nextthink = time + 0.05;
113 self.think = SUB_Remove;
126 void onslaught_generator_ray_spawn(vector org)
130 setmodel(e, "models/onslaught/ons_ray.md3");
132 e.angles = randomvec() * 360;
134 e.scale = random() * 5 + 8;
135 e.think = onslaught_generator_ray_think;
136 e.nextthink = time + 0.05;
139 void generator_draw()
144 if(time < self.move_time)
153 if(self.count==40||self.count==20)
155 sound(self, CH_TRIGGER, "onslaught/shockwave.wav", VOL_BASE, ATTEN_NORM);
156 pointparticles(particleeffectnum("electro_combo"), self.origin, '0 0 0', 6);
164 ons_throwgib(self.origin + '0 0 40', (100 * randomvec() - '1 1 1') * 11 + '0 0 20', "models/onslaught/gen_gib1.md3", 6, TRUE);
166 ons_throwgib(self.origin + '0 0 40', (100 * randomvec() - '1 1 1') * 12 + '0 0 20', "models/onslaught/gen_gib2.md3", 6, TRUE);
168 ons_throwgib(self.origin + '0 0 40', (100 * randomvec() - '1 1 1') * 13 + '0 0 20', "models/onslaught/gen_gib3.md3", 6, TRUE);
174 org = self.origin + randompos('-30 -30 -30' * i + '0 0 -20', '30 30 30' * i + '0 0 20');
175 pointparticles(particleeffectnum("onslaught_generator_gib_explode"), org, '0 0 0', 1);
178 // Short explosion sound + small explosion
181 te_explosion(self.origin);
182 sound(self, CH_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTEN_NORM);
186 org = self.origin + randompos(self.mins + '8 8 8', self.maxs + '-8 -8 -8');
187 pointparticles(particleeffectnum("onslaught_generator_smallexplosion"), org, '0 0 0', 1);
192 onslaught_generator_ray_spawn(self.origin);
200 pointparticles(particleeffectnum("onslaught_generator_finalexplosion"), org, '0 0 0', 1);
201 sound(self, CH_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
204 self.move_time = time + 0.05;
210 void generator_damage(float hp)
213 setmodel(self, "models/onslaught/generator_dead.md3");
214 else if(hp < self.max_health * 0.10)
215 setmodel(self, "models/onslaught/generator_dmg9.md3");
216 else if(hp < self.max_health * 0.20)
217 setmodel(self, "models/onslaught/generator_dmg8.md3");
218 else if(hp < self.max_health * 0.30)
219 setmodel(self, "models/onslaught/generator_dmg7.md3");
220 else if(hp < self.max_health * 0.40)
221 setmodel(self, "models/onslaught/generator_dmg6.md3");
222 else if(hp < self.max_health * 0.50)
223 setmodel(self, "models/onslaught/generator_dmg5.md3");
224 else if(hp < self.max_health * 0.60)
225 setmodel(self, "models/onslaught/generator_dmg4.md3");
226 else if(hp < self.max_health * 0.70)
227 setmodel(self, "models/onslaught/generator_dmg3.md3");
228 else if(hp < self.max_health * 0.80)
229 setmodel(self, "models/onslaught/generator_dmg2.md3");
230 else if(hp < self.max_health * 0.90)
231 setmodel(self, "models/onslaught/generator_dmg1.md3");
232 else if(hp <= self.max_health || hp >= self.max_health)
233 setmodel(self, "models/onslaught/generator.md3");
235 setsize(self, GENERATOR_MIN, GENERATOR_MAX);
238 void generator_construct()
240 self.netname = "Generator";
242 setorigin(self, self.origin);
243 setmodel(self, "models/onslaught/generator.md3");
244 setsize(self, GENERATOR_MIN, GENERATOR_MAX);
246 self.move_movetype = MOVETYPE_NOCLIP;
247 self.solid = SOLID_BBOX;
248 self.movetype = MOVETYPE_NOCLIP;
249 self.move_origin = self.origin;
250 self.move_time = time;
251 self.drawmask = MASK_NORMAL;
253 self.draw = generator_draw;
257 void generator_changeteam()
261 self.glowmod = Team_ColorRGB(self.team - 1);
262 self.teamradar_color = Team_ColorRGB(self.team - 1);
263 self.colormap = 1024 + (self.team - 1) * 17;
267 self.colormap = 1024;
268 self.glowmod = '1 1 0';
269 self.teamradar_color = '1 1 0';
280 self.origin_x = ReadCoord();
281 self.origin_y = ReadCoord();
282 self.origin_z = ReadCoord();
283 setorigin(self, self.origin);
285 self.health = ReadByte();
286 self.max_health = ReadByte();
287 self.count = ReadByte();
288 self.team = ReadByte();
293 generator_changeteam();
294 generator_precache();
295 generator_construct();
302 if(_tmp != self.team)
305 generator_changeteam();
310 if(_tmp != self.health)
311 generator_damage(_tmp);