home *** CD-ROM | disk | FTP | other *** search
/ Qu-ake / Qu-ake.iso / qu_ke / monster / 009 / GRNDFEST.PAT next >
Encoding:
Text File  |  1996-11-29  |  22.1 KB  |  801 lines

  1. diff -ur --new-file ..\quake-c\src106/client.qc .\src/client.qc
  2. --- ..\quake-c\src106/client.qc    Sun Sep 29 23:29:00 1996
  3. +++ .\src/client.qc    Fri Nov 29 21:06:56 1996
  4. @@ -50,8 +50,8 @@
  5.      parm1 = self.items;
  6.      parm2 = self.health;
  7.      parm3 = self.armorvalue;
  8. -    if (self.ammo_shells < 25)
  9. -        parm4 = 25;
  10. +   if (self.ammo_shells < 15)
  11. +      parm4 = 15;
  12.      else
  13.          parm4 = self.ammo_shells;
  14.      parm5 = self.ammo_nails;
  15. @@ -61,17 +61,20 @@
  16.      parm9 = self.armortype * 100;
  17.  };
  18.  
  19. +
  20.  void() SetNewParms =
  21.  {
  22. -    parm1 = IT_SHOTGUN | IT_AXE;
  23. -    parm2 = 100;
  24. -    parm3 = 0;
  25. -    parm4 = 25;
  26. -    parm5 = 0;
  27. -    parm6 = 0;
  28. +
  29. +   parm1 = IT_ARMOR3 | IT_SHOTGUN | IT_GRENADE_LAUNCHER | IT_AXE;
  30. +   parm2 = 100;
  31. +   parm3 = 200;
  32. +   parm4 = 15;
  33. +   parm5 = 0;
  34. +   parm6 = 15;
  35.      parm7 = 0;
  36. -    parm8 = 1;
  37. -    parm9 = 0;
  38. +   parm8 = IT_GRENADE_LAUNCHER;
  39. +   parm9 = 80;
  40. +
  41.  };
  42.  
  43.  void() DecodeLevelParms =
  44. diff -ur --new-file ..\quake-c\src106/demon.qc .\src/demon.qc
  45. --- ..\quake-c\src106/demon.qc    Thu Sep 26 11:15:38 1996
  46. +++ .\src/demon.qc    Fri Nov 29 20:17:24 1996
  47. @@ -68,13 +68,83 @@
  48.  void()    demon1_run3    =[    $run3,        demon1_run4    ] {ai_run(36);};
  49.  void()    demon1_run4    =[    $run4,        demon1_run5    ] {ai_run(20);};
  50.  void()    demon1_run5    =[    $run5,        demon1_run6    ] {ai_run(15);};
  51. -void()    demon1_run6    =[    $run6,        demon1_run1    ] {ai_run(36);};
  52. +
  53. +void()   demon1_jump1;
  54. +void()   demon1_run6 =[ $run6,      demon1_run1 ]
  55. +{
  56. +   ai_run(36);
  57. +   if (self.waterlevel == 1)
  58. +   {
  59. +      if ( random() > 0.8 )
  60. +         self.think = demon1_jump1;
  61. +   }
  62. +
  63. +};
  64.  
  65.  void()    demon1_jump1    =[    $leap1,        demon1_jump2    ] {ai_face();};
  66.  void()    demon1_jump2    =[    $leap2,        demon1_jump3    ] {ai_face();};
  67.  void()    demon1_jump3    =[    $leap3,        demon1_jump4    ] {ai_face();};
  68.  void()    demon1_jump4    =[    $leap4,        demon1_jump5    ]
  69.  {
  70. +   local vector dir;
  71. +   local float dist;
  72. +
  73. +   ai_face();
  74. +    
  75. +    self.touch = Demon_JumpTouch;
  76. +    makevectors (self.angles);
  77. +    self.origin_z = self.origin_z + 1;
  78. +   if (self.enemy.origin_z > self.origin_z + 40)
  79. +   {
  80. +
  81. +      if ( infront(self.enemy) )
  82. +      {
  83. +         dir = normalize(self.enemy.origin - self.origin);
  84. +         dist = vlen(self.enemy.origin - self.origin);
  85. +         self.velocity = dir * dist;
  86. +      }
  87. +      else
  88. +         self.velocity = v_forward * 150 * (random() + 1);
  89. +
  90. +      dist = self.enemy.origin_z - self.origin_z;
  91. +
  92. +      // a vertical velocity to jump just above player's head
  93. +      // for any given distance between z origins.
  94. +      dist = dist - 237;
  95. +      self.velocity_z = 714 + dist;
  96. +
  97. +   }
  98. +   else
  99. +   {
  100. +      // slow forward to fall off ledge if player down
  101. +      // else normal horizontal velocity
  102. +      if (self.enemy.origin_z < self.origin_z - 40)
  103. +         self.velocity = v_forward * 150 * (random() + 1);
  104. +      else
  105. +         self.velocity = v_forward * 600;
  106. +
  107. +      // check for wall in front
  108. +      traceline( self.origin - '0 0 16',
  109. +                 (self.origin - '0 0 16') + v_forward*150, TRUE, self);
  110. +
  111. +      // attempt to jump wall or normal vel.
  112. +      if (trace_fraction < 1)
  113. +      {
  114. +         self.velocity = v_forward * 90;
  115. +         self.velocity_z = 250 * (random() + 1);
  116. +      }
  117. +      else
  118. +         self.velocity_z = 250;
  119. +   }
  120. +
  121. +
  122. +   if (self.flags & FL_ONGROUND)
  123. +        self.flags = self.flags - FL_ONGROUND;
  124. +
  125. +};
  126. +
  127. +/*
  128. +{
  129.      ai_face();
  130.      
  131.      self.touch = Demon_JumpTouch;
  132. @@ -84,6 +154,7 @@
  133.      if (self.flags & FL_ONGROUND)
  134.          self.flags = self.flags - FL_ONGROUND;
  135.  };
  136. +*/
  137.  void()    demon1_jump5    =[    $leap5,        demon1_jump6    ] {};
  138.  void()    demon1_jump6    =[    $leap6,        demon1_jump7    ] {};
  139.  void()    demon1_jump7    =[    $leap7,        demon1_jump8    ] {};
  140. @@ -199,7 +270,8 @@
  141.  
  142.      setmodel (self, "progs/demon.mdl");
  143.  
  144. -    setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
  145. +   setsize (self, VEC_HULL_MIN, VEC_HULL_MAX);
  146. +   // setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
  147.      self.health = 300;
  148.  
  149.      self.th_stand = demon1_stand1;
  150. @@ -250,7 +322,10 @@
  151.      local    vector    dist;
  152.      local    float    d;
  153.  
  154. -    if (self.origin_z + self.mins_z > self.enemy.origin_z + self.enemy.mins_z
  155. +   if (random() < 0.4)
  156. +      return TRUE;
  157. +
  158. +   if (self.origin_z + self.mins_z > self.enemy.origin_z + self.enemy.mins_z
  159.      + 0.75 * self.enemy.size_z)
  160.          return FALSE;
  161.          
  162. diff -ur --new-file ..\quake-c\src106/enforcer.qc .\src/enforcer.qc
  163. --- ..\quake-c\src106/enforcer.qc    Thu Sep 26 11:15:38 1996
  164. +++ .\src/enforcer.qc    Fri Nov 29 20:17:26 1996
  165. @@ -37,6 +37,7 @@
  166.  $frame paind9 paind10 paind11 paind12 paind13 paind14 paind15 paind16
  167.  $frame paind17 paind18 paind19
  168.  
  169. +void() OgreFireGrenade;
  170.  
  171.  void() Laser_Touch =
  172.  {
  173. @@ -160,11 +161,18 @@
  174.  void()    enf_atk3    =[    $attack3,    enf_atk4    ] {ai_face();};
  175.  void()    enf_atk4    =[    $attack4,    enf_atk5    ] {ai_face();};
  176.  void()    enf_atk5    =[    $attack5,    enf_atk6    ] {ai_face();};
  177. -void()    enf_atk6    =[    $attack6,    enf_atk7    ] {enforcer_fire();};
  178. +
  179. +// ### grenade mod ###
  180. +// void()   enf_atk6 =[ $attack6,   enf_atk7 ] {enforcer_fire();};
  181. +void()   enf_atk6 =[ $attack6,   enf_atk7 ] {ai_face();OgreFireGrenade();};
  182. +
  183.  void()    enf_atk7    =[    $attack7,    enf_atk8    ] {ai_face();};
  184.  void()    enf_atk8    =[    $attack8,    enf_atk9    ] {ai_face();};
  185.  void()    enf_atk9    =[    $attack5,    enf_atk10    ] {ai_face();};
  186. -void()    enf_atk10    =[    $attack6,    enf_atk11    ] {enforcer_fire();};
  187. +
  188. +// void()   enf_atk10   =[ $attack6,   enf_atk11   ] {enforcer_fire();};
  189. +void()   enf_atk10   =[ $attack6,   enf_atk11   ] {ai_face();};
  190. +
  191.  void()    enf_atk11    =[    $attack7,    enf_atk12    ] {ai_face();};
  192.  void()    enf_atk12    =[    $attack8,    enf_atk13    ] {ai_face();};
  193.  void()    enf_atk13    =[    $attack9,    enf_atk14    ] {ai_face();};
  194. diff -ur --new-file ..\quake-c\src106/items.qc .\src/items.qc
  195. --- ..\quake-c\src106/items.qc    Thu Sep 26 11:15:38 1996
  196. +++ .\src/items.qc    Fri Nov 29 20:17:26 1996
  197. @@ -398,7 +398,9 @@
  198.      if (!(other.flags & FL_CLIENT))
  199.          return;
  200.  
  201. -// if the player was using his best weapon, change up to the new one if better        
  202. +   self.classname = "weapon_grenadelauncher";
  203. +
  204. +// if the player was using his best weapon, change up to the new one if better
  205.      stemp = self;
  206.      self = other;
  207.      best = W_BestWeapon();
  208. @@ -409,39 +411,7 @@
  209.      else
  210.          leave = 0;
  211.      
  212. -    if (self.classname == "weapon_nailgun")
  213. -    {
  214. -        if (leave && (other.items & IT_NAILGUN) )
  215. -            return;
  216. -        hadammo = other.ammo_nails;            
  217. -        new = IT_NAILGUN;
  218. -        other.ammo_nails = other.ammo_nails + 30;
  219. -    }
  220. -    else if (self.classname == "weapon_supernailgun")
  221. -    {
  222. -        if (leave && (other.items & IT_SUPER_NAILGUN) )
  223. -            return;
  224. -        hadammo = other.ammo_rockets;            
  225. -        new = IT_SUPER_NAILGUN;
  226. -        other.ammo_nails = other.ammo_nails + 30;
  227. -    }
  228. -    else if (self.classname == "weapon_supershotgun")
  229. -    {
  230. -        if (leave && (other.items & IT_SUPER_SHOTGUN) )
  231. -            return;
  232. -        hadammo = other.ammo_rockets;            
  233. -        new = IT_SUPER_SHOTGUN;
  234. -        other.ammo_shells = other.ammo_shells + 5;
  235. -    }
  236. -    else if (self.classname == "weapon_rocketlauncher")
  237. -    {
  238. -        if (leave && (other.items & IT_ROCKET_LAUNCHER) )
  239. -            return;
  240. -        hadammo = other.ammo_rockets;            
  241. -        new = IT_ROCKET_LAUNCHER;
  242. -        other.ammo_rockets = other.ammo_rockets + 5;
  243. -    }
  244. -    else if (self.classname == "weapon_grenadelauncher")
  245. +   if (self.classname == "weapon_grenadelauncher")
  246.      {
  247.          if (leave && (other.items & IT_GRENADE_LAUNCHER) )
  248.              return;
  249. @@ -449,14 +419,6 @@
  250.          new = IT_GRENADE_LAUNCHER;
  251.          other.ammo_rockets = other.ammo_rockets + 5;
  252.      }
  253. -    else if (self.classname == "weapon_lightning")
  254. -    {
  255. -        if (leave && (other.items & IT_LIGHTNING) )
  256. -            return;
  257. -        hadammo = other.ammo_rockets;            
  258. -        new = IT_LIGHTNING;
  259. -        other.ammo_cells = other.ammo_cells + 15;
  260. -    }
  261.      else
  262.          objerror ("weapon_touch: unknown classname");
  263.  
  264. @@ -505,10 +467,10 @@
  265.  
  266.  void() weapon_supershotgun =
  267.  {
  268. -    precache_model ("progs/g_shot.mdl");
  269. -    setmodel (self, "progs/g_shot.mdl");
  270. -    self.weapon = IT_SUPER_SHOTGUN;
  271. -    self.netname = "Double-barrelled Shotgun";
  272. +    precache_model ("progs/g_rock.mdl");
  273. +    setmodel (self, "progs/g_rock.mdl");
  274. +    self.weapon = 3;
  275. +    self.netname = "Grenade Launcher";
  276.      self.touch = weapon_touch;
  277.      setsize (self, '-16 -16 0', '16 16 56');
  278.      StartItem ();
  279. @@ -519,10 +481,10 @@
  280.  
  281.  void() weapon_nailgun =
  282.  {
  283. -    precache_model ("progs/g_nail.mdl");
  284. -    setmodel (self, "progs/g_nail.mdl");
  285. -    self.weapon = IT_NAILGUN;
  286. -    self.netname = "nailgun";
  287. +    precache_model ("progs/g_rock.mdl");
  288. +    setmodel (self, "progs/g_rock.mdl");
  289. +    self.weapon = 3;
  290. +    self.netname = "Grenade Launcher";
  291.      self.touch = weapon_touch;
  292.      setsize (self, '-16 -16 0', '16 16 56');
  293.      StartItem ();
  294. @@ -533,10 +495,10 @@
  295.  
  296.  void() weapon_supernailgun =
  297.  {
  298. -    precache_model ("progs/g_nail2.mdl");
  299. -    setmodel (self, "progs/g_nail2.mdl");
  300. -    self.weapon = IT_SUPER_NAILGUN;
  301. -    self.netname = "Super Nailgun";
  302. +    precache_model ("progs/g_rock.mdl");
  303. +    setmodel (self, "progs/g_rock.mdl");
  304. +    self.weapon = 3;
  305. +    self.netname = "Grenade Launcher";
  306.      self.touch = weapon_touch;
  307.      setsize (self, '-16 -16 0', '16 16 56');
  308.      StartItem ();
  309. @@ -561,10 +523,10 @@
  310.  
  311.  void() weapon_rocketlauncher =
  312.  {
  313. -    precache_model ("progs/g_rock2.mdl");
  314. -    setmodel (self, "progs/g_rock2.mdl");
  315. +    precache_model ("progs/g_rock.mdl");
  316. +    setmodel (self, "progs/g_rock.mdl");
  317.      self.weapon = 3;
  318. -    self.netname = "Rocket Launcher";
  319. +    self.netname = "Grenade Launcher";
  320.      self.touch = weapon_touch;
  321.      setsize (self, '-16 -16 0', '16 16 56');
  322.      StartItem ();
  323. @@ -576,10 +538,10 @@
  324.  
  325.  void() weapon_lightning =
  326.  {
  327. -    precache_model ("progs/g_light.mdl");
  328. -    setmodel (self, "progs/g_light.mdl");
  329. +    precache_model ("progs/g_rock.mdl");
  330. +    setmodel (self, "progs/g_rock.mdl");
  331.      self.weapon = 3;
  332. -    self.netname = "Thunderbolt";
  333. +    self.netname = "Grenade Launcher";
  334.      self.touch = weapon_touch;
  335.      setsize (self, '-16 -16 0', '16 16 56');
  336.      StartItem ();
  337. @@ -694,18 +656,18 @@
  338.  
  339.      if (self.spawnflags & WEAPON_BIG2)
  340.      {
  341. -        precache_model ("maps/b_shell1.bsp");
  342. -        setmodel (self, "maps/b_shell1.bsp");
  343. -        self.aflag = 40;
  344. +        precache_model ("maps/b_rock1.bsp");
  345. +        setmodel (self, "maps/b_rock1.bsp");
  346. +      self.aflag = 10;
  347.      }
  348.      else
  349.      {
  350. -        precache_model ("maps/b_shell0.bsp");
  351. -        setmodel (self, "maps/b_shell0.bsp");
  352. -        self.aflag = 20;
  353. +        precache_model ("maps/b_rock0.bsp");
  354. +        setmodel (self, "maps/b_rock0.bsp");
  355. +      self.aflag = 5;
  356.      }
  357. -    self.weapon = 1;
  358. -    self.netname = "shells";
  359. +    self.weapon = 3;
  360. +    self.netname = "rockets";
  361.      setsize (self, '0 0 0', '32 32 56');
  362.      StartItem ();
  363.  };
  364. @@ -719,18 +681,18 @@
  365.  
  366.      if (self.spawnflags & WEAPON_BIG2)
  367.      {
  368. -        precache_model ("maps/b_nail1.bsp");
  369. -        setmodel (self, "maps/b_nail1.bsp");
  370. -        self.aflag = 50;
  371. +        precache_model ("maps/b_rock1.bsp");
  372. +        setmodel (self, "maps/b_rock1.bsp");
  373. +      self.aflag = 10;
  374.      }
  375.      else
  376.      {
  377. -        precache_model ("maps/b_nail0.bsp");
  378. -        setmodel (self, "maps/b_nail0.bsp");
  379. -        self.aflag = 25;
  380. +        precache_model ("maps/b_rock0.bsp");
  381. +        setmodel (self, "maps/b_rock0.bsp");
  382. +      self.aflag = 5;
  383.      }
  384. -    self.weapon = 2;
  385. -    self.netname = "nails";
  386. +    self.weapon = 3;
  387. +    self.netname = "rockets";
  388.      setsize (self, '0 0 0', '32 32 56');
  389.      StartItem ();
  390.  };
  391. @@ -746,13 +708,13 @@
  392.      {
  393.          precache_model ("maps/b_rock1.bsp");
  394.          setmodel (self, "maps/b_rock1.bsp");
  395. -        self.aflag = 10;
  396. +      self.aflag = 10;
  397.      }
  398.      else
  399.      {
  400.          precache_model ("maps/b_rock0.bsp");
  401.          setmodel (self, "maps/b_rock0.bsp");
  402. -        self.aflag = 5;
  403. +      self.aflag = 5;
  404.      }
  405.      self.weapon = 3;
  406.      self.netname = "rockets";
  407. @@ -770,18 +732,18 @@
  408.  
  409.      if (self.spawnflags & WEAPON_BIG2)
  410.      {
  411. -        precache_model ("maps/b_batt1.bsp");
  412. -        setmodel (self, "maps/b_batt1.bsp");
  413. -        self.aflag = 12;
  414. +        precache_model ("maps/b_rock1.bsp");
  415. +        setmodel (self, "maps/b_rock1.bsp");
  416. +      self.aflag = 10;
  417.      }
  418.      else
  419.      {
  420. -        precache_model ("maps/b_batt0.bsp");
  421. -        setmodel (self, "maps/b_batt0.bsp");
  422. -        self.aflag = 6;
  423. +        precache_model ("maps/b_rock0.bsp");
  424. +        setmodel (self, "maps/b_rock0.bsp");
  425. +      self.aflag = 5;
  426.      }
  427. -    self.weapon = 4;
  428. -    self.netname = "cells";
  429. +    self.weapon = 3;
  430. +    self.netname = "rockets";
  431.      setsize (self, '0 0 0', '32 32 56');
  432.      StartItem ();
  433.  };
  434. @@ -803,36 +765,36 @@
  435.      {
  436.          if (self.spawnflags & WEAPON_BIG)
  437.          {
  438. -            precache_model ("maps/b_shell1.bsp");
  439. -            setmodel (self, "maps/b_shell1.bsp");
  440. -            self.aflag = 40;
  441. +            precache_model ("maps/b_rock1.bsp");
  442. +            setmodel (self, "maps/b_rock1.bsp");
  443. +            self.aflag = 10;
  444.          }
  445.          else
  446.          {
  447. -            precache_model ("maps/b_shell0.bsp");
  448. -            setmodel (self, "maps/b_shell0.bsp");
  449. -            self.aflag = 20;
  450. +            precache_model ("maps/b_rock0.bsp");
  451. +            setmodel (self, "maps/b_rock0.bsp");
  452. +            self.aflag = 5;
  453.          }
  454. -        self.weapon = 1;
  455. -        self.netname = "shells";
  456. +        self.weapon = 3;
  457. +        self.netname = "rockets";
  458.      }
  459.  
  460.      if (self.spawnflags & WEAPON_SPIKES)
  461.      {
  462.          if (self.spawnflags & WEAPON_BIG)
  463.          {
  464. -            precache_model ("maps/b_nail1.bsp");
  465. -            setmodel (self, "maps/b_nail1.bsp");
  466. -            self.aflag = 40;
  467. +            precache_model ("maps/b_rock1.bsp");
  468. +            setmodel (self, "maps/b_rock1.bsp");
  469. +            self.aflag = 10;
  470.          }
  471.          else
  472.          {
  473. -            precache_model ("maps/b_nail0.bsp");
  474. -            setmodel (self, "maps/b_nail0.bsp");
  475. -            self.aflag = 20;
  476. +            precache_model ("maps/b_rock0.bsp");
  477. +            setmodel (self, "maps/b_rock0.bsp");
  478. +            self.aflag = 5;
  479.          }
  480. -        self.weapon = 2;
  481. -        self.netname = "spikes";
  482. +        self.weapon = 3;
  483. +        self.netname = "rockets";
  484.      }
  485.  
  486.      if (self.spawnflags & WEAPON_ROCKET)
  487. @@ -1359,10 +1321,11 @@
  488.      else
  489.          item.netname = "";
  490.  
  491. -    item.ammo_shells = self.ammo_shells;
  492. -    item.ammo_nails = self.ammo_nails;
  493. -    item.ammo_rockets = self.ammo_rockets;
  494. -    item.ammo_cells = self.ammo_cells;
  495. +   item.ammo_shells = 0; // self.ammo_shells;
  496. +   item.ammo_nails = 0; // self.ammo_nails;
  497. +   item.ammo_cells = 0; // self.ammo_cells;
  498. +
  499. +   item.ammo_rockets = 2;
  500.  
  501.      item.velocity_z = 300;
  502.      item.velocity_x = -100 + (random() * 200);
  503. diff -ur --new-file ..\quake-c\src106/ogre.qc .\src/ogre.qc
  504. --- ..\quake-c\src106/ogre.qc    Thu Sep 26 11:15:40 1996
  505. +++ .\src/ogre.qc    Fri Nov 29 20:17:26 1996
  506. @@ -203,6 +203,7 @@
  507.  void() ogre_walk15    =[    $walk15,    ogre_walk16    ] {ai_walk(3);};
  508.  void() ogre_walk16    =[    $walk16,    ogre_walk1    ] {ai_walk(4);};
  509.  
  510. +/*
  511.  void() ogre_run1    =[    $run1,        ogre_run2    ] {ai_run(9);
  512.  if (random() < 0.2)
  513.      sound (self, CHAN_VOICE, "ogre/ogidle2.wav", 1, ATTN_IDLE);
  514. @@ -214,6 +215,185 @@
  515.  void() ogre_run6    =[    $run6,        ogre_run7    ] {ai_run(4);};
  516.  void() ogre_run7    =[    $run7,        ogre_run8    ] {ai_run(13);};
  517.  void() ogre_run8    =[    $run8,        ogre_run1    ] {ai_run(24);};
  518. +*/
  519. +
  520. +void()   ogre_jump1;
  521. +
  522. +void() ogre_run1  =[ $run1,      ogre_run2   ] {ai_run(10 * 2.6);
  523. +if (random() < 0.2)
  524. +    sound (self, CHAN_VOICE, "ogre/ogidle2.wav", 1, ATTN_IDLE);
  525. +};
  526. +void() ogre_run2  =[ $run2,      ogre_run3   ] {ai_run(12 * 2.6);};
  527. +void() ogre_run3  =[ $run3,      ogre_run4   ] {ai_run(9 * 2.6);};
  528. +void() ogre_run4  =[ $run4,      ogre_run5   ] {ai_run(18 * 2.6);};
  529. +void() ogre_run5  =[ $run5,      ogre_run6   ] {ai_run(14 * 2.6);};
  530. +void() ogre_run6  =[ $run6,      ogre_run7   ]
  531. +{
  532. +   ai_run(11 * 2.6);
  533. +   if (self.waterlevel == 1)
  534. +   {
  535. +      if ( random() > 0.8 )
  536. +      {
  537. +         self.think = ogre_jump1;
  538. +         self.nextthink = time + 0.2;
  539. +      }
  540. +   }
  541. +
  542. +};
  543. +void() ogre_run7  =[ $run7,      ogre_run8   ] {ai_run(13 * 2.6);};
  544. +void() ogre_run8  =[ $run8,      ogre_run1   ] {ai_run(19 * 2.6);};
  545. +
  546. +
  547. +
  548. +
  549. +
  550. +
  551. +void()   Ogre_JumpTouch;
  552. +
  553. +
  554. +void()   ogre_jump1   =[ $run1,     ogre_jump2   ] {ai_face();};
  555. +void()   ogre_jump2   =[ $run2,     ogre_jump3   ] {ai_face();};
  556. +void()   ogre_jump3   =[ $run3,     ogre_jump4   ] {ai_face();};
  557. +void()   ogre_jump4   =[ $run4,     ogre_jump5   ]
  558. +{
  559. +   local vector dir;
  560. +   local float dist;
  561. +   // local string s1;
  562. +
  563. +   ai_face();
  564. +    
  565. +   self.touch = Ogre_JumpTouch;
  566. +    makevectors (self.angles);
  567. +    self.origin_z = self.origin_z + 1;
  568. +   if (self.enemy.origin_z > self.origin_z + 40)
  569. +   {
  570. +
  571. +      if ( infront(self.enemy) || self.waterlevel == 1 )
  572. +      {
  573. +         dir = normalize(self.enemy.origin - self.origin);
  574. +         dist = vlen(self.enemy.origin - self.origin);
  575. +         self.velocity = dir * dist;
  576. +      }
  577. +      else
  578. +         self.velocity = v_forward * 150;
  579. +
  580. +      dist = self.enemy.origin_z - self.origin_z;
  581. +
  582. +      // complete f***in hack, but a good 'un
  583. +      // gives ogre a vertical velocity to always jump to just
  584. +      // above player's head for any given distance between
  585. +      // z origins.  (Found it the hard way, E2M2 end area w/god/noclip
  586. +      // just moveing up and down checking the effects of different
  587. +      // formulas - write it down, works as good as the real formula
  588. +      // whatever that might be :)
  589. +      dist = dist - 237;
  590. +      self.velocity_z = 714 + dist;
  591. +
  592. +      
  593. +      /*
  594. +      if (self.enemy.classname == "player")
  595. +      {
  596. +          sprint( self.enemy, "waterlevel: " );
  597. +          s1 = ftos( self.waterlevel );
  598. +          sprint( self.enemy, s1 );
  599. +         //sprint( self.enemy, "z vel: " );
  600. +         //s1 = ftos( self.velocity_z );
  601. +         //sprint( self.enemy, s1 );
  602. +          sprint( self.enemy, "\n" );
  603. +
  604. +      }
  605. +      */
  606. +
  607. +
  608. +   }
  609. +   else
  610. +   {
  611. +      // slow forward to fall off ledge if player down
  612. +      // else normal fiend horizontal velocity
  613. +      if (self.enemy.origin_z < self.origin_z - 40)
  614. +         self.velocity = v_forward * 150;
  615. +      else
  616. +         self.velocity = v_forward * 600;
  617. +
  618. +      // check for wall in front
  619. +      traceline( self.origin - '0 0 16',
  620. +                 (self.origin - '0 0 16') + v_forward*150, TRUE, self);
  621. +
  622. +      // attempt to jump wall or normal fiend vel.
  623. +      if (trace_fraction < 1)
  624. +      {
  625. +         self.velocity = v_forward * 110;
  626. +         self.velocity_z = 250 * (random() + 1); // 550;
  627. +      }
  628. +      else
  629. +         self.velocity_z = 250;
  630. +   }
  631. +
  632. +
  633. +   if (self.flags & FL_ONGROUND)
  634. +        self.flags = self.flags - FL_ONGROUND;
  635. +
  636. +};
  637. +void()   ogre_jump5   =[ $run5,     ogre_jump6   ] {};
  638. +void()   ogre_jump6   =[ $run6,     ogre_jump7   ] {};
  639. +void()   ogre_jump7   =[ $run7,     ogre_jump8   ] {};
  640. +void()   ogre_jump8   =[    $run8,     ogre_jump9   ] {};
  641. +void()   ogre_jump9   =[    $run1,     ogre_jump10  ] {};
  642. +void()   ogre_jump10  =[    $run2, ogre_jump1   ] {
  643. +self.nextthink = time + 3;
  644. +// if three seconds pass, assume ogre is stuck and jump again
  645. +};
  646. +
  647. +void()   ogre_jump11  =[    $run1, ogre_jump12  ] {};
  648. +void()   ogre_jump12  =[    $run2, ogre_run1 ] {};
  649. +
  650. +
  651. +void()   Ogre_JumpTouch =
  652. +{
  653. +    local    float    ldmg;
  654. +
  655. +    if (self.health <= 0)
  656. +        return;
  657. +        
  658. +    if (other.takedamage)
  659. +    {
  660. +        if ( vlen(self.velocity) > 400 )
  661. +        {
  662. +         sound (self, CHAN_VOICE, "ogre/ogwake.wav", 1, ATTN_NORM);  
  663. +         ldmg = 1 + 10*random();
  664. +            T_Damage (other, self, self, ldmg);    
  665. +        }
  666. +    }
  667. +
  668. +    if (!checkbottom(self))
  669. +    {
  670. +        if (self.flags & FL_ONGROUND)
  671. +        {    // jump randomly to not get hung up
  672. +//dprint ("popjump\n");
  673. +    self.touch = SUB_Null;
  674. +   self.think = ogre_jump1;
  675. +    self.nextthink = time + 0.1;
  676. +
  677. +//            self.velocity_x = (random() - 0.5) * 600;
  678. +//            self.velocity_y = (random() - 0.5) * 600;
  679. +//            self.velocity_z = 200;
  680. +//            self.flags = self.flags - FL_ONGROUND;
  681. +        }
  682. +        return;    // not on ground yet
  683. +    }
  684. +
  685. +    self.touch = SUB_Null;
  686. +   self.think = ogre_jump11;
  687. +    self.nextthink = time + 0.1;
  688. +};
  689. +
  690. +
  691. +
  692. +
  693. +
  694. +
  695. +
  696. +
  697.  
  698.  void() ogre_swing1    =[    $swing1,        ogre_swing2    ] {ai_charge(11);
  699.  sound (self, CHAN_WEAPON, "ogre/ogsawatk.wav", 1, ATTN_NORM);
  700. @@ -438,7 +618,8 @@
  701.  
  702.      setmodel (self, "progs/ogre.mdl");
  703.  
  704. -    setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
  705. +   // setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
  706. +   setsize (self, VEC_HULL_MIN, VEC_HULL_MAX);
  707.      self.health = 200;
  708.  
  709.      self.th_stand = ogre_stand1;
  710. @@ -446,7 +627,8 @@
  711.      self.th_run = ogre_run1;
  712.      self.th_die = ogre_die;
  713.      self.th_melee = ogre_melee;
  714. -    self.th_missile = ogre_nail1;
  715. +   // self.th_missile = ogre_nail1;
  716. +   self.th_missile = ogre_jump1;
  717.      self.th_pain = ogre_pain;
  718.      
  719.      walkmonster_start();
  720. diff -ur --new-file ..\quake-c\src106/soldier.qc .\src/soldier.qc
  721. --- ..\quake-c\src106/soldier.qc    Thu Sep 26 11:15:40 1996
  722. +++ .\src/soldier.qc    Fri Nov 29 20:17:28 1996
  723. @@ -43,6 +43,7 @@
  724.  ==============================================================================
  725.  */
  726.  
  727. +void() OgreFireGrenade;
  728.  void() army_fire;
  729.  
  730.  void()    army_stand1    =[    $stand1,    army_stand2    ] {ai_stand();};
  731. @@ -98,10 +99,17 @@
  732.  void()    army_atk2    =[    $shoot2,    army_atk3    ] {ai_face();};
  733.  void()    army_atk3    =[    $shoot3,    army_atk4    ] {ai_face();};
  734.  void()    army_atk4    =[    $shoot4,    army_atk5    ] {ai_face();};
  735. -void()    army_atk5    =[    $shoot5,    army_atk6    ] {ai_face();army_fire();
  736. -self.effects = self.effects | EF_MUZZLEFLASH;};
  737. +
  738. +// ### grenade mod ###
  739. +// void()   army_atk5   =[ $shoot5, army_atk6   ] {ai_face();army_fire();
  740. +// self.effects = self.effects | EF_MUZZLEFLASH;};
  741. +void()   army_atk5   =[ $shoot5, army_atk6   ] {ai_face();OgreFireGrenade();};
  742. +
  743.  void()    army_atk6    =[    $shoot6,    army_atk7    ] {ai_face();};
  744. -void()    army_atk7    =[    $shoot7,    army_atk8    ] {ai_face();SUB_CheckRefire (army_atk1);};
  745. +
  746. +// void()   army_atk7   =[ $shoot7, army_atk8   ] {ai_face(); SUB_CheckRefire (army_atk1);};
  747. +void()   army_atk7   =[ $shoot7, army_atk8   ] {ai_face();};
  748. +
  749.  void()    army_atk8    =[    $shoot8,    army_atk9    ] {ai_face();};
  750.  void()    army_atk9    =[    $shoot9,    army_run1    ] {ai_face();};
  751.  
  752. diff -ur --new-file ..\quake-c\src106/weapons.qc .\src/weapons.qc
  753. --- ..\quake-c\src106/weapons.qc    Mon Sep 30 03:08:08 1996
  754. +++ .\src/weapons.qc    Fri Nov 29 21:05:14 1996
  755. @@ -1221,6 +1221,32 @@
  756.      dprint ("quad cheat\n");
  757.  };
  758.  
  759. +
  760. +void() W_Shotgun_quickshot =
  761. +{
  762. +   local string s;
  763. +
  764. +
  765. +   if (self.ammo_shells < 1)
  766. +      return;
  767. +
  768. +   W_ChangeWeapon();
  769. +   W_Attack();
  770. +
  771. +   if (self.ammo_shells > 0)
  772. +   {
  773. +      s = ftos( self.ammo_shells );
  774. +      sprint( self, "You have " );
  775. +      sprint( self, s );
  776. +      sprint( self, " shells left...\n" );
  777. +   }
  778. +   else
  779. +      sprint( self, "** Out of shells **\n" );
  780. +
  781. +
  782. +   self.impulse = 6;
  783. +};
  784. +
  785.  /*
  786.  ============
  787.  ImpulseCommands
  788. @@ -1229,7 +1255,11 @@
  789.  */
  790.  void() ImpulseCommands =
  791.  {
  792. -    if (self.impulse >= 1 && self.impulse <= 8)
  793. +
  794. +   if (self.impulse == 2)
  795. +      W_Shotgun_quickshot();
  796. +
  797. +   if (self.impulse >= 1 && self.impulse <= 8)
  798.          W_ChangeWeapon ();
  799.  
  800.      if (self.impulse == 9)
  801.