ETJump 3.3.0

- added 'portalsize' key to 'func_portaltarget' to allow scaling the size of the portal fired onto it (up to '512u')
- fixed negative values for 'give health' not killing players correctly and leaving them in a state where the player was not setup correctly to be dead
- lagometer improvements
  - added 'etj_lagometerAlpha' to control transparency of lagometer background
  - added 'etj_lagometerShader' to toggle displaying the background image or solid color
  - demo playback will now display snapshot delta values as ping in demo playback (ETPro/legacy style)
  - added client/server snapshot rate display to lagometer
- fixed server side framerate dependencies, the mod should now be fully compatible with higher 'sv_fps' values
  - 'wait' key in mapscripts simulates 'sv_fps 20' timings
  - disguise stealing speed is normalized to 'sv_fps 20'
  - flamethrower firing range is normalized to 'sv_fps 20'
  - flamethrower damage normalized to 'sv_fps 20'
  - player pushing when players are stuck in each other is normalized to 'sv_fps 20'
  - projectiles entering skyboxes no longer get stuck in skyboxes due to higher trace frequency
- added support for 'private' keyword to 'playsound' script actions to allow playing sound only to activator
- fixed fireteam health only displaying correctly for fireteam members that are on the same team as you are
- improvements to token system
  - maximum tokens per difficulty increased to '32'
  - creating a token will now place it on ground level as opposed to player origin
  - slightly reduced the size of the token bbox to better match the visual size
  - tokens can no longer be collected while noclipping
- lean angles are now interpolated on spec/demo playback to smooth out viewangle transitions
- added chat replay system
  - server replays 10 latest global chat messages to clients after connecting/map change/'vid_restart'
    - chats are stored on server in 'chatreplay.json'
    - timestamps or chat flags are not preserved from original messages
    - 'etj_chatReplay' cvar toggles the replay on client side, any chat messages you send are still included for other players chat replays
  - server cvar 'g_chatReplayMaxMessageAge <minutes>' can be set to make chats expire, any message older than specified won't be included in a chat replay
    - default value '0' means chats never expire
- fixed potential crash on host game menu when over 500 maps were installed
- added 'trigger_teleport_client' entity to enable client side predicted teleports
  - supports same keys/spawnflags as other teleport entities, except 'spawnflags 4/8'
  - no multi-target teleport support (multiple destinations with random target picking)
- fixed vote start/end resetting event handler, which caused for example limbo menu to always close when a vote was called/ended
- added ability to toggle player collision between fireteam members
  - 'fireteam rules noghost <1|on>/<0/off>' to enable/disable, also available in fireteam rule menu
  - projectiles and bullets now collide with solid players
  - added worldspawn key 'noftnoghost' to disallow toggling fireteam collision in a map
  - added 'spawnflags 256' to 'target/trigger_starttimer' to allow toggling fireteam collission during a timerun
    - any timeruns lacking this spawnflag will not start if fireteam collision is enabled
    - if a fireteam member is currently timerunning in a run that does not allow collision, fireteam collision cannot be turned on
- fixed being unable to turn off server-side coronas
- added shortname system to the new command system
  - each command now has a full name as well as short name, e.g. '--name' & '-n'
  - '--help' can also be substituted with '-h'
- fixed viewangles stuttering when riding on movers while proning or using a mortar set
- removed all references to gametype related cvars/commands
- fixed water impact markers not working correctly
- fixed 'etj_autoPortalBinds' triggering 'weapalt -> +attack2' rebinds when spectating someone holding a portalgun
- fireteam chat fixes
  - fixed old etmain bug which allowed fireteam chatting while not in a fireteam
  - fixed fireteam vsays not working when fireteam members were selected with 'selectbuddy'
- removed 'sort 16' from player shaders, which caused them to draw over muzzleflashes
- added 'g_allowSpeclock' to let servers disable speclocking
- added 'spawnflags 32' to teleport entities which disables any z-offsetting done by the teleporter
  - when enabled, this disables the following:
    - regular teleports no longer add +1u z offset to destination if this is set
    - relative angle teleports no longer offset destination z origin by distance between player z origin and the trigger origin
