12-22-2001, for source release under GPL licensing:
- Tweaked linux/Makefile for easier build
  added linux/README-3.21-RELEASE

Changes for 3.21
----------------

- Support for GL_ARB_multitexture added.  This supports the new multitexture
  extensions and deprecates GL_SGIS_multitexture.
- Linux OpenGL X11 handling completely rewritten.  Support for XF86DGA Mouse
  and fullscreen resolution support added.  Please see the README file for
  Linux about the new features of this handling.

Changes for 3.20
----------------

- Fixed a network problem where and oversize packet could cause a client 
  crash.
- Fixed the long standing Quake2 bug of where you would occasionally spawn
  or teleport and find yourself either looking straight at the ceiling or
  down at the floor.
- Changed it so that the function keys (F1 through F12) now get executed when 
  depressed during demo playback or attract modes.  This allows you to take 
  screen shots (F12) during demos and other features.  An example of other 
  features is a fast forward for demos:
      alias +ff "timedemo 1"
      alias -ff "timedemo 0"
      bind f7 +ff
  This binding will cause the current demo playing to zip into timedemo mode 
  while F7 is depressed, effectively acting like a fast forward key.
- Wrong packaging of 3.19 patch.  The Rogue CD has a 45k pak2 and vwep .md2 
  files in baseq2/players, but the 3.19 x86 patch we released has a 2.7MB 
  pak2.  3.20 has a 45k pak2 and the vwep models go in baseq2/players.
- VWep code has been added to Xatrix dll, new VWep models for the Xatrix 
  specific weapons (Ion Ripper and Phalanx) have been included.
- Rogue Linux game library was wrong version and had some unlinked symbols,
  this has been corrected.
- Occasional error of: "D_SCAlloc: bad cache width 16384" in software renderer.
  This had to do with surfaces to SURF_FLOWING and were transparent.  This 
  has been fixed in the refs now so flowing transparent textures now works.
- [Unix] Net_ErrorToString calls were wrong, was using %i and not %s resulting
  in random numbers being printed for error messages.
- Color shell mixing restored to the same blends as previous versions.  This 
  was changed in 3.19 for the new color shells the Rogue mission pack 
  introduced.
- Fixed a possible server crash in the new "playerlist" command.
- Fixed a case where a person joining a server could be invisible (left over 
  setting of SVF_NOCLIENT from previous spectator).
- Invalid pak files no longer cause a crash and are just ignored
- Fixed a 3.19 bug where linked models (modelindex2) who's modelindex was 
  greater than 0x7f causes the wrong model to be drawn (in some cases, the 
  world would be drawn twice).  This was the cause of many of the "extreme" 
  frame lag people were seeing in 3.19 on servers using old-style VWep code.
- Linux:  Complete rewrite of the OpenGL library handling.  This was needed 
  to cleanly integrate OpenGL extension checking.  Linux now supports 
  extensions such as multitexture and better dynamic loading of libraries.  
  It's cleaner now in that you don't have to preload hack stuff to use the 
  3DFX Miniport rather than libMesa3D.  The Linux version now uses the 
  gl_driver to specify the 3D library to dynamically load.  For example, to 
  use the lib3dfxgl.so miniport, one would now use:
      ./quake2 +set vid_ref gl +set gl_driver lib3dfxgl.so
  This change fixes several bugs that were apparant in the older method, such 
  as a segfault occasionally when connecting to a server with a different game 
  directory.
  The vid menu in the Linux version has been changed to reflect the new 
  options, the current list of supported video drivers are now:  software, 
  software X11, Mesa 3-D 3DFX, 3DFXGL Miniport, OpenGL glX, and Mesa 3-D glX,
- Railgun shots now go through gibs as well as other players.
- New server variable, "needpass" that can been seen with server browser
  tools such as GameSpy.  This variable indicates whether a password or
  spectator password is needed to get onto a server.  Bit 0 is password and
  bit 1 is spectator password. 
- Quake2 will no longer look for gamex86.dll in the main Quake2 directory.
  It will always load out of the game directory first.
- Players joining a server during an intermission are now moved to the
  intermission position.
- The "logfile" cvar has been extended with the following values:
	0 - don't log (default)
	1 - overwrite qconsole.log and use buffered writes
	2 - overwrite qconsole.log and flush write every line
	3 - append to existing qconsole.log and flush write every line
- Several minor bug fixes to the Rogue mission pack gamex86.dll
- Linux:  Rebuild of Rogue mission pack shared library to correct some
  dynamic symbol errors (is NAN errors).

Changes for 3.19
----------------

- Updated VWEP models
- Fixed sound config strings getting out of sync on loadgame.  This caused
  the wrong sound to be played.
- Fixed a bug in ref_soft that caused the menu system's bottom of screen
  help text not to be displayed
