Advertisement
Guest User

RMQ/Schism OgreQc

a guest
Sep 8th, 2015
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 51.40 KB | None | 0 0
  1. /*
  2. ==============================================================================
  3.  
  4. OGRE
  5.  
  6. This includes the four basic weapon variants - Nail, Rocket, Grenade and
  7. Double Chainsaw. The Elder Ogre is the XOgre and held in that qc file.
  8.  
  9. ==============================================================================
  10. */
  11.  
  12. $cd id1/models/ogre_c
  13. $origin 0 0 24
  14. $base base
  15. $skin base
  16.  
  17. $frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9
  18.  
  19. $frame walk1 walk2 walk3 walk4 walk5 walk6 walk7
  20. $frame walk8 walk9 walk10 walk11 walk12 walk13 walk14 walk15 walk16
  21.  
  22. $frame run1 run2 run3 run4 run5 run6 run7 run8
  23.  
  24. $frame swing1 swing2 swing3 swing4 swing5 swing6 swing7
  25. $frame swing8 swing9 swing10 swing11 swing12 swing13 swing14
  26.  
  27. $frame smash1 smash2 smash3 smash4 smash5 smash6 smash7
  28. $frame smash8 smash9 smash10 smash11 smash12 smash13 smash14
  29.  
  30. $frame shoot1 shoot2 shoot3 shoot4 shoot5 shoot6
  31.  
  32. $frame pain1 pain2 pain3 pain4 pain5
  33.  
  34. $frame painb1 painb2 painb3
  35.  
  36. $frame painc1 painc2 painc3 painc4 painc5 painc6
  37.  
  38. $frame paind1 paind2 paind3 paind4 paind5 paind6 paind7 paind8 paind9 paind10
  39. $frame paind11 paind12 paind13 paind14 paind15 paind16
  40.  
  41. $frame paine1 paine2 paine3 paine4 paine5 paine6 paine7 paine8 paine9 paine10
  42. $frame paine11 paine12 paine13 paine14 paine15
  43.  
  44. $frame death1 death2 death3 death4 death5 death6
  45. $frame death7 death8 death9 death10 death11 death12
  46. $frame death13 death14
  47.  
  48. $frame bdeath1 bdeath2 bdeath3 bdeath4 bdeath5 bdeath6
  49. $frame bdeath7 bdeath8 bdeath9 bdeath10
  50.  
  51. $frame pull1 pull2 pull3 pull4 pull5 pull6 pull7 pull8 pull9 pull10 pull11
  52.  
  53. // CUSTENTS fire while running frames
  54. // (c) Carl Glave 1997
  55. $frame runfire1 runfire2 runfire3 runfire4
  56. $frame runfire5 runfire6 runfire7 runfire8
  57.  
  58. $framevalue 0 // FTEQCC
  59.  
  60. // ogreb DUAL CHAINSAWS
  61.  
  62. $frame ogbstand1 ogbstand2 ogbstand3 ogbstand4 ogbstand5 ogbstand6 ogbstand7 ogbstand8 ogbstand9
  63.  
  64. $frame ogbwalk1 ogbwalk2 ogbwalk3 ogbwalk4 ogbwalk5 ogbwalk6 ogbwalk7
  65. $frame ogbwalk8 ogbwalk9 ogbwalk10 ogbwalk11 ogbwalk12 ogbwalk13 ogbwalk14 ogbwalk15 ogbwalk16
  66.  
  67. $frame ogbrun1 ogbrun2 ogbrun3 ogbrun4 ogbrun5 ogbrun6 ogbrun7 ogbrun8
  68.  
  69. $frame ogbswing1 ogbswing2 ogbswing3 ogbswing4 ogbswing5 ogbswing6 ogbswing7
  70. $frame ogbswing8 ogbswing9 ogbswing10 ogbswing11 ogbswing12 ogbswing13 ogbswing14
  71.  
  72. $frame ogbsmash1 ogbsmash2 ogbsmash3 ogbsmash4 ogbsmash5 ogbsmash6 ogbsmash7
  73. $frame ogbsmash8 ogbsmash9 ogbsmash10 ogbsmash11 ogbsmash12 ogbsmash13 ogbsmash14
  74.  
  75. $frame ogbtaunt1 ogbtaunt2 ogbtaunt3
  76.  
  77. $frame ogbpain1 ogbpain2 ogbpain3 ogbpain4 ogbpain5
  78.  
  79. $frame ogbdeath1 ogbdeath2 ogbdeath3 ogbdeath4 ogbdeath5 ogbdeath6
  80. $frame ogbdeath7 ogbdeath8 ogbdeath9 ogbdeath10 ogbdeath11 ogbdeath12
  81. $frame ogbdeath13 ogbdeath14 ogbdeath15 ogbdeath16 ogbdeath17
  82. $frame ogbdeath18 ogbdeath19 ogbdeath20 ogbdeath21
  83.  
  84. $frame ogbbdeath1 ogbbdeath2 ogbbdeath3 ogbbdeath4 ogbbdeath5 ogbbdeath6
  85. $frame ogbbdeath7 ogbbdeath8 ogbbdeath9 ogbbdeath10
  86.  
  87. $frame ogbcdeath1 ogbcdeath2 ogbcdeath3 ogbcdeath4 ogbcdeath5 ogbcdeath6
  88. $frame ogbcdeath7 ogbcdeath8 ogbcdeath9 ogbcdeath10 ogbcdeath11 ogbcdeath12
  89. $frame ogbcdeath13 ogbcdeath14
  90.  
  91. $framevalue 0
  92.  
  93. //ogrer ROCKETS
  94.  
  95. $frame standr1 standr2 standr3 standr4 standr5 standr6 standr7 standr8 standr9
  96.  
  97. $frame walkr1 walkr2 walkr3 walkr4 walkr5 walkr6 walkr7
  98. $frame walkr8 walkr9 walkr10 walkr11 walkr12 walkr13 walkr14 walkr15 walkr16
  99.  
  100. $frame runr1 runr2 runr3 runr4 runr5 runr6 runr7 runr8
  101.  
  102. $frame bayonet1 bayonet2 bayonet3 bayonet4 bayonet5 bayonet6 bayonet7
  103.  
  104. $frame shootr1 shootr2 shootr3 shootr4 shootr5 shootr6
  105.  
  106. $frame painr1 painr2 painr3 painr4 painr5
  107.  
  108. $frame painbr1 painbr2 painbr3
  109.  
  110. $frame paincr1 paincr2 paincr3 paincr4 paincr5 paincr6
  111.  
  112. $frame paindr1 paindr2 paindr3 paindr4 paindr5 paindr6 paindr7 paindr8 paindr9 paindr10
  113. $frame paindr11 paindr12 paindr13 paindr14 paindr15 paindr16
  114.  
  115. $frame painer1 painer2 painer3 painer4 painer5 painer6 painer7 painer8 painer9 painer10
  116. $frame painer11 painer12 painer13 painer14 painer15
  117.  
  118. $frame deathr1 deathr2 deathr3 deathr4 deathr5 deathr6
  119. $frame deathr7 deathr8 deathr9 deathr10 deathr11 deathr12
  120. $frame deathr13 deathr14
  121.  
  122. $frame bdeathr1 bdeathr2 bdeathr3 bdeathr4 bdeathr5 bdeathr6
  123. $frame bdeathr7 bdeathr8 bdeathr9 bdeathr10
  124.  
  125. //=============================================================================
  126.  
  127. //float NAIL_OGRE = 4; ijed All gone to defs
  128. //float BERSERK_OGRE = 8; // if change, remember ai.qc
  129. //float ROCKET_OGRE = 16;
  130.  
  131. //=============================================================================
  132.  
  133. // footsteps, gb
  134. void() ogstep =
  135. {
  136. if ((self.flags & FL_ONGROUND) /*&& (self.h2olevel == 0)*/ /*&& (self.velocity != '0 0 0')*/)
  137. {
  138. if (self.h2olevel > 1) // not when submerged
  139. return;
  140.  
  141. local float r;
  142.  
  143. // wading in water?
  144. if (self.h2olevel > 0)
  145. {
  146. r = rint(random() * 3);
  147.  
  148. if (r == 1)
  149. sound (self, CHAN_AUTO, "misc/waterstep1.wav", 0.7, ATTN_NORM);
  150. else if (r == 2)
  151. sound (self, CHAN_AUTO, "misc/waterstep2.wav", 0.7, ATTN_NORM);
  152. else if (r == 0)
  153. sound (self, CHAN_AUTO, "misc/waterstep3.wav", 0.7, ATTN_NORM);
  154. else
  155. sound (self, CHAN_AUTO, "misc/waterstep4.wav", 0.7, ATTN_NORM);
  156. }
  157. // out of water?
  158. else
  159. {
  160. r = rint(random() * 7);
  161.  
  162. if (r == 1)
  163. sound (self, CHAN_AUTO, "ogre/ogstep1.wav", 0.7, ATTN_NORM);
  164. else if (r == 2)
  165. sound (self, CHAN_AUTO, "ogre/ogstep2.wav", 0.7, ATTN_NORM);
  166. else if (r == 3)
  167. sound (self, CHAN_AUTO, "ogre/ogstep3.wav", 0.7, ATTN_NORM);
  168. else if (r == 4)
  169. sound (self, CHAN_AUTO, "ogre/ogstep4.wav", 0.7, ATTN_NORM);
  170. else if (r == 5)
  171. sound (self, CHAN_AUTO, "ogre/ogstep5.wav", 0.7, ATTN_NORM);
  172. else if (r == 6)
  173. sound (self, CHAN_AUTO, "ogre/ogstep6.wav", 0.7, ATTN_NORM);
  174. else if (r == 0)
  175. sound (self, CHAN_AUTO, "ogre/ogstep7.wav", 0.7, ATTN_NORM);
  176. else
  177. sound (self, CHAN_AUTO, "ogre/ogstep8.wav", 0.7, ATTN_NORM);
  178. }
  179. }
  180. };
  181.  
  182. /*
  183. ================
  184. OgreSpike
  185. ================
  186. */
  187.  
  188. void() ogrespike_touch =
  189. {
  190. if (other == self.real_owner)
  191. {
  192. self.force_velocity = self.velocity; // record velocity at time of impact
  193.  
  194. self.owner = other; // to allow it to pass through
  195.  
  196. self.think = reset_velocity; // since the server is going to mangle our velocity after .touch is finished we need to reset it manually
  197. self.nextthink = time; // next frame
  198.  
  199. return;
  200. }
  201.  
  202. if (other.classname == "phys_obj") // Supa, Prevent bot collision ent test entities from colliding with projectiles
  203. return;
  204.  
  205. if (other.solid == SOLID_TRIGGER)
  206. return; // trigger field, do nothing
  207.  
  208. if (other.classname == "func_breakaway" )
  209. if (other.spawnflags & PIERCEABLE ) // can projectiles pass through this breakable?
  210. {
  211. T_Damage (other, self, self.real_owner, other.health, DTH_OGRE_NAIL, FALSE, 1); // smash the breakable
  212.  
  213. self.force_velocity = self.velocity; // record velocity at time of impact
  214.  
  215. self.owner = other; // to allow it to pass through
  216.  
  217. self.think = reset_velocity; // since the server is going to mangle our velocity after .touch is finished we need to reset it manually
  218. self.nextthink = time; // next frame
  219.  
  220. return;
  221. }
  222.  
  223. if (pointcontents(self.origin) == CONTENT_SKY)
  224. {
  225. remove(self);
  226. return;
  227. }
  228.  
  229. // hit something that bleeds
  230. if (other.takedamage)
  231. {
  232. spawn_touchblood (9, other.nobleed);
  233.  
  234. T_Damage (other, self, self.real_owner, 9, DTH_OGRE_NAIL, FALSE, 1);
  235.  
  236. remove(self);
  237. }
  238. else if (other == world) // oh, duh
  239. { // hit BSP? remove after 1s
  240. setorigin(self, self.origin - 4 * normalize(self.velocity));
  241.  
  242. self.touch = SUB_Null;
  243. self.velocity = '0 0 0';
  244.  
  245. self.think = SUB_Remove;
  246. self.nextthink = time + 1;
  247. }
  248. else remove(self);
  249. };
  250.  
  251. void() OgreSpike = //ijed Fires an ogre's spikes in a spray at the player
  252. {
  253. local vector dir;
  254. local vector sdir;
  255. local vector org;
  256. local vector enemyorg;
  257. local entity old;
  258. local float firedelay;
  259. local float spikes;
  260.  
  261. // gb, submerged?
  262. if (self.h2olevel >= 3)
  263. {
  264. if (random() < 0.4)
  265. {
  266. sound (self, CHAN_WEAPON, "weapons/fail.wav", 1, ATTN_NORM);
  267. return;
  268. }
  269. }
  270.  
  271. self.effects = (self.effects | EF_MUZZLEFLASH);
  272. sound (self, CHAN_WEAPON, "ogre/flak.wav", 1, ATTN_NORM);
  273.  
  274. firedelay = (random() + 2 - skill);
  275.  
  276. self.attack_finished = (time + firedelay); //ijed Skill dependant delay between shots
  277.  
  278. // dir = normalize (self.enemy.origin - self.origin);
  279.  
  280. // Supa, take breakables into account
  281. if (self.enemy.solid == SOLID_BSP) enemyorg = (self.enemy.absmin + self.enemy.absmax) * 0.5;
  282. else enemyorg = self.enemy.origin;
  283.  
  284. do // Supa, Launch a spread of 4 ogrespikes..
  285. {
  286. // launch_spike (self.origin + '0 0 16', dir + v_up*(crandom()*25) + v_right*(crandom()*25));
  287.  
  288. dir = enemyorg + RandomOffset(25);
  289. dir = normalize (dir - self.origin);
  290. launch_spike (self.origin + '0 0 16', dir);
  291.  
  292. newmis.touch = ogrespike_touch;
  293. setmodel (newmis, "progs/s_spike.mdl");
  294. setsize (newmis, VEC_ORIGIN, VEC_ORIGIN);
  295.  
  296. spikes = spikes + 1;
  297. }
  298. while (spikes < 4);
  299.  
  300. // Skill dependant speed
  301. if (skill > 2) newmis.velocity = dir * 1000;
  302. else if (skill > 1) newmis.velocity = dir * 900;
  303. else newmis.velocity = dir * 800;
  304. };
  305.  
  306. /*
  307. ================
  308. Chainsaw
  309. ================
  310. */
  311. void(float side) chainsaw =
  312. {
  313. local vector delta, enemyorg;
  314. local float ldmg;
  315.  
  316. if (!self.enemy)
  317. return;
  318. if (!CanDamage (self.enemy, self))
  319. return;
  320.  
  321. ai_charge(10);
  322.  
  323. // Supa, take breakables into account
  324. if (self.enemy.solid == SOLID_BSP) enemyorg = (self.enemy.absmin + self.enemy.absmax) * 0.5;
  325. else enemyorg = self.enemy.origin;
  326.  
  327. delta = enemyorg - self.origin;
  328.  
  329. // DRAGONS /- - - -
  330. // if (vlen(delta) > 100)
  331. if (!InMeleeRange (100)) // Needed for fat dragons.
  332. return;
  333. //- - - - - - - - -
  334.  
  335. if (self.enemy.classname == "monster_zombie") // Supa, Ogre saw instagibs Zombies
  336. ldmg = 100;
  337. else
  338. ldmg = (random() + random() + random()) * 4; //ijed reverted to 4 damage
  339. //Berserks have the same base damage, but are in a hitting state for longer
  340.  
  341. T_Damage (self.enemy, self, self, ldmg, DTH_OGRE_SAW, FALSE, 1.5);
  342.  
  343. if (side)
  344. {
  345. makevectors (self.angles);
  346. if (side == 1)
  347. SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);
  348. else
  349. SpawnMeatSpray (self.origin + v_forward*16, side * v_right);
  350. }
  351. };
  352.  
  353. /*=============================================================================
  354. Idle Behaviours
  355. =============================================================================*/
  356.  
  357. void() ogre_talk = //I Is aN OgRe I Is
  358. {
  359. local float r;
  360. r = random();
  361.  
  362. if (r < 0.2)
  363. sound (self, CHAN_VOICE, "ogre/ogtalk1.wav", 1, ATTN_NORM);
  364. else if (r < 0.4)
  365. sound (self, CHAN_VOICE, "ogre/ogtalk2.wav", 1, ATTN_NORM);
  366. else if (r < 0.6)
  367. sound (self, CHAN_VOICE, "ogre/ogtalk3.wav", 1, ATTN_NORM);
  368. else if (r < 0.8)
  369. sound (self, CHAN_VOICE, "ogre/ogtalk4.wav", 1, ATTN_NORM);
  370. else
  371. sound (self, CHAN_VOICE, "ogre/ogpain5.wav", 1, ATTN_NORM);
  372. };
  373.  
  374. void() ogre_idle_sound =
  375. {
  376. local float r;
  377.  
  378. if (self.spawnflags & 1) // gb, it's no surprise if it goes "GRR"; FIXME: add this to other monsters
  379. return;
  380.  
  381. r = random();
  382.  
  383. if (r < 0.5)
  384. sound (self, CHAN_VOICE, "ogre/ogidle1.wav", 1, ATTN_NORM);
  385. else
  386. sound (self, CHAN_VOICE, "ogre/ogidle2.wav", 1, ATTN_NORM);
  387. };
  388.  
  389. // Nail / Grenade stand
  390.  
  391. void() ogre_stand1 =[ $stand1, ogre_stand2 ] {ai_stand();};
  392. void() ogre_stand2 =[ $stand2, ogre_stand3 ] {ai_stand();};
  393. void() ogre_stand3 =[ $stand3, ogre_stand4 ] {ai_stand();};
  394. void() ogre_stand4 =[ $stand4, ogre_stand5 ] {ai_stand();};
  395. void() ogre_stand5 =[ $stand5, ogre_stand6 ] {
  396. if (random() < 0.2)
  397. ogre_idle_sound();
  398. ai_stand();
  399. };
  400. void() ogre_stand6 =[ $stand6, ogre_stand7 ] {ai_stand();};
  401. void() ogre_stand7 =[ $stand7, ogre_stand8 ] {ai_stand();};
  402. void() ogre_stand8 =[ $stand8, ogre_stand9 ] {ai_stand();};
  403. void() ogre_stand9 =[ $stand9, ogre_stand1 ] {ai_stand();};
  404.  
  405. // Berserk Stand
  406.  
  407. void() ogreb_stand1 =[ $ogbstand1, ogreb_stand2 ] {ai_stand();};
  408. void() ogreb_stand2 =[ $ogbstand2, ogreb_stand3 ] {ai_stand();};
  409. void() ogreb_stand3 =[ $ogbstand3, ogreb_stand4 ] {ai_stand();};
  410. void() ogreb_stand4 =[ $ogbstand4, ogreb_stand5 ] {ai_stand();};
  411. void() ogreb_stand5 =[ $ogbstand5, ogreb_stand6 ] {
  412. if (random() < 0.2)
  413. ogre_idle_sound();
  414. ai_stand();
  415. };
  416. void() ogreb_stand6 =[ $ogbstand6, ogreb_stand7 ] {ai_stand();};
  417. void() ogreb_stand7 =[ $ogbstand7, ogreb_stand8 ] {ai_stand();};
  418. void() ogreb_stand8 =[ $ogbstand8, ogreb_stand9 ] {ai_stand();};
  419. void() ogreb_stand9 =[ $ogbstand9, ogreb_stand1 ] {ai_stand();};
  420.  
  421. // Rocket stand
  422.  
  423. void() ogrer_stand1 =[ $standr1, ogrer_stand2 ] {ai_stand();};
  424. void() ogrer_stand2 =[ $standr2, ogrer_stand3 ] {ai_stand();};
  425. void() ogrer_stand3 =[ $standr3, ogrer_stand4 ] {ai_stand();};
  426. void() ogrer_stand4 =[ $standr4, ogrer_stand5 ] {ai_stand();};
  427. void() ogrer_stand5 =[ $standr5, ogrer_stand6 ] {
  428. if (random() < 0.2)
  429. ogre_idle_sound();
  430. ai_stand();
  431. };
  432. void() ogrer_stand6 =[ $standr6, ogrer_stand7 ] {ai_stand();};
  433. void() ogrer_stand7 =[ $standr7, ogrer_stand8 ] {ai_stand();};
  434. void() ogrer_stand8 =[ $standr8, ogrer_stand9 ] {ai_stand();};
  435. void() ogrer_stand9 =[ $standr9, ogrer_stand1 ] {ai_stand();};
  436.  
  437.  
  438. // ======================== WALK ===============================
  439.  
  440. // Grenade / Nail Walk
  441.  
  442. void() ogre_walk1 =[ $walk1, ogre_walk2 ] {ogstep();ai_walk(3);};
  443. void() ogre_walk2 =[ $walk2, ogre_walk3 ] {ai_walk(2);};
  444. void() ogre_walk3 =[ $walk3, ogre_walk4 ] {
  445. ai_walk(2);
  446. if (random() < 0.2)
  447. ogre_idle_sound();
  448. };
  449. void() ogre_walk4 =[ $walk4, ogre_walk5 ] {ai_walk(2);};
  450. void() ogre_walk5 =[ $walk5, ogre_walk6 ] {ai_walk(2);};
  451. void() ogre_walk6 =[ $walk6, ogre_walk7 ] {
  452. ai_walk(5);
  453. if (random() < 0.1)
  454. sound (self, CHAN_VOICE, "ogre/ogdrag.wav", 1, ATTN_IDLE);
  455. };
  456. void() ogre_walk7 =[ $walk7, ogre_walk8 ] {ai_walk(3);};
  457. void() ogre_walk8 =[ $walk8, ogre_walk9 ] {ai_walk(2);};
  458. void() ogre_walk9 =[ $walk9, ogre_walk10 ] {ai_walk(3);};
  459. void() ogre_walk10 =[ $walk10, ogre_walk11 ] {ogstep();ai_walk(1);};
  460. void() ogre_walk11 =[ $walk11, ogre_walk12 ] {ai_walk(2);};
  461. void() ogre_walk12 =[ $walk12, ogre_walk13 ] {ai_walk(3);};
  462. void() ogre_walk13 =[ $walk13, ogre_walk14 ] {
  463. if (random() < 0.1)
  464. ogre_talk();
  465. ai_stand();
  466. };
  467. void() ogre_walk14 =[ $walk14, ogre_walk15 ] {ai_walk(3);};
  468. void() ogre_walk15 =[ $walk15, ogre_walk16 ] {ai_walk(3);};
  469. void() ogre_walk16 =[ $walk16, ogre_walk1 ] {ai_walk(4);};
  470.  
  471. // Berserk Walk
  472.  
  473. void() ogreb_walk1 =[ $ogbwalk1, ogreb_walk2 ] {ogstep();ai_walk(3);};
  474. void() ogreb_walk2 =[ $ogbwalk2, ogreb_walk3 ] {ai_walk(2);};
  475. void() ogreb_walk3 =[ $ogbwalk3, ogreb_walk4 ] {
  476. ai_walk(2);
  477. if (random() < 0.2)
  478. ogre_idle_sound();
  479. };
  480. void() ogreb_walk4 =[ $ogbwalk4, ogreb_walk5 ] {ai_walk(2);};
  481. void() ogreb_walk5 =[ $ogbwalk5, ogreb_walk6 ] {ai_walk(2);};
  482. void() ogreb_walk6 =[ $ogbwalk6, ogreb_walk7 ] {
  483. ai_walk(5);
  484. if (random() < 0.1)
  485. sound (self, CHAN_VOICE, "ogre/ogdrag.wav", 1, ATTN_IDLE);
  486. };
  487. void() ogreb_walk7 =[ $ogbwalk7, ogreb_walk8 ] {ai_walk(3);};
  488. void() ogreb_walk8 =[ $ogbwalk8, ogreb_walk9 ] {ai_walk(2);};
  489. void() ogreb_walk9 =[ $ogbwalk9, ogreb_walk10 ] {ogstep();ai_walk(3);};
  490. void() ogreb_walk10 =[ $ogbwalk10, ogreb_walk11 ] {ai_walk(1);};
  491. void() ogreb_walk11 =[ $ogbwalk11, ogreb_walk12 ] {ai_walk(2);};
  492. void() ogreb_walk12 =[ $ogbwalk12, ogreb_walk13 ] {ai_walk(3);};
  493. void() ogreb_walk13 =[ $ogbwalk13, ogreb_walk14 ] {
  494. if (random() < 0.1)
  495. ogre_talk();
  496. ai_stand();
  497. };
  498. void() ogreb_walk14 =[ $ogbwalk14, ogreb_walk15 ] {ai_walk(3);};
  499. void() ogreb_walk15 =[ $ogbwalk15, ogreb_walk16 ] {ai_walk(3);};
  500. void() ogreb_walk16 =[ $ogbwalk16, ogreb_walk1 ] {ai_walk(4);};
  501.  
  502. //Rocket Walk
  503.  
  504. void() ogrer_walk1 =[ $walkr1, ogrer_walk2 ] {ogstep();ai_walk(3);};
  505. void() ogrer_walk2 =[ $walkr2, ogrer_walk3 ] {ai_walk(2);};
  506. void() ogrer_walk3 =[ $walkr3, ogrer_walk4 ] {
  507. ai_walk(2);
  508. if (random() < 0.2)
  509. ogre_idle_sound();
  510. };
  511. void() ogrer_walk4 =[ $walkr4, ogrer_walk5 ] {ai_walk(2);};
  512. void() ogrer_walk5 =[ $walkr5, ogrer_walk6 ] {ai_walk(2);};
  513. void() ogrer_walk6 =[ $walkr6, ogrer_walk7 ] {ai_walk(5);};
  514. void() ogrer_walk7 =[ $walkr7, ogrer_walk8 ] {ai_walk(3);};
  515. void() ogrer_walk8 =[ $walkr8, ogrer_walk9 ] {ai_walk(2);};
  516. void() ogrer_walk9 =[ $walkr9, ogrer_walk10 ] {ogstep();ai_walk(3);};
  517. void() ogrer_walk10 =[ $walkr10, ogrer_walk11 ] {ai_walk(1);};
  518. void() ogrer_walk11 =[ $walkr11, ogrer_walk12 ] {ai_walk(2);};
  519. void() ogrer_walk12 =[ $walkr12, ogrer_walk13 ] {ai_walk(3);};
  520. void() ogrer_walk13 =[ $walkr13, ogrer_walk14 ] {
  521. if (random() < 0.1)
  522. ogre_talk();
  523. ai_stand();
  524. };
  525. void() ogrer_walk14 =[ $walkr14, ogrer_walk15 ] {ai_walk(3);};
  526. void() ogrer_walk15 =[ $walkr15, ogrer_walk16 ] {ai_walk(3);};
  527. void() ogrer_walk16 =[ $walkr16, ogrer_walk1 ] {ai_walk(4);};
  528.  
  529. //Grenade / Nail Run
  530.  
  531. void() ogre_run1 =[ $run1, ogre_run2 ] {ai_run(9);
  532. if (random() < 0.1)
  533. ogre_talk();
  534. };
  535. void() ogre_run2 =[ $run2, ogre_run3 ] {ogstep();ai_run(12);};
  536. void() ogre_run3 =[ $run3, ogre_run4 ] {ai_run(8);};
  537. void() ogre_run4 =[ $run4, ogre_run5 ] {ai_run(22);};
  538. void() ogre_run5 =[ $run5, ogre_run6 ] {ai_run(16);};
  539. void() ogre_run6 =[ $run6, ogre_run7 ] {ogstep();ai_run(4);};
  540. void() ogre_run7 =[ $run7, ogre_run8 ] {ai_run(13);};
  541. void() ogre_run8 =[ $run8, ogre_run1 ] {ai_run(24);};
  542.  
  543. //Berserk Run
  544.  
  545. void() ogreb_run1 =[ $ogbrun1, ogreb_run2 ] {ai_run(9);
  546. if (random() < 0.1)
  547. ogre_talk();
  548. };
  549. void() ogreb_run2 =[ $ogbrun2, ogreb_run3 ] {ogstep();ai_run(12);};
  550. void() ogreb_run3 =[ $ogbrun3, ogreb_run4 ] {ai_run(12);};
  551. void() ogreb_run4 =[ $ogbrun4, ogreb_run5 ] {ai_run(22);};
  552. void() ogreb_run5 =[ $ogbrun5, ogreb_run6 ] {ai_run(32);};
  553. void() ogreb_run6 =[ $ogbrun6, ogreb_run7 ] {ogstep();ai_run(12);};
  554. void() ogreb_run7 =[ $ogbrun7, ogreb_run8 ] {ai_run(13);};
  555. void() ogreb_run8 =[ $ogbrun8, ogreb_run1 ] {ai_run(24);};
  556.  
  557. //Rocket Run
  558.  
  559. void() ogrer_run1 =[ $run1, ogre_run2 ] {ai_run(9);
  560. if (random() < 0.1)
  561. ogre_talk();
  562. };
  563. void() ogrer_run2 =[ $runr2, ogrer_run3 ] {ogstep();ai_run(12);};
  564. void() ogrer_run3 =[ $runr3, ogrer_run4 ] {ai_run(8);};
  565. void() ogrer_run4 =[ $runr4, ogrer_run5 ] {ai_run(22);};
  566. void() ogrer_run5 =[ $runr5, ogrer_run6 ] {ai_run(16);};
  567. void() ogrer_run6 =[ $runr6, ogrer_run7 ] {ogstep();ai_run(4);};
  568. void() ogrer_run7 =[ $runr7, ogrer_run8 ] {ai_run(13);};
  569. void() ogrer_run8 =[ $runr8, ogrer_run1 ] {ai_run(24);};
  570.  
  571. // Grenade / Nail Melee Swing
  572.  
  573. void() ogre_swing1 =[ $swing1, ogre_swing2 ] {ai_charge(11);
  574. sound (self, CHAN_WEAPON, "ogre/ogsawatk.wav", 1, ATTN_NORM);
  575. sound (self, CHAN_BODY, "ogre/ogsawloop.wav", 0.5, ATTN_NORM); // gb, restart this from time to time
  576. ogstep();
  577. };
  578. void() ogre_swing2 =[ $swing2, ogre_swing3 ] {ai_charge(1);};
  579. void() ogre_swing3 =[ $swing3, ogre_swing4 ] {ai_charge(4);};
  580. void() ogre_swing4 =[ $swing4, ogre_swing5 ] {ai_charge(13);};
  581. void() ogre_swing5 =[ $swing5, ogre_swing6 ] {ogstep();ai_charge(9); chainsaw(0);self.angles_y = self.angles_y + random()*25;};
  582. void() ogre_swing6 =[ $swing6, ogre_swing7 ] {chainsaw(200);self.angles_y = self.angles_y + random()* 25;};
  583. void() ogre_swing7 =[ $swing7, ogre_swing8 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  584. void() ogre_swing8 =[ $swing8, ogre_swing9 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  585. void() ogre_swing9 =[ $swing9, ogre_swing10 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  586. void() ogre_swing10 =[ $swing10, ogre_swing11 ] {chainsaw(-200);self.angles_y = self.angles_y + random()* 25;};
  587. void() ogre_swing11 =[ $swing11, ogre_swing12 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  588. void() ogre_swing12 =[ $swing12, ogre_swing13 ] {ai_charge(3);};
  589. void() ogre_swing13 =[ $swing13, ogre_swing14 ] {ai_charge(8);};
  590. void() ogre_swing14 =[ $swing14, ogre_run1 ] {ai_charge(9);};
  591.  
  592. // Berserk Melee Swing
  593.  
  594. void() ogreb_swing1 =[ $ogbswing1, ogreb_swing2 ] {ai_charge(11);
  595. sound (self, CHAN_WEAPON, "ogre/ogbsawatk.wav", 1, ATTN_NORM);
  596. sound (self, CHAN_BODY, "ogre/ogsawloop.wav", 0.5, ATTN_NORM); // gb, restart this from time to time
  597. ogstep();
  598. };
  599. void() ogreb_swing2 =[ $ogbswing2, ogreb_swing3 ] {ai_charge(1); chainsaw(0);self.angles_y = self.angles_y + random()*25;};
  600. void() ogreb_swing3 =[ $ogbswing3, ogreb_swing4 ] {ai_charge(4); chainsaw(0);self.angles_y = self.angles_y + random()*25;};
  601. void() ogreb_swing4 =[ $ogbswing4, ogreb_swing5 ] {ai_charge(13); chainsaw(0);self.angles_y = self.angles_y + random()*25;};
  602. void() ogreb_swing5 =[ $ogbswing5, ogreb_swing6 ] {ogstep();ai_charge(9); chainsaw(0);self.angles_y = self.angles_y + random()*25;};
  603. void() ogreb_swing6 =[ $ogbswing6, ogreb_swing7 ] {chainsaw(200);self.angles_y = self.angles_y + random()* 25;};
  604. void() ogreb_swing7 =[ $ogbswing7, ogreb_swing8 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  605. void() ogreb_swing8 =[ $ogbswing8, ogreb_swing9 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  606. void() ogreb_swing9 =[ $ogbswing9, ogreb_swing10 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  607. void() ogreb_swing10 =[ $ogbswing10, ogreb_swing11 ] {chainsaw(-200);self.angles_y = self.angles_y + random()* 25;};
  608. void() ogreb_swing11 =[ $ogbswing11, ogreb_swing12 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  609. void() ogreb_swing12 =[ $ogbswing12, ogreb_swing13 ] {ai_charge(3);};
  610. void() ogreb_swing13 =[ $ogbswing13, ogreb_swing14 ] {ai_charge(8);};
  611. void() ogreb_swing14 =[ $ogbswing14, ogreb_run1 ] {ai_charge(9);};
  612.  
  613. // Grenade / Nail Melee Smash
  614. void() ogre_smash1 =[ $smash1, ogre_smash2 ] {ai_charge(6);
  615. sound (self, CHAN_WEAPON, "ogre/ogsawatk.wav", 1, ATTN_NORM);
  616. ogstep();
  617. };
  618. void() ogre_smash2 =[ $smash2, ogre_smash3 ] {ai_charge(0);};
  619. void() ogre_smash3 =[ $smash3, ogre_smash4 ] {ai_charge(0);};
  620. void() ogre_smash4 =[ $smash4, ogre_smash5 ] {ai_charge(1);};
  621. void() ogre_smash5 =[ $smash5, ogre_smash6 ] {ai_charge(4);};
  622. void() ogre_smash6 =[ $smash6, ogre_smash7 ] {ai_charge(4); chainsaw(0);};
  623. void() ogre_smash7 =[ $smash7, ogre_smash8 ] {ai_charge(4); chainsaw(0);};
  624. void() ogre_smash8 =[ $smash8, ogre_smash9 ] {ai_charge(10); chainsaw(0);};
  625. void() ogre_smash9 =[ $smash9, ogre_smash10 ] {ogstep();ai_charge(13); chainsaw(0);};
  626. void() ogre_smash10 =[ $smash10, ogre_smash11 ] {chainsaw(1);};
  627. void() ogre_smash11 =[ $smash11, ogre_smash12 ] {ai_charge(2); chainsaw(0);
  628. self.nextthink = self.nextthink + random()*0.2;}; // slight variation
  629. void() ogre_smash12 =[ $smash12, ogre_smash13 ] {ai_charge(0);};
  630. void() ogre_smash13 =[ $smash13, ogre_smash14 ] {ai_charge(4);};
  631. void() ogre_smash14 =[ $smash14, ogre_run1 ] {ai_charge(12);};
  632.  
  633. // Berserk Melee Smash
  634. void() ogreb_smash1 =[ $ogbsmash1, ogreb_smash2 ] {ai_charge(6);
  635. sound (self, CHAN_WEAPON, "ogre/ogbsawatk.wav", 1, ATTN_NORM);
  636. ogstep();
  637. };
  638. void() ogreb_smash2 =[ $ogbsmash2, ogreb_smash3 ] {ai_charge(0); chainsaw(0);};
  639. void() ogreb_smash3 =[ $ogbsmash3, ogreb_smash4 ] {ai_charge(0); chainsaw(0);};
  640. void() ogreb_smash4 =[ $ogbsmash4, ogreb_smash5 ] {ai_charge(1); chainsaw(0);};
  641. void() ogreb_smash5 =[ $ogbsmash5, ogreb_smash6 ] {ai_charge(4); chainsaw(0);};
  642. void() ogreb_smash6 =[ $ogbsmash6, ogreb_smash7 ] {ai_charge(4); chainsaw(0);};
  643. void() ogreb_smash7 =[ $ogbsmash7, ogreb_smash8 ] {ai_charge(4); chainsaw(0);};
  644. void() ogreb_smash8 =[ $ogbsmash8, ogreb_smash9 ] {ai_charge(10); chainsaw(0);};
  645. void() ogreb_smash9 =[ $ogbsmash9, ogreb_smash10 ] {ogstep();ai_charge(13); chainsaw(0);};
  646. void() ogreb_smash10 =[ $ogbsmash10, ogreb_smash11 ] {chainsaw(1);};
  647. void() ogreb_smash11 =[ $ogbsmash11, ogreb_smash12 ] {ai_charge(2); chainsaw(0);
  648. self.nextthink = self.nextthink + random()*0.2;}; // slight variation
  649. void() ogreb_smash12 =[ $ogbsmash12, ogreb_smash13 ] {ai_charge(0);};
  650. void() ogreb_smash13 =[ $ogbsmash13, ogreb_smash14 ] {ai_charge(4);};
  651. void() ogreb_smash14 =[ $ogbsmash14, ogreb_run1 ] {ai_charge(12);};
  652.  
  653. // Bayonet Melee (Rocket Ogre)
  654. void() ogre_bayonet1 =[ $bayonet1, ogre_bayonet2 ] {ogstep();ai_charge(0);};
  655. void() ogre_bayonet2 =[ $bayonet2, ogre_bayonet3 ] {ai_charge(0);};
  656. void() ogre_bayonet3 =[ $bayonet3, ogre_bayonet4 ] {ai_charge(0);};
  657. void() ogre_bayonet4 =[ $bayonet4, ogre_bayonet5 ] {ai_charge(0);};
  658. void() ogre_bayonet5 =[ $bayonet5, ogre_bayonet6 ] {ogstep();ai_charge(0); chainsaw(0);};
  659. void() ogre_bayonet6 =[ $bayonet6, ogre_bayonet7 ] {ai_charge(0);};
  660. void() ogre_bayonet7 =[ $bayonet7, ogrer_run1 ] {ai_charge(0);};
  661.  
  662. // Fire Grenade
  663. void() ogre_grenade1 =[ $shoot1, ogre_grenade2 ] {ogstep();ai_face();
  664. if (random() < 0.1)
  665. ogre_talk();
  666. };
  667. void() ogre_grenade2 =[ $shoot2, ogre_grenade3 ] {ai_face();};
  668. void() ogre_grenade3 =[ $shoot2, ogre_grenade4 ] {ai_face();};
  669. void() ogre_grenade4 =[ $shoot3, ogre_grenade5 ] {ai_face();M_FireGrenade('0 0 0');};
  670. void() ogre_grenade5 =[ $shoot4, ogre_grenade6 ] {ai_face();};
  671. void() ogre_grenade6 =[ $shoot5, ogre_grenade7 ] {ai_face();};
  672. void() ogre_grenade7 =[ $shoot6, ogre_run1 ] {ai_face();};
  673.  
  674. // Fire Rocket
  675. void() ogre_rocket1 =[ $shootr1, ogre_rocket2 ] {ai_face();
  676. if (random() < 0.1)
  677. ogre_talk();
  678. };
  679. void() ogre_rocket2 =[ $shootr2, ogre_rocket3 ] {ogstep();ai_face();};
  680. void() ogre_rocket3 =[ $shootr3, ogre_rocket4 ] {ai_face();};
  681. void() ogre_rocket4 =[ $shootr4, ogre_rocket5 ] {ai_face();M_FireRocket();};
  682. void() ogre_rocket5 =[ $shootr5, ogre_rocket6 ] {ai_face();};
  683. void() ogre_rocket6 =[ $shootr6, ogrer_run1 ] {ai_face();};
  684.  
  685.  
  686. // Fire Nails
  687. void() ogre_nail1 =[ $runfire1, ogre_nail2 ] {ai_charge(9);
  688. if (random() < 0.1)
  689. ogre_talk();
  690. };
  691. void() ogre_nail2 =[ $runfire2, ogre_nail3 ] {ogstep();ai_charge(12);};
  692. void() ogre_nail3 =[ $runfire2, ogre_nail4 ] {ai_charge(8);};
  693. void() ogre_nail4 =[ $runfire3, ogre_nail5 ] {ai_charge(14);};
  694. void() ogre_nail5 =[ $runfire4, ogre_nail6 ] {ai_charge(22);OgreSpike();};
  695. void() ogre_nail6 =[ $runfire5, ogre_nail7 ] {ai_charge(16);};
  696. void() ogre_nail7 =[ $runfire6, ogre_nail8 ] {ogstep();ai_charge(4);};
  697. void() ogre_nail8 =[ $runfire7, ogre_nail9 ] {ai_charge(13);};
  698. void() ogre_nail9 =[ $runfire8, ogre_run1 ] {ai_charge(24);};
  699.  
  700. // Nail / Grenade pain
  701. void() ogre_pain1 =[ $pain1, ogre_pain2 ] {};
  702. void() ogre_pain2 =[ $pain2, ogre_pain3 ] {};
  703. void() ogre_pain3 =[ $pain3, ogre_pain4 ] {};
  704. void() ogre_pain4 =[ $pain4, ogre_pain5 ] {};
  705. void() ogre_pain5 =[ $pain5, ogre_run1 ] {};
  706.  
  707. // b
  708. void() ogre_painb1 =[ $painb1, ogre_painb2 ] {};
  709. void() ogre_painb2 =[ $painb2, ogre_painb3 ] {};
  710. void() ogre_painb3 =[ $painb3, ogre_run1 ] {};
  711.  
  712. // c
  713. void() ogre_painc1 =[ $painc1, ogre_painc2 ] {};
  714. void() ogre_painc2 =[ $painc2, ogre_painc3 ] {};
  715. void() ogre_painc3 =[ $painc3, ogre_painc4 ] {};
  716. void() ogre_painc4 =[ $painc4, ogre_painc5 ] {};
  717. void() ogre_painc5 =[ $painc5, ogre_painc6 ] {};
  718. void() ogre_painc6 =[ $painc6, ogre_run1 ] {};
  719.  
  720. // d
  721.  
  722. void() ogre_paind1 =[ $paind1, ogre_paind2 ] {};
  723. void() ogre_paind2 =[ $paind2, ogre_paind3 ] {ai_pain(10);};
  724. void() ogre_paind3 =[ $paind3, ogre_paind4 ] {ai_pain(9);};
  725. void() ogre_paind4 =[ $paind4, ogre_paind5 ] {ai_pain(4);};
  726. void() ogre_paind5 =[ $paind5, ogre_paind6 ] {};
  727. void() ogre_paind6 =[ $paind6, ogre_paind7 ] {};
  728. void() ogre_paind7 =[ $paind7, ogre_paind8 ] {};
  729. void() ogre_paind8 =[ $paind8, ogre_paind9 ] {};
  730. void() ogre_paind9 =[ $paind9, ogre_paind10 ] {};
  731. void() ogre_paind10 =[ $paind10, ogre_paind11 ] {};
  732. void() ogre_paind11 =[ $paind11, ogre_paind12 ] {};
  733. void() ogre_paind12 =[ $paind12, ogre_paind13 ] {};
  734. void() ogre_paind13 =[ $paind13, ogre_paind14 ] {};
  735. void() ogre_paind14 =[ $paind14, ogre_paind15 ] {};
  736. void() ogre_paind15 =[ $paind15, ogre_paind16 ] {};
  737. void() ogre_paind16 =[ $paind16, ogre_run1 ] {};
  738.  
  739. // e
  740.  
  741. void() ogre_paine1 =[ $paine1, ogre_paine2 ] {};
  742. void() ogre_paine2 =[ $paine2, ogre_paine3 ] {ai_pain(10);};
  743. void() ogre_paine3 =[ $paine3, ogre_paine4 ] {ai_pain(9);};
  744. void() ogre_paine4 =[ $paine4, ogre_paine5 ] {ai_pain(4);};
  745. void() ogre_paine5 =[ $paine5, ogre_paine6 ] {};
  746. void() ogre_paine6 =[ $paine6, ogre_paine7 ] {};
  747. void() ogre_paine7 =[ $paine7, ogre_paine8 ] {};
  748. void() ogre_paine8 =[ $paine8, ogre_paine9 ] {};
  749. void() ogre_paine9 =[ $paine9, ogre_paine10 ] {};
  750. void() ogre_paine10 =[ $paine10, ogre_paine11 ] {};
  751. void() ogre_paine11 =[ $paine11, ogre_paine12 ] {};
  752. void() ogre_paine12 =[ $paine12, ogre_paine13 ] {};
  753. void() ogre_paine13 =[ $paine13, ogre_paine14 ] {};
  754. void() ogre_paine14 =[ $paine14, ogre_paine15 ] {};
  755. void() ogre_paine15 =[ $paine15, ogre_run1 ] {};
  756.  
  757. // Berserk Pain
  758.  
  759. void() ogreb_pain1 =[ $ogbpain1, ogreb_pain2 ] {};
  760. void() ogreb_pain2 =[ $ogbpain2, ogreb_pain3 ] {};
  761. void() ogreb_pain3 =[ $ogbpain3, ogreb_pain4 ] {};
  762. void() ogreb_pain4 =[ $ogbpain4, ogreb_pain5 ] {};
  763. void() ogreb_pain5 =[ $ogbpain5, ogreb_run1 ] {};
  764.  
  765. // Rocket Pain
  766. void() ogrer_pain1 =[ $painr1, ogrer_pain2 ] {};
  767. void() ogrer_pain2 =[ $painr2, ogrer_pain3 ] {};
  768. void() ogrer_pain3 =[ $painr3, ogrer_pain4 ] {};
  769. void() ogrer_pain4 =[ $painr4, ogrer_pain5 ] {};
  770. void() ogrer_pain5 =[ $painr5, ogrer_run1 ] {};
  771.  
  772. // Rocket Pain B
  773. void() ogrer_painb1 =[ $painbr1, ogrer_painb2 ] {};
  774. void() ogrer_painb2 =[ $painbr2, ogrer_painb3 ] {};
  775. void() ogrer_painb3 =[ $painbr3, ogrer_run1 ] {};
  776.  
  777. // Rocket Pain C
  778. void() ogrer_painc1 =[ $paincr1, ogrer_painc2 ] {};
  779. void() ogrer_painc2 =[ $paincr2, ogrer_painc3 ] {};
  780. void() ogrer_painc3 =[ $paincr3, ogrer_painc4 ] {};
  781. void() ogrer_painc4 =[ $paincr4, ogrer_painc5 ] {};
  782. void() ogrer_painc5 =[ $paincr5, ogrer_painc6 ] {};
  783. void() ogrer_painc6 =[ $paincr6, ogrer_run1 ] {};
  784.  
  785. // Rocket Pain D
  786. void() ogrer_paind1 =[ $paindr1, ogrer_paind2 ] {};
  787. void() ogrer_paind2 =[ $paindr2, ogrer_paind3 ] {ai_pain(10);};
  788. void() ogrer_paind3 =[ $paindr3, ogrer_paind4 ] {ai_pain(9);};
  789. void() ogrer_paind4 =[ $paindr4, ogrer_paind5 ] {ai_pain(4);};
  790. void() ogrer_paind5 =[ $paindr5, ogrer_paind6 ] {};
  791. void() ogrer_paind6 =[ $paindr6, ogrer_paind7 ] {};
  792. void() ogrer_paind7 =[ $paindr7, ogrer_paind8 ] {};
  793. void() ogrer_paind8 =[ $paindr8, ogrer_paind9 ] {};
  794. void() ogrer_paind9 =[ $paindr9, ogrer_paind10 ] {};
  795. void() ogrer_paind10 =[ $paindr10, ogrer_paind11 ] {};
  796. void() ogrer_paind11 =[ $paindr11, ogrer_paind12 ] {};
  797. void() ogrer_paind12 =[ $paindr12, ogrer_paind13 ] {};
  798. void() ogrer_paind13 =[ $paindr13, ogrer_paind14 ] {};
  799. void() ogrer_paind14 =[ $paindr14, ogrer_paind15 ] {};
  800. void() ogrer_paind15 =[ $paindr15, ogrer_paind16 ] {};
  801. void() ogrer_paind16 =[ $paindr16, ogrer_run1 ] {};
  802.  
  803. // Rocket Pain E
  804. void() ogrer_paine1 =[ $painer1, ogrer_paine2 ] {};
  805. void() ogrer_paine2 =[ $painer2, ogrer_paine3 ] {ai_pain(10);};
  806. void() ogrer_paine3 =[ $painer3, ogrer_paine4 ] {ai_pain(9);};
  807. void() ogrer_paine4 =[ $painer4, ogrer_paine5 ] {ai_pain(4);};
  808. void() ogrer_paine5 =[ $painer5, ogrer_paine6 ] {};
  809. void() ogrer_paine6 =[ $painer6, ogrer_paine7 ] {};
  810. void() ogrer_paine7 =[ $painer7, ogrer_paine8 ] {};
  811. void() ogrer_paine8 =[ $painer8, ogrer_paine9 ] {};
  812. void() ogrer_paine9 =[ $painer9, ogrer_paine10 ] {};
  813. void() ogrer_paine10 =[ $painer10, ogrer_paine11 ] {};
  814. void() ogrer_paine11 =[ $painer11, ogrer_paine12 ] {};
  815. void() ogrer_paine12 =[ $painer12, ogrer_paine13 ] {};
  816. void() ogrer_paine13 =[ $painer13, ogrer_paine14 ] {};
  817. void() ogrer_paine14 =[ $painer14, ogrer_paine15 ] {};
  818. void() ogrer_paine15 =[ $painer15, ogrer_run1 ] {};
  819.  
  820. // Pain, All Ogres
  821.  
  822. void() ogre_pain_sound =
  823. {
  824. local float r;
  825. r = random();
  826.  
  827. if (r < 0.25)
  828. {
  829. sound (self, CHAN_VOICE, "ogre/ogpain1.wav", 1, ATTN_NORM);
  830. }
  831. else if (r < 0.5)
  832. {
  833. sound (self, CHAN_VOICE, "ogre/ogpain2.wav", 1, ATTN_NORM);
  834. }
  835. else if (r < 0.75)
  836. {
  837. sound (self, CHAN_VOICE, "ogre/ogpain3.wav", 1, ATTN_NORM);
  838. }
  839. else if (r < 0.88)
  840. {
  841. sound (self, CHAN_VOICE, "ogre/ogpain4.wav", 1, ATTN_NORM);
  842. }
  843. else
  844. {
  845. sound (self, CHAN_VOICE, "ogre/ogpain5.wav", 1, ATTN_NORM);
  846. }
  847. };
  848.  
  849. void(entity attacker, float damage) ogre_pain =
  850. {
  851. local float r;
  852. r = random();
  853.  
  854. // Don't go into a pain loop too frequently
  855. if (self.pain_finished > time)
  856. return;
  857.  
  858. // drowning?
  859. if (self.h2olevel >= 3)
  860. {
  861. DeathBubbles (1);
  862. sound (self, CHAN_VOICE, "player/drown1.wav", 1, ATTN_NORM); // FIXME
  863. // no pain anim
  864. return;
  865. }
  866.  
  867. //play a random pain sound
  868. ogre_pain_sound();
  869.  
  870. // What Type of Ogre is it?
  871. if (self.spawnflags & BERSERK_OGRE) // notice they're resistant and only have a single short pain loop
  872. {
  873. // sound (self, CHAN_VOICE, "ogre/ogpain1.wav", 1, ATTN_NORM);
  874. ogreb_pain1 ();
  875. self.pain_finished = time + 1;
  876. return;
  877. }
  878. else if (self.spawnflags & ROCKET_OGRE)
  879. {
  880. if (r < 0.25)
  881. {
  882. //sound (self, CHAN_VOICE, "ogre/ogpain1.wav", 1, ATTN_NORM);
  883. ogrer_pain1 ();
  884. self.pain_finished = time + 1;
  885. }
  886. else if (r < 0.5)
  887. {
  888. //sound (self, CHAN_VOICE, "ogre/ogpain2.wav", 1, ATTN_NORM);
  889. ogrer_painb1 ();
  890. self.pain_finished = time + 1;
  891. }
  892. else if (r < 0.75)
  893. {
  894. //sound (self, CHAN_VOICE, "ogre/ogpain3.wav", 1, ATTN_NORM);
  895. ogrer_painc1 ();
  896. self.pain_finished = time + 1;
  897. }
  898. else if (r < 0.88)
  899. {
  900. //sound (self, CHAN_VOICE, "ogre/ogpain4.wav", 1, ATTN_NORM);
  901. ogrer_paind1 ();
  902. self.pain_finished = time + 2;
  903. }
  904. else
  905. {
  906. //sound (self, CHAN_VOICE, "ogre/ogpain5.wav", 1, ATTN_NORM);
  907. ogrer_paine1 ();
  908. self.pain_finished = time + 2;
  909. }
  910. }
  911. else // Grenade or Nail Ogre
  912. {
  913. if (r < 0.25)
  914. {
  915. //sound (self, CHAN_VOICE, "ogre/ogpain1.wav", 1, ATTN_NORM);
  916. ogre_pain1 ();
  917. self.pain_finished = time + 1;
  918. }
  919. else if (r < 0.5)
  920. {
  921. //sound (self, CHAN_VOICE, "ogre/ogpain2.wav", 1, ATTN_NORM);
  922. ogre_painb1 ();
  923. self.pain_finished = time + 1;
  924. }
  925. else if (r < 0.75)
  926. {
  927. //sound (self, CHAN_VOICE, "ogre/ogpain3.wav", 1, ATTN_NORM);
  928. ogre_painc1 ();
  929. self.pain_finished = time + 1;
  930. }
  931. else if (r < 0.88)
  932. {
  933. //sound (self, CHAN_VOICE, "ogre/ogpain4.wav", 1, ATTN_NORM);
  934. ogre_paind1 ();
  935. self.pain_finished = time + 2;
  936. }
  937. else
  938. {
  939. //sound (self, CHAN_VOICE, "ogre/ogpain5.wav", 1, ATTN_NORM);
  940. ogre_paine1 ();
  941. self.pain_finished = time + 2;
  942. }
  943. }
  944. };
  945.  
  946. // Normal Death
  947.  
  948. void() ogre_die1 =[ $death1, ogre_die2 ] {};
  949. void() ogre_die2 =[ $death2, ogre_die3 ] {};
  950. void() ogre_die3 =[ $death3, ogre_die4 ]
  951. {self.solid = SOLID_NOT;DeathDrop();};
  952. void() ogre_die4 =[ $death4, ogre_die5 ] {};
  953. void() ogre_die5 =[ $death5, ogre_die6 ] {};
  954. void() ogre_die6 =[ $death6, ogre_die7 ] {};
  955. void() ogre_die7 =[ $death7, ogre_die8 ] {};
  956. void() ogre_die8 =[ $death8, ogre_die9 ] {};
  957. void() ogre_die9 =[ $death9, ogre_die10 ] {};
  958. void() ogre_die10 =[ $death10, ogre_die11 ] {};
  959. void() ogre_die11 =[ $death11, ogre_die12 ] {};
  960. void() ogre_die12 =[ $death12, ogre_die13 ] {};
  961. void() ogre_die13 =[ $death13, ogre_die14 ] {};
  962. void() ogre_die14 =[ $death14, ogre_die14 ] {CorpseThink();};
  963.  
  964. // Normal Death V2
  965.  
  966. void() ogre_bdie1 =[ $bdeath1, ogre_bdie2 ] {};
  967. void() ogre_bdie2 =[ $bdeath2, ogre_bdie3 ] {ai_forward(5);};
  968. void() ogre_bdie3 =[ $bdeath3, ogre_bdie4 ]
  969. {self.solid = SOLID_NOT;DeathDrop();};
  970. void() ogre_bdie4 =[ $bdeath4, ogre_bdie5 ] {ai_forward(1);};
  971. void() ogre_bdie5 =[ $bdeath5, ogre_bdie6 ] {ai_forward(3);};
  972. void() ogre_bdie6 =[ $bdeath6, ogre_bdie7 ] {ai_forward(7);};
  973. void() ogre_bdie7 =[ $bdeath7, ogre_bdie8 ] {ai_forward(25);};
  974. void() ogre_bdie8 =[ $bdeath8, ogre_bdie9 ] {};
  975. void() ogre_bdie9 =[ $bdeath9, ogre_bdie10 ] {};
  976. void() ogre_bdie10 =[ $bdeath10, ogre_bdie10 ] {CorpseThink();};
  977.  
  978. // Berserk Death (Chainsaw Flip)
  979.  
  980. void() ogreb_die1 =[ $ogbdeath1, ogreb_die2 ] {};
  981. void() ogreb_die2 =[ $ogbdeath2, ogreb_die3 ] {};
  982. void() ogreb_die3 =[ $ogbdeath3, ogreb_die4 ] {self.solid = SOLID_NOT;};
  983. void() ogreb_die4 =[ $ogbdeath4, ogreb_die5 ] {};
  984. void() ogreb_die5 =[ $ogbdeath5, ogreb_die6 ] {};
  985. void() ogreb_die6 =[ $ogbdeath6, ogreb_die7 ] {};
  986. void() ogreb_die7 =[ $ogbdeath7, ogreb_die8 ] {};
  987. void() ogreb_die8 =[ $ogbdeath8, ogreb_die9 ] {};
  988. void() ogreb_die9 =[ $ogbdeath9, ogreb_die10 ] {};
  989. void() ogreb_die10 =[ $ogbdeath10, ogreb_die11 ] {};
  990. void() ogreb_die11 =[ $ogbdeath11, ogreb_die12 ] {};
  991. void() ogreb_die12 =[ $ogbdeath12, ogreb_die13 ] {};
  992. void() ogreb_die13 =[ $ogbdeath13, ogreb_die14 ] {};
  993. void() ogreb_die14 =[ $ogbdeath14, ogreb_die15 ] {};
  994. void() ogreb_die15 =[ $ogbdeath15, ogreb_die16 ] {};
  995. void() ogreb_die16 =[ $ogbdeath16, ogreb_die17 ] {
  996. sound (self, CHAN_WEAPON, "ogre/ogsawatk.wav", 1, ATTN_NORM);
  997. SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);};
  998. void() ogreb_die17 =[ $ogbdeath17, ogreb_die18 ] {SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);};
  999. void() ogreb_die18 =[ $ogbdeath18, ogreb_die19 ] {SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);};
  1000. void() ogreb_die19 =[ $ogbdeath19, ogreb_die20 ] {};
  1001. void() ogreb_die20 =[ $ogbdeath20, ogreb_die21 ] {};
  1002. void() ogreb_die21 =[ $ogbdeath21, ogreb_die21 ] {CorpseThink();};
  1003.  
  1004. // Berserk Death V2
  1005.  
  1006. void() ogreb_bdie1 =[ $ogbbdeath1, ogreb_bdie2 ] {};
  1007. void() ogreb_bdie2 =[ $ogbbdeath2, ogreb_bdie3 ] {};
  1008. void() ogreb_bdie3 =[ $ogbbdeath3, ogreb_bdie4 ] {self.solid = SOLID_NOT;};
  1009. void() ogreb_bdie4 =[ $ogbbdeath4, ogreb_bdie5 ] {};
  1010. void() ogreb_bdie5 =[ $ogbbdeath5, ogreb_bdie6 ] {};
  1011. void() ogreb_bdie6 =[ $ogbbdeath6, ogreb_bdie7 ] {};
  1012. void() ogreb_bdie7 =[ $ogbbdeath7, ogreb_bdie8 ] {};
  1013. void() ogreb_bdie8 =[ $ogbbdeath8, ogreb_bdie9 ] {};
  1014. void() ogreb_bdie9 =[ $ogbbdeath9, ogreb_bdie10 ] {};
  1015. void() ogreb_bdie10 =[ $ogbbdeath10, ogreb_bdie10 ] {CorpseThink();};
  1016.  
  1017. // Berserk Death V3
  1018.  
  1019. void() ogreb_cdie1 =[ $ogbcdeath1, ogreb_cdie2 ] {};
  1020. void() ogreb_cdie2 =[ $ogbcdeath2, ogreb_cdie3 ] {};
  1021. void() ogreb_cdie3 =[ $ogbcdeath3, ogreb_cdie4 ] {self.solid = SOLID_NOT;};
  1022. void() ogreb_cdie4 =[ $ogbcdeath4, ogreb_cdie5 ] {};
  1023. void() ogreb_cdie5 =[ $ogbcdeath5, ogreb_cdie6 ] {};
  1024. void() ogreb_cdie6 =[ $ogbcdeath6, ogreb_cdie7 ] {};
  1025. void() ogreb_cdie7 =[ $ogbcdeath7, ogreb_cdie8 ] {};
  1026. void() ogreb_cdie8 =[ $ogbcdeath8, ogreb_cdie9 ] {};
  1027. void() ogreb_cdie9 =[ $ogbcdeath9, ogreb_cdie10 ] {};
  1028. void() ogreb_cdie10 =[ $ogbcdeath10, ogreb_cdie11 ] {};
  1029. void() ogreb_cdie11 =[ $ogbcdeath11, ogreb_cdie12 ] {};
  1030. void() ogreb_cdie12 =[ $ogbcdeath12, ogreb_cdie13 ] {};
  1031. void() ogreb_cdie13 =[ $ogbcdeath13, ogreb_cdie14 ] {};
  1032. void() ogreb_cdie14 =[ $ogbcdeath14, ogreb_cdie14 ] {CorpseThink();};
  1033.  
  1034. // Rocket Death
  1035.  
  1036. void() ogrer_die1 =[ $deathr1, ogrer_die2 ] {};
  1037. void() ogrer_die2 =[ $deathr2, ogrer_die3 ] {};
  1038. void() ogrer_die3 =[ $deathr3, ogrer_die4 ]
  1039. {self.solid = SOLID_NOT;DeathDrop();};
  1040. void() ogrer_die4 =[ $deathr4, ogrer_die5 ] {};
  1041. void() ogrer_die5 =[ $deathr5, ogrer_die6 ] {};
  1042. void() ogrer_die6 =[ $deathr6, ogrer_die7 ] {};
  1043. void() ogrer_die7 =[ $deathr7, ogrer_die8 ] {};
  1044. void() ogrer_die8 =[ $deathr8, ogrer_die9 ] {};
  1045. void() ogrer_die9 =[ $deathr9, ogrer_die10 ] {};
  1046. void() ogrer_die10 =[ $deathr10, ogrer_die11 ] {};
  1047. void() ogrer_die11 =[ $deathr11, ogrer_die12 ] {};
  1048. void() ogrer_die12 =[ $deathr12, ogrer_die13 ] {};
  1049. void() ogrer_die13 =[ $deathr13, ogrer_die14 ] {};
  1050. void() ogrer_die14 =[ $deathr14, ogrer_die14 ] {CorpseThink();};
  1051.  
  1052. // Rocket Death V2
  1053.  
  1054. void() ogrer_bdie1 =[ $bdeathr1, ogrer_bdie2 ] {};
  1055. void() ogrer_bdie2 =[ $bdeathr2, ogrer_bdie3 ] {ai_forward(5);};
  1056. void() ogrer_bdie3 =[ $bdeathr3, ogrer_bdie4 ] {self.solid = SOLID_NOT; DeathDrop();};
  1057. void() ogrer_bdie4 =[ $bdeathr4, ogrer_bdie5 ] {ai_forward(1);};
  1058. void() ogrer_bdie5 =[ $bdeathr5, ogrer_bdie6 ] {ai_forward(3);};
  1059. void() ogrer_bdie6 =[ $bdeathr6, ogrer_bdie7 ] {ai_forward(7);};
  1060. void() ogrer_bdie7 =[ $bdeathr7, ogrer_bdie8 ] {ai_forward(25);};
  1061. void() ogrer_bdie8 =[ $bdeathr8, ogrer_bdie9 ] {};
  1062. void() ogrer_bdie9 =[ $bdeathr9, ogrer_bdie10 ] {};
  1063. void() ogrer_bdie10 =[ $bdeathr10, ogrer_bdie10 ] {CorpseThink();};
  1064.  
  1065. // Ogre Die (All Versions)
  1066.  
  1067. void() ogre_death_sound =
  1068. {
  1069. local float r;
  1070. r = random();
  1071.  
  1072. if (r < 0.5)
  1073. {
  1074. sound (self, CHAN_VOICE, "ogre/ogdth1.wav", 1, ATTN_NORM);
  1075. }
  1076. else
  1077. {
  1078. sound (self, CHAN_VOICE, "ogre/ogdth2.wav", 1, ATTN_NORM);
  1079. }
  1080. };
  1081.  
  1082. void() ogre_die =
  1083. {
  1084. local float r;
  1085. //local float GibCount;
  1086. //local float LegCount;
  1087. //local float ArmCount;
  1088. //local float FootCount;
  1089. //GibCount = 0;
  1090. //LegCount = 0;
  1091. //ArmCount = 0;
  1092. //FootCount = 0;
  1093. r = random();
  1094.  
  1095. // gb, kill chainsaw loop
  1096. sound (self, CHAN_BODY, "misc/null.wav", 1, ATTN_NORM);
  1097.  
  1098. // Drowning?
  1099. if (self.h2olevel >= 3)
  1100. {
  1101. DeathBubbles (4);
  1102. sound (self, CHAN_VOICE, "ogre/ogdrown1.wav", 1, ATTN_NORM); //FIXME
  1103.  
  1104. if (self.spawnflags & BERSERK_OGRE)
  1105. ogreb_die1();
  1106. else
  1107. ogre_die1();
  1108.  
  1109. return;
  1110. }
  1111.  
  1112. // Gib?
  1113. if (self.health < -80)
  1114. {
  1115. sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  1116. ThrowHead ("progs/gib_ogre1.mdl", self.health, 3);
  1117. ThrowGib ("progs/gib_ogre2.mdl", self.health);
  1118. ThrowGib ("progs/gib_ogre3.mdl", self.health);
  1119. ThrowGib ("progs/gib_ogre4.mdl", self.health);
  1120. ThrowGib ("progs/gib_ogre5.mdl", self.health);
  1121.  
  1122. ThrowBlood (self.health*2); //ijed Blood vfx
  1123. ThrowBlood (self.health*2); //ijed Blood vfx
  1124. ThrowBlood (self.health*3); //ijed Blood vfx
  1125. return;
  1126. }
  1127. /* ThrowGibs (self.health); // Supa, special cauteriser gib effect
  1128. ThrowGib ("progs/gib_ogre2.mdl", self.health);
  1129. ThrowGib ("progs/gib_ogre3.mdl", self.health);
  1130. ThrowGib ("progs/gib_ogre4.mdl", self.health);
  1131.  
  1132. ijed: Uh yeah, this was crap :P
  1133.  
  1134. do //ijed Chucks body parts
  1135. {
  1136. if ((random() < 0.33) && ArmCount < 2) //count the limbs
  1137. {
  1138. ThrowGib ("progs/gib_ogre2.mdl", self.health); // arm
  1139. ArmCount = ArmCount + 1;
  1140. }
  1141. else if ((random() > 0.66) && (LegCount < 2))
  1142. {
  1143. ThrowGib ("progs/gib_ogre3.mdl", self.health); // leg
  1144. LegCount = LegCount + 1;
  1145. }
  1146. else if (FootCount < 2)
  1147. {
  1148. ThrowGib ("progs/gib_ogre4.mdl", self.health); // foot
  1149. FootCount = FootCount + 1;
  1150. }
  1151. else
  1152. {
  1153. ThrowGib ("progs/vomitus_gib.mdl", self.health); // generic meat from vomitus
  1154. }
  1155. ThrowBlood (self.health*2); //ijed Blood vfx
  1156. ThrowBlood (self.health*3); //ijed Blood vfx
  1157. GibCount = GibCount + 1;
  1158. } while (GibCount < 4);
  1159. return;
  1160. }*/
  1161.  
  1162. // What type of Ogre is dying?
  1163. if (self.spawnflags & BERSERK_OGRE)
  1164. {
  1165. ogre_death_sound ();
  1166.  
  1167. if (r < 0.2)
  1168. ogreb_die1 ();
  1169. else if (r < 0.6)
  1170. ogreb_bdie1 ();
  1171. else
  1172. ogreb_cdie1 ();
  1173.  
  1174. return;
  1175. }
  1176. else if (self.spawnflags & ROCKET_OGRE)
  1177. {
  1178. ogre_death_sound ();
  1179.  
  1180. if (r < 0.5)
  1181. ogrer_die1 ();
  1182. else
  1183. ogrer_bdie1 ();
  1184.  
  1185. return;
  1186. }
  1187. else // Grenadier / Nail (pending)
  1188. {
  1189. ogre_death_sound ();
  1190.  
  1191. if (r < 0.5)
  1192. ogre_die1 ();
  1193. else
  1194. ogre_bdie1 ();
  1195. }
  1196. };
  1197.  
  1198. // Ogre Melee -> All Versions
  1199. void() ogre_melee =
  1200. {
  1201. local float r;
  1202. r = random();
  1203.  
  1204. if (self.spawnflags & BERSERK_OGRE)
  1205. {
  1206. if (r > 0.5)
  1207. ogreb_smash1 ();
  1208. else
  1209. ogreb_swing1 ();
  1210. }
  1211. else if (self.spawnflags & ROCKET_OGRE)
  1212. {
  1213. ogre_bayonet1 ();
  1214. }
  1215. else
  1216. {
  1217. if (r > 0.5)
  1218. ogre_smash1 ();
  1219. else
  1220. ogre_swing1 ();
  1221. }
  1222. };
  1223.  
  1224. // Supa, ijed -> Ogre taunt behavior
  1225.  
  1226. void() ogre_taunt_sound =
  1227. {
  1228. local float r;
  1229. r = random();
  1230.  
  1231. if (r > 0.5)
  1232. sound (self, CHAN_VOICE, "ogre/ogtaunt2.wav", 1, ATTN_NORM);
  1233. else
  1234. sound (self, CHAN_VOICE, "ogre/ogtaunt3.wav", 1, ATTN_NORM);
  1235. };
  1236.  
  1237. void() ogre_dance;
  1238.  
  1239. void() ogre_taunt1 =[ $pain1, ogre_taunt2 ] {};
  1240. void() ogre_taunt2 =[ $pain2, ogre_taunt3 ] {};
  1241. void() ogre_taunt3 =[ $pain3, ogre_taunt4 ] {};
  1242. void() ogre_taunt4 =[ $pain4, ogre_taunt5 ] {};
  1243. void() ogre_taunt5 =[ $pain5, ogre_dance ] {};
  1244.  
  1245. void() ogre_tauntb1 =[ $painb1, ogre_tauntb2 ] {};
  1246. void() ogre_tauntb2 =[ $painb2, ogre_tauntb3 ] {};
  1247. void() ogre_tauntb3 =[ $painb3, ogre_dance ] {};
  1248.  
  1249. void() ogre_tauntc1 =[ $painc1, ogre_tauntc2 ] {};
  1250. void() ogre_tauntc2 =[ $painc2, ogre_tauntc3 ] {};
  1251. void() ogre_tauntc3 =[ $painc3, ogre_tauntc4 ] {};
  1252. void() ogre_tauntc4 =[ $painc4, ogre_tauntc5 ] {};
  1253. void() ogre_tauntc5 =[ $painc5, ogre_tauntc6 ] {};
  1254. void() ogre_tauntc6 =[ $painc6, ogre_dance ] {};
  1255.  
  1256. void() ogre_tauntd1 =[ $paind1, ogre_tauntd2 ] {};
  1257. void() ogre_tauntd2 =[ $paind2, ogre_tauntd3 ] {};
  1258. void() ogre_tauntd3 =[ $paind3, ogre_tauntd4 ] {};
  1259. void() ogre_tauntd4 =[ $paind4, ogre_tauntd5 ] {};
  1260. void() ogre_tauntd5 =[ $paind5, ogre_tauntd6 ] {};
  1261. void() ogre_tauntd6 =[ $paind6, ogre_tauntd7 ] {};
  1262. void() ogre_tauntd7 =[ $paind7, ogre_tauntd8 ] {};
  1263. void() ogre_tauntd8 =[ $paind8, ogre_tauntd9 ] {};
  1264. void() ogre_tauntd9 =[ $paind9, ogre_tauntd10 ] {};
  1265. void() ogre_tauntd10 =[ $paind10, ogre_tauntd11 ] {};
  1266. void() ogre_tauntd11 =[ $paind11, ogre_tauntd12 ] {};
  1267. void() ogre_tauntd12 =[ $paind12, ogre_tauntd13 ] {};
  1268. void() ogre_tauntd13 =[ $paind13, ogre_tauntd14 ] {};
  1269. void() ogre_tauntd14 =[ $paind14, ogre_tauntd15 ] {};
  1270. void() ogre_tauntd15 =[ $paind15, ogre_tauntd16 ] {};
  1271. void() ogre_tauntd16 =[ $paind16, ogre_dance ] {};
  1272.  
  1273. void() ogre_taunte1 =[ $paine1, ogre_taunte2 ] {};
  1274. void() ogre_taunte2 =[ $paine2, ogre_taunte3 ] {};
  1275. void() ogre_taunte3 =[ $paine3, ogre_taunte4 ] {};
  1276. void() ogre_taunte4 =[ $paine4, ogre_taunte5 ] {};
  1277. void() ogre_taunte5 =[ $paine5, ogre_taunte6 ] {};
  1278. void() ogre_taunte6 =[ $paine6, ogre_taunte7 ] {};
  1279. void() ogre_taunte7 =[ $paine7, ogre_taunte8 ] {};
  1280. void() ogre_taunte8 =[ $paine8, ogre_taunte9 ] {};
  1281. void() ogre_taunte9 =[ $paine9, ogre_taunte10 ] {};
  1282. void() ogre_taunte10 =[ $paine10, ogre_taunte11 ] {};
  1283. void() ogre_taunte11 =[ $paine11, ogre_taunte12 ] {};
  1284. void() ogre_taunte12 =[ $paine12, ogre_taunte13 ] {};
  1285. void() ogre_taunte13 =[ $paine13, ogre_taunte14 ] {};
  1286. void() ogre_taunte14 =[ $paine14, ogre_taunte15 ] {};
  1287. void() ogre_taunte15 =[ $paine15, ogre_dance ] {};
  1288.  
  1289. //return to previous thinkage
  1290. void() ogre_stoptaunt =
  1291. {
  1292. if (self.movetarget) self.th_walk();
  1293. else self.th_stand();
  1294. };
  1295.  
  1296. void() ogre_dance = // dance! dance for me, puppet!
  1297. {
  1298. local float r;
  1299.  
  1300. if (self.cnt > 3) // only dance a bit before looking for hostiles again // okay, stop dancing and get back to work
  1301. {
  1302. ogre_stoptaunt ();
  1303. return;
  1304. }
  1305.  
  1306. self.cnt = self.cnt + 1;
  1307.  
  1308. SightSound();
  1309.  
  1310. r = random();
  1311.  
  1312. if (r < 0.25 ) ogre_taunt1();
  1313. else if (r < 0.5 ) ogre_tauntb1();
  1314. else if (r < 0.75 ) ogre_tauntc1();
  1315. else if (r < 0.88 ) ogre_tauntd1();
  1316. else ogre_taunte1();
  1317. };
  1318.  
  1319. //Ogreb Taunting
  1320. void ogreb_taunt1();
  1321.  
  1322. void() ogreb_dance = // dance! dance for me, puppet!
  1323. {
  1324. if (self.cnt > 2) // only dance a bit before looking for hostiles again
  1325. {
  1326. ogre_stoptaunt (); //okay, stop dancing and get back to work
  1327. return;
  1328. }
  1329.  
  1330. self.cnt = self.cnt + 1;
  1331. ogreb_taunt1 ();
  1332. };
  1333.  
  1334. void() ogreb_taunt1 =[ $ogbtaunt1, ogreb_taunt2 ] {};
  1335. void() ogreb_taunt2 =[ $ogbtaunt2, ogreb_taunt3 ] {};
  1336. void() ogreb_taunt3 =[ $ogbtaunt3, ogreb_dance ] {};
  1337.  
  1338. void(entity deadplayer) ogreb_taunt =
  1339. {
  1340. ogre_taunt_sound();
  1341.  
  1342. if (!coop)
  1343. {
  1344. self.enemy = deadplayer; // needed to prevent the ogre from doing anything else
  1345. ogreb_taunt1();
  1346. }
  1347. };
  1348.  
  1349. void(entity deadplayer) ogre_taunt =
  1350. {
  1351. // FIXME: TEMPORARY PLACEHOLDER BEHAVIOR
  1352. ogre_taunt_sound();
  1353. if (!coop)
  1354. {
  1355. self.enemy = deadplayer; // needed to prevent the ogre from doing anything else
  1356. ogre_taunt1();
  1357. }
  1358. };
  1359. // Supa, Ogre taunt behavior end
  1360.  
  1361. //ijed Chooses attack type depending on weapon
  1362. void() ogre_chooseattack =
  1363. {
  1364. if (self.spawnflags & NAIL_OGRE) //ijed Chooses attack type
  1365. ogre_nail1();
  1366. else if (self.spawnflags & ROCKET_OGRE)
  1367. ogre_rocket1();
  1368. else
  1369. ogre_grenade1();
  1370. };
  1371.  
  1372. void() monster_ogre_go =
  1373. {
  1374. self.solid = SOLID_SLIDEBOX;
  1375. self.movetype = MOVETYPE_STEP;
  1376.  
  1377. //Which mesh to use
  1378. if (self.spawnflags & BERSERK_OGRE)
  1379. setmodel (self, "progs/ogreb.mdl");
  1380. else if (self.spawnflags & ROCKET_OGRE)
  1381. setmodel (self, "progs/ogrer.mdl");
  1382. else
  1383. setmodel (self, "progs/ogre.mdl");
  1384.  
  1385. setsize (self, VEC_HULL_MIN, VEC_HULL_MAX); // gb, idea by Lardarse
  1386. // setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX); // FIXME - custom bbox
  1387.  
  1388. self.health = MonsterHealth(200);
  1389.  
  1390. //What to think
  1391. if (self.spawnflags & BERSERK_OGRE)
  1392. {
  1393. self.th_stand = ogreb_stand1;
  1394. self.th_walk = ogreb_walk1;
  1395. self.th_run = ogreb_run1;
  1396. self.th_taunt = ogreb_taunt;
  1397. }
  1398. else if (self.spawnflags & ROCKET_OGRE)
  1399. {
  1400. self.th_stand = ogrer_stand1;
  1401. self.th_walk = ogrer_walk1;
  1402. self.th_run = ogrer_run1;
  1403. self.th_missile = ogre_chooseattack;
  1404. self.th_taunt = ogre_taunt;
  1405. }
  1406. else //grenade and nails
  1407. {
  1408. self.th_stand = ogre_stand1;
  1409. self.th_walk = ogre_walk1;
  1410. self.th_run = ogre_run1;
  1411. self.th_missile = ogre_chooseattack;
  1412. self.th_taunt = ogre_taunt;
  1413. }
  1414.  
  1415. self.th_die = ogre_die;
  1416. self.th_melee = ogre_melee;
  1417. self.th_pain = ogre_pain;
  1418. self.th_submerged = SUB_Null;
  1419.  
  1420. self.always_infight = TRUE;
  1421.  
  1422. if (!self.noroam)
  1423. self.should_roam = TRUE;
  1424.  
  1425. Gyro_Object_Activate (self, 90000);
  1426.  
  1427. walkmonster_start();
  1428. };
  1429.  
  1430. /*QUAKED monster_ogre (1 0 0) (-32 -32 -24) (32 32 64) Ambush
  1431. */
  1432. void() monster_ogre =
  1433. {
  1434. if (deathmatch)
  1435. {
  1436. remove(self);
  1437. return;
  1438. }
  1439.  
  1440. legacy_checkfortweaks(); // gb
  1441.  
  1442. // Supa, precache all versions anyway in case of a savegame load, otherwise we may run into cases where the qcvm loads
  1443. // different models in a different order than what the savegame had, which can cause nice modelindex mismatches
  1444.  
  1445. //what to precache
  1446. // if (self.spawnflags & BERSERK_OGRE)
  1447. // {
  1448. precache_model ("progs/ogreb.mdl");
  1449. precache_sound ("ogre/ogbsawatk.wav");
  1450. // }
  1451. // else if (self.spawnflags & NAIL_OGRE)
  1452. // {
  1453. precache_model ("progs/ogre.mdl"); // FIXME differentiate between grenade and nail ogre
  1454. precache_sound ("ogre/flak.wav");
  1455. precache_sound ("ogre/ogsawatk.wav");
  1456. // }
  1457. // else if (self.spawnflags & ROCKET_OGRE)
  1458. // {
  1459. precache_model ("progs/ogrer.mdl");
  1460. precache_model ("progs/missile.mdl");
  1461. precache_sound ("ogre/orocket.wav");
  1462. precache_sound ("ogre/orockex.wav");
  1463. precache_sound ("ogre/ogsawatk.wav");
  1464. // }
  1465. // else //Grenadier
  1466. // {
  1467. precache_model ("progs/ogre.mdl");
  1468. precache_model ("progs/grenade.mdl"); // is this even needed? No, but ask Carmack :P
  1469. precache_sound ("ogre/ogsawatk.wav");
  1470. // }
  1471.  
  1472. //precache_model ("progs/h_ogre.mdl"); //And it's outta here
  1473. precache_model ("progs/gib_ogre1.mdl");
  1474. precache_model ("progs/gib_ogre2.mdl");
  1475. precache_model ("progs/gib_ogre3.mdl");
  1476. precache_model ("progs/gib_ogre4.mdl");
  1477. precache_model ("progs/gib_ogre5.mdl");
  1478.  
  1479. precache_sound ("ogre/ogdrag.wav");
  1480. precache_sound ("ogre/ogdth1.wav");
  1481. precache_sound ("ogre/ogdth2.wav");
  1482.  
  1483. //Taunt Sounds
  1484. precache_sound ("ogre/ogtaunt2.wav");
  1485. precache_sound ("ogre/ogtaunt3.wav");
  1486.  
  1487. precache_sound ("ogre/ogdrown1.wav");
  1488.  
  1489. precache_sound ("ogre/ogidle1.wav");
  1490. precache_sound ("ogre/ogidle2.wav");
  1491.  
  1492. precache_sound ("ogre/ogpain1.wav");
  1493. precache_sound ("ogre/ogpain2.wav");
  1494. precache_sound ("ogre/ogpain3.wav");
  1495. precache_sound ("ogre/ogpain4.wav");
  1496. precache_sound ("ogre/ogpain5.wav");
  1497.  
  1498. // footsteps, gb
  1499. precache_sound ("ogre/ogstep1.wav");
  1500. precache_sound ("ogre/ogstep2.wav");
  1501. precache_sound ("ogre/ogstep3.wav");
  1502. precache_sound ("ogre/ogstep4.wav");
  1503. precache_sound ("ogre/ogstep5.wav");
  1504. precache_sound ("ogre/ogstep6.wav");
  1505. precache_sound ("ogre/ogstep7.wav");
  1506. precache_sound ("ogre/ogstep8.wav");
  1507.  
  1508. precache_sound ("ogre/ogtalk1.wav");
  1509. precache_sound ("ogre/ogtalk2.wav");
  1510. precache_sound ("ogre/ogtalk3.wav");
  1511. precache_sound ("ogre/ogtalk4.wav");
  1512.  
  1513. precache_sound ("ogre/ogwake.wav");
  1514. precache_sound ("ogre/ogwake2.wav");
  1515.  
  1516. precache_sound ("ogre/ogsawloop.wav");
  1517.  
  1518. self.go = monster_ogre_go;
  1519. if(!CheckGroup()) self.go();
  1520. };
  1521.  
  1522. //ijed Ok, nailgunners run but grenadiers stand and shoot, lets see how the playtest works out. As a note, the marksman is still
  1523. //in, but his only difference is that he doesn't shout when seeing the player - he's still there to not break older maps.
  1524. //If anyone has an idea for a use for him, lets see about implementing it.
  1525.  
  1526. void() monster_ogre_marksman =
  1527. {
  1528. monster_ogre ();
  1529. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement