
---------------------------------------------------
L-Fire CTF Version 1.20 - Release February 25, 1999
---------------------------------------------------


Info
----
L-Fire CTF is a modification to id's CTF.  

You can visit the L-Fire Development website at
http://www.planetquake.com/LFire or email to LFire@yyz.com.


Documentation
-------------
Comprehensive documentation is in the file LFireCTFManual110.pdf,
which is available from the L-Fire Development website.


Getting Started
---------------
To run an L-Fire CTF server you will need to download two archives:

For Windows:
   LFireCTF_v1_20.zip            (gamex86.dll)
   LFireCTF_v1_20_Config.zip     (configuration files)

For Linux:
   LFireCTF_v1_20_Linux.tar.gz   (gamei386.so)
   LFireCTF_v1_20_Config.tar.gz  (configuration files)

For Solaris Sparc:
   LFireCTF_v1_20_Sparc.tar.gz   (gamesparc.so)
   LFireCTF_v1_20_Config.tar.gz  (configuration files)


1) Place the gamex86.dll, gamei386.so, or gamesparc.so in your
   quake2/ctf directory.

2) The LFireCTF_v1_20_Config.zip and LFireCTF_v1_20_Config.tar.gz archives
   contain L-Fire CTF configuration files.  The two archives contain the
   exact same files.  The only difference is whether the archives
   are zip or tar.gz.

   The contents of the configuration archives are as follows:

   LFireCfg/Ent                        Directory for entity files
   LFireCfg/HighScores                 Directory for highscore files
   LFireCfg/Logs                       Directory for log files
   LFireCfg/TempScores                 Directory for temporary score files
   
   LFireCfg/Ent/nobfg_q2ctf4.ent       Custom entity file for Outlands
   LFireCfg/HighScores/NewScores.txt   Empty highscore file template
   LFireCfg/HighScores/q2ctf1.txt      Empty highscore file for q2ctf1
      (Highscore files included for q2ctf1-q2ctf5 and as2m1-as2m7)
   
   LFireCfg/Admin.cfg                  File for admin permissions
   LFireCfg/Banned.cfg                 File for IP banning
   LFireCfg/ChangeMap.cfg              File for validating "changemap" command
   LFireCfg/LHelp.txt                  File for "LHelp" command
   LFireCfg/MapLoop.cfg                File for defining the custom map loop
   LFireCfg/MOTD.cfg                   File for defining the message of the day
   LFireCfg/ScorePreload.cfg           File for preloading level scores
   LFireCfg/Shutup.cfg                 File for silencing users
   LFireCfg/TextFilter.cfg             File for filtering words and phrases
   

   Extract the configuration archive into your quake2/ctf directory so you
   will have an LFireCfg subdirectory under quake2/ctf.  Be sure to restore
   all pathnames that are stored in the archive.

   For example, under Windows you might have C:\Quake2\ctf\LFireCfg.  Under
   Linux you might have /usr/games/quake2/ctf/lfirecfg.




----------------------------------------
Differences from L-Fire CTF Version 1.11
----------------------------------------

Bug Fixes to id CTF Code
------------------------

- Under certain conditions, flags and techs could disappear from the level.
  The only way to restore the items would be to change levels or restart the
  level.  This is the CTF reconnect bug that is well-known to mod developers
  that base their mods on the id CTF source code.

- It was impossible to have friendly fire in CTF because the
  DF_NO_FRIENDLY_FIRE dmflag was being ignored, and the CTF code essentially
  forced friendly fire off.  Normally this would be easy to fix, except that
  servers have been running too long with dmflags where DF_NO_FRIENDLY_FIRE
  is off - in other words, friendly fire should be on if the flag actually
  worked.  So if the flag was fixed, all of a sudden all the servers out
  there would have friendly fire on.  After looking at various options,
  the best way to fix this bug is to accept that the flag will always be
  broken and create a new cvar specifically for friendly fire in
  CTF: ctf_friendlyfire.

  Thanks to Agis van Estari for letting us know about the friendly fire bug.


CVar Changes
------------
 
The ctf_friendlyfire cvar was added.



Commands
--------

setctf_friendlyfire
   Admin command to set the "ctf_friendlyfire" cvar.  The permission flag
   for this command is the same as for the setdmflag command.




---------------------------------------
Differences from L-Fire CTF Version 1.1
---------------------------------------

Enhancements
------------

Added new ZBot detection code to boot players that send impulse commands to
the server.  Impulses are typically used in Quake2 to control ZBots.  There
doesn't appear to be any widely played Quake2 mods that use impulses for
mod-specific features so impulse commands that are sent to the server are
usually due to players controlling ZBots or the players had once used the
ZBot and they still have the impulse commands bound in their configurations.

