]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/tfgrenades.c
Fixed GUI menu flicker and added support to select Yellow and Green (pink in GUI...
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / tfgrenades.c
1 entity msg_entity;\r
2 void () TeamFortress_GrenadePrimed;\r
3 .float grenade_timer;\r
4 .float FlashTime;\r
5 void () CP_Timer;\r
6 \r
7 /*=======================\r
8  General grenade explode\r
9  ======================*/\r
10 void () GrenadeExplode =\r
11 {\r
12         local entity te;\r
13 \r
14 /*      if (self.voided)\r
15         {\r
16                 return;\r
17         }\r
18         self.voided = 1;\r
19         if ((self.classname == "pipebomb"))\r
20         {\r
21                 num_world_pipebombs = (num_world_pipebombs - 1);\r
22                 decrement_team_pipebombs (self.team_no);\r
23                 if (!(self.flags & 512))\r
24                 {\r
25                         self.weapon = 40;\r
26                 }\r
27         }*/\r
28         if ((self.owner.has_disconnected != 1))\r
29         {\r
30                 deathmsg = self.weapon;\r
31                 T_RadiusDamage (self, self.owner, 120, world);\r
32         }\r
33 /*      if ((self.no_active_nail_grens != 0))\r
34         {\r
35                 self.no_active_nail_grens = 0;\r
36                 self.owner.no_active_nail_grens = (self.owner.no_active_nail_grens - 1);\r
37                 te = find (world, classname, "grenade");\r
38                 while (te)\r
39                 {\r
40                         if (((te.owner == self.owner) && (te.no_active_nail_grens != 0)))\r
41                         {\r
42                                 te.no_active_nail_grens = (te.no_active_nail_grens - 1);\r
43                         }\r
44                         te = find (te, classname, "grenade");\r
45                 }\r
46         }*/\r
47         WriteByte (0, 23);\r
48         WriteByte (0, 3);\r
49         WriteCoord (0, self.origin_x);\r
50         WriteCoord (0, self.origin_y);\r
51         WriteCoord (0, self.origin_z);\r
52         BecomeExplosion ();\r
53 };\r
54 \r
55 // TF Recoil? Anyhoo, this entity causes oddities :/\r
56 void(float psize, entity p) KickPlayer = \r
57 {\r
58         return;                 // temp\r
59         msg_entity = p;\r
60         if (psize > -3)\r
61         {\r
62                 WriteByte(1, 34);\r
63         }\r
64         else\r
65         {\r
66                 WriteByte(1, 35);\r
67         }\r
68 };\r
69 \r
70 /* ================\r
71  Flash grenade\r
72   ===============*/\r
73 void () FlashGrenadeTouch =\r
74 {\r
75         sound (self, 1, "weapons/bounce.wav", 1, 1);\r
76         if ((self.velocity == '0 0 0'))\r
77         {\r
78                 self.avelocity = '0 0 0';\r
79         }\r
80 };\r
81 \r
82 void () FlashTimer =\r
83 {\r
84         local entity te;\r
85         local string st;\r
86 \r
87         te = self.owner;\r
88         te.FlashTime = (te.FlashTime - 0.100000);\r
89         if ((te.FlashTime <= 0.000000))\r
90         {\r
91                 te.FlashTime = 0.000000;\r
92                 stuffcmd (te, "v_cshift 0\n");\r
93                 stuffcmd (te, "r_bloom_power 2\n");\r
94                 stuffcmd (te, "r_bloom_intensity 1.5\n");\r
95                 remove (self);\r
96                 return;\r
97         }\r
98         if ((te.FlashTime < 1.700000))\r
99         {\r
100                 st = ftos ((te.FlashTime * 150.000000));\r
101 // lets add a bloom check later?\r
102 /*\r
103 <LordHavoc> avirox: stuffcmd(self, "cmd mycvar $mycvar\n");\r
104 <LordHavoc> avirox: then later in your SV_ParseClientCommand() qc function you'll see a string come in like "mycvar 1"\r
105 */              \r
106                 stuffcmd (te, "v_cshift ");\r
107                 stuffcmd (te, st);\r
108                 stuffcmd (te, " ");\r
109                 stuffcmd (te, st);\r
110                 stuffcmd (te, " ");\r
111                 stuffcmd (te, st);\r
112                 stuffcmd (te, " ");\r
113                 stuffcmd (te, st);\r
114                 stuffcmd (te, "\n");\r
115 \r
116                 // BLOOM!!! :D\r
117                 stuffcmd (te, "r_bloom_power 1\n");\r
118 \r
119                 st = ftos(2 + (te.FlashTime * 10));\r
120                 stuffcmd (te, "r_bloom_intensity ");\r
121                 stuffcmd (te, st);\r
122                 stuffcmd (te, "\n");\r
123                 \r
124         }\r
125         if ((te.FlashTime >= 1.700000))\r
126         {\r
127                 stuffcmd (te, "v_cshift 255 255 255 255\n");\r
128         }\r
129         if ((te.FlashTime <= 0.000000))\r
130         {\r
131                 te.FlashTime = 0.000000;\r
132                 stuffcmd (te, "v_cshift 0\n");\r
133                 stuffcmd (te, "r_bloom_power 2\n");\r
134                 stuffcmd (te, "r_bloom_intensity 1.5\n");\r
135                 remove (self);\r
136                 return;\r
137         }\r
138         self.nextthink = (time + 0.100000);\r
139 };\r
140 \r
141 void () FlashGrenadeExplode =\r
142 {\r
143         local float expsize;\r
144         local entity te;\r
145         local entity oldself;\r
146         local string st;\r
147 \r
148         self.effects = (self.effects | 4);\r
149         WriteByte (0, 23);\r
150         WriteByte (0, 4);\r
151         WriteCoord (0, self.origin_x);\r
152         WriteCoord (0, self.origin_y);\r
153         WriteCoord (0, self.origin_z);\r
154         te = findradius (self.origin, 300);\r
155         while (te)\r
156         {\r
157                 if ((te.classname == "player" && te.team_no != self.owner.team_no || te == self.owner))\r
158                 {\r
159                         traceline (self.origin, te.origin, 1, self);\r
160                         if ((trace_fraction == 1))\r
161                         {\r
162                                 if ((vlen ((self.origin - te.origin)) <= 200))\r
163                                 {\r
164                                         deathmsg = 35;\r
165                                         TF_T_Damage (te, self, self.owner, 60, 2, (16 | 4));\r
166                                 }\r
167                                 if (te.health > TF_FLARE_LIT)\r
168                                 {\r
169                                         if (te.FlashTime == TF_FLARE_LIT)\r
170                                         {\r
171                                                 newmis = spawn ();\r
172                                                 newmis.classname = "timer";\r
173                                                 newmis.netname = "flashtimer";\r
174                                                 newmis.team_no = self.owner.team_no;\r
175                                                 newmis.owner = te;\r
176                                                 newmis.think = FlashTimer;\r
177                                                 newmis.nextthink = (time + 0.100000);\r
178                                         }\r
179                                         te.FlashTime = 4.500000;\r
180                                         stuffcmd (te, "v_cshift 255 255 255 255\n");\r
181                                 }\r
182                         }\r
183                 }\r
184                 te = te.chain;\r
185         }\r
186         BecomeExplosion ();\r
187 };\r
188 \r
189 /*=============\r
190  Nail Grenade\r
191  ============*/\r
192 void() NailGrenadeTouch;\r
193 void() NailGrenadeExplode;\r
194 void() NailGrenadeNailEm;\r
195 void() NailGrenadeLaunchNail;\r
196 void() GrenadeExplode;\r
197 \r
198 void() NailGrenadeTouch = \r
199 {\r
200         if (other == self.owner)\r
201         {\r
202                 return;\r
203         }\r
204         sound(self, TF_FLARE_OFF, "weapons/bounce.wav", TF_FLARE_OFF, TF_FLARE_OFF);\r
205         if (self.velocity == '0 0 0')\r
206         {\r
207                 self.avelocity = '0 0 0';\r
208         }\r
209 };\r
210 \r
211 void() NailGrenadeExplode = \r
212 {\r
213         self.movetype = 5;\r
214         setorigin(self, self.origin + '0 0 32');\r
215         self.avelocity = '0 500 0';\r
216         self.nextthink = time + 0.7;\r
217         self.think = NailGrenadeNailEm;\r
218 };\r
219 \r
220 void() NailGrenadeNailEm = \r
221 {\r
222         self.velocity = '0 0 0';\r
223         self.nextthink = time + 0.1;\r
224         self.think = NailGrenadeLaunchNail;\r
225         self.playerclass = TF_FLARE_LIT;\r
226 };\r
227 \r
228 void() NailGrenadeLaunchNail = \r
229 {\r
230         local float i;\r
231         local float j;\r
232         i = TF_FLARE_LIT;\r
233         while (i < TF_FLARE_OFF)\r
234         {\r
235                 j = (random() + 2) * 5;\r
236                 current_yaw = anglemod(self.angles_y + j);\r
237                 self.angles_y = current_yaw;\r
238                 self.angles_x = TF_FLARE_LIT;\r
239                 self.angles_z = TF_FLARE_LIT;\r
240                 makevectors(self.angles);\r
241                 deathmsg = 99;                  //temp\r
242                 launch_spike(self.origin, v_forward);\r
243                 newmis.touch = superspike_touch;\r
244                 newmis.weapon = 9;\r
245                 i = i + TF_FLARE_OFF;\r
246         }\r
247         self.playerclass = self.playerclass + TF_FLARE_OFF;\r
248         self.nextthink = time + 0.1;\r
249         if (self.playerclass > 40)\r
250         {\r
251                 self.weapon = 9;\r
252                 self.think = GrenadeExplode;\r
253         }\r
254 };\r
255 \r
256 /*=====================\r
257   TF Gren Prime Code\r
258   ===================*/\r
259 \r
260 void() TeamFortress_ExplodePerson = \r
261 {\r
262         local entity te;\r
263         self.owner.tfstate = self.owner.tfstate - (self.owner.tfstate & 1);\r
264         KickPlayer(-2, self.owner);             // Doesnt wanna work right\r
265         newmis = spawn();\r
266         newmis.movetype = 10;\r
267         newmis.solid = 2;\r
268         newmis.classname = "grenade";\r
269         newmis.team_no = self.owner.team_no;\r
270         newmis.owner = self.owner;\r
271         newmis.velocity = '0 0 0';\r
272         newmis.angles = vectoangles(newmis.velocity);\r
273         newmis.think = SUB_Null;\r
274 //      newmis.think = NormalGrenadeExplode;\r
275         newmis.nextthink = time + 0.1;\r
276         if (self.weapon == 1)\r
277         {\r
278                 newmis.touch = NormalGrenadeTouch;\r
279                 newmis.think = NormalGrenadeExplode;\r
280                 newmis.skin = 0;\r
281                 newmis.avelocity = '300 300 300';\r
282                 self.owner.velocity = (((v_forward * 900) + '0 0 250') + (v_up * 100)); // Shoot the player hehe\r
283 //              setmodel(newmis, "progs/hgren2.mdl");\r
284                 setmodel(newmis, "models/grenades/fragnade.md3");\r
285                 \r
286         }\r
287         else\r
288 /*      {\r
289                 if (self.weapon == 2)\r
290                 {\r
291                         newmis.touch = ConcussionGrenadeTouch;\r
292                         newmis.think = ConcussionGrenadeExplode;\r
293                         newmis.skin = 1;\r
294                         newmis.avelocity = '300 300 300';\r
295                         setmodel(newmis, "progs/hgren2.mdl");\r
296                 }\r
297                 else\r
298                 {*/\r
299                         if (self.weapon == 3)\r
300                         {\r
301                                 newmis.touch = NailGrenadeTouch;\r
302                                 newmis.think = NailGrenadeExplode;\r
303                                 newmis.skin = 1;\r
304                                 newmis.avelocity = '0 300 0';\r
305                                 setmodel(newmis, "progs/biggren.mdl");\r
306                         }/*\r
307                         else\r
308                         {\r
309                                 if (self.weapon == 4)\r
310                                 {\r
311                                         newmis.touch = MirvGrenadeTouch;\r
312                                         newmis.think = MirvGrenadeExplode;\r
313                                         newmis.skin = 0;\r
314                                         newmis.avelocity = '0 300 0';\r
315                                         setmodel(newmis, "progs/biggren.mdl");\r
316                                 }\r
317                                 else\r
318                                 {\r
319                                         if (self.weapon == 5)\r
320                                         {\r
321                                                 newmis.touch = NapalmGrenadeTouch;\r
322                                                 newmis.think = NapalmGrenadeExplode;\r
323                                                 newmis.skin = 2;\r
324                                                 newmis.avelocity = '0 300 0';\r
325                                                 setmodel(newmis, "progs/biggren.mdl");\r
326                                         }\r
327                                         else\r
328                                         {\r
329                                                 if (self.weapon == 6)\r
330                                                 {\r
331                                                         sprint(self.owner, "Flare lit.\n");\r
332                                                         te = spawn();\r
333                                                         te.touch = SUB_Null;\r
334                                                         te.think = RemoveFlare;\r
335                                                         te.nextthink = time + 25;\r
336                                                         te.owner = self.owner;\r
337                                                         te.solid = 0;\r
338                                                         self.owner.effects = self.owner.effects | 4;\r
339                                                         dremove(self);\r
340                                                         dremove(newmis);\r
341                                                         return;\r
342                                                 }\r
343                                                 else\r
344                                                 {\r
345                                                         if (self.weapon == 7)\r
346                                                         {\r
347                                                                 newmis.touch = GasGrenadeTouch;\r
348                                                                 newmis.think = GasGrenadeExplode;\r
349                                                                 newmis.skin = 2;\r
350                                                                 newmis.avelocity = '300 300 300';\r
351                                                                 setmodel(newmis, "progs/grenade2.mdl");\r
352                                                         }\r
353                                                         else\r
354                                                         {\r
355                                                                 if (self.weapon == 8)\r
356                                                                 {\r
357                                                                         newmis.touch = EMPGrenadeTouch;\r
358                                                                         newmis.think = EMPGrenadeExplode;\r
359                                                                         newmis.skin = 4;\r
360                                                                         newmis.avelocity = '300 300 300';\r
361                                                                         setmodel(newmis, "progs/grenade2.mdl");\r
362                                                                 }\r
363                                                                 else\r
364                                                                 {*/\r
365                                                                         if (self.weapon == 9)\r
366                                                                         {\r
367                                                                                 newmis.touch = FlashGrenadeTouch;\r
368                                                                                 newmis.think = FlashGrenadeExplode;\r
369                                                                                 newmis.skin = 1;\r
370                                                                                 newmis.avelocity = '300 300 300';\r
371                                                                                 setmodel(newmis, "progs/grenade2.mdl");\r
372                                                                         }/*\r
373                                                                 }\r
374                                                         }\r
375                                                 }\r
376                                         }\r
377                                 }\r
378                         }\r
379                 }\r
380         }*/\r
381         setsize(newmis, '0 0 0', '0 0 0');\r
382         setorigin(newmis, self.owner.origin);\r
383         bprint("No ");\r
384         bprint(self.owner.netname);\r
385         bprint(", throw the grenade, not the pin!\n");\r
386         dremove(self);\r
387 };\r
388 \r
389 void() NormalGrenadeTouch = \r
390 {\r
391         if (other == self.owner)\r
392         {\r
393                 return;\r
394         }\r
395         sound(self, 1, "weapons/bounce.wav", 1, 1);\r
396         if (self.velocity == '0 0 0')\r
397         {\r
398                 self.avelocity = '0 0 0';\r
399         }\r
400 };\r
401 \r
402 void () NormalGrenadeExplode =\r
403 {\r
404         deathmsg = 88;\r
405         T_RadiusDamage (self, self.owner, 180, world);\r
406         WriteByte (0, 23);\r
407         WriteByte (0, 3);\r
408         WriteCoord (0, self.origin_x);\r
409         WriteCoord (0, self.origin_y);\r
410         WriteCoord (0, self.origin_z);\r
411         BecomeExplosion ();\r
412 };\r
413 \r
414 // TF Prime Grenade Function\r
415 void () TeamFortress_PrimeGrenade =\r
416 {\r
417         local float gtype;\r
418         local string gs;\r
419         local string ptime;\r
420         local entity tGrenade;\r
421 \r
422         if (((self.tfstate & 1) || (self.tfstate & 1024)))\r
423         {\r
424                 return;\r
425         }\r
426         if ((self.impulse == 150))\r
427         {\r
428                 gtype = self.tp_grenades_1;\r
429                 \r
430                 if ((self.tp_grenades_1 == 2))\r
431                 {\r
432                         gs = "Concussion grenade";\r
433                 }\r
434                 else\r
435                 {\r
436                         if ((self.tp_grenades_1 == 3))\r
437                         {\r
438                                 gs = "Nail grenade";\r
439                         }\r
440                         else\r
441                         {\r
442                                 if ((self.tp_grenades_1 == 4))\r
443                                 {\r
444                                         gs = "Mirv grenade";\r
445                                 }\r
446                                 else\r
447                                 {\r
448                                         if ((self.tp_grenades_1 == 5))\r
449                                         {\r
450                                                 gs = "Napalm grenade";\r
451                                         }\r
452                                         else\r
453                                         {\r
454                                                 if ((self.tp_grenades_1 == 6))\r
455                                                 {\r
456                                                         gs = "Flare";\r
457                                                 }\r
458                                                 else\r
459                                                 {\r
460                                                         if ((self.tp_grenades_1 == 7))\r
461                                                         {\r
462                                                                 gs = "Gas grenade";\r
463                                                         }\r
464                                                         else\r
465                                                         {\r
466                                                                 if ((self.tp_grenades_1 == 8))\r
467                                                                 {\r
468                                                                         gs = "EMP grenade";\r
469                                                                 }\r
470                                                                 else\r
471                                                                 {\r
472                                                                         if ((self.tp_grenades_1 == 10))\r
473                                                                         {\r
474                                                                                 gs = "Caltrop canister";\r
475                                                                         }\r
476                                                                         else\r
477                                                                         {\r
478                                                                                 if ((self.tp_grenades_1 == 9))\r
479                                                                                 {\r
480                                                                                         gs = "Flash grenade";\r
481                                                                                 }\r
482                                                                                 else\r
483                                                                                 {\r
484                                                                                         gs = "Grenade";\r
485                                                                                 }\r
486                                                                         }\r
487                                                                 }\r
488                                                         }\r
489                                                 }\r
490                                         }\r
491                                 }\r
492                         }\r
493                 }\r
494 //              gs = "Grenade";\r
495 \r
496                 if ((self.no_grenades_1 > 0))\r
497                 {\r
498                         self.no_grenades_1 = (self.no_grenades_1 - 1);\r
499                         /*if ((gtype == 6))\r
500                         {\r
501                                 newmis = spawn ();\r
502                                 newmis.owner = self;\r
503                                 newmis.movetype = 6;\r
504                                 newmis.solid = 2;\r
505                                 newmis.classname = "grenade";\r
506                                 makevectors (self.v_angle);\r
507                                 newmis.velocity = ((v_forward * 600) + (v_up * 25));\r
508                                 newmis.velocity = (newmis.velocity * 700);\r
509                                 newmis.angles = vectoangles (newmis.velocity);\r
510                                 newmis.weapon = self.team_no;\r
511                                 newmis.think = FlareGrenadeExplode;\r
512                                 newmis.nextthink = (time + 0.8);\r
513                                 newmis.touch = FlareGrenadeTouch;\r
514                                 newmis.skin = 1;\r
515                                 newmis.mdl = "flare";\r
516                                 setmodel (newmis, "progs/flare.mdl");\r
517                                 setsize (newmis, '0 0 0', '0 0 0');\r
518                                 setorigin (newmis, self.origin);\r
519                                 return;\r
520                         }*/\r
521                         if ((gtype == 10))\r
522                         {\r
523                                 ptime = ftos (0.5);\r
524                                 sprint (self, "Opening ");\r
525                                 sprint (self, gs);\r
526                                 sprint (self, "...\n");\r
527                         }\r
528                         else\r
529                         {\r
530                                 sound (self, CHAN_WEAPON, "weapons/prime.wav", 1, ATTN_STATIC);\r
531                                 sound (self, CHAN_AUTO, "weapons/gren.wav", 1, ATTN_STATIC);\r
532                                 ptime = ftos (3);\r
533                                 sprint (self, gs);\r
534                                 sprint (self, " primed, ");\r
535                                 sprint (self, ptime);\r
536                                 sprint (self, " seconds...\n");\r
537                         }\r
538                 }\r
539                 else\r
540                 {\r
541                         sprint (self, "No ");\r
542                         sprint (self, gs);\r
543                         sprint (self, "s left.\n");\r
544                         return;\r
545                 }\r
546         }\r
547         if ((self.impulse == 151))\r
548         {\r
549                 if (self.tp_grenades_2 == 0)\r
550                         return;\r
551                 gtype = self.tp_grenades_2;\r
552 /*              if ((self.tp_grenades_2 == 2))\r
553                 {\r
554                         gs = "Concussion grenade";\r
555                 }\r
556                 else\r
557                 {*/\r
558                         if ((self.tp_grenades_2 == 3))\r
559                         {\r
560                                 gs = "Nail grenade";\r
561                         }/*\r
562                         else\r
563                         {\r
564                                 if ((self.tp_grenades_2 == 4))\r
565                                 {\r
566                                         gs = "Mirv grenade";\r
567                                 }\r
568                                 else\r
569                                 {\r
570                                         if ((self.tp_grenades_2 == 5))\r
571                                         {\r
572                                                 gs = "Napalm grenade";\r
573                                         }\r
574                                         else\r
575                                         {\r
576                                                 if ((self.tp_grenades_2 == 6))\r
577                                                 {\r
578                                                         gs = "Flare";\r
579                                                 }\r
580                                                 else\r
581                                                 {\r
582                                                         if ((self.tp_grenades_2 == 7))\r
583                                                         {\r
584                                                                 gs = "Gas grenade";\r
585                                                         }\r
586                                                         else\r
587                                                         {\r
588                                                                 if ((self.tp_grenades_2 == 8))\r
589                                                                 {\r
590                                                                         gs = "EMP grenade";\r
591                                                                 }\r
592                                                                 else\r
593                                                                 {\r
594                                                                         if ((self.tp_grenades_2 == 9))\r
595                                                                         {\r
596                                                                                 gs = "Flash grenade";\r
597                                                                         }*/\r
598                                                                         else\r
599                                                                         {\r
600                                                                                 gs = "Grenade";\r
601                                                                         }/*\r
602                                                                 }\r
603                                                         }\r
604                                                 }\r
605                                         }\r
606                                 }\r
607                         }\r
608                 }*/\r
609                 if ((self.no_grenades_2 > 0))\r
610                 {\r
611                         self.no_grenades_2 = (self.no_grenades_2 - 1);\r
612 /*                      if ((gtype == 6))\r
613                         {\r
614                                 newmis = spawn ();\r
615                                 newmis.owner = self;\r
616                                 newmis.movetype = 6;\r
617                                 newmis.solid = 2;\r
618                                 newmis.classname = "grenade";\r
619                                 makevectors (self.v_angle);\r
620                                 if (self.v_angle_x)\r
621                                 {\r
622                                         newmis.velocity = ((v_forward * 1200) + (v_up * 200));\r
623                                 }\r
624                                 else\r
625                                 {\r
626                                         newmis.velocity = aim (self, 10000);\r
627                                         newmis.velocity = (newmis.velocity * 1200);\r
628                                         newmis.velocity_z = 75;\r
629                                 }\r
630                                 newmis.angles = vectoangles (newmis.velocity);\r
631                                 newmis.weapon = self.team_no;\r
632                                 newmis.think = FlareGrenadeExplode;\r
633                                 newmis.nextthink = (time + 0.8);\r
634                                 newmis.touch = FlareGrenadeTouch;\r
635                                 newmis.skin = 1;\r
636                                 newmis.mdl = "flare";\r
637                                 setmodel (newmis, "progs/flare.mdl");\r
638                                 setsize (newmis, '0 0 0', '0 0 0');\r
639                                 setorigin (newmis, self.origin);\r
640                                 return;\r
641                         }*/\r
642                         if ((gtype == 10))\r
643                         {\r
644                                 ptime = ftos (0.5);\r
645                                 sprint (self, "Opening ");\r
646                                 sprint (self, gs);\r
647                                 sprint (self, "...\n");\r
648                         }\r
649                         else\r
650                         {\r
651                                 ptime = ftos (3);\r
652                                 sprint (self, gs);\r
653                                 sprint (self, " primed, ");\r
654                                 sprint (self, ptime);\r
655                                 sprint (self, " seconds...\n");\r
656                         }\r
657                 }\r
658                 else\r
659                 {\r
660                         sprint (self, "No ");\r
661                         sprint (self, gs);\r
662                         sprint (self, "s left.\n");\r
663                         return;\r
664                 }\r
665         }\r
666         self.tfstate = (self.tfstate | 1);\r
667         tGrenade = spawn ();\r
668         tGrenade.owner = self;\r
669         tGrenade.weapon = gtype;\r
670         tGrenade.classname = "primer";\r
671         tGrenade.impulse = self.impulse;\r
672         tGrenade.nextthink = (time + 0.8);\r
673         tGrenade.heat = time + 4;\r
674 \r
675 /*      // Make Centerprint timer                       // Taken out due to the fact that the function sucked\r
676         newmis = spawn ();\r
677         newmis.owner = self;\r
678         newmis.classname = "primedtimer";\r
679         newmis.think = CP_Timer;\r
680         newmis.nextthink = (time);\r
681         self.grenade_timer = time;              */\r
682         /*if ((gtype == 10))\r
683         {\r
684                 tGrenade.heat = ((time + 0.5) + 0.5);\r
685         }\r
686         else\r
687         {\r
688                 tGrenade.heat = ((time + 3) + 0.8);\r
689         }*/\r
690         tGrenade.think = TeamFortress_GrenadePrimed;\r
691 };\r
692 \r
693 void () TeamFortress_GrenadePrimed =\r
694 {\r
695         local entity user;\r
696         local entity oldself;\r
697 \r
698         user = self.owner;\r
699         if ((!(user.tfstate & 1024) && !user.deadflag))\r
700         {\r
701                 self.nextthink = (time + 0.1);\r
702                 if (!self.think)\r
703                 {\r
704                         dremove (self);\r
705                 }\r
706                 if ((time > self.heat))\r
707                 {\r
708                         TeamFortress_ExplodePerson ();\r
709                 }\r
710                 return;\r
711         }\r
712         if (!(user.tfstate & 1))\r
713         {\r
714                 dprint ("GrenadePrimed logic error\n");\r
715         }\r
716         user.tfstate = (user.tfstate - (user.tfstate & 1));\r
717         user.tfstate = (user.tfstate - (user.tfstate & 1024));\r
718 //      sound (user, 1, "weapons/grenade.wav", 1, 1);\r
719         KickPlayer (-1, user);\r
720         newmis = spawn ();\r
721         newmis.owner = user;\r
722         newmis.movetype = 10;\r
723         newmis.solid = 2;\r
724         newmis.classname = "grenade";\r
725         makevectors (user.v_angle);\r
726         if (user.deadflag)\r
727         {\r
728                 newmis.velocity = '0 0 200';\r
729         }\r
730         else\r
731         {\r
732                 if (user.v_angle_x)\r
733                 {\r
734                         newmis.velocity = ((((v_forward * 600) + (v_up * 200)) + ((crandom () * v_right) * 10)) + ((crandom () * v_up) * 10));\r
735                 }\r
736                 else\r
737                 {\r
738                         newmis.velocity = aim (user, 10000);\r
739                         newmis.velocity = (newmis.velocity * 600);\r
740                         newmis.velocity_z = 200;\r
741                 }\r
742         }\r
743         newmis.angles = vectoangles (newmis.velocity);\r
744         newmis.think = SUB_Null;\r
745         newmis.nextthink = self.heat;\r
746         if ((self.weapon == 1))\r
747         {\r
748                 newmis.touch = NormalGrenadeTouch;\r
749                 newmis.think = NormalGrenadeExplode;\r
750                 newmis.skin = 0;\r
751                 newmis.avelocity = '300 300 300';\r
752 //              setmodel (newmis, "progs/hgren2.mdl");\r
753                 setmodel(newmis, "models/grenades/fragnade.md3");\r
754         }\r
755         else if ((self.weapon == 9))\r
756         {\r
757                 newmis.touch = FlashGrenadeTouch;\r
758                 newmis.think = FlashGrenadeExplode;\r
759                 newmis.skin = 2;\r
760                 newmis.avelocity = '300 300 300';\r
761                 setmodel (newmis, "progs/hgren2.mdl");\r
762         }\r
763 /*      else\r
764         {\r
765                 if ((self.weapon == 2))\r
766                 {\r
767                         newmis.touch = ConcussionGrenadeTouch;\r
768                         newmis.think = ConcussionGrenadeExplode;\r
769                         newmis.skin = 1;\r
770                         newmis.avelocity = '300 300 300';\r
771                         setmodel (newmis, "progs/hgren2.mdl");\r
772                 }\r
773                 else\r
774                 {*/\r
775                         if ((self.weapon == 3))\r
776                         {\r
777                                 newmis.touch = NailGrenadeTouch;\r
778                                 newmis.think = NailGrenadeExplode;\r
779                                 newmis.skin = 1;\r
780                                 newmis.avelocity = '0 300 0';\r
781                                 setmodel (newmis, "progs/biggren.mdl");\r
782                         }/*\r
783                         else\r
784                         {\r
785                                 if ((self.weapon == 4))\r
786                                 {\r
787                                         newmis.touch = MirvGrenadeTouch;\r
788                                         newmis.think = MirvGrenadeExplode;\r
789                                         newmis.skin = 0;\r
790                                         newmis.avelocity = '0 300 0';\r
791                                         setmodel (newmis, "progs/biggren.mdl");\r
792                                 }\r
793                                 else\r
794                                 {\r
795                                         if ((self.weapon == 5))\r
796                                         {\r
797                                                 newmis.touch = NapalmGrenadeTouch;\r
798                                                 newmis.think = NapalmGrenadeExplode;\r
799                                                 newmis.skin = 2;\r
800                                                 newmis.avelocity = '0 300 0';\r
801                                                 setmodel (newmis, "progs/biggren.mdl");\r
802                                         }\r
803                                         else\r
804                                         {\r
805                                                 if ((self.weapon == 6))\r
806                                                 {\r
807                                                         newmis.touch = FlareGrenadeTouch;\r
808                                                         newmis.weapon = self.team_no;\r
809                                                         newmis.think = FlareGrenadeExplode;\r
810                                                         newmis.skin = 1;\r
811                                                         newmis.avelocity = '300 300 300';\r
812                                                         newmis.mdl = "flare";\r
813                                                         setmodel (newmis, "progs/flare.mdl");\r
814                                                 }\r
815                                                 else\r
816                                                 {\r
817                                                         if ((self.weapon == 7))\r
818                                                         {\r
819                                                                 newmis.touch = GasGrenadeTouch;\r
820                                                                 newmis.think = GasGrenadeExplode;\r
821                                                                 newmis.skin = 3;\r
822                                                                 newmis.avelocity = '300 300 300';\r
823                                                                 setmodel (newmis, "progs/grenade2.mdl");\r
824                                                         }\r
825                                                         else\r
826                                                         {\r
827                                                                 if ((self.weapon == 8))\r
828                                                                 {\r
829                                                                         newmis.touch = EMPGrenadeTouch;\r
830                                                                         newmis.think = EMPGrenadeExplode;\r
831                                                                         newmis.skin = 4;\r
832                                                                         newmis.avelocity = '300 300 300';\r
833                                                                         setmodel (newmis, "progs/grenade2.mdl");\r
834                                                                 }\r
835                                                                 else\r
836                                                                 {\r
837                                                                         if ((self.weapon == 10))\r
838                                                                         {\r
839                                                                                 newmis.touch = CanisterTouch;\r
840                                                                                 newmis.think = ScatterCaltrops;\r
841                                                                                 newmis.skin = 0;\r
842                                                                                 newmis.avelocity = '0 0 0';\r
843                                                                         }\r
844                                                                         else\r
845                                                                         {\r
846                                                                                 if ((self.weapon == 9))\r
847                                                                                 {\r
848                                                                                         newmis.touch = FlashGrenadeTouch;\r
849                                                                                         newmis.think = FlashGrenadeExplode;\r
850                                                                                         newmis.skin = 2;\r
851                                                                                         newmis.avelocity = '300 300 300';\r
852                                                                                         setmodel (newmis, "progs/hgren2.mdl");\r
853                                                                                 }\r
854                                                                         }\r
855                                                                 }\r
856                                                         }\r
857                                                 }\r
858                                         }\r
859                                 }\r
860                         }\r
861                 }\r
862         }*/\r
863         setsize (newmis, '0 0 0', '0 0 0');\r
864         setorigin (newmis, user.origin);\r
865         oldself = self;\r
866         self = self.owner;\r
867         self = oldself;\r
868         dremove (self);\r
869 };\r
870 \r
871 void () TeamFortress_ThrowGrenade =\r
872 {\r
873         if (!(self.tfstate & 1))\r
874         {\r
875                 return;\r
876         }\r
877         sound(self, 3, "weapons/throw.wav", 1, 1);\r
878         self.tfstate = (self.tfstate | 1024);\r
879 };\r
880 \r
881 // TF Grenade CenterPrint Timer - it sucks so I took it out:x\r
882 void () CP_Timer =\r
883 {\r
884         local float countdown;\r
885 \r
886         countdown = (time - self.owner.grenade_timer);\r
887 \r
888         if (countdown > 0)\r
889         {\r
890                 CenterPrint (self.owner, "^7\80\81\81\81\81\81\81\81\81\81\81\81\81\82^1\n");\r
891         }\r
892         if (countdown > .25)\r
893         {\r
894                 CenterPrint (self.owner, "^1\80^7\81\81\81\81\81\81\81\81\81\81\81\81\82\n");\r
895         }\r
896         if (countdown > .5)\r
897         {\r
898                 CenterPrint (self.owner, "^1\80\81^7\81\81\81\81\81\81\81\81\81\81\81\82\n");\r
899         }\r
900         if (countdown > .75)\r
901         {\r
902                 CenterPrint (self.owner, "^1\80\81\81^7\81\81\81\81\81\81\81\81\81\81\82\n");\r
903         }\r
904         if (countdown > 1)\r
905         {\r
906                 CenterPrint (self.owner, "^1\80\81\81\81^7\81\81\81\81\81\81\81\81\81\82\n");\r
907         }\r
908         if (countdown > 1.25)\r
909         {\r
910                 CenterPrint (self.owner, "^1\80\81\81\81\81^7\81\81\81\81\81\81\81\81\82\n");\r
911         }\r
912         if (countdown > 1.5)\r
913         {\r
914                 CenterPrint (self.owner, "^1\80\81\81\81\81\81^7\81\81\81\81\81\81\81\82\n");\r
915         }\r
916         if (countdown > 1.75)\r
917         {\r
918                 CenterPrint (self.owner, "^1\80\81\81\81\81\81\81^7\81\81\81\81\81\81\82\n");\r
919         }\r
920         if (countdown > 2)\r
921         {\r
922                 CenterPrint (self.owner, "^1\80\81\81\81\81\81\81\81^7\81\81\81\81\81\82\n");\r
923         }\r
924         if (countdown > 2.25)\r
925         {\r
926                 CenterPrint (self.owner, "^1\80\81\81\81\81\81\81\81\81^7\81\81\81\81\82\n");\r
927         }\r
928         if (countdown > 2.5)\r
929         {\r
930                 CenterPrint (self.owner, "^1\80\81\81\81\81\81\81\81\81\81^7\81\81\81\82\n");\r
931         }\r
932         if (countdown > 2.75)\r
933         {\r
934                 CenterPrint (self.owner, "^1\80\81\81\81\81\81\81\81\81\81\81^7\81\81\82\n");\r
935         }\r
936         if (countdown > 3)\r
937         {\r
938                 CenterPrint (self.owner, "^1\80\81\81\81\81\81\81\81\81\81\81\81^7\81\82\n");\r
939         }\r
940         if (countdown > 3.25)\r
941         {\r
942                 CenterPrint (self.owner, "^1\80\81\81\81\81\81\81\81\81\81\81\81\81^7\82\n");\r
943         }\r
944         if (countdown > 3.5)\r
945         {\r
946                 CenterPrint (self.owner, "^1\80\81\81\81\81\81\81\81\81\81\81\81\81\82^7\n");\r
947         }\r
948         if (countdown > 3.75)\r
949         {\r
950                 CenterPrint (self.owner, "^3\80\81\81\81\81\81\81\81\81\81\81\81\81\82^7\n");\r
951         }\r
952         if (countdown > 4)\r
953         {\r
954                 CenterPrint (self.owner, "\n");\r
955                 dremove(self);\r
956         }\r
957         else\r
958         {\r
959                 self.nextthink = (time + .25);\r
960         }\r
961 };