home *** CD-ROM | disk | FTP | other *** search
/ Superpower (Alt) / SUPERPOWER.iso / q / patch / mbq106 / solidmn.pat < prev    next >
Encoding:
Text File  |  1996-08-05  |  57.6 KB  |  1,910 lines

  1. diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/demon.qc solidmn/demon.qc
  2. --- v101qc/demon.qc    Thu Jul 25 01:51:22 1996
  3. +++ solidmn/demon.qc    Wed Jul 31 22:15:01 1996
  4. @@ -145,7 +145,7 @@
  5.  void()    demon1_die4        =[    $death4,        demon1_die5    ] {};
  6.  void()    demon1_die5        =[    $death5,        demon1_die6    ] {};
  7.  void()    demon1_die6        =[    $death6,        demon1_die7    ]
  8. -{self.solid = SOLID_NOT;};
  9. +{};
  10.  void()    demon1_die7        =[    $death7,        demon1_die8    ] {};
  11.  void()    demon1_die8        =[    $death8,        demon1_die9    ] {};
  12.  void()    demon1_die9        =[    $death9,        demon1_die9 ] {};
  13. @@ -156,15 +156,14 @@
  14.      if (self.health < -80)
  15.      {
  16.          sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  17. -        ThrowHead ("progs/h_demon.mdl", self.health);
  18. -        ThrowGib ("progs/gib1.mdl", self.health);
  19. -        ThrowGib ("progs/gib1.mdl", self.health);
  20. -        ThrowGib ("progs/gib1.mdl", self.health);
  21. +        monster_gib("progs/h_demon.mdl");
  22.          return;
  23.      }
  24.  
  25.  // regular death
  26.      demon1_die1 ();
  27. +
  28. +    monster_corpse_setup('-16 -16 -24', '16 16 -12', "progs/h_demon.mdl");
  29.  };
  30.  
  31.  
  32. diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/dog.qc solidmn/dog.qc
  33. --- v101qc/dog.qc    Thu Jul 25 01:51:22 1996
  34. +++ solidmn/dog.qc    Wed Jul 31 22:02:32 1996
  35. @@ -1,363 +1,364 @@
  36. -/*
  37. -==============================================================================
  38. -
  39. -DOG
  40. -
  41. -==============================================================================
  42. -*/
  43. -$cd /raid/quake/id1/models/dog
  44. -$origin 0 0 24
  45. -$base base
  46. -$skin skin
  47. -
  48. -$frame attack1 attack2 attack3 attack4 attack5 attack6 attack7 attack8
  49. -
  50. -$frame death1 death2 death3 death4 death5 death6 death7 death8 death9
  51. -
  52. -$frame deathb1 deathb2 deathb3 deathb4 deathb5 deathb6 deathb7 deathb8
  53. -$frame deathb9
  54. -
  55. -$frame pain1 pain2 pain3 pain4 pain5 pain6
  56. -
  57. -$frame painb1 painb2 painb3 painb4 painb5 painb6 painb7 painb8 painb9 painb10
  58. -$frame painb11 painb12 painb13 painb14 painb15 painb16
  59. -
  60. -$frame run1 run2 run3 run4 run5 run6 run7 run8 run9 run10 run11 run12
  61. -
  62. -$frame leap1 leap2 leap3 leap4 leap5 leap6 leap7 leap8 leap9
  63. -
  64. -$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9
  65. -
  66. -$frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8
  67. -
  68. -
  69. -void() dog_leap1;
  70. -void() dog_run1;
  71. -
  72. -/*
  73. -================
  74. -dog_bite
  75. -
  76. -================
  77. -*/
  78. -void() dog_bite =
  79. -{
  80. -local vector    delta;
  81. -local float     ldmg;
  82. -
  83. -    if (!self.enemy)
  84. -        return;
  85. -
  86. -    ai_charge(10);
  87. -
  88. -    if (!CanDamage (self.enemy, self))
  89. -        return;
  90. -
  91. -    delta = self.enemy.origin - self.origin;
  92. -
  93. -    if (vlen(delta) > 100)
  94. -        return;
  95. -        
  96. -    ldmg = (random() + random() + random()) * 8;
  97. -    T_Damage (self.enemy, self, self, ldmg);
  98. -};
  99. -
  100. -void()    Dog_JumpTouch =
  101. -{
  102. -    local    float    ldmg;
  103. -
  104. -    if (self.health <= 0)
  105. -        return;
  106. -        
  107. -    if (other.takedamage)
  108. -    {
  109. -        if ( vlen(self.velocity) > 300 )
  110. -        {
  111. -            ldmg = 10 + 10*random();
  112. -            T_Damage (other, self, self, ldmg);    
  113. -        }
  114. -    }
  115. -
  116. -    if (!checkbottom(self))
  117. -    {
  118. -        if (self.flags & FL_ONGROUND)
  119. -        {    // jump randomly to not get hung up
  120. -//dprint ("popjump\n");
  121. -    self.touch = SUB_Null;
  122. -    self.think = dog_leap1;
  123. -    self.nextthink = time + 0.1;
  124. -
  125. -//            self.velocity_x = (random() - 0.5) * 600;
  126. -//            self.velocity_y = (random() - 0.5) * 600;
  127. -//            self.velocity_z = 200;
  128. -//            self.flags = self.flags - FL_ONGROUND;
  129. -        }
  130. -        return;    // not on ground yet
  131. -    }
  132. -
  133. -    self.touch = SUB_Null;
  134. -    self.think = dog_run1;
  135. -    self.nextthink = time + 0.1;
  136. -};
  137. -
  138. -
  139. -void() dog_stand1    =[    $stand1,    dog_stand2    ] {ai_stand();};
  140. -void() dog_stand2    =[    $stand2,    dog_stand3    ] {ai_stand();};
  141. -void() dog_stand3    =[    $stand3,    dog_stand4    ] {ai_stand();};
  142. -void() dog_stand4    =[    $stand4,    dog_stand5    ] {ai_stand();};
  143. -void() dog_stand5    =[    $stand5,    dog_stand6    ] {ai_stand();};
  144. -void() dog_stand6    =[    $stand6,    dog_stand7    ] {ai_stand();};
  145. -void() dog_stand7    =[    $stand7,    dog_stand8    ] {ai_stand();};
  146. -void() dog_stand8    =[    $stand8,    dog_stand9    ] {ai_stand();};
  147. -void() dog_stand9    =[    $stand9,    dog_stand1    ] {ai_stand();};
  148. -
  149. -void() dog_walk1    =[    $walk1 ,    dog_walk2    ] {
  150. -if (random() < 0.2)
  151. -    sound (self, CHAN_VOICE, "dog/idle.wav", 1, ATTN_IDLE);
  152. -ai_walk(8);};
  153. -void() dog_walk2    =[    $walk2 ,    dog_walk3    ] {ai_walk(8);};
  154. -void() dog_walk3    =[    $walk3 ,    dog_walk4    ] {ai_walk(8);};
  155. -void() dog_walk4    =[    $walk4 ,    dog_walk5    ] {ai_walk(8);};
  156. -void() dog_walk5    =[    $walk5 ,    dog_walk6    ] {ai_walk(8);};
  157. -void() dog_walk6    =[    $walk6 ,    dog_walk7    ] {ai_walk(8);};
  158. -void() dog_walk7    =[    $walk7 ,    dog_walk8    ] {ai_walk(8);};
  159. -void() dog_walk8    =[    $walk8 ,    dog_walk1    ] {ai_walk(8);};
  160. -
  161. -void() dog_run1        =[    $run1  ,    dog_run2    ] {
  162. -if (random() < 0.2)
  163. -    sound (self, CHAN_VOICE, "dog/idle.wav", 1, ATTN_IDLE);
  164. -ai_run(16);};
  165. -void() dog_run2        =[    $run2  ,    dog_run3    ] {ai_run(32);};
  166. -void() dog_run3        =[    $run3  ,    dog_run4    ] {ai_run(32);};
  167. -void() dog_run4        =[    $run4  ,    dog_run5    ] {ai_run(20);};
  168. -void() dog_run5        =[    $run5  ,    dog_run6    ] {ai_run(64);};
  169. -void() dog_run6        =[    $run6  ,    dog_run7    ] {ai_run(32);};
  170. -void() dog_run7        =[    $run7  ,    dog_run8    ] {ai_run(16);};
  171. -void() dog_run8        =[    $run8  ,    dog_run9    ] {ai_run(32);};
  172. -void() dog_run9        =[    $run9  ,    dog_run10    ] {ai_run(32);};
  173. -void() dog_run10    =[    $run10  ,    dog_run11    ] {ai_run(20);};
  174. -void() dog_run11    =[    $run11  ,    dog_run12    ] {ai_run(64);};
  175. -void() dog_run12    =[    $run12  ,    dog_run1    ] {ai_run(32);};
  176. -
  177. -void() dog_atta1    =[    $attack1,    dog_atta2    ] {ai_charge(10);};
  178. -void() dog_atta2    =[    $attack2,    dog_atta3    ] {ai_charge(10);};
  179. -void() dog_atta3    =[    $attack3,    dog_atta4    ] {ai_charge(10);};
  180. -void() dog_atta4    =[    $attack4,    dog_atta5    ] {
  181. -sound (self, CHAN_VOICE, "dog/dattack1.wav", 1, ATTN_NORM);
  182. -dog_bite();};
  183. -void() dog_atta5    =[    $attack5,    dog_atta6    ] {ai_charge(10);};
  184. -void() dog_atta6    =[    $attack6,    dog_atta7    ] {ai_charge(10);};
  185. -void() dog_atta7    =[    $attack7,    dog_atta8    ] {ai_charge(10);};
  186. -void() dog_atta8    =[    $attack8,    dog_run1    ] {ai_charge(10);};
  187. -
  188. -void() dog_leap1    =[    $leap1,        dog_leap2    ] {ai_face();};
  189. -void() dog_leap2    =[    $leap2,        dog_leap3    ]
  190. -{
  191. -    ai_face();
  192. -    
  193. -    self.touch = Dog_JumpTouch;
  194. -    makevectors (self.angles);
  195. -    self.origin_z = self.origin_z + 1;
  196. -    self.velocity = v_forward * 300 + '0 0 200';
  197. -    if (self.flags & FL_ONGROUND)
  198. -        self.flags = self.flags - FL_ONGROUND;
  199. -};
  200. -
  201. -void() dog_leap3    =[    $leap3,        dog_leap4    ] {};
  202. -void() dog_leap4    =[    $leap4,        dog_leap5    ] {};
  203. -void() dog_leap5    =[    $leap5,        dog_leap6    ] {};
  204. -void() dog_leap6    =[    $leap6,        dog_leap7    ] {};
  205. -void() dog_leap7    =[    $leap7,        dog_leap8    ] {};
  206. -void() dog_leap8    =[    $leap8,        dog_leap9    ] {};
  207. -void() dog_leap9    =[    $leap9,        dog_leap9    ] {};
  208. -
  209. -void() dog_pain1    =[    $pain1 ,    dog_pain2    ] {};
  210. -void() dog_pain2    =[    $pain2 ,    dog_pain3    ] {};
  211. -void() dog_pain3    =[    $pain3 ,    dog_pain4    ] {};
  212. -void() dog_pain4    =[    $pain4 ,    dog_pain5    ] {};
  213. -void() dog_pain5    =[    $pain5 ,    dog_pain6    ] {};
  214. -void() dog_pain6    =[    $pain6 ,    dog_run1    ] {};
  215. -
  216. -void() dog_painb1    =[    $painb1 ,    dog_painb2    ] {};
  217. -void() dog_painb2    =[    $painb2 ,    dog_painb3    ] {};
  218. -void() dog_painb3    =[    $painb3 ,    dog_painb4    ] {ai_pain(4);};
  219. -void() dog_painb4    =[    $painb4 ,    dog_painb5    ] {ai_pain(12);};
  220. -void() dog_painb5    =[    $painb5 ,    dog_painb6    ] {ai_pain(12);};
  221. -void() dog_painb6    =[    $painb6 ,    dog_painb7    ] {ai_pain(2);};
  222. -void() dog_painb7    =[    $painb7 ,    dog_painb8    ] {};
  223. -void() dog_painb8    =[    $painb8 ,    dog_painb9    ] {ai_pain(4);};
  224. -void() dog_painb9    =[    $painb9 ,    dog_painb10    ] {};
  225. -void() dog_painb10    =[    $painb10 ,    dog_painb11    ] {ai_pain(10);};
  226. -void() dog_painb11    =[    $painb11 ,    dog_painb12    ] {};
  227. -void() dog_painb12    =[    $painb12 ,    dog_painb13    ] {};
  228. -void() dog_painb13    =[    $painb13 ,    dog_painb14    ] {};
  229. -void() dog_painb14    =[    $painb14 ,    dog_painb15    ] {};
  230. -void() dog_painb15    =[    $painb15 ,    dog_painb16    ] {};
  231. -void() dog_painb16    =[    $painb16 ,    dog_run1    ] {};
  232. -
  233. -void() dog_pain =
  234. -{
  235. -    sound (self, CHAN_VOICE, "dog/dpain1.wav", 1, ATTN_NORM);
  236. -
  237. -    if (random() > 0.5)
  238. -        dog_pain1 ();
  239. -    else
  240. -        dog_painb1 ();
  241. -};
  242. -
  243. -void() dog_die1        =[    $death1,    dog_die2    ] {};
  244. -void() dog_die2        =[    $death2,    dog_die3    ] {};
  245. -void() dog_die3        =[    $death3,    dog_die4    ] {};
  246. -void() dog_die4        =[    $death4,    dog_die5    ] {};
  247. -void() dog_die5        =[    $death5,    dog_die6    ] {};
  248. -void() dog_die6        =[    $death6,    dog_die7    ] {};
  249. -void() dog_die7        =[    $death7,    dog_die8    ] {};
  250. -void() dog_die8        =[    $death8,    dog_die9    ] {};
  251. -void() dog_die9        =[    $death9,    dog_die9    ] {};
  252. -
  253. -void() dog_dieb1        =[    $deathb1,    dog_dieb2    ] {};
  254. -void() dog_dieb2        =[    $deathb2,    dog_dieb3    ] {};
  255. -void() dog_dieb3        =[    $deathb3,    dog_dieb4    ] {};
  256. -void() dog_dieb4        =[    $deathb4,    dog_dieb5    ] {};
  257. -void() dog_dieb5        =[    $deathb5,    dog_dieb6    ] {};
  258. -void() dog_dieb6        =[    $deathb6,    dog_dieb7    ] {};
  259. -void() dog_dieb7        =[    $deathb7,    dog_dieb8    ] {};
  260. -void() dog_dieb8        =[    $deathb8,    dog_dieb9    ] {};
  261. -void() dog_dieb9        =[    $deathb9,    dog_dieb9    ] {};
  262. -
  263. -
  264. -void() dog_die =
  265. -{
  266. -// check for gib
  267. -    if (self.health < -35)
  268. -    {
  269. -        sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  270. -        ThrowGib ("progs/gib3.mdl", self.health);
  271. -        ThrowGib ("progs/gib3.mdl", self.health);
  272. -        ThrowGib ("progs/gib3.mdl", self.health);
  273. -        ThrowHead ("progs/h_dog.mdl", self.health);
  274. -        return;
  275. -    }
  276. -
  277. -// regular death
  278. -    sound (self, CHAN_VOICE, "dog/ddeath.wav", 1, ATTN_NORM);
  279. -    self.solid = SOLID_NOT;
  280. -
  281. -    if (random() > 0.5)
  282. -        dog_die1 ();
  283. -    else
  284. -        dog_dieb1 ();
  285. -};
  286. -
  287. -//============================================================================
  288. -
  289. -/*
  290. -==============
  291. -CheckDogMelee
  292. -
  293. -Returns TRUE if a melee attack would hit right now
  294. -==============
  295. -*/
  296. -float()    CheckDogMelee =
  297. -{
  298. -    if (enemy_range == RANGE_MELEE)
  299. -    {    // FIXME: check canreach
  300. -        self.attack_state = AS_MELEE;
  301. -        return TRUE;
  302. -    }
  303. -    return FALSE;
  304. -};
  305. -
  306. -/*
  307. -==============
  308. -CheckDogJump
  309. -
  310. -==============
  311. -*/
  312. -float()    CheckDogJump =
  313. -{
  314. -    local    vector    dist;
  315. -    local    float    d;
  316. -
  317. -    if (self.origin_z + self.mins_z > self.enemy.origin_z + self.enemy.mins_z
  318. -    + 0.75 * self.enemy.size_z)
  319. -        return FALSE;
  320. -        
  321. -    if (self.origin_z + self.maxs_z < self.enemy.origin_z + self.enemy.mins_z
  322. -    + 0.25 * self.enemy.size_z)
  323. -        return FALSE;
  324. -        
  325. -    dist = self.enemy.origin - self.origin;
  326. -    dist_z = 0;
  327. -    
  328. -    d = vlen(dist);
  329. -    
  330. -    if (d < 80)
  331. -        return FALSE;
  332. -        
  333. -    if (d > 150)
  334. -        return FALSE;
  335. -        
  336. -    return TRUE;
  337. -};
  338. -
  339. -float()    DogCheckAttack =
  340. -{
  341. -    local    vector    vec;
  342. -    
  343. -// if close enough for slashing, go for it
  344. -    if (CheckDogMelee ())
  345. -    {
  346. -        self.attack_state = AS_MELEE;
  347. -        return TRUE;
  348. -    }
  349. -    
  350. -    if (CheckDogJump ())
  351. -    {
  352. -        self.attack_state = AS_MISSILE;
  353. -        return TRUE;
  354. -    }
  355. -    
  356. -    return FALSE;
  357. -};
  358. -
  359. -
  360. -//===========================================================================
  361. -
  362. -/*QUAKED monster_dog (1 0 0) (-32 -32 -24) (32 32 40) Ambush
  363. -
  364. -*/
  365. -void() monster_dog =
  366. -{
  367. -    if (deathmatch)
  368. -    {
  369. -        remove(self);
  370. -        return;
  371. -    }
  372. -    precache_model ("progs/h_dog.mdl");
  373. -    precache_model ("progs/dog.mdl");
  374. -
  375. -    precache_sound ("dog/dattack1.wav");
  376. -    precache_sound ("dog/ddeath.wav");
  377. -    precache_sound ("dog/dpain1.wav");
  378. -    precache_sound ("dog/dsight.wav");
  379. -    precache_sound ("dog/idle.wav");
  380. -
  381. -    self.solid = SOLID_SLIDEBOX;
  382. -    self.movetype = MOVETYPE_STEP;
  383. -
  384. -    setmodel (self, "progs/dog.mdl");
  385. -
  386. -    setsize (self, '-32 -32 -24', '32 32 40');
  387. -    self.health = 25;
  388. -
  389. -    self.th_stand = dog_stand1;
  390. -    self.th_walk = dog_walk1;
  391. -    self.th_run = dog_run1;
  392. -    self.th_pain = dog_pain;
  393. -    self.th_die = dog_die;
  394. -    self.th_melee = dog_atta1;
  395. -    self.th_missile = dog_leap1;
  396. -
  397. -    walkmonster_start();
  398. -};
  399. +/*
  400. +==============================================================================
  401. +
  402. +DOG
  403. +
  404. +==============================================================================
  405. +*/
  406. +$cd /raid/quake/id1/models/dog
  407. +$origin 0 0 24
  408. +$base base
  409. +$skin skin
  410. +
  411. +$frame attack1 attack2 attack3 attack4 attack5 attack6 attack7 attack8
  412. +
  413. +$frame death1 death2 death3 death4 death5 death6 death7 death8 death9
  414. +
  415. +$frame deathb1 deathb2 deathb3 deathb4 deathb5 deathb6 deathb7 deathb8
  416. +$frame deathb9
  417. +
  418. +$frame pain1 pain2 pain3 pain4 pain5 pain6
  419. +
  420. +$frame painb1 painb2 painb3 painb4 painb5 painb6 painb7 painb8 painb9 painb10
  421. +$frame painb11 painb12 painb13 painb14 painb15 painb16
  422. +
  423. +$frame run1 run2 run3 run4 run5 run6 run7 run8 run9 run10 run11 run12
  424. +
  425. +$frame leap1 leap2 leap3 leap4 leap5 leap6 leap7 leap8 leap9
  426. +
  427. +$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9
  428. +
  429. +$frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8
  430. +
  431. +
  432. +void() dog_leap1;
  433. +void() dog_run1;
  434. +
  435. +/*
  436. +================
  437. +dog_bite
  438. +
  439. +================
  440. +*/
  441. +void() dog_bite =
  442. +{
  443. +local vector    delta;
  444. +local float     ldmg;
  445. +
  446. +    if (!self.enemy)
  447. +        return;
  448. +
  449. +    ai_charge(10);
  450. +
  451. +    if (!CanDamage (self.enemy, self))
  452. +        return;
  453. +
  454. +    delta = self.enemy.origin - self.origin;
  455. +
  456. +    if (vlen(delta) > 100)
  457. +        return;
  458. +        
  459. +    ldmg = (random() + random() + random()) * 8;
  460. +    T_Damage (self.enemy, self, self, ldmg);
  461. +};
  462. +
  463. +void()    Dog_JumpTouch =
  464. +{
  465. +    local    float    ldmg;
  466. +
  467. +    if (self.health <= 0)
  468. +        return;
  469. +        
  470. +    if (other.takedamage)
  471. +    {
  472. +        if ( vlen(self.velocity) > 300 )
  473. +        {
  474. +            ldmg = 10 + 10*random();
  475. +            T_Damage (other, self, self, ldmg);    
  476. +        }
  477. +    }
  478. +
  479. +    if (!checkbottom(self))
  480. +    {
  481. +        if (self.flags & FL_ONGROUND)
  482. +        {    // jump randomly to not get hung up
  483. +//dprint ("popjump\n");
  484. +    self.touch = SUB_Null;
  485. +    self.think = dog_leap1;
  486. +    self.nextthink = time + 0.1;
  487. +
  488. +//            self.velocity_x = (random() - 0.5) * 600;
  489. +//            self.velocity_y = (random() - 0.5) * 600;
  490. +//            self.velocity_z = 200;
  491. +//            self.flags = self.flags - FL_ONGROUND;
  492. +        }
  493. +        return;    // not on ground yet
  494. +    }
  495. +
  496. +    self.touch = SUB_Null;
  497. +    self.think = dog_run1;
  498. +    self.nextthink = time + 0.1;
  499. +};
  500. +
  501. +
  502. +void() dog_stand1    =[    $stand1,    dog_stand2    ] {ai_stand();};
  503. +void() dog_stand2    =[    $stand2,    dog_stand3    ] {ai_stand();};
  504. +void() dog_stand3    =[    $stand3,    dog_stand4    ] {ai_stand();};
  505. +void() dog_stand4    =[    $stand4,    dog_stand5    ] {ai_stand();};
  506. +void() dog_stand5    =[    $stand5,    dog_stand6    ] {ai_stand();};
  507. +void() dog_stand6    =[    $stand6,    dog_stand7    ] {ai_stand();};
  508. +void() dog_stand7    =[    $stand7,    dog_stand8    ] {ai_stand();};
  509. +void() dog_stand8    =[    $stand8,    dog_stand9    ] {ai_stand();};
  510. +void() dog_stand9    =[    $stand9,    dog_stand1    ] {ai_stand();};
  511. +
  512. +void() dog_walk1    =[    $walk1 ,    dog_walk2    ] {
  513. +if (random() < 0.2)
  514. +    sound (self, CHAN_VOICE, "dog/idle.wav", 1, ATTN_IDLE);
  515. +ai_walk(8);};
  516. +void() dog_walk2    =[    $walk2 ,    dog_walk3    ] {ai_walk(8);};
  517. +void() dog_walk3    =[    $walk3 ,    dog_walk4    ] {ai_walk(8);};
  518. +void() dog_walk4    =[    $walk4 ,    dog_walk5    ] {ai_walk(8);};
  519. +void() dog_walk5    =[    $walk5 ,    dog_walk6    ] {ai_walk(8);};
  520. +void() dog_walk6    =[    $walk6 ,    dog_walk7    ] {ai_walk(8);};
  521. +void() dog_walk7    =[    $walk7 ,    dog_walk8    ] {ai_walk(8);};
  522. +void() dog_walk8    =[    $walk8 ,    dog_walk1    ] {ai_walk(8);};
  523. +
  524. +void() dog_run1        =[    $run1  ,    dog_run2    ] {
  525. +if (random() < 0.2)
  526. +    sound (self, CHAN_VOICE, "dog/idle.wav", 1, ATTN_IDLE);
  527. +ai_run(16);};
  528. +void() dog_run2        =[    $run2  ,    dog_run3    ] {ai_run(32);};
  529. +void() dog_run3        =[    $run3  ,    dog_run4    ] {ai_run(32);};
  530. +void() dog_run4        =[    $run4  ,    dog_run5    ] {ai_run(20);};
  531. +void() dog_run5        =[    $run5  ,    dog_run6    ] {ai_run(64);};
  532. +void() dog_run6        =[    $run6  ,    dog_run7    ] {ai_run(32);};
  533. +void() dog_run7        =[    $run7  ,    dog_run8    ] {ai_run(16);};
  534. +void() dog_run8        =[    $run8  ,    dog_run9    ] {ai_run(32);};
  535. +void() dog_run9        =[    $run9  ,    dog_run10    ] {ai_run(32);};
  536. +void() dog_run10    =[    $run10  ,    dog_run11    ] {ai_run(20);};
  537. +void() dog_run11    =[    $run11  ,    dog_run12    ] {ai_run(64);};
  538. +void() dog_run12    =[    $run12  ,    dog_run1    ] {ai_run(32);};
  539. +
  540. +void() dog_atta1    =[    $attack1,    dog_atta2    ] {ai_charge(10);};
  541. +void() dog_atta2    =[    $attack2,    dog_atta3    ] {ai_charge(10);};
  542. +void() dog_atta3    =[    $attack3,    dog_atta4    ] {ai_charge(10);};
  543. +void() dog_atta4    =[    $attack4,    dog_atta5    ] {
  544. +sound (self, CHAN_VOICE, "dog/dattack1.wav", 1, ATTN_NORM);
  545. +dog_bite();};
  546. +void() dog_atta5    =[    $attack5,    dog_atta6    ] {ai_charge(10);};
  547. +void() dog_atta6    =[    $attack6,    dog_atta7    ] {ai_charge(10);};
  548. +void() dog_atta7    =[    $attack7,    dog_atta8    ] {ai_charge(10);};
  549. +void() dog_atta8    =[    $attack8,    dog_run1    ] {ai_charge(10);};
  550. +
  551. +void() dog_leap1    =[    $leap1,        dog_leap2    ] {ai_face();};
  552. +void() dog_leap2    =[    $leap2,        dog_leap3    ]
  553. +{
  554. +    ai_face();
  555. +    
  556. +    self.touch = Dog_JumpTouch;
  557. +    makevectors (self.angles);
  558. +    self.origin_z = self.origin_z + 1;
  559. +    self.velocity = v_forward * 300 + '0 0 200';
  560. +    if (self.flags & FL_ONGROUND)
  561. +        self.flags = self.flags - FL_ONGROUND;
  562. +};
  563. +
  564. +void() dog_leap3    =[    $leap3,        dog_leap4    ] {};
  565. +void() dog_leap4    =[    $leap4,        dog_leap5    ] {};
  566. +void() dog_leap5    =[    $leap5,        dog_leap6    ] {};
  567. +void() dog_leap6    =[    $leap6,        dog_leap7    ] {};
  568. +void() dog_leap7    =[    $leap7,        dog_leap8    ] {};
  569. +void() dog_leap8    =[    $leap8,        dog_leap9    ] {};
  570. +void() dog_leap9    =[    $leap9,        dog_leap9    ] {};
  571. +
  572. +void() dog_pain1    =[    $pain1 ,    dog_pain2    ] {};
  573. +void() dog_pain2    =[    $pain2 ,    dog_pain3    ] {};
  574. +void() dog_pain3    =[    $pain3 ,    dog_pain4    ] {};
  575. +void() dog_pain4    =[    $pain4 ,    dog_pain5    ] {};
  576. +void() dog_pain5    =[    $pain5 ,    dog_pain6    ] {};
  577. +void() dog_pain6    =[    $pain6 ,    dog_run1    ] {};
  578. +
  579. +void() dog_painb1    =[    $painb1 ,    dog_painb2    ] {};
  580. +void() dog_painb2    =[    $painb2 ,    dog_painb3    ] {};
  581. +void() dog_painb3    =[    $painb3 ,    dog_painb4    ] {ai_pain(4);};
  582. +void() dog_painb4    =[    $painb4 ,    dog_painb5    ] {ai_pain(12);};
  583. +void() dog_painb5    =[    $painb5 ,    dog_painb6    ] {ai_pain(12);};
  584. +void() dog_painb6    =[    $painb6 ,    dog_painb7    ] {ai_pain(2);};
  585. +void() dog_painb7    =[    $painb7 ,    dog_painb8    ] {};
  586. +void() dog_painb8    =[    $painb8 ,    dog_painb9    ] {ai_pain(4);};
  587. +void() dog_painb9    =[    $painb9 ,    dog_painb10    ] {};
  588. +void() dog_painb10    =[    $painb10 ,    dog_painb11    ] {ai_pain(10);};
  589. +void() dog_painb11    =[    $painb11 ,    dog_painb12    ] {};
  590. +void() dog_painb12    =[    $painb12 ,    dog_painb13    ] {};
  591. +void() dog_painb13    =[    $painb13 ,    dog_painb14    ] {};
  592. +void() dog_painb14    =[    $painb14 ,    dog_painb15    ] {};
  593. +void() dog_painb15    =[    $painb15 ,    dog_painb16    ] {};
  594. +void() dog_painb16    =[    $painb16 ,    dog_run1    ] {};
  595. +
  596. +void() dog_pain =
  597. +{
  598. +    sound (self, CHAN_VOICE, "dog/dpain1.wav", 1, ATTN_NORM);
  599. +
  600. +    if (random() > 0.5)
  601. +        dog_pain1 ();
  602. +    else
  603. +        dog_painb1 ();
  604. +};
  605. +
  606. +void() dog_die1        =[    $death1,    dog_die2    ] {};
  607. +void() dog_die2        =[    $death2,    dog_die3    ] {};
  608. +void() dog_die3        =[    $death3,    dog_die4    ] {};
  609. +void() dog_die4        =[    $death4,    dog_die5    ] {};
  610. +void() dog_die5        =[    $death5,    dog_die6    ] {};
  611. +void() dog_die6        =[    $death6,    dog_die7    ] {};
  612. +void() dog_die7        =[    $death7,    dog_die8    ] {};
  613. +void() dog_die8        =[    $death8,    dog_die9    ] {};
  614. +void() dog_die9        =[    $death9,    dog_die9    ] {};
  615. +
  616. +void() dog_dieb1        =[    $deathb1,    dog_dieb2    ] {};
  617. +void() dog_dieb2        =[    $deathb2,    dog_dieb3    ] {};
  618. +void() dog_dieb3        =[    $deathb3,    dog_dieb4    ] {};
  619. +void() dog_dieb4        =[    $deathb4,    dog_dieb5    ] {};
  620. +void() dog_dieb5        =[    $deathb5,    dog_dieb6    ] {};
  621. +void() dog_dieb6        =[    $deathb6,    dog_dieb7    ] {};
  622. +void() dog_dieb7        =[    $deathb7,    dog_dieb8    ] {};
  623. +void() dog_dieb8        =[    $deathb8,    dog_dieb9    ] {};
  624. +void() dog_dieb9        =[    $deathb9,    dog_dieb9    ] {};
  625. +
  626. +void() dog_die =
  627. +{
  628. +// check for gib
  629. +    if (self.health < -35)
  630. +    {
  631. +                sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  632. +        monster_gib("progs/h_dog.mdl");
  633. +        return;
  634. +    }
  635. +
  636. +// regular death
  637. +    sound (self, CHAN_VOICE, "dog/ddeath.wav", 1, ATTN_NORM);
  638. +    //self.solid = SOLID_NOT;
  639. +
  640. +    if (random() > 0.5)
  641. +        dog_die1 ();
  642. +    else
  643. +        dog_dieb1 ();
  644. +
  645. +// We want a corpse:  No actions, a little health, and a new .th_die
  646. +// Frob some flags so we're damagable as well
  647. +
  648. +    monster_corpse_setup('-32 -32 -24', '32 32 -12',"progs/h_dog.mdl"); 
  649. +};
  650. +
  651. +//============================================================================
  652. +
  653. +/*
  654. +==============
  655. +CheckDogMelee
  656. +
  657. +Returns TRUE if a melee attack would hit right now
  658. +==============
  659. +*/
  660. +float()    CheckDogMelee =
  661. +{
  662. +    if (enemy_range == RANGE_MELEE)
  663. +    {    // FIXME: check canreach
  664. +        self.attack_state = AS_MELEE;
  665. +        return TRUE;
  666. +    }
  667. +    return FALSE;
  668. +};
  669. +
  670. +/*
  671. +==============
  672. +CheckDogJump
  673. +
  674. +==============
  675. +*/
  676. +float()    CheckDogJump =
  677. +{
  678. +    local    vector    dist;
  679. +    local    float    d;
  680. +
  681. +    if (self.origin_z + self.mins_z > self.enemy.origin_z + self.enemy.mins_z
  682. +    + 0.75 * self.enemy.size_z)
  683. +        return FALSE;
  684. +        
  685. +    if (self.origin_z + self.maxs_z < self.enemy.origin_z + self.enemy.mins_z
  686. +    + 0.25 * self.enemy.size_z)
  687. +        return FALSE;
  688. +        
  689. +    dist = self.enemy.origin - self.origin;
  690. +    dist_z = 0;
  691. +    
  692. +    d = vlen(dist);
  693. +    
  694. +    if (d < 80)
  695. +        return FALSE;
  696. +        
  697. +    if (d > 150)
  698. +        return FALSE;
  699. +        
  700. +    return TRUE;
  701. +};
  702. +
  703. +float()    DogCheckAttack =
  704. +{
  705. +    local    vector    vec;
  706. +    
  707. +// if close enough for slashing, go for it
  708. +    if (CheckDogMelee ())
  709. +    {
  710. +        self.attack_state = AS_MELEE;
  711. +        return TRUE;
  712. +    }
  713. +    
  714. +    if (CheckDogJump ())
  715. +    {
  716. +        self.attack_state = AS_MISSILE;
  717. +        return TRUE;
  718. +    }
  719. +    
  720. +    return FALSE;
  721. +};
  722. +
  723. +
  724. +//===========================================================================
  725. +
  726. +/*QUAKED monster_dog (1 0 0) (-32 -32 -24) (32 32 40) Ambush
  727. +
  728. +*/
  729. +void() monster_dog =
  730. +{
  731. +    if (deathmatch)
  732. +    {
  733. +        remove(self);
  734. +        return;
  735. +    }
  736. +    precache_model ("progs/h_dog.mdl");
  737. +    precache_model ("progs/dog.mdl");
  738. +
  739. +    precache_sound ("dog/dattack1.wav");
  740. +    precache_sound ("dog/ddeath.wav");
  741. +    precache_sound ("dog/dpain1.wav");
  742. +    precache_sound ("dog/dsight.wav");
  743. +    precache_sound ("dog/idle.wav");
  744. +
  745. +    self.solid = SOLID_SLIDEBOX;
  746. +    self.movetype = MOVETYPE_STEP;
  747. +
  748. +    setmodel (self, "progs/dog.mdl");
  749. +
  750. +    setsize (self, '-32 -32 -24', '32 32 40');
  751. +    self.health = 25;
  752. +
  753. +    self.th_stand = dog_stand1;
  754. +    self.th_walk = dog_walk1;
  755. +    self.th_run = dog_run1;
  756. +    self.th_pain = dog_pain;
  757. +    self.th_die = dog_die;
  758. +    self.th_melee = dog_atta1;
  759. +    self.th_missile = dog_leap1;
  760. +
  761. +    walkmonster_start();
  762. +};
  763. diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/enforcer.qc solidmn/enforcer.qc
  764. --- v101qc/enforcer.qc    Thu Jul 25 01:51:22 1996
  765. +++ solidmn/enforcer.qc    Wed Jul 31 22:12:10 1996
  766. @@ -256,7 +256,7 @@
  767.  void()    enf_die1    =[    $death1,    enf_die2    ] {};
  768.  void()    enf_die2    =[    $death2,    enf_die3    ] {};
  769.  void()    enf_die3    =[    $death3,    enf_die4    ]
  770. -{self.solid = SOLID_NOT;self.ammo_cells = 5;DropBackpack();};
  771. +{self.ammo_cells = 5;DropBackpack();};
  772.  void()    enf_die4    =[    $death4,    enf_die5    ] {ai_forward(14);};
  773.  void()    enf_die5    =[    $death5,    enf_die6    ] {ai_forward(2);};
  774.  void()    enf_die6    =[    $death6,    enf_die7    ] {};
  775. @@ -274,7 +274,7 @@
  776.  };
  777.  void()    enf_fdie2    =[    $fdeath2,    enf_fdie3    ] {};
  778.  void()    enf_fdie3    =[    $fdeath3,    enf_fdie4    ] 
  779. -{self.solid = SOLID_NOT;self.ammo_cells = 5;DropBackpack();};
  780. +{self.ammo_cells = 5;DropBackpack();};
  781.  void()    enf_fdie4    =[    $fdeath4,    enf_fdie5    ] {};
  782.  void()    enf_fdie5    =[    $fdeath5,    enf_fdie6    ] {};
  783.  void()    enf_fdie6    =[    $fdeath6,    enf_fdie7    ] {};
  784. @@ -284,17 +284,13 @@
  785.  void()    enf_fdie10    =[    $fdeath10,    enf_fdie11    ] {};
  786.  void()    enf_fdie11    =[    $fdeath11,    enf_fdie11    ] {};
  787.  
  788. -
  789.  void() enf_die =
  790.  {
  791.  // check for gib
  792.      if (self.health < -35)
  793.      {
  794.          sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  795. -        ThrowHead ("progs/h_mega.mdl", self.health);
  796. -        ThrowGib ("progs/gib1.mdl", self.health);
  797. -        ThrowGib ("progs/gib2.mdl", self.health);
  798. -        ThrowGib ("progs/gib3.mdl", self.health);
  799. +        monster_gib("h/mega.mdl");
  800.          return;
  801.      }
  802.  
  803. @@ -304,6 +300,8 @@
  804.          enf_die1 ();
  805.      else
  806.          enf_fdie1 ();
  807. +
  808. +    monster_corpse_setup('-16 -16 -24', '16 16 -8', "progs/h_mega.mdl");
  809.  };
  810.  
  811.  
  812. diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/hknight.qc solidmn/hknight.qc
  813. --- v101qc/hknight.qc    Thu Jul 25 01:51:23 1996
  814. +++ solidmn/hknight.qc    Wed Jul 31 22:22:00 1996
  815. @@ -175,7 +175,7 @@
  816.  void()    hknight_die1    =[    $death1,    hknight_die2    ] {ai_forward(10);};
  817.  void()    hknight_die2    =[    $death2,    hknight_die3    ] {ai_forward(8);};
  818.  void()    hknight_die3    =[    $death3,    hknight_die4    ]
  819. -{self.solid = SOLID_NOT; ai_forward(7);};
  820. +{ai_forward(7);};
  821.  void()    hknight_die4    =[    $death4,    hknight_die5    ] {};
  822.  void()    hknight_die5    =[    $death5,    hknight_die6    ] {};
  823.  void()    hknight_die6    =[    $death6,    hknight_die7    ] {};
  824. @@ -189,7 +189,7 @@
  825.  void()    hknight_dieb1    =[    $deathb1,    hknight_dieb2    ] {};
  826.  void()    hknight_dieb2    =[    $deathb2,    hknight_dieb3    ] {};
  827.  void()    hknight_dieb3    =[    $deathb3,    hknight_dieb4    ]
  828. -{self.solid = SOLID_NOT;};
  829. +{};
  830.  void()    hknight_dieb4    =[    $deathb4,    hknight_dieb5    ] {};
  831.  void()    hknight_dieb5    =[    $deathb5,    hknight_dieb6    ] {};
  832.  void()    hknight_dieb6    =[    $deathb6,    hknight_dieb7    ] {};
  833. @@ -203,10 +203,7 @@
  834.      if (self.health < -40)
  835.      {
  836.          sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  837. -        ThrowHead ("progs/h_hellkn.mdl", self.health);
  838. -        ThrowGib ("progs/gib1.mdl", self.health);
  839. -        ThrowGib ("progs/gib2.mdl", self.health);
  840. -        ThrowGib ("progs/gib3.mdl", self.health);
  841. +        monster_gib("progs/h_hellkn.mdl");
  842.          return;
  843.      }
  844.  
  845. @@ -216,6 +213,7 @@
  846.          hknight_die1 ();
  847.      else
  848.          hknight_dieb1 ();
  849. +    monster_corpse_setup ( '-16 -16 -24', '16 16 -12', "progs/h_hellkn.mdl");
  850.  };
  851.  
  852.  
  853. diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/jsubs.qc solidmn/jsubs.qc
  854. --- v101qc/jsubs.qc    Wed Dec 31 18:00:00 1969
  855. +++ solidmn/jsubs.qc    Tue Jul 30 22:34:23 1996
  856. @@ -0,0 +1,18 @@
  857. +void(string gibname, float dm) ThrowGib;
  858. +float() random;
  859. +
  860. +void() SUB_Gib =
  861. +{
  862. +    local vector x,y,v;
  863. +    x='1 0 0';
  864. +    y='0 1 0';
  865. +    v=x*(50-random()*100)+y*(50-random()*100);
  866. +    if (random() < 0.8)  // Meat spray only, most of the time
  867. +        SpawnMeatSpray(self.origin, v);
  868. +        else if (random() < 0.3)
  869. +                ThrowGib("progs/gib1.mdl", self.health);
  870. +        else if (random() < 0.5)
  871. +                ThrowGib("progs/gib2.mdl", self.health);
  872. +        else
  873. +                ThrowGib("progs/gib3.mdl", self.health);
  874. +};
  875. diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/knight.qc solidmn/knight.qc
  876. --- v101qc/knight.qc    Thu Jul 25 01:51:23 1996
  877. +++ solidmn/knight.qc    Wed Jul 31 22:16:25 1996
  878. @@ -186,7 +186,7 @@
  879.  void()    knight_die1    =[    $death1,    knight_die2    ] {};
  880.  void()    knight_die2    =[    $death2,    knight_die3    ] {};
  881.  void()    knight_die3    =[    $death3,    knight_die4    ] 
  882. -{self.solid = SOLID_NOT;};
  883. +{};
  884.  void()    knight_die4    =[    $death4,    knight_die5    ] {};
  885.  void()    knight_die5    =[    $death5,    knight_die6    ] {};
  886.  void()    knight_die6    =[    $death6,    knight_die7    ] {};
  887. @@ -199,7 +199,7 @@
  888.  void()    knight_dieb1    =[    $deathb1,    knight_dieb2    ] {};
  889.  void()    knight_dieb2    =[    $deathb2,    knight_dieb3    ] {};
  890.  void()    knight_dieb3    =[    $deathb3,    knight_dieb4    ]     
  891. -{self.solid = SOLID_NOT;};
  892. +{};
  893.  void()    knight_dieb4    =[    $deathb4,    knight_dieb5    ] {};
  894.  void()    knight_dieb5    =[    $deathb5,    knight_dieb6    ] {};
  895.  void()    knight_dieb6    =[    $deathb6,    knight_dieb7    ] {};
  896. @@ -209,17 +209,13 @@
  897.  void()    knight_dieb10 = [    $deathb10,    knight_dieb11] {};
  898.  void()    knight_dieb11 = [    $deathb11,    knight_dieb11] {};
  899.  
  900. -
  901.  void() knight_die =
  902.  {
  903.  // check for gib
  904.      if (self.health < -40)
  905.      {
  906.          sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  907. -        ThrowHead ("progs/h_knight.mdl", self.health);
  908. -        ThrowGib ("progs/gib1.mdl", self.health);
  909. -        ThrowGib ("progs/gib2.mdl", self.health);
  910. -        ThrowGib ("progs/gib3.mdl", self.health);
  911. +        monster_gib("progs/h_knight.mdl");
  912.          return;
  913.      }
  914.  
  915. @@ -229,6 +225,7 @@
  916.          knight_die1 ();
  917.      else
  918.          knight_dieb1 ();
  919. +    monster_corpse_setup('-16 -16 -24', '16 16 -12', "progs/h_knight.mdl");
  920.  };
  921.  
  922.  
  923. diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/monsters.qc solidmn/monsters.qc
  924. --- v101qc/monsters.qc    Thu Jul 25 01:51:23 1996
  925. +++ solidmn/monsters.qc    Wed Jul 31 22:37:54 1996
  926. @@ -38,6 +38,44 @@
  927.      self.think = FoundTarget;
  928.  };
  929.  
  930. +void() monster_dead_push =
  931. +{
  932. +    local float dir;
  933. +    dir = vectoyaw(other.velocity);
  934. +    self.origin = self.origin + '0 0 1'; // Now we can be lifted, pushed off ledges, &c
  935. +    walkmove(dir, 7);
  936. +};
  937. +
  938. +void(string headmdl) monster_gib =
  939. +{
  940. +    ThrowGib ("progs/gib3.mdl", self.health);
  941. +    ThrowGib ("progs/gib3.mdl", self.health);
  942. +    ThrowGib ("progs/gib3.mdl", self.health);
  943. +    ThrowHead (headmdl, self.health);
  944. +};
  945. +    
  946. +void() monster_corpse_gib =
  947. +{
  948. +    monster_gib(self.weaponmodel);
  949. +};
  950. +
  951. +void(vector bb1, vector bb2, string headmdl) monster_corpse_setup =
  952. +{
  953. +    setsize(self, bb1, bb2);
  954. +    self.weaponmodel=headmdl; // This should be unused in monsters
  955. +    self.health=35;
  956. +    self.th_stand = SUB_Null;
  957. +    self.th_walk = SUB_Null;
  958. +    self.th_run = SUB_Null;
  959. +        self.th_pain = SUB_Gib;
  960. +        self.th_die = monster_corpse_gib;
  961. +    self.th_melee = SUB_Null;
  962. +    self.th_missile = SUB_Null;
  963. +    // self.touch = monster_dead_push; // This does funny things
  964. +    self.takedamage= DAMAGE_AIM; // grenades explode 
  965. +    self.flags = self.flags &! FL_MONSTER;  // Next "death" isn't counted
  966. +};
  967. +
  968.  /*
  969.  ================
  970.  monster_death_use
  971. diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/ogre.qc solidmn/ogre.qc
  972. --- v101qc/ogre.qc    Thu Jul 25 01:51:23 1996
  973. +++ solidmn/ogre.qc    Wed Jul 31 22:21:37 1996
  974. @@ -354,8 +354,7 @@
  975.  void()    ogre_die1    =[    $death1,    ogre_die2    ] {};
  976.  void()    ogre_die2    =[    $death2,    ogre_die3    ] {};
  977.  void()    ogre_die3    =[    $death3,    ogre_die4    ]
  978. -{self.solid = SOLID_NOT;
  979. -self.ammo_rockets = 2;DropBackpack();};
  980. +{ self.ammo_rockets = 2;DropBackpack();};
  981.  void()    ogre_die4    =[    $death4,    ogre_die5    ] {};
  982.  void()    ogre_die5    =[    $death5,    ogre_die6    ] {};
  983.  void()    ogre_die6    =[    $death6,    ogre_die7    ] {};
  984. @@ -371,8 +370,7 @@
  985.  void()    ogre_bdie1    =[    $bdeath1,    ogre_bdie2    ] {};
  986.  void()    ogre_bdie2    =[    $bdeath2,    ogre_bdie3    ] {ai_forward(5);};
  987.  void()    ogre_bdie3    =[    $bdeath3,    ogre_bdie4    ]
  988. -{self.solid = SOLID_NOT;
  989. -self.ammo_rockets = 2;DropBackpack();};
  990. +{self.ammo_rockets = 2;DropBackpack();};
  991.  void()    ogre_bdie4    =[    $bdeath4,    ogre_bdie5    ] {ai_forward(1);};
  992.  void()    ogre_bdie5    =[    $bdeath5,    ogre_bdie6    ] {ai_forward(3);};
  993.  void()    ogre_bdie6    =[    $bdeath6,    ogre_bdie7    ] {ai_forward(7);};
  994. @@ -387,10 +385,7 @@
  995.      if (self.health < -80)
  996.      {
  997.          sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  998. -        ThrowHead ("progs/h_ogre.mdl", self.health);
  999. -        ThrowGib ("progs/gib3.mdl", self.health);
  1000. -        ThrowGib ("progs/gib3.mdl", self.health);
  1001. -        ThrowGib ("progs/gib3.mdl", self.health);
  1002. +        monster_gib("progs/h_ogre.mdl");
  1003.          return;
  1004.      }
  1005.  
  1006. @@ -400,6 +395,10 @@
  1007.          ogre_die1 ();
  1008.      else
  1009.          ogre_bdie1 ();
  1010. +// We want a corpse:  No actions, a little health, and a new .th_die
  1011. +// Frob some flags so we're damagable as well
  1012. +
  1013. +    monster_corpse_setup('-16 -16 -24', '16 16 -8', "progs/h_ogre.mdl");
  1014.  };
  1015.  
  1016.  void() ogre_melee =
  1017. diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/progs.src solidmn/progs.src
  1018. --- v101qc/progs.src    Wed Jul 31 21:15:26 1996
  1019. +++ solidmn/progs.src    Wed Jul 31 21:24:22 1996
  1020. @@ -1,35 +1,36 @@
  1021. -progs.dat
  1022. -
  1023. -defs.qc
  1024. -subs.qc
  1025. -fight.qc
  1026. -ai.qc
  1027. -combat.qc
  1028. -items.qc
  1029. -weapons.qc
  1030. -world.qc
  1031. -client.qc
  1032. -player.qc
  1033. -monsters.qc
  1034. -doors.qc
  1035. -buttons.qc
  1036. -triggers.qc
  1037. -plats.qc
  1038. -misc.qc
  1039. -
  1040. -ogre.qc
  1041. -demon.qc
  1042. -shambler.qc
  1043. -knight.qc
  1044. -soldier.qc
  1045. -wizard.qc
  1046. -dog.qc
  1047. -zombie.qc
  1048. -boss.qc
  1049. -
  1050. -tarbaby.qc        // registered
  1051. -hknight.qc        // registered
  1052. -fish.qc            // registered
  1053. -shalrath.qc        // registered
  1054. -enforcer.qc        // registered
  1055. -oldone.qc        // registered
  1056. +progs.dat
  1057. +
  1058. +defs.qc
  1059. +subs.qc
  1060. +fight.qc
  1061. +ai.qc
  1062. +combat.qc
  1063. +items.qc
  1064. +weapons.qc
  1065. +world.qc
  1066. +client.qc
  1067. +player.qc
  1068. +jsubs.qc
  1069. +monsters.qc
  1070. +doors.qc
  1071. +buttons.qc
  1072. +triggers.qc
  1073. +plats.qc
  1074. +misc.qc
  1075. +
  1076. +ogre.qc
  1077. +demon.qc
  1078. +shambler.qc
  1079. +knight.qc
  1080. +soldier.qc
  1081. +wizard.qc
  1082. +dog.qc
  1083. +zombie.qc
  1084. +boss.qc
  1085. +
  1086. +tarbaby.qc        // registered
  1087. +hknight.qc        // registered
  1088. +fish.qc            // registered
  1089. +shalrath.qc        // registered
  1090. +enforcer.qc        // registered
  1091. +oldone.qc        // registered
  1092. diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/shalrath.qc solidmn/shalrath.qc
  1093. --- v101qc/shalrath.qc    Thu Jul 25 01:51:23 1996
  1094. +++ solidmn/shalrath.qc    Wed Jul 31 22:21:41 1996
  1095. @@ -103,17 +103,15 @@
  1096.      if (self.health < -90)
  1097.      {
  1098.          sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  1099. -        ThrowHead ("progs/h_shal.mdl", self.health);
  1100. -        ThrowGib ("progs/gib1.mdl", self.health);
  1101. -        ThrowGib ("progs/gib2.mdl", self.health);
  1102. -        ThrowGib ("progs/gib3.mdl", self.health);
  1103. +        monster_gib("progs/h_shal.mdl");
  1104.          return;
  1105.      }
  1106.  
  1107.      sound (self, CHAN_VOICE, "shalrath/death.wav", 1, ATTN_NORM);
  1108.      shal_death1();
  1109. -    self.solid = SOLID_NOT;
  1110. +    // self.solid = SOLID_NOT;
  1111.      // insert death sounds here
  1112. +    monster_corpse_setup('-16 -16 -24', '16 16 -10', "progs/h_shal.mdl");
  1113.  };
  1114.  
  1115.  /*
  1116. diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/shambler.qc solidmn/shambler.qc
  1117. --- v101qc/shambler.qc    Thu Jul 25 01:51:24 1996
  1118. +++ solidmn/shambler.qc    Wed Jul 31 22:21:46 1996
  1119. @@ -293,7 +293,7 @@
  1120.  
  1121.  void() sham_death1      =[      $death1,       sham_death2     ] {};
  1122.  void() sham_death2      =[      $death2,       sham_death3     ] {};
  1123. -void() sham_death3      =[      $death3,       sham_death4     ] {self.solid = SOLID_NOT;};
  1124. +void() sham_death3      =[      $death3,       sham_death4     ] {};
  1125.  void() sham_death4      =[      $death4,       sham_death5     ] {};
  1126.  void() sham_death5      =[      $death5,       sham_death6     ] {};
  1127.  void() sham_death6      =[      $death6,       sham_death7     ] {};
  1128. @@ -309,16 +309,15 @@
  1129.      if (self.health < -60)
  1130.      {
  1131.          sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  1132. -        ThrowHead ("progs/h_shams.mdl", self.health);
  1133. -        ThrowGib ("progs/gib1.mdl", self.health);
  1134. -        ThrowGib ("progs/gib2.mdl", self.health);
  1135. -        ThrowGib ("progs/gib3.mdl", self.health);
  1136. +        monster_gib("progs/h_shams.mdl");
  1137.          return;
  1138.      }
  1139.  
  1140.  // regular death
  1141.      sound (self, CHAN_VOICE, "shambler/sdeath.wav", 1, ATTN_NORM);
  1142.      sham_death1 ();
  1143. +        self.health=300;
  1144. +    monster_corpse_setup ('-16 -16 -24', '42 42 -4', "progs/h_shams.mdl");
  1145.  };
  1146.  
  1147.  //============================================================================
  1148. diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/soldier.qc solidmn/soldier.qc
  1149. --- v101qc/soldier.qc    Thu Jul 25 01:51:24 1996
  1150. +++ solidmn/soldier.qc    Wed Jul 31 22:31:32 1996
  1151. @@ -1,284 +1,285 @@
  1152. -/*
  1153. -==============================================================================
  1154. -
  1155. -SOLDIER / PLAYER
  1156. -
  1157. -==============================================================================
  1158. -*/
  1159. -
  1160. -$cd /raid/quake/id1/models/soldier3
  1161. -$origin 0 -6 24
  1162. -$base base        
  1163. -$skin skin
  1164. -
  1165. -$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8
  1166. -
  1167. -$frame death1 death2 death3 death4 death5 death6 death7 death8
  1168. -$frame death9 death10
  1169. -
  1170. -$frame deathc1 deathc2 deathc3 deathc4 deathc5 deathc6 deathc7 deathc8
  1171. -$frame deathc9 deathc10 deathc11
  1172. -
  1173. -$frame load1 load2 load3 load4 load5 load6 load7 load8 load9 load10 load11
  1174. -
  1175. -$frame pain1 pain2 pain3 pain4 pain5 pain6
  1176. -
  1177. -$frame painb1 painb2 painb3 painb4 painb5 painb6 painb7 painb8 painb9 painb10
  1178. -$frame painb11 painb12 painb13 painb14
  1179. -
  1180. -$frame painc1 painc2 painc3 painc4 painc5 painc6 painc7 painc8 painc9 painc10
  1181. -$frame painc11 painc12 painc13
  1182. -
  1183. -$frame run1 run2 run3 run4 run5 run6 run7 run8
  1184. -
  1185. -$frame shoot1 shoot2 shoot3 shoot4 shoot5 shoot6 shoot7 shoot8 shoot9
  1186. -
  1187. -$frame prowl_1 prowl_2 prowl_3 prowl_4 prowl_5 prowl_6 prowl_7 prowl_8
  1188. -$frame prowl_9 prowl_10 prowl_11 prowl_12 prowl_13 prowl_14 prowl_15 prowl_16
  1189. -$frame prowl_17 prowl_18 prowl_19 prowl_20 prowl_21 prowl_22 prowl_23 prowl_24
  1190. -
  1191. -/*
  1192. -==============================================================================
  1193. -SOLDIER CODE
  1194. -==============================================================================
  1195. -*/
  1196. -
  1197. -void() army_fire;
  1198. -
  1199. -void()    army_stand1    =[    $stand1,    army_stand2    ] {ai_stand();};
  1200. -void()    army_stand2    =[    $stand2,    army_stand3    ] {ai_stand();};
  1201. -void()    army_stand3    =[    $stand3,    army_stand4    ] {ai_stand();};
  1202. -void()    army_stand4    =[    $stand4,    army_stand5    ] {ai_stand();};
  1203. -void()    army_stand5    =[    $stand5,    army_stand6    ] {ai_stand();};
  1204. -void()    army_stand6    =[    $stand6,    army_stand7    ] {ai_stand();};
  1205. -void()    army_stand7    =[    $stand7,    army_stand8    ] {ai_stand();};
  1206. -void()    army_stand8    =[    $stand8,    army_stand1    ] {ai_stand();};
  1207. -
  1208. -void()    army_walk1    =[    $prowl_1,    army_walk2    ] {
  1209. -if (random() < 0.2)
  1210. -    sound (self, CHAN_VOICE, "soldier/idle.wav", 1, ATTN_IDLE);
  1211. -ai_walk(1);};
  1212. -void()    army_walk2    =[    $prowl_2,    army_walk3    ] {ai_walk(1);};
  1213. -void()    army_walk3    =[    $prowl_3,    army_walk4    ] {ai_walk(1);};
  1214. -void()    army_walk4    =[    $prowl_4,    army_walk5    ] {ai_walk(1);};
  1215. -void()    army_walk5    =[    $prowl_5,    army_walk6    ] {ai_walk(2);};
  1216. -void()    army_walk6    =[    $prowl_6,    army_walk7    ] {ai_walk(3);};
  1217. -void()    army_walk7    =[    $prowl_7,    army_walk8    ] {ai_walk(4);};
  1218. -void()    army_walk8    =[    $prowl_8,    army_walk9    ] {ai_walk(4);};
  1219. -void()    army_walk9    =[    $prowl_9,    army_walk10    ] {ai_walk(2);};
  1220. -void()    army_walk10    =[    $prowl_10,    army_walk11    ] {ai_walk(2);};
  1221. -void()    army_walk11    =[    $prowl_11,    army_walk12    ] {ai_walk(2);};
  1222. -void()    army_walk12    =[    $prowl_12,    army_walk13    ] {ai_walk(1);};
  1223. -void()    army_walk13    =[    $prowl_13,    army_walk14    ] {ai_walk(0);};
  1224. -void()    army_walk14    =[    $prowl_14,    army_walk15    ] {ai_walk(1);};
  1225. -void()    army_walk15    =[    $prowl_15,    army_walk16    ] {ai_walk(1);};
  1226. -void()    army_walk16    =[    $prowl_16,    army_walk17    ] {ai_walk(1);};
  1227. -void()    army_walk17    =[    $prowl_17,    army_walk18    ] {ai_walk(3);};
  1228. -void()    army_walk18    =[    $prowl_18,    army_walk19    ] {ai_walk(3);};
  1229. -void()    army_walk19    =[    $prowl_19,    army_walk20    ] {ai_walk(3);};
  1230. -void()    army_walk20    =[    $prowl_20,    army_walk21    ] {ai_walk(3);};
  1231. -void()    army_walk21    =[    $prowl_21,    army_walk22    ] {ai_walk(2);};
  1232. -void()    army_walk22    =[    $prowl_22,    army_walk23    ] {ai_walk(1);};
  1233. -void()    army_walk23    =[    $prowl_23,    army_walk24    ] {ai_walk(1);};
  1234. -void()    army_walk24    =[    $prowl_24,    army_walk1    ] {ai_walk(1);};
  1235. -
  1236. -void()    army_run1    =[    $run1,        army_run2    ] {
  1237. -if (random() < 0.2)
  1238. -    sound (self, CHAN_VOICE, "soldier/idle.wav", 1, ATTN_IDLE);
  1239. -ai_run(11);};
  1240. -void()    army_run2    =[    $run2,        army_run3    ] {ai_run(15);};
  1241. -void()    army_run3    =[    $run3,        army_run4    ] {ai_run(10);};
  1242. -void()    army_run4    =[    $run4,        army_run5    ] {ai_run(10);};
  1243. -void()    army_run5    =[    $run5,        army_run6    ] {ai_run(8);};
  1244. -void()    army_run6    =[    $run6,        army_run7    ] {ai_run(15);};
  1245. -void()    army_run7    =[    $run7,        army_run8    ] {ai_run(10);};
  1246. -void()    army_run8    =[    $run8,        army_run1    ] {ai_run(8);};
  1247. -
  1248. -void()    army_atk1    =[    $shoot1,    army_atk2    ] {ai_face();};
  1249. -void()    army_atk2    =[    $shoot2,    army_atk3    ] {ai_face();};
  1250. -void()    army_atk3    =[    $shoot3,    army_atk4    ] {ai_face();};
  1251. -void()    army_atk4    =[    $shoot4,    army_atk5    ] {ai_face();};
  1252. -void()    army_atk5    =[    $shoot5,    army_atk6    ] {ai_face();army_fire();
  1253. -self.effects = self.effects | EF_MUZZLEFLASH;};
  1254. -void()    army_atk6    =[    $shoot6,    army_atk7    ] {ai_face();};
  1255. -void()    army_atk7    =[    $shoot7,    army_atk8    ] {ai_face();SUB_CheckRefire (army_atk1);};
  1256. -void()    army_atk8    =[    $shoot8,    army_atk9    ] {ai_face();};
  1257. -void()    army_atk9    =[    $shoot9,    army_run1    ] {ai_face();};
  1258. -
  1259. -
  1260. -void()    army_pain1    =[    $pain1,        army_pain2    ] {};
  1261. -void()    army_pain2    =[    $pain2,        army_pain3    ] {};
  1262. -void()    army_pain3    =[    $pain3,        army_pain4    ] {};
  1263. -void()    army_pain4    =[    $pain4,        army_pain5    ] {};
  1264. -void()    army_pain5    =[    $pain5,        army_pain6    ] {};
  1265. -void()    army_pain6    =[    $pain6,        army_run1    ] {ai_pain(1);};
  1266. -
  1267. -void()    army_painb1    =[    $painb1,    army_painb2    ] {};
  1268. -void()    army_painb2    =[    $painb2,    army_painb3    ] {ai_painforward(13);};
  1269. -void()    army_painb3    =[    $painb3,    army_painb4    ] {ai_painforward(9);};
  1270. -void()    army_painb4    =[    $painb4,    army_painb5    ] {};
  1271. -void()    army_painb5    =[    $painb5,    army_painb6    ] {};
  1272. -void()    army_painb6    =[    $painb6,    army_painb7    ] {};
  1273. -void()    army_painb7    =[    $painb7,    army_painb8    ] {};
  1274. -void()    army_painb8    =[    $painb8,    army_painb9    ] {};
  1275. -void()    army_painb9    =[    $painb9,    army_painb10] {};
  1276. -void()    army_painb10=[    $painb10,    army_painb11] {};
  1277. -void()    army_painb11=[    $painb11,    army_painb12] {};
  1278. -void()    army_painb12=[    $painb12,    army_painb13] {ai_pain(2);};
  1279. -void()    army_painb13=[    $painb13,    army_painb14] {};
  1280. -void()    army_painb14=[    $painb14,    army_run1    ] {};
  1281. -
  1282. -void()    army_painc1    =[    $painc1,    army_painc2    ] {};
  1283. -void()    army_painc2    =[    $painc2,    army_painc3    ] {ai_pain(1);};
  1284. -void()    army_painc3    =[    $painc3,    army_painc4    ] {};
  1285. -void()    army_painc4    =[    $painc4,    army_painc5    ] {};
  1286. -void()    army_painc5    =[    $painc5,    army_painc6    ] {ai_painforward(1);};
  1287. -void()    army_painc6    =[    $painc6,    army_painc7    ] {ai_painforward(1);};
  1288. -void()    army_painc7    =[    $painc7,    army_painc8    ] {};
  1289. -void()    army_painc8    =[    $painc8,    army_painc9    ] {ai_pain(1);};
  1290. -void()    army_painc9    =[    $painc9,    army_painc10] {ai_painforward(4);};
  1291. -void()    army_painc10=[    $painc10,    army_painc11] {ai_painforward(3);};
  1292. -void()    army_painc11=[    $painc11,    army_painc12] {ai_painforward(6);};
  1293. -void()    army_painc12=[    $painc12,    army_painc13] {ai_painforward(8);};
  1294. -void()    army_painc13=[    $painc13,    army_run1] {};
  1295. -
  1296. -void(entity attacker, float damage)    army_pain =
  1297. -{
  1298. -    local float r;
  1299. -    
  1300. -    if (self.pain_finished > time)
  1301. -        return;
  1302. -
  1303. -    r = random();
  1304. -
  1305. -    if (r < 0.2)
  1306. -    {
  1307. -        self.pain_finished = time + 0.6;
  1308. -        army_pain1 ();
  1309. -        sound (self, CHAN_VOICE, "soldier/pain1.wav", 1, ATTN_NORM);
  1310. -    }
  1311. -    else if (r < 0.6)
  1312. -    {
  1313. -        self.pain_finished = time + 1.1;
  1314. -        army_painb1 ();
  1315. -        sound (self, CHAN_VOICE, "soldier/pain2.wav", 1, ATTN_NORM);
  1316. -    }
  1317. -    else
  1318. -    {
  1319. -        self.pain_finished = time + 1.1;
  1320. -        army_painc1 ();
  1321. -        sound (self, CHAN_VOICE, "soldier/pain2.wav", 1, ATTN_NORM);
  1322. -    }
  1323. -};
  1324. -
  1325. -
  1326. -void() army_fire =
  1327. -{
  1328. -    local    vector    dir;
  1329. -    local    entity    en;
  1330. -    
  1331. -    ai_face();
  1332. -    
  1333. -    sound (self, CHAN_WEAPON, "soldier/sattck1.wav", 1, ATTN_NORM);    
  1334. -
  1335. -// fire somewhat behind the player, so a dodging player is harder to hit
  1336. -    en = self.enemy;
  1337. -    
  1338. -    dir = en.origin - en.velocity*0.2;
  1339. -    dir = normalize (dir - self.origin);
  1340. -    
  1341. -    FireBullets (4, dir, '0.1 0.1 0');
  1342. -};
  1343. -
  1344. -
  1345. -
  1346. -void()    army_die1    =[    $death1,    army_die2    ] {};
  1347. -void()    army_die2    =[    $death2,    army_die3    ] {};
  1348. -void()    army_die3    =[    $death3,    army_die4    ]
  1349. -{self.solid = SOLID_NOT;self.ammo_shells = 5;DropBackpack();};
  1350. -void()    army_die4    =[    $death4,    army_die5    ] {};
  1351. -void()    army_die5    =[    $death5,    army_die6    ] {};
  1352. -void()    army_die6    =[    $death6,    army_die7    ] {};
  1353. -void()    army_die7    =[    $death7,    army_die8    ] {};
  1354. -void()    army_die8    =[    $death8,    army_die9    ] {};
  1355. -void()    army_die9    =[    $death9,    army_die10    ] {};
  1356. -void()    army_die10    =[    $death10,    army_die10    ] {};
  1357. -
  1358. -void()    army_cdie1    =[    $deathc1,    army_cdie2    ] {};
  1359. -void()    army_cdie2    =[    $deathc2,    army_cdie3    ] {ai_back(5);};
  1360. -void()    army_cdie3    =[    $deathc3,    army_cdie4    ]
  1361. -{self.solid = SOLID_NOT;self.ammo_shells = 5;DropBackpack();ai_back(4);};
  1362. -void()    army_cdie4    =[    $deathc4,    army_cdie5    ] {ai_back(13);};
  1363. -void()    army_cdie5    =[    $deathc5,    army_cdie6    ] {ai_back(3);};
  1364. -void()    army_cdie6    =[    $deathc6,    army_cdie7    ] {ai_back(4);};
  1365. -void()    army_cdie7    =[    $deathc7,    army_cdie8    ] {};
  1366. -void()    army_cdie8    =[    $deathc8,    army_cdie9    ] {};
  1367. -void()    army_cdie9    =[    $deathc9,    army_cdie10    ] {};
  1368. -void()    army_cdie10    =[    $deathc10,    army_cdie11    ] {};
  1369. -void()    army_cdie11    =[    $deathc11,    army_cdie11    ] {};
  1370. -
  1371. -
  1372. -void() army_die =
  1373. -{
  1374. -// check for gib
  1375. -    if (self.health < -35)
  1376. -    {
  1377. -        sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  1378. -        ThrowHead ("progs/h_guard.mdl", self.health);
  1379. -        ThrowGib ("progs/gib1.mdl", self.health);
  1380. -        ThrowGib ("progs/gib2.mdl", self.health);
  1381. -        ThrowGib ("progs/gib3.mdl", self.health);
  1382. -        return;
  1383. -    }
  1384. -
  1385. -// regular death
  1386. -    sound (self, CHAN_VOICE, "soldier/death1.wav", 1, ATTN_NORM);
  1387. -    if (random() < 0.5)
  1388. -        army_die1 ();
  1389. -    else
  1390. -        army_cdie1 ();
  1391. -};
  1392. -
  1393. -
  1394. -/*QUAKED monster_army (1 0 0) (-16 -16 -24) (16 16 40) Ambush
  1395. -*/
  1396. -void() monster_army =
  1397. -{    
  1398. -    if (deathmatch)
  1399. -    {
  1400. -        remove(self);
  1401. -        return;
  1402. -    }
  1403. -    precache_model ("progs/soldier.mdl");
  1404. -    precache_model ("progs/h_guard.mdl");
  1405. -    precache_model ("progs/gib1.mdl");
  1406. -    precache_model ("progs/gib2.mdl");
  1407. -    precache_model ("progs/gib3.mdl");
  1408. -
  1409. -    precache_sound ("soldier/death1.wav");
  1410. -    precache_sound ("soldier/idle.wav");
  1411. -    precache_sound ("soldier/pain1.wav");
  1412. -    precache_sound ("soldier/pain2.wav");
  1413. -    precache_sound ("soldier/sattck1.wav");
  1414. -    precache_sound ("soldier/sight1.wav");
  1415. -
  1416. -    precache_sound ("player/udeath.wav");        // gib death
  1417. -
  1418. -
  1419. -    self.solid = SOLID_SLIDEBOX;
  1420. -    self.movetype = MOVETYPE_STEP;
  1421. -
  1422. -    setmodel (self, "progs/soldier.mdl");
  1423. -
  1424. -    setsize (self, '-16 -16 -24', '16 16 40');
  1425. -    self.health = 30;
  1426. -
  1427. -    self.th_stand = army_stand1;
  1428. -    self.th_walk = army_walk1;
  1429. -    self.th_run = army_run1;
  1430. -    self.th_missile = army_atk1;
  1431. -    self.th_pain = army_pain;
  1432. -    self.th_die = army_die;
  1433. -
  1434. -    walkmonster_start ();
  1435. -};
  1436. +/*
  1437. +==============================================================================
  1438. +
  1439. +SOLDIER / PLAYER
  1440. +
  1441. +==============================================================================
  1442. +*/
  1443. +
  1444. +$cd /raid/quake/id1/models/soldier3
  1445. +$origin 0 -6 24
  1446. +$base base        
  1447. +$skin skin
  1448. +
  1449. +$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8
  1450. +
  1451. +$frame death1 death2 death3 death4 death5 death6 death7 death8
  1452. +$frame death9 death10
  1453. +
  1454. +$frame deathc1 deathc2 deathc3 deathc4 deathc5 deathc6 deathc7 deathc8
  1455. +$frame deathc9 deathc10 deathc11
  1456. +
  1457. +$frame load1 load2 load3 load4 load5 load6 load7 load8 load9 load10 load11
  1458. +
  1459. +$frame pain1 pain2 pain3 pain4 pain5 pain6
  1460. +
  1461. +$frame painb1 painb2 painb3 painb4 painb5 painb6 painb7 painb8 painb9 painb10
  1462. +$frame painb11 painb12 painb13 painb14
  1463. +
  1464. +$frame painc1 painc2 painc3 painc4 painc5 painc6 painc7 painc8 painc9 painc10
  1465. +$frame painc11 painc12 painc13
  1466. +
  1467. +$frame run1 run2 run3 run4 run5 run6 run7 run8
  1468. +
  1469. +$frame shoot1 shoot2 shoot3 shoot4 shoot5 shoot6 shoot7 shoot8 shoot9
  1470. +
  1471. +$frame prowl_1 prowl_2 prowl_3 prowl_4 prowl_5 prowl_6 prowl_7 prowl_8
  1472. +$frame prowl_9 prowl_10 prowl_11 prowl_12 prowl_13 prowl_14 prowl_15 prowl_16
  1473. +$frame prowl_17 prowl_18 prowl_19 prowl_20 prowl_21 prowl_22 prowl_23 prowl_24
  1474. +
  1475. +/*
  1476. +==============================================================================
  1477. +SOLDIER CODE
  1478. +==============================================================================
  1479. +*/
  1480. +
  1481. +void() army_fire;
  1482. +
  1483. +void()    army_stand1    =[    $stand1,    army_stand2    ] {ai_stand();};
  1484. +void()    army_stand2    =[    $stand2,    army_stand3    ] {ai_stand();};
  1485. +void()    army_stand3    =[    $stand3,    army_stand4    ] {ai_stand();};
  1486. +void()    army_stand4    =[    $stand4,    army_stand5    ] {ai_stand();};
  1487. +void()    army_stand5    =[    $stand5,    army_stand6    ] {ai_stand();};
  1488. +void()    army_stand6    =[    $stand6,    army_stand7    ] {ai_stand();};
  1489. +void()    army_stand7    =[    $stand7,    army_stand8    ] {ai_stand();};
  1490. +void()    army_stand8    =[    $stand8,    army_stand1    ] {ai_stand();};
  1491. +
  1492. +void()    army_walk1    =[    $prowl_1,    army_walk2    ] {
  1493. +if (random() < 0.2)
  1494. +    sound (self, CHAN_VOICE, "soldier/idle.wav", 1, ATTN_IDLE);
  1495. +ai_walk(1);};
  1496. +void()    army_walk2    =[    $prowl_2,    army_walk3    ] {ai_walk(1);};
  1497. +void()    army_walk3    =[    $prowl_3,    army_walk4    ] {ai_walk(1);};
  1498. +void()    army_walk4    =[    $prowl_4,    army_walk5    ] {ai_walk(1);};
  1499. +void()    army_walk5    =[    $prowl_5,    army_walk6    ] {ai_walk(2);};
  1500. +void()    army_walk6    =[    $prowl_6,    army_walk7    ] {ai_walk(3);};
  1501. +void()    army_walk7    =[    $prowl_7,    army_walk8    ] {ai_walk(4);};
  1502. +void()    army_walk8    =[    $prowl_8,    army_walk9    ] {ai_walk(4);};
  1503. +void()    army_walk9    =[    $prowl_9,    army_walk10    ] {ai_walk(2);};
  1504. +void()    army_walk10    =[    $prowl_10,    army_walk11    ] {ai_walk(2);};
  1505. +void()    army_walk11    =[    $prowl_11,    army_walk12    ] {ai_walk(2);};
  1506. +void()    army_walk12    =[    $prowl_12,    army_walk13    ] {ai_walk(1);};
  1507. +void()    army_walk13    =[    $prowl_13,    army_walk14    ] {ai_walk(0);};
  1508. +void()    army_walk14    =[    $prowl_14,    army_walk15    ] {ai_walk(1);};
  1509. +void()    army_walk15    =[    $prowl_15,    army_walk16    ] {ai_walk(1);};
  1510. +void()    army_walk16    =[    $prowl_16,    army_walk17    ] {ai_walk(1);};
  1511. +void()    army_walk17    =[    $prowl_17,    army_walk18    ] {ai_walk(3);};
  1512. +void()    army_walk18    =[    $prowl_18,    army_walk19    ] {ai_walk(3);};
  1513. +void()    army_walk19    =[    $prowl_19,    army_walk20    ] {ai_walk(3);};
  1514. +void()    army_walk20    =[    $prowl_20,    army_walk21    ] {ai_walk(3);};
  1515. +void()    army_walk21    =[    $prowl_21,    army_walk22    ] {ai_walk(2);};
  1516. +void()    army_walk22    =[    $prowl_22,    army_walk23    ] {ai_walk(1);};
  1517. +void()    army_walk23    =[    $prowl_23,    army_walk24    ] {ai_walk(1);};
  1518. +void()    army_walk24    =[    $prowl_24,    army_walk1    ] {ai_walk(1);};
  1519. +
  1520. +void()    army_run1    =[    $run1,        army_run2    ] {
  1521. +if (random() < 0.2)
  1522. +    sound (self, CHAN_VOICE, "soldier/idle.wav", 1, ATTN_IDLE);
  1523. +ai_run(11);};
  1524. +void()    army_run2    =[    $run2,        army_run3    ] {ai_run(15);};
  1525. +void()    army_run3    =[    $run3,        army_run4    ] {ai_run(10);};
  1526. +void()    army_run4    =[    $run4,        army_run5    ] {ai_run(10);};
  1527. +void()    army_run5    =[    $run5,        army_run6    ] {ai_run(8);};
  1528. +void()    army_run6    =[    $run6,        army_run7    ] {ai_run(15);};
  1529. +void()    army_run7    =[    $run7,        army_run8    ] {ai_run(10);};
  1530. +void()    army_run8    =[    $run8,        army_run1    ] {ai_run(8);};
  1531. +
  1532. +void()    army_atk1    =[    $shoot1,    army_atk2    ] {ai_face();};
  1533. +void()    army_atk2    =[    $shoot2,    army_atk3    ] {ai_face();};
  1534. +void()    army_atk3    =[    $shoot3,    army_atk4    ] {ai_face();};
  1535. +void()    army_atk4    =[    $shoot4,    army_atk5    ] {ai_face();};
  1536. +void()    army_atk5    =[    $shoot5,    army_atk6    ] {ai_face();army_fire();
  1537. +self.effects = self.effects | EF_MUZZLEFLASH;};
  1538. +void()    army_atk6    =[    $shoot6,    army_atk7    ] {ai_face();};
  1539. +void()    army_atk7    =[    $shoot7,    army_atk8    ] {ai_face();SUB_CheckRefire (army_atk1);};
  1540. +void()    army_atk8    =[    $shoot8,    army_atk9    ] {ai_face();};
  1541. +void()    army_atk9    =[    $shoot9,    army_run1    ] {ai_face();};
  1542. +
  1543. +
  1544. +void()    army_pain1    =[    $pain1,        army_pain2    ] {};
  1545. +void()    army_pain2    =[    $pain2,        army_pain3    ] {};
  1546. +void()    army_pain3    =[    $pain3,        army_pain4    ] {};
  1547. +void()    army_pain4    =[    $pain4,        army_pain5    ] {};
  1548. +void()    army_pain5    =[    $pain5,        army_pain6    ] {};
  1549. +void()    army_pain6    =[    $pain6,        army_run1    ] {ai_pain(1);};
  1550. +
  1551. +void()    army_painb1    =[    $painb1,    army_painb2    ] {};
  1552. +void()    army_painb2    =[    $painb2,    army_painb3    ] {ai_painforward(13);};
  1553. +void()    army_painb3    =[    $painb3,    army_painb4    ] {ai_painforward(9);};
  1554. +void()    army_painb4    =[    $painb4,    army_painb5    ] {};
  1555. +void()    army_painb5    =[    $painb5,    army_painb6    ] {};
  1556. +void()    army_painb6    =[    $painb6,    army_painb7    ] {};
  1557. +void()    army_painb7    =[    $painb7,    army_painb8    ] {};
  1558. +void()    army_painb8    =[    $painb8,    army_painb9    ] {};
  1559. +void()    army_painb9    =[    $painb9,    army_painb10] {};
  1560. +void()    army_painb10=[    $painb10,    army_painb11] {};
  1561. +void()    army_painb11=[    $painb11,    army_painb12] {};
  1562. +void()    army_painb12=[    $painb12,    army_painb13] {ai_pain(2);};
  1563. +void()    army_painb13=[    $painb13,    army_painb14] {};
  1564. +void()    army_painb14=[    $painb14,    army_run1    ] {};
  1565. +
  1566. +void()    army_painc1    =[    $painc1,    army_painc2    ] {};
  1567. +void()    army_painc2    =[    $painc2,    army_painc3    ] {ai_pain(1);};
  1568. +void()    army_painc3    =[    $painc3,    army_painc4    ] {};
  1569. +void()    army_painc4    =[    $painc4,    army_painc5    ] {};
  1570. +void()    army_painc5    =[    $painc5,    army_painc6    ] {ai_painforward(1);};
  1571. +void()    army_painc6    =[    $painc6,    army_painc7    ] {ai_painforward(1);};
  1572. +void()    army_painc7    =[    $painc7,    army_painc8    ] {};
  1573. +void()    army_painc8    =[    $painc8,    army_painc9    ] {ai_pain(1);};
  1574. +void()    army_painc9    =[    $painc9,    army_painc10] {ai_painforward(4);};
  1575. +void()    army_painc10=[    $painc10,    army_painc11] {ai_painforward(3);};
  1576. +void()    army_painc11=[    $painc11,    army_painc12] {ai_painforward(6);};
  1577. +void()    army_painc12=[    $painc12,    army_painc13] {ai_painforward(8);};
  1578. +void()    army_painc13=[    $painc13,    army_run1] {};
  1579. +
  1580. +void(entity attacker, float damage)    army_pain =
  1581. +{
  1582. +    local float r;
  1583. +    
  1584. +    if (self.pain_finished > time)
  1585. +        return;
  1586. +
  1587. +    r = random();
  1588. +
  1589. +    if (r < 0.2)
  1590. +    {
  1591. +        self.pain_finished = time + 0.6;
  1592. +        army_pain1 ();
  1593. +        sound (self, CHAN_VOICE, "soldier/pain1.wav", 1, ATTN_NORM);
  1594. +    }
  1595. +    else if (r < 0.6)
  1596. +    {
  1597. +        self.pain_finished = time + 1.1;
  1598. +        army_painb1 ();
  1599. +        sound (self, CHAN_VOICE, "soldier/pain2.wav", 1, ATTN_NORM);
  1600. +    }
  1601. +    else
  1602. +    {
  1603. +        self.pain_finished = time + 1.1;
  1604. +        army_painc1 ();
  1605. +        sound (self, CHAN_VOICE, "soldier/pain2.wav", 1, ATTN_NORM);
  1606. +    }
  1607. +};
  1608. +
  1609. +
  1610. +void() army_fire =
  1611. +{
  1612. +    local    vector    dir;
  1613. +    local    entity    en;
  1614. +    
  1615. +    ai_face();
  1616. +    
  1617. +    sound (self, CHAN_WEAPON, "soldier/sattck1.wav", 1, ATTN_NORM);    
  1618. +
  1619. +// fire somewhat behind the player, so a dodging player is harder to hit
  1620. +    en = self.enemy;
  1621. +    
  1622. +    dir = en.origin - en.velocity*0.2;
  1623. +    dir = normalize (dir - self.origin);
  1624. +    
  1625. +    FireBullets (4, dir, '0.1 0.1 0');
  1626. +};
  1627. +
  1628. +
  1629. +
  1630. +void()    army_die1    =[    $death1,    army_die2    ] {};
  1631. +void()    army_die2    =[    $death2,    army_die3    ] {};
  1632. +void()    army_die3    =[    $death3,    army_die4    ]
  1633. +{self.ammo_shells = 5;DropBackpack();};
  1634. +void()    army_die4    =[    $death4,    army_die5    ] {};
  1635. +void()    army_die5    =[    $death5,    army_die6    ] {};
  1636. +void()    army_die6    =[    $death6,    army_die7    ] {};
  1637. +void()    army_die7    =[    $death7,    army_die8    ] {};
  1638. +void()    army_die8    =[    $death8,    army_die9    ] {};
  1639. +void()    army_die9    =[    $death9,    army_die10    ] {};
  1640. +void()    army_die10    =[    $death10,    army_die10    ] {};
  1641. +
  1642. +void()    army_cdie1    =[    $deathc1,    army_cdie2    ] {};
  1643. +void()    army_cdie2    =[    $deathc2,    army_cdie3    ] {ai_back(5);};
  1644. +void()    army_cdie3    =[    $deathc3,    army_cdie4    ]
  1645. +{self.ammo_shells = 5;DropBackpack();ai_back(4);};
  1646. +void()    army_cdie4    =[    $deathc4,    army_cdie5    ] {ai_back(13);};
  1647. +void()    army_cdie5    =[    $deathc5,    army_cdie6    ] {ai_back(3);};
  1648. +void()    army_cdie6    =[    $deathc6,    army_cdie7    ] {ai_back(4);};
  1649. +void()    army_cdie7    =[    $deathc7,    army_cdie8    ] {};
  1650. +void()    army_cdie8    =[    $deathc8,    army_cdie9    ] {};
  1651. +void()    army_cdie9    =[    $deathc9,    army_cdie10    ] {};
  1652. +void()    army_cdie10    =[    $deathc10,    army_cdie11    ] {};
  1653. +void()    army_cdie11    =[    $deathc11,    army_cdie11    ] {};
  1654. +
  1655. +void() army_die =
  1656. +{
  1657. +// check for gib
  1658. +    if (self.health < -35)
  1659. +    {
  1660. +                sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  1661. +        monster_gib("progs/h_guard.mdl");
  1662. +        return;
  1663. +    }
  1664. +
  1665. +// regular death
  1666. +    sound (self, CHAN_VOICE, "soldier/death1.wav", 1, ATTN_NORM);
  1667. +    if (random() < 0.5)
  1668. +        army_die1 ();
  1669. +    else
  1670. +        army_cdie1 ();
  1671. +    
  1672. +// We want a corpse:  No actions, a little health, and a new .th_die
  1673. +// Frob some flags so we're damagable as well
  1674. +
  1675. +    monster_corpse_setup('-16 -16 -24', '16 16 -10', "progs/h_guard.mdl");
  1676. +};
  1677. +
  1678. +
  1679. +/*QUAKED monster_army (1 0 0) (-16 -16 -24) (16 16 40) Ambush
  1680. +*/
  1681. +void() monster_army =
  1682. +{    
  1683. +    if (deathmatch)
  1684. +    {
  1685. +        remove(self);
  1686. +        return;
  1687. +    }
  1688. +    precache_model ("progs/soldier.mdl");
  1689. +    precache_model ("progs/h_guard.mdl");
  1690. +    precache_model ("progs/gib1.mdl");
  1691. +    precache_model ("progs/gib2.mdl");
  1692. +    precache_model ("progs/gib3.mdl");
  1693. +
  1694. +    precache_sound ("soldier/death1.wav");
  1695. +    precache_sound ("soldier/idle.wav");
  1696. +    precache_sound ("soldier/pain1.wav");
  1697. +    precache_sound ("soldier/pain2.wav");
  1698. +    precache_sound ("soldier/sattck1.wav");
  1699. +    precache_sound ("soldier/sight1.wav");
  1700. +
  1701. +    precache_sound ("player/udeath.wav");        // gib death
  1702. +
  1703. +
  1704. +    self.solid = SOLID_SLIDEBOX;
  1705. +    self.movetype = MOVETYPE_STEP;
  1706. +
  1707. +    setmodel (self, "progs/soldier.mdl");
  1708. +
  1709. +    setsize (self, '-16 -16 -24', '16 16 40');
  1710. +    self.health = 30;
  1711. +
  1712. +    self.th_stand = army_stand1;
  1713. +    self.th_walk = army_walk1;
  1714. +    self.th_run = army_run1;
  1715. +    self.th_missile = army_atk1;
  1716. +    self.th_pain = army_pain;
  1717. +    self.th_die = army_die;
  1718. +
  1719. +    walkmonster_start ();
  1720. +};
  1721. diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/weapons.qc solidmn/weapons.qc
  1722. --- v101qc/weapons.qc    Thu Jul 25 01:51:24 1996
  1723. +++ solidmn/weapons.qc    Tue Jul 30 22:34:24 1996
  1724. @@ -22,6 +22,7 @@
  1725.      precache_sound ("weapons/grenade.wav");    // grenade launcher
  1726.      precache_sound ("weapons/bounce.wav");        // grenade bounce
  1727.      precache_sound ("weapons/shotgn2.wav");    // super shotgun
  1728. +    precache_sound ("zombie/z_hit.wav");    // Axe
  1729.  };
  1730.  
  1731.  float() crandom =
  1732. @@ -48,6 +49,8 @@
  1733.  
  1734.      if (trace_ent.takedamage)
  1735.      {
  1736. +        sound (self, CHAN_WEAPON, "zombie/z_hit.wav", 1, ATTN_NORM);
  1737. +        // Some sort of thunking sound ...
  1738.          trace_ent.axhitme = 1;
  1739.          SpawnBlood (org, '0 0 0', 20);
  1740.          T_Damage (trace_ent, self, self, 20);
  1741. @@ -406,6 +409,45 @@
  1742.  /*
  1743.  ===============================================================================
  1744.  
  1745. +Pain missile
  1746. +
  1747. +===============================================================================
  1748. +*/
  1749. +void() W_FireFireball =
  1750. +{
  1751. +    local    entity missile, mpuff;
  1752. +    
  1753. +    T_Damage(self, self, self, 10);
  1754. +
  1755. +    sound (self, CHAN_WEAPON, "weapons/sgun1.wav", 1, ATTN_NORM);
  1756. +
  1757. +    self.punchangle_x = -2;
  1758. +
  1759. +    missile = spawn ();
  1760. +    missile.owner = self;
  1761. +    missile.movetype = MOVETYPE_FLYMISSILE;
  1762. +    missile.solid = SOLID_BBOX;
  1763. +        
  1764. +// set missile speed    
  1765. +
  1766. +    makevectors (self.v_angle);
  1767. +    missile.velocity = aim(self, 1000);
  1768. +    missile.velocity = missile.velocity * 1000;
  1769. +    missile.angles = vectoangles(missile.velocity);
  1770. +    
  1771. +    missile.touch = T_MissileTouch;
  1772. +    
  1773. +// set missile duration
  1774. +    missile.nextthink = time + 5;
  1775. +    missile.think = SUB_Remove;
  1776. +
  1777. +    setmodel (missile, "progs/lavaball.mdl");
  1778. +    setsize (missile, '0 0 0', '0 0 0');        
  1779. +    setorigin (missile, self.origin + v_forward*8 + '0 0 16');
  1780. +};
  1781. +/*
  1782. +===============================================================================
  1783. +
  1784.  LIGHTNING
  1785.  
  1786.  ===============================================================================
  1787. @@ -855,6 +897,9 @@
  1788.  
  1789.      if (self.weapon == IT_AXE)
  1790.          return TRUE;
  1791. +
  1792. +    if (self.weapon == IT_EXTRA_WEAPON)
  1793. +        return TRUE;
  1794.      
  1795.      self.weapon = W_BestWeapon ();
  1796.  
  1797. @@ -942,6 +987,12 @@
  1798.          self.attack_finished = time + 0.1;
  1799.          sound (self, CHAN_AUTO, "weapons/lstart.wav", 1, ATTN_NORM);
  1800.      }
  1801. +    else if (self.weapon == IT_EXTRA_WEAPON)
  1802. +    {
  1803. +        player_rocket1();
  1804. +        W_FireFireball();
  1805. +        self.attack_finished = time + 0.8;
  1806. +    }
  1807.  };
  1808.  
  1809.  /*
  1810. @@ -1003,6 +1054,10 @@
  1811.          if (self.ammo_cells < 1)
  1812.              am = 1;
  1813.      }
  1814. +    else if (self.impulse == 32)
  1815. +    {
  1816. +        fl = IT_EXTRA_WEAPON;
  1817. +    }
  1818.  
  1819.      self.impulse = 0;
  1820.      
  1821. @@ -1038,6 +1093,7 @@
  1822.      self.ammo_rockets = 100;
  1823.      self.ammo_nails = 200;
  1824.      self.ammo_shells = 100;
  1825. +    self.ammo_cells = 200;
  1826.      self.items = self.items | 
  1827.          IT_AXE |
  1828.          IT_SHOTGUN |
  1829. @@ -1046,12 +1102,10 @@
  1830.          IT_SUPER_NAILGUN |
  1831.          IT_GRENADE_LAUNCHER |
  1832.          IT_ROCKET_LAUNCHER |
  1833. +        IT_EXTRA_WEAPON |
  1834. +        IT_LIGHTNING |
  1835.          IT_KEY1 | IT_KEY2;
  1836.  
  1837. -    self.ammo_cells = 200;
  1838. -    self.items = self.items | IT_LIGHTNING;
  1839. -
  1840. -    self.weapon = IT_ROCKET_LAUNCHER;
  1841.      self.impulse = 0;
  1842.      W_SetCurrentAmmo ();
  1843.  };
  1844. @@ -1076,6 +1130,10 @@
  1845.  
  1846.          if (self.weapon == IT_LIGHTNING)
  1847.          {
  1848. +            self.weapon = IT_EXTRA_WEAPON;
  1849. +        }
  1850. +        else if (self.weapon == IT_EXTRA_WEAPON)
  1851. +        {
  1852.              self.weapon = IT_AXE;
  1853.          }
  1854.          else if (self.weapon == IT_AXE)
  1855. @@ -1162,15 +1220,16 @@
  1856.  {
  1857.      if (self.impulse >= 1 && self.impulse <= 8)
  1858.          W_ChangeWeapon ();
  1859. -
  1860. -    if (self.impulse == 9)
  1861. +    // 32..128 for added weapons
  1862. +     else if (self.impulse >=32 && self.impulse <=128)
  1863. +        W_ChangeWeapon ();
  1864. +    else if (self.impulse == 9)
  1865.          CheatCommand ();
  1866. -    if (self.impulse == 10)
  1867. +    else if (self.impulse == 10)
  1868.          CycleWeaponCommand ();
  1869. -    if (self.impulse == 11)
  1870. +    else if (self.impulse == 11)
  1871.          ServerflagsCommand ();
  1872. -
  1873. -    if (self.impulse == 255)
  1874. +    else if (self.impulse == 255)
  1875.          QuadCheat ();
  1876.          
  1877.      self.impulse = 0;
  1878. diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/wizard.qc solidmn/wizard.qc
  1879. --- v101qc/wizard.qc    Thu Jul 25 01:51:24 1996
  1880. +++ solidmn/wizard.qc    Wed Jul 31 22:24:02 1996
  1881. @@ -331,7 +331,7 @@
  1882.  sound (self, CHAN_VOICE, "wizard/wdeath.wav", 1, ATTN_NORM);
  1883.  };
  1884.  void()    wiz_death2    =[    $death2,        wiz_death3    ] {};
  1885. -void()    wiz_death3    =[    $death3,        wiz_death4    ]{self.solid = SOLID_NOT;};
  1886. +void()    wiz_death3    =[    $death3,        wiz_death4    ]{};
  1887.  void()    wiz_death4    =[    $death4,        wiz_death5    ] {};
  1888.  void()    wiz_death5    =[    $death5,        wiz_death6    ] {};
  1889.  void()    wiz_death6    =[    $death6,        wiz_death7    ] {};
  1890. @@ -343,15 +343,14 @@
  1891.  // check for gib
  1892.      if (self.health < -40)
  1893.      {
  1894. -        sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  1895. -        ThrowHead ("progs/h_wizard.mdl", self.health);
  1896. -        ThrowGib ("progs/gib2.mdl", self.health);
  1897. -        ThrowGib ("progs/gib2.mdl", self.health);
  1898. -        ThrowGib ("progs/gib2.mdl", self.health);
  1899. +        monster_gib("progs/h_wizard.mdl");
  1900. +        sound(self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  1901.          return;
  1902.      }
  1903.  
  1904.      wiz_death1 ();
  1905. +        self.health=135;
  1906. +    monster_corpse_setup('-16 -16 -24', '16 16 -10', "progs/h_wizard.mdl");
  1907.  };
  1908.  
  1909.  
  1910.