# ETJump 3.3.0

## Breaking
- __cg_recording_statusline__ cvar has been removed

## 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
- __noftnoghost__ worldspawn key to disallow toggling fireteam collision in a map
- __spawnflag 256__ to __target/trigger_starttimer__ to allow toggling fireteam collission during a timerun
- 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
- __g_chatReplayMaxMessageAge__ cvar to specify maximum age of a chat message included in chat replay (__0__ = no limit)
- __etj_chatReplay__ cvar to turn off chat replay on client side
  - any chat messages you send are still included in other players' chat replays
- __etj_autoSpec__ cvar automatically follow next client when idling in free spec
  - __etj_autoSpecDelay__ - time in milliseconds to wait before automatically following next client
- __savepos/loadpos__ system - alternative to regular __save/load__, preserving speed and timerun state
  - __savepos__ can be used at any time (including demo playback), __loadpos__ requires cheats
  - timerun state saving/loading only works on demos from ETJump 3.3.0 and newer
- dropdown menus in UI for more convenient multi-selection menu entries
- color picker for UI, accessible via __Color picker...__ entry on dropdown menus for cvars adjusting colors
- custom votes in vote UI - view and vote custom vote lists from the in-game vote menu
- adminchat channel for chat, available for players with adminflag __S__
  - can be disabled on the server with __g_adminChat__
  - __say_admin__, __ma__ and __enc_say_admin__ will send a message to adminchat
  - __adminChat__ console command opens the chat window with adminchat selected
- __trigger_teleport_client__ entity for client side predicted teleports
- __portalsize__ key for __func_portaltarget__ to allow scaling the size of the portal fired onto it (up to __512u__)
- support for short flag names in the new command system (e.g. __--help__ = __-h__, see help of each command for details)
- __etj_drawPlayerBBox__ to draw bounding boxes of players
  - __etj_playerBBoxBottomOnly__ - draw only bottom of bbox instead of full box
  - __etj_playerBBoxShader__ - shader to use for drawing
  - __etj_playerBBoxColorSelf/Other/Fireteam__ - sets the color of the bbox (only works for shaders using __rgbGen vertex__)
- __g_allowSpeclock__ to let servers disable speclocking
- several new spawnflags for __target_ftrelay__, mostly matching __target_relay__
  - __spawnflag 4__ fires all targets instead of one random target
  - __spawnflag 32__ only fires for other fireteam members
- __spawnflag 32__ for teleport entities to disable any Z-offsetting of position
- __spawnflag 4096__ for __trigger_multiple__ to disable activation while noclipping
- __etj_lagometerAlpha__ to control transparency of lagometer background
- __etj_lagometerShader__ to toggle displaying the background image or solid color
- __delete__ script action for deleting entities by their entity key/value pairs
- client/server snapshot rate display in lagometer
- support for __private__ keyword to __playsound__ script actions to allow playing sound only to activator
- console info print at the start of demo playback, displaying information about the demo file
- "cached" menu sliders that only update the cvar value on key up
  - used by __etj_noClipScale__ and __etj_menuSensitivity__ as of now
- cvars for controlling demo recording status line
  - __etj_drawRecordingStatus__ - toggle demo recording status on/off
  - __etj_recordingStatusX/Y__ - X/Y position
- __etj_drawSnapHUD 3__ cvar to draw snaphud with borders only instead of solid colored blocks
- fireteam menu option to toggle teamjump mode
- indicator to fireteam overlay to show if teamjump mode is active
- scrolling briefing text for __Vote -> Map -> Details__ & __Host Game__ menus if text does not fit on screen

## Changed
- __Vote -> Map__ menu now lists all maps on the server, even for servers with lots of pk3s
  - the list is also now sorted alphabetically
