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