- Added a missing Rogue DM option
- "Water surfing" that was present in 3.17 has been fixed (holding jump while
  on the surface of water let you swim at full speed).
- Environment maps (env) are now autodownloaded (if allow_download_maps is set).
- Spectator support added.  A new cvar is built into the client, "spectator"
  Setting it to value other than "0" will allow you join a game as a spectator.
  While in spectator mode, you can press the attack button to enter a chasecam
  mode and follow other players.  Using the inventory keys (by default the
  left and right square brackets) you can switch between players in the game
  while using the chasecam.
  You may enter and leave spectator mode while connected.  Doing so resets
  your score to zero.
  ***The new spectator support requires a new game.dll and may not work for
  user mods until they update their code.  The default game.dll that comes
  with 3.19 supports chasecam as well as the new included Xatrix game.dll.
- Fixed it so that when a model defaults to male/grunt (don't have the
  necessary model or skin for the player), VWep support is still enabled.
- New console command for players, "playerlist".  This will cause the server
  to give you a text list of the players on the server, including their
  connect time, score, ping and spectator status.  This is handy if not
  everyone fits on the scoreboard on busy servers.
- New cvar for the game.dll:  spectator_password.  If set to a value (other
  than "none"), users must set their spectator variable to this value in order
  to join the server as a spectator.  This password is independant of the
  normal user password.
- New cvar for the game.dll:  maxspectators (defaults to 4).  This value is
  not seperate from maxclients (a spectator is still a client).
- New cvar for the game.dll:  sv_maplist.  This can be set to a list of map
  names that the server should autorotate through, rather than using the
  nextmap set in the actual map files themselves.
  For example:  set sv_maplist "base1 q2dm1 q2dm3 fact3" will cause the server
  to rotate through those maps.
  ***This requires a game.dll update and will not work with user mods until
  they update their code.
- A new facility has been added to ClientConnect() in the game.dll to allow
  the game.dll to pass a message back to the user for the reason of disallowing
  a connection.  It is done by setting a key of "rejmsg" in the passed userinfo.
  For example:
  Info_SetValueforKey(userinfo, "rejmsg", "Password required or incorrect.");
- The server cvar, password, may be set to "none" to clear the password.  This
  is needed because rcon can not set a blank password.
- New server cvar:  sv_airaccelerate.  This controls the optional air
  acceleration facility.  The default value is 0, which disables air control.
  The usual value to replicate the air control seen in the original Quake and
  later versions of Quakeworld is 10.  10 allows for much more
  air control (as was seen in 3.15).  This value is ignored in single player
  and coop.
- Fixed NoSuchFrame/BAD_MODELTYPE errors when doing a vid_restart while
  connected.
- NoSuchFrame errors now include model name to assist in debugging user mods.
- Fixed the remote status query response (ServerInfo) to not include error 
  messages and be more consistent.

Changes for 3.18
----------------

- "Water surfing" that was present in 3.17 has been fixed (holding jump while
  on the surface of water let you swim at full speed).
- Environment maps (env) are now autodownloaded (if allow_download_maps is set).
- Spectator support added.  A new cvar is built into the client, "spectator"
  Setting it to value other than "0" will allow you join a game as a spectator.
  While in spectator mode, you can press the attack button to enter a chasecam
  mode and follow other players.  Using the inventory keys (by default the
  left and right square brackets) you can switch between players in the game
  while using the chasecam.
  You may enter and leave spectator mode while connected.  Doing so resets
  your score to zero.
  ***The new spectator support requires a new game.dll and may not work for
  user mods until they update their code.  The default game.dll that comes
  with 3.18 supports chasecam as well as the new included Xatrix game.dll.
- Fixed it so that when a model defaults to male/grunt (don't have the
  necessary model or skin for the player), VWep support is still enabled.
- New console command for players, "playerlist".  This will cause the server
  to give you a text list of the players on the server, including their
  connect time, score, ping and spectator status.  This is handy if not
  everyone fits on the scoreboard on busy servers.
- New cvar for the game.dll:  spectator_password.  If set to a value (other
  than "none"), users must set their spectator variable to this value in order
  to join the server as a spectator.  This password is independant of the
  normal user password.
- New cvar for the game.dll:  maxspectators (defaults to 4).  This value is
  not seperate from maxclients (a spectator is still a client).
- New cvar for the game.dll:  sv_maplist.  This can be set to a list of map
  names that the server should autorotate through, rather than using the
  nextmap set in the actual map files themselves.
  For example:  set sv_maplist "base1 q2dm1 q2dm3 fact3" will cause the server
  to rotate through those maps.
  ***This requires a game.dll update and will not work with user mods until
  they update their code.
