ETJump 2.5.0

- added silent command flag '/' to '!listflags'
  - '!help' will print a note if you have permission to execute silent comands
- fixed unintended vote logic behavior where 50/50 split votes would pass instead of fail with 'vote_percent 50'
- added 'etj_speedAlign' to control speed meter alignment
  - '0' center (default)
  - '1' left align
  - '2' right align
- fixed default scoreboard header playercount spelling when team has only one player
- added timerun status indicator to scoreboard,
- added idle indicator to scoreboard
- added 'unload' command to revert last 'load' command
  - cannot be used during timeruns
  - cannot be used to teleport to an area where you cannot use 'save'
  - only '1' unload slot, overwritten on every successful 'load' command
- replaced 'etj_weaponSound' with 'etj_weaponVolume' to allow adjusting volume of weapon sounds
- fixed timerun finish prints looping back to '00' if run takes more than 1 hour
- fixed issues/inconsistencies with portalgun pickup
  - fixed weapon switch animation occuring when pickup up portalgun
  - added missing 'Picked up a portalgun' print
  - added missing pickup sound
- reintroduced Quake 3 constantLight support
  - use 'light <value>' and 'color <R G B>' to make brush entites emit light
- added 'noise' key to 'func_button' to allow using custom sounds
  - use 'nosound' as 'noise' key to disable sound completely
- added 'spawnflags' '8' to 'func_static' to allow disabling random '500-1500ms' delay between activations
  - minimum delay between activations when using this spawnflag is '100ms'
- added 'etj_drawBanners' to allow hiding banners
- '!listmaps' now displays total number of maps on server
- fixed duplicate spam protection print with 'team' command
- added back binoculars to field ops
  - calling artillery is only possible when cheats are enabled
- added initial support for macOS (10.10 and up),
  - very untested and possibly broken - feedback appreciated
  - no M1 mac support
- added 'target_init' entity - initalizes player to a freshly spawned state
- fixed weapon swapping on timerun start not handling covert ops weapons properly
- timescale is no longer reset on demo playback when subsystems are restarted (eg. calling 'vid_restart')
- 'etj_drawOB 2' no longer shows stickies that are on the same height as you are currently
- removed sway from binoculars & added binocular-like zoom for spectators
  - cgaz and snaphud no longer draw when zooming in with binoculars or scoped weapons
- timeruns will now interrupt if client sets 'com_maxfps < 25' to prevent trigger abuse
- added CHS info '55' to display last jump speed
- added 'etj_drawJumpSpeeds' to display last 10 jump speeds
  - 'etj_drawJumpSpeeds' - toggle on/off (default '0')
  - 'etj_jumpSpeedsX/Y' - X/Y offset (default '0/0')
  - 'etj_jumpSpeedsColor' - RGBA color (default '1.0 1.0 1.0 1.0')
  - 'etj_jumpSpeedsShadow' - toggle shadow (default '1')
  - 'etj_jumpSpeedsStyle' - (bitflag) '0' = vertical, '1' = horizontal, '2' no label text, '4' reversed list (default '0')
  - 'etj_jumpSpeedsShowDiff' - color jumps speeds based on if it was faster/slower than previous jump (default '0')
  - 'etj_jumpSpeedsFasterColor' - RGBA color for faster speeds (default '0.0 1.0 0.0 1.0')
  - 'etj_jumpSpeedsSlowerColor' - RGBA color for slower speeds (default '1.0 0.0 0.0 1.0')
- reinforcement timer is now hidden when 'cg_descriptiveText' is set to '0'
- 'etj_speedSize' now accepts floating point values
- 'etj_CGazAlpha' no longer affects CGaz 5
- spectators can no longer use 'spec(un)lock'
- added missing 'speclist' client command for autocompletion
- fixed a case where certain NJD pad combinations allowed to bypass jump delay on standard surfaces
- fixed gun position when leaning with non-zero roll angles
- fixed color cvars displaying incorrectly in menus on 64-bit clients,
- fixed CGaz showing incorrect angles on ground strafing
- fixed client ID 0 sounds being played from too far on OpenAL sound backend
- added strafe quality meter to display percentage of pmove frames spent on optimal accel zone
  - fully accurate only while playing - spectator/demo playback is an rough approximation due to 'sv_fps 20' (50ms commandTime intervals instead of 8ms)
  - 'etj_drawStrafeQuality' - toggle on/off (default '0')
  - 'etj_strafeQualityX/Y' - X/Y offset (default '0/0')
  - 'etj_strafeQualityColor'- RGBA color (default '1.0 1.0 1.0 1.0')
  - 'etj_strafeQualityShadow' - toggle shadow (default '1')
  - 'etj_strafeQualitySize'- text size (default '3')
  - 'etj_strafeQualityStyle' - display style, '0' = label + percentage, '1' = percentage, '2' = value only
