]> icculus.org git repositories - divverent/nexuiz.git/blob - attic/TeamNexuiz/game/gamec/tf_w_proxi.c
ctf movetype fix
[divverent/nexuiz.git] / attic / 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 vector dist;\r
170 \r
171         self.velocity = '0 0 0';\r
172         self.nextthink = (time + 1);\r
173         self.think = ProxArmed;\r
174         sound (self, 3, "sound/proxi/beep.wav", 0.3, 1);\r
175         self.playerclass = (self.playerclass + 1);\r
176 /*      if ((self.skin == self.real_owner.team_no))\r
177         {\r
178                 self.skin = 0;\r
179         }\r
180         else\r
181         {\r
182                 self.skin = self.real_owner.team_no;\r
183         }*/\r
184         //self.colormap = self.real_owner.colormap;\r
185         te = find (world, classname, "player");\r
186         while (te)\r
187         {\r
188                 if ((self.real_owner != te))\r
189                 {\r
190                         if (((te.team_no != 0) && (te.team_no != self.team_no)))\r
191                         {\r
192                                 if ((te.health > 1))\r
193                                 {\r
194                                         if (visible (te))\r
195                                         {\r
196                                                 if ((te.undercover_team != self.team_no))\r
197                                                 {\r
198                                                         dist = (te.origin - self.origin);\r
199                                                         if ((vlen (dist) < 200))\r
200                                                         {\r
201                                                                 self.height = vlen (dist);\r
202                                                                 self.enemy = te;\r
203                                                                 self.nextthink = 0.2;\r
204                                                                 self.think = FoundBastard;\r
205                                                         }\r
206                                                 }\r
207                                         }\r
208                                 }\r
209                         }\r
210                 }\r
211                 te = find (te, classname, "player");\r
212         }\r
213         if (((self.playerclass > 300) || (self.real_owner.playerclass != 3)))\r
214         {\r
215                 sprint (self.real_owner, "Your Proxi Mine Fizzled...\n");\r
216                 dremove (self);\r
217         }\r
218 };\r
219 \r
220 void () ProxAttach =\r
221 {\r
222         self.touch = SUB_Null;\r
223         self.think = ProxArmed;\r
224         self.nextthink = (time + 0.5);\r
225         sound (newmis, 0, "buttons/switch02.wav", 1, 1);\r
226 };\r
227 \r
228 void () Prox =\r
229 {\r
230         local vector org;\r
231         local vector stopspot;\r
232         local entity te;\r
233         local float proxicount;\r
234 \r
235         te = find (world, classname, "bot");\r
236         while (te)\r
237         {\r
238                 if ((te.real_owner == self))\r
239                 {\r
240                         proxicount = (proxicount + 1);\r
241                 }\r
242                 if ((proxicount >= 2))\r
243                 {\r
244                         sprint (self, "2 proximity grenades at a time!\n");\r
245                         return;\r
246                 }\r
247                 te = find (te, classname, "bot");\r
248         }\r
249         if ((self.no_grenades_2 < 2))\r
250         {\r
251                 sprint (self, "Not enough type 2 grenades... get more\n");\r
252                 if ((self.weaponmodel == "progs/proxgren.mdl"))\r
253                 {\r
254                         self.weaponmodel = "progs/v_rock2.mdl";\r
255                         self.currentammo = self.ammo_rockets;\r
256                         //Attack_Finished (0.7);\r
257                         self.impulse = 0;\r
258                         self.StatusRefreshTime = (time + 0.1);\r
259                         self.tfstate = (self.real_owner.tfstate - (self.real_owner.tfstate & 2));\r
260                 }\r
261                 return;\r
262         }/*\r
263         if ((self.weaponmodel != "progs/proxgren.mdl"))\r
264         {\r
265                 self.tfstate = (self.tfstate | 2);\r
266                 self.currentammo = 1;\r
267                 self.weaponmodel = "progs/proxgren.mdl";\r
268                 self.weaponframe = 0;\r
269                 return;\r
270         }*/\r
271         makevectors (self.v_angle);\r
272         org = (self.origin + (v_forward * 10));\r
273         org_z = (self.absmin_z + (self.size_z * 0.7));\r
274         traceline (org, (org + (v_forward * 70)), 0, self);\r
275         stopspot = (trace_endpos - (v_forward * 8));\r
276         if ((trace_fraction != 1))\r
277         {\r
278                 sound (self, 3, "buttons/switch02.wav", 1, 1);\r
279                 sprint (self, "Proximity mine set!\n");\r
280                 self.no_grenades_2 = (self.no_grenades_2 - 2);\r
281                 newmis = spawn ();\r
282                 setsize(newmis, '-16 -16 0', '16 16 48');\r
283 //              newmis.owner = self;\r
284                 newmis.real_owner = self;\r
285                 newmis.weapon = 41;\r
286                 newmis.movetype = 0;//0;\r
287                 newmis.solid = SOLID_BBOX;\r
288                 newmis.classname = "bot";\r
289                 newmis.netname = "proxi";\r
290                 newmis.team_no = self.team_no;\r
291                 newmis.health = 30;\r
292                 newmis.takedamage = 2;\r
293                 newmis.th_die = ProxiDie;\r
294                 setsize (newmis, '-2 -2 -2', '2 2 2');\r
295                 newmis.angles = '0 0 0';\r
296                 newmis.nextthink = (time + 0.5);\r
297                 newmis.playerclass = 0;\r
298                 newmis.think = ProxAttach;\r
299                 newmis.skin = 0;\r
300                 newmis.frame = 1;\r
301                 newmis.colormap = self.colormap;\r
302                 setmodel (newmis, "models/proxi/proxymine2.md3");\r
303                 setorigin (newmis, stopspot - '0 0 4');\r
304                 self.tfstate = (self.tfstate - (self.tfstate & 2));\r
305                 self.weaponmodel = "progs/v_rock2.mdl";\r
306                 self.currentammo = self.ammo_rockets;\r
307                 //Attack_Finished (0.7);\r
308                 self.impulse = 0;\r
309                 self.StatusRefreshTime = (time + 0.1);\r
310         }\r
311 };