Software Change Log

              Changelog for the ZDaemon 1.04 -> 1.05 transition

1. Teamplay Beta 01 (Aug. 17, 2003)
1. Implemented the Joining/Switching of teams.
2. Implemented the enforcing of team colors.
3. Implemented the Team Chat commands.
4. Implemented the Team selection from the GUI
5. Implemented the Team Score calculations.
6. Implemented the Team Score display in the clients.
7. Implemented the "resetscores" rcon command.
8. Implemented the "teamscorelimit" server parameter.
9. Fixed a zserv32 bug, where the server would often
   crash upon shutdown; the problem was that a background
   thread was not properly terminated.

2. Teamplay Beta 02 (Aug. 20, 2003)
1. Fixed a zserv bug where the server would crash when contacted
   by a launcher, if the master_advertise flag was zero. This is
   unrelated to the TeamPlay features.
2. Removed any contact between the server and the master server
   when the master_advertise flag is zero. This is unrelated to
   the TeamPlay features.
3. Improved the Team Score calculations; right now they are almost
   identical to those of UT.
4. Fixed some bugs in the score calculations to correctly display
   the end of sprees. This is unrelated to the TeamPlay features.
5. Fixed a bug in the Team Score Display; sometimes, it would not
   display a team when its score was zero.
6. Fixed a bug in zserv that would appear when the wadnames passed
   to the server contained path information. In extreme cases, the
   server would crash.

3. Teamplay Beta 03 (Aug. 26, 2003)
1. The server now transmits the value of the teamdamage variable
   to the clients (so everybody can check the server value).
2. Add some more resetting to zero when a player disconnects to
   avoid a rare server displaying the wrong number of frags
   when somebody disconnects and another player reconnects in
   the same "server slot".
3. Added some more logic to avoid redundant team change messages.
4. The new beta version does not allow for any loners; everybody
   connected to the server (while it is in teamplay mode) will
   belong to a team.
5. Redesigned the team score display page; it is now almost
   the same as that of UT.
6. Disabled team messages from spectators; it would facilitate
7. Fixed a nasty bug in the zdaemon client which gets triggered
   whenever there is % character in a player's name. It could
   crash the client if fed the player's name contained the right
   sequence of characters (eg., %s).
8. Implemented a new face background in the status bar; when
   teamplay is on, the face background takes the color of your
9. Fixed a zserv32 bug where it would not show the players'
   names in its listview control.