- expanded map is now always drawn on top of HUD
- increased 'G_Alloc' memory pool size to avoid crashes on some maps on 64-bit clients/servers
- tied timeruns records are now displayed in white rather than red
- fixed potential segfault with mapstatistics and tokens on shutdown
- added 'g_oss' server cvar to improve integration with ETLegacy server browser
- fixed "Make fireteam private?" prompt staying on screen after already disbanding fireteam
- fixed '!listmaps' and '!map' commands ignoring 'g_blockedMaps'
- improved 'etj_altScoreboard 3'
  - fixed hostname and mapname overlapping - full map name is now always drawn at the expense of truncating hostname
  - made the scoreboard overall a bit bigger
- changed and added several features to CGaz and snaphud
  - CGaz/snaphud are no longer drawn on ladders or underwater
  - CGaz/snaphud are no longer drawn while noclipping or dead
  - CGaz/snaphud are no longer drawn while mounted or using set weapons
  - added 'etj_projection' to set projection type of CGaz 1 and snaphud
    - '0' = rectilinear projection (default, current)
    - '1' = cylindrical projection
    - '2' = panini projection
  - CGaz changes
    - removed all CGaz HUDs except 2 & 5
      - CGaz 5 is now CGaz 1
    - removed unused 'etj_CGazWidth' and 'etj_CGazAlpha' cvars
    - renamed following cvars
      - 'etj_CGazColor1' -> 'etj_CGaz2Color1'
      - 'etj_CGazColor2' -> 'etj_CGaz2Color2'
      - 'etj_CGaz5Color1' -> 'etj_CGaz1Color1'
      - 'etj_CGaz5Color2' -> 'etj_CGaz1Color2'
      - 'etj_CGaz5Color3' -> 'etj_CGaz1Color3'
      - 'etj_CGaz5Color4' -> 'etj_CGaz1Color4'
      - 'etj_CGaz5Fov' -> 'etj_CGazFov'
     - added 'etj_CGazTrueness' - bitmask value for trueness of CGaz (default '2')
       - '1' = show upmove influence
       - '2' = show true groundzones (CGaz 1 only)
      - 'etj_CGaz1Color1-4' default alpha values changed from '1.0' to '0.75'
      - 'etj_CGazY' default value changed from '260' to '240'
  - snaphud changes
    - added 'etj_snapHUDHLActive' - highlight active snapzone (default off)
      - 'etj_snapHUDHLColor1/2' to set colors
    - added 'etj_snapHUDTrueness' - bitmask value for trueness of snaphud (default '0')
      - '1' = show upmove influence
      - '2' = show true groundzones
- 'g_password' is no longer stored in 'ClientUserinfo'
- clamped 'target_scale_velocity' 'BASE' scaling to '0.25' - '3.0'
- item pickup sound is no longer tied to 'etj_itemPickupText'
- fixed following sounds not being affected by 'etj_weaponVolume'
  - reload sound
  - weapon switch sound
  - satchel detonator idle sound
  - panzer/satchel detonator spin-up
  - mounted MG42s and tanks
  - overheating sounds
  - dynamite spin-up
- fixed incorrect cvar flags for 'shared' causing issues with ET:L/ETe clients
- dead players can no longer use 'noclip'
- fixed player view transition errors when following players from free spec
  - view no longer transitions from crouch to prone when following prone players
  - view no longer persistently shifts after step-ups and hard landings upon following
- revive icon alpha value is no longer tied to spawntimes
- fixed potential division by zero in map grid code causing crash with certain client/OS setups
- fixed a visual bug which made flamethrower appear to be able to fire while noclipping
- fixed 'configstrings' not including 'MAX_FIRETEAMS' in its value
- map grid is no longer drawn on command map
  - grid system is still calculated in the background for command map positions etc.
- player icons no longer draw outside the boundaries of command map
- removed server sided 'g_saveMsg' and added client sided 'etj_saveMsg' - clients can now specify their own save message
- fixed speedmeter showing 1ups while wounded on a non-flat surface
- improved command map accuracy by using latest PVS data for all players
- crosshair is no longer hidden while moving in prone
- fixed 'etj_drawLeaves' trying to remap a non-existing shader
- fixed mounted MG42s being unrepairable when 'g_engineerChargeTime' was set to a low value
- fixed weapon heat bar not disappearing when unmounting tank while noclipping
- fixed tank MG rotation being incorrect while using 'cg_thirdperson'
- corrected some incorrect cvars from both client and server
  - removed 'shared', 'cg_synchronousClients' and 'pmove_msec' cvars from cgame cvars
  - removed 'pmove_fixed' cvar from server, renamed 'mapname' -> 'sv_mapname'
