home *** CD-ROM | disk | FTP | other *** search
/ Quake 'em / QUAKEEM.BIN / quake / programs / byomv10 / player.qc < prev    next >
Encoding:
Text File  |  1996-08-13  |  37.6 KB  |  1,138 lines

  1. void() bubble_bob;
  2.  
  3. /*
  4. ==============================================================================
  5.  
  6. PLAYER
  7.  
  8. ==============================================================================
  9. */
  10.  
  11. $cd /raid/quake/id1/models/player_4
  12. $origin 0 -6 24
  13. $base base        
  14. $skin skin
  15.  
  16. //
  17. // running
  18. //
  19. $frame axrun1 axrun2 axrun3 axrun4 axrun5 axrun6
  20.  
  21. $frame rockrun1 rockrun2 rockrun3 rockrun4 rockrun5 rockrun6
  22.  
  23. //
  24. // standing
  25. //
  26. $frame stand1 stand2 stand3 stand4 stand5
  27.  
  28. $frame axstnd1 axstnd2 axstnd3 axstnd4 axstnd5 axstnd6
  29. $frame axstnd7 axstnd8 axstnd9 axstnd10 axstnd11 axstnd12
  30.  
  31.  
  32. //
  33. // pain
  34. //
  35. $frame axpain1 axpain2 axpain3 axpain4 axpain5 axpain6
  36.  
  37. $frame pain1 pain2 pain3 pain4 pain5 pain6
  38.  
  39.  
  40. //
  41. // death
  42. //
  43.  
  44. $frame axdeth1 axdeth2 axdeth3 axdeth4 axdeth5 axdeth6
  45. $frame axdeth7 axdeth8 axdeth9
  46.  
  47. $frame deatha1 deatha2 deatha3 deatha4 deatha5 deatha6 deatha7 deatha8
  48. $frame deatha9 deatha10 deatha11
  49.  
  50. $frame deathb1 deathb2 deathb3 deathb4 deathb5 deathb6 deathb7 deathb8
  51. $frame deathb9
  52.  
  53. $frame deathc1 deathc2 deathc3 deathc4 deathc5 deathc6 deathc7 deathc8
  54. $frame deathc9 deathc10 deathc11 deathc12 deathc13 deathc14 deathc15
  55.  
  56. $frame deathd1 deathd2 deathd3 deathd4 deathd5 deathd6 deathd7
  57. $frame deathd8 deathd9
  58.  
  59. $frame deathe1 deathe2 deathe3 deathe4 deathe5 deathe6 deathe7
  60. $frame deathe8 deathe9
  61.  
  62. //
  63. // attacks
  64. //
  65. $frame nailatt1 nailatt2
  66.  
  67. $frame light1 light2
  68.  
  69. $frame rockatt1 rockatt2 rockatt3 rockatt4 rockatt5 rockatt6
  70.  
  71. $frame shotatt1 shotatt2 shotatt3 shotatt4 shotatt5 shotatt6
  72.  
  73. $frame axatt1 axatt2 axatt3 axatt4 axatt5 axatt6
  74.  
  75. $frame axattb1 axattb2 axattb3 axattb4 axattb5 axattb6
  76.  
  77. $frame axattc1 axattc2 axattc3 axattc4 axattc5 axattc6
  78.  
  79. $frame axattd1 axattd2 axattd3 axattd4 axattd5 axattd6
  80.  
  81.  
  82. /*
  83. ==============================================================================
  84. PLAYER
  85. ==============================================================================
  86. */
  87.  
  88. // BYOM -- Fiend attack functions -- thanks to John & Josh Spickes
  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_demon_melee = [$deatha5, player_dattack2 ] {self.view_ofs = '0 0 8';};
  100. void()  player_dattack2 = [$deatha6, player_dattack3 ] {self.view_ofs = '0 0 16';};
  101. void()  player_dattack3 = [$deatha7, player_dattack4 ] {self.view_ofs = '0 0 25';};
  102. void()  player_dattack4 = [$deatha8, player_dattack5 ] {self.view_ofs = '0 0 23';};
  103. void()  player_dattack5 = [$deatha9, player_dattack6 ] {self.view_ofs = '0 0 21'; Player_Demon_Attack(200);};
  104. void()  player_dattack6 = [$deatha10, player_dattack7 ] {self.view_ofs = '0 0 23';};
  105. void()  player_dattack7 = [$deatha11, player_dattack8 ] {self.view_ofs = '0 0 24';};
  106. void()  player_dattack8 = [$deathb1, player_dattack9 ] {self.view_ofs = '0 0 25';};              
  107. void()  player_dattack9 = [$deathb2, player_dattack10 ] {self.view_ofs = '0 0 24';};
  108. void()  player_dattack10 = [$deathb3, player_dattack11 ] {self.view_ofs = '0 0 23';};
  109. void()  player_dattack11 = [$deathb4, player_dattack12 ] {self.view_ofs = '0 0 21'; Player_Demon_Attack(-200);};
  110. void()  player_dattack12 = [$deathb5, player_dattack13 ] {self.view_ofs = '0 0 16';};
  111. void()  player_dattack13 = [$deathb6, player_dattack14 ] {self.view_ofs = '0 0 12';};
  112. void()  player_dattack14 = [$deathb7, player_dattack15 ] {self.view_ofs = '0 0 8';};
  113. void()  player_dattack15 = [$deathb8, player_stand1 ] {self.view_ofs = '0 0 4';};
  114.  
  115. void(float side) Player_Demon_Attack =
  116. {
  117.     local    vector    source;
  118.     local    vector    org;
  119.     local   float   ldmg;
  120.  
  121.     sound (self, CHAN_WEAPON, "weapons/ax1.wav", 1, ATTN_NORM);        
  122.  
  123.     source = self.origin + '0 0 4';
  124.     makevectors (self.angles);
  125.     traceline (source, source + v_forward*64, FALSE, self);
  126.     if (!trace_ent.takedamage)
  127.         traceline (source, source + v_forward*64 + v_right*30, FALSE, self);
  128.     if (!trace_ent.takedamage)
  129.         traceline (source, source + v_forward*64 - v_right*30, FALSE, self);
  130.  
  131.     if (trace_fraction == 1.0)
  132.         return;
  133.     
  134.     org = trace_endpos - v_forward*4;
  135.     if (trace_ent.takedamage) {
  136.         sound (self, CHAN_WEAPON, "demon/dhit2.wav", 1, ATTN_NORM);
  137.         ldmg = 40 + 10*random();
  138.  
  139.         SpawnMeatSpray (self.origin + v_forward*16, side * v_right);
  140.         T_Damage (trace_ent, self, self, ldmg); 
  141.     }
  142. };
  143.  
  144. void() Player_Demon_JumpTouch =
  145. {
  146.         local float ldmg;
  147.  
  148.         if(other.takedamage)
  149.         {
  150.                 ldmg = 40 + 10*random();
  151.                 T_Damage(other, self, self, ldmg);
  152.                 SpawnMeatSpray (self.origin + v_forward*20,  100* v_forward);
  153.                 SpawnMeatSpray (self.origin + v_forward*20,  50* v_forward);
  154.         }
  155.  
  156.         self.touch = SUB_Null;
  157. };
  158.  
  159. // BYOM Shambler melee attacks!
  160.  
  161. void() player_shambler_smash1     =[      $pain1,       player_shambler_smash2    ] {
  162. sound (self, CHAN_VOICE, "shambler/melee1.wav", 1, ATTN_NORM);};
  163. void() player_shambler_smash2     =[      $pain2,       player_shambler_smash3    ] {};
  164. void() player_shambler_smash3     =[      $pain3,       player_shambler_smash4    ] {};
  165. void() player_shambler_smash4     =[      $pain4,       player_shambler_smash5    ] {};
  166. void() player_shambler_smash5     =[      $pain5,       player_shambler_smash6    ] {};
  167. void() player_shambler_smash6     =[      $pain6,       player_shambler_smash7    ] {};
  168. void() player_shambler_smash7     =[      $axdeth1,       player_shambler_smash8    ] {};
  169. void() player_shambler_smash8     =[      $axdeth2,       player_shambler_smash9    ] {};
  170. void() player_shambler_smash9     =[      $axdeth3,       player_shambler_smash10   ] {};
  171. void() player_shambler_smash10    =[      $axdeth4,      player_shambler_smash11   ] {
  172.     local    vector    source;
  173.     local    vector    org;
  174.     local   float   ldmg;
  175.  
  176.     sound (self, CHAN_WEAPON, "weapons/ax1.wav", 1, ATTN_NORM);        
  177.  
  178.     source = self.origin + '0 0 4';
  179.     makevectors (self.angles);
  180.     traceline (source, source + v_forward*64, FALSE, self);
  181.     if (!trace_ent.takedamage)
  182.         traceline (source, source + v_forward*64 + v_right*30, FALSE, self);
  183.     if (!trace_ent.takedamage)
  184.         traceline (source, source + v_forward*64 - v_right*30, FALSE, self);
  185.  
  186.     if (trace_fraction == 1.0)
  187.         return;
  188.     
  189.     org = trace_endpos - v_forward*4;
  190.     if (trace_ent.takedamage) {
  191.         sound (self, CHAN_VOICE, "shambler/smack.wav", 1, ATTN_NORM);
  192.         ldmg = (random() + random() + random()) * 40;
  193.  
  194.         SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);
  195.         SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);
  196.         T_Damage (trace_ent, self, self, ldmg); 
  197.     }
  198. };
  199. void() player_shambler_smash11    =[      $axdeth5,      player_shambler_smash12   ] {};
  200. void() player_shambler_smash12    =[      $axdeth6,      player_run    ] {};
  201.  
  202. void() player_shambler_swingr1;
  203.  
  204. void(float side) player_shambler_claw =
  205. {
  206.     local    vector    source;
  207.     local    vector    org;
  208.     local   float   ldmg;
  209.  
  210.     sound (self, CHAN_WEAPON, "weapons/ax1.wav", 1, ATTN_NORM);        
  211.  
  212.     source = self.origin + '0 0 4';
  213.     makevectors (self.angles);
  214.     traceline (source, source + v_forward*64, FALSE, self);
  215.     if (!trace_ent.takedamage)
  216.         traceline (source, source + v_forward*64 + v_right*30, FALSE, self);
  217.     if (!trace_ent.takedamage)
  218.         traceline (source, source + v_forward*64 - v_right*30, FALSE, self);
  219.  
  220.     if (trace_fraction == 1.0)
  221.         return;
  222.     
  223.     org = trace_endpos - v_forward*4;
  224.     if (trace_ent.takedamage) {
  225.         sound (self, CHAN_VOICE, "shambler/smack.wav", 1, ATTN_NORM);
  226.         ldmg = (random() + random() + random()) * 20;
  227.  
  228.         SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);
  229.         SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);
  230.         T_Damage (trace_ent, self, self, ldmg); 
  231.     }
  232. };
  233.  
  234. void() player_shambler_swingl1 =[      $deatha7,      player_shambler_swingl2   ] {
  235. sound (self, CHAN_VOICE, "shambler/melee2.wav", 1, ATTN_NORM);};
  236. void() player_shambler_swingl2 =[      $deatha8,      player_shambler_swingl3   ] {};
  237. void() player_shambler_swingl3 =[      $deatha9,      player_shambler_swingl4   ] {};
  238. void() player_shambler_swingl4 =[      $deatha10,      player_shambler_swingl5   ] {};
  239. void() player_shambler_swingl5 =[      $deatha11,      player_shambler_swingl6   ] {};
  240. void() player_shambler_swingl6 =[      $deathb1,      player_shambler_swingl7   ] {};
  241. void() player_shambler_swingl7 =[      $deathb2,      player_shambler_swingl8   ] {player_shambler_claw(250);};
  242. void() player_shambler_swingl8 =[      $deathb3,      player_shambler_swingl9   ] {};
  243. void() player_shambler_swingl9 =[      $deathb4,      player_run     ] {};
  244.  
  245. void() player_shambler_swingr1 =[      $axdeth7,      player_shambler_swingr2   ] {
  246. sound (self, CHAN_VOICE, "shambler/melee1.wav", 1, ATTN_NORM);};
  247. void() player_shambler_swingr2 =[      $axdeth8,      player_shambler_swingr3   ] {};
  248. void() player_shambler_swingr3 =[      $axdeth9,      player_shambler_swingr4   ] {};
  249. void() player_shambler_swingr4 =[      $deatha1,      player_shambler_swingr5   ] {};
  250. void() player_shambler_swingr5 =[      $deatha2,      player_shambler_swingr6   ] {};
  251. void() player_shambler_swingr6 =[      $deatha3,      player_shambler_swingr7   ] {};
  252. void() player_shambler_swingr7 =[      $deatha4,      player_shambler_swingr8   ] {player_shambler_claw(-250);};
  253. void() player_shambler_swingr8 =[      $deatha5,      player_shambler_swingr9   ] {};
  254. void() player_shambler_swingr9 =[      $deatha6,      player_run     ] {};
  255.  
  256. void() player_shambler_melee =
  257. {
  258.     local float chance;
  259.     
  260.     chance = random();
  261.     if (chance > 0.6 || self.health == 600)
  262.         player_shambler_smash1 ();
  263.     else if (chance > 0.3)
  264.         player_shambler_swingr1 ();
  265.     else
  266.         player_shambler_swingl1 ();
  267. };
  268.  
  269. void() player_shambler_lightning =
  270. {
  271.     local    vector    org, dir;
  272.     
  273.     self.effects = self.effects | EF_MUZZLEFLASH;
  274.     if (self.ammo_cells < 40) return;
  275.     self.ammo_cells = self.ammo_cells - 40;
  276.  
  277.     if (self.waterlevel > 1)
  278.     {
  279.         T_RadiusDamage (self, self, 35*self.ammo_cells, world);
  280.         self.ammo_cells = 0;
  281.         return;
  282.     }
  283.  
  284.     org = self.origin + '0 0 40';
  285.     traceline (org, self.origin + v_forward*600, TRUE, self);
  286.  
  287.     WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
  288.     WriteByte (MSG_BROADCAST, TE_LIGHTNING1);
  289.     WriteEntity (MSG_BROADCAST, self);
  290.     WriteCoord (MSG_BROADCAST, org_x);
  291.     WriteCoord (MSG_BROADCAST, org_y);
  292.     WriteCoord (MSG_BROADCAST, org_z);
  293.     WriteCoord (MSG_BROADCAST, trace_endpos_x);
  294.     WriteCoord (MSG_BROADCAST, trace_endpos_y);
  295.     WriteCoord (MSG_BROADCAST, trace_endpos_z);
  296.  
  297.     LightningDamage (org, trace_endpos, self, 10);
  298. };
  299.  
  300. void() player_shambler_bolt =[      $deathb5,       player_shambler_bolt2    ] {
  301.     sound (self, CHAN_WEAPON, "shambler/sattck1.wav", 1, ATTN_NORM);
  302. };
  303. void() player_shambler_bolt2     =[      $deathb6,       player_shambler_bolt3    ] {};
  304. void() player_shambler_bolt3     =[      $deathb7,       player_shambler_bolt4    ] {
  305.     local entity o;
  306.  
  307.     self.effects = self.effects | EF_MUZZLEFLASH;
  308.     self.owner = spawn();
  309.     o = self.owner;
  310.     setmodel (o, "progs/s_light.mdl");
  311.     setorigin (o, self.origin);
  312.     o.angles = self.angles;
  313.     o.nextthink = time + 0.7;
  314.     o.think = SUB_Remove;
  315. };
  316. void() player_shambler_bolt4     =[      $deathb8,       player_shambler_bolt5    ]
  317. {
  318. self.effects = self.effects | EF_MUZZLEFLASH;
  319. self.owner.frame = 1;
  320. };
  321. void() player_shambler_bolt5     =[      $deathb9,       player_shambler_bolt6    ]
  322. {
  323. self.effects = self.effects | EF_MUZZLEFLASH;
  324. self.owner.frame = 2;
  325. };
  326. void() player_shambler_bolt6     =[      $deathc1,       player_shambler_bolt9    ]
  327. {
  328. remove (self.owner);
  329. player_shambler_lightning();
  330. sound (self, CHAN_WEAPON, "shambler/sboom.wav", 1, ATTN_NORM);
  331. };
  332. void() player_shambler_bolt9     =[      $deathc2,       player_shambler_bolt10   ] {player_shambler_lightning();};
  333. void() player_shambler_bolt10    =[      $deathc3,      player_shambler_bolt11   ] {player_shambler_lightning();};
  334. void() player_shambler_bolt11    =[      $deathc4,      player_shambler_bolt12   ] {player_shambler_lightning();};
  335. void() player_shambler_bolt12    =[      $deathc5,      player_run   ] {};
  336.  
  337. // BYOM Wizard attack
  338. void() player_wizard_fastfire =
  339. {
  340.     local vector        dir;
  341.     local vector        dst;
  342.  
  343.     if (self.owner.health > 0)
  344.     {
  345.         self.owner.effects = self.owner.effects | EF_MUZZLEFLASH;
  346.         sound (self, CHAN_WEAPON, "wizard/wattack.wav", 1, ATTN_NORM);
  347.         dir = aim (self, 1000);
  348.         launch_spike (self.origin, dir);
  349.         newmis.velocity = dir*600;
  350.         newmis.owner = self.owner;
  351.         newmis.classname = "wizspike";
  352.         setmodel (newmis, "progs/w_spike.mdl");
  353.         setsize (newmis, VEC_ORIGIN, VEC_ORIGIN);
  354.     }
  355.     remove (self);
  356. };
  357.  
  358. void() player_wizard_startfast =
  359. {
  360.     local    entity    missile;
  361.     
  362.     sound (self, CHAN_WEAPON, "wizard/wattack.wav", 1, ATTN_NORM);
  363.     self.v_angle = self.angles;
  364.     makevectors (self.angles);
  365.  
  366.     if (self.ammo_cells < 10) return;
  367.     self.ammo_cells = self.ammo_cells - 10;
  368.  
  369.     missile = spawn ();
  370.     missile.owner = self;
  371.     setsize (missile, '0 0 0', '0 0 0');        
  372.     setorigin (missile, self.origin + '0 0 30' + v_forward*14 + v_right*14);
  373.     missile.nextthink = time + 0.8;
  374.     missile.think = player_wizard_fastfire;
  375.     missile.movedir = v_right;
  376.  
  377.     missile = spawn ();
  378.     missile.owner = self;
  379.     setsize (missile, '0 0 0', '0 0 0');        
  380.     setorigin (missile, self.origin + '0 0 30' + v_forward*14 + v_right* -14);
  381.     missile.nextthink = time + 1;
  382.     missile.think = player_wizard_fastfire;
  383.     missile.movedir = VEC_ORIGIN - v_right;
  384.  
  385. };
  386.  
  387. void()  player_wizard_shot =[  $axpain1,       player_wizard_shot2   ] {player_wizard_startfast();};
  388. void()  player_wizard_shot2   =[  $axpain2,       player_wizard_shot3   ] {};
  389. void()  player_wizard_shot3   =[  $axpain3,       player_wizard_shot4   ] {};
  390. void()  player_wizard_shot4   =[  $axpain4,       player_wizard_shot5   ] {};
  391. void()  player_wizard_shot5   =[  $axpain5,       player_wizard_shot6   ] {};
  392. void()  player_wizard_shot6   =[  $axpain6,       player_wizard_shot7   ] {};
  393. void()  player_wizard_shot7   =[  $pain1,       player_wizard_shot8   ] {};
  394. void()  player_wizard_shot8   =[  $pain2,       player_wizard_shot9   ] {};
  395. void()  player_wizard_shot9   =[  $pain3,       player_wizard_shot10  ] {};
  396. void()  player_wizard_shot10  =[  $pain4,       player_run  ] {};
  397.  
  398. void() Wiz_idlesound;
  399. /*void() Wiz_idlesound =
  400. {
  401.     local float wr;
  402.     wr = random() * 5;
  403.  
  404.     if (self.waitmin < time)
  405.     {
  406.          self.waitmin = time + 2;
  407.          if (wr > 4.5) 
  408.              sound (self, CHAN_VOICE, "wizard/widle1.wav", 1,  ATTN_IDLE);
  409.          if (wr < 1.5)
  410.              sound (self, CHAN_VOICE, "wizard/widle2.wav", 1, ATTN_IDLE);
  411.     }
  412.     return;
  413. };*/
  414.  
  415.  
  416.  
  417. void() player_run;
  418.  
  419. void()    player_stand1 =[    $axstnd1,    player_stand1    ]
  420. {
  421.     self.weaponframe=0;
  422.     if (self.velocity_x || self.velocity_y)
  423.     {
  424.         self.walkframe=0;
  425.         player_run();
  426.         return;
  427.     }
  428.  
  429.     // BYOM -- changed for other classes
  430.     if (self.class == CL_FIEND) {
  431.         self.view_ofs = '0 0 4';
  432.         if (self.walkframe >= 13)
  433.             self.walkframe = 0;
  434.         self.frame = $axrun1 + self.walkframe;
  435.     }
  436.     else if (self.class == CL_SHAMBLER) {
  437.         if (self.walkframe >= 17)
  438.             self.walkframe = 0;
  439.         self.frame = $axrun1 + self.walkframe;
  440.     }
  441.     else if (self.class == CL_WIZARD) {
  442.         if (self.walkframe >= 15)
  443.             self.walkframe = 0;
  444.         self.frame = $axrun1 + self.walkframe;
  445.         Wiz_idlesound();
  446.     }
  447.     else if (self.weapon == IT_AXE)
  448.     {
  449.         if (self.walkframe >= 12)
  450.             self.walkframe = 0;
  451.         self.frame = $axstnd1 + self.walkframe;
  452.     }
  453.     else
  454.     {
  455.         if (self.walkframe >= 5)
  456.             self.walkframe = 0;
  457.         self.frame = $stand1 + self.walkframe;
  458.     }
  459.     self.walkframe = self.walkframe + 1;    
  460. };
  461.  
  462. void()    player_run =[    $rockrun1,    player_run    ]
  463. {
  464.     self.weaponframe=0;
  465.     if (!self.velocity_x && !self.velocity_y)
  466.     {
  467.         self.walkframe=0;
  468.         player_stand1();
  469.         return;
  470.     }
  471.  
  472.     // BYOM -- changed for other classes
  473.     if (self.class == CL_FIEND) {
  474.         self.view_ofs = '0 0 4';
  475.         if (self.walkframe >= 8)
  476.             self.walkframe = 0;
  477.         self.frame = $stand2 + self.walkframe;
  478.     }
  479.     else if (self.class == CL_SHAMBLER) {
  480.         if (self.walkframe >= 6)
  481.             self.walkframe = 0;
  482.         self.frame = $axpain1 + self.walkframe;
  483.     }
  484.     else if (self.class == CL_WIZARD) {
  485.         if (self.walkframe >= 14)
  486.             self.walkframe = 0;
  487.         self.frame = $stand4 + self.walkframe;
  488.     }
  489.     else if (self.weapon == IT_AXE)
  490.     {
  491.         if (self.walkframe == 6)
  492.             self.walkframe = 0;
  493.         self.frame = $axrun1 + self.walkframe;
  494.     }
  495.     else
  496.     {
  497.         if (self.walkframe == 6)
  498.             self.walkframe = 0;
  499.         self.frame = self.frame + self.walkframe;
  500.     }
  501.     self.walkframe = self.walkframe + 1;
  502. };
  503.  
  504.  
  505. void()    player_shot1 =    [$shotatt1, player_shot2    ] {self.weaponframe=1;
  506. self.effects = self.effects | EF_MUZZLEFLASH;};
  507. void()    player_shot2 =    [$shotatt2, player_shot3    ] {self.weaponframe=2;};
  508. void()    player_shot3 =    [$shotatt3, player_shot4    ] {self.weaponframe=3;};
  509. void()    player_shot4 =    [$shotatt4, player_shot5    ] {self.weaponframe=4;};
  510. void()    player_shot5 =    [$shotatt5, player_shot6    ] {self.weaponframe=5;};
  511. void()    player_shot6 =    [$shotatt6, player_run    ] {self.weaponframe=6;};
  512.  
  513. void()    player_axe1 =    [$axatt1, player_axe2    ] {self.weaponframe=1;};
  514. void()    player_axe2 =    [$axatt2, player_axe3    ] {self.weaponframe=2;};
  515. void()    player_axe3 =    [$axatt3, player_axe4    ] {self.weaponframe=3;W_FireAxe();};
  516. void()    player_axe4 =    [$axatt4, player_run    ] {self.weaponframe=4;};
  517.  
  518. void()    player_axeb1 =    [$axattb1, player_axeb2    ] {self.weaponframe=5;};
  519. void()    player_axeb2 =    [$axattb2, player_axeb3    ] {self.weaponframe=6;};
  520. void()    player_axeb3 =    [$axattb3, player_axeb4    ] {self.weaponframe=7;W_FireAxe();};
  521. void()    player_axeb4 =    [$axattb4, player_run    ] {self.weaponframe=8;};
  522.  
  523. void()    player_axec1 =    [$axattc1, player_axec2    ] {self.weaponframe=1;};
  524. void()    player_axec2 =    [$axattc2, player_axec3    ] {self.weaponframe=2;};
  525. void()    player_axec3 =    [$axattc3, player_axec4    ] {self.weaponframe=3;W_FireAxe();};
  526. void()    player_axec4 =    [$axattc4, player_run    ] {self.weaponframe=4;};
  527.  
  528. void()    player_axed1 =    [$axattd1, player_axed2    ] {self.weaponframe=5;};
  529. void()    player_axed2 =    [$axattd2, player_axed3    ] {self.weaponframe=6;};
  530. void()    player_axed3 =    [$axattd3, player_axed4    ] {self.weaponframe=7;W_FireAxe();};
  531. void()    player_axed4 =    [$axattd4, player_run    ] {self.weaponframe=8;};
  532.  
  533.  
  534. //============================================================================
  535.  
  536. void() player_nail1   =[$nailatt1, player_nail2  ] 
  537. {
  538.     self.effects = self.effects | EF_MUZZLEFLASH;
  539.  
  540.     if (!self.button0)
  541.         {player_run ();return;}
  542.     self.weaponframe = self.weaponframe + 1;
  543.     if (self.weaponframe == 9)
  544.         self.weaponframe = 1;
  545.     SuperDamageSound();
  546.     W_FireSpikes (4);
  547.     self.attack_finished = time + 0.2;
  548. };
  549. void() player_nail2   =[$nailatt2, player_nail1  ]
  550. {
  551.     self.effects = self.effects | EF_MUZZLEFLASH;
  552.  
  553.     if (!self.button0)
  554.         {player_run ();return;}
  555.     self.weaponframe = self.weaponframe + 1;
  556.     if (self.weaponframe == 9)
  557.         self.weaponframe = 1;
  558.     SuperDamageSound();
  559.     W_FireSpikes (-4);
  560.     self.attack_finished = time + 0.2;
  561. };
  562.  
  563. //============================================================================
  564.  
  565. void() player_light1   =[$light1, player_light2  ] 
  566. {
  567.     self.effects = self.effects | EF_MUZZLEFLASH;
  568.  
  569.     if (!self.button0)
  570.         {player_run ();return;}
  571.     self.weaponframe = self.weaponframe + 1;
  572.     if (self.weaponframe == 5)
  573.         self.weaponframe = 1;
  574.     SuperDamageSound();
  575.     W_FireLightning();
  576.     self.attack_finished = time + 0.2;
  577. };
  578. void() player_light2   =[$light2, player_light1  ]
  579. {
  580.     self.effects = self.effects | EF_MUZZLEFLASH;
  581.  
  582.     if (!self.button0)
  583.         {player_run ();return;}
  584.     self.weaponframe = self.weaponframe + 1;
  585.     if (self.weaponframe == 5)
  586.         self.weaponframe = 1;
  587.     SuperDamageSound();
  588.     W_FireLightning();
  589.     self.attack_finished = time + 0.2;
  590. };
  591.  
  592. //============================================================================
  593.  
  594.  
  595. void() player_rocket1   =[$rockatt1, player_rocket2  ] {self.weaponframe=1;
  596. self.effects = self.effects | EF_MUZZLEFLASH;};
  597. void() player_rocket2   =[$rockatt2, player_rocket3  ] {self.weaponframe=2;};
  598. void() player_rocket3   =[$rockatt3, player_rocket4  ] {self.weaponframe=3;};
  599. void() player_rocket4   =[$rockatt4, player_rocket5  ] {self.weaponframe=4;};
  600. void() player_rocket5   =[$rockatt5, player_rocket6  ] {self.weaponframe=5;};
  601. void() player_rocket6   =[$rockatt6, player_run  ] {self.weaponframe=6;};
  602. void(float num_bubbles) DeathBubbles;
  603.  
  604. void() PainSound =
  605. {
  606. local float        rs;
  607.  
  608.     if (self.health < 0)
  609.         return;
  610.  
  611.     if (damage_attacker.classname == "teledeath")
  612.     {
  613.         sound (self, CHAN_VOICE, "player/teledth1.wav", 1, ATTN_NONE);
  614.         return;
  615.     }
  616.  
  617. // water pain sounds
  618.     if (self.watertype == CONTENT_WATER && self.waterlevel == 3)
  619.     {
  620.         DeathBubbles(1);
  621.         if (random() > 0.5)
  622.             sound (self, CHAN_VOICE, "player/drown1.wav", 1, ATTN_NORM);
  623.         else
  624.             sound (self, CHAN_VOICE, "player/drown2.wav", 1, ATTN_NORM);
  625.         return;
  626.     }
  627.  
  628. // slime pain sounds
  629.     if (self.watertype == CONTENT_SLIME)
  630.     {
  631. // FIX ME    put in some steam here
  632.         if (random() > 0.5)
  633.             sound (self, CHAN_VOICE, "player/lburn1.wav", 1, ATTN_NORM);
  634.         else
  635.             sound (self, CHAN_VOICE, "player/lburn2.wav", 1, ATTN_NORM);
  636.         return;
  637.     }
  638.  
  639.     if (self.watertype == CONTENT_LAVA)
  640.     {
  641.         if (random() > 0.5)
  642.             sound (self, CHAN_VOICE, "player/lburn1.wav", 1, ATTN_NORM);
  643.         else
  644.             sound (self, CHAN_VOICE, "player/lburn2.wav", 1, ATTN_NORM);
  645.         return;
  646.     }
  647.  
  648.     if (self.pain_finished > time)
  649.     {
  650.         self.axhitme = 0;
  651.         return;
  652.     }
  653.     self.pain_finished = time + 0.5;
  654.  
  655. // don't make multiple pain sounds right after each other
  656.  
  657. // ax pain sound
  658.     if (self.axhitme == 1)
  659.     {
  660.         self.axhitme = 0;
  661.         sound (self, CHAN_VOICE, "player/axhit1.wav", 1, ATTN_NORM);
  662.         return;
  663.     }
  664.  
  665.     // BYOM -- add appropiate pain sounds
  666.     if (self.class == CL_SHAMBLER) {
  667.         sound(self, CHAN_VOICE, "shambler/shurt2.wav", 1, ATTN_NORM);
  668.     }
  669.     else if (self.class == CL_WIZARD) {
  670.         sound(self, CHAN_VOICE, "wizard/wpain.wav", 1, ATTN_NORM);
  671.     }
  672.     else if (self.class == CL_FIEND) {
  673.         sound(self, CHAN_VOICE, "demon/dpain1.wav", 1, ATTN_NORM);
  674.     }
  675.     else {
  676.         rs = rint((random() * 5) + 1);
  677.  
  678.         self.noise = "";
  679.         if (rs == 1)
  680.             self.noise = "player/pain1.wav";
  681.         else if (rs == 2)
  682.             self.noise = "player/pain2.wav";
  683.         else if (rs == 3)
  684.             self.noise = "player/pain3.wav";
  685.         else if (rs == 4)
  686.             self.noise = "player/pain4.wav";
  687.         else if (rs == 5)
  688.             self.noise = "player/pain5.wav";
  689.         else
  690.             self.noise = "player/pain6.wav";
  691.  
  692.         sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
  693.         return;
  694.     }
  695. };
  696.  
  697. void()    player_pain1 =    [    $pain1,    player_pain2    ] {PainSound();self.weaponframe=0;};
  698. void()    player_pain2 =    [    $pain2,    player_pain3    ] {};
  699. void()    player_pain3 =    [    $pain3,    player_pain4    ] {};
  700. void()    player_pain4 =    [    $pain4,    player_pain5    ] {};
  701. void()    player_pain5 =    [    $pain5,    player_pain6    ] {};
  702. void()    player_pain6 =    [    $pain6,    player_run    ] {};
  703.  
  704. // BYOM -- pain for other classes function
  705. // Shambler
  706. void() player_shambler_pain = [$deathc8, player_shambler_pain2] {PainSound();};
  707. void() player_shambler_pain2 = [$deathc9, player_shambler_pain3] {};
  708. void() player_shambler_pain3 = [$deathc10, player_shambler_pain4] {};
  709. void() player_shambler_pain4 = [$deathc11, player_shambler_pain5] {};
  710. void() player_shambler_pain5 = [$deathc12, player_shambler_pain6] {};
  711. void() player_shambler_pain6 = [$deathc13, player_run] {};
  712. // Wizard
  713. void() player_wizard_pain = [$axdeth3, player_wizard_pain2] {PainSound();};
  714. void() player_wizard_pain2 = [$axdeth4, player_wizard_pain3] {};
  715. void() player_wizard_pain3 = [$axdeth5, player_wizard_pain4] {};
  716. void() player_wizard_pain4 = [$axdeth6, player_run] {};
  717. // Fiend
  718. void() player_demon_pain = [$pain5, player_demon_pain2] {PainSound();};
  719. void() player_demon_pain2 = [$pain6, player_demon_pain3] {};
  720. void() player_demon_pain3 = [$axdeth1, player_demon_pain4] {};
  721. void() player_demon_pain4 = [$axdeth2, player_demon_pain5] {};
  722. void() player_demon_pain5 = [$axdeth3, player_demon_pain6] {};
  723. void() player_demon_pain6 = [$axdeth4, player_run] {};
  724.  
  725. void()    player_axpain1 =    [    $axpain1,    player_axpain2    ] {PainSound();self.weaponframe=0;};
  726. void()    player_axpain2 =    [    $axpain2,    player_axpain3    ] {};
  727. void()    player_axpain3 =    [    $axpain3,    player_axpain4    ] {};
  728. void()    player_axpain4 =    [    $axpain4,    player_axpain5    ] {};
  729. void()    player_axpain5 =    [    $axpain5,    player_axpain6    ] {};
  730. void()    player_axpain6 =    [    $axpain6,    player_run    ] {};
  731.  
  732. void() player_pain =
  733. {
  734.     if (self.weaponframe)
  735.         return;
  736.  
  737.     if (self.invisible_finished > time)
  738.         return;        // eyes don't have pain frames
  739.  
  740.     if (self.weapon == IT_AXE)
  741.         player_axpain1 ();
  742.     else
  743.         player_pain1 ();
  744. };
  745.  
  746. void() player_diea1;
  747. void() player_dieb1;
  748. void() player_diec1;
  749. void() player_died1;
  750. void() player_diee1;
  751. void() player_die_ax1;
  752.  
  753. void() DeathBubblesSpawn =
  754. {
  755. local entity    bubble;
  756.     if (self.owner.waterlevel != 3)
  757.         return;
  758.     bubble = spawn();
  759.     setmodel (bubble, "progs/s_bubble.spr");
  760.     setorigin (bubble, self.owner.origin + '0 0 24');
  761.     bubble.movetype = MOVETYPE_NOCLIP;
  762.     bubble.solid = SOLID_NOT;
  763.     bubble.velocity = '0 0 15';
  764.     bubble.nextthink = time + 0.5;
  765.     bubble.think = bubble_bob;
  766.     bubble.classname = "bubble";
  767.     bubble.frame = 0;
  768.     bubble.cnt = 0;
  769.     setsize (bubble, '-8 -8 -8', '8 8 8');
  770.     self.nextthink = time + 0.1;
  771.     self.think = DeathBubblesSpawn;
  772.     self.air_finished = self.air_finished + 1;
  773.     if (self.air_finished >= self.bubble_count)
  774.         remove(self);
  775. };
  776.  
  777. void(float num_bubbles) DeathBubbles =
  778. {
  779. local entity    bubble_spawner;
  780.     
  781.     bubble_spawner = spawn();
  782.     setorigin (bubble_spawner, self.origin);
  783.     bubble_spawner.movetype = MOVETYPE_NONE;
  784.     bubble_spawner.solid = SOLID_NOT;
  785.     bubble_spawner.nextthink = time + 0.1;
  786.     bubble_spawner.think = DeathBubblesSpawn;
  787.     bubble_spawner.air_finished = 0;
  788.     bubble_spawner.owner = self;
  789.     bubble_spawner.bubble_count = num_bubbles;
  790.     return;
  791. };
  792.  
  793.  
  794. void() DeathSound =
  795. {
  796. local float        rs;
  797.  
  798.     // water death sounds
  799.     if (self.waterlevel == 3)
  800.     {
  801.         DeathBubbles(20);
  802.         sound (self, CHAN_VOICE, "player/h2odeath.wav", 1, ATTN_NONE);
  803.         return;
  804.     }
  805.  
  806.     // BYOM -- change to appropiate death sound for each class
  807.     //             default to normal death sequence
  808.     if (self.class == CL_SHAMBLER)
  809.         sound(self, CHAN_VOICE, "shambler/sdeath.wav", 1, ATTN_NONE);
  810.     else if (self.class == CL_WIZARD)
  811.         sound(self, CHAN_VOICE, "wizard/wdeath.wav", 1, ATTN_NONE);
  812.     else if (self.class == CL_FIEND)
  813.         sound(self, CHAN_VOICE, "demon/ddeath.wav", 1, ATTN_NONE);
  814.     else {
  815.         rs = rint ((random() * 4) + 1);
  816.         if (rs == 1)
  817.             self.noise = "player/death1.wav";
  818.         if (rs == 2)
  819.             self.noise = "player/death2.wav";
  820.         if (rs == 3)
  821.             self.noise = "player/death3.wav";
  822.         if (rs == 4)
  823.             self.noise = "player/death4.wav";
  824.         if (rs == 5)
  825.             self.noise = "player/death5.wav";
  826.  
  827.         sound (self, CHAN_VOICE, self.noise, 1, ATTN_NONE);
  828.     }
  829.     return;
  830. };
  831.  
  832.  
  833. void() PlayerDead =
  834. {
  835.     self.nextthink = -1;
  836. // allow respawn after a certain time
  837.     self.deadflag = DEAD_DEAD;
  838. };
  839.  
  840. vector(float dm) VelocityForDamage =
  841. {
  842.     local vector v;
  843.  
  844.     v_x = 100 * crandom();
  845.     v_y = 100 * crandom();
  846.     v_z = 200 + 100 * random();
  847.  
  848.     if (dm > -50)
  849.     {
  850. //        dprint ("level 1\n");
  851.         v = v * 0.7;
  852.     }
  853.     else if (dm > -200)
  854.     {
  855. //        dprint ("level 3\n");
  856.         v = v * 2;
  857.     }
  858.     else
  859.         v = v * 10;
  860.  
  861.     return v;
  862. };
  863.  
  864. void(string gibname, float dm) ThrowGib =
  865. {
  866.     local    entity new;
  867.  
  868.     new = spawn();
  869.     new.origin = self.origin;
  870.     setmodel (new, gibname);
  871.     setsize (new, '0 0 0', '0 0 0');
  872.     new.velocity = VelocityForDamage (dm);
  873.     new.movetype = MOVETYPE_BOUNCE;
  874.     new.solid = SOLID_NOT;
  875.     new.avelocity_x = random()*600;
  876.     new.avelocity_y = random()*600;
  877.     new.avelocity_z = random()*600;
  878.     new.think = SUB_Remove;
  879.     new.ltime = time;
  880.     new.nextthink = time + 10 + random()*10;
  881.     new.frame = 0;
  882.     new.flags = 0;
  883. };
  884.  
  885. void(string gibname, float dm) ThrowHead =
  886. {
  887.     setmodel (self, gibname);
  888.     self.frame = 0;
  889.     self.nextthink = -1;
  890.     self.movetype = MOVETYPE_BOUNCE;
  891.     self.takedamage = DAMAGE_NO;
  892.     self.solid = SOLID_NOT;
  893.     self.view_ofs = '0 0 8';
  894.     setsize (self, '-16 -16 0', '16 16 56');
  895.     self.velocity = VelocityForDamage (dm);
  896.     self.origin_z = self.origin_z - 24;
  897.     self.flags = self.flags - (self.flags & FL_ONGROUND);
  898.     self.avelocity = crandom() * '0 600 0';
  899. };
  900.  
  901.  
  902. void() GibPlayer =
  903. {
  904.     // BYOM -- Throw appropiate head and extra gibs
  905.     if (self.class == CL_FIEND)
  906.         ThrowHead ("progs/h_demon.mdl", self.health);
  907.     else if (self.class == CL_SHAMBLER)
  908.         ThrowHead ("progs/h_shams.mdl", self.health);
  909.     else if (self.class == CL_WIZARD)
  910.         ThrowHead ("progs/h_wizard.mdl", self.health);
  911.     else
  912.         ThrowHead ("progs/h_player.mdl", self.health);
  913.     ThrowGib ("progs/gib1.mdl", self.health);
  914.     ThrowGib ("progs/gib2.mdl", self.health);
  915.     ThrowGib ("progs/gib3.mdl", self.health);
  916.     ThrowGib ("progs/gib1.mdl", self.health);
  917.     ThrowGib ("progs/gib2.mdl", self.health);
  918.     ThrowGib ("progs/gib3.mdl", self.health);
  919.  
  920.     self.deadflag = DEAD_DEAD;
  921.  
  922.     if (damage_attacker.classname == "teledeath")
  923.     {
  924.         sound (self, CHAN_VOICE, "player/teledth1.wav", 1, ATTN_NONE);
  925.         return;
  926.     }
  927.  
  928.     if (damage_attacker.classname == "teledeath2")
  929.     {
  930.         sound (self, CHAN_VOICE, "player/teledth1.wav", 1, ATTN_NONE);
  931.         return;
  932.     }
  933.  
  934.     if (random() < 0.5)
  935.         sound (self, CHAN_VOICE, "player/gib.wav", 1, ATTN_NONE);
  936.     else
  937.         sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NONE);
  938. };
  939.  
  940. void() PlayerDie =
  941. {
  942.     local    float    i;
  943.     // BYOM -- Switch order of powerup cleanup to get rid of eyes
  944.     //             but without it changing monsters to human
  945.     //             easy since monsters can't use the ring of shadows
  946.     if (self.items & IT_INVISIBILITY)
  947.         self.modelindex = modelindex_player;    // don't use eyes
  948.     self.items = self.items - (self.items & IT_INVISIBILITY);
  949.     self.invisible_finished = 0;    // don't die as eyes
  950.     self.invincible_finished = 0;
  951.     self.super_damage_finished = 0;
  952.     self.radsuit_finished = 0;
  953.  
  954.     // BYOM -- Don't drop a backpack if not a human
  955.     if ((deathmatch || coop) && !self.class)
  956.         DropBackpack();
  957.     
  958.     // BYOM -- FIXME -- Find out secret of solid bodies
  959.     self.weaponmodel="";
  960.     self.view_ofs = '0 0 -8';
  961.     self.deadflag = DEAD_DYING;
  962.     self.solid = SOLID_NOT;
  963.     self.flags = self.flags - (self.flags & FL_ONGROUND);
  964.     self.movetype = MOVETYPE_TOSS;
  965.     if (self.velocity_z < 10)
  966.         self.velocity_z = self.velocity_z + random()*300;
  967.  
  968.     if (self.health < -40)
  969.     {
  970.         GibPlayer ();
  971.         return;
  972.     }
  973.  
  974.     DeathSound();
  975.     
  976.     self.angles_x = 0;
  977.     self.angles_z = 0;
  978.     
  979.     // BYOM -- Appropiate death sequence
  980.     if (self.class == CL_SHAMBLER) {
  981.         player_shambler_die();
  982.         return;
  983.     }
  984.     else if (self.class == CL_FIEND) {
  985.         player_demon_die();
  986.         return;
  987.     }
  988.     else if (self.class == CL_WIZARD) {
  989.         player_wizard_die();
  990.         return;
  991.     }
  992.     else if (self.weapon == IT_AXE)
  993.     {
  994.         player_die_ax1 ();
  995.         return;
  996.     }
  997.     else {
  998.         i = cvar("temp1");
  999.         if (!i)
  1000.             i = 1 + floor(random()*6);
  1001.     
  1002.         if (i == 1)
  1003.             player_diea1();
  1004.         else if (i == 2)
  1005.             player_dieb1();
  1006.         else if (i == 3)
  1007.             player_diec1();
  1008.         else if (i == 4)
  1009.             player_died1();
  1010.         else
  1011.             player_diee1();
  1012.     }
  1013. };
  1014.  
  1015. void() set_suicide_frame =
  1016. {    // used by klill command and diconnect command
  1017.     //if (self.model != "progs/player.mdl")
  1018.     //    return; // allready gibbed
  1019.  
  1020.     // BYOM -- appropiate frames for death
  1021.     if (self.class == CL_SHAMBLER)
  1022.         self.frame = $deathd9;
  1023.     else if (self.class == CL_WIZARD)
  1024.         self.frame = $deatha4;
  1025.     else if (self.class == CL_FIEND)
  1026.         self.frame = $deatha4;
  1027.     else
  1028.         self.frame = $deatha11;
  1029.     self.solid = SOLID_NOT;
  1030.     self.movetype = MOVETYPE_TOSS;
  1031.     self.deadflag = DEAD_DEAD;
  1032.     self.nextthink = -1;
  1033. };
  1034.  
  1035. //BYOM -- death sequences for other classes
  1036. // Shambler
  1037. void() player_shambler_die   =  [$deathc14, player_shambler_die2] {};
  1038. void() player_shambler_die2  =  [$deathc15, player_shambler_die3] {};
  1039. void() player_shambler_die3  =  [$deathd1, player_shambler_die4] {};
  1040. void() player_shambler_die4  =  [$deathd2, player_shambler_die5] {};
  1041. void() player_shambler_die5  =  [$deathd3, player_shambler_die6] {};
  1042. void() player_shambler_die6  =  [$deathd4, player_shambler_die7] {};
  1043. void() player_shambler_die7  =  [$deathd5, player_shambler_die8] {};
  1044. void() player_shambler_die8  =  [$deathd6, player_shambler_die9] {};
  1045. void() player_shambler_die9  =  [$deathd7, player_shambler_die10] {};
  1046. void() player_shambler_die10 =  [$deathd8, player_shambler_die11] {};
  1047. void() player_shambler_die11 =  [$deathd9, player_shambler_die11] {PlayerDead();};
  1048.  
  1049. // Wizard
  1050. void() player_wizard_die     =  [$axdeth6, player_wizard_die2] {};
  1051. void() player_wizard_die2    =  [$axdeth7, player_wizard_die3] {};
  1052. void() player_wizard_die3    =  [$axdeth8, player_wizard_die4] {};
  1053. void() player_wizard_die4    =  [$axdeth9, player_wizard_die5] {};
  1054. void() player_wizard_die5    =  [$deatha1, player_wizard_die6] {};
  1055. void() player_wizard_die6    =  [$deatha2, player_wizard_die7] {};
  1056. void() player_wizard_die7    =  [$deatha3, player_wizard_die8] {};
  1057. void() player_wizard_die8    =  [$deatha4, player_wizard_die8] {PlayerDead();};
  1058.  
  1059. // Fiend
  1060. void() player_demon_die      =  [$axdeth5, player_demon_die2] {};
  1061. void() player_demon_die2     =  [$axdeth6, player_demon_die3] {};
  1062. void() player_demon_die3     =  [$axdeth7, player_demon_die4] {};
  1063. void() player_demon_die4     =  [$axdeth8, player_demon_die5] {};
  1064. void() player_demon_die5     =  [$axdeth9, player_demon_die6] {};
  1065. void() player_demon_die6     =  [$deatha1, player_demon_die7] {};
  1066. void() player_demon_die7     =  [$deatha2, player_demon_die8] {};
  1067. void() player_demon_die8     =  [$deatha3, player_demon_die9] {};
  1068. void() player_demon_die9     =  [$deatha4, player_demon_die9] {PlayerDead();};
  1069.  
  1070.  
  1071. void()    player_diea1    =    [    $deatha1,    player_diea2    ] {};
  1072. void()    player_diea2    =    [    $deatha2,    player_diea3    ] {};
  1073. void()    player_diea3    =    [    $deatha3,    player_diea4    ] {};
  1074. void()    player_diea4    =    [    $deatha4,    player_diea5    ] {};
  1075. void()    player_diea5    =    [    $deatha5,    player_diea6    ] {};
  1076. void()    player_diea6    =    [    $deatha6,    player_diea7    ] {};
  1077. void()    player_diea7    =    [    $deatha7,    player_diea8    ] {};
  1078. void()    player_diea8    =    [    $deatha8,    player_diea9    ] {};
  1079. void()    player_diea9    =    [    $deatha9,    player_diea10    ] {};
  1080. void()    player_diea10    =    [    $deatha10,    player_diea11    ] {};
  1081. void()    player_diea11    =    [    $deatha11,    player_diea11 ] {PlayerDead();};
  1082.  
  1083. void()    player_dieb1    =    [    $deathb1,    player_dieb2    ] {};
  1084. void()    player_dieb2    =    [    $deathb2,    player_dieb3    ] {};
  1085. void()    player_dieb3    =    [    $deathb3,    player_dieb4    ] {};
  1086. void()    player_dieb4    =    [    $deathb4,    player_dieb5    ] {};
  1087. void()    player_dieb5    =    [    $deathb5,    player_dieb6    ] {};
  1088. void()    player_dieb6    =    [    $deathb6,    player_dieb7    ] {};
  1089. void()    player_dieb7    =    [    $deathb7,    player_dieb8    ] {};
  1090. void()    player_dieb8    =    [    $deathb8,    player_dieb9    ] {};
  1091. void()    player_dieb9    =    [    $deathb9,    player_dieb9    ] {PlayerDead();};
  1092.  
  1093. void()    player_diec1    =    [    $deathc1,    player_diec2    ] {};
  1094. void()    player_diec2    =    [    $deathc2,    player_diec3    ] {};
  1095. void()    player_diec3    =    [    $deathc3,    player_diec4    ] {};
  1096. void()    player_diec4    =    [    $deathc4,    player_diec5    ] {};
  1097. void()    player_diec5    =    [    $deathc5,    player_diec6    ] {};
  1098. void()    player_diec6    =    [    $deathc6,    player_diec7    ] {};
  1099. void()    player_diec7    =    [    $deathc7,    player_diec8    ] {};
  1100. void()    player_diec8    =    [    $deathc8,    player_diec9    ] {};
  1101. void()    player_diec9    =    [    $deathc9,    player_diec10    ] {};
  1102. void()    player_diec10    =    [    $deathc10,    player_diec11    ] {};
  1103. void()    player_diec11    =    [    $deathc11,    player_diec12    ] {};
  1104. void()    player_diec12    =    [    $deathc12,    player_diec13    ] {};
  1105. void()    player_diec13    =    [    $deathc13,    player_diec14    ] {};
  1106. void()    player_diec14    =    [    $deathc14,    player_diec15    ] {};
  1107. void()    player_diec15    =    [    $deathc15,    player_diec15 ] {PlayerDead();};
  1108.  
  1109. void()    player_died1    =    [    $deathd1,    player_died2    ] {};
  1110. void()    player_died2    =    [    $deathd2,    player_died3    ] {};
  1111. void()    player_died3    =    [    $deathd3,    player_died4    ] {};
  1112. void()    player_died4    =    [    $deathd4,    player_died5    ] {};
  1113. void()    player_died5    =    [    $deathd5,    player_died6    ] {};
  1114. void()    player_died6    =    [    $deathd6,    player_died7    ] {};
  1115. void()    player_died7    =    [    $deathd7,    player_died8    ] {};
  1116. void()    player_died8    =    [    $deathd8,    player_died9    ] {};
  1117. void()    player_died9    =    [    $deathd9,    player_died9    ] {PlayerDead();};
  1118.  
  1119. void()    player_diee1    =    [    $deathe1,    player_diee2    ] {};
  1120. void()    player_diee2    =    [    $deathe2,    player_diee3    ] {};
  1121. void()    player_diee3    =    [    $deathe3,    player_diee4    ] {};
  1122. void()    player_diee4    =    [    $deathe4,    player_diee5    ] {};
  1123. void()    player_diee5    =    [    $deathe5,    player_diee6    ] {};
  1124. void()    player_diee6    =    [    $deathe6,    player_diee7    ] {};
  1125. void()    player_diee7    =    [    $deathe7,    player_diee8    ] {};
  1126. void()    player_diee8    =    [    $deathe8,    player_diee9    ] {};
  1127. void()    player_diee9    =    [    $deathe9,    player_diee9    ] {PlayerDead();};
  1128.  
  1129. void()    player_die_ax1    =    [    $axdeth1,    player_die_ax2    ] {};
  1130. void()    player_die_ax2    =    [    $axdeth2,    player_die_ax3    ] {};
  1131. void()    player_die_ax3    =    [    $axdeth3,    player_die_ax4    ] {};
  1132. void()    player_die_ax4    =    [    $axdeth4,    player_die_ax5    ] {};
  1133. void()    player_die_ax5    =    [    $axdeth5,    player_die_ax6    ] {};
  1134. void()    player_die_ax6    =    [    $axdeth6,    player_die_ax7    ] {};
  1135. void()    player_die_ax7    =    [    $axdeth7,    player_die_ax8    ] {};
  1136. void()    player_die_ax8    =    [    $axdeth8,    player_die_ax9    ] {};
  1137. void()    player_die_ax9    =    [    $axdeth9,    player_die_ax9    ] {PlayerDead();};
  1138.