home *** CD-ROM | disk | FTP | other *** search
/ PC Gamer 3.2 / 1997-05_Disc_3.2.iso / QUAKECTF / SRC / BOT / BOTANIM.QC < prev    next >
Text File  |  1997-02-01  |  14KB  |  526 lines

  1. $cd id1/models/player_4
  2. $origin 0 -6 24
  3. $base base        
  4. $skin skin
  5.  
  6. //
  7. // running
  8. //
  9. $frame axrun1 axrun2 axrun3 axrun4 axrun5 axrun6
  10.  
  11. $frame rockrun1 rockrun2 rockrun3 rockrun4 rockrun5 rockrun6
  12.  
  13. //
  14. // standing
  15. //
  16. $frame stand1 stand2 stand3 stand4 stand5
  17.  
  18. $frame axstnd1 axstnd2 axstnd3 axstnd4 axstnd5 axstnd6
  19. $frame axstnd7 axstnd8 axstnd9 axstnd10 axstnd11 axstnd12
  20.  
  21.  
  22. //
  23. // pain
  24. //
  25. $frame axpain1 axpain2 axpain3 axpain4 axpain5 axpain6
  26.  
  27. $frame pain1 pain2 pain3 pain4 pain5 pain6
  28.  
  29.  
  30. //
  31. // death
  32. //
  33.  
  34. $frame axdeth1 axdeth2 axdeth3 axdeth4 axdeth5 axdeth6
  35. $frame axdeth7 axdeth8 axdeth9
  36.  
  37. $frame deatha1 deatha2 deatha3 deatha4 deatha5 deatha6 deatha7 deatha8
  38. $frame deatha9 deatha10 deatha11
  39.  
  40. $frame deathb1 deathb2 deathb3 deathb4 deathb5 deathb6 deathb7 deathb8
  41. $frame deathb9
  42.  
  43. $frame deathc1 deathc2 deathc3 deathc4 deathc5 deathc6 deathc7 deathc8
  44. $frame deathc9 deathc10 deathc11 deathc12 deathc13 deathc14 deathc15
  45.  
  46. $frame deathd1 deathd2 deathd3 deathd4 deathd5 deathd6 deathd7
  47. $frame deathd8 deathd9
  48.  
  49. $frame deathe1 deathe2 deathe3 deathe4 deathe5 deathe6 deathe7
  50. $frame deathe8 deathe9
  51.  
  52. //
  53. // attacks
  54. //
  55. $frame nailatt1 nailatt2
  56.  
  57. $frame light1 light2
  58.  
  59. $frame rockatt1 rockatt2 rockatt3 rockatt4 rockatt5 rockatt6
  60.  
  61. $frame shotatt1 shotatt2 shotatt3 shotatt4 shotatt5 shotatt6
  62.  
  63. $frame axatt1 axatt2 axatt3 axatt4 axatt5 axatt6
  64.  
  65. $frame axattb1 axattb2 axattb3 axattb4 axattb5 axattb6
  66.  
  67. $frame axattc1 axattc2 axattc3 axattc4 axattc5 axattc6
  68.  
  69. $frame axattd1 axattd2 axattd3 axattd4 axattd5 axattd6
  70. /*
  71. //==============================================================================
  72. // this routine may not show the exact right animation
  73. //==============================================================================
  74. void () BotFirstAnimationFrame =
  75. {
  76.     if (self.weapon & IT_HOOK)
  77.         self.frame = $axstnd1;
  78. };
  79. //==============================================================================
  80. void () BotNextAnimationFrame =
  81. {
  82.     self.frame = self.frame + 1;
  83.     
  84.     if (self.frame > $axrun6)
  85.         self.frame = $axrun1;
  86.     else if (self.frame > $rockrun6)
  87.         self.frame = $rockrun1;
  88.     else if (self.frame > $stand5)
  89.         self.frame = $stand1;
  90.     else if (self.frame > $axstand12)
  91.         self.frame = $axstand1;
  92.     else if (self.frame > $axpain6)
  93.         self.frame = $stand1;
  94.     else if (self.frame > $pain6)
  95.         self.frame = $stand1;
  96.     else if (self.frame > $nailatt2)
  97.         self.frame = $nailatt1;
  98.     else if (self.frame > $light2)
  99.         self.frame = $light1;
  100.     else if (self.frame > $rockatt6)
  101.         self.frame = $rockatt1;
  102.     else if (self.frame > $shotatt6)
  103.         self.frame = $shotatt1;
  104.     else if ((self.frame > $axatt6) 
  105.             || (self.frame > $axattb6)
  106.             || (self.frame > $axattc6)
  107.             || (self.frame > $axattd6))
  108.     {
  109.         self.frame = $axatt1;
  110.     }
  111. };
  112. */
  113. //==============================================================================
  114. // this routine may not show the exact right animation
  115. //==============================================================================
  116. void () BotAnimationThink =
  117. {
  118. local float run;
  119.  
  120.     if (intermission_running)
  121.     {
  122.         BotSaySomething();
  123.         return;
  124.     }
  125.  
  126.     if (bot_debug >= 4)
  127.     {
  128.         dprint(self.netname);
  129.         dprint(" BotAnimationThink\n");
  130.     }
  131.  
  132.     self.extramove_lastframewasextra = FALSE;
  133.  
  134.     if (smooth_move)
  135.         run = (self.velocity_x || self.velocity_y || self.velocity_z);
  136.     else
  137.         run = (self.bot_action != BOT_STANDING);
  138.  
  139.  
  140.  
  141.     if (run)
  142.     {
  143.         // running animation
  144.         if (self.weapon == IT_AXE || self.weapon == IT_HOOK)
  145.         {
  146.             if (self.walkframe >= 6)        // made >= CTFBOT bug fix for "sliding" with hook?
  147.                 self.walkframe = 0;
  148.             self.frame = $axrun1 + self.walkframe;
  149.         }
  150.         else
  151.         {
  152.             if (self.walkframe >= 6)        // made >= CTFBOT EXTRAS bug fix for "sliding" with hook?
  153.                 self.walkframe = 0;
  154.             self.frame = $rockrun1 + self.walkframe;    // made $rockrun1 CTFBOT EXTRAS bug fix for "sliding" with hook?
  155.         }
  156.     }
  157.     else
  158.     {
  159.         // standing animation
  160.         if (self.weapon == IT_AXE || self.weapon == IT_HOOK)
  161.         {
  162.             if (self.walkframe >= 12)
  163.                 self.walkframe = 0;
  164.             self.frame = $axstnd1 + self.walkframe;
  165.         }
  166.         else
  167.         {
  168.             if (self.walkframe >= 5)
  169.                 self.walkframe = 0;
  170.             self.frame = $stand1 + self.walkframe;
  171.         }
  172.     }
  173.     
  174.     // go to next animation frame
  175.     self.walkframe = self.walkframe + 1;    
  176.  
  177.     // decide what to do... sets nextthink
  178.     BotThink();    
  179. };
  180.  
  181.  
  182. //==============================================================================
  183. // special case: check for attack finished so we can abort out of 
  184. // animation... this handles the haste case and also helps us make
  185. // sure bot is firing as fast as possible
  186. //=============================================================================
  187. void () CheckAttackFinished =
  188. {
  189.     // special case required for haste: break out of animation early
  190.     // and go to main think routine where we can fire again.
  191.     if ((time >= self.attack_finished) && (self.player_flag & ITEM_RUNE3_FLAG))
  192.     {
  193.         self.think = BotAnimationThink;
  194.         self.extramove_oldthink = BotAnimationThink;
  195.     }
  196.     
  197.     self.extramove_lastframewasextra = FALSE;
  198. };
  199.  
  200. //==============================================================================
  201. void()    bot_shot1 =    [$shotatt1, bot_shot2    ] 
  202. {self.effects = self.effects | EF_MUZZLEFLASH; MoveWhileFiring(); CheckAttackFinished(); };
  203. void()    bot_shot2 =    [$shotatt2, bot_shot3    ] {MoveWhileFiring(); CheckAttackFinished(); };
  204. void()    bot_shot3 =    [$shotatt3, bot_shot4    ] {MoveWhileFiring(); CheckAttackFinished(); };
  205. void()    bot_shot4 =    [$shotatt4, bot_shot5    ] {MoveWhileFiring(); CheckAttackFinished(); };
  206. void()    bot_shot5 =    [$shotatt5, bot_shot6    ] {MoveWhileFiring(); CheckAttackFinished(); };
  207. void()    bot_shot6 =    [$shotatt6, BotAnimationThink    ] {BotThink();};
  208.  
  209. void()    bot_axe1 =    [$axatt1, bot_axe2    ] {MoveWhileFiring(); };
  210. void()    bot_axe2 =    [$axatt2, bot_axe3    ] {MoveWhileFiring(); };
  211. void()    bot_axe3 =    [$axatt3, bot_axe4    ] {W_FireAxe();CheckAttackFinished(); };
  212. void()    bot_axe4 =    [$axatt4, BotAnimationThink    ] {BotThink();};
  213.  
  214. void()    bot_axeb1 =    [$axattb1, bot_axeb2 ] {MoveWhileFiring(); };
  215. void() bot_axeb2=[$axattb2, bot_axeb3] {MoveWhileFiring(); };
  216. void()    bot_axeb3 =    [$axattb3, bot_axeb4 ] {W_FireAxe();CheckAttackFinished(); };
  217. void()    bot_axeb4 =    [$axattb4, BotAnimationThink    ] {BotThink();};
  218.  
  219. void()    bot_axec1 =    [$axattc1, bot_axec2    ] {MoveWhileFiring(); };
  220. void()    bot_axec2 =    [$axattc2, bot_axec3    ] {MoveWhileFiring(); };
  221. void()    bot_axec3 =    [$axattc3, bot_axec4    ] {W_FireAxe();CheckAttackFinished(); };
  222. void()    bot_axec4 =    [$axattc4, BotAnimationThink    ] {BotThink();};
  223.  
  224. void()    bot_axed1 =    [$axattd1, bot_axed2    ] {MoveWhileFiring(); };
  225. void()    bot_axed2 =    [$axattd2, bot_axed3    ] {MoveWhileFiring(); };
  226. void()    bot_axed3 =    [$axattd3, bot_axed4    ] {W_FireAxe();CheckAttackFinished(); };
  227. void()    bot_axed4 =    [$axattd4, BotAnimationThink    ] {BotThink();};
  228.  
  229. //==============================================================================
  230. void()  bot_chain1=  [$axattd1, bot_chain2 ] {};
  231. void()  bot_chain2=  [$axattd2, bot_chain3 ] {W_FireChain();};
  232. void() bot_chain5;
  233.  
  234. void() bot_chain4;
  235. void()  bot_chain3=  [$axattd3, bot_chain3 ]
  236. {
  237.     if (bot_debug >= 2)
  238.     {
  239.         dprint(self.netname);
  240.         dprint(" bot_chain3\n");
  241.     }
  242.  
  243.     if (!self.hook_out)
  244.     {
  245.         bot_chain5();
  246.         return;
  247.     }
  248.     if (vlen(self.velocity) >= 750)
  249.     {
  250.         bot_chain4();
  251.         return;
  252.     }
  253.  
  254.     if (ShouldReleaseHook())
  255.         DropDown();
  256. };
  257.  
  258. void() bot_chain4=  [$deathc4, bot_chain4 ]
  259. {
  260.     if (bot_debug >= 2)
  261.     {
  262.         dprint(self.netname);
  263.         dprint(" bot_chain4\n");
  264.     }
  265.  
  266.         if (!self.hook_out)
  267.         {
  268.                 bot_chain5();
  269.                 return;
  270.         }
  271.         if (vlen(self.velocity) < 750)
  272.         {
  273.                 bot_chain3();
  274.                 return;
  275.         }
  276.  
  277.     if (ShouldReleaseHook())
  278.         DropDown();
  279. };
  280.  
  281. void()  bot_chain5=  [$axattd4, BotAnimationThink    ] 
  282. {
  283.     if (bot_debug >= 2)
  284.     {
  285.         dprint(self.netname);
  286.         dprint(" bot_chain5\n");
  287.     }
  288.  
  289.     BotThink();
  290. };
  291.  
  292.  
  293.  
  294. //============================================================================
  295. void() bot_nail1   =[$nailatt1, bot_nail2  ] 
  296. {
  297.     self.effects = self.effects | EF_MUZZLEFLASH;
  298.  
  299.     SuperDamageSound();
  300.     //MoveWhileFiring();
  301.  
  302.     W_FireSpikes (4);
  303.  
  304.     self.attack_finished = time + 0.1;
  305.     BotThink();
  306. };
  307. void() bot_nail2   =[$nailatt2, bot_nail1  ]
  308. {
  309.     self.effects = self.effects | EF_MUZZLEFLASH;
  310.  
  311.     SuperDamageSound();
  312.  
  313.     //MoveWhileFiring();
  314.  
  315.     W_FireSpikes (-4);
  316.     
  317.     self.attack_finished = time + 0.1;
  318.     BotThink();
  319. };
  320.  
  321. //============================================================================
  322. void() bot_light1   =[$light1, bot_light2  ] 
  323. {
  324.     self.effects = self.effects | EF_MUZZLEFLASH;
  325.  
  326.     SuperDamageSound();
  327.     //MoveWhileFiring();
  328.  
  329.     W_FireLightning();
  330.     self.attack_finished = time + 0.2;
  331.     BotThink();
  332. };
  333. void() bot_light2   =[$light2, bot_light1  ]
  334. {
  335.     self.effects = self.effects | EF_MUZZLEFLASH;
  336.  
  337.     SuperDamageSound();
  338.     //MoveWhileFiring();
  339.  
  340.     W_FireLightning();
  341.     self.attack_finished = time + 0.2;
  342.     BotThink();
  343. };
  344.  
  345. //============================================================================
  346. void() bot_rocket1   =[$rockatt1, bot_rocket2  ] {
  347. self.effects = self.effects | EF_MUZZLEFLASH;MoveWhileFiring(); CheckAttackFinished(); };
  348. void() bot_rocket2   =[$rockatt2, bot_rocket3  ] {MoveWhileFiring(); CheckAttackFinished(); };
  349. void() bot_rocket3   =[$rockatt3, bot_rocket4  ] {MoveWhileFiring(); CheckAttackFinished(); };
  350. void() bot_rocket4   =[$rockatt4, bot_rocket5  ] {MoveWhileFiring(); CheckAttackFinished(); };
  351. void() bot_rocket5   =[$rockatt5, bot_rocket6  ] {MoveWhileFiring(); CheckAttackFinished(); };
  352. void() bot_rocket6   =[$rockatt6, BotAnimationThink  ] {BotThink();};
  353.  
  354.  
  355. //==============================================================================
  356. void()    bot_pain1 =    [    $pain1,    bot_pain2    ] {PainSound();BotEvade();CheckAttackFinished(); };
  357. void()    bot_pain2 =    [    $pain2,    bot_pain3    ] {BotEvade();CheckAttackFinished(); };
  358. void()    bot_pain3 =    [    $pain3,    bot_pain4    ] {BotEvade();CheckAttackFinished(); };
  359. void()    bot_pain4 =    [    $pain4,    bot_pain5    ] {BotEvade();CheckAttackFinished(); };
  360. void()    bot_pain5 =    [    $pain5,    bot_pain6    ] {BotEvade();CheckAttackFinished(); };
  361. void()    bot_pain6 =    [    $pain6,    BotAnimationThink    ] {BotThink();};
  362.  
  363. void()    bot_axpain1 =    [    $axpain1,    bot_axpain2    ] {PainSound();BotEvade();CheckAttackFinished(); };
  364. void()    bot_axpain2 =    [    $axpain2,    bot_axpain3    ] {BotEvade();CheckAttackFinished(); };
  365. void()    bot_axpain3 =    [    $axpain3,    bot_axpain4    ] {BotEvade();CheckAttackFinished(); };
  366. void()    bot_axpain4 =    [    $axpain4,    bot_axpain5    ] {BotEvade();CheckAttackFinished(); };
  367. void()    bot_axpain5 =    [    $axpain5,    bot_axpain6    ] {BotEvade();CheckAttackFinished(); };
  368. void()    bot_axpain6 =    [    $axpain6,    BotAnimationThink    ] {BotThink();};
  369.  
  370. //==============================================================================
  371. void() bot_pain =
  372. {
  373.     if (self.weaponframe)
  374.         return;
  375.  
  376.     if (self.invisible_finished > time)
  377.         return;        // eyes don't have pain frames
  378.  
  379.     if (self.weapon == IT_AXE || self.weapon == IT_HOOK)
  380.         bot_axpain1 ();
  381.     else
  382.         bot_pain1 ();
  383. };
  384.  
  385.  
  386.  
  387. //==============================================================================
  388. //==============================================================================
  389. void() Bot_Attack =
  390. {
  391.     local    float    r;
  392.     
  393.     if (bot_debug >= 2)
  394.     {
  395.         dprint(self.netname);
  396.         dprint(" Bot_Attack\n");
  397.     }
  398.  
  399.     if (!W_CheckNoAmmo ())
  400.         return;
  401.  
  402.     makevectors    (self.v_angle);            // calculate forward angle for velocity
  403.  
  404.     if (bot_debug >= 2)
  405.     {
  406.         dprint(self.netname);
  407.         dprint(" attack with ");
  408.         local string st;
  409.         st = ftos(self.weapon);
  410.         dprint(st);
  411.         dprint("\n");
  412.     }
  413.  
  414.     if (self.weapon == IT_AXE)
  415.     {
  416.         sound (self, CHAN_WEAPON, "weapons/ax1.wav", 1, ATTN_NORM);
  417.         r = random();
  418.         if (r < 0.25)
  419.             bot_axe1 ();
  420.         else if (r<0.5)
  421.             bot_axeb1 ();
  422.         else if (r<0.75)
  423.             bot_axec1 ();
  424.         else
  425.             bot_axed1 ();
  426.  
  427.         // RUNE: rune of hell magic
  428.         if (self.player_flag & ITEM_RUNE3_FLAG) {
  429.             self.attack_finished = time + 0.3;
  430.             HasteSound();
  431.         } else
  432.             self.attack_finished = time + 0.5;
  433.     }
  434.     else if (self.weapon == IT_SHOTGUN)
  435.     {
  436.         bot_shot1 ();
  437.         W_FireShotgun ();
  438.         // RUNE: rune of hell magic
  439.         if (self.player_flag & ITEM_RUNE3_FLAG) {
  440.             self.attack_finished = time + 0.3;
  441.             HasteSound();
  442.         } else
  443.         self.attack_finished = time + 0.5;
  444.     }
  445.     else if (self.weapon == IT_SUPER_SHOTGUN)
  446.     {
  447.         bot_shot1 ();
  448.         W_FireSuperShotgun ();
  449.         // RUNE: rune of hell magic
  450.         if (self.player_flag & ITEM_RUNE3_FLAG) {
  451.             self.attack_finished = time + 0.4;
  452.             HasteSound();
  453.         } else
  454.         self.attack_finished = time + 0.7;
  455.     }
  456.     else if (self.weapon == IT_NAILGUN)
  457.     {
  458.         bot_nail1 ();
  459.     }
  460.     else if (self.weapon == IT_SUPER_NAILGUN)
  461.     {
  462.         bot_nail1 ();
  463.     }
  464.     else if (self.weapon == IT_GRENADE_LAUNCHER)
  465.     {
  466.         bot_rocket1();
  467.         W_FireGrenade();
  468.         // RUNE: rune of hell magic
  469.         if (self.player_flag & ITEM_RUNE3_FLAG) {
  470.             self.attack_finished = time + 0.3;
  471.             HasteSound();
  472.         } else
  473.             self.attack_finished = time + 0.6;
  474.     }
  475.     else if (self.weapon == IT_ROCKET_LAUNCHER)
  476.     {
  477.         bot_rocket1();
  478.         W_FireRocket();
  479.         // RUNE: rune of hell magic
  480.         if (self.player_flag & ITEM_RUNE3_FLAG) {
  481.             self.attack_finished = time + 0.4;
  482.             HasteSound();
  483.         } else
  484.             self.attack_finished = time + 0.8;
  485.     }
  486.     else if (self.weapon == IT_LIGHTNING)
  487.     {
  488.         bot_light1();
  489.         self.attack_finished = time + 0.1;
  490.         sound (self, CHAN_AUTO, "weapons/lstart.wav", 1, ATTN_NORM);
  491.     }
  492.     else if (self.weapon == IT_HOOK)
  493.     {
  494.         if (!self.hook_out)
  495.             bot_chain1();
  496.         else
  497.             bot_chain3();
  498.  
  499.         self.attack_finished = time + 0.1;
  500.     }
  501. };
  502.  
  503.  
  504. //==============================================================================
  505. //==============================================================================
  506. void() Bot_WeaponFrame =
  507. {
  508.     if (bot_debug >= 2)
  509.     {
  510.         dprint(self.netname);
  511.         dprint(" Bot_WeaponFrame\n");
  512.     }
  513.     
  514.     self.last_weapon_shot = self.weapon;
  515.  
  516.     if (time < self.attack_finished)
  517.         return;
  518.     
  519. // check for attack
  520.     if (self.button0)
  521.     {
  522.         SuperDamageSound ();
  523.         Bot_Attack ();
  524.     }
  525.  
  526. };