Garry's Mod Logo
schedule 31 March 2021
Update

March 2021 Update

Server browser updates, new self-help feature and many updates to the Hammer Editor

Server browser improvements

This update brings major improvements to the server browser. The purpose of these changes is to help players find the content they are looking for more easily. First of all, gamemode categories were added to the server browser. This requires all server owners and gamemode developers to update their gamemodes and set an appropriate category. It may take a while for most gamemodes/servers to conform, but the goal of this change is to allow players filter gamemodes by these new categories and find what their are looking for easier. if you are a server host or a gamemode developer, you can find more info about this topic here: https://wiki.facepunch.com/gmod/Gamemode_Creation#category Secondly, the server browser now shows the location/spoken language of the server via a country flag icon. This setting is per server and is designed to help players more easily find servers from a preferred location and/or find servers with a common spoken language they can understand. If you are a server host you can find the details about country flags here: https://wiki.facepunch.com/gmod/Downloading_a_Dedicated_Server#locationflag And lastly the server browser got a few new filtering/sorting options, such as filtering servers by ping/player count and sorting the gamemode list by name or server count. These features may be changed in the future based on the long term feedback from players, developers or server hosts (such as which gamemode categories should be available in the server browser), so please do not hesitate to let us know what you think on our official Discord server (https://discord.com/invite/gmod), or in the Steam Discussions area of the Garry's Mod Game Hub

Problems menu

Another new feature is the Problems menu. Accessible from the main menu, it is designed to help players resolve common issues without needing to ask for help. The first tab reports Lua errors that have occurred during a play session. They are categorized per addon, with options to disable or uninstall the problematic addon, or to open the addon on Steam Workshop if possible. Players can easily copy the Lua errors (or other problems) via the Copy button on the right, enabling them to quickly report errors generated by the addons to the addon authors. The second tab called "Problems" analyzes the game and reports common issues, such as screen resolution being set too low, certain settings being disabling which cause graphical issues and more. These problems have a "Quick Fix" button where possible to quickly resolve the issue. In the future this menu will be expanded to report more issues and provide other maintenance services.

Hammer Editor improvements

This update also brings many changes to the Hammer Editor shipped with Garry's Mod. Many crash issues were fixed, new Sprinkler tool was added and many quality of life changes were introduced. The user interface was updated and now more closely matches the UI of your Operating System. If you are a mapper you will most definitely want to read the complete list of changes below. (Change List 4)

Things to watch out for

There are some Lua API changes that will break existing scripts. These changes are unfortunately a necessary evil, and will not take long to fix. Specifically the behavior of Vehicle.SetVehicleParams has changed. You will find all of the details in the change list below, but the big issue that was fixed is with the vehicle speeds, where you no longer need to manually adjust between Hammer Units and Inches if modifying data from Vehicle.GetVehicleParams.
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)
add_circle

Features

  • TTT: Added Japanese translation (Community Contribution)
arrow_circle_up

Improvements

  • TTT: Brazilian Portuguese translation - Changes to the highlights and to the AFK message (Community Contribution)
handyman

Fixed

  • TTT: Fixed an issue with LANG.AddToLanguage to do with missing languages (Community Contribution)
  • TTT: Fixed an instant reload exploit (Community Contribution)
  • TTT: Fixed ragdoll pinning HUD for innocents (Community Contribution)
  • TTT: Fixed karma affecting damage when karma system is disabled (Community Contribution)
add_circle

Features

  • Implemented a basic "Hold key to continue scrolling" feature to all ListPanel vgui elements, such as old server browser and Hammer's model browser
  • Added lua_dumptimers concommands (each realm has its own suffix) for debugging
  • Added lua_dumpfonts(_menu) for debugging
arrow_circle_up

