1 void() electro_ready_01;
2 void() electro_fire1_01;
3 void() electro_fire2_01;
4 void() electro_fire3_01;
5 void() electro_deselect_01;
6 void() electro_select_01;
8 float() electro_check =
10 if (self.ammo_cells > 0)
15 void(float req) w_electro =
19 else if (req == WR_FIRE1)
20 weapon_prepareattack(electro_check, electro_check, electro_fire1_01, 0.4);
21 else if (req == WR_FIRE2)
22 weapon_prepareattack(electro_check, electro_check, electro_fire2_01, 2);
23 else if (req == WR_FIRE3)
24 weapon_prepareattack(electro_check, electro_check, electro_fire3_01, 0.4);
25 else if (req == WR_RAISE)
27 else if (req == WR_UPDATECOUNTS)
28 self.currentammo = self.ammo_cells;
29 else if (req == WR_DROP)
30 electro_deselect_01();
31 else if (req == WR_SETUP)
32 weapon_setup(WEP_ELECTRO, "w_electro.zym", IT_CELLS);
33 else if (req == WR_CHECKAMMO)
34 weapon_hasammo = electro_check();
38 void W_Electro_Touch (void)
40 WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
41 WriteByte (MSG_BROADCAST, 79);
42 WriteCoord (MSG_BROADCAST, self.origin_x);
43 WriteCoord (MSG_BROADCAST, self.origin_y);
44 WriteCoord (MSG_BROADCAST, self.origin_z);
45 WriteCoord (MSG_BROADCAST, 0); // SeienAbunae: groan... Useless clutter
46 WriteCoord (MSG_BROADCAST, 0); // Sajt: Yeah.. I agree with him
47 WriteCoord (MSG_BROADCAST, 0);
48 WriteByte (MSG_BROADCAST, 155);
49 self.event_damage = SUB_Null;
50 RadiusDamage (self, self.owner, 50, 10, 70, world, 50, IT_ELECTRO);
51 sound (self, CHAN_IMPACT, "weapons/plasmahit.wav", 1, ATTN_NORM);
55 void() W_Electro_Attack
60 postion = self.electrocount;
61 makevectors(self.v_angle);
62 sound (self, CHAN_WEAPON, "weapons/electro_fire.wav", 1, ATTN_NORM);
66 proj.classname = "spike";
68 proj.movetype = MOVETYPE_FLY;
69 proj.solid = SOLID_BBOX;
73 org = self.origin + self.view_ofs + v_forward * 18 + v_right * 7 + v_up * -9;
79 //flash.drawonlytoclient;
80 //setorigin (flash, org);
81 //setmodel (flash, "models/flash.md3");
82 //flash.velocity = v_forward * 9;
83 //flash.angles = vectoangles (flash.velocity);
84 //SUB_SetFade (flash, time + 0 + random () * 4);
86 setmodel (proj, "models/elaser.mdl");
87 setsize (proj, '0 0 0', '0 0 0');
89 setorigin (proj, self.origin + self.view_ofs + v_forward * 18 + v_right * 5 + v_up * -14);
91 setorigin (proj, self.origin + self.view_ofs + v_forward * 18 + v_right * 10 + v_up * -12);
93 setorigin (proj, self.origin + self.view_ofs + v_forward * 18 + v_right * 15 + v_up * -14);
95 proj.velocity = v_forward * 9999;
96 proj.touch = W_Electro_Touch;
97 proj.think = SUB_Remove;
98 proj.nextthink = time + 1.5;
100 proj.angles = vectoangles (proj.velocity);
102 proj.effects = proj.effects | EF_ADDITIVE;
104 self.attack_finished = time + 0.4;
105 self.ammo_cells = self.ammo_cells - 1;
108 void W_Plasma_Explode (entity ignore)
110 WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
111 WriteByte (MSG_BROADCAST, 79);
112 WriteCoord (MSG_BROADCAST, self.origin_x);
113 WriteCoord (MSG_BROADCAST, self.origin_y);
114 WriteCoord (MSG_BROADCAST, self.origin_z);
115 WriteCoord (MSG_BROADCAST, 0); // SeienAbunae: groan... Useless clutter
116 WriteCoord (MSG_BROADCAST, 0);
117 WriteCoord (MSG_BROADCAST, 0);
118 WriteByte (MSG_BROADCAST, 155);
120 te_customflash (self.origin, 5000, 10, '0 0 1');
122 self.event_damage = SUB_Null;
123 RadiusDamage (self, self.owner, 100, 50, 100, world, 50, IT_ELECTRO);
124 sound (self, CHAN_IMPACT, "weapons/plasmahit.wav", 1, ATTN_NORM);
129 void W_Plasma_Explode2 (entity ignore)
131 WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
132 WriteByte (MSG_BROADCAST, 79);
133 WriteCoord (MSG_BROADCAST, self.origin_x);
134 WriteCoord (MSG_BROADCAST, self.origin_y);
135 WriteCoord (MSG_BROADCAST, self.origin_z);
136 WriteCoord (MSG_BROADCAST, 0); // SeienAbunae: groan... Useless clutter
137 WriteCoord (MSG_BROADCAST, 0);
138 WriteCoord (MSG_BROADCAST, 0);
139 WriteByte (MSG_BROADCAST, 155);
141 te_customflash (self.origin, 5000, 10, '0 0 1');
143 self.event_damage = SUB_Null;
144 RadiusDamage (self, self.owner, 150, 50, 150, world, 150, IT_ELECTRO);
145 sound (self, CHAN_IMPACT, "weapons/plasmahit.wav", 1, ATTN_NORM);
150 void W_Plasma_FuseExplode (void)
152 W_Plasma_Explode2 (world);
155 void W_Plasma_Touch (void)
157 if (other.classname == "player" || other.classname == "corpse")
158 W_Plasma_Explode (other);
160 sound (self, CHAN_BODY, "weapons/grenade_bounce.wav", 1, ATTN_NORM);
163 void W_Plasma_Damage (vector hitloc, float damage, entity inflictor, entity attacker, float deathtype)
165 self.health = self.health - damage;
166 if (self.health <= 0)
167 W_Plasma_FuseExplode ();
170 void() W_Electro_Attack2
175 postion = self.electrocount;
176 makevectors(self.v_angle);
177 sound (self, CHAN_WEAPON, "weapons/electro_fire.wav", 1, ATTN_NORM);
179 self.punchangle_x = -4;
183 Plasma.classname = "grenade";
186 Plasma.movetype = MOVETYPE_BOUNCE;
187 Plasma.solid = SOLID_BBOX;
190 org = self.origin + self.view_ofs + v_forward * 18 + v_right * 7 + v_up * -9;
193 Plasma.takedamage = DAMAGE_YES;
194 Plasma.damageforcescale = 4;
196 Plasma.event_damage = W_Plasma_Damage;
198 setmodel (Plasma, "models/elaser.mdl");
199 setsize (Plasma, '-6 -6 -3', '6 6 3');
202 setorigin (Plasma, self.origin + self.view_ofs + v_forward * 18 + v_right * 0 + v_up * -14);
204 setorigin (Plasma, self.origin + self.view_ofs + v_forward * 18 + v_right * 10 + v_up * -12);
206 setorigin (Plasma, self.origin + self.view_ofs + v_forward * 18 + v_right * 20 + v_up * -14);
208 Plasma.velocity = v_forward * 900 + v_up * 200;
209 Plasma.angles = vectoangles (Plasma.velocity);
210 Plasma.avelocity = '0 0 0';
212 Plasma.touch = W_Plasma_Touch;
213 Plasma.think = W_Plasma_FuseExplode;
214 Plasma.nextthink = time + 2;
216 Plasma.effects = Plasma.effects | EF_ADDITIVE;
218 self.attack_finished = time + 1;
219 self.ammo_cells = self.ammo_cells - 2;
223 void() W_Electro_Attack3
229 postion = self.electrocount;
230 makevectors(self.v_angle);
231 sound (self, CHAN_WEAPON, "weapons/electro_fire.wav", 1, ATTN_NORM);
235 proj.classname = "spike";
237 proj.movetype = MOVETYPE_BOUNCEMISSILE;
238 proj.solid = SOLID_BBOX;
241 org = self.origin + self.view_ofs + v_forward * 18 + v_right * 7 + v_up * -9;
244 setmodel (proj, "models/bullet.mdl");
245 setsize (proj, '0 0 0', '0 0 0');
247 setorigin (proj, self.origin + self.view_ofs + v_forward * 18 + v_right * 5 + v_up * -14);
249 setorigin (proj, self.origin + self.view_ofs + v_forward * 18 + v_right * 10 + v_up * -12);
251 setorigin (proj, self.origin + self.view_ofs + v_forward * 18 + v_right * 15 + v_up * -14);
253 proj.velocity = v_forward * 9999;
254 proj.think = W_Electro_Touch;
255 proj.nextthink = time + 8;
257 proj.effects = proj.effects | EF_ADDITIVE;
259 self.attack_finished = time + 0.4;
260 self.ammo_cells = self.ammo_cells - 1;
267 void() electro_ready_01 = {weapon_thinkf(WFRAME_IDLE, 0.1, electro_ready_01); self.weaponentity.state = WS_READY;};
268 void() electro_select_01 = {weapon_thinkf(-1, 0.3, w_ready); weapon_boblayer1(16, '0 0 0');};
269 void() electro_deselect_01 = {weapon_thinkf(-1, 0.3, w_clear); weapon_boblayer1(16, '0 20 -40');};
270 void() electro_fire1_01 =
272 weapon_doattack(electro_check, electro_check, W_Electro_Attack);
274 self.electrocount = self.electrocount + 1;
275 if (self.electrocount == 3)
276 self.electrocount = 0;
278 weapon_thinkf(WFRAME_FIRE1, 0.3, electro_ready_01);
280 void() electro_fire2_01 =
282 weapon_doattack(electro_check, electro_check, W_Electro_Attack2);
284 self.electrocount = self.electrocount + 1;
285 if (self.electrocount == 3)
286 self.electrocount = 0;
288 weapon_thinkf(WFRAME_FIRE2, 0.3, electro_ready_01);
290 void() electro_fire3_01 =
292 weapon_doattack(electro_check, electro_check, W_Electro_Attack3);
294 self.electrocount = self.electrocount + 1;
295 if (self.electrocount == 3)
296 self.electrocount = 0;
298 weapon_thinkf(WFRAME_FIRE2, 0.3, electro_ready_01);