Garry's Mod Logo
Changes Header

Changes

What’s changed in Garry's Mod in each patch.

add_circle

Features

  • Added most of Counter-Strike: Source and Half-Life 2 Episodic content to Garry's Mod (excluding voice over and music due to licensing issues, as well as excluding maps)
  • Enabled Episodic spawnmenu content (NPCs/Vehicle/Entity) by default
  • Added a confirmation dialog when trying to load a save that would change current map
arrow_circle_up

Improvements

  • Prevent throwing props immediately when using +USE pickup if holding left or right mouse buttons while picking up something
  • Made Combine Energy Balls bounce from frozen props in a more consistent fashion
  • Made crossbow bolts bounce from indestructible props, frozen and unfrozen
  • Faceposer uses localized string for "Other" category
  • Minor optimizations to Problems panel, ability to close it via ESC key or clicking empty space around it (Community Contribution)
  • Updated browser implementation on Windows to support much newer features
  • "Edit Entity" window in Sandbox now shows prettier entity names (instead of the internal names) (Community Contribution)
  • Made r_pixelfog require sv_cheats 1 to prevent players disabling fog
  • Increase physgun_maxrange maximum value to 32k (from 8k)
  • Localize old spawnmenu category names for addon-added entities, weapons, etc (Community Contribution)
  • Updated Dedicated Server UI on Windows - added workshop collection entry box, gamemode selection, removed mandatory RCON password (blank=disable RCON) and replaced Steam icon with a Garry's Mod one
handyman

Fixed

  • Fixed leading spaces in a console command not adding it to the console autocomplete history
  • Updated Metrocop player model so the model actually has a shadow
  • Fixed Metrocop player model gloves having unintended white texture bits
  • Physics Gun rotation and Camera zoom/roll now work consistently independent of client FPS
  • Fixed Resistance Turrets being in Combine Overwatch NPC squad (Spawn menu)
  • Fixed pink or green artifacts appearing on certain decals when spammed in one place a lot
  • Bonemerged models inherit lighting origin from parent - makes view model hands match lighting of the view model itself
  • Fixed incorrect player aiming animations for other players sitting in vehicles
  • Restored functionality of m_filter (No longer forced to 1)
  • Fixed non ASCII characters in "Unknown command X" console message appearing as "?"
  • Update RPG Launcher world model to fix muzzle flashes not playing, or playing at incorrect times
  • Fixed changing video settings always forcing a map reload
  • Fixed missing Trails tool undo message localization
  • Fixed missing Antlion Guard step sounds
  • Fixed CS:S Leet playermodel coloring area overlapping the belt
  • Ship Half-Life 2: Episode 2 override of barricade001a.mdl with fixed physics mesh
  • Fixed Hacked Rollermine not respecting ignore players flag
  • Fixed d2_coast_09 not changing fog color when coming out of the tunnel
  • Fixed visual 1px overlap in SWEP info tooltip during fade out (Community Contribution)
  • Fixed being unable to damage partially submerged props with explosions from above the water surface
  • Improve how death is handled when NPC is killed by a harpoon. Fixes killing Antlion Guard on d2_coast_11 with a harpoon not progressing the map
  • Fixed some map surfaces (that use built-in materials, across Half-Life 2, Episode 2 and CS:S maps) having incorrect surface properties, making footstep sounds not match the surface
  • Fixed decals from the Paint tool that were not working or working poorly when applied on models
remove_circle

Removed

  • Removed "Use Bloom" checkbox from Video options, as it was not bound to any convar or setting, meaning it did nothing
  • Removed "No HDR but use bloom" setting from Video Options since it doesn't do anything
  • Remove duplicate "Black and White" color modify preset (Community Contribution)
add_circle

Features

  • Added -mountcfgfile launch parameter that allows overriding filename of cfg/mount.cfg file to be loaded as mount.cfg (for example, -mountcfgfile mount2.cfg would load cfg/mount2.cfg)
  • Added host_writeconfig_lua console command (blocked from Lua)
  • kickid supports kicking players by SteamID64
arrow_circle_up

Improvements

  • Tell the player if garrysmod.ver is read only, which could lead to inability to join servers
  • Log workshop addon mounts (count only) in console for debugging purposes
  • Micro optimization for cam.Start2D (Community Contribution)
  • Remove most of usage of deprecated CSteamAPIContext on the client
  • Apply more strict checking of invalid Lua states in CLuaObject
  • Make Lua print() and error() text colors in console the same
  • AvatarImage keeps track of textures it creates and reuses them, preventing exhaustion of texture name symbol list
  • Add WriteTempEntities overflow warning from CS:GO
  • Do not force "rate" cvar to 100000 on start up (from 1000000), and remove archive flag from it
  • When dealing physics stress damage on characters, set inflictor and attacker if possible - will try to set the inflictor/attacker to something more useful than "World". In case of multiple props, it will be the first entity doing the stress damage
  • Truncate killfeed names to 512 bytes to prevent net message overflows
  • Register private animation events as client events too, so they call the clientside SENT hook for model animation events
  • Reject empty or near empty .gma files with a nice message
  • Bump internal render data buffer from 64k to 80k to prevent rare? crashes
  • Improve performance/memory usage of Lua mat proxies
  • Added some sanity checks around for unclosed Lua ISave/IRestore blocks
  • Prop fading changes when the fade distance is below 500, to prevent the prop looking transparent at all times
  • Draw console notify text over all other panels (with developer convar above 0)
  • Added background to text output of cl_pdump cvar
  • Update lights.rad to its up to date Half-Life 2 version with HDR and episodes support (Community Contribution)
  • Use player.iterator instead of player.GetAll in some base game functions (Community Contribution)
  • The game now ships updated copies of vpk.exe, soundsystem.dll and vtex.exe
  • Reduced OBS_MODE_DEATHCAM interpolation time from 3 seconds to 1 second
  • More strict shader loading file whitelist (Requiring to be in shaders/fxc/ rather than shaders/)
  • Try to provide some useful info to "hit surface has no samples" warning
  • Increased MAX_NODES (Max AI nodes on a map) from 4096 to 8192
  • Only allow sound precache on level transitions/game load - this should help with sound precache overflows in single player games while still not breaking engine saves and level transitions
  • Added description to sv_sticktoground console variable
  • Changed description of bot_zombie console variable to explain what it does
  • Unhide *.ain (AI Nodes) loading errors (previously required developer 1), make them warnings
  • Moved map.pack to cache/map_pack.bsp
  • Updated "AI node graph is out of date" warning to include version number
  • Hide "Soundscape: <name>" message if soundscape_debug convar is 0
  • Disable sv_parallel_sendsnapshot by default - apparently still causes random unreproducible crashes that need solving first
  • Disable mouse3/4/5 input on DAdjustableModelPanel (Community Contribution)
handyman

Fixed

  • Fixed a case where voice chat would cease to work if voice_enable is set to 0 and back to 1
  • Fixed clientside errors happening before LevelInit not being sent to the server
  • Fixed commas in AddOutput map IO input causing the input text to be truncated (Now uses the special ESC symbol internally, like Hammer VMFs do)
  • Automatically delay HTTP calls until SteamHTTP is ready (for dedicated servers)
  • Queue lua_error_url messages until SteamHTTP is available (for dedicated servers)
  • Do not render drag'n'drop overlay for engine panels when UI mouse input is not active
  • Fixed ragdoll boogie (flopping around due to being touched my mega gravity gun) happening from +USE pickups/throws through Lua
  • Prevent crashes when trying to write too much data into a small texture
  • Fixed an infinite loop in weapon selection HUD with certain weapon names
  • Fixed mat_luxels 1 producing unusable results
  • Fixed a crash issue with close caption HUD
  • Fixed crashes to do with PCF loading due to weird formats
  • Fixed crashes with PCFs using ELEMENT_INDEX_EXTERNAL
  • Fixed crashes with point_worldtext during saving
  • Fixed particle related crashes when attached to an entity
  • Improvements for >2GB file support on non-Windows OSes
  • Prevent ToGL crashes on Linux when encountering a debugger break
  • Implemented cubemap seam/edge blending for HDR cubemaps
  • Added some sanity checks when loading VTF files and possibly running out of memory
  • Fixed HTLV clients getting kicked for reliable snapshot overflow in certain cases
  • Fixed some more minor memory leaks (from TF2 SDK)
  • Clean up g_SBoxObjects table in Sandbox gamemode when entities get deleted, to prevent potential memory leak
  • Fixed Player:GetCount not updating on entity delete (undo) after rejoin
  • Fixed a crash when using -hijack command line parameter
  • Fixed env_fog_controller.SetColorHDR map input not working
  • Fixed a NPE crash with CLuaInterface::IsType that can only happen with binary modules
  • More accurate water level for props, so props half submerged are no longer considered fully submerged
  • Fixed a crash when reloading materials
  • Fixed version console command not having proper Steam Beta branch value
