home *** CD-ROM | disk | FTP | other *** search
/ Superpower (Alt) / SUPERPOWER.iso / q / patch / mbq090 / _srvmods.pat < prev    next >
Encoding:
Text File  |  1996-08-29  |  17.0 KB  |  521 lines

  1. diff -ur -x qcc -x *.exe -x *.list -x *.pl -x *.h qc-ori/buttons.qc qc/buttons.qc
  2. --- qc-ori/buttons.qc    Sat Aug 17 00:00:00 1996
  3. +++ qc/buttons.qc    Fri Aug 30 19:59:04 1996
  4. @@ -55,6 +55,7 @@
  5.  {
  6.      if (other.classname != "player")
  7.          return;
  8. +    if (other.player_flag & PLAYER_IS_OBSERVER) return; //#jp#(Observer)
  9.      self.enemy = other;
  10.      button_fire ();
  11.  };
  12. diff -ur -x qcc -x *.exe -x *.list -x *.pl -x *.h qc-ori/client.qc qc/client.qc
  13. --- qc-ori/client.qc    Sat Aug 17 00:00:00 1996
  14. +++ qc/client.qc    Sat Aug 31 15:43:27 1996
  15. @@ -53,6 +53,7 @@
  16.      parm7 = self.ammo_cells;
  17.      parm8 = self.weapon;
  18.      parm9 = self.armortype * 100;
  19. +        parm16 = self.player_flag; //#jp#(PlayerFlag)
  20.  };
  21.  
  22.  void() SetNewParms =
  23. @@ -66,15 +67,20 @@
  24.      parm6 = 0;
  25.      parm8 = 1;
  26.      parm9 = 0;
  27. +        parm16 = 0; //#jp#(PlayerFlag)
  28.  };
  29.  
  30.  void() DecodeLevelParms =
  31.  {
  32. +        self.player_flag = parm16;            //#jp#(PlayerFlag)
  33. +        self.skin = (self.player_flag & 65280)/256;    //#jp#(Skin)
  34. +if (!USE_MODULE_OBSERVER) {                //#jp#(Observer)
  35.      if (serverflags)
  36.      {
  37.          if (world.model == "maps/start.bsp")
  38.              SetNewParms ();        // take away all stuff on starting new episode
  39.      }
  40. +}                            //#jp#(Observer)
  41.      
  42.      self.items = parm1;
  43.      self.health = parm2;
  44. @@ -143,6 +149,7 @@
  45.  // skip any text in deathmatch
  46.      if (deathmatch)
  47.      {
  48. +        LevelSelectSelectLevel(); //#jp#(LevelSelect)
  49.          GotoNextMap ();
  50.          return;
  51.      }
  52. @@ -288,6 +295,11 @@
  53.      if (other.classname != "player")
  54.          return;
  55.  
  56. +if (ExitRulesExitingIsNotAllowed(other)) {    //#jp#(ExitRules)
  57. +   T_Damage (other, world, other, 50000);    //#jp#(ExitRules)
  58. +   return;                    //#jp#(ExitRules)
  59. +}                        //#jp#(ExitRules)
  60. +
  61.      if (cvar("noexit"))
  62.      {
  63.          T_Damage (other, self, self, 50000);
  64. @@ -343,7 +355,9 @@
  65.      if (coop)
  66.      {
  67.          // make a copy of the dead body for appearances sake
  68. +if (!(self.player_flag & PLAYER_IS_OBSERVER)) {//#jp#(Observer)
  69.          CopyToBodyQue (self);
  70. +}//#jp#(Observer)
  71.          // get the spawn parms as they were at level start
  72.          setspawnparms (self);
  73.          // respawn        
  74. @@ -352,9 +366,12 @@
  75.      else if (deathmatch)
  76.      {
  77.          // make a copy of the dead body for appearances sake
  78. +if (!(self.player_flag & PLAYER_IS_OBSERVER)) {//#jp#(Observer)
  79.          CopyToBodyQue (self);
  80. +}//#jp#(Observer)
  81.          // set default spawn parms
  82.          SetNewParms ();
  83. +        parm16 = self.player_flag; //#jp#(PlayerFlag)
  84.          // respawn        
  85.          PutClientInServer ();
  86.      }
  87. @@ -379,6 +396,12 @@
  88.      set_suicide_frame ();
  89.      self.modelindex = modelindex_player;
  90.      self.frags = self.frags - 2;    // extra penalty
  91. +        RankCountEvent(self,RANK_SUICIDE);        //#jp#(Rank)
  92. +    ServerConsoleClientSuicide(self);               //#jp#(ServerConsole)
  93. +        if (KickSuicider(self)) return;            //#jp#(KickSuicider)
  94. +        if (self.player_flag & PLAYER_IS_OBSERVER) {    //#jp#(Observer)
  95. +           self.observer_status = OBSERVER_BECOME_OBSERVER;//#jp#(Observer)
  96. +        }                        //#jp#(Observer)
  97.      respawn ();
  98.  };
  99.  
  100. @@ -479,7 +502,26 @@
  101.  // paustime is set by teleporters to keep the player from moving a while
  102.      self.pausetime = 0;
  103.      
  104. +if (!self.kick_suicider_lasttime)                //#jp#(KickSuicider)
  105. +   self.kick_suicider_lasttime = time - 100000;            //#jp#(KickSuicider)
  106. +if (!self.player_flag) {                    //#jp#(PlayerFlag)
  107. +   PlayerFlagSetFlag(self,PLAYER_IS_CLIENT);            //#jp#(PlayerFlag)
  108. +   if (USE_MODULE_OBSERVER) {                    //#jp#(Observer)
  109. +      self.observer_status = OBSERVER_BECOME_OBSERVER;        //#jp#(Observer)
  110. +   }                                //#jp#(Observer)
  111. +}                                //#jp#(PlayerFlag)
  112. +if (self.player_flag & PLAYER_IS_OBSERVER) {            //#jp#(Observer)
  113. +   // happens after level change                //#jp#(Observer)
  114. +   if (!(self.items & IT_AXE)) {                //#jp#(Observer)
  115. +      //dprint("PutClientInServer: stay observer after level change\n");//#jp#(debug)
  116. +      self.observer_status = OBSERVER_BECOME_OBSERVER;        //#jp#(Observer)
  117. +   }                                //#jp#(Observer)
  118. +}                                //#jp#(Observer)
  119. +
  120.      spot = SelectSpawnPoint ();
  121. +if (!(self.observer_status & OBSERVER_BECOME_OBSERVER)) {    //#jp#(Observer)
  122. +   spot = TelefragSelectSpawnPoint(spot);            //#jp#(Telefrag)
  123. +}                                //#jp#(Observer)
  124.  
  125.      self.origin = spot.origin + '0 0 1';
  126.      self.angles = spot.angles;
  127. @@ -492,6 +534,14 @@
  128.      setmodel (self, "progs/player.mdl");
  129.      modelindex_player = self.modelindex;
  130.  
  131. +if (self.observer_status & OBSERVER_BECOME_OBSERVER) {        //#jp#(Observer)
  132. +   //dprint("PutClientInServer: becoming observer\n");        //#jp#(debug)
  133. +   ObserverBecomeObserver(self);                //#jp#(Observer)
  134. +   PlayerFlagSetFlag(self,PLAYER_IS_OBSERVER);            //#jp#(Observer)
  135. +   return;                            //#jp#(Observer)
  136. +}                                //#jp#(Observer)
  137. +   //dprint("PutClientInServer: spawning player regularly\n");    //#jp#(debug)
  138. +
  139.      setsize (self, VEC_HULL_MIN, VEC_HULL_MAX);
  140.      
  141.      self.view_ofs = '0 0 22';
  142. @@ -677,6 +727,10 @@
  143.      if (gameover)    // someone else quit the game already
  144.          return;
  145.          
  146. +if (time > vote_checktime) {        //#jp#(Vote)
  147. +   if (VoteCheckVotes()) return;    //#jp#(Vote)
  148. +}                    //#jp#(Vote)
  149. +
  150.      timelimit = cvar("timelimit") * 60;
  151.      fraglimit = cvar("fraglimit");
  152.      
  153. @@ -737,6 +791,8 @@
  154.          return;
  155.      }
  156.  
  157. +   if (ObserverDeathThink()) return;    //#jp#(Observer)
  158. +
  159.  // wait for any button down
  160.      if (!self.button2 && !self.button1 && !self.button0)
  161.          return;
  162. @@ -812,10 +868,12 @@
  163.  
  164.      if (self.waterlevel != 3)
  165.      {
  166. +if (!(self.player_flag & PLAYER_IS_OBSERVER)) {//#jp#(Observer)
  167.          if (self.air_finished < time)
  168.              sound (self, CHAN_VOICE, "player/gasp2.wav", 1, ATTN_NORM);
  169.          else if (self.air_finished < time + 9)
  170.              sound (self, CHAN_VOICE, "player/gasp1.wav", 1, ATTN_NORM);
  171. +}//#jp#(Observer)
  172.          self.air_finished = time + 12;
  173.          self.dmg = 2;
  174.      }
  175. @@ -948,6 +1006,49 @@
  176.          return;
  177.      }
  178.      
  179. +        if (!(self.player_flag & PLAYER_PASSED_INIT_PHASE)) {        //#jp#(PlayerFlag)
  180. +           if (!(self.player_flag & PLAYER_IS_INITIALIZED)) {        //#jp#(PlayerFlag)
  181. +              ModulesInitModules(self);                    //#jp#(Modules)
  182. +              if (USE_MODULE_OBSERVER) {                //#jp#(Observer)
  183. +                 sound (self, CHAN_BODY, "wizard/wsight.wav", 1, ATTN_NONE);//#jp#(Observer)
  184. +              }                                //#jp#(Observer)
  185. +              self.player_init_time = time;                //#jp#(PlayerFlag)
  186. +              PlayerFlagSetFlag(self,PLAYER_IS_INITIALIZED);        //#jp#(PlayerFlag)
  187. +           }                                //#jp#(PlayerFlag)
  188. +           if (!(self.player_flag & PLAYER_DID_INIT_CALLS)) {        //#jp#(Init)
  189. +              if (time > self.player_init_time + 1) {            //#jp#(Init)
  190. +                 InitLetClientExecInit(self);                //#jp#(Init)
  191. +                 PlayerFlagSetFlag(self,PLAYER_DID_INIT_CALLS);        //#jp#(Init)
  192. +              }                                //#jp#(Init)
  193. +           }                                //#jp#(Init)
  194. +           if (!(self.player_flag & PLAYER_PASSED_MOTD)) {        //#jp#(Motd)
  195. +              MotdThink();                        //#jp#(Motd)
  196. +           }                                //#jp#(Motd)
  197. +           if (time > self.player_init_time + 10) {            //#jp#(PlayerFlag)
  198. +              PlayerFlagSetFlag(self,PLAYER_PASSED_INIT_PHASE);        //#jp#(PlayerFlag)
  199. +           }                                //#jp#(PlayerFlag)
  200. +        }                                //#jp#(PlayerFlag)
  201. +        if (self.modules_level_inited != 2) {                //#jp#(Modules)
  202. +           if (!self.modules_level_inited) {                //#jp#(Modules)
  203. +              if (USE_MODULE_OBSERVER) {                //#jp#(Observer)
  204. +                 bprint (self.netname);                    //#jp#(Observer)
  205. +                 bprint (" entered the game\n");            //#jp#(Observer)
  206. +              }                                //#jp#(Observer)
  207. +              self.modules_level_entertime = time;            //#jp#(Modules)
  208. +              self.modules_level_inited = 1;                //#jp#(Modules)
  209. +           }                                //#jp#(Observer)
  210. +           if (time - self.modules_level_entertime > 2) {        //#jp#(Modules)
  211. +              if (self.player_flag & PLAYER_PASSED_INIT_PHASE) {    //#jp#(PlayerFlag)
  212. +                 ModulesShowLevelInfo(self);                //#jp#(Modules)
  213. +                 self.modules_level_inited = 2;                //#jp#(Modules)
  214. +              }                                //#jp#(PlayerFlag)
  215. +           }                                //#jp#(Modules)
  216. +        }                                //#jp#(Modules)
  217. +        if (self.player_flag & PLAYER_IS_OBSERVER) {            //#jp#(Observer)
  218. +           ObserverThink();                        //#jp#(Observer)
  219. +           return;                            //#jp#(Observer)
  220. +        }                                //#jp#(Observer)
  221. +
  222.      if (self.deadflag == DEAD_DYING)
  223.          return;    // dying, so do nothing
  224.  
  225. @@ -1173,9 +1274,12 @@
  226.  */
  227.  void() ClientConnect =
  228.  {
  229. +if (!USE_MODULE_OBSERVER) {//#jp#(Observer)
  230.      bprint (self.netname);
  231.      bprint (" entered the game\n");
  232. +}//#jp#(Observer)
  233.      
  234. +        ServerConsolePlayerEntered(self); //#jp#(ServerConsole)
  235.  // a client connecting during an intermission can cause problems
  236.      if (intermission_running)
  237.          ExitIntermission ();
  238. @@ -1218,6 +1322,9 @@
  239.      local    string deathstring, deathstring2;
  240.      rnum = random();
  241.  
  242. +    RankClientObituary(targ,attacker); //#jp#(Rank)
  243. +    ServerConsoleClientObituary(targ,attacker); //#jp#(ServerConsole)
  244. +
  245.      if (targ.classname == "player")
  246.      {
  247.          if (attacker.classname == "teledeath")
  248. @@ -1247,6 +1354,12 @@
  249.              {
  250.                  // killed self
  251.                  attacker.frags = attacker.frags - 1;
  252. +if (targ.exitrules_death) {        //#jp#(ExitRules)
  253. +   if (USE_MODULE_EXITRULES) {        //#jp#(ExitRules)
  254. +      ExitRulesClientObituary(targ);    //#jp#(ExitRules)
  255. +      return;                //#jp#(ExitRules)
  256. +   }                    //#jp#(ExitRules)
  257. +}                    //#jp#(ExitRules)
  258.                  bprint (targ.netname);
  259.                  
  260.                  if (targ.weapon == 64 && targ.waterlevel > 1)
  261. diff -ur -x qcc -x *.exe -x *.list -x *.pl -x *.h qc-ori/items.qc qc/items.qc
  262. --- qc-ori/items.qc    Sat Aug 17 00:00:00 1996
  263. +++ qc/items.qc    Fri Aug 30 19:59:04 1996
  264. @@ -168,10 +168,12 @@
  265.              return;
  266.      }
  267.      
  268. +     if (!USE_MODULE_MESSAGES || messages_flag & MESSAGES_HEALTH) { //#jp#(Messages)
  269.      sprint(other, "You receive ");
  270.      s = ftos(self.healamount);
  271.      sprint(other, s);
  272.      sprint(other, " health\n");
  273. +     }                    //#jp#(Messages)
  274.      
  275.  // health touch sound
  276.      sound(other, CHAN_ITEM, self.noise, 1, ATTN_NORM);
  277. @@ -275,6 +277,7 @@
  278.          self.nextthink = time + 20;
  279.      self.think = SUB_regen;
  280.  
  281. +    if (!USE_MODULE_MESSAGES || messages_flag & MESSAGES_ARMOR) //#jp#(Messages)
  282.      sprint(other, "You got armor\n");
  283.  // armor touch sound
  284.      sound(other, CHAN_ITEM, "items/armor1.wav", 1, ATTN_NORM);
  285. @@ -460,9 +463,11 @@
  286.      else
  287.          objerror ("weapon_touch: unknown classname");
  288.  
  289. +    if (!USE_MODULE_MESSAGES || messages_flag & MESSAGES_WEAPON) {//#jp#(Messages)
  290.      sprint (other, "You got the ");
  291.      sprint (other, self.netname);
  292.      sprint (other, "\n");
  293. +    }//#jp#(Messages)
  294.  // weapon touch sound
  295.      sound (other, CHAN_ITEM, "weapons/pkup.wav", 1, ATTN_NORM);
  296.      stuffcmd (other, "bf\n");
  297. @@ -645,9 +650,11 @@
  298.  
  299.      bound_other_ammo ();
  300.      
  301. +    if (!USE_MODULE_MESSAGES || messages_flag & MESSAGES_AMMO) {//#jp#(Messages)
  302.      sprint (other, "You got the ");
  303.      sprint (other, self.netname);
  304.      sprint (other, "\n");
  305. +    }//#jp#(Messages)
  306.  // ammo touch sound
  307.      sound (other, CHAN_ITEM, "weapons/lock4.wav", 1, ATTN_NORM);
  308.      stuffcmd (other, "bf\n");
  309. @@ -879,9 +886,11 @@
  310.      if (other.items & self.items)
  311.          return;
  312.  
  313. +    if (!USE_MODULE_MESSAGES || messages_flag & MESSAGES_KEY) {//#jp#(Messages)
  314.      sprint (other, "You got the ");
  315.      sprint (other, self.netname);
  316.      sprint (other,"\n");
  317. +    }//#jp#(Messages)
  318.  
  319.      sound (other, CHAN_ITEM, self.noise, 1, ATTN_NORM);
  320.      stuffcmd (other, "bf\n");
  321. @@ -1086,9 +1095,11 @@
  322.      if (other.health <= 0)
  323.          return;
  324.  
  325. +    if (!USE_MODULE_MESSAGES || messages_flag & MESSAGES_POWERUP) {//#jp#(Messages)
  326.      sprint (other, "You got the ");
  327.      sprint (other, self.netname);
  328.      sprint (other,"\n");
  329. +    }//#jp#(Messages)
  330.  
  331.      if (deathmatch)
  332.      {
  333. @@ -1254,6 +1265,7 @@
  334.      
  335.      bound_other_ammo ();
  336.  
  337. +    if (!USE_MODULE_MESSAGES || messages_flag & MESSAGES_BACKPACK) {//#jp#(Messages)
  338.      sprint (other, "You get ");
  339.  
  340.      if (self.ammo_shells)
  341. @@ -1282,6 +1294,8 @@
  342.      }
  343.      
  344.      sprint (other, "\n");
  345. +    }//#jp#(Messages)
  346. +
  347.  // backpack touch sound
  348.      sound (other, CHAN_ITEM, "weapons/lock4.wav", 1, ATTN_NORM);
  349.      stuffcmd (other, "bf\n");
  350. diff -ur -x qcc -x *.exe -x *.list -x *.pl -x *.h qc-ori/progs.src qc/progs.src
  351. --- qc-ori/progs.src    Sat Aug 17 00:00:00 1996
  352. +++ qc/progs.src    Fri Aug 30 19:59:04 1996
  353. @@ -1,6 +1,23 @@
  354.  ../progs.dat
  355.  
  356.  defs.qc
  357. +
  358. +_modules.qh
  359. +_playflg.qh
  360. +_exitrls.qh
  361. +_init.qh
  362. +_kckscdr.qh
  363. +_levsel.qh
  364. +_message.qh
  365. +_motd.qh
  366. +_rank.qh
  367. +_skin.qh
  368. +_observe.qh
  369. +_servhlp.qh
  370. +_servcon.qh
  371. +_telefrg.qh
  372. +_vote.qh
  373. +
  374.  subs.qc
  375.  fight.qc
  376.  ai.qc
  377. @@ -33,3 +50,21 @@
  378.  shalrath.qc        // registered
  379.  enforcer.qc        // registered
  380.  oldone.qc        // registered
  381. +
  382. +_playflg.qc
  383. +_exitrls.qc
  384. +_init.qc
  385. +_kckscdr.qc
  386. +_levsel.qc
  387. +_message.qc
  388. +_modules.qc
  389. +_motd.qc
  390. +_observe.qc
  391. +_skin.qc
  392. +_rank.qc
  393. +_servcon.qc
  394. +_servhlp.qc
  395. +_telefrg.qc
  396. +_vote.qc
  397. +
  398. +
  399. diff -ur -x qcc -x *.exe -x *.list -x *.pl -x *.h qc-ori/weapons.qc qc/weapons.qc
  400. --- qc-ori/weapons.qc    Sat Aug 17 00:00:00 1996
  401. +++ qc/weapons.qc    Fri Aug 30 19:59:05 1996
  402. @@ -954,6 +954,8 @@
  403.  {
  404.      local    float    it, am, fl;
  405.      
  406. +    if (self.player_flag & PLAYER_IS_OBSERVER) return; //#jp#(Observer)
  407. +
  408.      it = self.items;
  409.      am = 0;
  410.      
  411. @@ -1066,6 +1068,15 @@
  412.  void() CycleWeaponCommand =
  413.  {
  414.      local    float    it, am;
  415. +
  416. +    // Once I observed a 'runaway loop error'    //#jp#(Bugfix)
  417. +    // in this routine. I don't understand        //#jp#(Bugfix)
  418. +    // what it really caused, but to avoid it in    //#jp#(Bugfix)
  419. +    // the future the lines marked 'Bugfix'     //#jp#(Bugfix)
  420. +    // have been added to this routine.         //#jp#(Bugfix)
  421. +    local float weapon_old;              //#jp#(Bugfix)
  422. +    weapon_old = self.weapon;              //#jp#(Bugfix)
  423. +    if (self.player_flag & PLAYER_IS_OBSERVER) return; //#jp#(Observer)
  424.      
  425.      it = self.items;
  426.      self.impulse = 0;
  427. @@ -1126,6 +1137,12 @@
  428.              W_SetCurrentAmmo ();
  429.              return;
  430.          }
  431. +        if (weapon_old == self.weapon) {    //#jp#(Bugfix)
  432. +           dprint("CycleWeaponCommand: warning: avoiding runaway loop error caused by ");//#jp#(Bugfix)
  433. +           dprint(self.netname);        //#jp#(Bugfix)
  434. +           dprint("\n");            //#jp#(Bugfix)
  435. +           return;                //#jp#(Bugfix)
  436. +        }                    //#jp#(Bugfix)
  437.      }
  438.  
  439.  };
  440. @@ -1172,6 +1189,58 @@
  441.  
  442.      if (self.impulse == 255)
  443.          QuadCheat ();
  444. +
  445. +        if (self.impulse >= 200) {                //#jp#(Modules)
  446. +           if (self.impulse == 200) {                //#jp#(Skin)
  447. +          if (USE_MODULE_SKIN) SkinUseOtherSkin(self,1);    //#jp#(Skin)
  448. +           }                            //#jp#(Skin)
  449. +           else if (self.impulse == 201) {            //#jp#(Skin)
  450. +          if (USE_MODULE_SKIN) SkinUseOtherSkin(self,(-1));    //#jp#(Skin)
  451. +           }                            //#jp#(Skin)
  452. +           else if (self.impulse == 202) {            //#jp#(Skin)
  453. +          if (USE_MODULE_SKIN) SkinHelp(self);        //#jp#(Skin)
  454. +           }                            //#jp#(Skin)
  455. +           else if (self.impulse == 203) {            //#jp#(Rank)
  456. +              if (USE_MODULE_RANK) RankDumpRanksToConsole(self);//#jp#(Rank)
  457. +           }                            //#jp#(Rank)
  458. +           else if (self.impulse == 204) {            //#jp#(Rank)
  459. +              if (USE_MODULE_RANK) RankHelp(self);        //#jp#(Rank)
  460. +           }                            //#jp#(Rank)
  461. +           else if (self.impulse == 205) {            //#jp#(Observer)
  462. +              if (USE_MODULE_OBSERVER) ObserverHelp(self);    //#jp#(Observer)
  463. +           }                            //#jp#(Observer)
  464. +           else if (self.impulse == 206) {            //#jp#(Observer)
  465. +              if (USE_MODULE_OBSERVER) ObserverNoclip(self);    //#jp#(Observer)
  466. +           }                            //#jp#(Observer)
  467. +           else if (self.impulse == 207) {            //#jp#(ServerHelp)
  468. +              if (USE_MODULE_SERVERHELP) ServerHelpShowHelp(self);//#jp#(ServerHelp)
  469. +           }                            //#jp#(ServerHelp)
  470. +           else if (self.impulse == 208) {            //#jp#(Init)
  471. +              if (InitCallIsPermitted(self)) {            //#jp#(Init)
  472. +                 stuffcmd(self,"init;\n");            //#jp#(Init)
  473. +              }                            //#jp#(Init)
  474. +           }                            //#jp#(Init)
  475. +           else if (self.impulse == 209) {            //#jp#(Init)
  476. +              if (InitCallIsPermitted(self)) {            //#jp#(Init)
  477. +             if (USE_MODULE_SKIN) {                //#jp#(Skin)
  478. +                    SkinQuietlyUseOtherSkin(self,1);        //#jp#(Skin)
  479. +                 }                        //#jp#(Skin)
  480. +                 stuffcmd(self,"init;\n");            //#jp#(Init)
  481. +              }                            //#jp#(Init)
  482. +           }                            //#jp#(Init)
  483. +           else if (self.impulse == 210) {            //#jp#(ExitRules)
  484. +              if (USE_MODULE_EXITRULES) ExitRulesHelp(self);    //#jp#(ExitRules)
  485. +           }                            //#jp#(ExitRules)
  486. +           else if (self.impulse == 211) {            //#jp#(VoteExit)
  487. +              if (USE_MODULE_VOTE) VoteHelp(self);        //#jp#(Vote)
  488. +           }                            //#jp#(Vote)
  489. +           else if (self.impulse == 212) {            //#jp#(Vote)
  490. +              if (USE_MODULE_VOTE) VoteExitVote(self);        //#jp#(Vote)
  491. +           }                            //#jp#(Vote)
  492. +           else if (self.impulse == 213) {            //#jp#(Vote)//#jp#(ExitRules)
  493. +              if (USE_MODULE_VOTE) VoteExitRulesVote(self);    //#jp#(Vote)//#jp#(ExitRules)
  494. +           }                            //#jp#(Vote)//#jp#(ExitRules)
  495. +        }                            //#jp#(Modules)
  496.          
  497.      self.impulse = 0;
  498.  };
  499. diff -ur -x qcc -x *.exe -x *.list -x *.pl -x *.h qc-ori/world.qc qc/world.qc
  500. --- qc-ori/world.qc    Sat Aug 17 00:00:00 1996
  501. +++ qc/world.qc    Sat Aug 31 15:26:36 1996
  502. @@ -254,6 +254,10 @@
  503.      precache_sound ("misc/water1.wav");            // swimming
  504.      precache_sound ("misc/water2.wav");            // swimming
  505.  
  506. +if (USE_MODULE_OBSERVER) {            //#jp#(Observer)
  507. +    precache_sound ("wizard/wsight.wav");    //#jp#(Observer)
  508. +}                        //#jp#(Observer)
  509. +
  510.      precache_model ("progs/player.mdl");
  511.      precache_model ("progs/eyes.mdl");
  512.      precache_model ("progs/h_player.mdl");
  513. @@ -377,6 +381,7 @@
  514.  // respawned elsewhere
  515.  void(entity ent) CopyToBodyQue =
  516.  {
  517. +    bodyque_head.skin = ent.skin; //#jp#(Skin)
  518.      bodyque_head.angles = ent.angles;
  519.      bodyque_head.model = ent.model;
  520.      bodyque_head.modelindex = ent.modelindex;
  521.