4. Teamplay Beta 04 (Sep. 10, 2003)
 1. Implemented software support for audio announcements; the
    server watches for certain events, and when they happen, it
    transmits the appropriate code to the client; the client can
    then play an audio clip for each such event. The supported
    events are:
      a. "Prepare to fight" (4 seconds before the game starts)
      b. "Fight" (at the start of the game)
      c. "You win", "You lose", "It's a tie" (at the end of the game)
      d. "Impressive", "Humiliation", "Holy Shit" (at the end of the
         game when the score differential is large.
      e. "1 minute left", "5 minutes left", "1 frag left", "2 frags
         left", "3 frags left"
      f. "You have taken the lead", "You have lost the lead",
         "You are tied for the lead".
      g. "Teammate kill"
      h. "Suicide" (or a kill by the environment, such as lava).
      i. "Double kill", "Multi kill", "Ultra kill", "Monster kill".
      j. "Killing spree", "Rampage", "Dominating", "Unstoppable",
    Note that the audio announcements are *queued* on the client
    side, so an event may generate multiple such announcements and
    you will still be able to understand them.
    For this beta I concentrated on the software side of this feature
    and cannot offer any audio clips yet. However there exists a special
    WAD file (called zvox.wad) that contains sample sounds from Q3 and
    UT; this file can be used for testing this feature. However, I cannot
    distribute it for obvious copyright reasons. If you know where to
    find this file, then simply place it in your wad directory.
 2. Improved the team score display to better handle long player
    names and unbalanced team memberships.
 3. The server now transmits the fraglimit and teamscorelimit
    variables to the client, so they can be used for the team
    score display.
 4. Added a boolean console variable called "audioannouncements" to
    control the playing of such announcements. If set to true (the
    default value) the announcements will play; otherwise, they will
    be silenced.
 5. Added a console command "toggleannouncements" that toggles the
    value of the "audioannouncements" variable; this makes it easy
    to turn on/off the audio announcements by pressing a key (ie.,
    you can bind the "toggleannouncements" command to a key).
 6. Enabled the toggling of the audio announcement from the GUI; if
    you go to the "Options" screen, you'll see the "Audio
    Announcements" option.
 7. When in teamplay mode, the player's HUD shows the team frags
    instead of the individual frags.
 8. When you use fullscreen mode in teamplay, you can still see your
    team color as background to the frag value (which would be
    team frags instead of individual frags).
 9. Enabled spying on teammates; spectators can always spy on any-
    body; active players (in teamplay mode) can only spy on members
    of their own team. If either the spy or the "spied" player change
    teams while spying, the spying is stopped immediately.
10. Implemented the "maxteams" server variable (in zserv.cfg); it
    controls the number of teams that can actually participate. If
    for example, you set it to "2", then only members of the
    first 2 teams (red and blue) can join the game; members of the
    other teams can spectate but not join.
11. Implemented the killing of switchers; if somebody switches
    teams in teamplay mode, he is instantly killed (minus one frag
    and -5 exp. points); the team scores are not affected in any
    way. Of course, the killing happens only for live players; there
    is no switching penalty if you are dead or spectating. Furthermore,
    if the switcher becomes a member of a non-playing team, then
    he automatically becomes a spectator too.
12. Enabled the loading/saving of the "developer" console variable
    in zdoom.ini (it was always there, but it was not saved). This
    simplifies a bit the debugging of the client.
13. Fixed the "turn180" command; it should now work properly (and
    instantly) no matter whether you play or spectate and no matter
    the speed of your computer.
14. Fixed a zserv annoyance; the server now never reads or writes
    zdoom.ini; all its configuration is in zserv.cfg
15. Fixed a zserv32 bug, where the player names, scores and time
    in the game would not get properly updated.
16. Fixed another zserv32 bug where the server would not close
    when you pressed the Esc key and then answered "Yes" (in the
    "Are you sure..." question).
17. Fixed the "no camera" problem if you were spying on somebody
    and that person disconnected. Now instead of the "no camera"
    message, you will simply return to your original view. You
    may *still* get the "no camera" message, but this would be
    due to network problems or possibly another bug. At least,
    this bug has been fixed.
18. Provided a solution for hosting the server in a NAPT environ-
    ment: the heartbeat message from the server to the master
    server now contains the actual listening port of the server;
    ideally, the master server should use that value instead of
    checking the actual port used to send the heartbeat message
    (the actual port may have been translated by NAPT; it *is*
    a standard procedure).  This change does *not* create any
    incompatibility between the server and the current version
    of the master server. This approach *may* be used in the
    future; the master-server<->server protocol remains the same
    for the time being. 
19. If the "force_password" variable (in zserv.cfg) is non-zero,
    but the actual password is empty, then the server does not
    enforce any password. This bug fix was contributed by Bond.
20. Extended the server->launcher protocol by providing more
    detailed info about the players and teams. This was again
    contributed by Bond and we will soon see it in upcoming
    versions of IDE. This change does *not* create any incompati-
    bility between the server and current versions of launchers.

5. Teamplay Beta 05 (September 19, 2003)
1. Implemented a new console command "toggleautoswitch" that toggles
   the value of the "neverswitchonpickup" variable. This can be useful
   for reducing the keys dedicated to the setting of this variable.
2. Increased from 15" to 20" the game intermission in teamplay mode,
   since there may be more info to read at the end of a teamplay game.
3. Enabled the display of teammates in the map in teamplay mode.
4. Replaced the "audioannouncements" boolean variable by the
   "snd_annvolume" floating point variable. This lets us adjust the
   volume of the audio announcements, which I think is more flexible.
   Consequently, the on/off switch in the options screen has been
   replaced by a slider and the "toggleaudioannouncements" cmd. has
   also been dropped.
5. Simplified a bit the server->launcher protocol.
6. Fixed a bug in the team switching code when a player would
   become a spectator by switching to a non-playing team.
7. When all members of playing teams disconnect, the team scores
   are automatically reset.
8. Added some chat spam control: it is activated by the "spam_window"
   and "spam_limit" variables in zserv.cfg; the first one is expressed
   in seconds, and the second in number of messages allowed with the
   spam_window. You can disable this feature by setting them to zero.
9. Added a chat blocking mode; it can be used to block chat messages
   either from all players, or from spectators, or by specific players.
   There are 4 related console commands:
     a. chat_block 
     b. chat_unblock 
     c. chat_toggle 
     d. chat_reset
   In the first three commands, the parameter can be either the special
   string "all" meaning all players, either the special string "spec"
   (or "spectators") meaning players in spectator mode, or the string
   "#NNN" where NNN is a player number (available from the "players"
   command), or the string "$XYZ" where XYZ is a player's name, or
   the string "@NNN" where NNN is again a player number; in the last
   case, the network address of the specified player is blocked.

   All blocks are valid only for the current zdaemon session. They
   are reset as soon as you exit the client.

   IMPORTANT: the blocks are additive: if you issue the command:
   "chat_block #1" (ie., you want to block player 1) and then
   issue the command: "chat_unblock all", then player 1 is still
   blocked, since he has a specific block which overrides any other
   block commands. If you really want to lift all blocks, use the
   "chat_reset" command. I realize that this policy is a bit
   counter-intuitive; I'll try to improve it for the next beta.

   If you block a player by ID, then the block is lifted as soon
   as the player disconnects; otherwise, you would also be blocking
   subsequent players who happen to be assigned the same server slot.

10. Fixed a bug in the client where chat messages would generate a
    sound even when you had set the msg level higher than the chat
11. Fixed another bug in the client where the last two message levels
    (chat and team chat) were not displayed in the Options menu.
12. Changed a bit the announcement strategy: most announcements now
    are not queued; they are played directly as they occur. Only
    practice will show if this is a better strategy.
13. Improved a bit the "say" and "say_team" commands to allow
    their parameters without quotation marks. However, you still
    cannot use semi-colons (;) since they are understood by the
    doom parser to separate commands; if you need to use a semi-
    colon, enclose it in double quotes.

6. Teamplay Beta 06 (September 23, 2003)
 1. Improved the map display: it now shows your position in white,
    while teammate positions are displayed in the team's color.
 2. Fixed a zserv32 bug where the "Quit" command on the system tray
    would be ignored.
 3. Fixed a zserv32 bug where the /exit or /quit commands on the server
    console would crash the server.
 4. Added a text message when somebody connects (before he joins the game)
 5. The "Barrels respawn" text in "More Gameplay Options" in zclient was
 6. Changed the "Use the attack key to join" msg. to
    "Press the Fire key to join" when in spectator mode.
 7. Fixed the weapon changing crash when in spectator mode.
 8. Replaced all version numbers by their proper value.
 9. Got rid of the edit box in zserv32's about dialog; it didn't serve
    any purpose.
10. Reduced the max. udp packet size from 8192 to 1400; it should
    improve the communication between the server, client and launcher.
11. Corrected the checking for available net buffer size for several
    messages in the server.
12. Increased the "zoom out" factor in the map, so the map can become
    small enough that it doesn't require scrolling.

7. Teamplay Beta 07 (September 28, 2003)
 1. Merged Raider's and the Teamplay changes into a single version in
    preparation for zdaemon 1.05; Raider's improvements include:

    a. Consistency checking:
       The client must have exactly the same wad files as the server. The
       server will check all of the wads that the client is attempting to
       use before it allows the client to connect. If the client is missing
       any wads, has any additional wads, or has any wads that are in any
       way different from the wads the server is using, the server will
       refuse the connection. This applies to skins as well. You can only
       use skin wad files if the server is also using them. If the server
       has skins loaded and the client does not, it will refuse the

    b. New cvar added (client):
       The cvar cl_loadskins was necessary to allow the clients to turn on
       or off the loading of skins. If you have cl_loadskins set to "true",
       the ZDaemon client will automatically load any skins you have in the
       skins folder. This would be a problem if you were to join a server
       that doesn't have those skins. By default, this cvar is set to "false".
       To change it, type:
           cl_loadskins true (enable skins)
           cl_loadskins false (disable skins)

    c. New cvar added (server):
       The server has a new cvar that turns skins on and off. If you have
       cl_loadskins set to "1", the ZDaemon server will automatically load
       any skins you have in the skins folder. By default, this cvar is
       set to "0". If you don't specify it in your cfg file, it will not
       load skins. In zserv.cfg:
           set load_skins "1" (enable skins)
           set load_skins "0" (disable skins)

    d. Scripting disabled:
       The "exec" command was removed from the client. This was necessary
       due to the sudden surge in "scripts" that have been showing up
       lately. There are a few of them, ranging from annoying to outright
       malicious. As a result, the ability to execute a remote cfg file
       was disabled.

    e. Fixed banlist:
       The ban list feature was broken. If you added more than one ban, the
       server would crash the next time you started it. This has been fixed.

    Known bugs/quirks:
    If you set the "load_skins" cvar in zserv.cfg, it will not recognize
    that change until the second time you run the server. I have no idea
    why it behaves this way. We'll try to fix that in the near future.
    For now, just remember that if you change this setting, you have to
    run the server, close it, then run it again for it to take effect.

 2. Worked on the WAD consistency checking: the major improvements are:
      a. New, very secure checksum algorithm on the entire WAD files.
         The time penalty (experienced on the client's startup) should
         be 2 seconds max. in practically all cases. On most computers
         powerful enough to run zdaemon, the time penalty should be less
         than a second.
      b. Much more detailed and specific messages to the client when
         something goes wrong; it tells him the exact cause of the
         problem and advises him to visit a web page for help.
      c. Added a server variable called "optional_wads" where the
         server admin can specify which wads are loaded by the
         server, but are not really necessary and may not be loaded
         by the client (eg., audio or skin wads).
 3. Rewrote the entire banlist code from scratch, as it still had
    some problems.

8. 1.05 Release Candidate 1 (September 29, 2003)
1. Fixed a small problem in the banlist code.
2. Enabled the resizing of the zserv32 window.
3. Introduced a new server variable called "connection_logging".
   If it is non-zero, then all connections to the server are
   logged either in the zd_connlog.txt file (Win32) or in the
   system log (Unix). If is is zero, no such info is saved.

9. 1.05 Release Candidate 2 (September 30, 2003)
1. Improved the zserv32 window resize to remember its size
   and position across separate invokations of the program.
2. Modified a bit the program's banner in the zserv32 window
   to avoid displaying the IP address of the machine; this
   could result in confusion on multihomed machines.

10. 1.05 Release Candidate 3 (October 2, 2003)
1. Completed the synchronization of the Windows, Linux and
   FreeBSD server code. The merging is not fully complete
   in the sense that there are 2 source distributions: one
   for Win32 and one for Unix. However, all the source files
   have been verified to be identical across the 2 versions.
   The plan is to unify these two distributions for the next
   zdaemon version (1.06).
2. Added a command line parameter to the server that restricts
   incoming connections to a particular IP address; this may be
   useful on multi-homed machines. Its syntax looks like:
   If you use this parameter, then the zserv32 window will display
   the listening IP address and port; otherwise, it will display
   just the port.

11. 1.05 Release Candidate 4 (October 2, 2003)
1. Fixed a bug that would truncate (or overflow) the names of the
   wad files as reported to the launcher.
2. Fixed a zserv32 bug where various startup errors would result
   in a crash instead of displaying an error msg. and exiting the

12. 1.05 Release Candidate 5 (October 7, 2003)
1. Fixed a zserv32 bug that would occur if the server banner
   was too long.
2. Disabled the automatic loading of zvox.wad; if you want
   it, you'll have to specify it with the "-file" cmd. line
3. Extended a bit the server->launcher protocol to send 
   an optional flag about each loaded wad.
4. Cleared out player info on the client upon disconnect.

13. 1.05 Release Candidate 6 (October 18, 2003)
1. Removed the "connection_logging" variable from zserv.cfg; it
   is superceded by the "-clog" cmd. line argument which takes a
   filename as its parameter; this filename specifies the name
   of the connection log file. Under Unix, you can use the special
   name "syslog" instead of a filename: this instructs zserv to 
   log connections to the system log.
2. Fixed the "pings" server command. It was always showing zero ping

14. 1.05 Release (October 19, 2003)
1. Changed the master port from 15200 to 15300.