Improvements

  • Try to avoid reloading the language multiple times on startup, and add some safeguards when trying to set the language to an invalid one
  • Other minor error handling improvements for Steam Workshop subscriptions
  • Use the new undo.AddFunction return value for "Make Statue" property
  • Made the message "CTextureAllocator::GetTextureRect has invalid texture handle! Expect crashes!" not as spammy
  • Improved handling of invalid texture handles when shadow rendering
  • Added infinite loop prevention for a rare case in shadow rendering
  • Do not try to load filesystem_steam.dll/so/dylib since we do not ship it or use it, should avoid a certain startup crash
  • Minor optimization in Base gamemode's CalcView hook (Community Contribution)
  • Updated CPackedStoreReadCache to its TF2 version, to hopefully fix an uncommon crash
  • Better error handling for getting subscriptions to hopefully prevent "Fetching subscriptions" rarely getting stuck forever for some people
  • Reduced spaminess of "Couldn't find/load font" warnings
  • Added some debug info to "%s overflowed reliable buffer" disconnect message
  • Added "total" count to mat_dump(textures/materials)
  • Saving tool presets now only resaves the changed preset group, not all of the preset groups
  • The default server browser now uses the connection address to connect, not the query address
  • Minor optimization with the PlayerColor material proxy (Community Contribution)
  • Minor optimization with the PlayerWeaponColor material proxy
handyman

