Garry's Mod Logo
schedule 27 January 2021
Update

January 2021 Update

New mountable game, sound effects volume slider to help with voice chat volume and more.

This update adds a new mountable game to Garry's Mod - "G String". We are aware that people are asking for more mountable games including certain specific games. We require explicit permission for the target game's developer/publisher to make their game available for mounting in Garry's Mod. The game also has to run on the Source Engine. If a game you wish to be included in the mountable games list is not currently in it, it means we don't have that permission, or it's not a Source Engine game. This update also adds a separate volume slider for Sound Effects. The purpose of this is to address the "low voice chat volume" people have been reporting. What you want to do is set the "Game Volume" slider to maximum, as it affects all the sounds including voice chat. Then you want to set the new "Sound effect volume" and the "Music volume" sliders to the desired position.. (The music slider affects the music from Half-Life 2 campaigns) Doing this will make the voice chat as loud as the microphones of the speaking players are, i.e. the voice chat volume will no longer be reduced by the overall game volume. The new addon size readout will help decide what to install and what to avoid and what to keep right while in-game. As usual this update also brings plethora of new features and fixes for players and modders alike. You will find the entire change list for this update below.
add_circle

Features

  • Added “G String” game mounting support
  • Added a confirmation window when a server tries to force connect a player to a different server
  • Added "Followed" and "Favorites" categories to dupes, saves and demos sections of main menu and the spawn menu
  • The map, gamemode & server name of the server you are joining is now shown on the default loading screen. It also now goes dark mode based on player’s local time
  • Added "Disable Sprays" checkbox to the Options menu
  • Servers that failed to respond to the info/ping requests are now shown in the server browser under "Unreachable Servers" section
  • Added "Disconnect" button to the "open URL" and "connect to a server" confirmation dialogs
  • You can now CTRL+A in console (or in any other RichText GUI element such as default chat window) to select all text
  • Added "Size" display to every addon in the Addons menu
  • Added weapon slot 7, 8, 9 and 0 binds to Options menu as some mods/gamemode might be using more than 6 weapon slots
  • Added map icons for new maps of Team Fortress 2, CS:GO and Fistful of Frags
  • Added sound effect slider to Audio Options menu. This affects all sounds except for voice chat and music, both of which have their own sliders. This allows players to configure voice chat volume separately from the sound effects volume, making the voice chat louder if master ("Game") volume is set to maximum.
arrow_circle_up

