Software Change Log

1.09 → 1.10 changes
              Changelog for the ZDaemon 1.09 -> 1.10 transition
              =================================================

1. Point 01 release (2012-11-09)
-----------------------------------------------------------------------
 1. Fix for spurious turbo errors.
 2. The kick message was not getting recorded in demos. Fixed.
 3. There was a problem when a server reached maxclients. Fixed.
 4. The usage of the teamscorelimit CVAR for coop/survival turned
    out to be too confusing. Therefore we introduced a new CVAR
    called teamkilllimit: it specifies the number of monsters
    killed by all players that will trigger a map change in coop
    and survival modes. It defaults to zero (ie., inactive).
 5. Implemented Super-Sampled Anti-Aliasing in the renderer.
    It can be configured in the video options and supports 2x, 4x
    and 8x anti-aliasing. Of course, this consumes more CPU cycles
    than otherwise (and the CPU needs increase sharply with the anti-
    aliasing multiplier), so be sure your CPU can handle it. This
    feature works best with relatively low resolutions (eg.,
    640x480) rather than higher ones (eg., 1280x1024).
 6. Fixed the GUI scale multiplier rounding errors. This bug stretched
    the HUD and menu visuals differently based on the resolution. Now
    the HUD and menus are in equal ratio to vanilla doom.
 7. Fixed a turnspeeds bug: it should finally work as intended.
 8. Added support for the BFG edition IWAD.
 9. Rewrote the DirectInput mouse code and made the whole input
    use DirectInput 8. This fixes the bug that applied windows
    acceleration and sensitivity to the mouse.
10. ZDaemon isn't restricted to max 4 mouse buttons any more. You
    can now use as many mouse buttons as DirectInput 8 supports.
11. The server rearranges the packet sending order by ping in the
    interests of fairness.
12. Fixed own weapon switching when recording a demo and instaswitch
    is on.
13. Updated the demo tool to handle LAN and Bot players.
14. Added sitrep to the display options; also added vote yes/no and
    turn180 to the customize controls menu.
15. Added a vpos_event2 CVAR to fine tune the vert. position of the
    blinking DDOM msg (and other game event messages in the future).
16. When opening a ZDD demo via the launcher, the launcher checks
    for the presence of the WADs specified in the demo and prompts
    to fetch any missing ones.
17. The ChangeCamera and SetPlayerProperty ACS line specials should
    not apply to spectators.
18. New client CVAR "demo_prioritizeplayers" whereby the demo view
    auto-switches to a player's view when the view is on a spectator
    (or freeview) and the first player spawns in the map. Defaults
    to "true".
19. New demo compression method: it results in filesizes about 25%
    smaller than those from the previous compression method. The
    demo tool will automatically convert any demos to the new method.
20. New support for widescreen monitors/resolutions. You can select
    if you want to preserve the true image aspect ratio or you prefer
    to stretch it. You can also select the desired amount of pillar-
    boxing in both cases.
21. Implemented Quick Chat Block menu (similar to Quick Voice Mute).
    You can bind a key to it in the customize controls menu or execute
    chat_quickblock in the console.
-----------------------------------------------------------------------

2. 1.10b01 release (2013-12-25)
-----------------------------------------------------------------------
 1. Implemented server-side demos (SSD). The server can automatically
    generate and publish demos of all games. The recording of demos is
    controlled via the "ssd_record" CVAR
	(0=off,	1=record when one player joins the game,
	 2=record when one player connects to the server); the demos are
    saved in the directory "server_demos" directly underneath the server
    directory. The server can also "publish" the demos via an embedded
    mini web server. This is controlled via the "ssd_publish" CVAR
    (1=on, 0=off). When it's enabled, one can browse/fetch the demos
    by pointing a web browser to the URL:
                       http://SERVER_IP:PORT/demos/

    The server can automatically cleanup the directory by removing
    demos older than a given number of days; this is controlled from
    the "ssd_keepdays" CVAR: it defaults to 7 (one week); a value of
    zero disables this cleanup, but you better have another way of
    removing them as they will consume more and more of your disk
    space.

    There is also an "ssd_minsecs" CVAR that determines the minimum
    number of seconds for a demo's duration. If a demo is shorter
    than that minimum, then it will not be stored at all. The default
    value is 30 (seconds).

    There are cases where the server admin may prefer to avoid the
    above described publishing and process the demos in some other
    way (for example, move them to other directories, send them to
    other hosts, etc). In that case, he can use the "ssd_process"
    CVAR; it's a string containing a command will be issued when
    the demo is ready. If that command is non-empty, then the zserv
    will issue that command and will NOT do anything more regarding
    the demo (ie., it will not move it, delete it, or touch it in
    any way); from that point on, the demo becomes the responsibility
    of the specified command.

    When the server admin decides to process the demos in some other
    way, he may want to publish them at some other URL, which he can
    specify by using the "ssd_url" CVAR. It's a simple string and it
    overrides the above described default URL. There are 2 special
    escape sequences that can be used in the URL: $a will be replaced
    by the IP address of the server and $p will be replaced by the
    listening port.

    Furthermore, the server admin may wish to specify some unique name
    to be displayed in the demo download page. This is done via the
    "http_title" CVAR.

    Finally there is an "ssd_voice" CVAR (1=on, 0=off) that determines
    whether voice data will be stored in demos or not. Defaults to ON.

 2. Implemented WAD downloads directly from the server. It's controlled
    from the "wad_downloads" CVAR (1=on, 0=off). When the downloads are
    enabled, the launcher will be notified about it and it will use the
    server's download page:
                          http://SERVER_IP:PORT/wads/
    to fetch any missing WADs. The WADs are auto-compressed into ZIP
    files and they're cached in the "cache" directory for the life of
    the server (ie., once a given WAD has been compressed into ZIP,
    it will never be re-compressed while the server is still running).

 3. Implemented throttling of WAD and demo downloads; it's controlled
    via the "max_download_kbps" CVAR. A positive value indicates the
    maximum download rate in kilo-bits per second; zero or negative
    values disable the throttling. Defaults to zero. There is also a
    related CVAR called "max_transfers" which controls the maximum
    number of concurrent downloads allowed; requests that will result
    in exceeding that limit are ignored. Defaults to 10.

 4. Extension of the sv_voice_chat server CVAR to recognize a value
    of "3" which will stand for "commentary mode". This mode works
    as follows:

    Team modes
    ----------
    Chat is in-team as usual, but there is also a "commentators" CVAR
    that contains a space-delimited list of nicks allowed to speak
    *from the non-playing teams*. If the list is empty, then everyone
    can speak; if not, only the specified nick(s) can talk. Suppose
    for example that maxteams=2; in that case 2 teams are non-playing.
    Spectators would get into the non-playing teams; one or more of
    those spectators would be designated as a commentator and that
    person would be heard only by whoever is on his team. In this
    way you could even have 2 commentary channels (green and white):
    imagine for example english commentary on one channel, spanish
    on the other.

    Non-team modes
    --------------
    Commentary mode results in a "spectator-separated chat". If the
    mode is coop/survival, then the players talk only to each other
    (and that's one conceptual channel) and spectators talk only to
    each other (that's a second channel). If it's DM, then there is
    no player channel (unless it's a private server). There is also
    a "commentators" CVAR containing a space-delimited list of nicks
    allowed to speak from the spectator channel. If the list is
    empty, it means that anyone can talk.

    No changes are needed to the "voice_chat" CVAR on the client.
    People will be able to hear the commentators simply by joining
    the proper team (in team modes) and remaining a spectator.

    There are also 3 new server commands to facilitate the mani-
    pulation of the "commentators" CVAR:
        commentators_clear
        commentators_add nick [nick ...]
        commentators_remove nick [nick ...]

 5. Added a "refreshbans" server command that asks the server to
    reload the master and server-provider ban lists.

 6. Added new SetActivator and SetActivatorToTarget acs functions.

 7. Fixed a crash on e2m9 intermission.

 8. Added some spectator CCMDs that are useful for video recording.
      spec_togglenoclip: allows specs to enable noclip (it is needed
          in some maps that teleport players only when they use a
          switch).
      spec_warp: warp the spec to location x, y, z and set pitch and
          angle (the input values are on the same scale as the idmypos
          output).
      spec_follow: make the spectator view follow a player.
      spec_follow_params: TODO
      spec_stopfollow: stop following a player.

 9. Fixed a client crash when using combinations of higher resolutions,
    SSAA and zooming.

10. Resolved a weapon/ammo desync in demos from the recorder's POV.

11. Added a new dmflag (DF_MULTIKEYBINDS = 536870912) and an associated
    CVAR (sv_multikeybinds). It determines whether aliases/bindings can
    trigger more than one key at the same time (typically used for SR50
    automation).

12. The dmflag2 "DF2_OS_JUMP" (262144) is not needed any more. The
    classic movement it implies will be always used except when
    when mlook + jump + no OS_BLAST is set (rjump physics).

13. Implemented UT-style double jumping: activates when you jump a
    second time near the apex of the first jump and gives you an extra
    boost. It's activated via a new dmflag (DF_DBL_JUMP = 536870912),
    or an associated CVAR (sv_dbljump).

14. Implemented true widescreen (16:9) support; when enabled, it
    expands the field of view to 106 (rather than 90) degrees in the
    horizontal direction and is suitable for most of today's monitors.
    Fullscreen (4:3) as opposed to Widescreen (16:9) view is controlled
    via a dmflag2 (DF2_FULLSCREEN = 262144) or an associated CVAR
    (sv_fullscreen). There are also very flexible arrangements for
    using widescreen on a fullscreen video mode: you can select
    between letterboxing vs. stretching and you can also select the
    desired amount of letterboxing/stretching.

15. Added a client CVAR called "demo_ar". It controls the desired aspect
    ratio while playing back demos. It can assume a value of zero (in
    which case the demo plays back at the "native" aspect ratio), one
    (in that case the demo plays back as widescreen), or two (in that
    case the demo plays back as fullscreen).

16. In some instances, missiles that exploded on the server would appear
    as live on the client: fixed.

17. Fixed a case where doors could move below their initial height in
    sectors that also had a lift in them (See liftdoortest2.wad). thx to
    rhinoduck, Krawa and Evolution for reporting and testing work.

18. Added the StrParam ACS function. It allows creating temporary ACS
    strings on the fly.

19. Added lineid arguments to Polyobj_StartLine and Polyobj_ExplicitLine
    line specials.

20. Protocol improvements to help the hosting of home servers when
    port forwarding or upnp are not properly configured.

21. Added Support for the "map00 lobby convention" in WADs. It's
    controlled via the "lobby" CVAR. When that CVAR is 1, it activates
    the "lobby mode":
       1. The server auto-switches to map00 when both players leave.
       2. The server auto-switches to map00 when a map ends.
       3. All maps will always be available for voting, no matter
          the value of sv_vote_map_skip.
       4. There will be no time limit on map00.
       5. Dynamic bots (minplayers) are excluded from map00.

    For this mode to get activated, you need to:
       a. Set the "lobby" CVAR to a value of 1.
       b. map00 should exist in the loaded WADs.
       c. Define a maplist on the server.
       d. Include map00 into the maplist.

22. Multiple fixes for client and server crashes.

23. Fixed monster railgun shots not being visible online.

24. Added two new command line parameters -rand_color and
    -rand_voice to randomize the player's color/voice.

25. Enabled loading of font lumps that have kerning specified.

26. Remember the value of the idmypos CVAR on the client.

27. Make color representation of health depend on dehacked
    start health.

28. Allow maxplayers=1 in coop/survival.

29. Proper tid=0 handling for Thing_Damage special.

30. Fixed the spectator teleports and improved the player teleports
    as recorded in demos.

31. Transfer TID when morphing an actor.

32. Fixed nightmare monster respawns; they should not spawn into
    players any longer.

33. New server CVAR sv_acs_world_exit. When enabled then ASC OPEN
    scripts can exit a map even when sv_noexit is set. Beware that
    the activator in other scripts that use a delay can become NULL
    before exit is called, thus resulting in a mistaken 'world'
    exit (e.g., see DeathBall).

34. Fixed a problem with split demos and inventory/ammo/weapons
    in coop/survival.

35. Fixed a crash related to long cvar names in cvar overrides.

36. Restored vanilla barrel height.

37. Added new client CVAR cl_showeventmsg. When disabled the event
    messages (flag taken, etc.) will not be printed to screen. Event
    sounds will still play.

38. Added new client CVAR cl_showdeadscore. It controls whether the
    scoreboard is automatically drawn for dead players.

39. Added the following read-only CVARs on the client: get_x, get_y,
    get_z to get the x, y, z position (fixed-point) of  the display-
    player; get_pitch, get_yaw, to get the pitch and angle (truncated)
    of the displayplayer; get_consoleplayer, get_displayplayer to get
    the consoleplayer and  displayplayer indices respectively.

40. Allow old thrust method (sv_newthrust) to operate on TIDs. The ACS
    function declaration is:
            ThrustThing (angle, force, nolimit, tid)
        old ThrustThing (angle, force, dummy,   tid)
    Nolimit does nothing when old thrust is enabled for compatibility
    reasons.

41. Windows client and Linux server crashes will generate a dump file
    that can help to fix the crash. To make it work in Linux you need
    to have GDB installed. At any rate, if your server or client crashes,
    you can submit the dump file so we can fix the bug.

42. Added a new dmflag2 (DF2_BRIGHTSKINS = 1073741824) and an
    associated CVAR (sv_brightskins). It determines whether player
    skins are brighter/more visible from a distance than normal.

43. Fixed skin scaling to work online.

44. Fix color overrides to be not applied when spectating a game.

45. Fixed a ZDoom bug that sometimes caused the BFG to misfire right
    after pickup.

46. New "motd_duration" CVAR controlling how long the MOTD stays on
    screen. Default value = 15 (seconds). It can range between 1 and
    300; a zero value blocks the display of the MOTD completely.

47. Two new commands to re-display / kill the MOTD: "showmotd" and
    "killmotd".

48. The item selection (heretic/hexen) should be shown while spying
    or demo viewing.

49. Fixed the Windows 8 problems by replacing DirectDraw framebuffer
    with Direct3D framebuffer using the D3D device backbuffer. This
    also means that now 3rd party programs, like Steam Overlay UI,
    are working.

50. Better multiple monitor support and implementing it as a menu
    item to the video options.

51. Improved a bit the handling on the server of uneven packet
    delivery from the clients.

52. Added a new dmflag (DF3_INSTATELE = 1) and an associated CVAR
    (sv_instatele). When enabled, it removes the half-second freeze,
    and preserves the player speed and angle on normal (non-silent)
    teleports.

53. Switched the timestamps in all server logs to the standard ISO
    format (YYYY-MM-DD HH:MM:SS). Furthermore, the frag and weapon
    logs will contain timestamps just like all other logs.

54. New "limited" log on the server; it's similar to the general one,
    but it does not display the IPs of connecting players, rcon commands
    and non-public messages. It's enabled by the -llog cmd. line switch.

55. Implemented log downloading in the zserv; it's controlled from the
    "log_publish" CVAR; when it's turned on, logs can be fetched from:
                          http://SERVER_IP:PORT/logs/
    Only "non-sensitive" logs are available through this mechanism:
    CTF, frag, weapon and limited logs. There is also a restriction in
    the age of logs: current logs are NOT available for download: only
    older logs are. The max. age of the logs that will be available for
    download is controlled via the "log_publish_maxage" CVAR; it's an
    integer that can range from 1 up to 30 (days); defaults to 7.

56. The railgun has been extended to work as a standard weapon in
    Heretic and Hexen; it uses Hellstaff ammo (lesser and greater
    runes) in Heretic and blue mana in Hexen. both cases it consumes
    2 units of ammo per shot and gives 20 units of ammo (ie., 10 shots)
    on pickup. The instagib dmflag has also been extended to work
    properly in Heretic and Hexen.

57. Added the CLIENTSIDE flag to dehacked; objects having that flag
    move independently on the client (no bandwidth is consumed for
    their movement).

58. New "joinable_teams" server CVAR; it's a bitmask indicating which
    teams are allowed to join (1=red, 2=blue, 4=green, 8=white). It is
    automatically reset whenever maxteams is set; it can assume a value
    between 1 (only red can join) and 15 (all 4 teams can join). Note
    that team joining is STILL SUBJECT TO "maxteams"; if for example
    you want only red and green to join, you will set maxteams to 3
    (or 4) and joinable_teams to 1+4 = 5. If you set maxteams to 2 and
    joinable_teams to 5, then only red will be able to join.

59. New "sv_info_caching" server CVAR: it determines the amount of
    caching that the zserv will apply to the info sent to browsers.
    It's an integer value expressed in seconds. Defaults to 3. It
    can range from 1 (very little caching) to 15 (very large caching).

60. Increased the client limit to 100.

61. Implemented uncapped FPS; it's controlled from the "vid_capped_fps"
    client CVAR; when the CVAR is on, the client uses 35 FPS (as in
    classic DOOM); when it's off, the client uses as many FPS as your
    computer can handle, SUBJECT TO your monitor's limitations (vsync).
    If for example you have a strong CPU but a low-end monitor, then
    you will probably see 60 FPS (the refresh rate of most low-end
    monitors); if your monitor is fancier, you will see a higher FPS
    value. The implementation is correct, in that this setting does
    NOT affect your keyboard or mouse handling in any way.

62. Fixed a problem where a weapon appeared to fire while no projectiles
    were spawned when fire was kept pressed during a weapon pickup and
    PWO was enabled.

63. Spectator pitch is now recorded in demos (for the recording
    player of course).

64. Improved the robustness of the old CTF convention with respect
    to packet loss.

65. Enabled the demo tool to handle demos over 42MB.

66. Allow passing high CVAR values (eg. 1e+006) with the Puke CCMD.
    Make it also possible to properly return such high CVAR values.

67. sv_aircontrol changes should get propagated from server to client.

68. A value of 2 for the restartemptymap CVAR will advance to the
    next map.

69. Fixed a non-switching-out bug in the railgun when running out
    of ammo.

70. Fixed a problem in using the A_FireCustomRailgun in dehacked
    patches.

71. Made the ID numbers of Hudmessages serve as priority for the
    messages. Hudmessages with lower IDs will appear in front of
    those with higher IDs.

72. More work on hexen has been done; the HUD, as well as most
    artifacts, armor, weapons, monsters, player classes are
    *starting* to work; don't assume though that they are "done";
    there is still a long road ahead for that.

73. Barrels should be able to activate lines.

74. Fixed the Hexen main menu (it should show minotaurs instead of
    skulls).
-----------------------------------------------------------------------

3. 1.10b02 release (2014-08-02)
-----------------------------------------------------------------------
 1. Hexen leaves are decorative and should not waste bandwidth (or
    spawn twice). Fixed.

 2. Added the CLIENTSIDEONLY synonym to the CLIENTSIDE dehacked
    flag.

 3. New dehacked flag called "SERVERONLY"; any object having that
    property will spawn on the server (so it can do whatever it's
    supposed to do), but the spawn & movement will not be sent to
    the clients. This is useful for objects that need a single,
    authoritative instance (running on the server) as opposed to
    many instances (one on the server + one on each client). Objects
    related to game logic can benefit from this flag. The principal
    difference between this flag and the CLIENTSIDE flag is that
    CLIENTSIDE tells the clients than the object has been spawned,
    but doesn't send movement afterwards (so the client has to move
    it), whereas SERVERONLY does not tell the clients anything about
    that object (so it exists only on the server).

 4. Pickup of invulnerability spheres by players would not update
    their APROP_Invulnerable property (as reported to ACS). Fixed.

 5. Fixed a problem when in-game chat contained the character #255.

 6. A couple of crosshair fixes in virtual 320x200 mode.

 7. Fixed a problem with the 'mute when out of focus' option in
    full screen mode.

 8. Extended the server maplist to handle very large maplists (up
    to 10000 maps) efficiently.

 9. Fixed bouncing-related bugs in dehacked.

10. Bossbrain and serpent fixes.

11. Log access via the ZServ HTTPD was not functioning correctly on
    Linux servers. Corrected.

12. Added Cyrillic versions of the Trebuchet font.

13. Fixed a quake-related crash.

14. Fixed a 'corpse queue'-related crash.

15. Fixed some rendering-related crashes.
-----------------------------------------------------------------------

4. 1.10b03 release (2015-01-01)
-----------------------------------------------------------------------
1. Fixed a recently introduced bug whereby the "cl_maxbodies" CVAR
   would be ignored.

2. Fixed a crash in the ACS function "CheckWeapon" when the activator
   had no weapon at all.

3. Fixed an occasional "no camera" bug while viewing demos.

4. Fixed a crash when an actor died from ice damage and had no ice
   death defined.

5. Fixed a client crash when encountering a "none" decal in the
   DECALDEF lump.

6. Fixed a recently introducted bug when an actor's death state was
   set to NULL.

7. From now on, CVAR overrides for a given map will be applied in the
   order specified in zserv.cfg and they'll be restored in the inverse
   order.

8. Implemented an MBF-style codepointer A_PlayWeaponSound. It's
   similar to A_PlaySound, except that:
     a. it applies to weapon rather than actor frames,
     b. it uses the weapon rather than the body channel,
     c. it uses Args1/Args2 rather than Unknown 1/2 for the sound
        number and attenuation flag respectively (Unknown 1/2 are
        used for the animation in weapon frames).

9. Fixed some inacurracy when using the turn180 command online.

10. Extended the number of possible Args in dehacked frames to 9
    (Args1...Args9). This will be useful in future extensions.

11. Implemented several new MBF-style codepointers; they're inter-
    faces to the ACS scripting functions and they're designed to
    allow controling ACS scripts from dehacked. For each relevant
    ACS function, there are 2 codepointers: one strictly for actor
    frames (names starting with CPA_), the other strictly for
    weapon frames (names starting with CPW_). All the codepointers
    take their parameters as Args1...Args5 in the order used by
    the ACS function that they call. Here is the list:

      a. CPA_Execute, CPW_Execute:
         they map to the ACS function:
            ACS_Execute(script, map, s_arg1, s_arg2, s_arg3)
         Since ACS_Execute takes 5 parameters, the codepointers
         use Args1...Args5.

      b. CPA_ExecuteAlways, CPW_ExecuteAlways:
         they map to the ACS function:
            ACS_ExecuteAlways(script, map, s_arg1, s_arg2, s_arg3)
         Since ACS_ExecuteAlways takes 5 parameters, the codepointers
         use Args1...Args5.

      c. CPA_LockedExecute, CPW_LockedExecute:
         they map to the ACS function:
            ACS_LockedExecute(script, map, s_arg1, s_arg2, lock)
         Since ACS_LockedExecute takes 5 parameters, the codepointers
         use Args1...Args5.

      d. CPA_LockedExecuteDoor, CPW_LockedExecuteDoor:
         they map to the ACS function:
            ACS_LockedExecuteDoor(script, map, s_arg1, s_arg2, lock)
         Since ACS_LockedExecuteDoor takes 5 parameters, the code-
         pointers use Args1...Args5.

      e. CPA_Suspend, CPW_Suspend:
         they map to the ACS function:
            ACS_Suspend(script, map)
         Since ACS_Suspend takes 2 parameters, the codepointers
         use Args1...Args2.

      f. CPA_Terminate, CPW_Terminate:
         they map to the ACS function:
            ACS_Terminate(script, map)
         Since ACS_Terminate takes 2 parameters, the codepointers
         use Args1...Args2.

12. Implemented an MBF-style codepointer A_RandomJump. It can alter
    the execution path of actors depending on a random drawing. One
    uses the "Unknown2" parameter to specify the desired probability
    (N / 256) of a jump to the frame specified by the "Unknown1"
    parameter. If for example, Unknown2=192 and Unknown1=14, it
    means we want the actor to jump to frame 14 with a probability
    of 75% (192/256) or to the next frame otherwise.

    IMPORTANT NOTE: this codepointer applies to actors only; if you
    try to use it on weapons, it *will* crash the engine.

13. Fixed a client crash after the end of a level when the level does
    not have an intermission image.

14. Enabled the getting/setting of 3 actor properties from the
    Get/SetActorProperty() ACS functions:
	APROP_Height (read only)
	APROP_Radius (read only)
	APROP_ReactionTime (read/write)

15. The APROP_Speed property can now be read/set on players.

16. Implemented the decapitation in the Heretic's player, Hexen's
    Fighter player and Fighter Boss (Zedek) extreme death (gibbing).

17. Heretic's bag of holding should not spawn in instagib mode.

18. Successive "say" commands cannot occur within 3 ticks of each
    other.

19. Implemented the automatic submission of minidump files when the
    client crashes; this can help in finding and fixing client bugs.
    The generation and submission of those files is controled by the
    "minidump_policy" CVAR. It can take one of the following values:
        0: Don't generate any minidumps
        1: Just generate minidumps; don't send them anywhere.
        2: Generate minidumps and submit them to zdaemon. This is
           the default value.
        3: Generate minidumps, submit them to zdaemon and then
           delete them.

20. The A_FastChase codepointer can now be accessed from dehacked.

21. The "turn180" command will not be able to coexist with other
    commands in the same alias (macro). Firing rockets from one's
    back was never intended as a game feature. The command will
    still be usable in its intended (standalone) form.

22. A "monsters telefrag each other" option was always forced on
    on any map called "map30"; it's useful for the "Icon of Sin"
    map in doom2.wad, but not for other WADs. We changed it so
    that this flag is turned on for map30 only when doom2.wad is
    loaded and it's the only wad. In this way it will work for
    normal DOOM coop, but it will not conflict with other WADs
    (one can turn on that flag from mapinfo for any map on newer
    WADs).
-----------------------------------------------------------------------

5. 1.10b04 release (2015-08-02)
-----------------------------------------------------------------------
 1. Fix for the automap which was off-center in overlaid mode when
    the virtual 320x200 mode was selected.

 2. Doom Builder's 3D Camera object will get ignored on map loading.
    It's not used by the engine anyway.

 3. Frags by fist (staff in Heretic) will trigger the playback of
    the "ann/kill_fist" sound clip. Similarly frags by chainsaw
    (gauntlets in Heretic) will trigger the "ann/kill_chainsaw"
    sound clip. Both clips are optional and may be provided by
    a PWAD.

 4. Implementation of the "weapon-specific" scripted marines,
    including the ACS opcodes to set their weapon / sprite.

 5. The "spec_warp" client command should not check for the
    validity of a move if the client has noclip enabled.

 6. Implementation of the following ACS functions:
      * ResetMap
      * PlayerIsSpectator(player_index)
      * ConsolePlayerNumber
      * GetPlayerLivesLeft(player_index)
      * ACS_NamedExecute
      * ACS_NamedExecuteWait
      * ACS_NamedExecuteAlways
      * ACS_NamedExecuteWithResult
      * ACS_NamedLockedExecute
      * ACS NamedLockedExecuteDoor
      * ACS_NamedSuspend
      * ACS_NamedTerminate
      * NamedScriptWait

 7. Fixed a desync in the movement of the Heretic firemace
    projectiles in online mode. thx to Krawa for the report
    and debugging work.

 8. Added a "SYNCMOVEMENT" flag to dehacked; it can be used
    for projectiles having idiosynchratic/randomized movement
    that need frequent "driving" from the server to the clients
    (use it with restraint though: it consumes more bandwidth
    than normal projectiles).

 9. The recent DirectDraw -> Direct3D video changes resulted
    in an incompatibility with 16-bit (Highcolor) video modes.
    This has been fixed now.

10. New constants for the GetPlayerInfo() ACS function, so it
    can access more player-related data.

      PLAYERINFO_ITEMS:    the player's item count.
      PLAYERINFO_HEALTH:   the player's current health.
      PLAYERINFO_ARMOR:    the player's current armor.
      PLAYERINFO_SECRETS:  the player's secret count.
      PLAYERINFO_KILLS:    the player's kill (NOT frag) count.
      PLAYERINFO_DEATHS:   the player's death count.
      PLAYERINFO_SUICIDES: the player's suicide count.
      PLAYERINFO_PTS_1:    the primary criterion for the current
                           gamemode. It pertains to frags in DM,
                           damage in coop/survival, points in
                           CTF/DDOM/KOTH.
      PLAYERINFO_PTS_2:    the secondary criterion for the
                           current gamemode. It pertains to
                           deaths in DM, and kills in coop/
                           survival.
      PLAYERINFO_PTS_3:    the tertiary criterion for the
                           current gamemode. It pertains to
                           deaths in coop/survival.
      PLAYERINFO_TIME:     the time (in game ticks) since the
                           player last spawned (in the current
                           level); -1 if he hasn't.
      PLAYERINFO_USR_1:    Ten user-defined counters that
      ...                  may be used by modders for any
      PLAYERINFO_USR_10:   purpose.

11. New SetPlayerInfo() ACS function to set some player
    characteristics. The syntax is:

    void SetPlayerInfo(int player, int selector, int value)

    The "selector" parameter must range from PLAYERINFO_USR_1
    through PLAYERINFO_USR_10; other values for the selector
    will be silently ignored. This is just a first implemen-
    tation; the function may be extended to handle more
    PLAYERINFO_* constants in the future.

12. New PlayerTopIndex() ACS function to obtain the highest
    player index at the moment; it can be used to efficiently
    obtain the upper bound for loops iterating over all players.
    The syntax is:
        int PlayerTopIndex(void)

13. New NetMode() ACS function to obtain the current "network
    mode" at runtime. The syntax is:
        int NetMode(void)
    It returns one of three possible values:
        * NM_SINGLEPLAYER (1): The script is being run by
          the ZDaemon client in SP mode.
        * NM_SERVER (2): The script is being run by the
          the ZDaemon server in online mode.
        * NM_CLIENT (3): The script is being run by the
          the ZDaemon client in online mode.

14. New ACS functions for executing scripts "remotely" (ie.,
    the server can instruct a client to run a script and
    the client can instruct the server to run another script).
    The syntax is:

    void Server_Execute(int script, int map,
                        int arg1, int arg2, int arg3)
    void Server_ExecuteAlways(int script, int map,
                        int arg1, int arg2, int arg3)
    void Server_NamedExecute(string script, int map,
                        int arg1, int arg2, int arg3)
    void Server_NamedExecuteAlways(string script, int map,
                        int arg1, int arg2, int arg3)
    void Client_Execute(int client, int script, int map,
                        int arg1, int arg2, int arg3)
    void Client_ExecuteAlways(int client, int script, int map,
                        int arg1, int arg2, int arg3)
    void Client_NamedExecute(int client, string script, int map,
                        int arg1, int arg2, int arg3)
    void Client_NamedExecuteAlways(int client, string script,
                        int map, int arg1, int arg2, int arg3)

    The functions mimic the ACS_Execute, ACS_ExecuteAlways,
    ACS_NamedExecute, ACS_NamedExecuteAlways functions in
    terms of parameters and functionality. The Client_*
    functions have an additional parameter at the front,
    indicating the "target client"; a value of -1 indicates
    all clients.

    When the Server_* functions are encountered by the
    server, they're executed just like normal ACS_Execute.
    When they're encountered by the client in SP mode, they
    are also executed just like normal ACS_Execute. When
    they're encountered by the client in online mode, the
    clients sends a message to the server to carry out the
    execution.

    When the Client_* functions are encountered by the
    server, the server sends a message to the indicated
    clients to carry out the execution. When they're
    encountered by the client in either SP or online mode,
    they're executed just like normal ACS_Execute as long
    as the "target client" is either -1 or equal to the
    consoleplayer.

    The ACS extensions of the last 5 items above require a new
    "zdaemon.acs" file for ACC (the ACS compiler); you can
    download it from:
        https://downloads.zdaemon.org/zdaemon.acs

15. Complete implementation of monster infighting with respect
    to the latest zdoom (2.7.1). There are two dehacked keywords
        "Monsters Ignore Each Other"
        "Monsters Infight",
    a dehacked flag called "NOINFIGHTING", as well as a new
    "infighting" CVAR which is an integer with 3 possible
    values (default value = 0):
       -1 : Monsters never fight other monsters
        0 : Monsters do not fight other monsters of their own
            kind unless they use bullet  attacks. This is the
            standard Doom behavior.
        1 : Monsters will fight other monsters, including
            those of their own kind.

16. The height of the CTF flags went up from 16 units to 48.

17. Implementation of friendly monsters; there are also two
    new dehacked flags "FRIENDLY" and "SUMMONEDMONSTER" which
    can be applied to various actors.

18. New client command "spy" that enables you to specify
    either a player number (when using a # prefix) or a
    player name (when using a $ prefix) so you can switch
    POV to that player directly. The usual restrictions
    apply of course.

19. Two new server commands to remove maps from the maplist:
        delmapbyidx <NNN>
        delmapbyname <XXX>
    The first removes a map by its index (1 being the first
    one), the second removes all entries matching the specified
    map name.

20. Implementation of 4 new ACS functions for simpler/better
    pseudorandom numbers:

    1. int ZD_rand(int min_value, int max_value);
       Draws a uniformly distributed random number in the specified
       range (the range includes the min. and max. values). It can
       work in "repeatable" mode (via the functions below), but
       that's NOT the default operation; it defaults to "always
       new" drawings.

    2. void ZD_srand(int seed);
       Sets the seed of the random number generator; if the specified
       value is negative, then it will use something "random" based
       on the current time and other parameters. This function gets
       auto-called with seed = -1 on every map load, which results
       in "always new" drawings; if you want repeatability, you can
       call the function with a fixed (and non-negative) seed value
       (eg., 0).

    3. void ZD_rand_savestate();
       Saves the current state so you can restore it later.

    4. void ZD_rand_restorestate();
       Restores a previously saved state so you can re-draw the same
       random numbers.

    These extensions require a new "zdaemon.acs" file for ACC (the
    ACS compiler); you can download it from:
        https://downloads.zdaemon.org/zdaemon.acs

-----------------------------------------------------------------------

7. 1.10b06 release (2015-08-21)
-----------------------------------------------------------------------
1. Fixed a monster infighting problem whereby hitscan monsters
   would not target other monsters of the same kind that damaged
   them.

2. Fixed a namespace collision problem between BEHAVIOR and LOADACS
   lumps.

3. The RCON SAY command will be included in the limited log.
-----------------------------------------------------------------------

8. 1.10b07 release (2015-10-08)
-----------------------------------------------------------------------
 1. Implemented the "pukename" console command: it enables the
    invocation of named scripts from the console. The syntax is:
        pukename < script_name > ["always"] [arg1] [arg2] [arg3]
    where items in square brackets are optional.

 2. Extended the A_Mushroom codepointer to use the Unknown1/2
    parameters as per the original MBF behavior.

 3. Implemented a "CHASEGOAL" actor property; monsters with that
    flag walks towards their goal instead of their target if a
    valid goal is set. The property can be set/read from ACS
    (GetProperty/SetProperty/CheckProperty/Thing_SetGoal) or from
    dehacked (deh. flag name = "CHASEGOAL").

 4. Implemented the "VISIBILITYPULSE" dehacked flag.

 5. Playback of external m3u/audio files has been blocked; users
    can get the same results from using any media player.

 6. Enabled the access/manipulation of all code pointers in the
    engine via dehacked: not only those of doom. Also added some
    related documentation to the web site:
          http://www.zdaemon.org/?CMD=info&NAME=deh

 7. Added protection against code pointer mismatches: the engine
    will detect (and complain) if an actor code pointer gets
    called by a weapon and vice versa.

 8. Implemented several new MBF-style code pointers:
      a. CPA_BulletAttack
         Performs a hitscan attack (firing bullets); you can
         specify the number of bullets in "Args1" and the sound
         to be made in "Args2". This code pointer is meant to
         be used by actors only: not weapons.
      b. CPW_BulletAttack
         Similar to CPA_BulletAttack but for weapons; it will
         also do ammo checking/depletion.
      c. CPA_CustomBulletAttack
         Implements a more customizable hitscan attack for monsters;
         the parameters are passed as Args1..Args8:
            1. horz_spread: The horizontal spread, in degrees.
            2. vert_spread: The vertical spread, in degrees.
            3. numbullets: The number of bullets to fire.
            4. damageperbullet: The amount of damage each bullet
               does.  Unless the CBAF_NORANDOM flag is set, this
               is multiplied by a random value between 1 and 3.
            5. pufftype:  Thing mnemonic or DeHackEd number to
               spawn for puffs (when a wall is hit). Defaults
               to "BulletPuff" if missing or invalid.
            6. range: The maximum range of the bullets. Default
               is 0, which is interpreted as 2048.
            7. flags: bitmask consisting of any number of the
               following options (bits):
                  CBAF_AIMFACING (1): If set, the attack will be
                     fired in the direction the actor is currently
                     facing, rather than at the actor's current
                     target.
                  CBAF_NORANDOM (2): If set, the damage per bullet
                     is not randomized.
                  CBAF_EXPLICITANGLE (4): If set, the horizontal
                     and vertical spread are used as explicitly
                     stated, instead of being used as a range for
                     random spread.
                  CBAF_NOPITCH (8): If set, the vertical angle is
                     not adjusted to aim at the target.
                  CBAF_USEAMMO (16): If set, the player's bullet
                     inventory is checked/depleted. Valid only
                     for players/weapons.
            8. firing sound
      d. CPW_CustomBulletAttack
         Similar to CPA_CustomBulletAttack but for weapons; it will
         also do ammo checking/depletion if you use the CBAF_USEAMMO
         bit in the flags parameter.
      e. CPA_CustomMissile
         Implements a customizable projectile attack for monsters.
         the parameters are passed as Args1..Args7:
            1. missiletype: Thing mnemonic or DeHackEd number of
               missile to be spawned. Defaults to "Rocket" if
               missing or invalid.
            2. spawnheight: how high from the monster's feet to
               shoot the missile.
            3. spawnofs_horiz: how far from the monster's center
               to shoot the missile.
            4. angle: the direction relative to the monster's
               facing angle in which to shoot the missile.
            5. pitch: used only when some of the flags (listed
               below) are used.
            6. firing sound
            7. flags: bitmask consisting of any number of the
               following options (bits):
                  CMF_AIMOFFSET (1): the missile is aimed parallel
                     to a missile with a spawn height of 32 and an
                     xy-offet of 0. This can be useful if you want
                     to have a monster shoot multiple missiles at
                     once.
                  CMF_AIMDIRECTION (2): the missile is not aimed
                     at a target. Instead, it is shot in the
                     specified direction with the specified pitch.
                  CMF_TRACKOWNER (4): if a missile is fired by
                     another missile, use this flag to ensure the
                     secondary projectile knows who is its real
                     owner.
                  CMF_CHECKTARGETDEAD (8): with this flag, the
                     function will not spawn a missile if the
                     calling actor's current target is dead.
                  CMF_ABSOLUTEPITCH (16): use the pitch parameter
                     as an absolute value, ignoring the calculated
                     aim pitch. Implied CMF_AIMDIRECTION. The main
                     difference here is that a target is required,
                     where CMF_AIMDIRECTION does not require a
                     target.
                  CMF_OFFSETPITCH (32): use the pitch parameter as
                     an offset to the calculated aim pitch.
                  CMF_SAVEPITCH (64): the pitch used for firing
                     the missile is saved as the missile's own
                     pitch. (Requires CMF_AIMDIRECTION,
                     CMF_ABSOLUTEPITCH, or CMF_OFFSETPITCH.)
                  CMF_ABSOLUTEANGLE (128): use the angle parameter
                     as an absolute value, instead of an offset to
                     the actor's angle.
      f. CPW_CustomMissile
         Similar to CPA_CustomMissile but for weapons; it uses the
         same parameters for Args1..Args6. Args7 is still a flags
         parameter but it accepts different options (bits):
            CMF_USEAMMO (256): check and deplete the player's ammo.
               Args8 specifies the ammo to be checked/used according
               to the following convention:
                  1: Bullets
                  2: Shotgun Shells
                  3: Energy Cells
                  4: Rockets
                  5: Wand Crystals
                  6: Ethereal Arrows
                  7: Dragon Claw/Blaster orbs
                  8: Hellstaff/Skullrod runes
                  9: Phoenix Rod orbs
                 10: Mace Spheres
                 11: Blue Mana
                 12: Green Mana
               Args9 specifies the ammount of ammo used per shot.
            CMF_AIMATANGLE (512): add the specified angle to the
               player's angle when shooting the missile.

 9. Slightly modified the survival rules: when someone disconnects
    while playing, he doesn't get automatically blocked from re-
    joining in the same level: he gets charged with one death
    instead; if the resulting death count is lower than maxlives,
    he can re-join but he will get "charged" with the death count.
    Otherwise, he will be blocked just like before.

10. Implemented a more precise gravity property per actor accessible
    from dehacked or ACS; a value of 1.0 signifies "normal gravity",
    0.1250 signifies "low gravity" and 0 signifies "no gravity". The
    NOGRAVITY and LOGRAV flags remain for compatibility purposes.

11. Implemented a "DamageFactor" dehacked property for actors. It
    specifies an actor's sensitivity to damage (1.0 being "normal",
    and higher values indicating higher sensitivity to damage).

12. Implemented a remove_cvaroverride server command: the syntax is:
             remove_cvaroverride  < map_name >  < cvar_name >

13. Added a new boolean CVAR "retain_console". When set to true,
    it will not close the console at map start; defaults to false
    (ie., same behavior like before).

14. Coop/Survival players are not autojoined any more on map reset.

15. When a map changes via voting, in-game players will be auto-
    joined except in coop/survival.

16. sv_randmaps now uses maplist shuffling instead of purely random
    selection.

17. Kick voting now requires at least 2 voters (apart from the
    percentage specified by "sv_vote_kick_percent").

18. Various minor ACS improvements:
      a. ACS named scripts will be case-insensitive.
      b. Script names are shown by name and number where applicable.
      c. An "instance id" has been added to each script's displayed
         name to distinguish instances of the same script.

19. The coop/survival spawning algorithm has been reworked as follows:
      a. In SP mode: for "spectator spawn", "normal in-game spawn",
         and "respawn after death" we use the "player number method"
         of Doom. So the player always spawns at spot 1; if he adds
         a bot, the bot always spawns at spot 2; if he adds another
         bot, that goes to spot 3, and so on. So in SP mode ZDaemon
         behaves identically to Doom.
      b. In C/S mode: when you spawn (as a player) in-game, ZDaemon
         uses a "by spawn order" (rather than by player number);
         this means that the first guy to spawn goes to spot 1, the
         second to spot 2, etc. This is the closest possible C/S
         analogue to the original Doom behavior.
      c. In C/S mode: when you respawn after death, you use the
         same spawn that you used on first in-game spawn. This
         together with the item above, implies that the spawning
         behaves as in SP mode (and as in classic Doom), when
         there is only one player in the server.
      d. In C/S mode: when you spawn as a spectator, it simply uses
         one of the coop spawns at random; this is more useful for
         spectating. It has no analogue in classic Doom, as Doom
         had no spectator support.
-----------------------------------------------------------------------

9. 1.10b08 release (2017-09-04)
-----------------------------------------------------------------------
 1. Modified the "Press the 'USE' key to join" message shown to
    spectators in survival when sv_joinlimit is in effect. The new
    message either displays the remaining time to join or informs
    players that joining is disabled until the next round.

 2. Extended the range of numeric ACS scripts: they can range from
    1 up to 32767. Also extended the upper limit on the total number
    of named scripts to 32768.

 3. Implemented the APROP_MasterTID, APROP_TargetTID. APROP_TracerTID
    actor properties for the GetActorProperty, SetActorProperty and
    CheckActorProperty ACS functions.

 4. Freedoomu is now correctly recognized as a registered IWAD.

 5. Updates for the FLAC and ZLIB libraries.
-----------------------------------------------------------------------

10. 1.10b09 release (2018-02-12)
-----------------------------------------------------------------------
 1. chase_dist is now restricted to the 0...1000 range.

 2. chase_height is now restricted to the -100...100 range.

 3. Security cameras did not work with uncapped FPS: fixed.

 4. Fixed a problem when a player's camera was switched via
    scripting, while the player had activated spycam.

 5. Fixed a bug that could crash the server in some
    combinations of player respawning/disconnections.

 6. High resolution video modes having an aspect ratio of 1.6
    (for example 1920x1200, 1440x900, 1280x800) were treated
    like 320x200 in terms of the aspect ratio (so they looked
    distorted). Fixed. This also means that virtual 320x200
    mode is available only for fullscreen (not widescreen)
    gameplay.

 7. Avoid geometric distortions during window resizing and
    maximization by enforcing the aspect ratio of the selected
    mode; also handles multiple monitors properly. One can
    supress that behavior (and mess with the aspect ratio)
    by setting the "vid_override_ar" CVAR to true.

 8. Security & safety improvements in ACS handling.

 9. The "exec" cmd. on the server has been restricted to
    access files inside the server's working directory.
    The same command has been re-enabled on the client
    subject to the same restriction, but only in SP mode.

10. Fixed a bug related to the invocation of acs named
    scripts across acs libraries.

11. There was a bug in the ChangeCamera line special logic:
    sometimes it would change the camera of all players even
    when it should change only the activator's camera: fixed.

12. The ThingDamage line special was buggy regarding the target
    of the damage and the reporting of negative damages in
    online mode: fixed.

13. Added a new dmflag (DF3_NOCHASEMODE = 2) and an associated
    CVAR (sv_nochasemode). It blocks chase mode from working
    in coop/survival modes in online games (chase mode is
    already blocked in other, competitive modes).

14. Monsters should not open fast doors.

15. rhinoduck-contributed fix for a problem regarding nested
    invocations of the ACS Log() function. Thanks rhinoduck.

16. Improved the implementation of the SetActivatorToTarget and
    SetActivator ACS functions.

17. The kick and addban commands got extended to handle the
    # and $ player specification (just like addtempban).

18. Improvements in the boss death behavior.

19. Fixed some problems with the monster count regarding
    friendly monsters.

20. The "special touching" logic has been reworked for better
    fidelity to vanilla DOOM. You can now pick up items 56
    units or below: used to be 55 or below.

21. Better syncing of level variables (monsters, items, secrets)
    between server and clients.

22. Improved the handling of moving floors/ceilings in the
    presence of packet loss.

23. Fixed a bug regarding the activation/deactivation of ambient
    sounds.

24. Fixed a bug related to certain color translations in online
    mode.

25. Netcode improvements for handling packet loss/out-of-order
    problems.

26. Fixed more camera "synchronization" problems in online mode.

27. Improved spectator/player weapon pickup synchronization even
    when DMFLAGS change.

28. Enabled floor/ceiling waggles in online mode.

29. Implementation of the ACS functions FadeTo, FadeRange and
    CancelFade in online mode.

30. Stealth monsters were not visible at all while shooting in
    online mode: fixed.

31. Earthquakes should move the player's view even when his
    view has switched to some camera.
-----------------------------------------------------------------------

11. 1.10 release (2018-03-07)
-----------------------------------------------------------------------------
 1. Fixed sound sequence problems in online mode.

 2. Fixed console wrapping in the presence of SSAA.

 3. Do not log client IPs in ltd log.

 4. Resolved a case where a client disconnection wouldn't be
    logged in the ltd log after a kick or ban.

 5. Better polyobject handling in online mode.

 6. SP is now more consistent with C/S in various game modes.

 7. Smoother sprite animation. Thx to Medis and noncom for the
    patch submission.

 8. GetPolyobjX and GetPolyobjY work now (client and server).

 9. Added server name and address to demos.

10. Survival fix to avoid taking a life when someone disconnects
    while dead.
-----------------------------------------------------------------------------