- added 'etj_expandedMapAlpha' to control transparency of expanded map
- removed 'Objective:' text from loading screen and made mapname font size to scale automatically to the boundaries of the box
- prevented several commands from being executed during demo playback to avoid potentially unwated behavior
- added several new binding options to ETJump binds menu
- 'cg_skybox' is no longer cheat protected so skyportals can be turned off
- fixed incorrect wording in max tracker indices error message
- added a new portalgun model and portal shaders
  - portalgun range is increased to 131072 units
- improved spacing of multiline tooltips in menus
- speclock improvements:
  - speclock and specinvites are now persistent across map changes
  - disconnecting will now invalidate your invitation to spectate someone, preventing other players to unintentionally bypass the lock
- 'cg_drawRoundTimer' will now display the elapsed time of current map
- added 'etj_FPSMeterUpdateInterval' to control the update rate of FPS meter
- fixed binocular/scope overlay disappearing while scoreboard is up
  - the reticles are now hidden while scoreboard is up to improve readability
- fixed some inconsistencies with 'call/goto' print logic when checking for conditions for the commands
- changed default 'g_mapScriptDir' cvar value from 'scripts' -> 'mapscripts' for consistency between mostly all other mods
- improvements to handling of broken/missing command map shaders
  - added a default command map to display when a map does not include one - no more ugly black/orange texture
  - added 'etj_fixedCompassShader' cvar - when enabled, will override the command map shader used by the current map with a shader that ensures proper masking of command map, preventing map corners from drawing outside of compass borders
    - the original image is still used, only the shader contents are overridden
    - this will break some special command maps when enabled such as the animated command map in Skacharohuth, but in turn will always ensure proper masking
- 'g_maxConnsPerIP' can no longer be set to negative value
- added upmove meter to display how long '+moveup' is being held for while jumping
  - displays 4 statistics: ground/pre-jump - total - post jump (bottom to top on HUD)
  - fully accurate only while playing - spectator/demo playback is an rough approximation due to 'sv_fps 20' (50ms commandTime intervals instead of 8ms)
  - customizeable with following cvars
    - 'etj_drawUpmoveMeter' - (bitflag) '0' = off (default) '1' = graph '2' = text
    - 'etj_upmoveMeterMaxDelay' - maximum value for each statistics in ms (default '360')
    - 'etj_upmoveMeterGraphX/Y/W/H' - X/Y/W/H of graph display (default '8 8 6 80')
    - 'etj_upmoveMeterGraphColor' - RGBA color of the graph background (default 'mdgrey')
    - 'etj_upmoveMeterGraphOnGroundColor' - RGBA color of ground frames on graph (default 'green')
    - 'etj_upmoveMeterGraphPreJumpColor' - RGBA color of pre jump frames on graph (default 'blue')
    - 'etj_upmoveMeterGraphPostJumpColor' - RGBA color of post jump frames on graph (default 'red')
    - 'etj_upmoveMeterGraphOutlineW' - width of graph border (default '1')
    - 'etj_upmoveMeterGraphOutlineColor' - RGBA color of graph border (default 'white')
    - 'etj_upmoveMeterTextX' - X offset of text display from graph (default '6')
    - 'etj_upmoveMeterTextH' - vertical spacing between the text displays (default '12')
    - 'etj_upmoveMeterTextColor' - RGBA color of the text display (default 'white')
    - 'etj_upmoveMeterTextShadow' - draw shadow on text (default '1')
    - 'etj_upmoveMeterTextSize' - size of text display (default '2')
- fixed prediction errors with crashlandings which caused delay on applying knockback event & view duck
- '!restart' and 'reset_match' commands now start the map instantly instead of briefly having a warmup before actual map start
- added cvar unlockers for ETe clip/trigger/slick drawing
  - requires ETe build from Sep 10th 2022 or newer
  - alternative shaders included in the mod to replace built-in ones from engine
- text shadowing amount is no longer hardcoded to pure pixel values and scales with the text size
- added 'callvote' devmap and removed several restrictions when running with cheats
  - save isn't restricted
  - noclip is always available
  - god is always available
  - cheats are enabled during timeruns (no records are saved)
  - save is available during nosave timeruns, load doesn't reset the run
  - prone isn't restricted
- '!listmaps' and '!findmap' improvements
  - '!listmaps' now defaults to 5 columns instead of 3, capped max columns to 5 to prevent output print breaking due to console char limits
  - both '!listmaps' and '!findmap' outputs are now alphabetically ordered and every other column colored grey to improve readability
  - '!findmap' now displays the number of matches similar to 'callvote map <partialmapname>'
  - added '!newmaps [N]' command to display 'N' latest maps added to server (flag 'a')
- fixed pluralization of some admin command outputs
- fixed non-functional 'savelimit' worldspawn key