home *** CD-ROM | disk | FTP | other *** search
/ Qu-ake / Qu-ake.iso / qu_ke / monster / 011 / MANGA.QC < prev    next >
Encoding:
Text File  |  1996-11-02  |  11.5 KB  |  389 lines

  1. /*
  2. ==============================================================================
  3. Ludovic Texier - Nov 2, 96
  4.  
  5. MANGA BABE, based on
  6. OGRE code....
  7.  
  8. ==============================================================================
  9. */
  10.  
  11. $cd /quake/test/progs/manga3.mdl
  12. $origin 0 0 -100
  13.  
  14. $base base        
  15. $skin skin10
  16.  
  17. $frame base
  18.  
  19. $frame    st1 st2 st3 st4 st5 st6 st7 st8
  20.  
  21. $frame wa1 wa2 wa3 wa4 wa5 wa6 wa7 wa8 wa9 
  22. $frame wa10 wa11 wa12 wa13 wa14 wa15 wa16 wa17 wa18
  23.  
  24. $frame ki1 ki2 ki3 ki4 ki5 ki6 ki7
  25. $frame ki8 ki9 ki10 ki11 ki12 ki13 ki14 ki15
  26.  
  27.  
  28. $frame at1 at2 at3 at4 at5 at6 at7 at8 at9 at10 at11
  29.  
  30.  
  31. $frame pa1 pa2 pa3 pa4 pa5 pa6
  32.  
  33.  
  34.  
  35. $frame die1 die2 die3 die4 die5 die6
  36. $frame die7 die8 die9 die10 die11 die12
  37. $frame die13 die14 die15 die16 
  38. $frame die17 die18 //add these to fix a frame problem but there's really only 16 frames ...???
  39.  
  40.  
  41. //=============================================================================
  42.  
  43.  
  44. void() mangaGrenadeExplode =
  45. {
  46.     T_RadiusDamage (self, self.owner, 40, world);
  47.     sound (self, CHAN_VOICE, "weapons/r_exp3.wav", 1, ATTN_NORM);
  48.  
  49.     WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
  50.     WriteByte (MSG_BROADCAST, TE_EXPLOSION);
  51.     WriteCoord (MSG_BROADCAST, self.origin_x);
  52.     WriteCoord (MSG_BROADCAST, self.origin_y);
  53.     WriteCoord (MSG_BROADCAST, self.origin_z);
  54.  
  55.     self.velocity = '0 0 0';
  56.     self.touch = SUB_Null;
  57.     setmodel (self, "progs/s_explod.spr");
  58.     self.solid = SOLID_NOT;
  59.     s_explode1 ();
  60. };
  61.  
  62. void() mangaGrenadeTouch =
  63. {
  64.     if (other == self.owner)
  65.         return;        // don't explode on owner
  66.     if (other.takedamage == DAMAGE_AIM)
  67.     {
  68.         mangaGrenadeExplode();
  69.         return;
  70.     }
  71.     sound (self, CHAN_VOICE, "weapons/bounce.wav", 1, ATTN_NORM);    // bounce sound
  72.     if (self.velocity == '0 0 0')
  73.         self.avelocity = '0 0 0';
  74. };
  75.  
  76. /*
  77. ================
  78. mangaFireGrenade
  79. ================
  80. */
  81. void() mangaFireGrenade =
  82. {
  83.     local    entity missile, mpuff;
  84.     
  85.     self.effects = self.effects | EF_MUZZLEFLASH;
  86.  
  87.     sound (self, CHAN_WEAPON, "weapons/grenade.wav", 1, ATTN_NORM);
  88.  
  89.     missile = spawn ();
  90.     missile.owner = self;
  91.     missile.movetype = MOVETYPE_BOUNCE;
  92.     missile.solid = SOLID_BBOX;
  93.         
  94. // set missile speed    
  95.  
  96.     makevectors (self.angles);
  97.  
  98.     missile.velocity = normalize(self.enemy.origin - self.origin);
  99.     missile.velocity = missile.velocity * 600;
  100.     missile.velocity_z = 200;
  101.  
  102.     missile.avelocity = '300 300 300';
  103.  
  104.     missile.angles = vectoangles(missile.velocity);
  105.     
  106.     missile.touch = mangaGrenadeTouch;
  107.     
  108. // set missile duration
  109.     missile.nextthink = time + 2.5;
  110.     missile.think = mangaGrenadeExplode;
  111.  
  112.     setmodel (missile, "progs/grenade.mdl");
  113.     setsize (missile, '0 0 0', '0 0 0');        
  114.     setorigin (missile, self.origin);
  115. };
  116.  
  117.  
  118. //=============================================================================
  119.  
  120. /*
  121. ================
  122. highkick
  123.  
  124. FIXME
  125. ================
  126. */
  127. void(float side) highkick =
  128. {
  129. local vector    delta;
  130. local float     ldmg;
  131.  
  132.     if (!self.enemy)
  133.         return;
  134.     if (!CanDamage (self.enemy, self))
  135.         return;
  136.  
  137.     ai_charge(10);
  138.  
  139.     delta = self.enemy.origin - self.origin;
  140.  
  141.     if (vlen(delta) > 100)
  142.         return;
  143.         
  144.     ldmg = (random() + random() + random()) * 4;
  145.     T_Damage (self.enemy, self, self, ldmg);
  146.     
  147.     if (side)
  148.     {
  149.         makevectors (self.angles);
  150.         if (side == 1)
  151.             SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);
  152.         else
  153.             SpawnMeatSpray (self.origin + v_forward*16, side * v_right);
  154.     }
  155. };
  156.  
  157.  
  158. void() manga_stand1    =[    $st1,    manga_stand2    ] {ai_stand();};
  159. void() manga_stand2    =[    $st2,    manga_stand3    ] {ai_stand();};
  160. void() manga_stand3    =[    $st3,    manga_stand4    ] {ai_stand();};
  161. void() manga_stand4    =[    $st4,    manga_stand5    ] {ai_stand();};
  162. void() manga_stand5    =[    $st5,    manga_stand6    ] {
  163. if (random() < 0.2)
  164.     sound (self, CHAN_VOICE, "kungfu.wav", 1, ATTN_IDLE);
  165. ai_stand();
  166. };
  167. void() manga_stand6    =[    $st6,    manga_stand7    ] {ai_stand();};
  168. void() manga_stand7    =[    $st7,    manga_stand8    ] {ai_stand();};
  169. void() manga_stand8    =[    $st8,    manga_stand1    ] {ai_stand();};
  170.  
  171. void() manga_walk1    =[    $wa1,        manga_walk2    ] {ai_walk(2);};
  172. void() manga_walk2    =[    $wa2,        manga_walk3    ] {ai_walk(2);};
  173. void() manga_walk3    =[    $wa3,        manga_walk4    ] {
  174. ai_walk(2);
  175. if (random() < 0.2)
  176.     sound (self, CHAN_VOICE, "kungfu.wav", 1, ATTN_IDLE);
  177. };
  178. void() manga_walk4    =[    $wa4,        manga_walk5    ] {ai_walk(2);};
  179. void() manga_walk5    =[    $wa5,        manga_walk6    ] {ai_walk(2);};
  180. void() manga_walk6    =[    $wa6,        manga_walk7    ] {
  181. ai_walk(5);
  182. if (random() < 0.1)
  183.     sound (self, CHAN_VOICE, "hiyaa.wav", 1, ATTN_IDLE);
  184. };
  185. void() manga_walk7    =[    $wa7,        manga_walk8    ] {ai_walk(2);};
  186. void() manga_walk8    =[    $wa8,        manga_walk9    ] {ai_walk(2);};
  187. void() manga_walk9    =[    $wa9,        manga_walk10    ] {ai_walk(2);};
  188. void() manga_walk10    =[    $wa10,    manga_walk11    ] {ai_walk(2);};
  189. void() manga_walk11    =[    $wa11,    manga_walk12    ] {ai_walk(2);};
  190. void() manga_walk12    =[    $wa12,    manga_walk13    ] {ai_walk(2);};
  191. void() manga_walk13    =[    $wa13,    manga_walk14    ] {ai_walk(2);};
  192. void() manga_walk14    =[    $wa14,    manga_walk15    ] {ai_walk(2);};
  193. void() manga_walk15    =[    $wa15,    manga_walk16    ] {ai_walk(2);};
  194. void() manga_walk16    =[    $wa16,    manga_walk17    ] {ai_walk(2);};
  195. void() manga_walk17    =[    $wa17,    manga_walk18    ] {ai_walk(2);};
  196. void() manga_walk18    =[    $wa18,    manga_walk1    ] {ai_walk(2);};
  197.  
  198.  
  199.  
  200. void() manga_run1    =[    $wa1,        manga_run2    ] {ai_run(9);
  201. if (random() < 0.2)
  202.     sound (self, CHAN_VOICE, "ohdju.wav", 1, ATTN_IDLE);
  203. };
  204. void() manga_run2    =[    $wa3,        manga_run3    ] {ai_run(12);};
  205. void() manga_run3    =[    $wa5,        manga_run4    ] {ai_run(8);};
  206. void() manga_run4    =[    $wa7,        manga_run5    ] {ai_run(22);};
  207. void() manga_run5    =[    $wa9,        manga_run6    ] {ai_run(16);};
  208. void() manga_run6    =[    $wa11,        manga_run7    ] {ai_run(4);};
  209. void() manga_run7    =[    $wa13,        manga_run8    ] {ai_run(13);};
  210. void() manga_run8    =[    $wa15,        manga_run9    ] {ai_run(24);};
  211. void() manga_run9    =[    $wa17,        manga_run1    ] {ai_run(24);};
  212.  
  213. void() manga_swing1    =[    $ki1,        manga_swing2    ] {ai_charge(11);
  214. sound (self, CHAN_WEAPON, "hiyaa.wav", 1, ATTN_NORM);
  215. };
  216. void() manga_swing2    =[    $ki2,        manga_swing3    ] {ai_charge(1);};
  217. void() manga_swing3    =[    $ki3,        manga_swing4    ] {ai_charge(4);};
  218. void() manga_swing4    =[    $ki4,        manga_swing5    ] {ai_charge(13);};
  219. void() manga_swing5    =[    $ki5,        manga_swing6    ] {ai_charge(9); highkick(0);self.angles_y = self.angles_y + random()*25;};
  220. void() manga_swing6    =[    $ki6,        manga_swing7    ] {highkick(200);self.angles_y = self.angles_y + random()* 25;};
  221. void() manga_swing7    =[    $ki7,        manga_swing8    ] {highkick(0);self.angles_y = self.angles_y + random()* 25;};
  222. void() manga_swing8    =[    $ki8,        manga_swing9    ] {highkick(0);self.angles_y = self.angles_y + random()* 25;};
  223. void() manga_swing9    =[    $ki9,        manga_swing10 ] {highkick(0);self.angles_y = self.angles_y + random()* 25;};
  224. void() manga_swing10    =[    $ki10,        manga_swing11 ] {highkick(-200);self.angles_y = self.angles_y + random()* 25;};
  225. void() manga_swing11    =[    $ki11,        manga_swing12 ] {highkick(0);self.angles_y = self.angles_y + random()* 25;};
  226. void() manga_swing12    =[    $ki12,        manga_swing13 ] {ai_charge(3);};
  227. void() manga_swing13    =[    $ki13,        manga_swing14 ] {ai_charge(8);};
  228. void() manga_swing14    =[    $ki14,        manga_run1    ] {ai_charge(9);};
  229.  
  230.  
  231. void() manga_smash1    =[    $ki1,        manga_smash2    ] {ai_charge(6);};
  232. void() manga_smash2    =[    $ki2,        manga_smash3    ] {ai_charge(0);};
  233. void() manga_smash3    =[    $ki3,        manga_smash4    ] {ai_charge(0);};
  234. void() manga_smash4    =[    $ki4,        manga_smash5    ] {ai_charge(1);
  235. sound (self, CHAN_WEAPON, "tchak.wav", 1, ATTN_NORM);
  236. };
  237. void() manga_smash5    =[    $ki5,        manga_smash6    ] {ai_charge(4);};
  238. void() manga_smash6    =[    $ki6,        manga_smash7    ] {ai_charge(4); highkick(0);};
  239. void() manga_smash7    =[    $ki7,        manga_smash8    ] {ai_charge(4); highkick(0);};
  240. void() manga_smash8    =[    $ki8,        manga_smash9    ] {ai_charge(10); highkick(0);};
  241. void() manga_smash9    =[    $ki9,        manga_smash10 ] {ai_charge(13); highkick(0);};
  242. void() manga_smash10    =[    $ki10,        manga_smash11 ] {highkick(1);};
  243. void() manga_smash11    =[    $ki11,        manga_smash12 ] {ai_charge(2); highkick(0);
  244. self.nextthink = self.nextthink + random()*0.2;};    // slight variation
  245. void() manga_smash12    =[    $ki12,        manga_smash13 ] {ai_charge();};
  246. void() manga_smash13    =[    $ki13,        manga_smash14 ] {ai_charge(4);};
  247. void() manga_smash14    =[    $ki14,        manga_run1    ] {ai_charge(12);};
  248.  
  249. void() manga_nail1    =[    $at1,        manga_nail2    ] {ai_face();};
  250. void() manga_nail2    =[    $at2,        manga_nail3    ] {ai_face();};
  251. void() manga_nail3    =[    $at3,        manga_nail4    ] {ai_face();};
  252. void() manga_nail4    =[    $at4,        manga_nail5    ] {ai_face();};
  253. void() manga_nail5    =[    $at5,        manga_nail6    ] {ai_face();};
  254. void() manga_nail6    =[    $at6,        manga_nail7    ] {ai_face();};
  255. void() manga_nail7    =[    $at7,        manga_nail8    ] {ai_face();};
  256. void() manga_nail8    =[    $at8,        manga_nail9    ] {ai_face();mangaFireGrenade();};
  257. void() manga_nail9    =[    $at9,        manga_nail10    ] {ai_face();};
  258. void() manga_nail10    =[    $at10,        manga_run1    ] {ai_face();};
  259.  
  260.  
  261.  
  262. void()    manga_pain1    =[    $pa1,        manga_pain2    ] {};
  263. void()    manga_pain2    =[    $pa2,        manga_pain3    ] {};
  264. void()    manga_pain3    =[    $pa3,        manga_pain4    ] {};
  265. void()    manga_pain4    =[    $pa4,        manga_pain5    ] {};
  266. void()    manga_pain5    =[    $pa5,        manga_pain6    ] {};
  267. void()    manga_pain6    =[    $pa6,        manga_run1    ] {};
  268.  
  269.  
  270.  
  271. void(entity attacker, float damage)    manga_pain =
  272. {
  273.     local float    r;
  274.  
  275. // don't make multiple pain sounds right after each other
  276.     if (self.pain_finished > time)
  277.         return;
  278.  
  279.  
  280.     sound (self, CHAN_VOICE, "ha.wav", 1, ATTN_NORM);
  281.  
  282.         
  283.  
  284.  
  285.         manga_pain1 ();
  286.         self.pain_finished = time + 1;
  287.  
  288.  
  289. };
  290.  
  291. void()    manga_die1    =[    $die1,    manga_die2    ] {};
  292. void()    manga_die2    =[    $die2,    manga_die3    ] {};
  293. void()    manga_die3    =[    $die3,    manga_die4    ]
  294. {self.solid = SOLID_NOT;
  295. self.ammo_rockets = 2;DropBackpack();};
  296. void()    manga_die4    =[    $die4,    manga_die5    ] {};
  297. void()    manga_die5    =[    $die5,    manga_die6    ] {};
  298. void()    manga_die6    =[    $die6,    manga_die7    ] {};
  299. void()    manga_die7    =[    $die7,    manga_die8    ] {};
  300. void()    manga_die8    =[    $die8,    manga_die9    ] {};
  301. void()    manga_die9    =[    $die9,    manga_die10    ] {};
  302. void()    manga_die10    =[    $die10,    manga_die11    ] {};
  303. void()    manga_die11    =[    $die11,    manga_die12    ] {};
  304. void()    manga_die12    =[    $die12,    manga_die13    ] {};
  305. void()    manga_die13    =[    $die13,    manga_die14    ] {};
  306. void()    manga_die14    =[    $die14,    manga_die15    ] {};
  307. void()    manga_die15    =[    $die15,    manga_die16    ] {};
  308. void()    manga_die16    =[    $die16,    manga_die17    ] {};
  309. /* I had to add those 2 lines, it works that way ....*/
  310. void()    manga_die17    =[    $die17,    manga_die18    ] {};
  311. void()    manga_die18    =[    $die18,    manga_die18    ] {};
  312.  
  313.  
  314.  
  315.  
  316. void() manga_die =
  317. {
  318. // check for gib
  319.     if (self.health < -80)
  320.     {
  321.         sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  322.         ThrowHead ("progs/gib3.mdl", self.health);
  323.         ThrowGib ("progs/gib3.mdl", self.health);
  324.         ThrowGib ("progs/gib3.mdl", self.health);
  325.         ThrowGib ("progs/gib3.mdl", self.health);
  326.         return;
  327.     }
  328.  
  329.     sound (self, CHAN_VOICE, "died.wav", 1, ATTN_NORM);
  330.     
  331.     
  332.         manga_die1 ();
  333. };
  334.  
  335. void() manga_melee =
  336. {
  337.     if (random() > 0.5)
  338.         manga_smash1 ();
  339.     else
  340.         manga_swing1 ();
  341. };
  342.  
  343.  
  344. void() monster_manga =
  345. {
  346.     if (deathmatch)
  347.     {
  348.         remove(self);
  349.         return;
  350.     }
  351.     precache_model ("progs/manga3.mdl");
  352.     precache_model ("progs/h_ogre.mdl");
  353.     precache_model ("progs/grenade.mdl");
  354.     precache_sound ("hiyaa.wav");
  355.     precache_sound ("tchak.wav");
  356.     precache_sound ("kungfu.wav");
  357.     precache_sound ("ohdju.wav");
  358.     precache_sound ("ha.wav");
  359.     precache_sound ("died.wav");
  360.  
  361.     
  362.     
  363.  
  364.     
  365.  
  366.     self.solid = SOLID_SLIDEBOX;
  367.     self.movetype = MOVETYPE_STEP;
  368.  
  369.     setmodel (self, "progs/manga3.mdl");
  370.  
  371.     
  372.  
  373.     setsize (self, '-20 -20 0', '20 20 80');
  374.  
  375.     self.health = 250;
  376.  
  377.     self.th_stand = manga_stand1;
  378.     self.th_walk = manga_walk1;
  379.     self.th_run = manga_run1;
  380.     self.th_die = manga_die;
  381.     self.th_melee = manga_melee;
  382.     self.th_missile = manga_nail1;
  383.     self.th_pain = manga_pain;
  384.     
  385.     walkmonster_start();
  386. };
  387.  
  388.  
  389.