home *** CD-ROM | disk | FTP | other *** search
/ Superpower (Alt) / SUPERPOWER.iso / q / patch / mbq091 / player.qc < prev    next >
Encoding:
Text File  |  1996-08-19  |  24.1 KB  |  818 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_demon_jump =[     $axstnd11,  player_demon_jump  ]
  90. {
  91.     if (self.walkframe >= 12)
  92.         self.walkframe = 11;
  93.     self.frame = $axstnd11 + self.walkframe;
  94.     self.walkframe = self.walkframe + 1;
  95.     if (self.flags & FL_ONGROUND)
  96.         player_stand1();
  97. };
  98.  
  99. void() player_run;
  100.  
  101. void()  player_stand1 =[        $axstnd1,       player_stand1   ]
  102. {
  103.     self.weaponframe=0;
  104.     if (self.velocity_x || self.velocity_y)
  105.     {
  106.         self.walkframe=0;
  107.         player_run();
  108.         return;
  109.     }
  110.  
  111.     if (self.invincible_time)
  112.     {
  113.     // We are a demon
  114.         self.view_ofs = '0 0 4';
  115.         if (self.walkframe >= 13)
  116.             self.walkframe = 0;
  117.         self.frame = $axrun1 + self.walkframe;
  118.     }
  119.     else if (self.weapon == IT_AXE)
  120.     {
  121.         if (self.walkframe >= 12)
  122.             self.walkframe = 0;
  123.         self.frame = $axstnd1 + self.walkframe;
  124.     }
  125.     else
  126.     {
  127.         if (self.walkframe >= 5)
  128.             self.walkframe = 0;
  129.         self.frame = $stand1 + self.walkframe;
  130.     }
  131.     self.walkframe = self.walkframe + 1;    
  132. };
  133.  
  134. void()  player_run =[   $rockrun1,      player_run      ]
  135. {
  136.     self.weaponframe=0;
  137.     if (!self.velocity_x && !self.velocity_y)
  138.     {
  139.         self.walkframe=0;
  140.         player_stand1();
  141.         return;
  142.     }
  143.  
  144.     if(self.invincible_time)
  145.     {
  146.         //We are a demon
  147.         self.view_ofs = '0 0 4';
  148.         if (self.walkframe >= 8)
  149.             self.walkframe = 0;
  150.         self.frame = $stand2 + self.walkframe;
  151.     }
  152.     else if (self.weapon == IT_AXE)
  153.     {
  154.         if (self.walkframe == 6)
  155.             self.walkframe = 0;
  156.         self.frame = $axrun1 + self.walkframe;
  157.     }
  158.     else
  159.     {
  160.         if (self.walkframe == 6)
  161.             self.walkframe = 0;
  162.         self.frame = self.frame + self.walkframe;
  163.     }
  164.  
  165. /*
  166. MOD
  167. Footsteps v0.5
  168. by Brett "Vuh" Wagner
  169. brettw@compumedia.com
  170. comments welcome
  171. MOD
  172. */
  173.     if (self.walkframe == 1 || self.walkframe == 4 )
  174.     {
  175.         if (checkbottom(self) == TRUE)
  176.         {
  177.             if (self.waterlevel == 0)
  178.                 sound (self, CHAN_VOICE, "player/step.wav", 1, ATTN_NORM);
  179.         }
  180.     }
  181. /*
  182. END MOD
  183. Footsteps v0.5
  184. END MOD
  185. */
  186.     self.walkframe = self.walkframe + 1;
  187. };
  188.  
  189.  
  190. void()  player_shot1 =  [$shotatt1, player_shot2        ] {self.weaponframe=1;
  191. self.effects = self.effects | EF_MUZZLEFLASH;};
  192. void()  player_shot2 =  [$shotatt2, player_shot3        ] {self.weaponframe=2;};
  193. void()  player_shot3 =  [$shotatt3, player_shot4        ] {self.weaponframe=3;};
  194. void()  player_shot4 =  [$shotatt4, player_shot5        ] {self.weaponframe=4;};
  195. void()  player_shot5 =  [$shotatt5, player_shot6        ] {self.weaponframe=5;};
  196. void()  player_shot6 =  [$shotatt6, player_run  ] {self.weaponframe=6;};
  197.  
  198. void()  player_axe1 =   [$axatt1, player_axe2   ] {self.weaponframe=1;};
  199. void()  player_axe2 =   [$axatt2, player_axe3   ] {self.weaponframe=2;};
  200. void()  player_axe3 =   [$axatt3, player_axe4   ] {self.weaponframe=3;W_FireAxe();};
  201. void()  player_axe4 =   [$axatt4, player_run    ] {self.weaponframe=4;};
  202.  
  203. void()  player_axeb1 =  [$axattb1, player_axeb2 ] {self.weaponframe=5;};
  204. void()  player_axeb2 =  [$axattb2, player_axeb3 ] {self.weaponframe=6;};
  205. void()  player_axeb3 =  [$axattb3, player_axeb4 ] {self.weaponframe=7;W_FireAxe();};
  206. void()  player_axeb4 =  [$axattb4, player_run   ] {self.weaponframe=8;};
  207.  
  208. void()  player_axec1 =  [$axattc1, player_axec2 ] {self.weaponframe=1;};
  209. void()  player_axec2 =  [$axattc2, player_axec3 ] {self.weaponframe=2;};
  210. void()  player_axec3 =  [$axattc3, player_axec4 ] {self.weaponframe=3;W_FireAxe();};
  211. void()  player_axec4 =  [$axattc4, player_run   ] {self.weaponframe=4;};
  212.  
  213. void()  player_axed1 =  [$axattd1, player_axed2 ] {self.weaponframe=5;};
  214. void()  player_axed2 =  [$axattd2, player_axed3 ] {self.weaponframe=6;};
  215. void()  player_axed3 =  [$axattd3, player_axed4 ] {self.weaponframe=7;W_FireAxe();};
  216. void()  player_axed4 =  [$axattd4, player_run   ] {self.weaponframe=8;};
  217.  
  218. void(float side) Player_Demon_Melee;
  219.  
  220. void()  player_dattack = [$deatha5, player_dattack2 ] {self.view_ofs = '0 0 8';};
  221. void()  player_dattack2 = [$deatha6, player_dattack3 ] {self.view_ofs = '0 0 16';};
  222. void()  player_dattack3 = [$deatha7, player_dattack4 ] {self.view_ofs = '0 0 25';};
  223. void()  player_dattack4 = [$deatha8, player_dattack5 ] {self.view_ofs = '0 0 23';};
  224. void()  player_dattack5 = [$deatha9, player_dattack6 ] {self.view_ofs = '0 0 21'; Player_Demon_Melee(200);};
  225. void()  player_dattack6 = [$deatha10, player_dattack7 ] {self.view_ofs = '0 0 23';};
  226. void()  player_dattack7 = [$deatha11, player_dattack8 ] {self.view_ofs = '0 0 24';};
  227. void()  player_dattack8 = [$deathb1, player_dattack9 ] {self.view_ofs = '0 0 25';};              
  228. void()  player_dattack9 = [$deathb2, player_dattack10 ] {self.view_ofs = '0 0 24';};
  229. void()  player_dattack10 = [$deathb3, player_dattack11 ] {self.view_ofs = '0 0 23';};
  230. void()  player_dattack11 = [$deathb4, player_dattack12 ] {self.view_ofs = '0 0 21'; Player_Demon_Melee(-200);};
  231. void()  player_dattack12 = [$deathb5, player_dattack13 ] {self.view_ofs = '0 0 16';};
  232. void()  player_dattack13 = [$deathb6, player_dattack14 ] {self.view_ofs = '0 0 12';};
  233. void()  player_dattack14 = [$deathb7, player_dattack15 ] {self.view_ofs = '0 0 8';};
  234. void()  player_dattack15 = [$deathb8, player_stand1 ] {self.view_ofs = '0 0 4';};
  235.  
  236. void(float side) Player_Demon_Melee =
  237. {
  238.     local   vector  source;
  239.     local   vector  org;
  240.     local   float   ldmg;
  241.  
  242.     sound (self, CHAN_WEAPON, "weapons/ax1.wav", 1, ATTN_NORM);        
  243.  
  244.     source = self.origin + '0 0 4';
  245.     makevectors (self.angles);
  246.     traceline (source, source + v_forward*64, FALSE, self);
  247.     if (!trace_ent.takedamage)
  248.         traceline (source, source + v_forward*64 + v_right*30, FALSE, self);
  249.     if (!trace_ent.takedamage)
  250.         traceline (source, source + v_forward*64 - v_right*30, FALSE, self);
  251.  
  252.     if (trace_fraction == 1.0)
  253.         return;
  254.     
  255.     org = trace_endpos - v_forward*4;
  256.     if (trace_ent.takedamage)
  257.     {
  258.         sound (self, CHAN_WEAPON, "demon/dhit2.wav", 1, ATTN_NORM);
  259.         ldmg = 40 + 10*random();
  260.         T_Damage (trace_ent, self, self, ldmg); 
  261.  
  262.         SpawnMeatSpray (self.origin + v_forward*16, side * v_right);
  263.     }
  264. };
  265.  
  266. void() Player_Demon_JumpTouch =
  267. {
  268.     local float ldmg;
  269.  
  270.     if(other.takedamage)
  271.     {
  272.         ldmg = 40 + 10*random();
  273.         T_Damage(other, self, self, ldmg);
  274.         SpawnMeatSpray (self.origin + v_forward*20,  100* v_forward);
  275.         SpawnMeatSpray (self.origin + v_forward*20,  50* v_forward);
  276.     }
  277.  
  278.     self.touch = SUB_Null;
  279. };
  280.  
  281.  
  282. //============================================================================
  283.  
  284. void() player_nail1   =[$nailatt1, player_nail2  ] 
  285. {
  286.     self.effects = self.effects | EF_MUZZLEFLASH;
  287.  
  288.     if (!self.button0)
  289.         {player_run ();return;}
  290.     self.weaponframe = self.weaponframe + 1;
  291.     if (self.weaponframe == 9)
  292.         self.weaponframe = 1;
  293.     SuperDamageSound();
  294.     W_FireSpikes (4);
  295.     self.attack_finished = time + 0.2;
  296. };
  297. void() player_nail2   =[$nailatt2, player_nail1  ]
  298. {
  299.     self.effects = self.effects | EF_MUZZLEFLASH;
  300.  
  301.     if (!self.button0)
  302.         {player_run ();return;}
  303.     self.weaponframe = self.weaponframe + 1;
  304.     if (self.weaponframe == 9)
  305.         self.weaponframe = 1;
  306.     SuperDamageSound();
  307.     W_FireSpikes (-4);
  308.     self.attack_finished = time + 0.2;
  309. };
  310.  
  311. //============================================================================
  312.  
  313. void() player_light1   =[$light1, player_light2  ] 
  314. {
  315.     self.effects = self.effects | EF_MUZZLEFLASH;
  316.  
  317.     if (!self.button0)
  318.         {player_run ();return;}
  319.     self.weaponframe = self.weaponframe + 1;
  320.     if (self.weaponframe == 5)
  321.         self.weaponframe = 1;
  322.     SuperDamageSound();
  323.     W_FireLightning();
  324.     self.attack_finished = time + 0.2;
  325. };
  326. void() player_light2   =[$light2, player_light1  ]
  327. {
  328.     self.effects = self.effects | EF_MUZZLEFLASH;
  329.  
  330.     if (!self.button0)
  331.         {player_run ();return;}
  332.     self.weaponframe = self.weaponframe + 1;
  333.     if (self.weaponframe == 5)
  334.         self.weaponframe = 1;
  335.     SuperDamageSound();
  336.     W_FireLightning();
  337.     self.attack_finished = time + 0.2;
  338. };
  339.  
  340. //============================================================================
  341.  
  342.  
  343. void() player_rocket1   =[$rockatt1, player_rocket2  ] {self.weaponframe=1;
  344. self.effects = self.effects | EF_MUZZLEFLASH;};
  345. void() player_rocket2   =[$rockatt2, player_rocket3  ] {self.weaponframe=2;};
  346. void() player_rocket3   =[$rockatt3, player_rocket4  ] {self.weaponframe=3;};
  347. void() player_rocket4   =[$rockatt4, player_rocket5  ] {self.weaponframe=4;};
  348. void() player_rocket5   =[$rockatt5, player_rocket6  ] {self.weaponframe=5;};
  349. void() player_rocket6   =[$rockatt6, player_run  ] {self.weaponframe=6;};
  350. void(float num_bubbles) DeathBubbles;
  351.  
  352. void() PainSound =
  353. {
  354. local float             rs;
  355.  
  356.     if (self.health < 0)
  357.         return;
  358.  
  359.     if (damage_attacker.classname == "teledeath")
  360.     {
  361.         sound (self, CHAN_VOICE, "player/teledth1.wav", 1, ATTN_NONE);
  362.         return;
  363.     }
  364.  
  365. // water pain sounds
  366.     if (self.watertype == CONTENT_WATER && self.waterlevel == 3)
  367.     {
  368.         DeathBubbles(1);
  369.         if (random() > 0.5)
  370.             sound (self, CHAN_VOICE, "player/drown1.wav", 1, ATTN_NORM);
  371.         else
  372.             sound (self, CHAN_VOICE, "player/drown2.wav", 1, ATTN_NORM);
  373.         return;
  374.     }
  375.  
  376. // slime pain sounds
  377.     if (self.watertype == CONTENT_SLIME)
  378.     {
  379. // FIX ME       put in some steam here
  380.         if (random() > 0.5)
  381.             sound (self, CHAN_VOICE, "player/lburn1.wav", 1, ATTN_NORM);
  382.         else
  383.             sound (self, CHAN_VOICE, "player/lburn2.wav", 1, ATTN_NORM);
  384.         return;
  385.     }
  386.  
  387.     if (self.watertype == CONTENT_LAVA)
  388.     {
  389.         if (random() > 0.5)
  390.             sound (self, CHAN_VOICE, "player/lburn1.wav", 1, ATTN_NORM);
  391.         else
  392.             sound (self, CHAN_VOICE, "player/lburn2.wav", 1, ATTN_NORM);
  393.         return;
  394.     }
  395.  
  396.     if (self.pain_finished > time)
  397.     {
  398.         self.axhitme = 0;
  399.         return;
  400.     }
  401.     self.pain_finished = time + 0.5;
  402.  
  403. // don't make multiple pain sounds right after each other
  404.  
  405. // ax pain sound
  406.     if (self.axhitme == 1)
  407.     {
  408.         self.axhitme = 0;
  409.         sound (self, CHAN_VOICE, "player/axhit1.wav", 1, ATTN_NORM);
  410.         return;
  411.     }
  412.     
  413.  
  414.     rs = rint((random() * 5) + 1);
  415.  
  416.     self.noise = "";
  417.     if (rs == 1)
  418.         self.noise = "player/pain1.wav";
  419.     else if (rs == 2)
  420.         self.noise = "player/pain2.wav";
  421.     else if (rs == 3)
  422.         self.noise = "player/pain3.wav";
  423.     else if (rs == 4)
  424.         self.noise = "player/pain4.wav";
  425.     else if (rs == 5)
  426.         self.noise = "player/pain5.wav";
  427.     else
  428.         self.noise = "player/pain6.wav";
  429.  
  430.     sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
  431.     return;
  432. };
  433.  
  434. void()  player_dpain =  [       $pain5, player_dpain1    ]
  435. {
  436.     self.walkframe = 1;
  437.     PainSound();
  438.     self.weaponframe = 0;
  439.     self.frame = $pain5;
  440. };
  441.  
  442. void()  player_dpain1 =  [      $pain5, player_dpain1    ]
  443. {        
  444.     if (self.walkframe >=10)
  445.         player_stand1();
  446.     if (self.walkframe < 6)
  447.         self.frame = $pain5 + self.walkframe;
  448.     else self.frame = $pain5 + (10 - self.walkframe);
  449.     self.walkframe = self.walkframe + 1;
  450. };
  451.  
  452. void()  player_pain1 =  [       $pain1, player_pain2    ] {PainSound();self.weaponframe=0;};
  453. void()  player_pain2 =  [       $pain2, player_pain3    ] {};
  454. void()  player_pain3 =  [       $pain3, player_pain4    ] {};
  455. void()  player_pain4 =  [       $pain4, player_pain5    ] {};
  456. void()  player_pain5 =  [       $pain5, player_pain6    ] {};
  457. void()  player_pain6 =  [       $pain6, player_run      ] {};
  458.  
  459. void()  player_axpain1 =        [       $axpain1,       player_axpain2  ] {PainSound();self.weaponframe=0;};
  460. void()  player_axpain2 =        [       $axpain2,       player_axpain3  ] {};
  461. void()  player_axpain3 =        [       $axpain3,       player_axpain4  ] {};
  462. void()  player_axpain4 =        [       $axpain4,       player_axpain5  ] {};
  463. void()  player_axpain5 =        [       $axpain5,       player_axpain6  ] {};
  464. void()  player_axpain6 =        [       $axpain6,       player_run      ] {};
  465.  
  466. void() player_pain =
  467. {
  468.     if (self.weaponframe)
  469.         return;
  470.  
  471.     if (self.invisible_finished > time)
  472.         return;         // eyes don't have pain frames
  473.  
  474.     if ((self.invincible_time) && (self.attack_finished < time))
  475.         player_dpain ();
  476.     else if (self.weapon == IT_AXE)
  477.         player_axpain1 ();
  478.     else
  479.         player_pain1 ();
  480. };
  481.  
  482. void() player_diea1;
  483. void() player_dieb1;
  484. void() player_diec1;
  485. void() player_died1;
  486. void() player_diee1;
  487. void() player_die_ax1;
  488.  
  489. void() DeathBubblesSpawn =
  490. {
  491. local entity    bubble;
  492.     if (self.owner.waterlevel != 3)
  493.         return;
  494.     bubble = spawn();
  495.     setmodel (bubble, "progs/s_bubble.spr");
  496.     setorigin (bubble, self.owner.origin + '0 0 24');
  497.     bubble.movetype = MOVETYPE_NOCLIP;
  498.     bubble.solid = SOLID_NOT;
  499.     bubble.velocity = '0 0 15';
  500.     bubble.nextthink = time + 0.5;
  501.     bubble.think = bubble_bob;
  502.     bubble.classname = "bubble";
  503.     bubble.frame = 0;
  504.     bubble.cnt = 0;
  505.     setsize (bubble, '-8 -8 -8', '8 8 8');
  506.     self.nextthink = time + 0.1;
  507.     self.think = DeathBubblesSpawn;
  508.     self.air_finished = self.air_finished + 1;
  509.     if (self.air_finished >= self.bubble_count)
  510.         remove(self);
  511. };
  512.  
  513. void(float num_bubbles) DeathBubbles =
  514. {
  515. local entity    bubble_spawner;
  516.     
  517.     bubble_spawner = spawn();
  518.     setorigin (bubble_spawner, self.origin);
  519.     bubble_spawner.movetype = MOVETYPE_NONE;
  520.     bubble_spawner.solid = SOLID_NOT;
  521.     bubble_spawner.nextthink = time + 0.1;
  522.     bubble_spawner.think = DeathBubblesSpawn;
  523.     bubble_spawner.air_finished = 0;
  524.     bubble_spawner.owner = self;
  525.     bubble_spawner.bubble_count = num_bubbles;
  526.     return;
  527. };
  528.  
  529.  
  530. void() DeathSound =
  531. {
  532. local float             rs;
  533.  
  534.     // water death sounds
  535.     if (self.waterlevel == 3)
  536.     {
  537.         DeathBubbles(20);
  538.         sound (self, CHAN_VOICE, "player/h2odeath.wav", 1, ATTN_NONE);
  539.         return;
  540.     }
  541.     
  542.     rs = rint ((random() * 4) + 1);
  543.     if (rs == 1)
  544.         self.noise = "player/death1.wav";
  545.     if (rs == 2)
  546.         self.noise = "player/death2.wav";
  547.     if (rs == 3)
  548.         self.noise = "player/death3.wav";
  549.     if (rs == 4)
  550.         self.noise = "player/death4.wav";
  551.     if (rs == 5)
  552.         self.noise = "player/death5.wav";
  553.  
  554.     sound (self, CHAN_VOICE, self.noise, 1, ATTN_NONE);
  555.     return;
  556. };
  557.  
  558.  
  559. void() PlayerDead =
  560. {
  561.     self.nextthink = -1;
  562. // allow respawn after a certain time
  563.     self.deadflag = DEAD_DEAD;
  564. };
  565.  
  566. vector(float dm) VelocityForDamage =
  567. {
  568.     local vector v;
  569.  
  570.     v_x = 100 * crandom();
  571.     v_y = 100 * crandom();
  572.     v_z = 200 + 100 * random();
  573.  
  574.     if (dm > -50)
  575.     {
  576. //              dprint ("level 1\n");
  577.         v = v * 0.7;
  578.     }
  579.     else if (dm > -200)
  580.     {
  581. //              dprint ("level 3\n");
  582.         v = v * 2;
  583.     }
  584.     else
  585.         v = v * 10;
  586.  
  587.     return v;
  588. };
  589.  
  590. void(string gibname, float dm) ThrowGib =
  591. {
  592.     local   entity new;
  593.  
  594.     new = spawn();
  595.     new.origin = self.origin;
  596.     setmodel (new, gibname);
  597.     setsize (new, '0 0 0', '0 0 0');
  598.     new.velocity = VelocityForDamage (dm);
  599.     new.movetype = MOVETYPE_BOUNCE;
  600.     new.solid = SOLID_NOT;
  601.     new.avelocity_x = random()*600;
  602.     new.avelocity_y = random()*600;
  603.     new.avelocity_z = random()*600;
  604.     new.think = SUB_Remove;
  605.     new.ltime = time;
  606.     new.nextthink = time + 10 + random()*10;
  607.     new.frame = 0;
  608.     new.flags = 0;
  609. };
  610.  
  611. void(string gibname, float dm) ThrowHead =
  612. {
  613.     setmodel (self, gibname);
  614.     self.frame = 0;
  615.     self.nextthink = -1;
  616.     self.movetype = MOVETYPE_BOUNCE;
  617.     self.takedamage = DAMAGE_NO;
  618.     self.solid = SOLID_NOT;
  619.     self.view_ofs = '0 0 8';
  620.     setsize (self, '-16 -16 0', '16 16 56');
  621.     self.velocity = VelocityForDamage (dm);
  622.     self.origin_z = self.origin_z - 24;
  623.     self.flags = self.flags - (self.flags & FL_ONGROUND);
  624.     self.avelocity = crandom() * '0 600 0';
  625. };
  626.  
  627.  
  628. void() GibPlayer =
  629. {
  630.     ThrowHead ("progs/h_player.mdl", self.health);
  631.     ThrowGib ("progs/gib1.mdl", self.health);
  632.     ThrowGib ("progs/gib2.mdl", self.health);
  633.     ThrowGib ("progs/gib3.mdl", self.health);
  634.  
  635.     self.deadflag = DEAD_DEAD;
  636.  
  637.     if (damage_attacker.classname == "teledeath")
  638.     {
  639.         sound (self, CHAN_VOICE, "player/teledth1.wav", 1, ATTN_NONE);
  640.         return;
  641.     }
  642.  
  643.     if (damage_attacker.classname == "teledeath2")
  644.     {
  645.         sound (self, CHAN_VOICE, "player/teledth1.wav", 1, ATTN_NONE);
  646.         return;
  647.     }
  648.         
  649.     if (random() < 0.5)
  650.         sound (self, CHAN_VOICE, "player/gib.wav", 1, ATTN_NONE);
  651.     else
  652.         sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NONE);
  653. };
  654.  
  655. void() player_ddie  = [ $axdeth5, player_ddie1 ]
  656. {
  657.     self.walkframe = 1;
  658.     self.frame = $axdeth5;
  659. };
  660.  
  661. void() player_ddie2 = [ $deatha4, player_ddie2 ] {PlayerDead();};
  662.  
  663. void() player_ddie1 = [ $axdeth5, player_ddie1 ] 
  664. {
  665.     if (self.walkframe >= 8) {
  666.         player_ddie2();
  667.     }
  668.     else {
  669.         self.frame = $axdeth5 + self.walkframe;
  670.         self.walkframe = self.walkframe + 1;
  671.     }
  672. };
  673.  
  674.  
  675. void() PlayerDie =
  676. {
  677.     local   float   i;
  678.     
  679.     self.items = self.items - (self.items & IT_INVISIBILITY);
  680.     self.invisible_finished = 0;    // don't die as eyes
  681.     self.invincible_finished = 0;
  682.     self.super_damage_finished = 0;
  683.     self.radsuit_finished = 0;
  684.     if (self.modelindex == modelindex_eyes)
  685.         self.modelindex = modelindex_player;    // don't use eyes
  686.  
  687.     if (deathmatch || coop)
  688.         DropBackpack();
  689.     
  690.     self.weaponmodel="";
  691.     self.view_ofs = '0 0 -8';
  692.     self.deadflag = DEAD_DYING;
  693.     self.solid = SOLID_NOT;
  694.     self.flags = self.flags - (self.flags & FL_ONGROUND);
  695.     self.movetype = MOVETYPE_TOSS;
  696.     if (self.velocity_z < 10)
  697.         self.velocity_z = self.velocity_z + random()*300;
  698.  
  699.     if (self.health < -40)
  700.     {
  701.         GibPlayer ();
  702.         return;
  703.     }
  704.  
  705.     DeathSound();
  706.     
  707.     self.angles_x = 0;
  708.     self.angles_z = 0;
  709.  
  710.     if (self.invincible_time)
  711.     {
  712.         player_ddie ();
  713.         return;
  714.     }
  715.  
  716.     if (self.weapon == IT_AXE)
  717.     {
  718.         player_die_ax1 ();
  719.         return;
  720.     }
  721.     
  722.     i = cvar("temp1");
  723.     if (!i)
  724.         i = 1 + floor(random()*6);
  725.     
  726.     if (i == 1)
  727.         player_diea1();
  728.     else if (i == 2)
  729.         player_dieb1();
  730.     else if (i == 3)
  731.         player_diec1();
  732.     else if (i == 4)
  733.         player_died1();
  734.     else
  735.         player_diee1();
  736.  
  737. };
  738.  
  739. void() set_suicide_frame =
  740. {       // used by klill command and diconnect command
  741.     if (self.model != "progs/player.mdl")
  742.         return; // allready gibbed
  743.     self.frame = $deatha11;
  744.     self.solid = SOLID_NOT;
  745.     self.movetype = MOVETYPE_TOSS;
  746.     self.deadflag = DEAD_DEAD;
  747.     self.nextthink = -1;
  748. };
  749.  
  750.  
  751. void()  player_diea1    =       [       $deatha1,       player_diea2    ] {};
  752. void()  player_diea2    =       [       $deatha2,       player_diea3    ] {};
  753. void()  player_diea3    =       [       $deatha3,       player_diea4    ] {};
  754. void()  player_diea4    =       [       $deatha4,       player_diea5    ] {};
  755. void()  player_diea5    =       [       $deatha5,       player_diea6    ] {};
  756. void()  player_diea6    =       [       $deatha6,       player_diea7    ] {};
  757. void()  player_diea7    =       [       $deatha7,       player_diea8    ] {};
  758. void()  player_diea8    =       [       $deatha8,       player_diea9    ] {};
  759. void()  player_diea9    =       [       $deatha9,       player_diea10   ] {};
  760. void()  player_diea10   =       [       $deatha10,      player_diea11   ] {};
  761. void()  player_diea11   =       [       $deatha11,      player_diea11 ] {PlayerDead();};
  762.  
  763. void()  player_dieb1    =       [       $deathb1,       player_dieb2    ] {};
  764. void()  player_dieb2    =       [       $deathb2,       player_dieb3    ] {};
  765. void()  player_dieb3    =       [       $deathb3,       player_dieb4    ] {};
  766. void()  player_dieb4    =       [       $deathb4,       player_dieb5    ] {};
  767. void()  player_dieb5    =       [       $deathb5,       player_dieb6    ] {};
  768. void()  player_dieb6    =       [       $deathb6,       player_dieb7    ] {};
  769. void()  player_dieb7    =       [       $deathb7,       player_dieb8    ] {};
  770. void()  player_dieb8    =       [       $deathb8,       player_dieb9    ] {};
  771. void()  player_dieb9    =       [       $deathb9,       player_dieb9    ] {PlayerDead();};
  772.  
  773. void()  player_diec1    =       [       $deathc1,       player_diec2    ] {};
  774. void()  player_diec2    =       [       $deathc2,       player_diec3    ] {};
  775. void()  player_diec3    =       [       $deathc3,       player_diec4    ] {};
  776. void()  player_diec4    =       [       $deathc4,       player_diec5    ] {};
  777. void()  player_diec5    =       [       $deathc5,       player_diec6    ] {};
  778. void()  player_diec6    =       [       $deathc6,       player_diec7    ] {};
  779. void()  player_diec7    =       [       $deathc7,       player_diec8    ] {};
  780. void()  player_diec8    =       [       $deathc8,       player_diec9    ] {};
  781. void()  player_diec9    =       [       $deathc9,       player_diec10   ] {};
  782. void()  player_diec10   =       [       $deathc10,      player_diec11   ] {};
  783. void()  player_diec11   =       [       $deathc11,      player_diec12   ] {};
  784. void()  player_diec12   =       [       $deathc12,      player_diec13   ] {};
  785. void()  player_diec13   =       [       $deathc13,      player_diec14   ] {};
  786. void()  player_diec14   =       [       $deathc14,      player_diec15   ] {};
  787. void()  player_diec15   =       [       $deathc15,      player_diec15 ] {PlayerDead();};
  788.  
  789. void()  player_died1    =       [       $deathd1,       player_died2    ] {};
  790. void()  player_died2    =       [       $deathd2,       player_died3    ] {};
  791. void()  player_died3    =       [       $deathd3,       player_died4    ] {};
  792. void()  player_died4    =       [       $deathd4,       player_died5    ] {};
  793. void()  player_died5    =       [       $deathd5,       player_died6    ] {};
  794. void()  player_died6    =       [       $deathd6,       player_died7    ] {};
  795. void()  player_died7    =       [       $deathd7,       player_died8    ] {};
  796. void()  player_died8    =       [       $deathd8,       player_died9    ] {};
  797. void()  player_died9    =       [       $deathd9,       player_died9    ] {PlayerDead();};
  798.  
  799. void()  player_diee1    =       [       $deathe1,       player_diee2    ] {};
  800. void()  player_diee2    =       [       $deathe2,       player_diee3    ] {};
  801. void()  player_diee3    =       [       $deathe3,       player_diee4    ] {};
  802. void()  player_diee4    =       [       $deathe4,       player_diee5    ] {};
  803. void()  player_diee5    =       [       $deathe5,       player_diee6    ] {};
  804. void()  player_diee6    =       [       $deathe6,       player_diee7    ] {};
  805. void()  player_diee7    =       [       $deathe7,       player_diee8    ] {};
  806. void()  player_diee8    =       [       $deathe8,       player_diee9    ] {};
  807. void()  player_diee9    =       [       $deathe9,       player_diee9    ] {PlayerDead();};
  808.  
  809. void()  player_die_ax1  =       [       $axdeth1,       player_die_ax2  ] {};
  810. void()  player_die_ax2  =       [       $axdeth2,       player_die_ax3  ] {};
  811. void()  player_die_ax3  =       [       $axdeth3,       player_die_ax4  ] {};
  812. void()  player_die_ax4  =       [       $axdeth4,       player_die_ax5  ] {};
  813. void()  player_die_ax5  =       [       $axdeth5,       player_die_ax6  ] {};
  814. void()  player_die_ax6  =       [       $axdeth6,       player_die_ax7  ] {};
  815. void()  player_die_ax7  =       [       $axdeth7,       player_die_ax8  ] {};
  816. void()  player_die_ax8  =       [       $axdeth8,       player_die_ax9  ] {};
  817. void()  player_die_ax9  =       [       $axdeth9,       player_die_ax9  ] {PlayerDead();};
  818.