Improvements

  • Throwing the last HL2 grenade now maintains previous/last weapon for gravity gun grenade throws
  • Limit maximum force for Thruster tool to 1e10 (from 1e35) to reduce crashing potential
  • Manually installed .gma addons now display their internal title in the Addons menu, not the filename
  • "sv_skyname" now applies changes live, without needing a map restart
  • “sv_gravity” now updates the physics gravity without needing a map restart
  • FOV in Jeep (and its reskins by addons) now matches player configuration in Options menu (Defaulted r_jeepFOV to 0 so it uses player's desired FOV)
  • Fixed r_jeepFOV not updating properly when re-entering a vehicle
  • Made the two Portal 2 DLCs also mount with Portal 2
  • ERROR spawnicons are no longer saved to disk when rendering them in the Spawnicon Editor, unless of course we are editing the icon of models/error.mdl itself
  • Sandbox Camera entity now also uses "noclip"/first person drive type, like Lamp
  • Removed the strange 10 unit distance 3rd person view from "noclip" drive type, now is true first person
  • Crouch and Jump buttons now have an effect in "noclip" and "sandbox" drive types (Hold C > Right click on entity > Drive), similar to normal player noclip
  • Ported more episodic behavior for the Gravity Gun - including being able to pick up props behind grate-type props
  • Removed max values from steam stats, they will now continue to increase after completing their associated achievements
  • Spawnmenu handles screen resolution changes better while on a map
  • Pressing CTRL while a RichText GUI element is focused will no longer reset selection, and neither will copying the text
  • Moved spawnicon queue to a convar (spawnicon_queue) which defaults to 0, and made it target 10fps not 30 when enabled
  • NPCs can now open brush doors if it’s in their way, unless the door specifically disables this
  • Added a replacement for a missing shader which fixes a bunch of Left 4 Dead 2 maps having wireframe textures in the skyboxes
  • Adjusted color of water on Left 4 Dead 2 maps
  • Added fixed versions of nuke_clouds materials for some CS:GO map skyboxes
  • Improved default Face Poser presets to not stretch faces across the whole map
  • Preset editor properly handles different convar capitalization (now forces lowercase) and handles cases where the preset contains less convars than the tool itself
handyman

Fixed

  • Fixed graphical glitches on Portal 2 maps when using flashlight (by overwriting skybox materials to have $ignorez set to 1)
  • Fixed certain lights on Portal 2 maps looking incorrect (Refract shader's $localrefract workaround)
  • Fixed Workshop addons not being able to update when joining a server after they have been already loaded by the game
  • Sprays now work in singleplayer
  • Fixed sprays not working for player slots 64-128
  • Fixed not being able to see updated spray image of a player that rejoins the server after changing their spray image until the game is restarted (Also fixes their old spray image becoming error texture)
  • Fixed Half-Life: Source scientists screaming non-stop after getting damaged
  • Fixed an issue with Vehicle duplication when there is no associated player (Community Contribution)
  • Fixed too many NPCs in a squad making new NPCs unable to shoot, which used to happen when spawning over 16 NPCs of the same type through the Spawnmenu at the same time
  • Fixed Gravity Gun sounds being audible only for its owner
  • Fixed weapons sometimes trying to play their sounds from underground, resulting them in not playing any sounds
  • Fixed the broken Gunship patrol pathing code from Half-Life 2 (without hl2_episodic 1) reaching infinite loops and hanging the game
  • Fixed default spawnlists counting as user config, which made them not restore due to a Steam bug if they are deleted
  • Fixed tp_coastal from Fistful of Frags crashing on map load
  • Fixed Faceposer's UI getting filled with 7px tall blank panels when switching Faceposer targets
error

Known Issues

  • Some Left 4 Dead 1 and 2 maps crash on map load. There is a workaround for it on the "dev" beta version of Garry's Mod, but it needs extensive testing before it can be released to public.
arrow_circle_up

Improvements

  • TTT: Changed a bunch of default values for console variables (Community Contribution)
  • TTT: Renamed Portuguese localization (Community Contribution)
  • TTT: Fixed Magneto Stick ragdoll pinning hint never showing for innocents (Community Contribution)
add_circle

Features

  • Implemented material conditional tests for GPU level from L4D+ games, assuming GPU level 3, reduces console spam and should improve how certain materials from those games look
  • Added the func_instance_io_proxy entity (No hammer support, just the entity for existing maps)
  • Added support for "boolean" type in .fgd files for GMod's Hammer
  • Added mat_dumpmaterials for debugging purposes
  • Added "Where Is" button to mat_texture_list to help debug addons overwriting materials/textures
  • trigger_push: Added "SetPushDirection" input
  • trigger_push: Added "Only falling players" key value
  • trigger_push: Spawnflag 4096 now acts like it does in CSGO - properly takes into account mass and multiple physics objects
  • Added ProcessID to game's title if -multirun is set (Windows only)
  • Added support for \ and \n to .properties
  • nav_quicksave 2 will now skip mesh visibility computation
arrow_circle_up

Improvements

  • Hammer: Display Raytraced preview in the 3d view when it finishes rendering
  • Do not autofocus a panel with SetTabPosition( 1 ), preventing ability to unfocus all text fields
  • Translate SDK_ shaders to their non SDK_ variants
  • You can no longer shoot when clicking on empty space around a modal panel
  • Increased MAXSTUDIOANIMBLOCKS to 512
  • Reset viewmodel skin, bodygroups and pose parameters when the active weapon changes
  • Dedicated Server Workshop: More descriptive error message when Steam failed to download an addon
  • Clientside gravity gun object detachment when a serverside weapon switch happens also destroys the clientside physics object the Gravity Gun creates just like dropping/punting the object does
  • Moved "Edit Instance" button to not cover the input/output icons in Hammer (All 3 also behave better when resizing the window)
  • Studio models now initialize their contents when creating a physics object
  • Cleaned up duplicate collision group rules
  • Changed error string for k_EResultBanned to not scare players. Used to say "VAC Banned", which is inaccurate
  • Added position to buildcubemaps console messages for debugging
  • Added additional info to "MaterialSystem: Out of memory in render data!" warning
  • Updated bass.dll (mp3free) to 2.4.15
  • Do not try to precache Half-Life 1 models/materials and Half-Life 2: Lost Coast harpoon on map load, for cases when those games are not even mounted
  • Serverside gibs now also inherit RenderMode and RenderFX
  • Changed "Model Warning: [%s] might be invalid! " warning to a more descriptive "Warning! '%s' animation requested bone %i, but model only has %i!"
  • More anti lag safeguards for ArmDupe net message
  • env_sprite_clientside can be animated now
  • Updated language files
  • Added extra info to "Failed to lock vertex buffer in CMeshDX8::LockVertexBuffer" error
  • Sandbox entities no longer draw their world tip/outline when the entity is set to not draw (Community Contribution)
  • Improved error handling of dedicated server workshop support
  • Hammer: Added HammerID to the "solid with X faces" and "group of X objects" descriptions for easier distinguishing/debugging
  • Hammer: Disallowed object groups (CMapGroup) to be hidden by the visgroup system - the objects themselves are hidden not the CMapGroup. Fixes "orphaned objects" warning
  • Hammer: Adjusted visgroup validation to allow solids be a child of an object group regardless of format version. Prevents those solids on old .vmfs from losing their visgroup
  • Hammer: Increased amount of recent files to 10, from 4
  • Updated Steamworks SDK to v1.50
  • Added FCVAR_USERINFO flag to gmod_language cvar
  • Decoupled sound.PlayURL/File's threads from server's tickrate, reducing the delay between function call and start of playback
  • Changed translation of base_ai class from "AI" to "Base SNPC"
  • Adjusted the message "C_PhysPropClientside::Initialize: PhysModelParseSolid failed for entity X" to include the model name for debugging
  • Added error messages when failing to allocate memory for model anim blocks
handyman

Fixed

  • Fixed not resetting LightmappedGeneric's shader constant 0 ($basetexturetransform) between renders, resulting in it affecting materials which do not have $basetexturetransform set (Also affects Hammer)
  • Right/Middle mouse clicking in Hammer 3D view works better now, by disabling mouse look only when it was started by middle/right clicking a 3D view
  • Shutdown CPlayerPickupController (player_pickup entity) if its associated player somehow becomes NULL to avoid crashing
  • Fixed "whereis" console command not working properly with floating .gma files
  • Fixed modal panels preventing player from interacting with the gui.OpenURL confirmation dialog
  • Prevent studiomdl.exe from writing to out of bounds memory (MAXSTUDIOANIMBLOCKS)
  • Fixed not having an active weapon causing ItemHolsterFrame to not be called on any weapon, which caused issues with the Gravity Gun
  • Fixed FOV desync between server/client for when r_jeepFOV is above player's desired FOV
  • Prevent potential crashes in CShaderAPIDx8::CopyRenderTargetToTextureEx
  • Fixed serverside console spam from the Paint tool
  • Prevent crashing if the BoneToWorld matrix is null while trying to render a model
  • Fixed a memory "leak" when building cubemaps, which would have resulted in crashing during the process
  • Fixed Hammer's Transform dialog (CTRL+M) improperly reading Y and Z coordinates
  • gm_spawnvehicle no longer creates Lua errors when used in dedicated server console
  • Fixed a crash when clearing the console while it is being excessively spammed
  • Applied bone setup crash fixes to Hammer too
  • Fixed crashing issue when trying to pick up an entity without a physics object, or when the physics object of currently carried object somehow becomes invalid (+use pickup)
  • Fixed prop_* entities resetting their render mode when they have fading distances set (now resets to transparent-color only if set to normal render mode)
  • Fixed func_tracktrain's outputs in Hammer
  • Fixed Lua errors when settings/users.txt is somehow missing
  • Fixed gmpublish.exe's "Can't edit workshop id X! (are you the author?)" message interpreting the ID as a 32bit integer
  • Fixed forced ladder move not resetting without an active ladder on player death, resulting in players who died while dismounting a ladder to respawn at the ladder
  • Fixed auto refresh not working when include is called from a C function
  • Fixed ability to crash the game when the dying player receives damage while in a death related hook. This results in Player.Alive returning false ( used to return true ) in PlayerDeath and DoPlayerDeath hooks for the dying player
  • Deleting an active player_pickup entity will now properly stop and cleanup the +use pickup stuff instead of leaving the player in an invalid state
  • base_ai entity now functions when spawned directly, rather than being a floating error so it can now serve as a code example
  • Better error messages when gamemode/weapons/scripted_ents tables do not exist or are invalid types. (sweps, sents errors also no longer close the game)
  • Fixed lua\vgui\dcolorbutton.lua not being added to the clientside download list
  • Prevent crashes when dying NPCs create ragdolls and apply infinite force to them
remove_circle

Removed

  • Deleted lua/menu/progressbar.lua (unused file)
add_circle

Features

  • Added GetTimeoutInfo() - returns bool IsTimingOut, float GetTimeSinceLastReceived
  • Added Panel.IsModal
  • Added Panel.IsPopup
  • Added "previewurl" to steamworks.FileInfo, meant as a replacement to previewid
  • Vector.Mul can multiply vector by vector now
  • Added PLAYER.MaxArmor (player classes)
  • Added basic support for bone followers on "anim" type SENTs - Added Entity.CreateBoneFollowers, Entity.UpdateBoneFollowers, Entity.DestroyBoneFollowers (All serverside only)
  • "anim" type sents will render their physics object with vcollide_wireframe if there exists one clientside (yellow for clientside physics object, green for model index vcollide)
  • Added GM:PreRegisterSENT
  • Added GM:PreRegisterSWEP
  • list.Add now returns the index the object was placed at (Community Contribution)
  • Added ITexture.GetNumAnimationFrames()
  • Added ENTITY:GetPreferredCarryAngles( ply ) ("anim" type SENTS only)
  • Added Player argument to GM:GetPreferredCarryAngles
  • Added serverlist.PingServer (menu state)
  • Added input.GetAnalogValue( AnalogAxis )
  • Added ANALOG_* enums
  • Added OnRequestFullUpdate serverside game event ( has all the same data as player_connect_client event, save for bot field )
  • Added .xml, .csv, .jpeg, .mp3, .wav and .ogg file formats to file.Write whitelist
  • Added ErrorNoHaltWithStack
  • Added OnPlayerPhysicsPickup and OnPlayerPhysicsDrop hooks, which handle +use physics pickup
  • Added optional argument to IGMODAudioSteam.SetTime - helps reduce the lag when seeking large MP3 files
  • Added NPC.SetSquad
  • Added NPC.GetSquad,
  • Added NPC.IsSquadLeader
  • Added NPC.GetNearestSquadMember
  • Added ai.GetSquadLeader
  • Added ai.GetSquadMemberCount
  • Added ai.GetSquadMembers
  • Added NPC:GetIdealActivity
  • Added NPC:SetIdealActivity
  • Added ENTITY:OnMovementFailed
  • Added ENTITY:OnMovementComplete
  • Added ENTITY:OnChangeActiveWeapon( old, new )
arrow_circle_up

Improvements

  • Added activator & caller arguments to Entity.Fire, both default to NULL
  • Switched base_entity:TriggerOutput to use Entity.Fire so it uses the internal engine event queue system
  • Switched vgui.Create missing element warning to ErrorNoHalt
  • Made GetPhysicsAttacker's first argument default to 1
  • ENT:HandleAnimEvent can now return true to suppress the default action
  • DProperties handles non existing panel types more properly
  • Panel.KillFocus on EditablePanel now actually kills focus
  • Disallowed DoModal on non Popup panels to prevent bricking the game
  • Player.ConCommand blocked message is now an ErrorNoHalt like RunConsoleCommand
  • "connect" console command is now completely blocked on server realm
  • ENT.Initialize for clientside only entities now acts similarly to networked entities (no longer is automatically called, tied to Entity.Spawn)
  • Lua created materials (CreateMaterial) are now cleaned up on map shutdown
  • Removed prefix restrictions from util.IsValidModel
  • Allowed weapons with a CalcView function to work with player_manager view overrides (fixes taunt camera for SWEPs with a custom CalcView)
  • net.WriteData's length argument is now optional, will ErrorNoHalt when given incorrect length
  • More strict type checking for Entity.SetMaterial
  • ErrorNoHalt when file.Open is given incorrect read/write mode (used to silently fail)
  • Added an ErrorNoHalt when giving net.WriteData not enough data
  • SANDBOX:PlayerSpawn* hooks should consistently no longer receive NULL players
  • net.ReadData errorNoHalts about invalid length (<0, or above 64k)
  • halo library no longer tries to render entities that are set to not to draw
  • Added "volume_sfx" and "snd_musicvolume" to convar blacklist
  • Replaced the wiki link in the "Calling net.Start with unpooled message name!" error with "(Did you forget to call util.AddNetworkString serverside?)"
  • Better argument type checking for Compile/RunString(Ex)
  • Display a nicer message when Compile/RunString(Ex) are trying to run bytecode
  • AddCSLuaFile now displays an error message instead of silently failing when it refuses to add a file with bad symbols to the Lua datapack
handyman

Fixed

  • Fixed an infinite loop issue with steamworks.GetList which caused last page of workshop items to never load
  • Fixed Player.SetActiveWeapon while holding a prop with grav gun putting the prop into an invalid state
  • DMenu now better handles opening for modal panels (when it is parented to such panel manually)
  • Fixed a bug with ENT:TriggerOutput when deleting limited usage (Times > 0) outputs
  • steamworks.GetList will always return a table, even on failure. (Fixes infinite loading when loading published items but there are none)
  • Fixed color_white corruption to do with the Color tool/Duplicator system (Community Contribution)
  • Fixed entity function type consistency for Entity.ShouldPlayPickupSound, Entity.SetCreator and Entity.UnFreezable
  • Fixed "vertexlitgeneric" not doing anything as a parameter of Material(), now sets the expected shader, prevents $vertexalpha 1
  • Added additional checks for net.WriteData to prevent crashes
  • Fixed Entity.Set(Sub)Material leaking material reference count on entity removal
  • NextBot NPCs are actually considered NextBots on client
  • Fixed potential issues with serverlist.PlayerList (not canceling the request when destroyed too soon, trying to call nil objects)
  • Fixed inconsistent NEXTBOT:OnEntity(Lost)Sight behavior
  • DComboBox properly updates its text color
  • Fixed non string Lua errors not displaying properly in console
  • ProtectedCall() now displays Lua errors properly in console
  • Fixed mouse wheel events not being picked up by GM:PlayerButtonDown/Up
  • Fixed IMesh.BuildFromTriangles always counting one too many vertices
  • Fixed a crash issue with Global.Mesh when given a material with vertex format 0, now prints a warning and assumes no material set
  • Spawnicon properly initializes self.OverlayFade, and doesn't spawn errors when mods override its PANEL.Paint
  • Fixed using mixed types (strings and numbers for example) within a single DListView column creating Lua errors when sorting
  • Fixed Lua errors when giving a rope constraint an empty string as the material to use
remove_circle

Removed

  • Removed util.RelativePathToFull as it has no legitimate uses
  • Removed string.__index error [and fix false values in the string metatable not returning] (Community Contribution)