remove_circle

Removed

  • Removed Novint Haptics Device integration
  • Remove voice_modenable in favor of voice_enable. There's no reason to have both, it only creates confusion.
  • Removed unused console variables that did nothing to prevent confusing players: r_fastzrejectdisp, mat_shadowstate, mat_maxframelatency, mp_usehwmvcds, mp_usehwmmodels, r_threaded_client_shadow_manager, r_threaded_renderables, r_decal_cullsize, r_drawopaquestaticpropslast, r_threaded_renderables, snd_mix_async, mat_parallaxmap, mp_teamlist, mp_teamoverride, mp_defaultteam, mp_allowNPCs, mat_disablehwmorph, sv_contact, sv_consistency, joy_yawsensitivity_default, joy_pitchsensitivity_default, option_duck_method_default, sv_stickysprint_default, mp_autocrosshair, mp_allowspectators, mp_friendlyfire, mp_fadetoblack, mp_chattime, mp_waitingforplayers_time, mp_waitingforplayers_restart, mp_waitingforplayers_cancel, mp_clan_readyrestart, mp_clan_ready_signal, mp_readyrestart, mp_ready_signal, mp_forcerespawn, mp_fraglimit, cl_burninggibs, r_propsmaxdist, cl_first_person_uses_world_model, mat_max_worldmesh_vertices, showparticlecounts, cl_team, cl_class, cl_SetupAllBones, cl_forcepreload, hud_centerid, hud_showtargetid
  • Removed -preload launch parameter
  • Delete replay.dll/replay.so which are unused
add_circle

Features

  • Added inputs to light_environment, removed point_clientcommand and point_servercommand since they do not work in Garry's Mod.
arrow_circle_up

Improvements

  • Increase MAXSTUDIOSKINS for studiomdl.exe from 32 to 64
  • Removed MAX_TEXLIGHTS limit from VRAD
  • Improve version 49 model support for VRAD static prop lightmaps
  • VRAD: -allowdynamicpropsasstatic also allows props without $staticprop
  • Apply sanity checks for model loading from base game client to VRAD
  • VBSP displays a warning/error when vphysics.dll/shaderapiempty.dll are missing, instead of crashing
  • More colors for Lightmap Grid in Hammer for super small (red) and super large (green) lightmap scales
handyman

Fixed

  • Fixed 3D grid not rendering correctly in Hammer due to recent changes
  • Fixed VRAD always forcing -verbose to being enabled
  • VRAD static prop lightmap system respects selected model skin (fixes a crash with malformed models as well)
  • Removed links to dead Valve websites, link to Valve Developer Community instead (Hammer & tools)
add_circle

Features

  • Added list.GetEntry (Community Contribution)
  • Added list.RemoveEntry (Community Contribution)
  • Added GM:OnClientLuaError( error, ply, stack, addon_name )
  • Added new info to util.GetModelInfo - IncludeModelCount, IncludeModels and HitBoxSets
  • Added ents.CreateClientRope
  • Added sql.QueryTyped (Community Contribution)
  • Added Color:Copy method (Community Contribution)
  • Added player.GetCountConnecting
  • Added ai.GetNodeCount
  • Added HexToColor, Color:ToHex (Community Contribution)
  • Added CtrlNumPad:GetValue1/CtrlNumPad:GetValue2 (Community Contribution)