Since the ZBots are being hacked to remove some of their other "footprints",
booting on impulses seems to be the only remotely reliable way of detecting
them now.  For the time being, the hacked ZBots are still controlled by
impulses so we can key off of them to detect the ZBot.  The problem with
this method is that people who aren't using the ZBot can accidentally send
impulses to the server if they had previously used the ZBot and they still
have keys bound to the ZBot impulses.  To handle this possibility, the server
boots players that send impulses, but the server does not broadcast "zzz
was using a ZBot" to all of the other players.  Instead, the player is
politely disconnected and sent a message indicating that impulses are not
permitted and they are allowed to reconnect to the server as long as they
don't send impulses.  A decent way to handle a thorny problem.



CVar Changes
------------
 
New cvars have been added: logimpulses and impulsekick.

The logimpulses cvar controls whether impulse commands sent by players are
written to the connect log.  By default, this cvar is set to "1" (on).

The impulsekick cvar controls whether players are disconnected if they send
a ZBot impulse to the server.  ZBot impulses are impulses 169 through 175.
By default, this cvar is set to "1", which will cause the server to disconnect
players that send the ZBot impulses.  If you set this cvar to "2", the server
will disconnect players if they send any impulse whatsoever.  This is to
handle a future hacked ZBot that might appear in which the ZBot has been
hacked to use different impulses than 169 through 175.

The lognames cvar has also been changed to default to "1" instead of "0".
This means that connect logs (name, IP address, ZBot impulse) are now saved
by default.



Bug Fixes
------------
 
Fixed a bug in the code that lists player names when a command is given such
as "shutup <player>" or "ignore <player>".  If there were multiple matches
for <player>, the server sends the client a list of players that match the
player name that the client gave.  The list could sometimes contain random
garbage characters that could occasionally cause the client to get kicked
off.

Fixed stuck grapple sound with the off-hand hook (for real this time).
There's actually two stuck grapple sounds with the id CTF mod.  One is the
grapple firing sound and the other is the grapple hanging sound.  We were
still using the grapple hanging sound for the off-hand hook, so we suffered
from the same bug.  We've now eliminated that sound for the off-hand hook.




----------------------------------------
Differences from L-Fire CTF Version 1.04
----------------------------------------


Enhancements
------------

- Added offhand hook option

- Added random quad respawn option (quad respawns within a window of time)

- Added random power armor (power shield/screen) respawn option

- Added "gamestats" serverinfo cvar that is automatically updated by the
  server as the level progresses.  This cvar allows people to monitor
  important game statistics through server query tools like GameSpy.

- The optional HUD with time remaining display now has the blinking flag
  icon if a player has the enemy flag.

- The join menu will now by default suggest the team with fewer captures if
  teams are equal in the number of players.  With force join, new players
  will be assigned to the team with fewer caps if the teams have the same
  number of players.



Other Changes
-------------

- The kill bonus for rocket arena overtime is now +50 health and +50 armor
  with no resetting of ammo.  The previous kill bonus was a total reset of
  a player's health, armor, and ammo, which didn't balance well.

- By default in rocket arena overtime, global chat from eliminated players
  and spectators will not be heard by the players in the game.  This is to
  eliminate spectator cheating (giving out health and location).  This can
  be overridden with the "limitarenachat" cvar.

- The "teams are uneven" message is now only displayed for 5 seconds every
  30 seconds.  The previous rate was 5 seconds every 15 seconds, which was a
  bit too irritating.

- If the server has match options enabled, then match admin elections are now
  enabled by default.  Note that elections are still disabled if you have
  not enabled match options.

- The server no longer says "unknown command" if a match command is given
  and the server does not have match options enabled.  Instead, the server
  will say "match options are not enabled".

- The match admin permission flag (permission flag P) now automatically
  assigns all match-related permissions to the admin.
  
  Assigning the match admin flag to an admin automatically gives the admin
  the following permissions in addition to allowing match control:
 
  setdmflags, setweaponflags, setfraglimit, settimelimit, setspawnprotect,
  setminping, setmaxping, changemap, forceteam, sethudtime,
  setitemflags, setcapturelimit, setot_style, setcolorquad, setoffhandhook

- The "settings" command was enhanced to show the value of the new
  itemflags and offhandhook cvars.  The output has also been enhanced to
  highlight (in green text) any server settings that would change the id
  default gameplay.  For example, if the grappling hook speed has been
  changed from id's default, the change will be highlighted in green,
  alerting players before a match starts. 

