1 float generator_precached;
5 vector randompos(vector m1, vector m2)
9 v_x = m2_x * random() + m1_x;
10 v_y = m2_y * random() + m1_y;
11 v_z = m2_z * random() + m1_z;
15 void generator_precache()
17 if(generator_precached)
18 return; // already precached
20 precache_model("models/onslaught/generator.md3");
21 precache_model("models/onslaught/generator_dead.md3");
22 precache_model("models/onslaught/generator_dmg1.md3");
23 precache_model("models/onslaught/generator_dmg2.md3");
24 precache_model("models/onslaught/generator_dmg3.md3");
25 precache_model("models/onslaught/generator_dmg4.md3");
26 precache_model("models/onslaught/generator_dmg5.md3");
27 precache_model("models/onslaught/generator_dmg6.md3");
28 precache_model("models/onslaught/generator_dmg7.md3");
29 precache_model("models/onslaught/generator_dmg8.md3");
30 precache_model("models/onslaught/generator_dmg9.md3");
31 precache_model("models/onslaught/generator_dead.md3");
33 precache_model("models/onslaught/ons_ray.md3");
34 precache_sound("onslaught/shockwave.wav");
35 precache_sound("weapons/grenade_impact.wav");
36 precache_sound("weapons/rocket_impact.wav");
37 precache_sound("onslaught/electricity_explode.wav");
39 generator_precached = TRUE;
42 void ons_generator_ray_draw()
44 if(time < self.move_time)
47 self.move_time = time + 0.05;
64 void ons_generator_ray_spawn(vector org)
68 e.classname = "ons_ray";
69 setmodel(e, "models/onslaught/ons_ray.md3");
71 e.angles = randomvec() * 360;
73 e.movetype = MOVETYPE_NONE;
75 e.scale = random() * 5 + 8;
76 e.move_time = time + 0.05;
77 e.drawmask = MASK_NORMAL;
78 e.draw = ons_generator_ray_draw;
83 if(time < self.move_time)
88 // damaged fx (less probable the more damaged is the generator)
89 if(random() < 0.9 - self.health / self.max_health)
92 pointparticles(particleeffectnum("electro_ballexplode"), self.origin + randompos('-50 -50 -20', '50 50 50'), '0 0 0', 1);
93 sound(self, CH_TRIGGER, "onslaught/electricity_explode.wav", VOL_BASE, ATTEN_NORM);
96 pointparticles(particleeffectnum("torch_small"), self.origin + randompos('-60 -60 -20', '60 60 60'), '0 0 0', 1);
98 self.move_time = time + 0.1;
110 if(self.count==40||self.count==20)
112 sound(self, CH_TRIGGER, "onslaught/shockwave.wav", VOL_BASE, ATTEN_NORM);
113 pointparticles(particleeffectnum("electro_combo"), self.origin, '0 0 0', 6);
119 ons_generator_ray_spawn(self.origin);
125 org = self.origin + randompos('-30 -30 -30' * i + '0 0 -20', '30 30 30' * i + '0 0 20');
126 pointparticles(particleeffectnum("onslaught_generator_gib_explode"), org, '0 0 0', 1);
129 // Short explosion sound + small explosion
132 te_explosion(self.origin);
133 sound(self, CH_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTEN_NORM);
137 org = self.origin + randompos(self.mins + '8 8 8', self.maxs + '-8 -8 -8');
138 pointparticles(particleeffectnum("onslaught_generator_smallexplosion"), org, '0 0 0', 1);
145 pointparticles(particleeffectnum("onslaught_generator_finalexplosion"), org, '0 0 0', 1);
146 sound(self, CH_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
149 self.move_time = time + 0.05;
154 void generator_damage(float hp)
157 setmodel(self, "models/onslaught/generator_dead.md3");
158 else if(hp < self.max_health * 0.10)
159 setmodel(self, "models/onslaught/generator_dmg9.md3");
160 else if(hp < self.max_health * 0.20)
161 setmodel(self, "models/onslaught/generator_dmg8.md3");
162 else if(hp < self.max_health * 0.30)
163 setmodel(self, "models/onslaught/generator_dmg7.md3");
164 else if(hp < self.max_health * 0.40)
165 setmodel(self, "models/onslaught/generator_dmg6.md3");
166 else if(hp < self.max_health * 0.50)
167 setmodel(self, "models/onslaught/generator_dmg5.md3");
168 else if(hp < self.max_health * 0.60)
169 setmodel(self, "models/onslaught/generator_dmg4.md3");
170 else if(hp < self.max_health * 0.70)
171 setmodel(self, "models/onslaught/generator_dmg3.md3");
172 else if(hp < self.max_health * 0.80)
173 setmodel(self, "models/onslaught/generator_dmg2.md3");
174 else if(hp < self.max_health * 0.90)
175 setmodel(self, "models/onslaught/generator_dmg1.md3");
176 else if(hp <= self.max_health || hp >= self.max_health)
177 setmodel(self, "models/onslaught/generator.md3");
179 setsize(self, GENERATOR_MIN, GENERATOR_MAX);
182 void generator_construct()
184 self.netname = "Generator";
185 self.classname = "onslaught_generator";
187 setorigin(self, self.origin);
188 setmodel(self, "models/onslaught/generator.md3");
189 setsize(self, GENERATOR_MIN, GENERATOR_MAX);
191 self.move_movetype = MOVETYPE_NOCLIP;
192 self.solid = SOLID_BBOX;
193 self.movetype = MOVETYPE_NOCLIP;
194 self.move_origin = self.origin;
195 self.move_time = time;
196 self.drawmask = MASK_NORMAL;
198 self.draw = generator_draw;
202 void generator_changeteam()
206 self.glowmod = Team_ColorRGB(self.team - 1);
207 self.teamradar_color = Team_ColorRGB(self.team - 1);
208 self.colormap = 1024 + (self.team - 1) * 17;
212 self.colormap = 1024;
213 self.glowmod = '1 1 0';
214 self.teamradar_color = '1 1 0';
225 self.origin_x = ReadCoord();
226 self.origin_y = ReadCoord();
227 self.origin_z = ReadCoord();
228 setorigin(self, self.origin);
230 self.health = ReadByte();
231 self.max_health = ReadByte();
232 self.count = ReadByte();
233 self.team = ReadByte();
238 generator_changeteam();
239 generator_precache();
240 generator_construct();
247 if(_tmp != self.team)
250 generator_changeteam();
255 if(_tmp != self.health)
256 generator_damage(_tmp);