Garry's Mod Logo
Changes Header

Changes

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

handyman

Fixed

  • TTT: Fixed "select language" strings in translations (Community Contribution)
  • TTT: Tuned shotgun headshot damage and gave shotgun very small accuracy boost to compensate for shotgun changes in base game (Community Contribution)
  • TTT: Show language names correctly in menu (Community Contribution)
  • TTT: Updated language files (Community Contribution)
  • TTT: Fix low-karma autokick evasion (Community Contribution)
arrow_circle_up

Improvements

  • Limited sv_loadingurl to http(s) only
  • Added nullptr safeguard to CFontTextureRegen (out of memory)
  • More potential crash prevention when loading textures and in Lua bindings
  • Safeguards for potential crashes in CShadowMgr relating to projected textures
  • Switched the "gain manager" for voice chat to the CS:GO one. (voice_avggain, voice_maxgain replaced by voice_gain_* cvars)
  • Increased internal buffers for map names to 128 characters, from 40, servers can now use maps with longer names
  • Slightly improved SSAO depth pass (NeedsDepthPass hook, render.GetResolvedFullFrameDepth), so it works correctly with props/NPCs and viewmodels (Bokeh DOF now works better)
  • Nicer error messages for FastDL download errors in console
  • Let mat_envmaptgasize override the default cubemap size if it is set to a value higher than the map's cubemap size
  • cfg/network.cfg is no longer considered userconfig, and is ran before autoexec.cfg
  • mat_dumpmaterials now has an optional argument to hide refcount 0 materials
  • Increased networked string limit (Doubled, to 4096)
handyman

