Garry's Mod Logo
schedule 23 July 2025
Update

July 2025 Update

New game assets, and many, many other improvements.

Rubat
Programmer
Estonia
The biggest user-facing change in this update brings most of Counter-Strike: Source and Half-Life 2 Episodic content to Garry's Mod by default, with gracious permission from Valve. This means that you no longer need to own those games and have them installed to play on community maps that expect you to have this content.
Please do note that maps from those games are not included, so you'll still need to install those games to use their maps, and neither are voice over files and music, due to licensing issues.

This won't eliminate all instances of missing content (missing textures and ERROR models), but it will address a majority of instances of this issue. The remainder would just be addon authoring or installation errors.

This also means that Half-Life 2: Episode 2 content is now available in the spawnmenu for every player by default.
As usual, there is a large number of smaller changes - crash fixes, optimizations, additions, as well as other miscellaneous improvements for modders as well as players.

A complete list of changes can be found below this update post.
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