Garry's Mod Logo
Changes Header

Changes

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

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)
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)