- A new facility has been added to ClientConnect() in the game.dll to allow
  the game.dll to pass a message back to the user for the reason of disallowing
  a connection.  It is done by setting a key of "rejmsg" in the passed userinfo.
  For example:
  Info_SetValueforKey(userinfo, "rejmsg", "Password required or incorrect.");
- The server cvar, password, may be set to "none" to clear the password.  This
  is needed because rcon can not set a blank password.
- New server cvar:  sv_airaccelerate.  This controls the optional air
  acceleration facility.  The default value is 0, which disables air control.
  The usual value to replicate the air control seen in the original Quake and
  later versions of Quakeworld is 10.  10 allows for much more
  air control (as was seen in 3.15).  This value is ignored in single player
  and coop.
- Fixed NoSuchFrame/BAD_MODELTYPE errors when doing a vid_restart while
  connected.
- NoSuchFrame errors now include model name to assist in debugging user mods.
- Fixed the remote status query response (ServerInfo) to not include error 
  messages and be more consistent.

Changes for 3.17
----------------

- Fixed possible NAN resulting from handing zero to second arg of atan2
- Autodownloading is now DISABLED by DEFAULT.  It must be enabled by typing
  'allow_download 1' at the console, or using the download options menu
  in Multiplayer/PlayerSetup/Download Options
- Server demos now include a svc_serverdata block at the beginning with the
  attractloop byte set to '2' to indicate server demo (byte before gamedir
  in the svc_serverdata block).  This allows easy identification of
  serverrecorded demos (serverrecord demos are only for demo editors, they
  can not be played back in Quake2 without being first edited).
- New options for setting texture formats in ref_gl:
  gl_texturealphamode:  default, GL_RGBA, GL_RGBA8, GL_RGB5_A1, GL_RGBA4, 
    GL_RGBA2
  gl_texturesolidmode:  default, GL_RGB, GL_RGB8, GL_RGB5, GL_RGB4,
    GL_R3_G3_B2, GL_RGB2 (SGI only)
- Player movement during Air acceleration changed to reflect more real-world 
  physics while airborne.
- Fixed a bug when riding trains that caused drift in a southwest direction
  (Thanks to Jim Dose at Ritual for pointing this one out).
- Linux:  Now correctly reports out of memory rather than segfaulting (mmap
  returns (void *)-1 and not NULL on error).
- Fixed autodownloading to not create paths for files that can't be downloaded
  (this was creating many empty directories in baseq2/players).
- When downloading a file from a server that doesn't have it, the message is
  now "Server does not have this file" rather than "File not found."
- Fixed some coop keys in 3.15 weren't being handled correctly (pyramid key).
- Highbits are now stripped from console when using condump
- Restored support for gl_modulate in multiplayer play
- Fixed it so that players with a model/skin you don't have aren't checked for 
  on disk more than once.
- Fixed it so sounds played for PPMs that default to male are only checked
  on disk once.
- Byte ordering/portability fixes in cinematics, PCX and other file handling.
- Client state during static image cinematic (PCX image) so that client can 
  continue to next unit.
- Fixed it so that dedicated coop servers no longer get stuck at victory.pcx,
  if a server is in coop mode, hitting a button at the victory.pcx screen
  while cause the server to restart at base1
- Fixed infinite grenade bug
- Fixed autodownloading to actually download sounds and console pics
- Fixed autodownload to not create empty directories for files not on
  the server.
- Added customized client downloading.  cvars are the same as the server side:
    allow_download - global download on/off
    allow_download_players - players download on/off
    allow_download_models - models download on/off
    allow_download_sounds - sounds download on/off
    allow_download_maps - maps download on/off
  They can also be (more easily) set with a new Download Options menu 
  accessible in Multiplayer/Player Setup/Download Options
- Changed checksumming code to be more portable and faster.
  The checksum in 3.15 was seriously broken.
  This change makes 3.17 incompatible with previous servers.
- Fixed player 'warping' present in 3.15 (this was an artifact of the
  hyperblaster optimizations).
- Fixed the autodownload in 3.15 so that stuff like skins for models are
  downloaded as well as pics.

Changes for 3.16
----------------

- Fixed infinite grenade bug
- Fixed autodownloading to actually download sounds and console pics
- Fixed autodownload to not create empty directories for files not on
  the server.
- Added customized client downloading.  cvars are the same as the server side:
    allow_download - global download on/off
    allow_download_players - players download on/off
    allow_download_models - models download on/off
    allow_download_sounds - sounds download on/off
    allow_download_maps - maps download on/off
  They can also be (more easily) set with a new Download Options menu 
  accessible in Multiplayer/Player Setup/Download Options
- Changed checksumming code to be more portable and faster.
  The checksum in 3.15 was seriously broken.
  This change makes 3.16 incompatible with previous servers.
- Fixed it so sounds played for PPMs that default to male are only checked
  on disk once.
- Fixed player 'warping' present in 3.15 (this was an artifact of the
  hyperblaster optimizations).
