1 #include "generator.qh"
3 bool generator_precached;
7 void generator_precache()
9 if(generator_precached)
10 return; // already precached
12 precache_model("models/onslaught/generator.md3");
13 precache_model("models/onslaught/generator_dead.md3");
14 precache_model("models/onslaught/generator_dmg1.md3");
15 precache_model("models/onslaught/generator_dmg2.md3");
16 precache_model("models/onslaught/generator_dmg3.md3");
17 precache_model("models/onslaught/generator_dmg4.md3");
18 precache_model("models/onslaught/generator_dmg5.md3");
19 precache_model("models/onslaught/generator_dmg6.md3");
20 precache_model("models/onslaught/generator_dmg7.md3");
21 precache_model("models/onslaught/generator_dmg8.md3");
22 precache_model("models/onslaught/generator_dmg9.md3");
23 precache_model("models/onslaught/generator_dead.md3");
25 precache_model("models/onslaught/ons_ray.md3");
26 precache_sound("onslaught/shockwave.wav");
27 precache_sound(W_Sound("grenade_impact"));
28 precache_sound(W_Sound("rocket_impact"));
29 precache_sound("onslaught/electricity_explode.wav");
31 generator_precached = true;
34 void ons_generator_ray_draw()
36 if(time < self.move_time)
39 self.move_time = time + 0.05;
56 void ons_generator_ray_spawn(vector org)
60 e.classname = "ons_ray";
61 setmodel(e, "models/onslaught/ons_ray.md3");
63 e.angles = randomvec() * 360;
65 e.movetype = MOVETYPE_NONE;
67 e.scale = random() * 5 + 8;
68 e.move_time = time + 0.05;
69 e.drawmask = MASK_NORMAL;
70 e.draw = ons_generator_ray_draw;
75 if(time < self.move_time)
80 // damaged fx (less probable the more damaged is the generator)
81 if(random() < 0.9 - self.health / self.max_health)
84 pointparticles(particleeffectnum(EFFECT_ELECTRO_BALLEXPLODE), self.origin + randompos('-50 -50 -20', '50 50 50'), '0 0 0', 1);
85 sound(self, CH_TRIGGER, "onslaught/electricity_explode.wav", VOL_BASE, ATTEN_NORM);
88 pointparticles(particleeffectnum(EFFECT_ONS_GENERATOR_DAMAGED), self.origin + randompos('-60 -60 -20', '60 60 60'), '0 0 0', 1);
90 self.move_time = time + 0.1;
102 if(self.count==40||self.count==20)
104 sound(self, CH_TRIGGER, "onslaught/shockwave.wav", VOL_BASE, ATTEN_NORM);
105 pointparticles(particleeffectnum(EFFECT_ELECTRO_COMBO), self.origin, '0 0 0', 6);
111 ons_generator_ray_spawn(self.origin);
117 org = self.origin + randompos('-30 -30 -30' * i + '0 0 -20', '30 30 30' * i + '0 0 20');
118 pointparticles(particleeffectnum(EFFECT_ONS_GENERATOR_GIB), org, '0 0 0', 1);
121 // Short explosion sound + small explosion
124 te_explosion(self.origin);
125 sound(self, CH_TRIGGER, W_Sound("grenade_impact"), VOL_BASE, ATTEN_NORM);
129 org = self.origin + randompos(self.mins + '8 8 8', self.maxs + '-8 -8 -8');
130 pointparticles(particleeffectnum(EFFECT_ONS_GENERATOR_EXPLODE), org, '0 0 0', 1);
137 pointparticles(particleeffectnum(EFFECT_ONS_GENERATOR_EXPLODE2), org, '0 0 0', 1);
138 sound(self, CH_TRIGGER, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
141 self.move_time = time + 0.05;
146 void generator_damage(float hp)
149 setmodel(self, "models/onslaught/generator_dead.md3");
150 else if(hp < self.max_health * 0.10)
151 setmodel(self, "models/onslaught/generator_dmg9.md3");
152 else if(hp < self.max_health * 0.20)
153 setmodel(self, "models/onslaught/generator_dmg8.md3");
154 else if(hp < self.max_health * 0.30)
155 setmodel(self, "models/onslaught/generator_dmg7.md3");
156 else if(hp < self.max_health * 0.40)
157 setmodel(self, "models/onslaught/generator_dmg6.md3");
158 else if(hp < self.max_health * 0.50)
159 setmodel(self, "models/onslaught/generator_dmg5.md3");
160 else if(hp < self.max_health * 0.60)
161 setmodel(self, "models/onslaught/generator_dmg4.md3");
162 else if(hp < self.max_health * 0.70)
163 setmodel(self, "models/onslaught/generator_dmg3.md3");
164 else if(hp < self.max_health * 0.80)
165 setmodel(self, "models/onslaught/generator_dmg2.md3");
166 else if(hp < self.max_health * 0.90)
167 setmodel(self, "models/onslaught/generator_dmg1.md3");
168 else if(hp <= self.max_health || hp >= self.max_health)
169 setmodel(self, "models/onslaught/generator.md3");
171 setsize(self, GENERATOR_MIN, GENERATOR_MAX);
174 void generator_construct()
176 self.netname = "Generator";
177 self.classname = "onslaught_generator";
179 setorigin(self, self.origin);
180 setmodel(self, "models/onslaught/generator.md3");
181 setsize(self, GENERATOR_MIN, GENERATOR_MAX);
183 self.move_movetype = MOVETYPE_NOCLIP;
184 self.solid = SOLID_BBOX;
185 self.movetype = MOVETYPE_NOCLIP;
186 self.move_origin = self.origin;
187 self.move_time = time;
188 self.drawmask = MASK_NORMAL;
190 self.draw = generator_draw;
194 void generator_changeteam()
198 self.glowmod = Team_ColorRGB(self.team - 1);
199 self.teamradar_color = Team_ColorRGB(self.team - 1);
200 self.colormap = 1024 + (self.team - 1) * 17;
204 self.colormap = 1024;
205 self.glowmod = '1 1 0';
206 self.teamradar_color = '1 1 0';
216 self.origin_x = ReadCoord();
217 self.origin_y = ReadCoord();
218 self.origin_z = ReadCoord();
219 setorigin(self, self.origin);
221 self.health = ReadByte();
222 self.max_health = ReadByte();
223 self.count = ReadByte();
224 self.team = ReadByte();
229 generator_changeteam();
230 generator_precache();
231 generator_construct();
238 if(_tmp != self.team)
241 generator_changeteam();
246 if(_tmp != self.health)
247 generator_damage(_tmp);