Fixed

  • Deleting point_viewcontrol now also disables it instead of putting the player in an invalid state
  • Disable all active point_viewcontrol entities when loading a save to prevent softlocking the player
  • Added out of bounds checks for boneIDs in CIKContext::AddDependencies to avoid crashes
  • Added some nullptr safeguards to CMDLCache functions
  • Fixed potential crash with playing MP3 files
  • Made sure the "entityflame" entity also stops its own burning sound clientside in case it couldn't be stopped from the server due to PVS
  • Fixed crash issue when trying to pickup prop_vehicle_jeep with invalid physics
  • Fixed a potential crash when converting MATERIAL_VAR_TYPE_MATERIAL to a string
  • Fixed material shader parameters not loading correctly on Linux dedicated servers
  • Fixed for Linux file system find not properly handling partial wildcards (i.e. folder/*_suffix.txt where the filename folder/test_file_suffix.txt would not be found)
  • Fixed mat_showlightmappage using a DirectX8 material
  • func_breakable_surf plays its initial broken sound at the correct position even if it is moved by the physics gun
  • Fixed some console commands crashing when used without a player on the server
  • Fixed ent_remove being able to delete players
  • Added support for $boneflexdriver in models into the game
  • Fixed some cl_show_* cvar debug text overlapping itself or going offscreen
  • Potential fix for crashes due to removing fire particles when removing an entity on fire
  • Fixed crashing issues with trying to set/get flags on invalid physics objects
  • Do not disable collisions when parenting brushes to one another
  • Fixed parenting issues with func_movelinear, and a an issue with startSound possibly not restarting
  • Fixed the half life 2 shotgun hack affecting SWEPs
  • Fixed models not being flushed on level changes/disconnects when not hosting a local game (i.e. in multiplayer in general)
  • Fixed Super DoF creating errors when used outside of sandbox gamemode (Community Contribution)
add_circle

Features

  • Hammer: Added func_instance_io_proxy support to hammer/vbsp (in-game support is already present)
  • StudioMDL: Added -fastbuild option to studiomdl.exe that does not write/compute .sw.vtx and .dx80.vtx files
  • StudioMDL: Added more context to "Zero-size file or no sequences." studiomdl warning
  • StudioMDL: Added $boneflexdriver support to studiomdl
  • StudioMDL: Added support for "noanim_keepduration", "forceboneposrot", "scalebonelen", "bonedriver", "reverse", "appendanim" $sequence commands from CS:GO
  • StudioMDL: Added "framestart" and "nostallframes" $sequence commands from CSGO
  • StudioMDL: Added support of "autosteps" to "ikrule" in $sequence
  • StudioMDL: Added support for "percentstartloop" for $sequence
  • StudioMDL: Added "$dmxeyelid" and "$vcafile" commands
  • StudioMDL: Added "noautodmxrules" support to $model
  • StudioMDL: Added -vpfix command line switch that may fix high poly models with LODs and bodygroups getting some of their meshes on LOD 0 destroyed
arrow_circle_up

Improvements

  • StudioMDL: Use auto growing vectors for bunch of internals (vertices, normals, faces, texcoords, etc) instead of static arrays
  • StudioMDL: Changed mesh weights cut off from 0.05 to 0.0001 (matches CS:GO)
  • StudioMDL: Restored position epsilon for fuzzy vertex position comparisons to 0.05, from 0.01 as it caused issues with certain high quality models
  • Hammer: Increased MAX_MAP_OVERLAYS to 1024 (2x increase), increased MAX_MAP_BRUSHSIDES to a lot (~163k, ~3x increase), matching CS:GO limits
handyman

Fixed

  • Hammer: Fixed a crash when creating a new Manifest
  • Hammer: Fixed "Show Collision Models" setting not working in certain cases such as being in a Manifest
  • Hammer: Updated CMapOverlay to CS:GO's version - fixes most copying issues - different normals implementation
remove_circle

Removed

  • Hammer: Get rid of Hammer's "CFileChangeWatcher::AddDirectory" warning as it serves no purpose for the end user
add_circle

Features

  • Added DSlider.Set/GetNotchColor
  • Added SKIN.colNumSliderNotch
  • Added 2 new arguments to CanTool hooks - the toolobject and the button used (left/right/reload = 1/2/3)
  • Added missing ACT_ enums used by the default player model animations
  • Added NPC:GetBestSoundHint( types = all of them ) = table or nil
  • Added sound.GetLoudestSoundHint( type, pos ) = table or nil
  • Added ENT:GetSoundInterests for "ai" type SENTs
  • Added PhysObj.SetAngleVelocityInstantaneous
  • Added PhysObj.SetAngleVelocity
  • Implemented ENT:OnTakeDamage for nextbots
  • Added Player.Get/SetVoiceVolumeScale(0 .. 1) - Clientside only, sets the desired voice volume multiplier per player
  • Added Player.LocalEyeAngles(), which returns eye angles unmodified by being parented to a different entity (such as while being in a vehicle)
  • Added a 3rd argument to Pre/PostDrawTranslucent/OpaqueRenderables - isRendering3DSky
  • Added CMoveData.Set/Get for: ConstraintWidth, ConstraintSpeedScale, ConstraintCenter, FinalIdealVelocity, FinalJumpVelocity, FinalStepHeight
  • Added permissions library
arrow_circle_up

Improvements

  • Use ErrorNoHaltWithStack for numpad.OnDown/OnUp errors when given an invalid key
  • Added con_filter*, gm_video, mat_dxlevel and the new voice cvars to blocked cvar list
  • Switched Think, OnRemove and RunAI entity hooks to use the Lua string pool for "anim" and "ai" SENTs
  • Made Player.IsSpeaking shared (on server, it will return true within 0.1s of the last voice packet from a player, no packets are sent when the voice chat button is held but the player is not talking)
  • Reduced update rate of PlayerCanHearPlayersVoice when nobody is talking to 5 seconds
  • PathFollower functions can now accept player.CreateNextbot() entities instead of the NextBot SENTs. They will also throw proper errors when given invalid entities
  • Made DrawBokehDOF function available to addons, i.e. it is no longer a local function (Community Contribution)
  • Apply PhysObj.EnableMotion to all PhysObjects of a Jeep (it also works on Jeeps now)
  • Entity.GetModelMaterials will now return a complete list of materials if used on a brush model, including the map. Maximum for models is reduced to 128 (from 256) which matches other places in the engine when it comes to models
  • Micro optimization to player:__index (Community Contribution)
  • Forcibly disallow the resource library from adding .xbox.vtx and .sw.vtx files to the server's downloadables list
  • Make sound.Add soundscripts treated as overrides so they are cleaned up/restored on disconnect
  • gma.MountGMA now also clears list of missing materials
handyman

Fixed

  • sound.Generate now flushes its cache on level shutdown (And also with snd_restart)
  • Fixed dedicated server crashing when trying to reference invalid SteamAPI pointers after using the map console command, such as the HTTP functions
  • Fixed sounds not working correctly (playing everywhere) with clientside only entities: Footstep sounds, _G.CreateSound, Entity.EmitSound, Entity.StopSound, Entity.StartLoopingSound
  • Fixed ClientsideRagdoll crashing if called too early
  • CSpawnIcon::RebuildIcon(Ex) now clears the cached spawnicon material like it did before (so the spawnicon appears in its “loading” state again)
  • Fixed Entity.FollowBone glitching around clientside in certain cases
  • Fixed srcds workshop addons missing some fields in engine.GetAddons()
  • SteamID functions return the correct(-ish, the steam universe is hardcoded to "Public" one) value in singleplayer for the player serverside (It was already correct on client)
  • Fixed GetTouchTrace() crashing the game when the entity in the cached trace result no longer exists
  • render.RenderView now resets the "ShouldDrawLocalPlayer" cache, allowing the hook to be called again for those renders, fixing ShouldDrawLocalPlayer not working properly with multiple renders within a frame.
  • Prevent weld constraint assigning a global variable with the last created weld (Community Contribution)
  • Fixed performance discrepancy of Entity:GetMaterials() between different models
  • Fixed GM:PlayerLeaveVehicle not being called when the player is forced into a vehicle while being in a different vehicle
  • Entity.SetAngles properly sets angles on jeeps, they no longer snap back to old angles
  • Fixed some entities (such as props) reporting "took damage" as false in PostEntityTakeDamage when they are killed
  • Fixed some constraint library functions (such as HasConstraints, GetAllConstrainedEntities, etc) not functioning with the world entity
  • Fixed gmsave library (Spawnmenu save system) not saving constraints that are attached to the world entity on both ends (such as ropes)
  • Fixed duplicator library's Min/Max calculations for dupes
add_circle

Features

  • (Un)Subscribing to an addon while in a map now refreshes the Spawnmenu > Browse > Addons section to contain the new addons or remove the deleted addons
  • Spawnmenu > Browse > Games also refreshes when a game is mounted or unmounted
  • You can now open the workshop addon on Steam directly from Spawnmenu > Browse > Addons by right clicking
  • You can now right click on any folder in Spawnmenu > Browse > Games to quickly generate a spawnlist for that folder and its subfolders
  • Added duplicated NPC settings to the NPC spawnmenu tab under NPC categories so they are easier to find
  • Added "Games" label to the mountable games button to hopefully better direct players to it, and added "Not Owned" / "Not installed" labels so there's no questions about which icon means what
  • Added Problems panel which displays Lua Errors with quick way to disable/uninstall/report the problematic addon and reports common problems with a button to quickly fix the issue where applicable
  • Workshop content downloading (server addons, dupes, saves) after joining a server/singleplayer will now be displayed with the usual Workshop download progress interface
  • Server browser now has "Add to favorites" button for every server in every section, not just in the Favorites section
  • Server browser will now display an Outdated "tag" when a server is running a version of the game different to the version the client is running. Players can still try to join such servers
  • Added total server and gamemode count readouts to the server browser
  • Added sv_location convar for servers, which is used to set a custom flag icon for the server in the server browser so players can more easily find servers from a preferred location or of a language they can understand
  • Added more filtering/sorting options to the server browser: Gamemode list sorting by server count/name. Server filters by player count and ping
  • Added gamemode categories to the server browser to help players more easily find their preferred gameplay styles. Currently available categories are PvP, PvE, Roleplay and Other. It may take some time for community servers and gamemodes to define tags
arrow_circle_up

Improvements

  • The "Add current server to Favorites" button now changes to "Remove current server from favorites" if the server is already in favorites
  • Addons that have failed to download or are waiting to be downloaded will now display in the Addons menu. Their description also explains why they are not working
  • Do not copy old API .gma subscriptions to .gma.outdated files when an update is needed, the copied file is never used
  • Added map icons for new Fistful of Frags and CS:GO maps
  • Display a UI message when we failed to find models for an addon in Spawnmenu > Browse > Addons
  • Improvements to main menu's bottom navbar for tiny screen resolutions
  • Added "Any/All" aspect ratio to the Video options that shows all supported screen resolutions by the GPU, made it default
  • Added default bindings to Mouse4 and Mouse5 - “Previous weapon” and “Voice chat” respectively. Existing settings unaffected
  • Added extra space for map names in the server list for screens that can fit it
  • Adjusted the server info area of the server browser to show the full server name even if it is too long
  • Fixed player list in the server browser sometimes appearing broken due to long player names
  • Changed server browser search text fields placeholder text to better represent what they search through
  • Added an outline/border to text fields in server browser so they are visible better on bright backgrounds
  • More consistent styling for text boxes in the main menu between operating systems and beta branches
  • Improved performance of the translation system in the main menu
  • Improved performance of the "first click" on the "Start New Game" menu
handyman

Fixed

  • The decal limit now uses r_decals's current value (with a maximum of 8192), not its default value, which is 2048. Must be set before a map is loaded
  • Fixed Lua errors when generating Spawnmenu tabs when a modded entity or a weapon does not have a Category set, or it is not valid
  • menu_cleanupgmas now takes into account addons that updated to ISteamUGC API from the old API, which makes their old .gma in addons/ unused
  • Fixed subscribed addons not being able to update in the main menu due to them being mounted/used while updating
  • Fixed loading screen progress bar going backwards at certain points, and added more steps to the very end
  • Fixed sounds becoming too quiet sometimes such as underwater when using the new Sound Effects Volume slider
  • Added kill feed translation for point_template (Found on Half-Life 2: Episode 2 maps)
  • Fixed properties (Hold C > Right click on a prop) not working on map/brush entities
  • Fixed DMenuOptions text color not being affected by currently active Derma skin (Community Contribution)
  • Fixed border color of "Server is full" button in the server browser so it matches the color of the button itself (Community Contribution)
  • Fixed "Disable Sprays" checkbox sometimes not being clickable due to it being covered up the invisible part of the label above it
  • Fixed Motor tool applying torque incorrectly when attached to a prop that is rotated 90 or 180 degree from initial position
  • Fixed an issue where dragging icons from Browse => Addons/Games and resizing them would not properly move all other icons to fit the resized icon
  • Potential fixes for models becoming errors on map reload (Fixes L4D1 maps crashing on load)