Lump reading API redesign.
Merged the client commands CLC_STARTCHAT, CLC_ENDCHAT, CLC_ENTERCONSOLE, CLC_EXITCONSOLE, CLC_ENTERMENU, and CLC_EXITMENU into one single command: CLC_SETSTATUS. Compared to the old commands, this requires sending an extra byte containing the status type and value, but this shouldn't be a problem considering how infrequent these commands are sent.
Added the member function NetCommand::addBuffer to allow data buffers to be sent with network commands.
Changed the default value of Scoreboard::fDeadTextAlpha to 1.0f.
Added the SEPARATEDEADSPECTATORS scoreboard flag in SCORINFO, which forces dead spectators to be sorted underneath live players on the scoreboard.
Added a "contentalpha" command for scoreboard blocks in SCORINFO, which controls the opacity of all the contents on the scoreboard (excluding the backgrounds).
Refresh the scoreboard first before setting up the clipping rectangle that draws the scoreboard's background.
Added a SORTWHENDISABLED column flag in SCORINFO, which ensures that the column sorts players on the scoreboard even when it's disabled but still usable.
Any static text in a DrawString margin command that begins with a '$' is now looked up in the LANGUAGE lumps.
Fixed: strings in the LANGUAGE lump not being found when used in a column's display/short name, or true/false text for bool columns.
Fixed: the scoreboard wasn't reset when the game mode was changed because of a level's campaign info.
It's no longer required for sub-columns to be aligned to the left, or have the DONTSHOWHEADER flag enabled, when they're inside a composite column.
Added support for "&&" and "||" operators for margin flow control commands.
Added checks to prevent columns from having the INTERMISSIONONLY and NOINTERMISSION flags, or the SPECTATORSONLY and NOSPECTATORS flags, enabled at the same time.
Extended a column's "cvar" property by giving the option of specifying a min and max range of values that the CVar's value must be in to keep the column active. This means that the CVARMUSTBEZERO column flag is now useless and can be removed.
Changed the display and short name of the damage column to "Points" and "Pts" respectively. This is what damage was labelled as on the old scoreboard.
Authentication errors now use all authenticated WADs instead of just PWADs, allowing for zandronum.pk3, the IWAD, and auto-loaded WADs to be displayed in the error (address 4047).
Added support for custom vote types using the new voteinfo lump
Added support for "else if" statements for margin flow control commands.
The heights of all rows on the scoreboard now increase if the contents of any row are too tall to fit. Enabling the scoreboard flag DONTSTRETCHROWHEIGHT prevents this from happening.
Update custom player values to a client every time they authenticate the level. This fixes desyncs caused by changing custom player values on the server's end while the client's authenticating the level.
Always override a texture's left and top offsets to zero when drawing it on the scoreboard. This particularly fixes the player class icons in Hexen being cut off on the scoreboard.
HudMessages that are scaled to the virtual screen now respect con_scaletext_usescreenratio.
Fixed: a player's ScoreIcon would disappear from the scoreboard if their current body derived from APlayerChunk due to A_SkullPop.
Added SPECTATORSONLY and NOENEMIES column flags in SCORINFO, meaning the contents are only drawn for true spectators and teammates respectively.
Always leave a gap above the spectator header, even when there's no active player rows.
Optimization: don't try to scale text when the virtual screen's size is the same as the native screen's.
Fixed: opening the text scaling menu sometimes changed the user's con_virtualwidth and/or con_virtualheight CVars when it shouldn't.
Fixed: ACS function "SetCustomPlayerValue" would never change the value of any custom data that used strings or textures as data types.
Fixed: new line characters in the MOTD weren't converted into their corresponding escape code.
Fixed: strings with "\c[X]x]" at the end were still being treated as a trailing color code.
Modified V_ColorizeString to strictly convert non-escaped color codes into escaped ones and nothing else. The original implementation was a copy/paste of the strbin function from ZDoom that did more than just colorize strings. This particularly fixes backslashes not being included in chat messages correctly.
Added the NOSPECTATORS flag to the "playericon" column.
Added some static casts to ensure the signedness of the operands in a few expressions are consistent.
Fixed: flags in CTF could be captured after the round was over. [auratoostronk]
It's now possible to use negative values for the "ClipRectHeight" property in SCORINFO, which means the column's clip height will be equal to the row's height minus the property's value.
Added commands to the message options menu to clear the chat prefix/suffix CVars.
Consolidated some duplicated code used to clean chat strings.
Added ACS functions that provide lump reading capabilities: "LumpOpen", "LumpReadChar", "LumpReadShort", "LumpReadInt", "LumpReadString", and "LumpSize".
Moved checks that reset world and global ACS variables (if ZACOMPAT_RESET_GLOBALVARS_ON_MAPRESET is on) into GAME_ResetScripts to reduce duplicated code.
Added a check to prevent the player's skin sprite from showing if their class's current sprite is TNT1A0 (and its original sprite is also TNT1A0).
Fixed: stealth monsters didn't reveal themselves in online games when they took damage or died (fixes 4132).
Fixed: a player's skin would get scaled incorrectly if their class's current sprite was using "####" or "----" before respawning.
Adapted PLAYER_IsUsingWeaponSkin and PLAYER_ApplySkinScaleToBody to also check if a weapon's PreferredSkin actually exists. Otherwise, Zandronum might think a player is using a weapon skin when they aren't.
Added an optional parameter to the "ignore" and "ignore_idx" CCMDs that allows servers to specify a reason for muting a client. Based on a patch by Janko Knezevic.
Fixed the message that's printed in the console when ignoring a player from showing more than one timestamp.
Slightly refactored SERVER_PrintMutedMessageToPlayer.
Clients are now informed the moment when they're (un)muted on the server. Based on a patch by Janko Knezevic.
Refactored the version string on the console to use FString and escaped color codes instead of a C-style char array.
Fixed: clients would sometimes see themselves having the lag icon over their head indefinitely after a level changed (fixes another regression caused by c770f5a41612).
A Linux server's network socket now sleeps for one tic instead of one whole second. This prevents servers commands not being sent out normally when there's at least one client connected but spectating. Based on a patch by geNia (addresses 4068).
- Fixed a clang warning that complained about undefined members in the PlayerValue::Trait template class.
Fixed a bunch of clang warnings.
Changed the value of COLUMNTYPE_UNKNOWN to -1. It's now also acceptable to use "unknown" as a name for data columns.
Check that a player's current class has a valid ScoreIcon before trying to use it inside a "PlayerIcon" column.
Renamed the "ScoreIcon" native column type to "PlayerIcon", and added the same column to the scoreboard.
Made the spectator header on the scoreboard smaller and more simple.
- Fixed: The mask didn't incorporate RGF_MISSILES, causing it to fail.
Fixed a CLIENT_PrintWarning call that had fewer arguments than '%' conversions.
Moved the "readytogoicon" and "statusicon" columns into their own composite column.
Added missing new lines at EOF in gamemode.txt and scorinfo.txt.
The sizing of a sub-column is now always used when refreshing or drawing a composite column even when there's no value to draw, unless the sub-column has the DISABLEIFEMPTY flag enabled.
Added short names to the damage and vote columns.
Tucked the "playercolor" column underneath the "player" composite column, and moved the "handicap", "botskillicon", and "artifacticon" columns out of the same composite column. Also made the handicap column not show anything for spectators.
Added a "gapbetweencolumns" for composite columns in SCORINFO, which controls how much space to leave between the sub-columns.
Added a "columnpadding" command for scoreboard blocks in SCORINFO, which adds extra padding to both sides of all columns. Particularly meant so that a column's contents don't appear on the edges of the column itself.
All bots are now marked as ready to go on the intermission screen.
Added another important entry to zandronum-history.txt.
Added an entry to zandronum-history.txt that highlights the changes made to the scoreboard code and the addition of the SCORINFO lump.
Removed a 1 pixel offset on all bot skill icon graphics.
Made some tweaks to the SCORINFO lump in zandronum.pk3.
Merged with main repo
Added a segmented version of the launcher protocol which splits responses across multiple packets (addresses 4064).
Fixed: a live player's class still changed when travelling between some levels, though not always, in cooperative.
Fixed an issue in which SQF_EXTENDED_INFO would not be sent under Linux, resulting in a malformed launcher response.
Fixed: players didn't drop important items like flags, skulls, etc. when they respawned using SetPlayerClass.
Fixed: local CVars defined in CVARINFO were never saved in the user's config file.
Moved a local variable declaration elsewhere.
Moved bot pitch reset to StopAimingAtEnemy command.
Fixed: the localhost couldn't successfully join the server through the server console window if it was forcing a connect or join password.
Fixed: clients that weren't fully connected to the server still triggered DISCONNECT scripts if they were kicked because of an error.
Fixed: the "ready to respawn in..." message could appear in singleplayer when it shouldn't (e.g. if the client was previously in an online game).
- Refactor the launcher protocol code so that each field is now implemented as its own function.
Fixed: the "ready to respawn in..." message could appear even when compat_instantrespawn was enabled in online games.
The server can now broadcast the name of the current game mode (as defined in the GAMEMODE lump) to launchers.
The output of the dumptrafficmeasure CCMD is now sorted by the bandwidth used in ascending order. This can be changed to descending order by specifying "desc" as the first parameter (addresses 4090).
Replaced the C-style array used by the internal server browser to store a server's PWADs with a TArray. This fixes the client crashing when encountering servers with more than 32 PWADs.
Fixed: the Doomsphere mugshot graphics were missing in zandronum.pk3.
Fixed: a player's flash state wasn't removed when they turned into a spectator.
Fixed: adding a CVar in a "defaultgamesettings" or "defaultlockedgamesettings" block would crash the game during startup.
Fixed: players still respawned inside sectors with extended damage types if sv_samespawnspot was enabled.
Added DPI-awareness settings to the Win32 manifest to prevent automatic upscaling of the window on high-DPI displays.
Added a check that prevents the server from executing the team CCMD.
Replaced C-style char arrays in the team CCMD's callback function with FString.
Did some refactoring in TEAM_TimeExpired and replaced C-style char arrays with FString.
Refactored TEAM_DoWinSequence and replaced C-style char arrays with FString. This also fixes an inconsistency in the fadeout times if whether or not the server prints the message.
Added the CVar "sv_distinguishteamchatlines", which distinguishes team chat messages from normal chat messages in the server console/logfile (addresses 0036).
Blacklisted the rcon, rcon_logout, and send_password CCMDs from ConsoleCommand.
Fixed: sv_markchatlines printed chat lines with two timestamps if sv_logfiletimestamp was enabled.
Fixed: when the server printed a list of flags that were changed, it didn't check if a flag CVar existed first before incrementing the number of flags changed (e.g. "dmflags2 1" doesn't enable any flags because no flag CVar occupies the first bit of dmflags2).