1 #include "cl_generator.qh"
8 void ons_generator_ray_draw(entity this)
10 if(time < self.move_time)
13 self.move_time = time + 0.05;
30 void ons_generator_ray_spawn(vector org)
32 entity e = new(ons_ray);
33 setmodel(e, MDL_ONS_RAY);
35 e.angles = randomvec() * 360;
37 e.movetype = MOVETYPE_NONE;
39 e.scale = random() * 5 + 8;
40 e.move_time = time + 0.05;
41 e.drawmask = MASK_NORMAL;
42 e.draw = ons_generator_ray_draw;
45 void generator_draw(entity this)
47 if(time < self.move_time)
52 // damaged fx (less probable the more damaged is the generator)
53 if(random() < 0.9 - self.health / self.max_health)
56 pointparticles(EFFECT_ELECTRO_BALLEXPLODE, self.origin + randompos('-50 -50 -20', '50 50 50'), '0 0 0', 1);
57 sound(self, CH_TRIGGER, SND_ONS_ELECTRICITY_EXPLODE, VOL_BASE, ATTEN_NORM);
60 pointparticles(EFFECT_ONS_GENERATOR_DAMAGED, self.origin + randompos('-60 -60 -20', '60 60 60'), '0 0 0', 1);
62 self.move_time = time + 0.1;
74 if(self.count==40||self.count==20)
76 sound(self, CH_TRIGGER, SND_ONS_SHOCKWAVE, VOL_BASE, ATTEN_NORM);
77 pointparticles(EFFECT_ELECTRO_COMBO, self.origin, '0 0 0', 6);
83 ons_generator_ray_spawn(self.origin);
89 org = self.origin + randompos('-30 -30 -30' * i + '0 0 -20', '30 30 30' * i + '0 0 20');
90 pointparticles(EFFECT_ONS_GENERATOR_GIB, org, '0 0 0', 1);
93 // Short explosion sound + small explosion
96 te_explosion(self.origin);
97 sound(self, CH_TRIGGER, SND_GRENADE_IMPACT, VOL_BASE, ATTEN_NORM);
101 org = self.origin + randompos(self.mins + '8 8 8', self.maxs + '-8 -8 -8');
102 pointparticles(EFFECT_ONS_GENERATOR_EXPLODE, org, '0 0 0', 1);
109 pointparticles(EFFECT_ONS_GENERATOR_EXPLODE2, org, '0 0 0', 1);
110 sound(self, CH_TRIGGER, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
113 self.move_time = time + 0.05;
118 void generator_damage(float hp)
121 setmodel(self, MDL_ONS_GEN_DEAD);
122 else if(hp < self.max_health * 0.10)
123 setmodel(self, MDL_ONS_GEN9);
124 else if(hp < self.max_health * 0.20)
125 setmodel(self, MDL_ONS_GEN8);
126 else if(hp < self.max_health * 0.30)
127 setmodel(self, MDL_ONS_GEN7);
128 else if(hp < self.max_health * 0.40)
129 setmodel(self, MDL_ONS_GEN6);
130 else if(hp < self.max_health * 0.50)
131 setmodel(self, MDL_ONS_GEN5);
132 else if(hp < self.max_health * 0.60)
133 setmodel(self, MDL_ONS_GEN4);
134 else if(hp < self.max_health * 0.70)
135 setmodel(self, MDL_ONS_GEN3);
136 else if(hp < self.max_health * 0.80)
137 setmodel(self, MDL_ONS_GEN2);
138 else if(hp < self.max_health * 0.90)
139 setmodel(self, MDL_ONS_GEN1);
140 else if(hp <= self.max_health || hp >= self.max_health)
141 setmodel(self, MDL_ONS_GEN);
143 setsize(self, GENERATOR_MIN, GENERATOR_MAX);
146 void generator_construct()
148 self.netname = "Generator";
149 self.classname = "onslaught_generator";
151 setorigin(self, self.origin);
152 setmodel(self, MDL_ONS_GEN);
153 setsize(self, GENERATOR_MIN, GENERATOR_MAX);
155 self.move_movetype = MOVETYPE_NOCLIP;
156 self.solid = SOLID_BBOX;
157 self.movetype = MOVETYPE_NOCLIP;
158 self.move_origin = self.origin;
159 self.move_time = time;
160 self.drawmask = MASK_NORMAL;
162 self.draw = generator_draw;
166 void generator_changeteam()
170 self.glowmod = Team_ColorRGB(self.team - 1);
171 self.teamradar_color = Team_ColorRGB(self.team - 1);
172 self.colormap = 1024 + (self.team - 1) * 17;
176 self.colormap = 1024;
177 self.glowmod = '1 1 0';
178 self.teamradar_color = '1 1 0';
182 NET_HANDLE(ENT_CLIENT_GENERATOR, bool isnew)
189 self.origin_x = ReadCoord();
190 self.origin_y = ReadCoord();
191 self.origin_z = ReadCoord();
192 setorigin(self, self.origin);
194 self.health = ReadByte();
195 self.max_health = ReadByte();
196 self.count = ReadByte();
197 self.team = ReadByte();
202 generator_changeteam();
203 generator_construct();
210 if(_tmp != self.team)
213 generator_changeteam();
218 if(_tmp != self.health)
219 generator_damage(_tmp);