- fixed 'SPIN' spawnflag not working on some weapon_ entities, spinning now works correctly in all of them
- timerun timer now displays white for tied records and first records (no previous record)
- added 'spawnflags 4096' to 'trigger_multiple' to disable activation while noclipping
- custom vote list names can no longer be just color codes, and mapnames are forced to lowercase
- 'records <runname>' no longer returns additional partial matches if the queried run is an exact match for a run
- added 'etj_drawPlayerBBox' to draw bounding boxes of players
  - 'etj_drawPlayerBBox' - bitflag value to draw bboxes
    - '1' = draw self
    - '2' = draw others
    - '4' = draw fireteam members
  - 'etj_playerBBoxBottomOnly' - bitflag to draw only bottom of bbox instead of full box
    - same flags as 'etj_drawPlayerBBox'
  - 'etj_playerBBoxColorSelf/Other/Fireteam' - sets the color of the bbox
    - might not work correctly if using a custom shader
  - 'etj_playerBBoxShader' - shader to use for drawing
- fixed '!spectate' not triggering timerun interrupt when a timerun was set to interrupt on team change
- improvements to fireteam teamjump mode & 'target_ftrelay'
  - 'target_ftrelay' no longer fires for spectators
  - added 'spawnflags 1/2/4/8/16/32'
    - '4' - fire all targets intead of one random target
    - '32' - only fire for other fireteam members
    - rest match regular 'target_relay'
  - improved fireteam prints related to teamjump mode
  - added menu option to toggle fireteam teamjump mode
  - added indicator to fireteam overlay to show if teamjump mode is active
- fixed excess overheat events triggering for mounted MG42s
  - '+attack2' now works on mounted MG42s
- fixed missing newlines on some 'records' prints
- fixed chat highlighting not working for server chat messages
- fixed unrelated fireteam/vote messages being visible simultaneously
- fixed portalgun portals drawing mirrored on 2.60b clients
- fixed systemcalls working unreliably on 64-bit clients
- timeruns no longer interrupt due to too low fps with 'com_maxfps 0'
- added dropdown menus to UI for more convenient multi-selection menu entries
- added autospec feature to automatically follow next client when idling in free spec
  - 'etj_autoSpec' - toggle on/off
  - 'etj_autoSpecDelay' - time in milliseconds to wait before automatically following next client