arrow_circle_up

Improvements

  • Throw a non halting Lua error when giving invalid types to Entity:SetNetworkedVar (and the other SetNetworkedX functions)
  • Throw a non halting Lua error when trying to read net message past its end (Limited to lua_strict being set to 1)
  • Added engine_no_focus_sleep to blocked convar list
  • On dedicated servers, BRANCH returns "unknown" instead of "prerelease" - Since the builds are identical 99% of the time, "unknown" is the more expected value. This way, it's incorrect only in 0.01% instances of servers using the prerelease beta, instead of most of the time when not using any beta.
  • Apply changes to type() function for speed improvements (Server/menu) (Community Contribution)
  • CUserCmd:GetMouseY/X values on the server are now independent of client FPS of the associated player
  • constraint.Motor accepts a bool for "toggle" parameter (was only accepting 0 or 1)
  • Do not try to run HTTP requests with invalid URLs at all
  • Run GM:PlayerBindPress for unbound keys too
  • numpad library discards bindings to KEY_NONE (Community Contribution)
  • Remove tostring call on the argument of player.GetBySteamID64, since it is supposed to be a string at all times anyway (Community Contribution)
  • Optimized all player.Get* functions a bit
  • Optimized all ents.Get* and ents.Find* functions
  • Improved reliability of entity iterator functions
  • string.ToColor micro-optimization (Community Contribution)
  • Disallow calling Entity:Spawn on the world entity
  • Make util.RemoveDecalsAt distance a float, and use squared distances internally
  • Added IMesh.__tostring method with format IMesh [X verts, Y indices]
  • Throw a non halting error when ENTITY:GetRenderMesh returns a mesh. but not a material
  • Prevent a crashing issue with multicore rendering and IMesh:BuildFromTriangles
handyman

Fixed

  • Fixed double clicks not invoking GM:VGUIMousePressAllowed hook
  • Player:VoiceVolume works for local player without voice_loopback - This only works when using Steam voice, and only when not recording voice to file. (The default state)
  • Fixed IGModAudioChannel:GetPos returning invalid values sometimes
  • Fixed Player:GetAimVector clientside for non local players in vehicles always pointing in the same direction relative to the vehicle
  • Fixed worldspawn entity not calling entity create/remove hooks correctly clientside
  • Fixed clientside ragdolls not calling GM:EntityRemoved
  • Consistent Player:SteamID returns for multirun clients between client/server
  • Fixed VMatrix:InvertTR returning invalid values
  • Made VMatrix:GetAngles be less affected by matrix scale
  • Fixed "timeout" not working in HTTP on client, clamp it to 1-3600
arrow_circle_up

Improvements

  • Throw a non halting Lua error when hitting Lua file limit, to let players know that they have hit the limit
handyman

Fixed

  • Fixed a regression crash on Linux when almost finished loading a map
  • Prevent crashes with steamworks library when used too early on dedicated servers
  • Fixed console spam about invalid sprite orientation when the sprite material is simply missing
  • Fixed HLTV clients being kicked due to mismatching SteamID
  • Fixed a crash to do with env_projected_texture's texture
  • Fixed some security issues reported on HackerOne
  • Remove unnecessary return value in WorldPickerMouseDisable hook so GM:VGUIMousePressAllowed hook works more reliably for addons (Community Contribution)
  • Fixed Lua error with creator tool when trying to spawn NPCs that do not exist on the server (Community Contribution)
  • Blocked .vdf and specific .cfg files from being accessible by the Lua file library
  • Added one more known Lua backdoor URL to HTTP blacklist
  • Increased default value of mem_max_heapsize to 512, and block it from being changed by Lua API
  • Block datacachesize convar from being changed by Lua API, to prevent crashes when set to invalid values
  • Fixed monitor (and potentially other) materials in Hammer acting strangely when using "Fit" option in texture application tool.