Fixed

  • Fixed the game refreshing gamemode and map lists for menus multiple times while loading onto a map or disconnecting, remounting addons or changing gamemode
  • Fixed subscribing to addons while in game remounting addons more than once
  • Fixed memory sizes being displayed incorrectly in certain places with large values
  • Prevent spawnicons with sizes 33-63 from saving "_64" versions of the spawnicons, now uses the default 64x64 image without any suffix like it should
  • Properly remove unmounted (.gma) addon files from internal map so when something tries to access them we don't crash
  • Fixed models loaded by ClientsideModel() or similar methods losing their modelbounds data on map disconnect due to them being reloaded (for now, we don't reload such models)
  • Fixed gui.EnableScreenClicker()'s internal panel showing up after a screen resolution change while it is active
  • Fixes for potential crash issues when handling Lua entities in C++
  • Fixes for potential crashes with MOVECOLLIDE_FLY_CUSTOM, FLY_BOUNCE, FLY_SLIDE, DEFAULT
  • Fixed server browser blacklist being case sensitive
  • Missing the weapons/scripted_ents.Get function at entity creation no longer exits the game (For example when it's only missing clientside)
  • Let people know that -authkey is no longer needed in the srcds console if it is still in the srcds launch options
  • Fixed GameContentChanged hook running 3 times in a row in menu state
  • Fixed first file embedded in the BSP not being decompressed when needed
  • Fixed the default screen resolution selection so it should now select the desktop resolution
  • Added a nullptr check when generating the error texture to prevent crashes
  • Fixed PlayerWeaponColor material proxy hack for Super Grav Gun for cases where people override the default gravity gun (Community Contribution)
  • SteamAPI errors on non first page of Dupes/Saves/Addons/Demos will not hide the pagination so you can go back to the cached pages
  • Fixed a potential issue with Workshop Subscriptions not properly marking files as downloaded
  • Fixed deleting npc_manhack's sprites causing a crash when its deleted sprites are accessed by the NPC code
  • Fixed ErrorNoHalt not being considered a menu state error when it was called in the menu state
  • Fixed a bug with VPK file searching that would result in garbage data in file.Find
  • Fixed potential clientside crashes with ragdolls
  • Potential workaround for "SV_CreatePacketEntities: GetEntServerClass failed for ent 1." error message and crash when disconnecting from a listen server as a host while it is not empty
remove_circle

Removed

  • Removed files that are automatically sent from lua/send.txt
  • Deleted the Panel.IsModal existence check from DMenu now that the update is released and that check is no longer necessary
  • Removed unnecessary arguments in C++ => Lua workshop download callbacks in menu state
add_circle

Features

  • Enabled "Visual Styles 6.0", so Hammer's UI styles should now match OS
  • Added icons for env_sun, point_template and info_lighting_relative,
  • Added targetname keyvalue to light_environment (with a warning about file size) and updated the key names and help text of other keyvalues to better explain what each key does
  • Added "Sprinkle" tool from CS:GO (with an example sprinkle definition)
  • Added Random XYZ and Offset Z to Sprinkle tool
  • Added the Sprinkle Tool to the left sidebar
  • Added func_pendulum to the .fgd
  • Added info_lighting_relative to the fgd
  • Added (Set)LightingOrigin(Hack) inputs and keyvalues to prop_dynamic and all NPCs and (Set)ModelScale for prop_physics, prop_dynamic and NPCs
  • Added a preventative warning when trying to convert a displacement to an entity (Map with that won't compile)
  • Added fade distance keyvalues for prop_door_rotating
  • Texture Browser => Mark now marks decals/overlays if no solids with given texture were marked
  • Creating a new VMF will now spawn a simple box in front of the camera for orientation and select the "Selection" tool
  • Hammer will now select the nodraw texture on VMF load and when creating a new VMF rather than the first texture which will be random depending on custom content installed
arrow_circle_up

Improvements

  • Added a missing tooltip for ID_TOOLS_DISP_DRAWREMOVEDVERTS (One of the buttons on the top toolbar)
  • Horizontal resizing of Texture Browser now moves the buttons that would cover the current texture text
  • Adjusted the Texture Application Tool UI (Face Edit Sheet window) to fit longer texture names
  • Added extra width to the right side toolbar so Auto Visgroups can fit without a horizontal scrollbar
  • Adjusted icons for env_skypaint, lua_run (To remove the ugly white lines around the image) and info_lighting
  • Adjusted "Run Map [Advanced]" window to fit more parameters and made the newlines work in the Parameters text box
  • Increased textbox size of Texture scale so it fits the longest value it can have
  • Minor visual adjustments to Object Properties window
  • Made "Show Detail Objects" setting save across sessions
  • Moved the "use count" in texture browser above the texture name and fixed the opaque/self-illum/transparency icons to display properly
  • Made the "Entity Report" window a bit wider and stretched the bottom controls to the right edge
  • Changed the default 3D view type to "Textured Shaded" from "Wireframe"
  • Texture Browser's current selection is now a read only editable text box so you can copy from it
  • Replaced "Select Folder" dialogs in Options menu with the more modern ones
  • Increased the text fields width for many things in the first tab of Object Properties window
  • Model Browser now scrolls to the selected model
  • Marked "Hinge Axis" of prop_door_rotating as non functioning so there is no question about it. ("Fixing" it would break all existing maps)
  • "angles" keyvalue will no longer be created with values "0 0 0" when moving objects that have a model in the editor (such as decals)
  • Opening Entity Report for a different VMF when the Entity Report is already open will now properly recreate it for the currently active VMF
  • Added "CTRL+(SHIFT+)V" text to "Paste (Special)" in right click menus to let the user know about the existence of these shortcuts
handyman

Fixed

  • Fixed Auto visgroups UI being rebuilt for each solid face of the brush textures are being applied to, now rebuilds once
  • Fixed major hang when opening Texture Application Tool with many objects selected
  • Fixed multiple crashes due to .fgd BaseClasses being redefined with fewer variables than they had before
  • Applying textures via the "Face Edit Sheet" window or "Apply Current Texture" Tools no longer rebuilds visgroups UI for each object, only after all textures are applied, so it should be much faster now
  • Fixed custom detail.vbsp in map properties not having an effect in the editor itself
  • Fixed map views forcibly taking focus away from LightingPreviewWindow
  • Fixed custom "detailmaterial" not showing in the editor
  • Fixed the Ray-Traced Preview in Hammer being an error texture
  • Fixed a crash when trying to place a non existent Prefab using the Entity tool
  • Fixed a crash in Object Properties => Model
  • Marked certain Hammer config files as userconfig so they do not get wiped on branch change/verification (You can still delete them and verify to reset)
  • Fixed carving brushes with decals/overlays on them creating "Tell a programmer" windows
  • Fixed releasing LMB/RMB outside of the 3D view while painting displacements continuing to paint until you re-click in the 3D view
  • Fixed crashing issues with Object Properties Output/Input column sorting
  • KeyValue copy & paste now properly pastes the spawnflags (and updates the UI)
  • The Entity Report dialog will now close when its associated VMF is closed to prevent crashes
  • VRAD: Fixed 3d skybox being forced on certain leafs where 2d only skybox is expected
add_circle

Features

  • Added ClientSignOnStateChanged
  • Added SIGNONSTATE_* enums
  • Added 4th argument to GM:PlayerBindPress - button code
  • Added a 3rd argument to gmsave.LoadMap - a callback that is called after the save have been successfully loaded
  • Added DProperty_Entity panel that acts as a entity picker row
  • Allow returning false in undo.AddFunction to skip undo if it's no longer valid (Community Contribution)
  • GM:GameContentChanged is now also called for serverside/clientside realms like originally intended
  • Added DTree_Node.GetExpanded
  • Added DTree_Node.OnNodeAdded( newNode )
  • Added Panel.Set/GetX/Y (Uses Lua Panel.Set/GetPos internally) and switched Panel:Center(Horizontal/Vertical) to use them
  • Made PrecacheSentenceFile() shared (was serverside only)
  • Added spacers support to DComboBox (Community Contribution)
  • Added PreUndo and PostUndo hooks (Community Contribution)
  • Added Entity:GetAnimTimeInterval
  • Added Player:Set/GetActivity
  • Added Weapon:SetActivity
  • Added NPC:SetActivity
  • Added NPC:Set/GetMoveVelocity
  • Added NPC:UpdateTurnActivity
  • Added NPC:HasObstacles
  • Added NPC:AutoMovement
  • Added NPC:Get/SetTaskStatus
  • Added TASKSTATUS_* enums
  • Added NPC:Get/SetMoveInterval
  • Added NPC:GetIdealMoveSpeed
  • Added NPC:GetIdealMoveAcceleration
  • Added NPC:GetMinMoveStopDist
  • Added NPC:GetMinMoveCheckDist
  • Added NPC:IsMoveYawLocked
  • Added NPC:SetMoveYawLocked
  • Added NPC:MoveStart
  • Added NPC:MoveStop
  • Added NPC:MovePause
  • Added NPC:ResetMoveCalc
  • Added NPC:MoveClimbStart
  • Added NPC:MoveClimbExec
  • Added NPC:MoveClimbStop
  • Added AIMR_* enums
  • Added NPC:MoveJumpStart
  • Added NPC:MoveJumpExec
  • Added NPC:MoveJumpStop
  • Added NPC:ResetIdealActivity
  • Added NPC:IsGoalActive
  • Added NPC:ClearBlockingEntity
  • Added NPC:GetNavType
  • Added NPC:SetNavType
  • Added NAV_* enums
  • Added file.AsyncRead
  • Added ProjectedTexture.Get/SetShadowSlopeScaleDepthBias
  • Added ProjectedTexture.Get/SetShadowDepthBias
  • Added ProjectedTexture.Get/SetShadowFilter
  • Added ProjectedTexture.Get/SetTargetEntity
arrow_circle_up

Improvements

  • DProperties now accept the same row types (names) as the DTVar (Entity:NetworkVar) types are called
  • util.TableToKeyValues and CreateMaterial now throw a type error when given not a table to arguments that expect a table
  • util.StringToType now works with "entity" type ( EntIndex )
  • Updated the continue statement implementation in LuaJIT
  • SpawnmenuContentPanel:SwitchPanel now accepts nil to switch to no panel
  • Entity.SetTable now throws a type error when given not a table (used to silently fail)
  • SurfaceInfo.__tostring now contains the ID of the surface
  • steamworks.DownloadUGC now has an internal queue and displays download progress just like workshop subscriptions would
  • Steamworks library: More invalid Lua state safeguards, functions now throw type errors when not given a callback where one is expected
  • render.ReadPixel/render.CapturePixels now returns the alpha channel too (naturally uses more memory)
handyman

Fixed

  • Fixed Vehicle.SetVehicleParams taking "steering" parameters from "engine" table, fixed it affecting the speed of some cars due to vphysics shenanigans, fixed it needing boostMaxSpeed, maxRevSpeed and maxSpeed in different units
  • Setting size of a spawnicon AFTER the model should now work correctly (Still not recommend doing so though)
  • SpawnIcon:SetSpawnIcon no longer requires the file to be loaded elsewhere to work
  • Fixed DCheckBoxLabel's vertical alignment of the label (Community Contribution)
  • DTextEntry removes its autocomplete menu if it is open when the text entry itself is removed
  • Fixed an issue with DTree file folders where adding folders to an open node would not populate the added node unless the parent node was collapsed and then expanded again
  • Maintain nicer sorting for numbers in DListView column sorting (Regression fix for previous update)
  • Fixed Panel.LerpPositions not working well with Panel:Center*() functions (or with GetPos() in general)
  • Fixed a self crash with render.DrawSphere when giving the sphere zero/negative segment counts
  • Fixed Entity.GibBreakServer crashing with brush entities
  • Fixed render.SupportsHDR always returning false
  • Fixed Player.GetFriendStatus never showing "blocked" status
  • Fixed cookie library cache having outdated values in certain rare cases (Community Contribution)