- fixed '!listbans' output being affected by the color of "banned by" entry
- fixed '!ban' failing if time was 0, making it impossible to ban someone permantently while also giving a reason for the ban
- menu entries with 'Custom' value now display the actual cvar value
- menu options that are incompatible with players client are now hidden
- added adminchat functionality
  - can be toggled on server with 'g_adminChat'
  - available to players with adminflag 'S'
  - 'say_admin', 'ma' and 'enc_say_admin' will send a message to adminchat
  - also available as a target in regular chat window ('adminChat' command opens the message window with adminchat selected
- IP address is now visible in '!userinfo' output if a player is connected
- dragging a scrollbar in listbox menu no longer stops the scroll if cursor moves outside the window
- fixed 'Write Config' button in settings menu not focusing on the text field upon opening
- added 'etj_drawSnapHUD 3' to draw snaphud with borders only instead of solid colored blocks
- fixed collision on 'func_fakebrush' with 'CONTENTS_PLAYECLIP' not working correctly
- re-fixed demo list sorting to be case-insensitive - this was already the case on earlier versions but broke at some point
- added color picker to UI
  - avaialble via 'Color picker...' menu option in dropdown menus
  - sliders for RGB, HSV and Alpha, preview boxes for old/new color
    - RGB sliders can be set to either '0-1' or '0-255' range
  - interactive HSV color picker, usable with mouse
    - 'MOUSE2' only adjusts saturation
    - 'MOUSE3' only adjusts value
- 'Vote -> Map' menu now lists all maps on the server, regardless of the amount of pk3 files on the server
  - the list is also now sorted alphabetically
- fixes to 'Vote -> Map -> Details' menu
  - details now update automatically as you select new map on the vote list
  - levelshot is now displayed in correct aspect ratio
  - added text scrolling to the briefing drawing if it didn't fit on screen fully
  - unfortunately you'll likely never see this panel properly because the files won't be loaded with 'sv_pure 1' if server has a lot of maps
- fixed '!add-customvote' deleting existing customvote file if the file contained a syntax error
- fixed menu loading fallback not working if custom menufile was not found
- added custom votes to vote UI
  - details panel contains the list of maps on the server and any unavailable maps
  - menu contains a toggle for voting a random map or RTV from given list
- improvements to menu sliders
  - sliders no longer send cvar updates every frame mouse is not moved
  - added "cached" menu sliders, which update the real cvar value only when mouse click state changes
    - used for 'etj_noclipScale' to prevent spamming userinfo updates, and 'etj_menuSensitivity' to make the slider easier to use
- improved logging for tokens, motd and custom votes
  - fixed several crashes related to JSON parsing
  - various errors from '!tokens' no longer crash the server, but are gracefully handled with an error message
- fixed '!tokens move' not shifting token to ground level like '!tokens add'
- fixed 'listinfo/customvotes' output if server has no custom votes set
- 'shooter_rocket/grenade/mortar' no longer spawn entities if entity limit is close to full, to prevent them working as an effective DoS in some maps
- runtimer now uses correct timestamps for spectators/demo playback if server runs/was running at 'sv_fps 125'
- added info print to the start of demo playback
  - displays mod version for demo, player name, map, server and any compatibility flags used during demo playback
- deprecated 'g_debugTimeruns' as it serves no real purpose anymore
- fixed various backwards compatibility issues with old demos
  - events are now correctly adjusted to account for new events/entity types added in ETJump 2.0.6, 2.3.0 and 3.3.0 (for this release)
- added cvars to control demo recording status line
  - 'etj_drawRecordingStatus' - toggle demo recording status on/off
  - 'etj_recordingStatusX/Y' - X/Y position
  - etmain's 'cg_recording_statusline' is removed in favor of these
  - the default position is very slightly shifted to left
- added 'savepos/loadpos' system
  - allows saving players position, angles, velocity, stance and timerun state into a file
    - files are saved into 'etjump/savepos/<name>.dat' (if no name is given, 'default.dat')
    - can also be used in demo playback
    - timerun state can only be saved from demos recorded in ETJump 3.3.0 and newer
  - 'loadpos' restores the state from a given file
  - 'savepos' can be used any time, whereas 'loadpos' requires cheats to be enabled
  - usage:
    - 'savepos <optional name> <optional flags>' - saves a position
      - '1' - don't save velocity (will be cleared)
      - '2' - don't save pitch angle (will reset to 0)
      - if only one parameter is given, it's treated as a flag if it's numeric and one character only
    - 'loadpos <optional name>' - loads a position
    - 'listsavepos' - list all saved savepos files
    - 'readsavepos' - reload savepos files
- 'set' script action can no longer change entitys 'classname' outside of 'spawn' script events
  - 'classname_nospawn' can still be used as it doesn't re-spawn the entity
- added 'delete' script action for deleting entities by their entity key/value pairs
  - 'delete { origin "16 16 16" }', 'delete { origin "16 16 16" targetname "foo" ... }'
  - if multiple key/value pairs are provided, an entity must match all of them to be deleted
  - not all entity keys are supported with this script action - this will be improved in future releases
    - for the currently supported keys, see
- fixed '!rename' ignoring spaces for the new name
  - the command also won't execute if the resulting name would be too long, while previously the new name was truncated to stay within limits
- 'cg_fov' can now be set outside of 90-160 range in demo playback without setting 'developer 1'