# ETJump 2.3.0

## Breaking
- __etj_keysX/Y__ are now calculated from the mid point of the keyset
- removed __etj_speedSizeX/Y__ and replaced them with __etj_speedSize__

## Added
- high quality font for HUD/UI
- __nojumpdelay__ worldspawn key to control no jump delay behavior on the map
  - __surfaceparm monsterslicknorth__ controls jump delay on a surface
- __etj_CGazColor1/2__ cvars to set custom colors for __etj_drawCGaz 2__
- __etj_autoLoad__ to automatically load latest saved position when joining a team
- __nofalldamage__ worldspawn key to control falldamage behavior
- __noprone__ worldspawn key to control prone behavior
  - __surfaceparm donotenter__ is used to define no prone areas
- __spawnflag 2048__ for __trigger_multiple__ - activates for all clients touching the trigger, __wait__ is unique for each client
- new color parsing system for ETJump cvars that expect color values, supported formats:
  - string (white, black, green etc.)
  - normalized RGB(A) (eg. 1.0 0.5 0.75 0.33)
  - true RGB(A) (eg. 255 128 191 62), used if R, G or B component is > 1
  - hex color (eg. #ff80bf, 0xff80bf)
- cvar unlockers for various cvars to bypass cheat restrictions on them
  - __etj_drawFoliage__ -> __r_drawfoliage__
  - __etj_showTris__ -> __r_showtris__
  - __etj_wolfFog__ -> __r_wolffog__
  - __etj_zFar__ -> __r_zfar__
  - __etj_viewLog__ -> __viewlog__ (reimplemented)
  - __etj_offsetFactor__ -> __r_offsetFactor__
  - __etj_offsetUnits__ -> __r_offsetUnits__
  - __etj_speeds__ -> __r_speeds__
  - __etj_lightmap__ -> __r_lightmap__
  - __etj_drawNotify__ -> __con_drawNotify__ (note that __con_notifyTime__ is not cheat protected by default)
- __etj_drawLeaves__ to turn off leaves from trees and bushes
  - only works for stock shaders
- __trigger_push__ entity for client side predicted pushers
- __spawnflag 2__ for __target/trigger_push__ to add pusher's horizontal velocity for activator instead of setting it
- __spawnflag 128__ for __target_startTimer__ to disable save during timerun (load interrupts the run)
- support for directories in replays menu
- __etj_quickFollow__ to spectate players by aiming at them and pressing __+activate__
- __etj_drawNoJumpDelay__ cvar to draw no jump delay surface indicator
- __etj_drawSaveIndicator__ cvar to draw icon for save areas
- __etj_drawProneIndicator__ to draw icon for no prone areas
- __etj_OBX/Y__ cvars to move OB detector
- __etj_touchPickupWeapons__ cvar to pickup weapons by touching them
  - requires __cg_autoactivate 1__ to function
- __etj_loopedSounds__ cvar to toggle playback of looped sounds in maps
- __interruptRun__ client command to stop an ongoing timerun
- __noise__ key support for teleport entities (plays only for activator)
- __outspeed__ key for teleporters to define a fixed speed at destination
- __spawnflag 16__ for teleporters to apply short knockback event at destination
  - this behavior mimics how teleporters work in Quake 3
- __noise__ and __volume__ key support for __func_invisible_user__
- __spawnflag 1__ for __target_scale_velocity__ to scale base speed instead of current speed
  - __time__ key controls the duration for how long the speed scaling lasts
- __target_give__ entity support to give items/weapons to activator
- __tracker_not_eq__ key for __target/trigger_tracker__
- new scoreboard (__etj_altScoreboard 3__)
- new cvars to customize console
  - __etj_consoleAlpha__ to set console background opacity
  - __etj_consoleShader__ cvar to toggle console background shader
  - __etj_consoleColor__ cvar to set console background (requires __etj_consoleShader 0__)
- new cvars to customize CHS
  - __etj_drawCHS2 2__ to align CHS2 text to the right side of screen
  - __etj_CHS2PosX/Y__ to offset CHS2 position
  - __etj_CHSShadow__ to enable text shadow for CHS
  - __etj_CHSAlpha__ to set CHS alpha
  - __etj_CHSColor__ to change CHS color
- new cvars to customize chat
  - __etj_chatShadow__ cvar to enable chat text shadows
  - __etj_chatAlpha__ cvar to set chat transparency
  - __etj_chatLineWidth__ to control chat width before automatic line break (in characters, __1 - 200__)
- new cvars to customize fireteam overlay
  - __etj_HUD_fireteam__ to toggle fireteam overlay
  - __etj_fireteamPosX/Y__ to offset fireteam overlay position
  - __etj_fireteamAlpha__ to set fireteam hud alpha
- new cvars to customize popups
  - __etj_popupShadow__ cvar to set text shadows for popup messages
  - __etj_popupAlpha__ cvar to set popup message alpha
  - __etj_HUD_popup__ cvar to enable/disable popup messages
    - value __2__ draws on right side of the screen
  - __etj_popupPosX/Y__ cvars to offset popup message position
- 4 new keyset themes for __etj_drawKeys__
- __etj_keysShadow__ to draw shadow for keysets
- __etj_runtimerInactiveColor__ to set run timer color when timerun is not active
- __etj_onRunStart/End__ cvars to execute commands on timerun start/end
  - timerun interrupts counts as run end
- __etj_lagometerX/Y__ cvars to offset lagometer position
- __etj_obWatcherSize__ cvar to adjust OB watcher size
- __etj_obWatcherColor__ cvar to set OB watcher color
- __etj_uphillSteps__ to enable step sounds on very low landing speeds
- triggerable shader support (__targetShaderName/targetShaderNewName__ entity keys) - execute shader remaps when entities are fired
  - more info: http://robotrenegade.com/q3map2/docs/shader_manual/triggerable-shader-entities.html
- new icon for timerun popup prints
- minimize button in game window (Windows only)
- __g_moverScale__ cvar and __!moverScale__ admin command to scale mover speed (__0.1 - 5.0__)
  - admin flag __v__ controls access
- __g_debugTrackers__ cvar to enable tracker debugging
  - grants access to __tracker_set__ and __tracker_print__ commands
  - timerun records are not saved when debugging is enabled
- __g_debugTimeruns__ to enable timerun debugging
  - disables all run start condition checks and actions
  - cheats are enabled (noclip, god)
  - timerun records are not saved when debugging is enabled
- __setoffset__ command to offset player's position (max __4096__ per direction)
- __freecam__ and __noclip__ support in demo playback
- __b_demo_lookat__ cvar for demo playback, to viewlock on specific player/entity
  - name shared with ETPro-equivalent cvar for Camtrace3D compatibility
- __incrementVar__ console command - same as __cycle__ but accepts decimal values
- majority of ETJump cvars are available in in-game menus
- ETJump menu included in the main menu
- warning message about serverlist exploit in server browser
- ETJump mod filter in server browser
- __strictsaveload__ worldspawn key to restrict save/load while moving or dead
- __setplayerspawn__ mapscript action to set activator's spawn point
- __setplayerautospawn__ mapscript action to set activator's autospawn point
- __damageplayer__ mapscript action to inflict damage to the activator
- __killplayer__ mapscript action to kill the activator

## Changed
- __save__ now includes player stance (stand/crouch/prone), and __load__ restores the stance that the player was at saving
  - loading to prone additionally always forces viewangles, regardless of __etj_loadviewangles__ cvar value
- snipers and engineer rifles are now valid weapons for all classes, to grant access to 100% accurate weapons for any class
  - only engineers get access to rifle grenades
- clients are no longer allowed to adjust roll angles
- fireteam and private messages are no longer logged
- __etj_hideMe__ now hides the player better
  - footsteps, gun firing, pickup, reload and impact sounds are not heard by others
  - command map/compass doesn't draw player icon for others
  - bullet tracers, brass and wallmarks are not drawn for others
- serverlist no longer automatically refreshes to protect against server list redirection exploit
- timeruns no longer start if player is noclipping/has godmode enabled
- timeruns can no longer be started with non-zero roll angles
- timeruns are now interrupted if the player's ping is over __400__
- replays menu sorting is case insensitive
- __noclip__ is now always allowed on non-dedicated servers running with cheats
- demos recorded with __etj_hideMe__ enabled now show yourself on freecam/3rd person
- snipers and engineer rifles are now oriented "standing up"
- millisecond separator on timerun timer changed from __:__ to __.__
- reworked OB Watcher to calculate overbounces without aiming at the saved location
- __cg_teamChatHeight__ max value increased to __64__
- __etj_slickX__ default value changed from __315__ to __304__, was overlapping with OB detector
- __etj_numPopups 0__ hides popups completely
- server browser trims leading whitespace from server names
- tweaked formatting for __noclip__ related prints

## Fixed
- __func_static__ with __spawnflag 2__ would crash the server when trying activating entities that require an activator 
- __spawnflag 8__ was not working on __target_speaker__
- __etj_noActivateLean__ broken on player respawn
- __nooverbounce__ was not preventing sticky overbounces
- portal teleports could be executed on the same frame as timeruns started
- connecting to a server with name containing specific extended ASCII characters would cause random mouse movements for other players
- remapped shaders were not reset back to their original values on map changes
- redirect exploit when serverlist was loaded
- footsteps were not correctly playing at low landing speeds
- runtimer did not reset on map restarts
- runtimer was not visible in demo playback
- timerun prints were calculating diff times incorrectly when run length was over 1 minute
- medic health regeneration was slower when __pmove_fixed__ was enabled
- disallowed timerun start conditions were printing when player was already timerunning
- __time__ option on __!ban__ was not working
- __vote_minVoteDuration__ could not be used to set minimum duration to less than 5 seconds
- __spawnflag 2__ was not working on snipers and engineer rifles
- setting __g_banner1-5__ cvars empty would crash the server on map load
- __etj_weaponsound 0__ did not disable ammo and flamethrower sounds
- noclipping as spectator was not working correctly
- mouse cursor was invisible in menu text fields
- using __!deletelevel__ to remove your current admin level and using admin commands afterwards crashed the server
- loading tags from a file was not working correctly for models
- __!ban__ help text had incorrect time unit for __time__ argument
- __movie_changeFovBasedOnSpeed__ was not working correctly
- __!editlevel__ was not creating a new level if the level you were trying to edit did not exist, as the command help claimed
- __!edituser__ was printing redundant output when using __-clear__ option