]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/tf_w_proxi.c
- Added Proximity Mine code
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / tf_w_proxi.c
1 /*-==============================\r
2                 MegaTF Proxi Grenade\r
3 ==============================-*/\r
4 \r
5 void () s_explode1 = [ 0, s_explode2 ]\r
6 {\r
7 };\r
8 \r
9 void () s_explode2 = [ 1, s_explode3 ]\r
10 {\r
11 };\r
12 \r
13 void () s_explode3 = [ 2, s_explode4 ]\r
14 {\r
15 };\r
16 \r
17 void () s_explode4 = [ 3, s_explode5 ]\r
18 {\r
19 };\r
20 \r
21 void () s_explode5 = [ 4, s_explode6 ]\r
22 {\r
23 };\r
24 \r
25 void () s_explode6 = [ 5, SUB_Remove ]\r
26 {\r
27 };\r
28 \r
29 void () s2_explode1 = [ 0, s2_explode2 ]\r
30 {\r
31 };\r
32 \r
33 void () s2_explode2 = [ 1, s2_explode3 ]\r
34 {\r
35 };\r
36 \r
37 void () s2_explode3 = [ 2, s2_explode4 ]\r
38 {\r
39 };\r
40 \r
41 void () s2_explode4 = [ 3, s2_explode5 ]\r
42 {\r
43 };\r
44 \r
45 void () s2_explode5 = [ 4, s2_explode6 ]\r
46 {\r
47 };\r
48 \r
49 void () s2_explode6 = [ 5, s2_explode7 ]\r
50 {\r
51 };\r
52 \r
53 void () s2_explode7 = [ 6, s2_explode8 ]\r
54 {\r
55 };\r
56 \r
57 void () s2_explode8 = [ 7, SUB_Remove ]\r
58 {\r
59 };\r
60 \r
61 void () MushroomFlame =\r
62 {\r
63         local entity t_ent;\r
64 \r
65         t_ent = spawn ();\r
66         t_ent.real_owner = self;\r
67         t_ent.movetype = 9;\r
68         t_ent.solid = 0;\r
69         t_ent.classname = "flamerflame";\r
70 //      t_ent.effects = 4;\r
71         if ((self.classname == "airstrike"))\r
72         {\r
73                 t_ent.velocity_x = (random () * 1000);\r
74         }\r
75         vector  org2;\r
76         org2 = findbetterlocation (t_ent.origin);\r
77         te_explosion (org2);\r
78         effect (org2, "models/sprites/rocketexplosion.spr32", 0, 20, 40);\r
79 \r
80         t_ent.velocity_y = (random () * 1000);\r
81         t_ent.velocity_z = 200;\r
82         t_ent.think = s_explode1;\r
83         t_ent.nextthink = (time + 0.300000);\r
84         setmodel (t_ent, "progs/s_explod.spr");\r
85 //      setmodel (t_ent, "models/sprites/rocketexplosion.spr32");\r
86         \r
87         setsize (t_ent, '0 0 0', '0 0 0');\r
88         setorigin (t_ent, (self.origin + '0 0 16'));\r
89 \r
90 \r
91 };\r
92 \r
93 void () Prox_Disarm =\r
94 {\r
95         if ((other.classname != "player"))\r
96         {\r
97                 return;\r
98         }\r
99         if (((other.playerclass == 1) && (other.team_no != self.team_no)))\r
100         {\r
101                 sprint (self.real_owner, "Your Proxi Mine Has Been Disarmed...\n");\r
102                 bprint (self.real_owner.netname);\r
103                 bprint ("'s proxi was defused by ");\r
104                 bprint (self.enemy.netname);\r
105                 bprint ("\n");\r
106                 //logfrag (self.real_owner, self.enemy.real_owner);\r
107                 self.enemy.real_frags = (self.enemy.real_frags + 1);\r
108                 if (!(toggleflags & 128))\r
109                 {\r
110                         self.enemy.frags = self.enemy.real_frags;\r
111                 }\r
112                 dremove (self);\r
113         }\r
114         return;\r
115 };\r
116 \r
117 void () ProxiDie =\r
118 {\r
119         vector  org2;\r
120         org2 = findbetterlocation (self.origin);\r
121         te_explosion (org2);\r
122         effect (org2, "models/sprites/rocketexplosion.spr32", 0, 20, 40);\r
123 \r
124         self.effects = 4;\r
125         //make_explosion ();\r
126         self.takedamage = 0;\r
127         deathmsg = 45;\r
128         T_RadiusDamage (self, self.real_owner, 200, world);\r
129         sprint (self.real_owner, "Your Proxi Mine is gone...\n");\r
130         dremove (self);\r
131 };\r
132 \r
133 void () FoundBastard =\r
134 {\r
135         local float dist;\r
136 \r
137         self.touch = Prox_Disarm;\r
138         sound (self, 3, "sound/proxi/beep.wav", 1, 1);\r
139         self.skin = (self.real_owner.team_no + 3);\r
140         dist = vlen ((self.enemy.origin - self.origin));\r
141         if ((dist <= self.height))\r
142         {\r
143                 self.height = dist;\r
144                 self.nextthink = (time + ((dist / 1000) * 1.5));\r
145                 self.think = FoundBastard;\r
146         }\r
147         else\r
148         {\r
149                 self.effects = 4;\r
150                 //make_explosion ();\r
151                 MushroomFlame ();\r
152                 WriteByte (4, 23);\r
153                 WriteByte (4, 3);\r
154                 WriteCoord (4, self.origin_x);\r
155                 WriteCoord (4, self.origin_y);\r
156                 WriteCoord (4, self.origin_z);\r
157                 //multicast (self.origin, 1);\r
158                 deathmsg = 45;\r
159                 sprint (self.real_owner, "Proxi Mine is gone...\n");\r
160                 self.takedamage = 0;\r
161                 T_RadiusDamage (self, self.real_owner, 200, world);\r
162                 dremove (self);\r
163         }\r
164 };\r
165 \r
166 void () ProxArmed =\r
167 {\r
168         local entity te;\r
169         local entity tl;\r
170         local vector dist;\r
171 \r
172         self.velocity = '0 0 0';\r
173         self.nextthink = (time + 1);\r
174         self.think = ProxArmed;\r
175         sound (self, 3, "sound/proxi/beep.wav", 0.3, 1);\r
176         self.playerclass = (self.playerclass + 1);\r
177 /*      if ((self.skin == self.real_owner.team_no))\r
178         {\r
179                 self.skin = 0;\r
180         }\r
181         else\r
182         {\r
183                 self.skin = self.real_owner.team_no;\r
184         }*/\r
185         //self.colormap = self.real_owner.colormap;\r
186         te = find (world, classname, "player");\r
187         while (te)\r
188         {\r
189                 if ((self.real_owner != te))\r
190                 {\r
191                         if (((te.team_no != 0) && (te.team_no != self.team_no)))\r
192                         {\r
193                                 if ((te.health > 1))\r
194                                 {\r
195                                         if (visible (te))\r
196                                         {\r
197                                                 if ((te.undercover_team != self.team_no))\r
198                                                 {\r
199                                                         dist = (te.origin - self.origin);\r
200                                                         if ((vlen (dist) < 200))\r
201                                                         {\r
202                                                                 self.height = vlen (dist);\r
203                                                                 self.enemy = te;\r
204                                                                 self.nextthink = 0.2;\r
205                                                                 self.think = FoundBastard;\r
206                                                         }\r
207                                                 }\r
208                                         }\r
209                                 }\r
210                         }\r
211                 }\r
212                 te = find (te, classname, "player");\r
213         }\r
214         if (((self.playerclass > 300) || (self.real_owner.playerclass != 3)))\r
215         {\r
216                 sprint (self.real_owner, "Your Proxi Mine Fizzled...\n");\r
217                 dremove (self);\r
218         }\r
219 };\r
220 \r
221 void () ProxAttach =\r
222 {\r
223         self.touch = SUB_Null;\r
224         self.think = ProxArmed;\r
225         self.nextthink = (time + 0.5);\r
226         sound (newmis, 0, "buttons/switch02.wav", 1, 1);\r
227 };\r
228 \r
229 void () Prox =\r
230 {\r
231         local vector org;\r
232         local vector stopspot;\r
233         local entity te;\r
234         local float proxicount;\r
235 \r
236         te = find (world, classname, "bot");\r
237         while (te)\r
238         {\r
239                 if ((te.real_owner == self))\r
240                 {\r
241                         proxicount = (proxicount + 1);\r
242                 }\r
243                 if ((proxicount >= 2))\r
244                 {\r
245                         sprint (self, "2 proximity grenades at a time!\n");\r
246                         return;\r
247                 }\r
248                 te = find (te, classname, "bot");\r
249         }\r
250         if ((self.no_grenades_2 < 2))\r
251         {\r
252                 sprint (self, "Not enough type 2 grenades... get more\n");\r
253                 if ((self.weaponmodel == "progs/proxgren.mdl"))\r
254                 {\r
255                         self.weaponmodel = "progs/v_rock2.mdl";\r
256                         self.currentammo = self.ammo_rockets;\r
257                         //Attack_Finished (0.7);\r
258                         self.impulse = 0;\r
259                         self.StatusRefreshTime = (time + 0.1);\r
260                         self.tfstate = (self.real_owner.tfstate - (self.real_owner.tfstate & 2));\r
261                 }\r
262                 return;\r
263         }/*\r
264         if ((self.weaponmodel != "progs/proxgren.mdl"))\r
265         {\r
266                 self.tfstate = (self.tfstate | 2);\r
267                 self.currentammo = 1;\r
268                 self.weaponmodel = "progs/proxgren.mdl";\r
269                 self.weaponframe = 0;\r
270                 return;\r
271         }*/\r
272         makevectors (self.v_angle);\r
273         org = (self.origin + (v_forward * 10));\r
274         org_z = (self.absmin_z + (self.size_z * 0.7));\r
275         traceline (org, (org + (v_forward * 70)), 0, self);\r
276         stopspot = (trace_endpos - (v_forward * 8));\r
277         if ((trace_fraction != 1))\r
278         {\r
279                 sound (self, 3, "buttons/switch02.wav", 1, 1);\r
280                 sprint (self, "Proximity mine set!\n");\r
281                 self.no_grenades_2 = (self.no_grenades_2 - 2);\r
282                 newmis = spawn ();\r
283                 setsize(newmis, '-16 -16 0', '16 16 48');\r
284 //              newmis.owner = self;\r
285                 newmis.real_owner = self;\r
286                 newmis.weapon = 41;\r
287                 newmis.movetype = 0;//0;\r
288                 newmis.solid = SOLID_BBOX;\r
289                 newmis.classname = "bot";\r
290                 newmis.netname = "proxi";\r
291                 newmis.team_no = self.team_no;\r
292                 newmis.health = 30;\r
293                 newmis.takedamage = 2;\r
294                 newmis.th_die = ProxiDie;\r
295                 setsize (newmis, '-2 -2 -2', '2 2 2');\r
296                 newmis.angles = '0 0 0';\r
297                 newmis.nextthink = (time + 0.5);\r
298                 newmis.playerclass = 0;\r
299                 newmis.think = ProxAttach;\r
300                 newmis.skin = 0;\r
301                 newmis.frame = 1;\r
302                 newmis.colormap = self.colormap;\r
303                 setmodel (newmis, "models/proxi/proxymine2.md3");\r
304                 setorigin (newmis, stopspot - '0 0 4');\r
305                 self.tfstate = (self.tfstate - (self.tfstate & 2));\r
306                 self.weaponmodel = "progs/v_rock2.mdl";\r
307                 self.currentammo = self.ammo_rockets;\r
308                 //Attack_Finished (0.7);\r
309                 self.impulse = 0;\r
310                 self.StatusRefreshTime = (time + 0.1);\r
311         }\r
312 };