Advertisement
Guest User

Untitled

a guest
May 9th, 2021
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.92 KB | None | 0 0
  1. /*==============================================================================
  2. GAUNT (Originally from Quoth - Kell/Necros/Preach)
  3. - Big thank you to necros for the his code base for this monster
  4. ==============================================================================*/
  5. // (000) Perched on a ledge (idling)
  6. $frame perch1 perch2 perch3 perch4 perch5 perch6 perch7 perch8
  7. $frame perch9 perch10 perch11 perch12 perch13 perch14 perch15 perch16
  8.  
  9. // (016) Lift off from perch position
  10. $frame launch1 launch2 launch3 launch4 launch5 launch6 launch7 launch8
  11.  
  12. // (024) Idling in mid air
  13. $frame hover1 hover2 hover3 hover4 hover5 hover6 hover7 hover8
  14. $frame hover9 hover10 hover11 hover12 hover13 hover14 hover15 hover16
  15. $frame hover17 hover18 hover19 hover20
  16.  
  17. // (044) range attack (lightning/plasma)
  18. $frame attack1 attack2 attack3 attack4 attack5 attack6 attack7 attack8
  19. $frame attack9 attack10 attack11 attack12 attack13 attack14 attack15 attack16
  20. $frame attack17 attack18 attack19 attack20
  21.  
  22. // (064) Start of dive attack
  23. $frame swoopStart1 swoopStart2 swoopStart3 swoopStart4
  24. $frame swoopStart5 swoopStart6 swoopStart7 swoopStart8
  25.  
  26. // (072) Looped version of dive attack
  27. $frame swoop1 swoop2 swoop3 swoop4 swoop5
  28.  
  29. // (077) Something, not sure what
  30. $frame drop1 drop2 drop3 drop4 drop5
  31.  
  32. // (082) Swing wing around infront
  33. $frame painA1 painA2 painA3 painA4 painA5 painA6
  34.  
  35. // (088) Knock head backward
  36. $frame painB1 painB2 painB3 painB4 painB5
  37.  
  38. // (093) Fall backwards
  39. $frame deathA1 deathA2 deathA3 deathA4 deathA5 deathA6 deathA7 deathA8
  40.  
  41. // (101) Fall forward
  42. $frame deathB1 deathB2 deathB3 deathB4 deathB5 deathB6 deathB7 deathB8
  43.  
  44. float MON_GAUNT_PERCH = 4; // Start in perched position
  45.  
  46. //----------------------------------------------------------------------
  47. void() gauntwings =
  48. { sound_misc (self, CHAN_ITEM, "gaunt/wings1.wav", 1, ATTN_IDLE); };
  49.  
  50. //============================================================================
  51. void() gaunt_idle1 = [ $hover1, gaunt_idle2 ]
  52. {
  53. if (random() < 0.2)
  54. {
  55. if (random() < 0.33)
  56. sound_idle (self, CHAN_VOICE, "gaunt/idle1.wav", 1, ATTN_IDLE);
  57. else if (random() > 0.66)
  58. sound_misc1 (self, CHAN_VOICE, "gaunt/idle2.wav", 1, ATTN_IDLE);
  59. else
  60. sound_misc2 (self, CHAN_VOICE, "gaunt/idle3.wav", 1, ATTN_IDLE);
  61. }
  62.  
  63. ai_stand();
  64. };
  65. void() gaunt_idle2 = [ $hover2, gaunt_idle3 ] {ai_stand();};
  66. void() gaunt_idle3 = [ $hover3, gaunt_idle4 ] {ai_stand();};
  67. void() gaunt_idle4 = [ $hover4, gaunt_idle5 ] {ai_stand();};
  68. void() gaunt_idle5 = [ $hover5, gaunt_idle6 ] {gauntwings();ai_stand();};
  69. void() gaunt_idle6 = [ $hover6, gaunt_idle7 ] {ai_stand();};
  70. void() gaunt_idle7 = [ $hover7, gaunt_idle8 ] {ai_stand();};
  71. void() gaunt_idle8 = [ $hover8, gaunt_idle9 ] {ai_stand();};
  72. void() gaunt_idle9 = [ $hover9, gaunt_idle10 ] {ai_stand();};
  73. void() gaunt_idle10 = [ $hover10, gaunt_idle11 ] {ai_stand();};
  74. void() gaunt_idle11 = [ $hover11, gaunt_idle12 ] {ai_stand();};
  75. void() gaunt_idle12 = [ $hover12, gaunt_idle13 ] {ai_stand();};
  76. void() gaunt_idle13 = [ $hover13, gaunt_idle14 ] {ai_stand();};
  77. void() gaunt_idle14 = [ $hover14, gaunt_idle15 ] {ai_stand();};
  78. void() gaunt_idle15 = [ $hover15, gaunt_idle16 ] {gauntwings();ai_stand();};
  79. void() gaunt_idle16 = [ $hover16, gaunt_idle17 ] {ai_stand();};
  80. void() gaunt_idle17 = [ $hover17, gaunt_idle18 ] {ai_stand();};
  81. void() gaunt_idle18 = [ $hover18, gaunt_idle19 ] {ai_stand();};
  82. void() gaunt_idle19 = [ $hover19, gaunt_idle20 ] {ai_stand();};
  83. void() gaunt_idle20 = [ $hover20, gaunt_idle1 ] {ai_stand();};
  84.  
  85. //============================================================================
  86. void() gaunt_walk1 = [ $hover1, gaunt_walk2 ]
  87. {
  88. if (random() < 0.2)
  89. {
  90. if (random() < 0.33)
  91. sound_idle (self, CHAN_VOICE, "gaunt/idle1.wav", 1, ATTN_IDLE);
  92. else if (random() > 0.66)
  93. sound_misc1 (self, CHAN_VOICE, "gaunt/idle2.wav", 1, ATTN_IDLE);
  94. else
  95. sound_misc2 (self, CHAN_VOICE, "gaunt/idle3.wav", 1, ATTN_IDLE);
  96. }
  97.  
  98. ai_walk(8 * (1 + self.speed_mod));
  99. };
  100. void() gaunt_walk2 = [ $hover2, gaunt_walk3 ] {ai_walk(8 * (1 + self.speed_mod));};
  101. void() gaunt_walk3 = [ $hover3, gaunt_walk4 ] {gauntwings();ai_walk(8 * (1 + self.speed_mod));};
  102. void() gaunt_walk4 = [ $hover4, gaunt_walk5 ] {ai_walk(8 * (1 + self.speed_mod));};
  103. void() gaunt_walk5 = [ $hover5, gaunt_walk6 ] {ai_walk(8 * (1 + self.speed_mod));};
  104. void() gaunt_walk6 = [ $hover6, gaunt_walk7 ] {ai_walk(8 * (1 + self.speed_mod));};
  105. void() gaunt_walk7 = [ $hover7, gaunt_walk8 ] {ai_walk(8 * (1 + self.speed_mod));};
  106. void() gaunt_walk8 = [ $hover8, gaunt_walk9 ] {ai_walk(8 * (1 + self.speed_mod));};
  107. void() gaunt_walk9 = [ $hover9, gaunt_walk10 ] {ai_walk(8 * (1 + self.speed_mod));};
  108. void() gaunt_walk10 = [ $hover10, gaunt_walk11 ] {ai_walk(8 * (1 + self.speed_mod));};
  109. void() gaunt_walk11 = [ $hover11, gaunt_walk12 ] {ai_walk(8 * (1 + self.speed_mod));};
  110. void() gaunt_walk12 = [ $hover12, gaunt_walk13 ] {ai_walk(8 * (1 + self.speed_mod));};
  111. void() gaunt_walk13 = [ $hover13, gaunt_walk14 ] {ai_walk(8 * (1 + self.speed_mod));};
  112. void() gaunt_walk14 = [ $hover14, gaunt_walk15 ] {ai_walk(8 * (1 + self.speed_mod));};
  113. void() gaunt_walk15 = [ $hover15, gaunt_walk16 ] {gauntwings();ai_walk(8 * (1 + self.speed_mod));};
  114. void() gaunt_walk16 = [ $hover16, gaunt_walk17 ] {ai_walk(8 * (1 + self.speed_mod));};
  115. void() gaunt_walk17 = [ $hover17, gaunt_walk18 ] {ai_walk(8 * (1 + self.speed_mod));};
  116. void() gaunt_walk18 = [ $hover18, gaunt_walk19 ] {ai_walk(8 * (1 + self.speed_mod));};
  117. void() gaunt_walk19 = [ $hover19, gaunt_walk20 ] {ai_walk(8 * (1 + self.speed_mod));};
  118. void() gaunt_walk20 = [ $hover20, gaunt_walk1 ] {ai_walk(8 * (1 + self.speed_mod));};
  119.  
  120. //============================================================================
  121. void() gaunt_run1 = [ $hover1, gaunt_run2 ]
  122. {
  123. self.yaw_speed = self.t_width; //reset turn speed
  124. if (random() < 0.2)
  125. {
  126. if (random() < 0.33)
  127. sound_idle (self, CHAN_VOICE, "gaunt/idle1.wav", 1, ATTN_IDLE);
  128. else if (random() > 0.66)
  129. sound_misc1 (self, CHAN_VOICE, "gaunt/idle2.wav", 1, ATTN_IDLE);
  130. else
  131. sound_misc2 (self, CHAN_VOICE, "gaunt/idle3.wav", 1, ATTN_IDLE);
  132. }
  133.  
  134. // Switch direction of strafing (random duration)
  135. if (self.count < time) {
  136. self.count = time + 4 + (random() + random() + random() * 4);
  137. self.lefty = rint(1 - self.lefty);
  138. }
  139. ai_run(8 * (1 + self.speed_mod));
  140. };
  141. void() gaunt_run2 = [ $hover2, gaunt_run3 ] {ai_run(8 * (1 + self.speed_mod));};
  142. void() gaunt_run3 = [ $hover3, gaunt_run4 ] {ai_run(8 * (1 + self.speed_mod));};
  143. void() gaunt_run4 = [ $hover4, gaunt_run5 ] {ai_run(8 * (1 + self.speed_mod));};
  144. void() gaunt_run5 = [ $hover5, gaunt_run6 ] {gauntwings();ai_run(8 * (1 + self.speed_mod));};
  145. void() gaunt_run6 = [ $hover6, gaunt_run7 ] {ai_run(8 * (1 + self.speed_mod));};
  146. void() gaunt_run7 = [ $hover7, gaunt_run8 ] {ai_run(8 * (1 + self.speed_mod));};
  147. void() gaunt_run8 = [ $hover8, gaunt_run9 ] {ai_run(8 * (1 + self.speed_mod));};
  148. void() gaunt_run9 = [ $hover9, gaunt_run10 ] {ai_run(8 * (1 + self.speed_mod));};
  149. void() gaunt_run10 = [ $hover10, gaunt_run11 ] {ai_run(8 * (1 + self.speed_mod));};
  150. void() gaunt_run11 = [ $hover11, gaunt_run12 ] {ai_run(8 * (1 + self.speed_mod));};
  151. void() gaunt_run12 = [ $hover12, gaunt_run13 ] {ai_run(8 * (1 + self.speed_mod));};
  152. void() gaunt_run13 = [ $hover13, gaunt_run14 ] {ai_run(8 * (1 + self.speed_mod));};
  153. void() gaunt_run14 = [ $hover14, gaunt_run15 ] {ai_run(8 * (1 + self.speed_mod));};
  154. void() gaunt_run15 = [ $hover15, gaunt_run16 ] {gauntwings();ai_run(8 * (1 + self.speed_mod));};
  155. void() gaunt_run16 = [ $hover16, gaunt_run17 ] {ai_run(8 * (1 + self.speed_mod));};
  156. void() gaunt_run17 = [ $hover17, gaunt_run18 ] {ai_run(8 * (1 + self.speed_mod));};
  157. void() gaunt_run18 = [ $hover18, gaunt_run19 ] {ai_run(8 * (1 + self.speed_mod));};
  158. void() gaunt_run19 = [ $hover19, gaunt_run20 ] {ai_run(8 * (1 + self.speed_mod));};
  159. void() gaunt_run20 = [ $hover20, gaunt_run1 ] {ai_run(8 * (1 + self.speed_mod));};
  160.  
  161. //----------------------------------------------------------------------
  162. void() gaunt_fire1 = [ $attack1, gaunt_fire2 ] {
  163. sound_attack (self, CHAN_WEAPON, "shambler/sattck1.wav", 1, ATTN_NORM);
  164. self.yaw_speed = 20;
  165. self.attack_finished = time + 2;
  166. };
  167. void() gaunt_fire2 = [ $attack2, gaunt_fire3 ] {ai_face();};
  168. void() gaunt_fire3 = [ $attack3, gaunt_fire4 ] {ai_face();};
  169. void() gaunt_fire4 = [ $attack4, gaunt_fire5 ] {ai_face();};
  170. void() gaunt_fire5 = [ $attack5, gaunt_fire6 ] {gauntwings(); ai_face();};
  171. void() gaunt_fire6 = [ $attack4, gaunt_fire7 ] {ai_face();};
  172. void() gaunt_fire7 = [ $attack6, gaunt_fire8 ] {ai_face();
  173. local entity o;
  174.  
  175. self.effects = self.effects | EF_MUZZLEFLASH;
  176. self.trigger_field = spawn();
  177.  
  178. o = self.trigger_field;
  179. setmodel (o, "progs/s_light.mdl");
  180. setorigin (o, self.origin);
  181. o.owner = self;
  182. o.angles = self.angles;
  183. o.nextthink = time + 0.7;
  184. o.think = sham_arc_think;
  185. };
  186. void() gaunt_fire8 = [ $attack7, gaunt_fire9 ] {
  187. self.effects = self.effects | EF_MUZZLEFLASH;
  188. self.trigger_field.frame = 1;
  189. };
  190. void() gaunt_fire9 = [ $attack8, gaunt_fire10 ] {
  191. self.effects = self.effects | EF_MUZZLEFLASH;
  192. self.trigger_field.frame = 2;
  193. };
  194. void() gaunt_fire10 = [ $attack9, gaunt_fire11 ] {
  195. remove (self.trigger_field);
  196. self.trigger_field = world;
  197. sound_hit (self, CHAN_WEAPON, "shambler/sboom.wav", 1, ATTN_NORM);
  198. CastLightning();
  199. };
  200. void() gaunt_fire11 = [ $attack10, gaunt_fire12 ] {CastLightning();};
  201. void() gaunt_fire12 = [ $attack11, gaunt_fire13 ] {
  202. if (skill == 3)
  203. CastLightning();
  204. };
  205. void() gaunt_fire13 = [ $attack12, gaunt_fire14 ] {self.yaw_speed = self.t_width;}; //reset turn speed
  206. void() gaunt_fire14 = [ $attack13, gaunt_fire15 ] {};
  207. void() gaunt_fire15 = [ $attack14, gaunt_fire16 ] {};
  208. void() gaunt_fire16 = [ $attack15, gaunt_fire17 ] {gauntwings();};
  209. void() gaunt_fire17 = [ $attack16, gaunt_fire18 ] {};
  210. void() gaunt_fire18 = [ $attack17, gaunt_fire19 ] {};
  211. void() gaunt_fire19 = [ $attack18, gaunt_fire20 ] {ai_face();};
  212. void() gaunt_fire20 = [ $attack19, gaunt_run1 ] {ai_face();};
  213.  
  214. //============================================================================
  215. // PERCH + WAKEUP
  216. //============================================================================
  217. void() gaunt_perch1 = [ $perch1, gaunt_perch2 ] {
  218. if (random() < 0.2)
  219. {
  220. if (random() < 0.33)
  221. sound_idle (self, CHAN_VOICE, "gaunt/idle1.wav", 1, ATTN_IDLE);
  222. else if (random() > 0.66)
  223. sound_misc1 (self, CHAN_VOICE, "gaunt/idle2.wav", 1, ATTN_IDLE);
  224. else
  225. sound_misc2 (self, CHAN_VOICE, "gaunt/idle3.wav", 1, ATTN_IDLE);
  226. }
  227.  
  228. ai_stand();
  229. };
  230. void() gaunt_perch2 = [ $perch2, gaunt_perch3 ] {ai_stand();};
  231. void() gaunt_perch3 = [ $perch3, gaunt_perch4 ] {ai_stand();};
  232. void() gaunt_perch4 = [ $perch4, gaunt_perch5 ] {ai_stand();};
  233. void() gaunt_perch5 = [ $perch5, gaunt_perch6 ] {ai_stand();};
  234. void() gaunt_perch6 = [ $perch6, gaunt_perch7 ] {ai_stand();};
  235. void() gaunt_perch7 = [ $perch7, gaunt_perch8 ] {ai_stand();};
  236. void() gaunt_perch8 = [ $perch8, gaunt_perch9 ] {ai_stand();};
  237. void() gaunt_perch9 = [ $perch9, gaunt_perch10 ] {ai_stand();};
  238. void() gaunt_perch10 = [ $perch10, gaunt_perch11 ] {ai_stand();};
  239. void() gaunt_perch11 = [ $perch11, gaunt_perch12 ] {ai_stand();};
  240. void() gaunt_perch12 = [ $perch12, gaunt_perch13 ] {ai_stand();};
  241. void() gaunt_perch13 = [ $perch13, gaunt_perch14 ] {ai_stand();};
  242. void() gaunt_perch14 = [ $perch14, gaunt_perch15 ] {ai_stand();};
  243. void() gaunt_perch15 = [ $perch15, gaunt_perch16 ] {ai_stand();};
  244. void() gaunt_perch16 = [ $perch16, gaunt_perch1 ] {ai_stand();};
  245.  
  246. //----------------------------------------------------------------------
  247. // Sightsound and very quick animation while moving forward
  248. void() gaunt_wakeup1 = [ $launch1, gaunt_wakeup2 ] {
  249.  
  250. };
  251. void() gaunt_wakeup2 = [ $launch2, gaunt_wakeup3 ] {ai_forward(4);};
  252. void() gaunt_wakeup3 = [ $launch3, gaunt_wakeup4 ] {ai_forward(4);};
  253. void() gaunt_wakeup4 = [ $launch4, gaunt_wakeup5 ] {ai_forward(4);};
  254. void() gaunt_wakeup5 = [ $launch5, gaunt_wakeup6 ] {ai_forward(4);};
  255. void() gaunt_wakeup6 = [ $launch6, gaunt_wakeup7 ] {gauntwings(); ai_forward(4);};
  256. void() gaunt_wakeup7 = [ $launch7, gaunt_wakeup8 ] {ai_forward(4);};
  257. void() gaunt_wakeup8 = [ $launch8, gaunt_run1 ] {
  258. FoundTarget(); // Setup goals and warn other monsters
  259. };
  260.  
  261. //----------------------------------------------------------------------
  262. void() gaunt_wakeup =
  263. {
  264. // Dead already?
  265. if (self.health < 1) return;
  266.  
  267. // No longer need perch spawnflag, remove it
  268. self.spawnflags = self.spawnflags - (self.spawnflags & MON_GAUNT_PERCH);
  269.  
  270. self.takedamage = DAMAGE_AIM; // Can receive damage
  271. self.use = SUB_Null; // no re-trigger
  272.  
  273. // Restore all think state functions
  274. self.th_stand = gaunt_idle1;
  275. self.th_walk = gaunt_walk1;
  276. self.th_run = gaunt_run1;
  277. self.th_missile = gaunt_fire1;
  278.  
  279. // Allow gaunt to fly up, no more ground checks
  280. self.flags = self.flags | FL_FLY;
  281. self.movetype = MOVETYPE_STEP;
  282. self.pain_finished = time + 1.5; // No pain
  283. self.attack_finished = 1.5 + random(); // No skill adjustment
  284. gaunt_wakeup1();
  285. };
  286.  
  287. //============================================================================
  288. // PAIN
  289. //============================================================================
  290. // Long - Swing wing around infront
  291. void() gaunt_painA1 =[ $painA1, gaunt_painA2 ] {self.pain_finished=time+1.5;};
  292. void() gaunt_painA2 =[ $painA2, gaunt_painA3 ] {};
  293. void() gaunt_painA3 =[ $painA3, gaunt_painA4 ] {};
  294. void() gaunt_painA4 =[ $painA4, gaunt_painA5 ] {};
  295. void() gaunt_painA5 =[ $painA5, gaunt_painA6 ] {};
  296. void() gaunt_painA6 =[ $painA6, gaunt_run1 ] {};
  297.  
  298. // Short - Knock head backward
  299. void() gaunt_painB1 =[ $painB1, gaunt_painB2 ] {self.pain_finished=time+1;};
  300. void() gaunt_painB2 =[ $painB2, gaunt_painB3 ] {};
  301. void() gaunt_painB3 =[ $painB3, gaunt_painB4 ] {};
  302. void() gaunt_painB4 =[ $painB4, gaunt_painB5 ] {};
  303. void() gaunt_painB5 =[ $painB5, gaunt_run1 ] {};
  304.  
  305. //----------------------------------------------------------------------
  306. void(entity attacker, float damage) gaunt_pain =
  307. {
  308. // Check for perching gaunt, need special wakeup
  309. if (self.spawnflags & MON_GAUNT_PERCH) gaunt_wakeup();
  310. else {
  311. // Check all pain conditions and set up what to do next
  312. if (time < self.pain_finished)
  313. return;
  314.  
  315. sound_pain (self, CHAN_VOICE, "gaunt/pain.wav", 1, ATTN_NORM);
  316.  
  317. if (random()*60 > damage)
  318. gaunt_painB1(); // Short
  319. else
  320. gaunt_painA1(); // Long
  321. }
  322. };
  323.  
  324. //============================================================================
  325. void() gaunt_deathA1 = [ $deathA1, gaunt_deathA2 ] {DropStuff();};
  326. void() gaunt_deathA2 = [ $deathA2, gaunt_deathA3 ] {};
  327. void() gaunt_deathA3 = [ $deathA3, gaunt_deathA4 ] {self.solid = SOLID_NOT;};
  328. void() gaunt_deathA4 = [ $deathA4, gaunt_deathA5 ] {};
  329. void() gaunt_deathA5 = [ $deathA5, gaunt_deathA6 ] {};
  330. void() gaunt_deathA6 = [ $deathA6, gaunt_deathA7 ] {};
  331. void() gaunt_deathA7 = [ $deathA7, gaunt_deathA8 ] {};
  332. void() gaunt_deathA8 = [ $deathA8, gaunt_deathA8 ] {self.nextthink = -1;};
  333.  
  334. //----------------------------------------------------------------------
  335. void() gaunt_deathB1 = [ $deathB1, gaunt_deathB2 ] {DropStuff();};
  336. void() gaunt_deathB2 = [ $deathB2, gaunt_deathB3 ] {};
  337. void() gaunt_deathB3 = [ $deathB3, gaunt_deathB4 ] {self.solid = SOLID_NOT;};
  338. void() gaunt_deathB4 = [ $deathB4, gaunt_deathB5 ] {};
  339. void() gaunt_deathB5 = [ $deathB5, gaunt_deathB6 ] {};
  340. void() gaunt_deathB6 = [ $deathB6, gaunt_deathB7 ] {};
  341. void() gaunt_deathB7 = [ $deathB7, gaunt_deathB8 ] {};
  342. void() gaunt_deathB8 = [ $deathB8, gaunt_deathB8 ] {self.nextthink = -1;};
  343.  
  344. //----------------------------------------------------------------------
  345. void gaunt_gib ()
  346. {
  347. sound_death (self, CHAN_VOICE, "gibs/gib5.wav", 1, ATTN_NORM);
  348.  
  349. if (self.mdl_head != "") //dumptruck_ds custom_mdls
  350. ThrowHead (self.mdl_head, self.health);
  351. else
  352. ThrowHead ("progs/h_gaunt.mdl", self.health);
  353.  
  354. if (self.mdl_gib1 != "") // custom models -- dumptruck_ds
  355. ThrowGib (self.mdl_gib1, self.health);
  356. else
  357. ThrowGib ("progs/gib1.mdl", self.health);
  358. if (self.mdl_gib2 != "")
  359. ThrowGib (self.mdl_gib2, self.health);
  360. else
  361. ThrowGib ("progs/gib2.mdl", self.health);
  362. if (self.mdl_gib3 != "")
  363. ThrowGib (self.mdl_gib3, self.health);
  364. else
  365. ThrowGib ("progs/gib3.mdl", self.health);
  366.  
  367. DropStuff();
  368. return;
  369. }
  370.  
  371. //----------------------------------------------------------------------
  372. void() gaunt_die =
  373. {
  374. // Make sure any wings sound is silenced
  375. sound (self, CHAN_ITEM, "misc/null.wav", 1, ATTN_NORM);
  376.  
  377. // Check for perching gaunt, need to blow up in gibs
  378. // In an awkward pose that does not go well into death animations
  379. if (self.spawnflags & MON_GAUNT_PERCH || self.health < -50) {
  380. gaunt_gib();
  381. return;
  382. }
  383.  
  384. // regular death
  385. sound_death (self, CHAN_VOICE, "gaunt/death.wav", 1, ATTN_NORM);
  386. self.flags = FL_MONSTER; // reset all flag conditions
  387. self.movetype = MOVETYPE_TOSS; // Affected by gravity
  388. self.velocity_x = -200 + 400*random();
  389. self.velocity_y = -200 + 400*random();
  390. self.velocity_z = 100 + 100*random();
  391. if (random() < 0.5) gaunt_deathA1();
  392. else gaunt_deathB1();
  393. };
  394.  
  395. /*======================================================================
  396. QUAKED monster_gaunt (1 0.2 0) (-16 -16 -24) (16 16 24)
  397. ======================================================================*/
  398. void() setup_gaunt;
  399. void() monster_gaunt =
  400. {
  401. if (SUB_Inhibit ()) // new spawnflags for all entities -- iw
  402. return;
  403.  
  404. precache_body_model2 ("progs/mon_gaunt.mdl");
  405. precache_head_model2 ("progs/h_gaunt.mdl");
  406. precache_model ("progs/s_light.mdl");
  407. precache_model ("progs/bolt.mdl");
  408.  
  409. precache_sound_idle ("gaunt/idle1.wav");
  410. precache_sound_misc1 ("gaunt/idle3.wav");
  411. precache_sound_misc2 ("gaunt/idle2.wav");
  412. precache_sound_misc ("gaunt/wings1.wav");
  413. precache_sound_attack ("shambler/sattck1.wav");
  414. precache_sound_hit ("shambler/sboom.wav");
  415. precache_sound_pain ("gaunt/pain.wav");
  416. precache_sound_death ("gaunt/death.wav");
  417. precache_sound_sight ("gaunt/sight.wav");
  418.  
  419. precache_gib1 ("progs/gib1.mdl");
  420. precache_gib2 ("progs/gib2.mdl");
  421. precache_gib3 ("progs/gib3.mdl");
  422.  
  423. setup_gaunt();
  424. };
  425.  
  426. //----------------------------------------------------------------------------
  427. void() setup_gaunt =
  428. {
  429. self.solid = SOLID_BBOX;
  430. self.movetype = MOVETYPE_STEP;
  431.  
  432. body_model ("progs/mon_gaunt.mdl");
  433. if (self.mdl_head || self.mdl_head=="")
  434. self.mdl_head = "progs/h_gaunt.mdl";
  435.  
  436. setsize (self, '-16 -16 -24', '16 16 40');
  437.  
  438. if (self.health < 1)
  439. self.health = 120;
  440. if (!self.hitscan_range)
  441. self.hitscan_range = 250; //range of lightning
  442. self.hitscan_range += (skill*100);
  443. self.attack_offset = '0 0 16'; //lightning offset
  444. if (!self.obit_method || self.obit_method=="")
  445. self.obit_method = "fried";
  446. if (!self.obit_name || self.obit_name=="")
  447. self.obit_name = "a Gaunt";
  448.  
  449. if (!self.yaw_speed)
  450. self.yaw_speed = 10 * (1 + self.speed_mod);
  451.  
  452. //self.th_checkattack = GauntCheckAttack;
  453. if (!self.berserk)
  454. self.th_pain = gaunt_pain;
  455. else
  456. self.th_pain = SUB_NullPain;
  457. self.th_die = gaunt_die;
  458.  
  459. //----------------------------------------------------------------------
  460. // Perched Gaunt have special idle animation + idle sounds
  461. if (self.spawnflags & MON_GAUNT_PERCH) {
  462. self.th_stand = self.th_walk = gaunt_perch1;
  463. self.th_run = self.th_missile = gaunt_wakeup;
  464. }
  465. //----------------------------------------------------------------------
  466. /*
  467. else if (self.classtype == CT_MINIONGAUNT) {
  468. self.th_stand = self.th_walk = gaunt_minwake;
  469. self.th_run = self.th_missile = gaunt_minwake;
  470. }
  471. */
  472. //----------------------------------------------------------------------
  473. else {
  474. // Default gaunt setup
  475. self.th_stand = gaunt_idle1;
  476. self.th_walk = gaunt_walk1;
  477. self.th_run = gaunt_run1;
  478. self.th_missile = gaunt_fire1;
  479. }
  480.  
  481. flymonster_start();
  482. };
  483.  
  484. //----------------------------------------------------------------------
  485. // Re-direct all Quoth requests to Gaunt!
  486. void() monster_polyp = {
  487. if (self.health <= 0) self.health = 200;
  488. self.classname = "monster_gaunt";
  489. monster_gaunt();
  490. }
  491.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement