Software Change Log

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

1. Point 01 release (2018-03-15)
-----------------------------------------------------------------------
 1. Significant improvements to unlagged; hitting in online mode should
    now be exactly the same as in SP mode even in very high ping
    situations; furthermore, there should be far fewer "dropped shots".
-----------------------------------------------------------------------

2. Point 02 release (2018-04-08)
-----------------------------------------------------------------------
 1. Added a new dmflag (DF3_INFINITE_ITEMS = 4) and an associated CVAR
    (sv_infiniteitems). It blocks the "consumption" of an item when it
    is used (so it's effectively infinite once you acquire it).

 2. Changed the behavior of callvote: the person that calls the vote
    is automatically marked for a "yes" vote, so there is no need for
    them to issue such a command separately.

 3. Implemented a new "duel" mode (gametype=9). It differs from normal
    DM in the following aspects:
      a. maxplayers is forced to 2.
      b. overtime is forced to 1.
      c. sv_deathlimit is constrained from 15 to 60.
      d. When 2 players join, they start in "warmup" mode where they
         can play, get a feeling about the server, shoot and damage
         each others, but the frag/death/suicide counters remain at
         zero. When they are ready to start the game, they can call
         a vote with the command "callvote game". The vote requires
         100% agreement to pass.
      e. Once the "set game" starts, it will end in one of 3 ways:
           * Someone wins/loses (normal end of game).
           * Someone disconnects (automatic forfeiture of the game
             no matter the disconnection reason).
           * The players can use "callvote cancel" to cancel the
             game. If the vote passes, the game is canceled, no
             stats are recorded and it returns to warmup mode.
      f. If demo recording is enabled on the server, it will record
         demos only for the actual game: not the warmup.
      g. The warmup period length can be constrained by the
         "warmup_timelimit" CVAR; it defaults to 5 minutes and
         can range from 0 (which means unlimited) up to 1000.

 4. Fixed stretched skies in widescreen mode.

 5. World and global ACS arrays are now zero-initialized as they
    should be.

 6. An attempt to load a map will now only happen if a valid
    sequence of properly named data lumps follows its label.

 7. Extended tab autocompletion for client console commands. Auto-
    completion after "toggle", "rcon" and "rcon toggle" is possible.

 8. Fixed Heretic ammo pickup. Values for all types of ammo are 
    correct now.

 9. Fixed client freeze (eg. iddqd1.wad map12, whitemar.wad map01).

10. Fixed a problem that would cause spectators to reveal secrets
    under certain conditions.
-----------------------------------------------------------------------

3. Point 03 release (2018-04-11)
-----------------------------------------------------------------------
 1. Fixed some ACS memory handling problems.
-----------------------------------------------------------------------

4. Point 04 release (2018-05-18)
-----------------------------------------------------------------------
 1. Added killlog as new command line parameter -klog. It logs
    player name and killed monster. Only active in Coop and Survival.

 2. Pitch set by Security Camera was ignored online. Fixed.

 3. Fixed erroneous pixels of particles (rocket trail, railgun,
    particle fountain) in uncapped mode.

 4. Enabled cvar override for timelimit.

 5. Fix for CPW_BulletAttack, CPW_CustomBulletAttack and 
    CPW_CustomMissile: sv_infiniteammo had no effect and ammo counting
    was wrong online. Fixed.

 6. In survival sv_deathlimit is constrained from 1 to 5.

 7. Implementation of the following ACS functions:
      * UniqueTID
      * IsTIDUsed
      * Sqrt
      * FixedSqrt
      * strcmp
      * stricmp

 8. Enabled Get/SetActorProperty() ACS functions:
      * APROP_Frightened
      * APROP_NoTrigger
      * APROP_DamageMultiplier
      * APROP_StencilColor

 9. More render styles added:
      * STYLE_Stencil
      * STYLE_TranslucentStencil
      * STYLE_AddStencil
      * STYLE_AddShaded
      * STYLE_Shadow
-----------------------------------------------------------------------

5. Point 05 release (2018-07-29)
-----------------------------------------------------------------------
 1. If a stencil render style is active on a player, the own weapon is
    shown in stencil color now. TranslucentStencil, AddStencil 
    and AddShaded ignored brightness. Fixed.

 2. Fixed disappearing corpse in survival after player is out of lives
    and got a spectator.

 3. Red damage screen ignored sv_powerful_monsters in online mode.
    Fixed.

 4. Enabled SetPlayerProperty PROP_TOTALLYFROZEN.

 5. Changes of SetPlayerProperty in online mode does not touch
    client's chasecam anymore.

 6. More font colors for Print/HudMessage and client Message Colors:
    CR_BLACK, CR_LIGHTBLUE, CR_CREAM, CR_OLIVE, CR_DARKGREEN,
    CR_DARKRED, CR_DARKBROWN, CR_PURPLE, CR_DARKGRAY (CR_DARKGREY).

 7. Print/HudMessage: color for chat messages (\c*) and team chat
    messages (\c!) added. It uses the color of chat/team chat.
    PRINTNAME_NEXTLEVEL and PRINTNAME_NEXTSECRET added.

 8. HudMessage visibility flags added: HUDMSG_NOTWITH3DVIEW,
    HUDMSG_NOTWITHFULLMAP, HUDMSG_NOTWITHOVERLAYMAP.

 9. No message to join in survival when out of lives.

10. Implementation of ACS function ClassifyActor.

11. Implementation of ACS function GetActorPowerupTics.
    Powerups are: PowerInvulnerable, PowerStrength,
    PowerInvisibility, PowerIronFeet, PowerLightAmp.
    Heretic: PowerWeaponLevel2, PowerFlight, PowerGhost.
    Hexen: PowerSpeed.

12. Items could be used during intermission or as spectator. Fixed.

13. Linedef activation added: Projectile hits or crosses.

14. Basic implementation of LineAttack with tid, angle, pitch,
    damage and range.

15. Script activators would get lost while morphed: fixed.

16. Enabled user input to short-circuit the screen transition
    effect when starting a map.

17. Fix for CPW_BulletAttack and CPW_CustomBulletAttack: bullet puff 
    is shown now online.

18. Added obituaries for Hexen to replace the generic "Player died"
    message when a monster kills a player.

19. Added new screen wipe style: Wipe Oldschool.

20. Fixed a bug introduced in 1.10b09 which caused an ACS script which
    called ACS_ExecuteWithResult() or ACS_NamedExecuteWithResult() to
    be killed with the "ACS stack underflow" error if it called one of
    these built-in functions from within a custom function.
-----------------------------------------------------------------------

6. Point 06 release (2018-11-19)
-----------------------------------------------------------------------
 1. CheckInventory and CheckActorInventory return active powerups now.

 2. Maximum ANIMDEFS frames enlarged to 128.

 3. Implementation of ACS function SoundSequenceOnActor,
    SoundSequenceOnPolyobj and SoundSequenceOnSector (location 
    parameter will be ignored).

 4. Implementation of ACS function SetSkyScrollSpeed.

 5. Fixed: Flag of carrier (CTF) was shown too high in TERRAIN footclip.

 6. Improvements to voice chat: avoiding crackle and higher volume.

 7. Added a new dmflag (DF3_NO_EPISODE_RESET = 8) and an associated CVAR
    (sv_noepisodereset). There will be no inventory reset when episode 
    starts (E1M1, E2M1, E3M1, E4M1, E5M1, MAP01).
    It has lower priority than CVAR sv_resetinventory.

 8. Implementation of ACS function Scroll_Wall. For compatibility
    parameter "flags" is needed, but all parts of the wall will scroll.

 9. Heretic weapon Hellstaff with active Tome of Power (raindrops)
    used in Doom did not work. Fixed.

10. Fixed: A_SkullPop crashed Player Setup in Doom/Heretic.
    (e.g. Heretic Player gibbed death)

11. ACS function Sector_SetDamage: parameter interval and leaky added.

12. SNDINFO: Implementation of $volume, $attenuation and $rolloff.
    Optional attenuation for $ambient point added.

13. Gravity of a projectile spawned with Thing_ProjectileGravity was
    too high in online mode. Fixed.

14. Things added:
      * ColorSetter (9038)
      * FadeSetter (9039)
      * HateTarget (9076)
      * Polyobject Start Spot (hurts to touch) (9303)

15. Sector_SetColor and ColorSetter support Desaturation now.

16. Midi opening/closing has been moved to a background thread in
    order to preserve game responsiveness.
-----------------------------------------------------------------------

7. Point 07 release (2019-02-09)
-----------------------------------------------------------------------
 1. Morphing to Pig in non-Hexen games crashed client and server. Fixed.

 2. New constants for GetPlayerInfo() ACS function:
    PLAYERINFO_MORPHTICS (121):   tics countdown (chicken/pig)
    PLAYERINFO_MORPHED (122):     returns MORPHEDTO_NONE (0),
                                  MORPHEDTO_CHICK (1), MORPHEDTO_PIG (2)
    PLAYERINFO_READYWEAPON (123): selected weapon

 3. Implementation of the following ACS functions:
      * GetAmmoCapacity
      * SetAmmoCapacity
      * SetHudSize
      * SetMusicVolume (range of volume is from 0.0 to 1.0)
      * SpawnParticle (in online mode only for client scripts)
      * VectorLength
      * SetPointer
      * IsPointerEqual (AAPTR_PLAYER_GETCONVERSATION not implemented)
      * DropItem (dropamount will be ignored,
                  chance -1 means doom2.exe behavior)

 4. Crushing mode added, so crushers can be set as Doom or Hexen
    crusher. Crushed dead players will change to pools of blood now.
    Caught in the crusher player's view lowers now in online mode.
    Generic_Floor can crush now. Fixed.
    Implementation of line specials:
      * Floor_RaiseAndCrushDoom
      * Ceiling_LowerAndCrushDist
      * Ceiling_CrushAndRaiseDist
      * Ceiling_CrushAndRaiseSilentDist
      * Generic_Crusher2 (uses Hexen mode)

 5. Heretic Firemace projectiles bounced by hitting the sky. Fixed.

 6. Fix for invulnerability when sv_oldblast is active: player didn't
    get a thrust. (e.g. Arch-vile attack, rocket/barrel explosion)

 7. Message which player exited was shown multiple sometimes. Fixed.

 8. Improvement to default zoom of automap. It was too small.

 9. Added an "sv_ammomultiplier" CVAR that modifies the amount of
    ammo given on pickups. It's a scale factor expressed in percentage
    terms: defaults to 100 (%) and can range from 0 up to 500 (%).
    Applies to coop and survival ONLY: ignored in other modes.

10. Added new setting "Viewheight Bobbing" and CVAR "movebobviewheight"
    So it is possible to switch off up and down bobbing, but keeping
    the weapon bobbing for the Doom look.

11. Command "maplist": the actual running map is marked now.

12. Reducing intermission time is possible now when all players
    press use/fire.

13. Intermission is closer to original Doom/Doom2/Heretic in online
    mode now. Entering level and "you are here" will be shown.

14. Sector Special "Door Close Stay (after 30 sec.)" was buggy in
    online mode. Fixed.

15. Fix for "Screen wipe style none" 2 sec. input delay at
    map start in singleplayer.
-----------------------------------------------------------------------

8. Point 08 release (2019-05-29)
-----------------------------------------------------------------------
 1. ACS Print: cast type l (localized string from LANGUAGE) added.

 2. Fix for 1.10.07: Never crush BossBrain to pools of blood.

 3. Implementation of line special Teleport_NoStop.

 4. "auto_altwads" updated to Freedoom 0.11.3.
    Plutonia and TNT are also included now.

 5. Sound of Scripted Marine Pistol/Chaingun/Shotgun/SSG was played
    twice in online mode. Fixed.

 6. Hexen artifact Mystic ambit incant (ArtiHealingRadius) added.
    In non-Hexen mode: Heals the player and each affected player
    by 50-99 points.
    In team games only team mates could be healed.

 7. Hexen artifact Dragonskin bracers (ArtiBoostArmor) added.
    In non-Hexen mode: Gives 50 Armor up to Armor limit.

 8. Random maplist and Lobby is possible now.
    So it enlarges the usage of Lobby with an Exit.

 9. New server CVAR sv_reshuffle: Reshuffles a random maplist after a
    certain amount of played maps. 0 never reshuffles.

10. Implementation of ACS function GetPlayerInput. Limitations for 
    buttons: only BT_ATTACK, BT_USE and BT_JUMP are supported
    so far.

11. Implementation of ACS functions MorphActor and UnMorphActor.
    For MorphActor:
    playerclass: ChickenPlayer, PigPlayer
    monsterclass: Chicken, Pig
    Parameters style, morphflash and unmorphflash will be ignored.

12. Hexen monsters fixed in online mode:
      * Reiver buried (WraithBuried)
      * Stalker (Serpent)
      * Stalker Boss (SerpentLeader)
      * Dark Bishop (Bishop)
      * Menelkir (MageBoss)
      * Zedek (FighterBoss)
      * Traductus (ClericBoss)
      * Heresiarch
      * Korax

13. Fix for ClearInventory and TakeInventory that caused "Bad packet".

14. For using Heretic/Hexen sprites in Doom renaming added:
    Heretic: HEAD -> LICH
    Hexen:   ARM1 -> AR_1   ARM2 -> AR_2   ARM3 -> AR_3   ARM4 -> AR_4
             BARL -> ZBAR   CAND -> BCAN   EGGM -> PRKM   ROCK -> ROKK
             SUIT -> ZSUI   TRE1 -> ZTRE   TRE2 -> TRES   WATR -> HWAT
             MNTRF -> MNTRU   MNTRG -> MNTRV   MNTRH -> MNTRW
             MNTRI -> MNTRX   MNTRJ -> MNTRY   MNTRK -> MNTRZ

15. Hexen weapons Firestorm, Wraithverge and Frost Shards fixed
    in online mode.

16. Hexen artifacts "Dark Servant" (Friendly Minotaur) and "Disc of
    Repulsion" implemented.

17. Hexen puzzle items implemented.

18. Player colorization in Hexen implemented.

19. Fixes for Hexen destructible objects.

20. Heretic/Hexen: Height of time bomb explosion in online mode
    corrected.

21. Fix: Disabling of vid_fps redraws the HUD.

22. ZLauncher can now become the system-wide handler of the zds://
    protocol.
-----------------------------------------------------------------------

9. Point 09 release (2019-07-19)
-----------------------------------------------------------------------
 1. MBF dehacked added:
      * Scratch (Unknown 1: damage, Unknown 2: sound effect)
      * Turn (Unknown 1: angle rotation in degrees)
      * Face (Unknown 1: angle position in degrees)

 2. Fix for MBF dehacked Mushroom.

 3. Implementation of MBF Helper Dog.

 4. Fix for client-side falling down Things in online games.

 5. Connecting clients get the monster's state from the server now.

 6. Line_SetIdentification "clipmidtex" and mapinfo
    "clipmidtextures" added.

 7. Implementation of command "listmaps". It shows all available maps
    of the loaded wad(s).

 8. Implementation of the variable "log_scores". When enabled, it will
    print the intermission information to the zserv console, and if
    enabled, the general log as well.
-----------------------------------------------------------------------

10. Point 10 release (2019-12-13)
-----------------------------------------------------------------------
 1. Fixed: Turning player into spectator resets keys.

 2. Fix for Respawn where we died (sv_samespawnspot): If the player
    stucks teleport back to start.

 3. Respawning of ArtiInvulnerability and ArtiInvisibility depends
    on the dmflag DF_RESPAWN_SUPER (sv_respawnsuper) now.

 4. ACS Line_SetBlocking: BLOCKF_HITSCAN and BLOCKF_SOUND added.

 5. New ACS functions to change the behavior of Artifacts.
    The syntax of the declaration is:
    void Arti_Execute(str artifact, int script,
                      int arg1, int arg2, int arg3)
    void Arti_ExecuteAlways(str artifact, int script,
                      int arg1, int arg2, int arg3)
    void Arti_NamedExecute(str artifact, int script,
                      int arg1, int arg2, int arg3)
    void Arti_NamedExecuteAlways(str artifact, int script,
                      int arg1, int arg2, int arg3)

    When the artifact is used "script" will be executed instead of
    the hard coded action.
    Arguments for the functions are optional.

 6. Fix for demo playback: voice chat packets will not played
    during skipping.

 7. Sound option "Mute when out of focus" changed from yes/no to
    a slider. CVAR snd_muteoutoffocus changed from Bool to Float.

 8. Monsters which wake up, do melee attack or fire immediately did
    not show firing animation in online mode. Fixed.

 9. Implementation of BetaSkull and BetaSkullAttack (dehacked).
    Sprites SKUB for BetaSkull (instead of SKUL), so both
    Lost Soul monsters can be used.

10. It could happen that connecting clients timed out on the server.
    Fixed (server-side).

11. Fix for GetPlayerInput INPUT_OLDBUTTONS and MODINPUT_OLDBUTTONS.
    Value is the previous tic now.

12. "auto_altwads" updated to Freedoom 0.12.1.

13. Fix for Infinite Ammo: it's possible to shoot even if there is
    not enough ammo for the weapon.

14. Bot could stick when sv_olddropoff was active. Fixed.

15. If map00 exists and no maplist is defined the game will start 
    with map00. Designed for Deathmatch servers with scripted
    lobby map00.

16. Fix for HudMessages which overlap the statusbar.

17. Bloodsplats (blood on the wall from damaging monsters/players)
    work online now. Old behavior can be set via cl_bloodsplats 0.

18. Fix for render style Stencil for resolution 1366x768.

19. Fixed an issue that could make a bad packet cause a nameless
    player in game.
-----------------------------------------------------------------------

11. Point 11 release (2020-01-01)
-----------------------------------------------------------------------
 1. Random Pitch Variations also work in Doom now if enabled.
    Announcer and taunts will never be pitched.

 2. Fix for playback client recorded demos: own player did not 
    show Player Bobbing.

 3. Fix for Chicken speed: it was a bit too fast.

 4. Implementation of "dontchasetarget" for line special Thing_SetGoal.
    Thing added: PatrolSpecial (9047).

 5. Added a switch to enable or disable vsync: vid_vsync
    This is also accessible via Video Mode -> Adv. Options

 6. Workaround implemented for when VSync is disabled on the
    graphics driver side, specifically during the connecting state.

 7. Fix for spawning with wrong angle, when the player got killed
    in teleport freeze time.

 8. Fix for damaging sectors in online games. Sometimes damaging was
    missing or triggered multiple.

 9. Changes to sector specials:
      * hDamage_Sludge (85) added
      * sDamage_Hellslime (105) fixed
      * sDamage_SuperHellslime (116) fixed

10. Implementation of dehacked SavePercent. Percentage of damage that
    the armor absorbs set in Miscellaneous. Armors:
      * Green Armor SavePercent
      * Blue Armor SavePercent
      * Silver Armor SavePercent
      * Enchanted Armor SavePercent

11. Fixed: never decrease health/armor by picking up HealthBonus,
    Soulsphere or ArmorBonus.
-----------------------------------------------------------------------

12. Point 12 release (2020-03-09)
-----------------------------------------------------------------------
 1. Heretic powered-up hellstaff (HornRodFX2): fix for a potential
    client crash and DeathSound was missing.

 2. Fix for HudMessages when Super-Sampled Anti-Aliasing (vid_ssaa)
    is active.

 3. Implementation of DeHackEd thing properties: 'Xscale' and 'Yscale'
    both are ignored when the 'Scale' property is present. 

 4. Fixed a server-side crash in ACS MorphActor and UnMorphActor when
    puke command was used.

 5. Fix for ACS GiveInventory/GiveActorInventory in online mode:
    pack, box and hefty ammo were not sent to the client.

 6. Added the following read-only CVARs on the client:
    get_player_maxfrags, get_player_maxkills, get_player_maxdamage,
    get_player_redflag, get_player_blueflag, get_player_greenflag,
    get_player_whiteflag.
    They return the player id or displayplayer if there is no value.
    In combination with spy or spec_follow it's possible to bind a
    shortcut for spectating (e.g. bind x "spy $get_player_maxfrags").

 7. Fix for mapinfo keywords 'noinfighting', 'normalinfighting',
    'totalinfighting' and 'clipmidtextures'.

 8. Mapinfo 'keepfullinventory' added.

 9. Triggers for spectators added which change the camera.
      * spy_trig_secret:    false=disable, true=everyone
      * spy_trig_multikill: list 0-6
      * spy_trig_spree:     list 0-6
      * spy_trig_flag:      list 0-6
      * spy_trig_clear:     clears all spy_trig settings

    List 0-6: 0=disable, 1=within teams only, 2=everyone,
              3=red team only, 4=blue team only,
              5=green team only, 6=white team only

10. Implementation of DeHackEd thing property: 'Pickup sound'
    This property allows for each item's pickup sound to be modified
    individually, it accepts sound mnemonic or DeHackEd number.

11. A fix for a bug JCD reported: when Action special:'ChangeCamera'
    was executed by a player and set to an actor during a
    team based game their client would crash upon opening the automap.

12. Fix for client command 'idmypos', coordinates were not
    displayed when changing view to actor cameras.

13. Mapinfo ignores episode and skill definitions now ('episode',
    'clearepisodes', 'skill', 'clearskills').
    Ignored map keywords: 'bordertexture', 'strictmonsteractivation',
    'laxmonsteractivation', 'missileshootersactivateimpactlines',
    'missilesactivateimpactlines', 'monsterfallingdamage',
    'teamdamage', 'allowrespawn', 'teamplayoff', 'teamplayon',
    'noinventorybar', 'infiniteflightpowerup', 'f1',
    'checkswitchrange', 'nocheckswitchrange', 'translator',
    'unfreezesingleplayerconversations'.

14. log_timestamps and con_timestamps clients cvars have been added,
    they will enable timestamps in both the log (when enabled) and
    console respectively.

15. Console command 'give all' now also gives you Artifacts and
    Puzzle items when the corresponding inventory graphics are 
    present.

16. DeHackEd: "Ammo type ZD" has been added in order to get around
    a legacy zdoom 1.23 holdover with "Ammo type" value of 5 being
    hard-coded for infinite ammo. Infinite ammo in "Ammo type ZD" is
    now a value of -1 and below, while 0 and above are for the
    standard weapons. This ensures legacy behaviour is preserved
    when it comes to "Ammo type". The new "Ammo type ZD" ensures
    that all of the ammo types are accessible.

17. The 'idmypos' display will no longer overlap with the 'netstats'
    or other items.

18. Players and voodoo dolls did not trigger line specials when they
    spawned and their center was exactly on a line. Fixed.

19. Implementation of DeHackEd thing property: 'Camera height',
    This property allows for each actor to have it's own camera 
    height, it accepts both whole and decimal numbers.

20. In Dehacked SNDINFO names can be used for 'Scratch', 'PlaySound',
    'PlayWeaponSound', 'CPA_CustomMissile', 'CPW_CustomMissile',
    'CPA_BulletAttack', 'CPW_BulletAttack', 'CPA_CustomBulletAttack'
    and 'CPW_CustomBulletAttack' by using keyword 'Sound name ZD'.

21. Added support for the following string properties to the
    GetActorProperty ACS function:

      * APROP_SeeSound
      * APROP_AttackSound
      * APROP_PainSound
      * APROP_DeathSound
      * APROP_ActiveSound

    NOTE: The returned string values will only have a lifetime of 1
          tick for now.

22. Added the following ZDoom ACS functions returning strings:

      * GetActorClass
      * GetActorFloorTexture
      * GetActorFloorTerrain
      * GetCVarString
      * StrLeft
      * StrMid
      * StrRight
      * GetWeapon

    NOTE: The returned string values will only have a lifetime of 1
          tick for now.

23. Added the GetArmorInfo ZDoom ACS function. Only the following info
    types are supported at the moment:

      * ARMORINFO_CLASSNAME
      * ARMORINFO_SAVEAMOUNT
      * ARMORINFO_SAVEPERCENT

    NOTE: The string value returned for ARMORINFO_CLASSNAME will only
          have a lifetime of 1 tick for now.

24. Extended the puke and pukename console commands to accept various
    input format specifiers (these correlate to the ACS Print function
    cast types). The full synopsis of the two commands is now as
    follows:

      puke <number> [[?:]val1] [[?:]val2] [[?:]val3]
      pukename <name> [always] [[?:]val1] [[?:]val2] [[?:]val3]

    Where ? can be replaced by one of the following letters which will
    determine how the value will be parsed (unless otherwise specified,
    the script will receive the input value converted to an integer):

      * b: binary number
      * c: character
      * d: decimal number
      * f: real number
             (the script will receive a fixed-point number)
      * i: decimal number
      * l: key from the LANGUAGE lump
             (the script will receive the looked up string)
      * n: PRINTNAME_* constant
             (the script will receive the respective fetched string)
      * s: string
             (the script will receive the string as is)
      * x: hexadecimal number

    If no format specifier is present in front of a value, the commands
    will behave as they did until now, and the value will be parsed as
    a decimal number and the script will receive it as an integer.

    CVAR substitution is supported when using a format specifier; i.e.
    the following will work:

      pukename script_name s:$cvar_name

    For the purpose of quoting, the whole argument, including the
    format specifier, needs to be inside the quotes given that format
    specifiers are an addition specific to the puke commands and that
    standard command line parsing happens before the format specifier
    parsing; i.e. the following WILL work:

      pukename script_name "s:String with spaces."

    The following WILL NOT work:

      pukename script_name s:"String with spaces."

    NOTE: The strings received by the scripts will only have a lifetime
          of 1 tick for now.

25. Added missing Hexen skill names to the PCD_PRINTNAME ACS opcode
    (the n:PRINTNAME_SKILL argument of the ACS Print function).

26. DeHackEd: Powered weapon frames that are triggered by the
    "Tome of Power" can now be altered, added and modified through
    Dehacked for every weapon by adding the following entries within a 
    weapon block; 'Powered select frame ZD', 
    'Powered deselect frame ZD', 'Powered bobbing frame ZD',
    'Powered shooting frame ZD' and 'Powered firing frame ZD'.
-----------------------------------------------------------------------

13. Point 13 release (2020-05-25)
-----------------------------------------------------------------------
 1. DeHackEd: implementation of LineEffect.

 2. Fix for 'momentum preservation' introduced in point 12 release.

 3. When sv_oldwepsound is active pickup sound will also be played for
    spectators and during demo playback.

 4. MBF DeHackEd flag 'TOUCHY' added.

 5. Fix for a crash when Monster Spawner and Monster Target have the
    same position.

 6. Fixed a crash when ACS SetActorProperty Mass was set to 0,
    because is not a valid value. It will be set to 1 (lowest
    positive valid value).

 7. Duel and 1-on-1: vote delay when spectators are around is shortened
    to 5 seconds now.

 8. Spectating in uncapped mode looks smoother now.

 9. Arch-viles were not self-harming. Fixed.

10. Fix for join limit message in Survival when a new map starts.

11. Fix for insuring overlapping HudMessages are properly cleared
    on the statusbar.

12. Correction for damage from RadiusAttack. It was off by 1.

13. No kickback when Scripted Marine attacks with chainsaw and forward
    momentum for chainsaw attack added.

14. Fix for using inventory during intermission or as spectator.

15. The oldschool blast damage while sv_oldblast is enabled is no
    longer affected by sv_oldwallrun.

16. Keywords/functions for ANIMDEFS added: 'range', 'oscillate' and
    'random'. 'pic' accepts names (and not only numbers) now.
    Standalone 'off' is supported now.

17. Obsolete protection for no free spawnspot in the first 7 seconds
    in Coop/Survival removed.

18. Sound Sequence was cut or delay was running to fast in higher
    rates than capped framerate. Fixed.

19. Additional option 'Stretched' for 'Stretch status bar'.

20. Accounted for a case that would occur after a map change/reset
    that would result in a player occupying ID 0 being disconnected
    after another player joins.
-----------------------------------------------------------------------

14. Point 14 release (2020-09-02)
-----------------------------------------------------------------------
 1. When there is a connection problem for the client, message
    'Waiting for server...' is shown earlier.

 2. Fix for non-moving ghost projectiles for connecting clients
    related to Dehacked NOSPEEDCHECK.

 3. Fixed a crash when Minotaur or Serpent are friendly.

 4. Implementation of DeHackEd weapon property 'Weaponslot ZD', 
    this property allows for each weapon to have a different slot
    assigned. Valid values are: 0 to 9.

    *
    *** This also requires the 'Weaponpriority ZD' property. ***
    *
    *** 'Weaponpriority ZD' must be placed before 'Weaponslot ZD' ***
    *
    *** SEE BELOW ***
    *

 5. Implementation of DeHackEd weapon property 'Weaponpriority ZD', 
    this property allows for each weapon to have its own priority
    within a weapon slot. E.g: The weapon with the highest priority 
    on the selected weapon slot will be equipped first.
    Each weapon on the same slot MUST have its own unique priority 
    number in order to not be overwritten. Valid values are: 0 to 7

 6. Server-side mute functionality has been added. This will block
    both textual chat and voice communication. New commands:

     * ADDMUTE #id/$playername duration reason
       ** The duration is specified in minutes.
     * KILLMUTE playername
       ** No prefix is required.
     * MUTELIST
     * CLEARMUTES

 7. New ACS function to change the camera height for a specific
    actor based on a given thing ID.
    The syntax of the declaration is:
    void ZD_SetActorCameraHeight(tid, height); 
    whereas height is a fixed point value.

 8. Two new client-side CVARs have been added for the chatlog:

     * chatlog_showmsgtype - The message type will be displayed:
                             N - Normal
                             T - Team
                             P - Private
                             A - Admin
     * chatlog_timestamps - Timestamps will be displayed.

 9. Fix for still standing players to avoid wrong client z after
    getting teleported with LS_Thing_Move.

10. Improvements for ACS LineAttack: puffs are shown online and
    pufftype can be specified now.

11. Netstats added to Display Options as "Network Statistics" and
    enlarged meanings:
     * 0: None
     * 1: Data
     * 2: Ping+Data
     * 3: Graph+Ping
     * 4: All

12. Demo playback speed added, so a demo can be played in a faster or
    slower speed. Related CVAR 'demo_speed' and commands
    'demo_speedup', 'demo_speeddown', 'demo_speedreset'.
    To show the playback speed enable 'vid_fps'.

13. Spectator view in Duel keeps spectating the same player when
    it switches from warm-up to game.

14. Added a timer_format client cvar. This alters the display of the
    timeleft output on the HUD or scoreboard. Values:
     * 0 = Mins:Secs
     * 1 = Hours:Mins:Secs

15. Added a new boolean acs_always_preserve_globals CVAR. When this
    CVAR is set to 'true', values in ACS global variables and arrays
    will always be preserved; even on manual map changes (for example
    when a console command or a vote is used to change the map).

    NOTE: To keep the behaviour of client-side scripts consistent with
          older 1.10 clients, in network games, all 1.10 clients will
          behave as if their acs_always_preserve_globals was set to
          'false'; no matter the server setting or the actual CVAR
          value on the client.

16. Fix to avoid the ability to press "use" after death in online mode.

17. Adjustments have been made to the unlagged mechanism in order to
    improve general precision.

18. In Lobby mode there will be no announcements while entering the
    Lobby map (map00).

19. CTF flags on the HUD are scaled to screen height now.

20. CVar 'survival_timed_spec_reset' value 2 (6 min) has been added.
    Health will be set to default by Survival Inventory Reset now.
    Warning for Inventory Reset added. It will be shown 60 and 30 sec.
    before the reset happens.

21. Added the possibility to change blitmode in advanced video options.
    That can fix a problem with NVIDIA graphics and very low fps.
    A warning must be confirmed to continue, because it can cause
    ZDaemon stop working (e.g. ATI graphics).
    If a fatal error occurs which is related to blitmode, it will
    be reset to default.

22. 'vid_windowx' and 'vid_windowy' are no longer read-only.
    The position of the window can be set with these CVARs.
    Can be used to set the position of ZDaemon in windowed mode
    with a key bind or alias.
    Placing the window left or top of the primary screen is possible
    now. Maximized window will be saved now.

23. An ancient Instagib bug that allowed you to kill your team mates in
    a team mode (deathmatch-type) has now been corrected. It'll now
    obey the limitations regarding team damage.

    *** NOTE: Since the Instagib railgun is an instakill weapon, any
    teamdamage value above 0 will result in the death of the
    friendly target. ***

24. A "spectate" command has now been added with strict limitations.

25. Improvements have been made to the MapInfo CVAR Overrides to ensure
    that they're correctly reverted (and set) during a map change
    and/or map reset.
-----------------------------------------------------------------------

15. Point 15 release (2021-01-01)
-----------------------------------------------------------------------
 1. If an invalid skin/sprite frame is detected it will provide a bit 
    more detail. It is also a bit more forgiving as opposed to the 
    previous fatal error.

 2. ACS function (line special) 'Line_SetTextureOffset' added.
    Flags 'TEXFLAG_TOP', 'TEXFLAG_MIDDLE' and 'TEXFLAG_BOTTOM' affect
    the offset of the whole texture.

 3. For long maplists: output of command 'maplist' from the client
    in online mode is splitted now. To continue call 'maplist' again.

 4. Parameter '-noidle' is standard now and no longer supported.
    The priority when out of focus will no longer be changed.
    In rare case it caused self-closing clients or network timeouts
    while the client was out of focus.
    For old behaviour '-useidle' was added.

 5. DeHackEd keywords 'TRANSLUC25', 'TRANSLUC50', 'TRANSLUC75' and
    'DONTDRAW' work now as intended.
    'TRANSLUCENT' is Boom default 66% now.

 6. Fix for colour index 0 on the statusbar.

 7. Overflow protection for using too many local map variables in ACS.

 8. Preview of player/skins in 'Player Setup' and 'Team/Enemy Color'
    can be rotated now and firing animation is shown.     

 9. Implemented 3 new ACS functions regarding ScriptedMarines
    and the usage of player skins on the referenced actors:
    a. A function that allows for player skins to be set
        to ScriptedMarines. The syntax of the declaration is:
        void ZD_SetMarineSkin(tid, name); 
        'name' is the name declared in the S_SKIN lump.

    b. A function that'll return the skin name
        for the requested skin number. 
        The syntax of the declaration is:
        str ZD_GetSkinName(number); 
        'number' is the value you see when using client command:
        'skins'.

    c. A function that'll provide you with the top index
        of the installed skins.
        The syntax of the declaration is:
        int ZD_GetSkinTopIndex();

10. Fixed a case whereas bullet puffs on certain Heretic weapons
    were doubled.

11. Fix for TeleportFog height in Heretic/Hexen when a player spawns.

12. Fix for colours in Netstats graph in Heretic/Hexen.

13. Fix for sky hack e.g. ksutra.wad map05.

14. Background image added for Heretic/Hexen automap (when "standard
    map colors" is on).

15. New setting 'Flat / border scale' in 'Display Options' and related
    CVar 'vid_flatscale' added.

16. The Home and End keys can now be used in the Menu.

17. Transmission tweaks for online mode.

18. Setting minplayers to 0 in online mode will now remove all active
    bots. (This won't work if the -nbots parameter is in-use)

19. Setting a latched CVAR will now correctly apply the latest change
    on map change / reset.

20. Cosmetic detail. If the gametype is adjusted, the face background
    colour for the player will now be correct. (When switching from a
    team to non-team based mode, and vice versa)

21. Client crash fix for missing sprites (e.g. skins or
    additional monsters).
-----------------------------------------------------------------------

16. Point 16 release (2021-03-31)
-----------------------------------------------------------------------

 1. Codepointer mismatch notices will now provide more detail:
    a. State Number
    b. Action Name
    c. Actor Name

    The mismatch notices have also been limited to appear a maximum
    of 5 times per map change/reset. This reduces the spammage that
    could otherwise occur.

 2. If there are any missing skin and/or sprite frames, it is now
    possible to get additional information about these cases with the
    following developer cvar values:

    a. developer 1: missing skin frames
    b. developer 2: missing sprite and skin frames

    *** NOTE: When it comes to missing sprite frames, this could be
              down to frames being re-used elsewhere as a result of
              dehacked modifications, so those notices should only
              be used as a gauge rather than an indication of an
              actual problem.

 3. Implementation of menu 'Weapon Slots' as sub menu of 'Customize
    Controls' 'Weapons'.

 4. Fix for a crash for 0 byte music lumps.

 5. New CVar 'demo_goto' to skip demos to a certain time.
    Usage: demo_goto <minutes> [seconds [tics]]

 6. Chat block functions can be used in demo playback now. Useful for
    recording videos from demo playback.

 7. Player angle (for others, not own) can be wrong after spawning
    for a short time. Fixed.

 8. Fix for Floor_RaiseAndCrush. 8 from the lowest ceiling's height
    was missing.

 9. Fix for force spawn where the client's view could show position 0/0
    during screen wipe (e.g. map_reset in Deathmatch, Warmup to Game
    in Duel).

10. Team radar can be set to "Player Color" now. Survival/Coop only.

11. Sitrep can show a square with the player color now (like the
    scoreboard) when a "+Col" setting is used. Non-teamgames only.

12. New ACS function added: ZD_GetGameInfo(int info).
    Depending on 'info' it returns:
     0 ZD_GAMEINFO_SURVIVALRESET All players failed in Survival.
     1 ZD_GAMEINFO_IN_OVERTIME   Game is in overtime.
     2 ZD_GAMEINFO_IN_WARMUP     Warmup in Duel is active. Server only.
     3 ZD_GAMEINFO_IN_LOBBY      Game is in map00 and Lobby is active.
                                 Server only.

13. New ACS function added regarding ScriptedMarines:
    The function will return the skin name for the provided TID.
    The syntax of the declaration is:
        str ZD_GetMarineSkin(tid); 
        It will return the name as declared in the S_SKIN lump.

14. Weapon flag 'WIF_NOAUTOFIRE' should now work as intended.

15. Implementation of DeHackEd extension 'Flags ZD' for the
    'Weapon' (PatchWeapon) block. Allows for weapon flags to be
    Added and Removed. The mnemonics are (for now):

    "NOAUTOFIRE", - weapon does not autofire.
    "READYSNDHALF", - ready sound is played with 50% probability.
    "DONTBOB", - no weapon bobbing.
    "AXEBLOOD", - (Hexen) axe blood on impact.
    "FIREDAMAGE", - fire damage on impact.
    "BLOODSPLATTER" - spawns blood splatter on impact.
    "NOALERT" - weapon does not alert monsters.
    "EXTREMEDEATH" - weapon always causes an extreme death.

    Just like "Bits" on the 'Thing' block you can
    assign multiple flags to the weapon e.g:
    'DONTBOB + BLOODSPLATTER' Using 0 on the same line will
    erase everything that comes before it.

16. Fix for player collision when OS wallrunning is enabled.

17. The position of the Client Timer can be set now by using
    'cl_timeleft_x' and 'cl_timeleft_y'. A value of 0 means the
    position will be done automatically.
-----------------------------------------------------------------------

17. Point 17 release (2021-04-12)
-----------------------------------------------------------------------

 1. Support added for maps with NODES in compressed and 
    uncompressed ZDBSP format.

 2. Characters of classic fonts increased, so e.g. all Cyrillic letters
    can be used now.

 3. Markers for demo playback added. The markers can be set while a
    demo is being recorded and get stored in the .zdl demo playlist
    file. If you edit a .zdl manually make sure the entries are
    separated with tab.
    'demo_goto #marker' can be used to skip demo playback to a marker.

    New CVars and CCMDs:
      * demo_addmarker
      * demo_undomarker
      * demo_clearmarkers
      * demo_tonextmarker
      * demo_toprevmarker

    All demo related key bindings can be found in 'Demo Settings Menu'.

 4. Stalagmite thing (5050) added.

 5. Weapon flag 'WIF_NOAUTOFIRE' and Dehacked 'NOAUTOFIRE' reverted
    for now to avoid dropshots.
-----------------------------------------------------------------------

18. Point 18 release (2021-05-12)
-----------------------------------------------------------------------

 1. Fixed an unusual auto-join case that would result in players on
    non-playing teams being joined to the game after a map vote/reset.

 2. Fixed a condition with the "Spawn where died" dmflag that would
    result in a player being able to pickup an item before spawning
    had completed.

 3. Uncapped interpolation added for 'AimingCamera', 'SecurityCamera'
    and 'MovingCamera'.

 4. The Wraithverge, Quietus and Bloodscourge weapons
    now have the 'WIF_EXTREME_DEATH' flag set by default.
    An internal exception always caused extreme death to occur
    when the weapons in question were used, regardless of
    whether the flag was set or not.

 5. Own settings added for score background in intermission.

 6. Doom's Pre-Beta BFG added as Dehacked weapon action 'FireOldBFG'.
    Projectiles: 'PlasmaBall1' and 'PlasmaBall2'.
    Language obituary keyword: 'OB_MPBFG_MBF'.
    Related Dehacked keyword for bouncing type: 'ZD_OLDBFGBOUNCE'.

 7. Doom Beta Evil Sceptre ('EvilSceptre', 'BON3A0', 'BETA_BONUS3')
    and Unholy Bible ('UnholyBible', 'BON4A0', 'BETA_BONUS4') added.

 8. Fixed a crash that would occur if you were killed by an orphaned
    projectile while in a weaponless state.

 9. The Freeview Player is now capable of full movement while a demo
    is in a paused state.

10. Previously when using A_VileChase on an actor it would always
    go into the hardcoded Archvile frames when an actor was being
    resurrected. It is now possible to change those frames by
    rerouting them through using: 'Heal Frame ZD' on the thingblock.

11. You can now also set a custom sound that will play during the
    resurrection of an actor. For that you will need to use
    'Heal Sound ZD' on the thingblock. It accepts both sound
    mnemonic or DeHackEd number.

12. 'spec_warp' allows '$playername' and '#player_id' now.

13. Several fixes for uncapped interpolation in online mode.
    "Jackhammer" effect of elevators and floor juddering is gone now.

14. Callvote cancel kicked the players out of the server. Fixed.
-----------------------------------------------------------------------

19. Point 19 release (2021-05-17)
-----------------------------------------------------------------------

 1. Transfer Sky Texture To Tagged Sector (272) now properly draws the
    sky.

 2. The SpawnID has now been removed for PlasmaBall1 and
    PlasmaBall2.

 *** HOTFIX (2021-06-09) ***

 3. Fix for moving floors/ceilings with slopes in online mode.

 4. All screen corners can be used now to show vid_fps by using
    value 1 to 4.

 5. Fix for demo playback rewinding when "client reconnects" is
    recorded in the demo.

 6. Fixed a bug that caused overall teamscores to reset when a player
    disconnected.

 7. Fix to prevent mouse input outside of ZDaemon window during
    gameplay.

 8. Fixed a problem that would allow muted players to call/respond to
    votes.
-----------------------------------------------------------------------

20. Point 20 release (2021-12-31)
-----------------------------------------------------------------------

 1. Fix for Silent BFG: item pickup does not make the weapon silent
    anymore. So it's the same behaviour as vanilla Doom.

 2. Fixed an issue with the scoreboard information in Coop/Survival
    that could sometimes result in the provided global details not
    being up-to-date.

 3. Bots did not change their weapon in Single Player. Fixed.

 4. In Doom when HUD is shown without statusbar, greater images than
    classic Health, Armor or Ammo will be scaled down now.
    This avoids overlapping images.

 5. Widescreen support for virtual 320x200 resolution added.

 6. Fixed a small heap memory leak at map node loading time, it 
    should diminish the chance of ZDaemon dying out with a ZD_Malloc.

 7. Line special 'Teleport_NewMap' usage: if a nextmap entry is defined
    in the mapinfo and maplist for the map in question, when exiting as
    a result of triggering the special the server will switch to that
    specific map; if the map isn't present on the maplist a warning
    will be displayed.

 8. Fixed the bad Y-offset for scaled textures. This bug had been
    around for quite a while and some of the texturing in 
    ZDaemon-specific wadfiles might now be botched because it required
    misalignment on the Y-axis to actually align scaled textures 
    properly. ZDaemon specific wadfiles that make use Y-scaled 
    textures as middle textures on two-sided lines or top textures on 
    one-sided lines (e.g. the FCT shop) will need to be patched.

 9. DDOM and KotH compass on the HUD are scaled to screen height now.

10. Fix for Duel: warmup timeout will not end the map while in
    countdown for game start.

11. Added a new dmflag (DF3_NOSPY = 16) and an associated CVAR
    (sv_nospy). It blocks in all gamemodes spectating (for players),
    team radar and other players shown on the automap.

12. Fix for SpawnProjectile with gravity mode 2.

13. Fix for a crash if the number of patches exceeds the number of
    textures within the TEXTURE2 lump.
    A warning will be shown in console in this case.

14. CVAR 'spy_trig_join' added. When activated it changes the view of
    spectators when a player joins the game. Settings can be:
      * list 0-6 like other spy triggers (see above).
      * $nickname.
      * #player_id (will automatically changed to $nickname).

15. Fix for rounding problems with Armor.

16. Implementation of multi-threaded rendering. It can utilize more
    CPU cores for rendering, so it will increase the FPS when using
    SSAA. Controled by the "vid_render_threads" CVAR; can range from
    1 up to 16: defaults to 8.

17. Fix for the incorrect incrementing and decrementing of the
    monster counter.

18. BOOM's generalized line types that allow 'monster use': now they
    can be activated by anything.

19. Fix for ACS SetPlayerProperty PROP_TOTALLYFROZEN: weapon switching
    while being frozen will no more change the weapon when getting
    unfrozen.

20. RGB adjustment for balancing screens or people with a reduced
    colour perception. Only two colours can be adjusted to a
    positive value to avoid brightness advantage.

21. Miscellaneous Single Player fixes:
      a) In CTF mode the flag will be dropped when spectate is invoked.
      b) Switching teams in the console will no longer result in an
         incorrectly coloured playerskin in team modes.
      c) The player skin and HUD colour are now properly set when
         switching between team/non-team gametypes.
      d) In team modes the correct colour override - if enabled - will
         be set on bots that are spawned.
      e) Non-playable teams are now properly accounted for.

22. Interpolation for scrolling walls, floors and ceilings added.

23. Support for "unusual" gettable dehacked things has been added.
    
    The "unusual" things are defined as any non-inventory actor with an
    "Initial frame" set to a state from another actor that "is" within
    the Inventory hierarchy; this would normally result in the message
    "Unknown gettable thing" and the unsetting of the "Special" flag.
    
    Two DMFLAGS3 have been added:
      1) "Unusual Pickups (DeH)" / sv_unusualgettable
         DF3_UNUSUAL_GETTABLE (32)
      2) "Mismatch Correction (DeH)" / sv_mismatchgettable
         DF3_MISMATCH_GETTABLE (64)
    
    ** "Mismatch Correction (DeH)" relies on "Unusual Pickups (DeH)".
    
    The "Unusual Pickups (DeH)" flag will allow for the unusual items
    to be picked up.
    
    The "Mismatch Correction (DeH)" flag will properly account for the
    odd "vanilla" case where a given sprite that is set on a displayed
    frame will determine the actor action that will then be executed.
    
    Certain wads such as REKKR for instance require both of the above
    to be enabled in order for correct functionality to be achieved.
    
    With (2) this ONLY applies to Doom sprites and the railgun sprite.
    
    Both of these new DMFLAGS3 will only work on a Doom-type game.

24. Pressing F1 in a sub menu will show the CVAR/command name of the
    selected entry.

25. Added a new option (vid_disk) to 'video options' that will enable 
    the floppy disk graphic (STDISK) to display whenever a read or 
    write event occurs. This mimics the old-school behaviour for
    when disk activity was detected.

26. If skipping in demo playback takes more than a second, the view
    will be updated to show the demo player is still alive.

27. Midi playback will now ignore "Control Change, 121-Reset All
    Controller". This avoids maximum midi volume changed by the midi
    lump. E.g. drn_mus.wad (Down the Drain) map23.

 *** HOTFIX (2022-02-01) ***

28. Fixed an issue introduced during 1.10.05 that resulted in an
    erroneous redscreen being displayed in certain pre-1.10
    rocket jump demos. (Credit to TimeOfDeath for stumbling upon and
    identifying the "when")

29. Resolution depending limit for vid_ssaa added to avoid a crash.
-----------------------------------------------------------------------

21. Point 21 release (2022-07-11)
-----------------------------------------------------------------------

 1. Customize Controls: spy commands, "callvote game", "toggle
    messages" and "menu settings" added.
    Display Options: "show messages" added.

 2. Allowing automap cheats (am_cheat, iddt, ravmap, mapsco) for
    demo playback.

 3. Borderless fullscreen (windowed) for primary monitor added.
    It can be enabled in Video Modes or via ZLauncher.

 4. Fix for a visual problem on the client, where a teleported monster
    would appear to be sticking in the floor.

 5. Fix a bug where the TakeWeapon() ACS function would in some cases
    cause the player's weapon to be switched to a different weapon than
    expected (mostly to the pistol).

 6. If a player changes to spectator, the camera will no longer switch
    to own view, so spectating will not be interrupted anymore.

 7. Fix for a crash if monster spawner target (destination) was removed
    while the cube was flying.

 8. Fix for pitch while spectating Heretic extreme death (PlayerChunk).

 9. Fix for sticking monsters with NOGRAVITY flag on lifts.

10. Scroll_Texture_Model with id 0 will affect own line now
    (e.g. ndcp2.wad MAP02).

11. Fix for Boom generalized linedefs damage transfer
    (e.g. ngmvmt1.wad MAP06).

12. Fix for TeleportFog height in Heretic/Hexen when a Thing spawns
    or get moved.

13. A new "playerusable_zd" attribute in the skin definition lump;
    it will determine whether a given skin can be selected by players
    or whether it is explicitly reserved for use on the scriptedmarine
	actors by way of the GetMarineSkin/SetMarineSkin functions.

    *** The attribute will default to 1 if not defined. ***

14. HTTPS support in GetWAD.
-----------------------------------------------------------------------

22. Point 22 release (2022-10-03)
-----------------------------------------------------------------------

 1. Fix for ZDaemon "ghost entries" in alt-tab menu. It happened in
    Windows 11 when the client was closed.

 2. CVar Overrides on other maps can now be touched while current map
    overrides are active. Adding overrides to a current map where none
    are present will result in a warning being displayed that a map
    reset is needed.

 3. Adjusted the threshold of the fake player protection check to
    lessen the chances of legitimate players accidentally being caught
    out (ie, the "DOS THIS!" temporary ban).

 4. Added in the sv_fakeplayerprotection server variable; it is enabled
    by default. When disabled the fake player protection check isn't in
    effect. *** ONLY DISABLE IF YOU'RE EXPECTING A LARGE NUMBER OF
    CONNECTIONS FROM A SINGLE IP. OTHERWISE IT IS STRONGLY RECOMMENDED
    TO LEAVE THIS VARIABLE ENABLED. ***

 5. Added in the cl_unlag_lowping client-side opt-out cvar. When this
    is enabled unlagged calculations won't apply to your targets while
    you are equal to or below the reference ping threshold. This has
    also been added to the 'Player Setup' area for easy adjustment.

    Additionally: If you type 'playerinfo N' (where N is the player
    number) while in c/s mode or demo playback, it will display said
    player's cl_unlag_lowping choice.

 6. Scaled actors now draw correctly in sectors that use fake floors
    (transferred heights) commonly used for "deep water".

 7. Added in the 'Per ammo ZD' and 'Big ammo ZD' Ammo block dehacked
    properties. The 'Per ammo ZD' property takes priority over the
    older 'Per ammo' property which only worked on the Doom ammo types.

    - 'Per ammo ZD': this allows you to adjust how much ammo is granted
                     upon picking up a weapon or small ammo item. This
                     property can be used for all Doom, Heretic and
                     Hexen ammo types.

    NOTE: Unlike the original 'Per ammo' property, using 'Per ammo ZD'
          alone won't have any influence on the big ammo packs.

    - 'Big ammo ZD': this allows you to adjust how much ammo is granted
                     upon picking up the big ammo packs (Boxes, Hefty
                     and Mana). This property can be used for all Doom,
                     Heretic and Hexen ammo types. (This property is
                     only usable in-conjunction with 'Per ammo ZD'; it
                     cannot be used by itself or with the original
                     'Per ammo' property)

    ADDITIONAL: The original 'Per ammo' property is still fully
                functional, however it is only usable on Doom-specific
                ammo types and it will apply a base multiplication
                factor of 5 to account for the big ammo packs (n*5).

 8. As a result of internal changes, the 'acs_always_preserve_globals'
    cvar is now fully enabled in C/S mode.

 9. Fix for scrolling direction and mirrored sky (MBF/Boom line
    function 254, 271, 272).
    Hint: Scrolling up/down is not implemented yet.

10. Fix for fast moving voodoo dolls skipping linedefs.

 *** 2022-12-02 ***

11. Autocompletion for $playername added in online mode and demo
    playback (e.g. spy $pla <TAB>). Last entered characters will be
    completed now (e.g. bind x menu_k <TAB>).

12. Fix for 8 character long map names.

13. PatchInfo notices now include the rule number; this is to assist
    with debugging.

14. Fix for Doom's BlurSphere. Now it has vanilla Doom behaviour for
    waking up monsters and not Heretic behaviour.

 *** 2022-12-19 ***

15. Removed a bit of ambiguity concerning the functionality of voice
    chat in private non-teamplay deathmatch games.
    Added "Voice Chat" to menu "Sound Options".

16. Fix for a problem with "3D Sound" where some sounds were played at
    full volume.

17. Tweaks to the handling of latched cvars:
    * Pending values will now be displayed when viewing the given cvar.
    * If you set a latched value back to its current value, it will
      cancel out any pending changes to the given cvar.
    * A new "list_latched" console command will list any pending cvar
      changes. *** NOTE: Only usable in SP mode on the client and C/S
      mode on the ZServ or via RCON. ***

18. Protection for Mapinfo for maximum length of map names and
    erroneous end of lines.

 *** 2022-12-28 ***

19. Removed a recently added constraint on the toggle command that
    turned out to be problematic.

20. "Select Audio Device" added in "Sound Options". Now it's possible
    to select the audio device for voice chat.

 *** 2023-01-08 ***

21. A new server variable has been added 'log_verbcon'; when enabled
    it will display prefixed 'CT:' entries in the general log related
    to any anomalous traffic directed at the zserv - for use with
    services such as fail2ban for general filtering or detection
    purposes. *** WARNING: THIS CAN RESULT IN LARGE LOG FILES IF
    THERE'S A TON OF ANOMALOUS TRAFFIC. ***
-----------------------------------------------------------------------

23. Point 23 release (2023-08-30)
-----------------------------------------------------------------------

 1. "Crosshair Colors" added to "Display Options" by using typical
    bright values.

 2. Corrected a condition that would prevent server-side demos from
    being recorded.

 3. Improvement for server's outgoing packets in case of high traffic.

 4. The attack key will no longer trigger intermission skipping in
    online mode.

 5. Added support for Ultrawide (21:9) and Superwide (32:9) display
    modes. There is a new dmflag (DF3_XWIDESCREEN = 0x00000080)
    which combines with an older dmflag (DF2_FULLSCREEN = 0x00040000)
    to select one of the 4 display modes. The combinations of the 2
    dmflags are:
       DF2_FULLSCREEN=0 & DF3_XWIDESCREEN=0 ->  Widescreen (16:9)
       DF2_FULLSCREEN=1 & DF3_XWIDESCREEN=0 ->  Fullscreen (4:3)
       DF2_FULLSCREEN=0 & DF3_XWIDESCREEN=1 ->  Superwide (32:9)
       DF2_FULLSCREEN=1 & DF3_XWIDESCREEN=1 ->  Ultrawide (21:9)
    There is also a server CVAR (sv_aspectratio) for your convenience.
    It can take one of 4 values:
       1 = Widescreen (16:9)
       2 = Fullscreen (4:3)
       3 = Ultrawide (21:9)
       4 = Superwide (32:9)
    That CVAR is automatically synced with the dmflags, so you can
    use either method (dmflags or sv_aspectratio) to update the
    display mode ONLY WHILE the server or client IS RUNNING. You
    CANNOT use "+sv_aspectratio N" when STARTING the client (or
    server): it will be ignored and it will take the value implied
    by the dmflags.

 6. Fix for missing skin scaling in online games and demo playback.

 7. Classless Inter-Domain Routing (CIDR) ban support has now been
    added. (Maximum block size is /16)

    Examples:
     - 192.168.1.157/32 (singular address, 192.168.1.150)
     - 192.168.1.156/31 (2-ip block from 192.168.1.156-157)
     - 192.168.1.144/28 (16-ip block from 192.168.1.144-159)
     - 192.168.1.0/24   (256-ip block from 192.168.1.0-255)
     - 192.168.0.0/16   (65536-ip block from 192.168.0.0-255.255)

    Special case examples:
     - 192.168.1.157/32 <-> 192.168.1.157 (the /32 is redundant)
     - 192.168.1.0/24 <-> 192.168.1.*
     - 192.168.0.0/16 <-> 192.168.*.*

    With the highlighted special cases you'll be able to add or
    remove a ban in either format.

    NOTE: If for instance you add a CIDR ban between /31 <-> /25 or
          /23 <-> /17 and the entered IP is not the first IP you'd
          get within the given block, it will tell you the first IP
          and record that accordingly. (It will properly recognise
          if you attempt to remove a given entry as long as the IP
          is within the referenced block) For example:
           - 192.168.1.157/31 -> 192.168.1.156/31
           - 192.168.1.157/28 -> 192.168.1.144/28
           - 192.168.1.157/25 -> 192.168.1.128/25
           - 192.168.1.157/17 -> 192.168.0.0/17

 8. Server variable 'ban_match_notices' has been added that will
    check for overlapping and/or redundant ban cases.
    Valid values:
     1 - A check is performed when addban is used.
     2 - A check is performed when addban is used and when lists
         are (re)loaded.

    The type of ban will also be highlighted.

 9. Client: console command history can be stored now in file
    "command.hst" and loaded when the client starts. So the last
    entered commands are available.
    The function can be enabled with CVAR "con_savehist".
    Disabling will delete the file.

10. Spectator caused telefrags in Single Player. Fixed.

11. Height transfer in uncapped mode could cause a visible "spike" when
    the sector got changed. Fixed.

12. Implementation of skipping forwards/backwards to frags in demo
    playback in Deathmatch based games. It works per player (the one
    you spectate) or for all players using Freeview Player.
    Key binds can be defined in Demo Settings Menu or
     - demo_tonextfrag: "Skip forward to frag"
     - demo_toprevfrag: "Skip backward to frag"

13. Auto-size selections for the scoreboard have been added for all
    applicable fonts.

14. New server CVAR "sv_intermission_skip" to allow or disable skipping
    intermission in online games. By default it's enabled.

15. Implementation of ACS function Floor, Round and Ceil.

16. Implemented Raw Input support for both Keyboard and Mouse.
    New or returning cvars:
     - in_keyboard
     - in_mouse
     On both cvars the values are:
      a) 0 - DirectInput (default)
      b) 1 - RawInput

    NOTE: Due to issues with RawInput functionality under WINE, only
          DirectInput will be available in that environment.

17. The original 'mouse_sensitivity' cvar has been replaced with:
     - mouse_sensitivity_x
     - mouse_sensitivity_y

    They range from 0.1 to 8.0 in 0.05 steps.

    NOTE: YOUR OLD SENSITIVITY WILL BE MIGRATED TO THE NEW CVARS.

18. Implemented an 'Advanced Input Options' area under Options for
    easier access of the more advanced but occasionally travelled
    input settings.
    Available Settings:
     - Keyboard
     - Mouse
     Both of the above will allow you to switch between Direct or
     Raw Input.

     - Prescale Mouse Movement
     The visibility of this option has returned in this area.

19. Set aside the key combination 'Ctrl Pause', when executed it will
    reinitialize the mouse and keyboard devices. It can only be used 
    while you're in "game" mode (playing).

    The purpose is to account for any external overlays that may not
    play well with DirectInput devices.

20. Fix for uncapped interpolation for scrolling textures with line
    special "Scroll Texture Model".

21. Added the read-only CVAR "get_hudsize_extend" on the client.
    It's the factor of the extension of a wider screen than 4:3.
    Useful for HudMessage with SetHudSize and printing to left or right
    side of the screen. Format: fixed-point.

22. Fixed a detail concerning the toggling of vid_vsync that would
    result in the window dimensions being reset to the height/width
    of the selected resolution.

23. Borderless fullscreen can now be used on different monitors.

24. Borderless and Native fullscreen modes will now obey the
    vid_monitor cvar if adjusted without a change or resolution.

25. Adjustments have been made concerning native fullscreen mode
    in order to better account for various issues that would prevent
    the screen from being restored upon program activation, either
    in a fullscreen or the failover windowed-mode. This should also
    help when it comes to the use of various overlays.

26. Linearisation of the midi volume added. So the ratio of the midi
    music keeps the same if Midi Volume, Master Volume, Sound
    Dampening, Mute when out of Focus, etc. changes the volume.

27. Adjustments have been made for better Windows recognition beyond
    version 8.0.

28. Handling additions have been made when it comes to maintaining
    the aspect ratio of the internal display regardless of the
    dimensions of the windowed or borderless screen. This can be
    overridden by setting vid_override_ar to 1.

29. Resolved an issue on the Windows ZServ that would otherwise cause it
    to silently terminate during certain network binding cases.

30. Resolved a crash/freeze case in Player Setup (and equivalents)
    caused by the use of scaled sprites.

31. Fix for erroneous console in background if the key for menu and
    toggle console got pressed at the same time.

32. Added the 'zoom_sensitivity_constraint' CVAR, this is due to a
    recently introduced change that adds a lower-constraint for mouse
    movement while you're using zooming to:
     a. horizontal sensitivity and turning speed
     b. vertical sensitivity and mouselook speed

    NOTE: By default this CVAR is enabled. If this CVAR is disabled
          the lower-constraints will be disabled, this introduces
          a condition whereas if your horizontal sensitivity and/or
          turning speed or vertical sensitivity and/or mouselook speed
          is too low, it may require a more vigorous movement of the
          mouse in order for that movement action to be visible on the
          screen.

 *** 2023-09-06 ***

33. 'client_ar' CVAR has been added, this will allow you to set a specific
    game display format (The game display format you set will only be used
    if it is equal to or below the maximum allowed format as dictated by
    the 'sv_aspectratio' CVAR). 'Max. Game Display Format' has been added
    under 'Display Options'.

34. The legacy CVARs 'fullscreen', 'fullscreen_bl' and 'mouse_sensitivity'
    will now have the prefix 'l_' added to them to ensure that there are no
    post-migration conflicts.

 *** 2023-11-03 ***

35. Resolved an issue with 'acs_always_preserve_globals' in C/S mode.
-----------------------------------------------------------------------

24. Point 24 release (2023-11-21)
-----------------------------------------------------------------------

 1. Fix for midi and mus to stop all notes when the music restarts.
    E.g. Doom2 map14 d_ddtbl2.

 2. Centered messages with "scale text in high res" are really in the
    middle now. Fixed.

 3. Accounted for an edge-case that would result in very subtle phantom
    movement with RAW Mouse Input while "Smooth Mouse Movement" (m_filter)
    was enabled.

 4. Fix for HudMessage when SetHudSize needs to scale down the screen.
    Characters on the right could be cut.

 5. Automap markers added for Heretic/Hexen. If AMMNUM? can't be found,
    it also looks for SMALLIN?.

 6. Line thickness for Automap added as CVAR 'am_linethickness' or 'Line
    thickness' in Display Options. Setting the value to zero will
    automatically adjust it depending on the screen resolution.

 7. Add additional episode detection for Retail Doom in order to better
    account for official and unofficial episode additions.

 8. Fix a very rare case regarding linedef hitscan interception.

 9. Joystick support extended. Function of the two joysticks can be set to
    Forward, Strafe, Yaw, Pitch and Fly.
    Settings can be found in 'Advanced Input Options'.

    NOTE: At this time only controllers which are joysticks can be used
          in this context. If a controller doesn't have access to the
          joystick functions then it'll be unusable.

 *** 2023-11-22 ***

10. New constant for GetPlayerInfo() ACS function:
    PLAYERINFO_SSDCLIENT (200): Detects if a player is the SSD client.

    NOTE: PLAYERINFO constants from 200 to below 300 are for checking
          whether a valid result also includes spectators; for now this
          only includes the new PLAYERINFO_SSDCLIENT constant.

 *** 2023-11-23 ***

11. Resolved an edge-case during legacy to unknown cvar migrations that
    would result in a client crash.

    (Thanks go to Keyboard_Doomer for helping to narrow down this case)

 *** 2023-12-05 ***

12. Fixed a potential crash case.

 *** 2024-02-21 ***

13. HudMessage with type HUDMSG_TYPEON and an empty text caused a
    client crash. Fixed.

14. Fix for respawning items after disconnecting from Online mode to
    Single Player mode.

15. Resolved a case whereas if you had a dmflag being overridden by
    both the MAPINFO and a CVAR Override, any subsequent manual changes
    to the dmflags CVAR (or any linked individual CVAR) would be negated
    on a map change/reset.

16. CVAR Overrides can now be added to a map that already has one or more
    active overrides present. (In order for those new overrides to become
    active a map change/reset is needed)

17. The 'remove_cvaroverride' command can now utilise an optional third
    parameter. It will allow you to be more specific regarding the removal
    of one or more overrides for a given map with the same CVAR name.

18. Joystick axis controls can now have general functions bound to them
    via the Customize Controls area.

    NOTE: Key binds and axis functions can be used at the same time. To
          avoid unintended behaviour it's better to just use one of them.

19. Added the 'mapskiptoidx' command in order to skip to a specific
    position on the map list.

20. Player names on the chatblock list are now stored within the main
    client game ini file under the 'TextChatBlockNames' section. This
    only applies to player names; if you're blocking 'all', 'bot' or
    'spectator' chat, that will still only apply until the client is
    closed.

21. A new 'chat_block_list' command has been introduced to list the
    currently present chatblocks.

22. For 'chat_unblock' you can now remove entries based on their index
    by using the @ prefix.