home *** CD-ROM | disk | FTP | other *** search
/ Superpower (Alt) / SUPERPOWER.iso / q / patch / mbq067 / player.qc < prev    next >
Encoding:
Text File  |  1996-08-24  |  22.1 KB  |  734 lines

  1.  
  2. void() bubble_bob;
  3.  
  4. /*
  5. ==============================================================================
  6.  
  7. PLAYER
  8.  
  9. ==============================================================================
  10. */
  11.  
  12. $cd /raid/quake/id1/models/player_4
  13. $origin 0 -6 24
  14. $base base              
  15. $skin skin
  16.  
  17. //
  18. // running
  19. //
  20. $frame axrun1 axrun2 axrun3 axrun4 axrun5 axrun6
  21.  
  22. $frame rockrun1 rockrun2 rockrun3 rockrun4 rockrun5 rockrun6
  23.  
  24. //
  25. // standing
  26. //
  27. $frame stand1 stand2 stand3 stand4 stand5
  28.  
  29. $frame axstnd1 axstnd2 axstnd3 axstnd4 axstnd5 axstnd6
  30. $frame axstnd7 axstnd8 axstnd9 axstnd10 axstnd11 axstnd12
  31.  
  32.  
  33. //
  34. // pain
  35. //
  36. $frame axpain1 axpain2 axpain3 axpain4 axpain5 axpain6
  37.  
  38. $frame pain1 pain2 pain3 pain4 pain5 pain6
  39.  
  40.  
  41. //
  42. // death
  43. //
  44.  
  45. $frame axdeth1 axdeth2 axdeth3 axdeth4 axdeth5 axdeth6
  46. $frame axdeth7 axdeth8 axdeth9
  47.  
  48. $frame deatha1 deatha2 deatha3 deatha4 deatha5 deatha6 deatha7 deatha8
  49. $frame deatha9 deatha10 deatha11
  50.  
  51. $frame deathb1 deathb2 deathb3 deathb4 deathb5 deathb6 deathb7 deathb8
  52. $frame deathb9
  53.  
  54. $frame deathc1 deathc2 deathc3 deathc4 deathc5 deathc6 deathc7 deathc8
  55. $frame deathc9 deathc10 deathc11 deathc12 deathc13 deathc14 deathc15
  56.  
  57. $frame deathd1 deathd2 deathd3 deathd4 deathd5 deathd6 deathd7
  58. $frame deathd8 deathd9
  59.  
  60. $frame deathe1 deathe2 deathe3 deathe4 deathe5 deathe6 deathe7
  61. $frame deathe8 deathe9
  62.  
  63. //
  64. // attacks
  65. //
  66. $frame nailatt1 nailatt2
  67.  
  68. $frame light1 light2
  69.  
  70. $frame rockatt1 rockatt2 rockatt3 rockatt4 rockatt5 rockatt6
  71.  
  72. $frame shotatt1 shotatt2 shotatt3 shotatt4 shotatt5 shotatt6
  73.  
  74. $frame axatt1 axatt2 axatt3 axatt4 axatt5 axatt6
  75.  
  76. $frame axattb1 axattb2 axattb3 axattb4 axattb5 axattb6
  77.  
  78. $frame axattc1 axattc2 axattc3 axattc4 axattc5 axattc6
  79.  
  80. $frame axattd1 axattd2 axattd3 axattd4 axattd5 axattd6
  81.  
  82.  
  83. /*
  84. ==============================================================================
  85. PLAYER
  86. ==============================================================================
  87. */
  88.  
  89. void() player_run;
  90.  
  91. void()  player_stand1 =[        $axstnd1,       player_stand1   ]
  92. {
  93.     self.weaponframe=0;
  94.     if (self.velocity_x || self.velocity_y)
  95.     {
  96.         self.walkframe=0;
  97.         player_run();
  98.         return;
  99.     }
  100.  
  101.     if (self.weapon == IT_AXE)
  102.     {
  103.         if (self.walkframe >= 12)
  104.             self.walkframe = 0;
  105.         self.frame = $axstnd1 + self.walkframe;
  106.     }
  107.     else
  108.     {
  109.         if (self.walkframe >= 5)
  110.             self.walkframe = 0;
  111.         self.frame = $stand1 + self.walkframe;
  112.     }
  113.     self.walkframe = self.walkframe + 1;    
  114. };
  115.  
  116. void()  player_run =[   $rockrun1,      player_run      ]
  117. {
  118.     self.weaponframe=0;
  119.     if (!self.velocity_x && !self.velocity_y)
  120.     {
  121.         self.walkframe=0;
  122.         player_stand1();
  123.         return;
  124.     }
  125.  
  126.     if (self.weapon == IT_AXE)
  127.     {
  128.         if (self.walkframe == 6)
  129.             self.walkframe = 0;
  130.         self.frame = $axrun1 + self.walkframe;
  131.     }
  132.     else
  133.     {
  134.         if (self.walkframe == 6)
  135.             self.walkframe = 0;
  136.         self.frame = self.frame + self.walkframe;
  137.     }
  138.     self.walkframe = self.walkframe + 1;
  139. };
  140.  
  141.  
  142. void()  player_shot1 =  [$shotatt1, player_shot2        ] {self.weaponframe=1;
  143. self.effects = self.effects | EF_MUZZLEFLASH;};
  144. void()  player_shot2 =  [$shotatt2, player_shot3        ] {self.weaponframe=2;};
  145. void()  player_shot3 =  [$shotatt3, player_shot4        ] {self.weaponframe=3;};
  146. void()  player_shot4 =  [$shotatt4, player_shot5        ] {self.weaponframe=4;};
  147. void()  player_shot5 =  [$shotatt5, player_shot6        ] {self.weaponframe=5;};
  148. void()  player_shot6 =  [$shotatt6, player_run  ] {self.weaponframe=6;};
  149.  
  150. /*
  151. bomb
  152. */
  153. void()  player_bomb1 =  [$shotatt1, player_bomb2        ] {self.weaponframe=1;
  154. self.effects = self.effects | EF_MUZZLEFLASH;};
  155. void()  player_bomb2 =  [$shotatt2, player_bomb3        ] {self.weaponframe=2;};
  156. void()  player_bomb3 =  [$shotatt3, player_bomb4        ] {self.weaponframe=3;};
  157. void()  player_bomb4 =  [$shotatt4, player_bomb5        ] {self.weaponframe=4;};
  158. void()  player_bomb5 =  [$shotatt5, player_bomb6        ] {self.weaponframe=5;};
  159. void()  player_bomb6 =  [$shotatt6, player_run  ] {self.weaponframe=6;};
  160.  
  161.  
  162. void()  player_axe1 =   [$axatt1, player_axe2   ] {self.weaponframe=1;};
  163. void()  player_axe2 =   [$axatt2, player_axe3   ] {self.weaponframe=2;};
  164. void()  player_axe3 =   [$axatt3, player_axe4   ] {self.weaponframe=3;W_FireAxe();};
  165. void()  player_axe4 =   [$axatt4, player_run    ] {self.weaponframe=4;};
  166.  
  167. void()  player_axeb1 =  [$axattb1, player_axeb2 ] {self.weaponframe=5;};
  168. void()  player_axeb2 =  [$axattb2, player_axeb3 ] {self.weaponframe=6;};
  169. void()  player_axeb3 =  [$axattb3, player_axeb4 ] {self.weaponframe=7;W_FireAxe();};
  170. void()  player_axeb4 =  [$axattb4, player_run   ] {self.weaponframe=8;};
  171.  
  172. void()  player_axec1 =  [$axattc1, player_axec2 ] {self.weaponframe=1;};
  173. void()  player_axec2 =  [$axattc2, player_axec3 ] {self.weaponframe=2;};
  174. void()  player_axec3 =  [$axattc3, player_axec4 ] {self.weaponframe=3;W_FireAxe();};
  175. void()  player_axec4 =  [$axattc4, player_run   ] {self.weaponframe=4;};
  176.  
  177. void()  player_axed1 =  [$axattd1, player_axed2 ] {self.weaponframe=5;};
  178. void()  player_axed2 =  [$axattd2, player_axed3 ] {self.weaponframe=6;};
  179. void()  player_axed3 =  [$axattd3, player_axed4 ] {self.weaponframe=7;W_FireAxe();};
  180. void()  player_axed4 =  [$axattd4, player_run   ] {self.weaponframe=8;};
  181.  
  182.  
  183. //============================================================================
  184.  
  185. void() player_nail1   =[$nailatt1, player_nail2  ] 
  186. {
  187.     self.effects = self.effects | EF_MUZZLEFLASH;
  188.  
  189.     if (!self.button0)
  190.         {player_run ();return;}
  191.     self.weaponframe = self.weaponframe + 1;
  192.     if (self.weaponframe == 9)
  193.         self.weaponframe = 1;
  194.     SuperDamageSound();
  195.  
  196.     if (self.weapon == IT_NAILGUN)
  197.     {
  198.         if (self.items2 & IT2_MEGAPOWER)
  199.         {
  200.             W_FireSpikes (4);
  201.             W_FireSpikes (2);
  202.             W_FireSpikes (6);
  203.             self.attack_finished = time + 0.2;
  204.         }
  205.         else
  206.         {
  207.             W_FireSpikes (4);
  208.             self.attack_finished = time + 0.2;
  209.         }
  210.     }
  211.     else
  212.     {
  213.         W_FireSpikes (0);
  214.         self.attack_finished = time + 0.2;
  215.     }
  216. };
  217. void() player_nail2   =[$nailatt2, player_nail1  ]
  218. {
  219.     self.effects = self.effects | EF_MUZZLEFLASH;
  220.  
  221.     if (!self.button0)
  222.         {player_run ();return;}
  223.     self.weaponframe = self.weaponframe + 1;
  224.     if (self.weaponframe == 9)
  225.         self.weaponframe = 1;
  226.     SuperDamageSound();
  227.     if (self.items2 & IT2_MEGAPOWER)
  228.     {
  229.         W_FireSpikes (-2);
  230.         W_FireSpikes (-6);
  231.         self.attack_finished = time + 0.1;
  232.     }
  233.     else
  234.     {
  235.         W_FireSpikes (-4);
  236.         self.attack_finished = time + 0.2;
  237.     }
  238. };
  239.  
  240. //============================================================================
  241.  
  242. void() player_light1   =[$light1, player_light2  ] 
  243. {
  244.     self.effects = self.effects | EF_MUZZLEFLASH;
  245.  
  246.     if (!self.button0)
  247.         {player_run ();return;}
  248.     self.weaponframe = self.weaponframe + 1;
  249.     if (self.weaponframe == 5)
  250.         self.weaponframe = 1;
  251.     SuperDamageSound();
  252.     if (self.items2 & IT2_MEGAPOWER)
  253.     {        
  254.         W_FireSuperLightning();
  255.         self.attack_finished = time + 0.4;
  256.     }
  257.     else
  258.     {        
  259.         W_FireLightning();
  260.         self.attack_finished = time + 0.2;
  261.     }
  262. };
  263. void() player_light2   =[$light2, player_light1  ]
  264. {
  265.     self.effects = self.effects | EF_MUZZLEFLASH;
  266.  
  267.     if (!self.button0)
  268.         {player_run ();return;}
  269.     self.weaponframe = self.weaponframe + 1;
  270.     if (self.weaponframe == 5)
  271.         self.weaponframe = 1;
  272.     SuperDamageSound();
  273.     if (self.items2 & IT2_MEGAPOWER)
  274.     {        
  275.         W_FireSuperLightning();
  276.         self.attack_finished = time + 0.4;
  277.     }
  278.     else
  279.     {        
  280.         W_FireLightning();
  281.         self.attack_finished = time + 0.2;
  282.     }
  283. };
  284.  
  285. //============================================================================
  286.  
  287.  
  288. void() player_rocket1   =[$rockatt1, player_rocket2  ] {self.weaponframe=1;
  289. self.effects = self.effects | EF_MUZZLEFLASH;};
  290. void() player_rocket2   =[$rockatt2, player_rocket3  ] {self.weaponframe=2;};
  291. void() player_rocket3   =[$rockatt3, player_rocket4  ] {self.weaponframe=3;};
  292. void() player_rocket4   =[$rockatt4, player_rocket5  ] {self.weaponframe=4;};
  293. void() player_rocket5   =[$rockatt5, player_rocket6  ] {self.weaponframe=5;};
  294. void() player_rocket6   =[$rockatt6, player_run  ] {self.weaponframe=6;};
  295.  
  296. /*
  297. BFG
  298. */
  299. void() player_bfg1   =[$rockatt1, player_bfg2  ] {self.weaponframe=6;self.currentammo = self.ammo_cells = self.ammo_cells - 1;};
  300. void() player_bfg2   =[$rockatt2, player_bfg3  ] {self.weaponframe=6;self.currentammo = self.ammo_cells = self.ammo_cells - 1;sound(self,CHAN_WEAPON, "items/inv1.wav",1, ATTN_NORM);};
  301. void() player_bfg3   =[$rockatt2, player_bfg4  ] {self.weaponframe=5;self.currentammo = self.ammo_cells = self.ammo_cells - 1;};
  302. void() player_bfg4   =[$rockatt3, player_bfg5  ] {self.weaponframe=5;self.currentammo = self.ammo_cells = self.ammo_cells - 1;};
  303. void() player_bfg5   =[$rockatt3, player_bfg6  ] {self.weaponframe=4;self.currentammo = self.ammo_cells = self.ammo_cells - 2;};
  304. void() player_bfg6   =[$rockatt5, player_bfg7  ] {self.weaponframe=4;self.currentammo = self.ammo_cells = self.ammo_cells - 2;};
  305. void() player_bfg7   =[$rockatt5, player_bfg8  ] {self.weaponframe=5;self.currentammo = self.ammo_cells = self.ammo_cells - 4;};
  306. void() player_bfg8   =[$rockatt6, player_run  ] {self.weaponframe=1;self.currentammo = self.ammo_cells = self.ammo_cells - 8;self.effects = self.effects | EF_MUZZLEFLASH;W_FireBFG();};
  307.  
  308.  
  309.  
  310. void(float num_bubbles) DeathBubbles;
  311.  
  312. void() PainSound =
  313. {
  314. local float             rs;
  315.  
  316.     if (self.health < 0)
  317.         return;
  318.  
  319.     if (damage_attacker.classname == "teledeath")
  320.     {
  321.         sound (self, CHAN_VOICE, "player/teledth1.wav", 1, ATTN_NONE);
  322.         return;
  323.     }
  324.  
  325. // water pain sounds
  326.     if (self.watertype == CONTENT_WATER && self.waterlevel == 3)
  327.     {
  328.         DeathBubbles(1);
  329.         if (random() > 0.5)
  330.             sound (self, CHAN_VOICE, "player/drown1.wav", 1, ATTN_NORM);
  331.         else
  332.             sound (self, CHAN_VOICE, "player/drown2.wav", 1, ATTN_NORM);
  333.         return;
  334.     }
  335.  
  336. // slime pain sounds
  337.     if (self.watertype == CONTENT_SLIME)
  338.     {
  339. // FIX ME       put in some steam here
  340.         if (random() > 0.5)
  341.             sound (self, CHAN_VOICE, "player/lburn1.wav", 1, ATTN_NORM);
  342.         else
  343.             sound (self, CHAN_VOICE, "player/lburn2.wav", 1, ATTN_NORM);
  344.         return;
  345.     }
  346.  
  347.     if (self.watertype == CONTENT_LAVA)
  348.     {
  349.         if (random() > 0.5)
  350.             sound (self, CHAN_VOICE, "player/lburn1.wav", 1, ATTN_NORM);
  351.         else
  352.             sound (self, CHAN_VOICE, "player/lburn2.wav", 1, ATTN_NORM);
  353.         return;
  354.     }
  355.  
  356.     if (self.pain_finished > time)
  357.     {
  358.         self.axhitme = 0;
  359.         return;
  360.     }
  361.     self.pain_finished = time + 0.5;
  362.  
  363. // don't make multiple pain sounds right after each other
  364.  
  365. // ax pain sound
  366.     if (self.axhitme == 1)
  367.     {
  368.         self.axhitme = 0;
  369.         sound (self, CHAN_VOICE, "player/axhit1.wav", 1, ATTN_NORM);
  370.         return;
  371.     }
  372.     
  373.  
  374.     rs = rint((random() * 5) + 1);
  375.  
  376.     self.noise = "";
  377.     if (rs == 1)
  378.         self.noise = "player/pain1.wav";
  379.     else if (rs == 2)
  380.         self.noise = "player/pain2.wav";
  381.     else if (rs == 3)
  382.         self.noise = "player/pain3.wav";
  383.     else if (rs == 4)
  384.         self.noise = "player/pain4.wav";
  385.     else if (rs == 5)
  386.         self.noise = "player/pain5.wav";
  387.     else
  388.         self.noise = "player/pain6.wav";
  389.  
  390.     sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
  391.     return;
  392. };
  393.  
  394. void()  player_pain1 =  [       $pain1, player_pain2    ] {PainSound();};
  395. void()  player_pain2 =  [       $pain2, player_pain3    ] {};
  396. void()  player_pain3 =  [       $pain3, player_pain4    ] {};
  397. void()  player_pain4 =  [       $pain4, player_pain5    ] {};
  398. void()  player_pain5 =  [       $pain5, player_pain6    ] {};
  399. void()  player_pain6 =  [       $pain6, player_run      ] {};
  400.  
  401. void()  player_axpain1 =        [       $axpain1,       player_axpain2  ] {PainSound();self.weaponframe=0;};
  402. void()  player_axpain2 =        [       $axpain2,       player_axpain3  ] {};
  403. void()  player_axpain3 =        [       $axpain3,       player_axpain4  ] {};
  404. void()  player_axpain4 =        [       $axpain4,       player_axpain5  ] {};
  405. void()  player_axpain5 =        [       $axpain5,       player_axpain6  ] {};
  406. void()  player_axpain6 =        [       $axpain6,       player_run      ] {};
  407.  
  408. void() player_pain =
  409. {
  410.     if (self.weaponframe)
  411.         return;
  412.  
  413.     if (self.invisible_finished > time)
  414.         return;         // eyes don't have pain frames
  415.  
  416.     if (self.weapon == IT_AXE)
  417.         player_axpain1 ();
  418.     else
  419.         player_pain1 ();
  420. };
  421.  
  422. void() player_diea1;
  423. void() player_dieb1;
  424. void() player_diec1;
  425. void() player_died1;
  426. void() player_diee1;
  427. void() player_die_ax1;
  428.  
  429. void() DeathBubblesSpawn =
  430. {
  431. local entity    bubble;
  432.     if (self.owner.waterlevel != 3)
  433.         return;
  434.     bubble = spawn();
  435.     setmodel (bubble, "progs/s_bubble.spr");
  436.     setorigin (bubble, self.owner.origin + '0 0 24');
  437.     bubble.movetype = MOVETYPE_NOCLIP;
  438.     bubble.solid = SOLID_NOT;
  439.     bubble.velocity = '0 0 15';
  440.     bubble.nextthink = time + 0.5;
  441.     bubble.think = bubble_bob;
  442.     bubble.classname = "bubble";
  443.     bubble.frame = 0;
  444.     bubble.cnt = 0;
  445.     setsize (bubble, '-8 -8 -8', '8 8 8');
  446.     self.nextthink = time + 0.1;
  447.     self.think = DeathBubblesSpawn;
  448.     self.air_finished = self.air_finished + 1;
  449.     if (self.air_finished >= self.bubble_count)
  450.         remove(self);
  451. };
  452.  
  453. void(float num_bubbles) DeathBubbles =
  454. {
  455. local entity    bubble_spawner;
  456.     
  457.     bubble_spawner = spawn();
  458.     setorigin (bubble_spawner, self.origin);
  459.     bubble_spawner.movetype = MOVETYPE_NONE;
  460.     bubble_spawner.solid = SOLID_NOT;
  461.     bubble_spawner.nextthink = time + 0.1;
  462.     bubble_spawner.think = DeathBubblesSpawn;
  463.     bubble_spawner.air_finished = 0;
  464.     bubble_spawner.owner = self;
  465.     bubble_spawner.bubble_count = num_bubbles;
  466.     return;
  467. };
  468.  
  469.  
  470. void() DeathSound =
  471. {
  472. local float             rs;
  473.  
  474.     // water death sounds
  475.     if (self.waterlevel == 3)
  476.     {
  477.         DeathBubbles(20);
  478.         sound (self, CHAN_VOICE, "player/h2odeath.wav", 1, ATTN_NONE);
  479.         return;
  480.     }
  481.     
  482.     rs = rint ((random() * 4) + 1);
  483.     if (rs == 1)
  484.         self.noise = "player/death1.wav";
  485.     if (rs == 2)
  486.         self.noise = "player/death2.wav";
  487.     if (rs == 3)
  488.         self.noise = "player/death3.wav";
  489.     if (rs == 4)
  490.         self.noise = "player/death4.wav";
  491.     if (rs == 5)
  492.         self.noise = "player/death5.wav";
  493.  
  494.     sound (self, CHAN_VOICE, self.noise, 1, ATTN_NONE);
  495.     return;
  496. };
  497.  
  498.  
  499. void() PlayerDead =
  500. {
  501.     self.nextthink = -1;
  502. // allow respawn after a certain time
  503.     self.deadflag = DEAD_DEAD;
  504. };
  505.  
  506. vector(float dm) VelocityForDamage =
  507. {
  508.     local vector v;
  509.  
  510.     v_x = 100 * crandom();
  511.     v_y = 100 * crandom();
  512.     v_z = 200 + 100 * random();
  513.  
  514.     if (dm > -50)
  515.     {
  516. //              dprint ("level 1\n");
  517.         v = v * 0.7;
  518.     }
  519.     else if (dm > -200)
  520.     {
  521. //              dprint ("level 3\n");
  522.         v = v * 2;
  523.     }
  524.     else
  525.         v = v * 10;
  526.  
  527.     return v;
  528. };
  529.  
  530. void(string gibname, float dm) ThrowGib =
  531. {
  532.     local   entity new;
  533.  
  534.     new = spawn();
  535.     new.origin = self.origin;
  536.     setmodel (new, gibname);
  537.     setsize (new, '0 0 0', '0 0 0');
  538.     new.velocity = VelocityForDamage (dm);
  539.     new.movetype = MOVETYPE_BOUNCE;
  540.     new.solid = SOLID_NOT;
  541.     new.avelocity_x = random()*600;
  542.     new.avelocity_y = random()*600;
  543.     new.avelocity_z = random()*600;
  544.     new.think = SUB_Remove;
  545.     new.ltime = time;
  546.     new.nextthink = time + 10 + random()*10;
  547.     new.frame = 0;
  548.     new.flags = 0;
  549. };
  550.  
  551. void(string gibname, float dm) ThrowHead =
  552. {
  553.     setmodel (self, gibname);
  554.     self.frame = 0;
  555.     self.nextthink = -1;
  556.     self.movetype = MOVETYPE_BOUNCE;
  557.     self.takedamage = DAMAGE_NO;
  558.     self.solid = SOLID_NOT;
  559.     self.view_ofs = '0 0 8';
  560.     setsize (self, '-16 -16 0', '16 16 56');
  561.     self.velocity = VelocityForDamage (dm);
  562.     self.origin_z = self.origin_z - 24;
  563.     self.flags = self.flags - (self.flags & FL_ONGROUND);
  564.     self.avelocity = crandom() * '0 600 0';
  565. };
  566.  
  567.  
  568. void() GibPlayer =
  569. {
  570.     ThrowHead ("progs/h_player.mdl", self.health);
  571.     ThrowGib ("progs/gib1.mdl", self.health);
  572.     ThrowGib ("progs/gib2.mdl", self.health);
  573.     ThrowGib ("progs/gib3.mdl", self.health);
  574.  
  575.     self.deadflag = DEAD_DEAD;
  576.  
  577.     if (damage_attacker.classname == "teledeath")
  578.     {
  579.         sound (self, CHAN_VOICE, "player/teledth1.wav", 1, ATTN_NONE);
  580.         return;
  581.     }
  582.  
  583.     if (damage_attacker.classname == "teledeath2")
  584.     {
  585.         sound (self, CHAN_VOICE, "player/teledth1.wav", 1, ATTN_NONE);
  586.         return;
  587.     }
  588.         
  589.     if (random() < 0.5)
  590.         sound (self, CHAN_VOICE, "player/gib.wav", 1, ATTN_NONE);
  591.     else
  592.         sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NONE);
  593. };
  594.  
  595. void() PlayerDie =
  596. {
  597.     local   float   i;
  598.     
  599.     self.items = self.items - (self.items & IT_INVISIBILITY);
  600.     self.invisible_finished = 0;    // don't die as eyes
  601.     self.invincible_finished = 0;
  602.     self.super_damage_finished = 0;
  603.     self.radsuit_finished = 0;
  604.     self.modelindex = modelindex_player;    // don't use eyes
  605.  
  606.     if (deathmatch || coop)
  607.         DropBackpack();
  608.     
  609.     if (self.items2 & IT2_MEGAPOWER)
  610.         DropMegaPower();
  611.  
  612.     self.weaponmodel="";
  613.     self.view_ofs = '0 0 -8';
  614.     self.deadflag = DEAD_DYING;
  615.     self.solid = SOLID_NOT;
  616.     self.flags = self.flags - (self.flags & FL_ONGROUND);
  617.     self.movetype = MOVETYPE_TOSS;
  618.     if (self.velocity_z < 10)
  619.         self.velocity_z = self.velocity_z + random()*300;
  620.  
  621.     if (self.health < -40)
  622.     {
  623.         GibPlayer ();
  624.         return;
  625.     }
  626.  
  627.     DeathSound();
  628.     
  629.     self.angles_x = 0;
  630.     self.angles_z = 0;
  631.     
  632.     if (self.weapon == IT_AXE)
  633.     {
  634.         player_die_ax1 ();
  635.         return;
  636.     }
  637.     
  638.     i = cvar("temp1");
  639.     if (!i)
  640.         i = 1 + floor(random()*6);
  641.     
  642.     if (i == 1)
  643.         player_diea1();
  644.     else if (i == 2)
  645.         player_dieb1();
  646.     else if (i == 3)
  647.         player_diec1();
  648.     else if (i == 4)
  649.         player_died1();
  650.     else
  651.         player_diee1();
  652.  
  653. };
  654.  
  655. void() set_suicide_frame =
  656. {       // used by klill command and diconnect command
  657.     if (self.model != "progs/player.mdl")
  658.         return; // allready gibbed
  659.     self.frame = $deatha11;
  660.     self.solid = SOLID_NOT;
  661.     self.movetype = MOVETYPE_TOSS;
  662.     self.deadflag = DEAD_DEAD;
  663.     self.nextthink = -1;
  664. };
  665.  
  666.  
  667. void()  player_diea1    =       [       $deatha1,       player_diea2    ] {};
  668. void()  player_diea2    =       [       $deatha2,       player_diea3    ] {};
  669. void()  player_diea3    =       [       $deatha3,       player_diea4    ] {};
  670. void()  player_diea4    =       [       $deatha4,       player_diea5    ] {};
  671. void()  player_diea5    =       [       $deatha5,       player_diea6    ] {};
  672. void()  player_diea6    =       [       $deatha6,       player_diea7    ] {};
  673. void()  player_diea7    =       [       $deatha7,       player_diea8    ] {};
  674. void()  player_diea8    =       [       $deatha8,       player_diea9    ] {};
  675. void()  player_diea9    =       [       $deatha9,       player_diea10   ] {};
  676. void()  player_diea10   =       [       $deatha10,      player_diea11   ] {};
  677. void()  player_diea11   =       [       $deatha11,      player_diea11 ] {PlayerDead();};
  678.  
  679. void()  player_dieb1    =       [       $deathb1,       player_dieb2    ] {};
  680. void()  player_dieb2    =       [       $deathb2,       player_dieb3    ] {};
  681. void()  player_dieb3    =       [       $deathb3,       player_dieb4    ] {};
  682. void()  player_dieb4    =       [       $deathb4,       player_dieb5    ] {};
  683. void()  player_dieb5    =       [       $deathb5,       player_dieb6    ] {};
  684. void()  player_dieb6    =       [       $deathb6,       player_dieb7    ] {};
  685. void()  player_dieb7    =       [       $deathb7,       player_dieb8    ] {};
  686. void()  player_dieb8    =       [       $deathb8,       player_dieb9    ] {};
  687. void()  player_dieb9    =       [       $deathb9,       player_dieb9    ] {PlayerDead();};
  688.  
  689. void()  player_diec1    =       [       $deathc1,       player_diec2    ] {};
  690. void()  player_diec2    =       [       $deathc2,       player_diec3    ] {};
  691. void()  player_diec3    =       [       $deathc3,       player_diec4    ] {};
  692. void()  player_diec4    =       [       $deathc4,       player_diec5    ] {};
  693. void()  player_diec5    =       [       $deathc5,       player_diec6    ] {};
  694. void()  player_diec6    =       [       $deathc6,       player_diec7    ] {};
  695. void()  player_diec7    =       [       $deathc7,       player_diec8    ] {};
  696. void()  player_diec8    =       [       $deathc8,       player_diec9    ] {};
  697. void()  player_diec9    =       [       $deathc9,       player_diec10   ] {};
  698. void()  player_diec10   =       [       $deathc10,      player_diec11   ] {};
  699. void()  player_diec11   =       [       $deathc11,      player_diec12   ] {};
  700. void()  player_diec12   =       [       $deathc12,      player_diec13   ] {};
  701. void()  player_diec13   =       [       $deathc13,      player_diec14   ] {};
  702. void()  player_diec14   =       [       $deathc14,      player_diec15   ] {};
  703. void()  player_diec15   =       [       $deathc15,      player_diec15 ] {PlayerDead();};
  704.  
  705. void()  player_died1    =       [       $deathd1,       player_died2    ] {};
  706. void()  player_died2    =       [       $deathd2,       player_died3    ] {};
  707. void()  player_died3    =       [       $deathd3,       player_died4    ] {};
  708. void()  player_died4    =       [       $deathd4,       player_died5    ] {};
  709. void()  player_died5    =       [       $deathd5,       player_died6    ] {};
  710. void()  player_died6    =       [       $deathd6,       player_died7    ] {};
  711. void()  player_died7    =       [       $deathd7,       player_died8    ] {};
  712. void()  player_died8    =       [       $deathd8,       player_died9    ] {};
  713. void()  player_died9    =       [       $deathd9,       player_died9    ] {PlayerDead();};
  714.  
  715. void()  player_diee1    =       [       $deathe1,       player_diee2    ] {};
  716. void()  player_diee2    =       [       $deathe2,       player_diee3    ] {};
  717. void()  player_diee3    =       [       $deathe3,       player_diee4    ] {};
  718. void()  player_diee4    =       [       $deathe4,       player_diee5    ] {};
  719. void()  player_diee5    =       [       $deathe5,       player_diee6    ] {};
  720. void()  player_diee6    =       [       $deathe6,       player_diee7    ] {};
  721. void()  player_diee7    =       [       $deathe7,       player_diee8    ] {};
  722. void()  player_diee8    =       [       $deathe8,       player_diee9    ] {};
  723. void()  player_diee9    =       [       $deathe9,       player_diee9    ] {PlayerDead();};
  724.  
  725. void()  player_die_ax1  =       [       $axdeth1,       player_die_ax2  ] {};
  726. void()  player_die_ax2  =       [       $axdeth2,       player_die_ax3  ] {};
  727. void()  player_die_ax3  =       [       $axdeth3,       player_die_ax4  ] {};
  728. void()  player_die_ax4  =       [       $axdeth4,       player_die_ax5  ] {};
  729. void()  player_die_ax5  =       [       $axdeth5,       player_die_ax6  ] {};
  730. void()  player_die_ax6  =       [       $axdeth6,       player_die_ax7  ] {};
  731. void()  player_die_ax7  =       [       $axdeth7,       player_die_ax8  ] {};
  732. void()  player_die_ax8  =       [       $axdeth8,       player_die_ax9  ] {};
  733. void()  player_die_ax9  =       [       $axdeth9,       player_die_ax9  ] {PlayerDead();};
  734.