- Fixed the autodownload in 3.15 so that stuff like skins for models are
  downloaded as well as pics.

Changes for 3.15
----------------

- Added visible weapons support.  This is precached with a special symbol, i.e.
  gi.modelindex("#w_shotgun.md2") which causes the client to autobind it to
  the players current weapon model.  Plug in player models can optionally 
  support the visible weapons.  Any that do not support it will use their
  default weapon.md2 files automatically.
  Visible weapons files for plug in player models are not downloaded
  automatically--only the default weapon.md2 (and skin) is.
  The Visible weapon models themselves are not included.  They can be
  downloaded from http://www.telefragged.com/vwep/
- New cvar cl_vwep controls whether visible weapons is enabled on the client.
  If you turn it off, the visible weapons models are not loaded.  This can
  offer a speed up on slow or memory starved machines.
- Rewrote the some of the net code to use optimized network packets for 
  projectiles.  This is transparent to the game code, but improves netplay
  substancially.  The hyperblaster doesn't flood modem players anymore.
- Rewrote the packet checksum code to be more portable and defeat proxy bots
  yet again.
- Autodownload support is in.  The following items will be automatcally
  downloaded as needed:
    - world map (and textures)
    - models
    - sounds (precached ones)
    - plug in player model, skin, skin_i and weapon.md2
  downloads go to a temp file (maps/blah.tmp for example) and get renamed
  when done.  autoresume is supported (if you lose connect during the
  download, just reconnect and resume).  Server has fine control over
  the downloads with the following new cvars:
    allow_download - global download on/off
    allow_download_players - players download on/off
    allow_download_models - models download on/off
    allow_download_sounds - sounds download on/off
    allow_download_maps - maps download on/off
  maps that are in pak files will _not_ autodownload from the server, this
  is for copyright considerations.
  The QuakeWorld bug of the server map changing while download a map has
  been fixed.
- New option in the Multiplayer/Player Setup menu for setting your connection
  speed.  This sets a default rate for the player and can improve net
  performance for modem connections.
- Rewrote some of the save game code to make it more portable.  I wanted to
  completely rewrite the entire save game system and make it portable across
  versions and operating systems, but this would require an enormous amount
  of work.
- Added another 512 configure strings for general usage for mod makers.
  This gives lots of room for general string displays on the HUD and in other
  data.
- Player movement code re-written to be similiar to that of NetQuake and
  later versions of QuakeWorld.  Player has more control in the air and
  gets a boost in vertical speed when jumping off the top of ramps.
- Fixed up serverrecord so that it works correctly with the later versions.
  serverrecord lets the server do a recording of the current game that
  demo editors can use to make demos from any PVS in the level.  Server
  recorded demos are BIG.  Will look at using delta compression in them
  to cut down the size.
- Copy protection CD check has been removed.
- Quake2 3.15 has changed the protocol (so old servers will not run) but
  all existing game dlls can run on the new version (albiet without the
  new features such as visible weapons).
- Added flood protection.  Controlled from the following cvars:
   flood_msgs - maximum number of messages allowed in the time period
                specified by flood_persecond
   flood_persecond - time period that a maximum of flood_msgs messages are
                     permitted
   flood_waitdelay - amount of time a client gets muzzled for flooding
  (gamex86 DLL specific)
- fixed it so blaster/hyperblaster shots aren't treated as solid when
  predicting--you aren't clipped against them now.
  (gamex86 DLL specific, the SVF_DEADMONSTER flag is set on projectiles)
- gender support is now in.  The userinfo cvar "gender" can be set to
  male/female/none (none for neutral messages).  This doesn't affect sounds
  but does affect death messages in the game.  The models male and cyborg
  default to gender male, and female and crackhor default to female.
  Everything else defaults to none, but you can set it by typing
  "gender male" or "gender female" as appropriate.
- IP banning support ala QW.  It's built into the game dll as 'sv' console
  commands.  This list is:
    sv addip <ip-mask>  - adds an ip to the ban list
	sv listip <ip-mask> - removes an ip from the ban list
	sv writeip - writes the ban list to <gamedir>/listip.cfg.  You can
	  exec this on a server load to load the list on subsequent server runs.
	  like so:  quake2 +set dedicated 1 +exec listip.cfg
	sv removeip <ip-mask> - remove an ip from the list
  the ip list is a simple mask system.  Adding 192.168 to the list
  would block out everyone in the 192.168.*.* net block.  You get 1024 bans,
  if you need more, recompile the game dll. :)
  A new cvar is also supported called 'filterban'.  It defaults to one which
  means "allow everyone to connect _except_ those matching in the ban list."
  If you set it to zero, the meaning reverses like so, "don't allow anyone
  to connect unless they are in the list."
  (gamex86 DLL specific)