- timerun timer displays white for tied records and first records (no previous record)
- projectiles and bullets now collide with solid players
- custom vote list names can no longer be just color codes
- custom vote lists now force mapnames to lowercase
- lean angles are now interpolated on spec/demo playback to smooth out viewangle transitions
- menu entries with __Custom__ value now display the actual cvar value
- __shooter_rocket/grenade/mortar__ no longer spawn entities if entity limit is close to full
- changes to the collectible token system
  - maximum tokens per difficulty increased to __32__
  - tokens are now placed at player's feet rather than origin
  - token bbox matches the visual size more accurately
  - tokens can no longer be collected while noclipping
- lagometer shows snapshot delta as ping on demo playback
- __target_ftrelay__ no longer fires for spectators
- __!userinfo__ output displays players' IP address if they are connected
- menu options that are incompatible with players client are now hidden
- improved runtimer accuracy when server is running at __sv_fps 125__
- menu sliders no longer send cvar updates every frame if not moving the mouse
- dragging a scrollbar in listbox menu no longer stops the scroll if cursor moves outside the window
- __set__ script action no longer works for setting __classname__ outside of __spawn__ script blocks
- __listinfo/customvotes__ output indicates if server has no lists defined
- __!rename__ now fails if the new name is too long
- improved fireteam prints related to teamjump mode
- improved logging for tokens, motd and custom votes
- various errors from __!tokens__ command are now handled gracefully instead of crashing the server
- __cg_fov__ can be set outside of __90 - 160__ range in demo playback without __developer 1__

## Removed
- __g_debugTimeruns__ cvar, enabling cheats provides everything that this did
- removed all cvars and commands related to gametypes (apart from __g_gametype__)

## Fixed
- server side framerate dependencies - the mod can now run at __sv_fps 125__
  - __wait__ key in mapscripts simulates __sv_fps 20__ timings
  - disguise stealing speed normalized to __sv_fps 20__
  - flamethrower firing range 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
- systemcalls were working unreliably on 64-bit clients
- __etj_autoPortalBinds__ triggered __weapalt -> +attack2__ rebinds when spectating someone holding a portalgun
- server side coronas could not be turned off
- __!ban__ did not accept __0__ as time for permanent ban
- fireteam health was not displaying correctly for members who were on a different team
- vote start/end was resetting event handler, causing unexpected side effects when a vote started/ended
- __!spectate__ did not interrupt timeruns which were supposed to reset on team switch
- __records <runname>__ was returning additional partial matches when an exact run name was given
- __!add-customvote__ would delete existing customvote file if the file had a syntax error
- timeruns no longer interrupt due to too low fps with __com_maxfps 0__
- negative values for __give health__ were not killing players correctly
- collision with __func_fakebrush__ using __CONTENTS_PLAYECLIP__ was not working correctly
- viewangles no longer stutter when riding on movers while prone or using a mortar set
- fireteam vsays were not working when a member was selected with __selectbuddy__
- fireteam chat was possible without being on a fireteam
- portalgun portals were drawing mirrored on 2.60b clients
- __spawnflag 2__ was not working on some weapon entities
- __+attack2__ was not working on mounted MG42s, now fires normally like with other weapons
- __!listbans__ output was affected by the color of "banned by" entry
- __!rename__ ignored spaces for the new name
- unrelated fireteam/vote messages could be visible simultaneously
- demo list sorting was not case-insensitive
- player shaders had incorrect sorting, drawing them over muzzleflashes
- __!tokens move__ was not placing tokens at correct height
- water impact markers were not working correctly in some scenarios
- __Write Config__ button in settings menu was not focusing on text field upon opening
- __Vote -> Map -> Details__ menu was not updating when new map was selected on vote list
- __Vote -> Map -> Details__ menu displayed levelshot at wrong aspect ratio
- excess overheat events were triggering for mounted MG42s
- chat highlighting was not working for server chat messages
- several crashes related to JSON parsing
- menu loading fallback was not working if custom menufile was not found
- potential crash on host game menu when over 500 maps were installed
- missing newlines on some __records__ prints
- various backwards compatibility issues with old demos