- If the sudden death overtime ends in a tie, the winner is determined by
  frags (as in previous versions); however, the winning team is no longer
  awarded a token capture - instead the scoreboard will flash the winner
  based on total overtime frags.  This was changed simply to give a better
  indication of why a team won the sudden death overtime - by overtime frags
  and not a flag capture.

- Colored quad is now ON by default (colorquad cvar set to 1).  Colored quad
  means a red player with quad glows red and a blue player with quad glows
  blue.  The default was changed to ON because id finally added
  colored quad to CTF (in version 1.50) - so it's now a standard.

- Changed the maximum number of players a person can ignore from 5 to 10.

- The mercylimit cvar is now active during match mode.  In previous versions
  it was automatically turned off.



Bug Fixes
---------

- Fixed bug in "ignore" command that could cause the server to crash.

- Fixed bugs related to the force join option:
      - Reconnecting players are now given the resume option.
      - Players connecting during rocket arena overtime are no longer
        force joined to a team with full health, armor, ammo.

- Fixed bug in sudden death overtime - when a player changed teams, that
  player's score during regulation would be subtracted from his new team's
  total overtime score.



Bug Fixes to id CTF Code
------------------------

- When a player disconnects or leaves a team, the team no longer loses
  the player's points.  This is now consistent with captures - when a player
  leaves a team, the team didn't lose that player's flag captures so why
  should the team lose the player's points?
  
  Actually the bug here is that the CTF code only added up total points when
  the scoreboard was displayed and the points were based on the scores of the
  players currently on the team.  This obviously caused problems if players
  left a team.

- Players could telefrag people in their base when they are spawned into
  the base.

- A player who changed teams would cause the server to display an erroneous
  suicide message like "ZZZ killed himself" or "ZZZ blew himself up".
  Instead the server now just says "ZZZ change to the red/blue team".
  This would also cause a problem where the player's old team would lose
  a point immediately before the player changed to his new team.



New cvars
---------
itemflags
   Use to modify item behavior, such as making quad or power armor (power
   screen and power shield) respawn randomly within a time window.
   Default is "0" (no changes).

   The quad and power armor can respawn within a window (approximately 20
   seconds) instead of respawning at exactly 60 seconds after being
   picked up.  So the items will respawn at some random time between
   approximately 50 and 70 seconds after being picked up.

   The "random first quad" and "random first pa" flags set the quad and
   power armor so they are not present at the beginning of the level.
   Instead, they will spawn into the level from 1-60 seconds after the level
   starts.

   IF_QUAD_WINDOW          1
   IF_PA_WINDOW            2
   IF_RANDOM_FIRST_QUAD    4
   IF_RANDOM_FIRST_PA      8

offhandhook
   Controls the offhand hook option.
   
   A value of 1 activates offhand hook but still allows players to
   "use grapple".  Players will get a message every once in a while
   reminding them that offhand hook is available and to bind a key to +hook.  
   This option maintains backwards compatibility by allowing players to
   still "use grapple".

   A value of 2 activates offhand hook but does NOT allow players to
   "use grapple".  When a player tries to "use grapple", he will simply get
   a message that he has to bind a key to +hook.  This option is more
   strict and might be more appropriate for competitions.

limitarenachat
   Controls whether global chat is limited during rocket arena.  By default,
   this cvar is set to "1", which means players in the game will not be
   able to hear global chats from eliminated players and spectators.

gamestats
   This cvar displays stats on the current level and is automatically updated
   by the server as the game progresses.  This allows people to see a general
   status of matches by querying the server with programs like GameSpy.

   The cvar value appears as follows: "mm:ss rc/rs bc/bs r/b/s"

   mm = minutes remaining
   ss = seconds remaining
   rc = red team flag captures
   rs = red team total score
   bc = blue team flag captures
   bs = blue team total score
   r  = number of players on red team
   b  = number of players on blue team
   s  = number of spectators



Removed cvars
-------------
uptime
   This cvar used to display the time that the server was started, which is
   somewhat useless.



Commands
--------
setoffhandhook
   Admin command to set the "offhandhook" cvar. (CTF only)

setitemflags
   Admin command to set the "itemflags" cvar.



Admin flags
-----------
Flag "O"
   Change offhandhook cvar.

Flag "Y"
   Change itemflags cvar.



Copyright/Permissions
---------------------
L-Fire CTF is copyright (c) 1998-1999, Kai Kenner.
L-Fire CTF was created solely for my own use, so it is distributed AS IS.
You may distribute this archive so long as this file and all other files
are distributed together.

You may only distribute L-Fire CTF and its supporting files for free.

