Garry's Mod
A sandbox game for the PC, Mac and Linux

Garry's Mod is a Sandbox Game based around the idea of building. Unlike most other games there aren't any objectives - you can't lose and you definitely can't win.


July 2016 Update


A new update has been released!

This update is optional, however it is strongly recommended that server owners install it.
Clients will automatically update via Steam when the game is restarted.

Peer-To-Peer Listen Servers

Servers that are created via the main-menu’s “Start New Game” button can now be connected to via Steam’s P2P networking. This means that – on most networks – friends are able to connect to each other’s games without any special network configuration being required (e.g. port forwarding).

To use it, all you have to do is use your friends list to join/invite a friend!

Queued (Multi-Core) Rendering

This isn’t finished yet, but queued rendering should be pretty robust now. Any changes in performance are entirely dependent on your hardware and the scene being rendered.

You can enable it by running a few commands when you launch the game (press Shift+Escape to open the console):
gmod_mcore_test 1
mat_queue_mode -1
cl_threaded_bone_setup 1

Other Changes

  • NEW Added mat_requires_rt_alloc_first ConVar from upstream.
  • UPD Lua console commands are now removed when disconnecting from a server/changing level.
  • FIX Replicated Lua ConVars are now properly synched with the server.
  • FIX Scripted weapons now function correctly when switching to a weapon with no ammo.
  • FIX Clients will no longer be disconnected with the reason “CL_CopyExistingEntity: missing client entity”.
  • FIX Crouch-jumping will no longer cause the screen to flicker after a certain amount of server up-time.
  • FIX Fixed rare crash that occurs when increasing the outgoing network buffer size for game-state snapshots.
  • FIX Ropes no longer cause the game to not properly close on exit.
  • FIX Fixed issue that could cause the “GetLuaTable != TABLE” crash to occur on level change.
  • FIX file.Find() now sorts its results properly. The default behavior is unchanged.
  • FIX HTTP() no longer leaks request references and won’t crash if the Lua state is destroyed during a request.
  • FIX Some security fixes.

April 2016 Update


A new update has been released!

This update focuses on fixing bugs and improving performance as well as adding some new features for modders.

As usual, servers will need to be updated.
Clients will automatically update when you restart your game.

Thanks to everybody who helped with testing the update and reported any bugs/problems.

Engine Changes

  • NEW Added ‘mat_reloadtexture’ console command. It reloads a single texture
  • NEW Added ‘sv_crazyphysics_wheels’ console variable. Toggles crazy physics detection for vehicle wheels
  • NEW Added lua_findhooks (contribution by TheFreeman193)
  • FIX Texture auto-refresh no longer reloads every texture in the game and can reload JPEGs
  • FIX Fixed TLK_PLAYER_ASK_FOR_BALL console warning message
  • FIX Fonts on Windows and OSX can now display non-latin characters
  • FIX Fonts contained within Workshop addons are now properly loaded
  • FIX HTML panels and anti-aliased text are now correctly alpha-blended on OSX
  • FIX The game can now be played on OSX from case-sensitive filesystems such as NTFS
  • FIX Workshop Lua files now emit errors with the correct file path
  • FIX Gamemodes within addons now have their ‘entities’ and ‘content’ directories mounted
  • FIX Cyclic entity parenting no longer crashes the game
  • FIX Navigation meshes can now be loaded from within addons
  • FIX Engine tools now work. You can access them by launching the game with the “-tools” parameter
  • FIX Airboat guns no longer cause a crash if fired as a player is joining
  • FIX Airboats no longer cause a crash when attempting to eject a NULL player
  • FIX Multiple bug fixes for hammer
  • FIX Armor is now networked as a 32-bit unsigned integer
  • FIX Health and max-health now properly update when changed on “anim” SENTs in singleplayer
  • FIX “kill” input no longer puts players in an invalid inescapable state
  • FIX The pistol now uses less network bandwidth when equipped
  • FIX Fixed corruption in the SVC_PacketEntities net message. This should stop disconnections from servers with ‘random’ reasons and some other odd behaviour
  • FIX Fixed crash issues with npc_cscanner
  • FIX Fixed Nextbot NPCs being deleted on map spawn
  • FIX Fixed a crash related to creating particle effects
  • FIX Fixed crash when CNewParticleEffect has an invalid particle collection
  • FIX Fixed detection of VRAM size when you have more than 2GiB
  • FIX Fixed hang when loading certain fonts
  • FIX NPCs will now play footsteps when walking
  • FIX Fixed HTML menu erroring when loaded outside GMod (contribution by Bo98)
  • UPD The max size of reliable snapshots has been increased from 256KiB to 1024KiB. This should reduce or eliminate any “Couldn’t send snapshot.” errors
  • UPD Major improvements to text rendering on OSX
  • UPD The console can now be opened by pressing shift+escape. The old behaviour remains unchanged
  • UPD Improved delta encoding of ragdoll bone positions/angles. They should now use slightly less bandwidth
  • UPD Improved the error message emitted when patch materials have failed to load
  • UPD Limited length of URL in JavaScript error prints
  • UPD Improved GMA mounting performance
  • UPD gamemodes/, lua/, addons/ can no longer be marked for FastDL downloads
  • UPD Game will no longer try to load non TTF fonts and crash

Game Changes

  • FIX Doors now properly play their open/close sounds even when penetrating the world
  • FIX Fixed vertical text alignment on spawnicon labels
  • FIX Entity spawn/remove effects should now always play properly in Sandbox
  • FIX Footsteps now properly alternate between left/right clientside
  • FIX Animations such as swimming and crouching are now properly applied to all players
  • FIX Clientside debris will no longer get stuck inside itself
  • FIX S.L.A.M. weapons now play their sounds (still requires HL2:DM)
  • FIX Suit rechargers now stop playing their sounds when removed
  • FIX weapon_rpg no longer plays its holster sound every time it leaves the PVS
  • FIX Chatbox auto-completion no longer fails when a player’s name contains certain characters (contribution by Chewgum)
  • FIX Players can no longer noclip when dead (contribution by code_gs)
  • FIX Footsteps no longer play while players are dead (contribution by code_gs)
  • FIX Fixed bypass of certain prop-protection addons when right clicking with Hydraulic/Muscle/Slider/Winch tools (contribution by Mista-Tea)
  • FIX Ceiling turrets no longer play infinite sounds when removed
  • FIX Fixed npc_grenade_frag creating new effects when picked up by gravity gun without deleting the old ones
  • FIX Fixed Estonian language having Ethiopian flag
  • FIX Fixed duplicator support for old Scripted Entities
  • FIX Fixed face poser not posing the last flex on some models (contribution by NO-LOAFING)
  • UPD Prop spawn/Entity Removed effects now appear properly all of the time
  • UPD Updated some pre-rendered spawnicons
  • UPD Corpses in Trouble in Terrorist Town now retain any blood splatters and the colour of the deceased player
  • UPD Disallowed non admins to edit admin only entities
  • DEL Removed unused html files

TTT Gamemode Changes

Lua API Changes

Security Changes

  • FIX Stopped certain file names from tricking the netchannel’s security filters
  • FIX Fixed exploitable behaviour in the duplicator tool (reported by Velkon)

March 2016 Update Attempt #2


A new update has been released!

This update is a small part of the previous update and focuses on fixing crashes and exploits.

We apologize, once again, for the problems caused by previous update and will work towards fixing those problems as well as doing our best to prevent such things from happening in the future.

This update is optional, however it is strongly recommended for server owners to install it.
Clients will automatically update when you restart your game.

Thanks to everybody who helped with testing the update and reported any bugs/problems.


  • NEW Added whereis console command to menu state, helps with checking if addons are overriding a specific file
  • FIX Fixed SetParent making crazy-physics system mad. Vehicle wheels should stop disappearing
  • FIX Fixed some crashes related to shadows
  • FIX Fixed some crashes when NPCs take damage with a null inflictor
  • FIX Fixed WorkshopDL addons not updating properly
  • FIX Fixed issues where game.MountGMA would not always reload models properly
  • FIX Fixed Lua panic when returning from lua_run, lua_run_cl, RunString, BroadcastLua, Player:SendLua
  • FIX Fixed multiple DoS attack vectors
  • UPD Forced player simulation (when players are not sending usercommands) now increments command number & changes random seed

March 2016 Update


A new update has been released!

This update focuses on fixing bugs and gives text rendering a little love.

As usual, servers will need to be updated.
Clients will automatically update when you restart your game.

Thanks to everybody who helped with testing the update and reported any bugs/problems.

Today’s update is being reverted due to some unexpected problems that were encountered. The most important changes that were included will be released shortly as a server-optional update (some crash and exploit fixes).

The remaining changes will be added back when they are more stable.

February 2016 Hotfix #2


A minor update has been released!

This update fixes a few issues introduced by the update earlier toady. Sorry for the delay.

If your servers are encountering any issues, make sure you have updated them.

You can check out the full change log below:

Game Changes

  • FIX Parented entities (such as vehicle wheels) should no longer disappear after a while in certain cases
  • FIX Game no longer crashes when attempting to mount a VPK archive twice
  • FIX Legacy addons are mounted with lower priority if they contain files that might break sounds, materials, or the HUD
  • REV Mounted GMAs are once again not refreshed on disconnect – it was really slow

February 2016 Update #2


An update has been released!

This update fixes a few long-standing bugs and adds new functionality for developers.

As usual, servers will need to be updated.
The update will be automatically downloaded when you restart your game.

If you are having issues related to models/materials/sounds, make sure that you do not have any illegitimate content packs installed for games you do not own, such as Counter-Strike: Source.

Thanks to everybody who helped with testing the update and reported bugs/problems.

Game Changes

  • NEW Added game.MountGMA( path )
  • NEW Added File:ReadLine()
  • NEW Anti-Cheat ConVars: sv_maxusrcmdprocessticks, sv_maxusrcmdprocessticks_holdaim, sv_maxusrcmdprocessticks_warning
  • NEW Crazy physics ConVars: sv_crazyphysics_defuse, sv_crazyphysics_remove, sv_crazyphysics_warning
  • NEW Hibernation ConVars: sv_hibernate_think & sv_hibernate_drop_bots
  • FIX NextBots no longer simulate faster than normal players
  • FIX Turrets’ sounds are now cleaned up properly on removal
  • FIX AvatarImage panels no longer leak memory when removed
  • FIX Toggling vehicle third-person is no longer wrongly predicted
  • FIX CTriggerCamera entities no longer crash the game in multiplayer
  • FIX Entity:SetSubMaterial() now works on bonemerged entities
  • FIX Fixed sub-material overrides affecting the first rendered entity in certain hooks such as PostPlayerDraw
  • FIX Entity:SetBoneMatrix() and Entity:GetBoneMatrix() no longer crash when given bad input
  • FIX ConVars created with CreateConVar() and CreateClientConVar() now have their default value set and do not leak memory
  • FIX Panel:SetPaintedManually() and Panel:PaintManual() now function correctly
  • FIX VMatrix divisions no longer crash when given non-userdata input
  • UPD Maps now prioritise content from their own game, this means that TF2 and Half-Life 2 maps load the correct content (postponed to future update)
  • UPD Left 4 Dead 2’s DLC content is now mounted
  • UPD Anti-Speedhack improvements
  • UPD Windows SRCDS console now outputs text with UTF-8 encoding
  • UPD Crazy physics catching system has been improved, making it difficult to crash servers with physics quirks
  • UPD Parallel snapshot sending is now disabled by default, this was a common cause of server crashes when lots of data was being transferred
  • UPD Players are now simulated even when they are not sending any data to the server
  • UPD Flagged some potentially abusable console commands as cheats
  • UPD include() now passes returned values from the loaded file
  • DEL Removed ConVars: sv_voicecodec, sv_max_usercmd_future_ticks, sv_removecrazyphysics

February 2016 Hotfix


A minor update has been released!

This update fixes a few regressions introduced by the February 2016 update and some other issues.

If you are encountering issues, make sure that you have updated your servers.

You can check out the full change log below:

Game Changes

  • FIX Vector no longer returns an uninitialised vector object when called with zero arguments
  • FIX Joining a server with the wrong password now gives the correctly translated “Bad Password.” response
  • FIX Fixed inconsistent angle networking on Linux servers
  • FIX Fixed exploitable behaviour in surface.CreateFont

February 2016 Update


An update has been released!

This update fixes a few regressions introduced by previous update and adds some new functionality for developers.

And thanks to everyone who helped testing the update and reported bugs/problems.

As usual, servers will need to be restarted.
The update will be automatically downloaded when you restart your game.

You can check out the full change log below:

Game Changes

  • NEW Added CNavArea.SetParent( CNavArea, type )
  • NEW Added CNavArea.GetParent() – returns CNavArea
  • NEW Added CNavArea.GetParentHow() – returns NavTraverseType
  • NEW Added CNavArea.ClearSearchLists()
  • NEW Added CNavArea.SetTotalCost( float )
  • NEW Added CNavArea.AddToOpenList()
  • NEW Added CNavArea.GetTotalCost() – returns float
  • NEW Added CNavArea.IsOpenListEmpty()
  • NEW Added CNavArea.PopOpenList() – returns CNavArea
  • NEW Added CNavArea.IsBlocked()
  • NEW Added CNavArea.IsOpen()
  • NEW Added CNavArea.IsClosed()
  • NEW Added CNavArea.RemoveFromClosedList()
  • NEW Added CNavArea.UpdateOnOpenList()
  • NEW Added CNavArea.AddToClosedList()
  • NEW Added CNavLadder.ConnectTo( CNavArea )
  • NEW Added net.WriteMatrix()
  • NEW Added net.ReadMatrix()
  • NEW Added support for ortho views in CalcView and cam.Start
  • NEW Added (safe) ConVar methods: SetString, SetFloat, SetInt, SetBool
  • NEW Added CNavLadder.SetBottomArea( CNavArea )
  • NEW Added CNavLadder.GetBottomArea()
  • NEW Added CNavLadder.SetTopBehindArea( CNavArea )
  • NEW Added CNavLadder.GetTopBehindArea()
  • NEW Added CNavLadder.SetTopForwardArea( CNavArea )
  • NEW Added CNavLadder.GetTopForwardArea()
  • NEW Added CNavLadder.SetTopLeftArea( CNavArea )
  • NEW Added CNavLadder.GetTopLeftArea()
  • NEW Added CNavLadder.SetTopRightArea( CNavArea )
  • NEW Added CNavLadder.GetTopRightArea()
  • NEW Added game.GetIPAddress()
  • NEW Added game.KickID()
  • NEW Added Player.AnimSetGestureSequence( slot, seq )
  • NEW Added “body” and “type” for HTTP()
  • NEW Added PathFollower:GetAllSegments()
  • NEW Added CNavArea.GetExtentInfo()
  • NEW Added “AllSolid” to trace result
  • NEW Added optional parameter to poster command to save each frame as a separate image
  • FIX Fixed VMatrix:SetScale() scaling the 2nd/3rd rows incorrectly
  • FIX Fixed “destination group” problem in multiplayer with npc_template_maker
  • FIX Fixed cyclic reference detection in util.TableToJSON
  • FIX Fixed cyclic reference detection in PrintTable
  • FIX Fixed buffer over-read in input library
  • FIX Fixed collision bounds having no influence on nextbot navigation
  • FIX Fixed net.ReadType for TYPE_NIL
  • FIX Fixed debugoverlay spamming dedicated server console to oblivion
  • FIX Fixed a multiplayer crash issue with combine auto cannon on ep2_outland_09
  • FIX Possible fix for post processing shaders not working properly on Linux/OSX
  • FIX Fixed model indices above 2048 not networking to clients properly
  • FIX Fixed DFrame:Center when parented inside a panel not at [0, 0]
  • UPD net.WriteType support for VMatrix
  • UPD Catch crash condition in CBaseAnimating::TestHitboxes
  • UPD Error/ErrorNoHalt now call menu state’s OnLuaError hook
  • UPD Improved error handling for NextBot coroutines
  • UPD Don’t try to load binary modules that have the same name as a base Lua module
  • UPD Merged functionality of RunString/RunStringEx
  • UPD Lua kick reasons can no longer be language strings
  • UPD Home/End keys now work in Windows SRCDS consoles
  • UPD Opening the chatbox while it is invisible/disabled no longer changes player view angles
  • UPD Chatbox entry max char count is now correct (126)
  • UPD TextEntry:OnTextChanged is now called after undo operation
  • UPD -noworkshop now also prevents SteamAPI from being initialized too soon on dedicated servers
  • UPD utf8.offset now conforms to Lua 5.3 spec
  • UPD More friendly Steam API failure error messages ( for retrieving subscribed addons )
  • UPD Updated the DirectX out of date popup to allow the user to try to launch the game anyway
  • UPD Don’t let players enter vehicles that they are a parent of (stack overflows!)
  • UPD Limited engine.LightStyle to values that do not crash the game ( 0-63 )
  • UPD Stop g_blurx/g_blury shaders from increasing output brightness
  • UPD ENT:SelectWeightedSequence & Weapon:SendWeaponAnim no longer crash when given invalid acts
  • UPD Calling gui.HideGameUI at the wrong time no longer stops the HUD from rendering
  • UPD Context menus no longer remain when their parent is focused
  • UPD Changed scheme of ClientDLL context menus to match DMenu
  • UPD Weapon selection via key bindings should now always work on SWEPs
  • UPD Vector() can now take a Vector as its first argument and return a copy of that vector

GitHub changes

Community Contributions

January 2016 Update


An update has been released!

This update fixes a few exploits, regressions introduced by previous update and some specific performance issues.

And thanks to everyone who helped testing the update and reported bugs/problems.

As usual, servers will need to be restarted.
The update will be automatically downloaded when you restart your game.

You can check out the full change log below:

Game Changes

  • NEW Added mat_viewportupscale to blocked convar list
  • NEW Added PANEL:SetDrawLanguageID(bool), can be used to hide the language selection box in text entries when typing non-US/UK/whatever
  • NEW Added loading bar text when waiting for Steam auth
  • NEW Added command line option to cause BAssert to dump (Windows only)
  • NEW Added bounds checking to render.GetScreenEffectTexture
  • NEW Added Awesomium panel hooks: OnDocumentReady, OnChildViewCreated, OnChangeTitle, OnChangeTargetURL
  • NEW Added Awesomium panel methods: Refresh, Stop, GoBack, GoForward, GoToHistoryOffset
  • NEW Added Awesomium panel hooks: OnBeginLoadingFrame, OnFinishLoadingFrame
  • NEW Added interface for concurrent async server content downloads. Currenty used for Workshop content.
  • NEW Added extra debug output for BASS.DLL Initialization
  • NEW Added test BASS.DLL config to hopefully help with weird “mp3s dont load with error 41″ cases
  • FIX Fixed the “steam id 0 fake players inflate server player count” exploit
  • FIX Fixed clientside SteamID spoofing
  • FIX Fixed not being able to join a LAN server
  • FIX Fixed npc_manhack not triggering npc_maker/npc_template_maker’s OnAllSpawnedDead output
  • FIX Fixed a server crash caused by combine_mine changes in last update
  • FIX Fixed a crash issue with “quit” commands on srcds when having workshop addons installed
  • FIX Fixed a crash when entities with invalid physobjs were in the way of a rotating door
  • FIX Fixed ai.GetScheduleID and ai.GetTaskID
  • FIX Fixed a possible crash issue caused by global NW2Vars
  • FIX Fixed buildcubemaps not working properly
  • FIX Fixed Awesomium view leak
  • FIX Fixed leaked thread in main-menu GMA downloader
  • FIX Fixed addon extraction assert/leaked thread handles
  • FIX Fixed incorrect line numbers being reported for errors when using C-styled multiline comments
  • FIX Fixed Entity.IsRagdoll not working properly on client
  • UPD Vehicle.IsValid is renamed to Vehicle.IsValidVehicle
  • UPD All Vehicle methods will error “tried to use NULL vehicle” when used on invalid vehicle
  • UPD Reduced worhless & confusing srcds console output for workshop
  • UPD Switched some spammy serverside console output to DevWarnings
  • UPD Replicated Lua ConVars now properly network to clients when they join the server (FCVAR_REPLICATED flag)
  • UPD The console will no longer hide behind the main menu if you open it too early
  • UPD Improved performance of file.Exists and file.IsDir
  • UPD JavaScript errors in the console now show the file path and line number of the bad code
  • UPD gui.SetMousePos and input.SetCursorPos no longer works while the game is not focused
  • UPD system.HasFocus now also works on Linux and OSX on client
  • UPD File library can now write png/jpg files
  • UPD util.TableToJSON handles arrays properly
  • UPD Proper alpha blending for Awesomium panels
  • UPD Entity:GetNW2VarTable now returns the type associated with each value as well
  • UPD Scripted NPCs and Nextbots now support the following clientside hooks: Initialize, Think, Draw and DrawTranslucent
  • UPD Increased model precache limit to its TF2 4000 limit
  • UPD WorkshopDL GetPublishedFileDetails no longer hangs main thread
  • UPD Tweaks to server-content workshop downloading
  • UPD Improved Addons main menu.. menu – Per tag browsing for friends items, hide dupes/saves from all listings
  • UPD Updated language files
  • UPD Addon extration is now properly displayed on the workshop downloader
  • DEL Removed angle/vector pool debug message

Community Contributions


December 2015 Update


An update has been released!

This update includes a lot of exploit, crash and Half-Life 2 campaign fixes, as well as other minor bug fixes and Lua API improvements.

Thanks to the following people for helping us out and reporting dangerous exploits:
Willox, Leystryku, Python1320, MeepDarknessM/Meepen and ogniK.
And thanks to everyone who helped testing the update and reported bugs/problems.

As usual, servers will need to be restarted.
The update will be automatically downloaded when you restart your game.

You can check out the full change log below:

Game Changes

GitHub changes


Community Contributions

September 2015 Update


An update has been released! As usual, servers will need to be restarted.

The update will be automatically downloaded when you restart your game.

You can check out the full changelog below:

Game Changes

GitHub changes


Community Contributions

August 2015 Update


An update has been released! As usual, servers will need to be restarted.

The update will be automatically downloaded when you restart your game.

This update features support for latest Team Fortress 2 maps and multiple exploit fixes.

You can check out the full changelog below:

Game Changes

  • NEW Added Entity.PassesFilter( caller, ent )
  • NEW Added Entity.PassesDamageFilter( dmginfo )
  • NEW Added Entity.GetFlags()
  • NEW Added “filter” scripted entity type
  • NEW Added game.GetAmmoName( int id )
  • NEW Added game.GetAmmoID( string name )
  • NEW Added game.GetAmmoMax( int id ) – Returns real maximum value for given ammo type
  • NEW Added CTakeDamageInfo:GetDamageBonus()
  • NEW Added CTakeDamageInfo:SetDamageBonus( float bonus )
  • NEW Added CTakeDamageInfo:SetReportedPosition( Vector pos )
  • NEW Added CTakeDamageInfo:GetDamageCustom()
  • NEW Added CTakeDamageInfo:SetDamageCustom( float custom )
  • NEW Added CRecipientFilter:RemovePAS()
  • NEW Added CRecipientFilter:GetPlayers()
  • NEW Added “maxcarry” and “flags” to game.AddAmmoType
  • NEW Added missing TF2 map icons
  • FIX Fixed TF2 maps crashing the game on load
  • FIX Fixed util.Decal not working in multiplayer
  • FIX Fixed render.Capture not working in render targets that are bigger than the screen resolution
  • FIX Fixed an exploit with .wav files
  • FIX Fixed an exploit that allowed servers to run console commands they are not supposed to run on players
  • FIX Fixed an exploit that allowed people to download server files they are not supposed to download
  • FIX Fixed unmounting addons not working
  • FIX Fixed uninstalling addons not unmounting them
  • FIX Fixed disabled addons still opening the .gma files
  • FIX Fixed disabled addons still being mounted in offline mode
  • FIX Fixed player poserparameters being desync on server after a model change
  • FIX Fixed Linux autorefresh
  • FIX Fixed util.KeyValuesToTable incorrectly interpreting keys starting with numbers
  • FIX Fixed buildcubemaps not writing built cubemaps to the .bsp
  • FIX Fixed bullets and traces hitting non solid players
  • FIX Fixed autorefresh folder locking


Community Contributions



An update has been released! As usual, servers will need to be restarted.

This update mostly features a bunch of important fixes for various bugs and crashes.

You can check out the full changelog below:

Game Changes

  • NEW Added Player.SetLaggedMovementValue( float )
  • NEW Added Player.GetLaggedMovementValue()
  • NEW Added Entity.AddToMotionController( PhysObj )
  • NEW Added Entity.RemoveFromMotionController( PhysObj )
  • NEW Added 3 new backgrounds from the last 3 update posts
  • FIX Fixed an issue with timer.Create and timer.Adjust
  • FIX Fixed a crash issue with npc_turret_floor
  • FIX Fixed bullet hit detection issue introduced by previous update
  • FIX Fixed a potential physics crash issue
  • FIX Fixed a crash problem with all PhysObj functions when called on invalid PhysObj
  • FIX Fixed PHX glass panels igniting when shot
  • FIX Fixed a PHX material (zc_tube.vmt) having bad symbols
  • FIX Fixed models/noesis/donut.mdl erroring to console when spawned
  • FIX Fixed a crash problem with NPC player companions
  • FIX Fixed func_tank custom ammo types ( Fixes Episode 2 Auto Turret )
  • FIX Fixed npc_strider not dealing damage with his fast minigun attack
  • FIX Fixed server workshop downloads persisting after disconnecting from a server while downloading server workshop addons and connecting to another
  • FIX Fixed Custom Bullet Tracers not applying in some cases
  • FIX Fixed collision box for all weapons not being rotated properly
  • FIX Fixed Weapons with SF_WEAPON_START_CONSTRAINED spawnflag not being constrained
  • FIX Fixed debugoverlay.BoxAngles 6th parameter (color)
  • FIX Fixed SWEPs not being fired by some NPCs
  • FIX Fixed the “Setting Holdtype to empty string” problem
  • FIX Fixed SetPos and SetAngles crashing with math.huge and tonumber(“nan”)
  • UPD Added Warning()s to net.Send & net.SendOmit
  • UPD Entity.SetBonePosition’s first argument is now not optional
  • UPD Last 5 arguments of EmitSentence & EmitSound globals are now optional
  • UPD Reverted changes to Entity.SequenceDuration
  • UPD Updated language files
  • UPD util.TraceLine now hits player hitboxes outside of collision bounds
  • UPD NPCs now use the ai_weapon_* counterparts when given HL2 weapons with NPC:Give()
  • DEL Removed CNavArea.GetAdjacentAreaAtSide


  • UPD Clean up quota before updating/creating an addon
  • UPD Don’t delete files from quota as soon as finishing updating

GitHub changes


Community Contributions



A major update has been released! As usual, servers will need to be restarted.
This update features important fixes for various bugs and exploits, along with minor optimizations and improved scripting support for nextbots and navmeshes.
Thanks to Willox for reporting dangerous exploits.
You can check out the full changelog below:

Game Changes


  • UPD Removed the need for steam_appid.txt
  • UPD Fixed not updating addon tags

GitHub changes


Community Contributions



A major update has been released. You will need to restart your servers for players with the new version of the game to join.

Featured changes include stability improvements and various exploit fixes, along with a few handy additions for developers. Here are some of the highlights:

Improved text rendering on OSX

The OSX version of the font system has been heavily reworked for more consistency and better readability. No more tiny text in the console!

Improved networked variables

The previously obsolete NWVars have been remade from scratch and now provide the same features and speed benefits as NetworkVars (formerly known as DTVars). Unlike NetworkVars, NWVars require no prior initialization and are identified by a name rather than a numerical index, making them suitable for every type of entity while minimizing conflicts with other addons.

As a result, the maximum number of NetworkVars per entity has been reduced from 64 to 32 to reduce server load.

Individual texture replacements

Every texture in a model can now be replaced separately using the newly added function Entity:SetSubMaterial, allowing for a near infinite number of wacky combinations.

Workshop publishing tools for Linux and Mac

The tools used to distribute addons for Workshop distribution (gmad and gmpublish) are now available in the Linux and Mac versions of the game. You can learn more about these tools in the wiki.

Full Changelog

Game Changes

  • FIX Fixed physgun constantly trying to drop and grab a prop its owner is currently standing on
  • FIX Fixed ammo box not working on the HL2 jeep
  • FIX Fixed HL1 prop_breakable gibs not spawning
  • FIX Fixed incorrect model for HL1 barnacles
  • FIX Fixed HL1 grunts not dropping the right items when killed
  • FIX Fixed HL1 sentences not being loaded
  • FIX Fixed MsgC ignoring first argument if it’s not a color
  • FIX Fixed bone merging causing the local player to be rendered twice
  • FIX Fixed crash with CNavArea:GetClosestPointOnArea
  • FIX Fixed an exploit related to running console commands through the chat
  • FIX Fixed crash issues with Player:Kick and Player:Ban
  • FIX Fixed slight rendering artefacts when drawing rounded boxes at low alpha
  • FIX Fixed scripted weapons not working correctly with the baseclass system
  • FIX Fixed scenes not always being properly loaded from VCD files
  • FIX Fixed secondary ammo indicator not showing up on the default HUD
  • FIX Fixed HUD pickup notifications occasionally causing errors before the local player becomes valid
  • FIX Fixed func_tank not turning and not firing tracers in multiplayer
  • FIX Fixed clients attempting to fire their active weapon while holding a prop or controlling a turret
  • FIX Fixed CLuaParticle:SetNextThink not working as intended
  • FIX Fixed DTVars transmitting way more data than needed when updated
  • FIX Fixed dynamic AI node links causing some HL2 maps to crash after a cleanup
  • FIX Fixed gmad and gmpublish not being shipped for OS X and Linux
  • FIX Fixed AvatarImage panels rendering 184×184 avatars incorrectly
  • FIX Fixed file.Find returning non Lua files in the directories table when used with the LUA path
  • FIX Fixed Entity:SetCustomCollisionCheck and Entity:SetShouldServerRagdoll not being able to reset their values
  • FIX Fixed NPC kill achievements not working
  • FIX Fixed broken eye flexes and NPC blinking
  • FIX Fixed sounds not playing at all when close captioning is enabled
  • FIX Fixed lag compensation causing players to drift away from the vehicle they are driving
  • FIX Fixed Player:KillSilent not forcing players to exit vehicles, making them stuck dead
  • FIX Fixed util.IsValidModel false-positives, large smokestacks from HL2 can now be spawned
  • FIX Fixed materials/gm_construct/grass-sand.vmt $surfaceprop2
  • FIX Fixed some addons not being able to be extracted.
  • FIX Fixed a save file issue with CSoundPatch
  • FIX Fixed another exploit related to downloading restricted files from the server
  • FIX Fixed plugin_load not loading plugins if no file extension is given
  • FIX Fixed not being able to change the render cull mode on entities bonemerged to viewmodels
  • FIX Fixed a problem with SWEP.ViewModelFlip and player model hands
  • FIX Fixed net.ReadUInt not using unsigned integers
  • FIX Fixed Hammer crashing on start up
  • FIX Fixed gamemodes not loading properly from legacy addons
  • FIX Fixed SetupWorldFog & SetupSkyboxFog not being called if the fog was not enabled beforehand by console commands or the map
  • FIX Fixed IsOnFire flag not resetting
  • FIX Fixed FOV being stuck on some HL2 maps
  • FIX Fixed Combine Autogun on ep2_outland_09 not dealing damage
  • FIX Fixed physgun beam not being removed on drop
  • FIX Fixed server workshop addons redownloading even if user is already subscribed to that addon
  • FIX Fixed GM:StartChat return value leaving chat visible on super widescreen resolutions
  • FIX Fixed a crash issue with Entity:SetBodygroup and Player:ExitVehicle
  • FIX Fixed Entity:AddCallback( “PhysicsCollide”, … ) for vehicles not being triggered without a driver
  • FIX Fixed a Lua state corruption issue which caused some functions to randomly disappear
  • FIX Fixed Entity:GetHitBoxCount crashing the game when called with an invalid value
  • UPD Improved text rendering on OSX
  • UPD Moved CSS muzzle flashes to Lua
  • UPD gui.OpenURL now accepts HTTPS addresses
  • UPD Restored preset saving
  • UPD Renamed Zeno Clash to Zeno Clash (Model Pack) in the mountable game list
  • UPD Renamed Insurgency to “Insurgency ( Source Mod )” in mountable games list
  • UPD PhysicsCollide entity callback is now shared
  • UPD EntityEmitSound hook now has a slightly more consistent behaviour
  • UPD CNavArea:IsOverlapping‘s tolerancy argument is now optional, defaults to 0
  • UPD CNavArea:IsVisible now returns a second value which contains the first point in the area that passed the visibility test
  • UPD CSoundPatch:ChangePitch‘s and ChangeVolume‘s delay argument are now optional (default to 0)
  • UPD Player:Ban‘s second argument is now a boolean, set it to true to automatically kick the player
  • UPD HTTP() now supports “head”, “put” and “delete” as methods
  • UPD CLuaEmitter:Add now also accepts an IMaterial as its first argument
  • UPD Updated CS:S world and C_ view models
  • UPD Disabled autoplay sequences on ragdoll entities
  • UPD Improved exploit prevention on incrementvar and multvar
  • UPD Updated default Derma skin ( Changed DComboBox hover arrow )
  • UPD Updated most valve game icons in spawnmenu to reflect the actual icons
  • UPD Returning false in the callback passed to serverlist.Query will now cancel the query
  • UPD Mesh() now accepts a material as its first argument, should be the material the mesh is intended to be rendered with
  • UPD Adjusted addon file extension whitelist
  • UPD file.Delete can now delete empty directories
  • UPD Updated launcher(hl2.exe) icon
  • UPD Reduced maximum DTVar count to 32
  • UPD NWVars have been greatly improved and are now a viable alternative to DTVars
  • UPD Updated most default spawnicons
  • UPD Moved garrysmod.fgd to GarrysMod/bin
  • UPD hlfaceposer.exe now runs properly
  • UPD Restored Closed Captions
  • UPD Users now automatically unsubscribe from Demos, Saves & Dupes
  • UPD Improved serverside performance of Player.UniqueID
  • UPD Player.UniqueID now returns 1 in singleplayer on client too
  • UPD Improved performance of server workshop addons when extracting the addon
  • UPD Prevented people from putting fake servers to server list
  • UPD Blocked more console commands/variables to prevent servers from running potentially harmful commands on clients
  • UPD Changed VERSIONSTR global to YYYY.MM.DD to avoid confusion
  • NEW Added PhysObject member to PhysicsCollide collision info table
  • NEW Added EFFECT:PhysicsCollide hook to scripted effects
  • NEW Added SND_* sound flag enums
  • NEW Added Entity:IsSolid()
  • NEW Added smoothed rendering to AvatarImage
  • NEW Added Entity:UseTriggerBounds(enable, bloat=0)
  • NEW Added missing CS:GO icon
  • NEW Added a bunch of requested headers to HTTP request results
  • NEW Added some missing MAT_ enums ( MAT_GRASS, MAT_SNOW, MAT_DEFAULT )
  • NEW Added chat.GetChatBoxSize
  • NEW Added Entity:SetSubMaterial(index, name)
  • NEW Added Entity:GetSubMaterial(index)
  • NEW Added render.MaterialOverrideByIndex(index, material)
  • NEW Added a HudDefault font for HL2 HUD elements
  • NEW Added GM:EntityNetworkedVarChanged(ent, name, oldValue, newValue)
  • NEW Added render.SetLocalModelLights(lights)
  • NEW Added Entity:SetNWVarProxy(name, func) and Entity:GetNWVarProxy(name)
  • NEW Added MATERIAL_LIGHT_ enums
  • NEW Added map & model compiling tools
  • NEW Added Blade Symphony to the mountable game list
  • NEW Added English closed captions for HL2, EP1, EP2 and Portal
  • DEL Removed CLuaParticle:VelocityDecay
  • DEL Removed FCVAR_CHEAT flag from cl_drawhud
  • DEL Removed addons.txt and gamemodes.txt as they were not used
  • DEL Removed lua\includes\util\entity_creation_helpers.lua
  • DEL Removed lua\functiondump.lua
  • DEL Removed InjectConsoleCommand & InjectCommandAutocomplete
  • DEL Removed Entity.GetNetworkedVar & Entity.SetNetworkedVar
  • DEL Removed GetGlobalVar & SetGlobalVar


  • NEW Added simple drag’n’drop support
  • NEW Added proper help message
  • UPD The “out” path is now automatically calculated for both “extract” and “create” actions, if not overridden manually
  • UPD Updated whitelist
  • DEL Removed triple output of addon files so now it only does so once


  • NEW Added ability to update icon of an addon
  • NEW Added additional “remove file” calls to make sure (hopefully) nothing ends up stuck in the Cloud on fail
  • UPD Updated help message

Lua changes


Community Contributions



A minor update containing a few hotfixes for last update just came out. Restarting your servers is strongly recommended.
If there are any persisting issues left, please report them on the official GitHub issues page.

GLIBC_2.15 dependency on Linux dedicated servers

Some Linux dedicated server owners may have noticed that the game now requires glibc 2.15. This is a necessary change since the version we were using before was really outdated. If your server is running on a relatively old distro which does not include that library, you can find instructions on how to install it here: Linux Dedicated Server Hosting.

Fixed non-ASCII characters being removed from player names

This was accidentally introduced in an attempt to fix an exploit which would let servers tamper with a client’s configuration file, sorry for that! Everything should be back to normal now.

Fixed model scaling not working correctly on some models

Entity:SetModelScale and Entity:EnableMatrix had an issue with some models which would cause transformations to be applied twice. This issue is now fixed, you can see the difference below:

This will break scripts that rely on the old broken behaviour, so I also added Entity:SetLegacyTransform for those who want their current scripts fixed with minimal effort. This function basically brings the old scaling behaviour back for the entity it is called on, so it should be used exclusively as a temporary fix.

Full Changelog

  • FIX Fixed plugin_load not doing anything
  • FIX Fixed players being removed when sitting in a vehicle parented to another entity
  • FIX Fixed non-ASCII characters being removed from player names
  • FIX Fixed tabs in RichText selection
  • FIX Fixed properties not correctly working on vanilla
  • FIX Fixed Color.__tostring not outputting alpha
  • FIX Fixed render.CapturePixels crashing when used on render targets
  • FIX Fixed Weapon:CallOnClient crashing when called on a weapon owned by a NPC
  • FIX Fixed weapon holdtypes not always updating on the client
  • FIX Fixed player names not updating in scoreboard and voice panels
  • FIX Definitely fixed Entity:SetModelScale and Entity:EnableMatrix applying transformations twice on some models
  • NEW Added Entity:SetLegacyTransform(bool)
  • DEL Removed properties.HaloThink
  • DEL Removed _restart from blocked concommand list



A major update is coming in, so servers will need to be restarted before joining them as usual.

This update consists mostly of exploit fixes, various requested adjustments, and a few new Lua features for developers including extended support for AI navigation meshes, up to 64 DT vars of each type, and toggleable lag compensation for all entities.

Full Changelog

Game Changes

  • FIX Fixed item pickups not being collectable in some cases
  • FIX Fixed env_microphone not always transmitting NPC voices in multiplayer
  • FIX Fixed some textures on gm_construct having an incorrect normal map when running under DX8
  • FIX Fixed console crash on some machines
  • FIX Fixed another possible exploit with CNetChan::SendFile
  • FIX Fixed an exploit allowing access to any file on a client machine
  • FIX Fixed vehicle noclip exploit
  • FIX Fixed SMG viewmodel animation glitch when firing exactly 3 shots in a single burst
  • FIX Fixed inaccurate text selection in RichText controls
  • UPD Files with an incorrect extension can no longer be loaded as modules
  • UPD Loose .vcd files can now be loaded without having to be compiled into scenes.image


Community Contributions

Lua Scripting

  • FIX Fixed Entity:PhysicsFromMesh building a deformed collision mesh
  • FIX Fixed PhysicsCollide entity callback missing information about the entity which was collided with
  • FIX Fixed IMaterial:GetMatrix crashing the game
  • FIX Fixed sound.Add not working on dedicated servers
  • FIX Fixed ents.FindByClass not interpreting wildcards correctly
  • FIX Fixed util.CRC not working correctly on strings with embedded zeroes
  • FIX Fixed util.JSONToTable losing precision for large integer values
  • FIX Fixed Entity:GetBoneController returning a truncated value
  • FIX Fixed Entity:SetHitboxSet not working properly with an integer parameter
  • FIX Fixed NPC:FoundEnemySound, LostEnemySound, FearSound, IdleSound and AlertSound not calling their appropriate equivalent in the engine
  • FIX Fixed InnerAngle and OuterAngle parameters not doing anything in lights created by DynamicLight()
  • FIX Fixed util.TableToJSON crashing when passed a table containing keys that aren’t strings or numbers
  • FIX Fixed GM:OnReloaded being called more than once on most gamemodes
  • UPD Updated LuaJIT to version 2.0.3
  • UPD Reverted Entity:IsValid to its old behaviour
  • UPD Changed Entity:PhysicsInitBox behaviour to be more consistent with Entity:PhysicsInitConvex (no longer creates a broken physics object in some cases)
  • UPD game.GetWorld is now shared
  • UPD Player:HasWeapon and Player:GetWeapon are now shared
  • UPD Entity(0) now returns the world on both server and client
  • UPD Entities can now have up to 64 DT vars of each type (except strings)
  • UPD Player:Kick and Player:Ban kick/ban reasons are now optional and may contain newlines
  • UPD SWEP holdtypes are now properly networked
  • UPD Vector and angle access using a numerical index rather than x/y/z is now slightly faster
  • UPD gui.OpenURL now clamps URLs to 511 characters max
  • UPD Added safeguards to mesh library functions
  • UPD Entity:GetMaxHealth is now shared again and properly networked
  • UPD Entity:DrawViewModel now takes an optional second argument which controls which viewmodel to show/hide (defaults to 0)
  • UPD Moved Entity:Disposition, GetActivity, IsNPCMoving, IsUnreachable to NPC:Disposition, GetActivity, IsMoving, IsUnreachable
  • UPD Trace tables now accept an “output” parameter which may contain the table the trace results should be written into
  • UPD sound.PlayFile and sound.PlayURL callbacks now receive an error ID and error name as their second and third parameters if an error occurs
  • UPD Weapon:CallOnClient second argument is now optional (defaults to “”)
  • UPD Moved Player:PlayScene, NPC:PlayScene and NextBot:PlayScene to Entity metatable
  • UPD Entity:PlayScene second argument (delay) is now optional (defaults to 0)
  • UPD MsgC can now print text with several colors in a single call
  • UPD Moved Player:Freeze, Player:GodEnable, Player:GodDisable, Player:IsFrozen, Player:HasGodMode to Lua
  • UPD Clamped pitch between -90 and 90 instead of -180 and 180 for AngleRand
  • UPD util.KeyValuesToTable and util.KeyValuesToTablePreserveOrder now accept a third parameter which prevents keys from becoming lowercased when set to true
  • UPD vgui.LoadControlsFromFile/LoadControlsFromString now properly creates scripted panels
  • UPD Improved vgui.LoadControlsFromString (no longer writes to a temporary file)
  • NEW Added Entity:PhysicsDestroy()
  • NEW Added Weapon:GetHoldType()
  • NEW Added util.SharedRandom(uniqueName, min, max, additionalSeed=0)
  • NEW Added util.BlastDamageInfo(dmginfo, origin, radius)
  • NEW Added Entity:SetLOD(lod=-1)
  • NEW Added Entity:SetLagCompensated(bool)
  • NEW Added Entity:IsLagCompensated()
  • NEW Added Player:SetAllowWeaponsInVehicle(bool)
  • NEW Added Player:GetAllowWeaponsInVehicle()
  • NEW Added CSoundPatch:SetDSP(dsp)
  • NEW Added CSoundPatch:GetDSP()
  • NEW Added IGModAudioChannel:EnableLooping(bool)
  • NEW Added IGModAudioChannel:PlayFile(path, flags, callback)
  • NEW Added optional second argument to Entity:SetPhysicsAttacker() which controls expiry time (defaults to 5 seconds)
  • NEW Added game.SetSkillLevel(int), game.GetSkillLevel()
  • NEW Added the following hooks to scripted effects: EFFECT:StartTouch(), EFFECT:Touch(), EFFECT:EndTouch()
  • NEW Added CUserCmd:SelectWeapon(weapon_ent)
  • NEW Added __tostring to CNavArea, CSoundPatch, IGModAudioChannel, PhysObj, dlight_t metatables
  • NEW Added PhysObj:GetName()
  • NEW Added CNavArea:Draw(), IsUnderwater(), GetSizeX(), GetSizeY(), IsRoughlySquare(), IsFlat()
  • NEW Added CNavArea:GetZ(pos)
  • NEW Added CNavArea:IsOverlapping(pos, tolerance)
  • NEW Added CNavArea:Contains(pos)
  • NEW Added CNavArea:IsCoplanar(navArea)
  • NEW Added CNavArea:GetClosestPointOnArea(pos)
  • NEW Added CNavArea:IsVisible(pos)
  • NEW Added CNavArea:GetCorner(cornerId)
  • NEW Added navmesh.GetNavAreaCount()
  • NEW Added navmesh.GetNavArea(pos, beneathLimit)
  • NEW Added navmesh.GetNavAreaByID(id)
  • NEW Added navmesh.BeginGeneration()
  • NEW Added navmesh.IsGenerating()
  • NEW Added navmesh.GetPlayerSpawnName()
  • NEW Added navmesh.SetPlayerSpawnName()
  • NEW Added navmesh.AddWalkableSeed(pos, normal)
  • NEW Added navmesh.ClearWalkableSeeds()
  • NEW Added Entity:IsDormant()
  • NEW Added ENTITY:Blocked(other), only applies to SENTs using the MOVETYPE_PUSH movetype
  • NEW Added Color:__tostring, Color:__eq and Color:ToHSV()
  • NEW Added gui.InternalKeyTyped(code)
  • DEL Removed “loop” flag from sound.PlayURL
  • DEL Removed support for vm_origin and vm_angles from GM:CalcView

Exploit Fix Released


An exploit was released last night that took advantage of the Source Engine’s file sending mechanism which made it possible to send files with any extension to the client or server. This exploit is likely still active in all other Source Engine games so I’m not going to go into specific details about it.

Needless to say that this was exploited in Garry’s Mod on Windows to send dlls to clients and servers. As far as I am aware the exploit wasn’t used to do anything malicious beyond propagating itself, spamming chat and changing server names. But to be safe I would recommend that you consider deleting your Garry’s Mod install and starting fresh. It might be a good idea to do an online virus scan too.

The patch I released this morning attempts to clean up any mess left behind by these exploits and patches the variety of methods which they used. If anyone has further information about the exploits, or any exploits left un-patched please email me personally at



Here are a few quick fixes for the issues introduced by yesterday’s update. Servers will need to be restarted.
Some known issues remain and will be addressed next week.

  • FIX TTT: Fixed ironsights being broken due to changes from last update
  • FIX Fixed .mp3 and .ogg playback becoming very expensive due to changes from last update
  • FIX Fixed Father Grigori not being the king of animals
  • FIX Entity:FireBullets no longer inflicts ammo-specific damage if the damage is 0 unless an ammo type is explicitly specified
  • UPD IGModAudioChannel:SetTime now prints a warning if it is called on a non block streamed channel
  • NEW Added IGModAudioChannel:IsBlockStreamed



You have waited a long time.. and this is a big one.. so servers will need to be restarted before you’ll be able to join them.

Fixed lamps projecting backwards

This annoying visual bug that has been there since lamps existed is now finally gone for good.

Improved mounting system

You will most likely not notice it but the mounting system has been given a heavy lifting. This means a slight decrease in load times, less remounting, and no more texture issues on changelevels.

Fixed gamemode name reported by Steam not being updated after a changelevel

The gamemode name used to be sent to Steam’s master server only when a server was started, so it wouldn’t be updated after a changelevel. Now it is sent at regular intervals along with the current map name.

Minor Half Life 2 campaign fixes

A lot of minor fixes have been oriented towards making the HL2 campaign fully playable. For instance, the GMan intro now plays correctly, ropes should now be properly positioned on all levels, NPCs now receive the correct amount of damage from HL2 weapons (the shotgun was notably weak against them), and metrocops no longer get stuck into a T-pose when attacked.

Lots of requested Lua fixes and features

Notable additions include new BASS library bindings allowing more control over sounds being played, advanced matrix manipulation functions, a hook which allows you to override sounds before they are played, and another hook which overrides bullets fired from any weapon. You decide what to do with them!
A lot of Lua functions also had more or less important issues pointed out by various coders, most of those are now fixed.

And now for the…

Full Changelog

Game Changes

  • FIX Fixed viewmodel bobbing snapping when jumping or noclipping
  • FIX Fixed flashlight getting duplicated when receiving a full packet update
  • FIX Fixed spawnicons not always regenerating at the correct resolution when resized
  • FIX Fixed “Dopwnload finished” typo in console output
  • FIX Fixed lamps projecting backwards!
  • FIX Fixed gamemode name reported by Steam not being updated after a changelevel
  • FIX Fixed key bindings not working correctly in the main menu
  • FIX Fixed GMod decals not working when used on props
  • FIX Fixed debug textures not being precached (brings mat_wireframe 1 back to its former glory)
  • FIX Fixed rendering artifacts when some particle effects are rendered in front of the skybox
  • FIX Fixed nav files remaining open after loading a map
  • FIX Fixed shell ejection issues on the HL2 pistol and SMG
  • FIX Fixed players colliding with other players while noclipping
  • FIX Fixed viewmodel jittering when overwriting viewmodel position
  • FIX Fixed viewmodel prediction errors when switching to thirdperson and back
  • FIX Fixed sound spam with weapon_rpg when no ammo is left
  • FIX Fixed jigglebones occasionally snapping into impossible positions when rapidly moving
  • FIX Fixed keyframe_rope ignoring attachment points (this fixes various issues such as the cable from prop_vehicle_crane)
  • FIX Fixed combine balls not colliding with players
  • FIX Fixed env_zoom not working at all (i.e. HL2 intro)
  • FIX Fixed choppy MP3 sound playback in some cases
  • FIX Fixed metrocops holding the stunstick going into a T-pose when attacked
  • FIX Fixed metrocops not turning their stunstick on before attacking
  • FIX Fixed NPCs not receiving the appropriate amount of damage from HL2 weapons
  • UPD Improved mounting system, no more texture issues on changelevels
  • UPD sv_kickerrornum now defaults to 0 and its value is now saved to the config file
  • UPD sv_allowcslua is now saved to the config file
  • UPD Clientside Lua is now always allowed in singleplayer
  • UPD Improved some spawn icons
  • UPD TextEntry panels no longer filter ‘\t’ characters
  • UPD Restored old damage force behaviour
  • UPD Singleplayer jump boost from HL2 is now implemented in Lua as a sandbox feature and works in multiplayer as well
  • NEW Added clientside convar cl_steamoverlay_pos

Community Contributions

Lua Scripting



An update has been released. Servers don’t need to be restarted – but it’s recommended.



An update has been released. Servers don’t need to be restarted – but it’s recommended.

  • FIX  Fixed crash when using Matrix:Scale, Translate, Rotate wrong
  • FIX Added extra debug to blue screen errors
  • FIX If a startup crash is detected we will automatically verify install
  • FIX  Fixed gamemode name not updating with server changes
  • FIX  Fixed util.SteamIDTo64 spouting rubbish
  • FIX  Added GM:PreCleanupMap
  • FIX  Added GM:PostCleanupMap
  • FIX  Fixed large avatars being partially broken
  • FIX  Fixed NPCs not talking or playing scenes


  • NEW Added a bunch of loose files into vpk’s for faster load times
  • FIXED Fixed soundchannel:SetVolume( float )
  • FIXED sound.PlayURL can now handle playlists
  • FIXED Fixed ‘BASS’ error on launch
  • FIXED Fixed missing scenes causing low FPS with NPCs
  • FIXED Fixed sqlite db’s getting stomped by updates/verifying cache
  • FIXED Fixed rope material crash exploits



Here’s answers to two of the most commonly asked questions.

  • NEW Added OGG audio streaming
  • NEW Added sound.PlayURL( “url”, “3d mono loop noplay”, callback_func )
  • NEW Added soundchannel:Play()
  • NEW Added soundchannel:Stop()
  • NEW Added soundchannel:Pause()
  • NEW Added soundchannel:SetVolume( float )
  • NEW Added soundchannel:SetPos( vecPos )
  • NEW Creating a timer now returns a timer object
  • NEW Added bodygroup & skin changer to player editor
  • NEW Eli player model now colourable
  • FIXED Fixed other game content not mounting on Linux
  • FIXED Fixed broken MP3 streaming
  • FIXED Fixed some Linux case sensitivity problems when mounting other content




Here’s answers to two of the most commonly asked questions.

  • NEW Main menu shows which beta branch we’re using next to the version number
  • NEW Added mount.cfg to allow mounting of extra content (for dedicated servers) 
  • NEW Map Icons should now load much faster 
  • NEW Addons should now load much faster (especially if you have lots installed)
  • NEW Development branch is now called “dev”
  • FIXED Fixed OSX not launching with Steam User error
  • FIXED Fixed Windows DS crash when using workshop collections
  • FIXED Fixed Legacy Server Browser not working
  • FIXED Fixed insane screeching when playing some sounds
  • FIXED Removed ‘headers’ console spam
  • LUA Added global ‘BRANCH’


Update 165

  • NEW Garry’s Mod is now on Steam Pipe
  • NEW Added the Portal 2 version of Chell as a player model
  • NEW Added back the CS:S hostage player models
  • NEW Added medic player models (and their arms)
  • NEW Phong & rimlight on players modulates based on their chosen color
  • NEW Adapted more zombie animations into the player model libraries
  • NEW Optimized CS:S player models
  • NEW Now colourable: CS:S Phoenix/Guerilla/Leet, Magnusson
  • NEW Improvements to the player model selection interface
  • FIXED Updated CS:S hands model and material
  • FIXED Fixed the remaining visual issues with CS:S c_models
  • FIXED Bullets properly come out of the barrel of CS:S weapons
  • FIXED Added missing medkit w_model
  • FIXED Thumbs on first-person medkit animations are less broken
  • LUA Added math.Remap( value, inMin, inMax, outMin, outMax )

Update 164

  • NEW New viewmodel arms for the Combine
  • NEW Two default SWeps: fists and medkit
  • NEW Added a female metrocop player model
  • NEW Now colourable: Combine soldiers, Corpse1
  • NEW Further LOD optimizations on player models for performance
  • NEW Added a rimlight effect on player models for readability
  • NEW 3 new death animations
  • FIXED Fixed NPCs not being able to use AR2 or Pistol
  • FIXED Fixed steampipe games not mounting properly on OSX
  • FIXED Solved most oddities with the new viewmodels, especially on CS:S weapons
  • FIXED Fixed zombie anims twitching when transitioning between states
  • FIXED Fixed punching anims being out of alignment
  • FIXED Fixed player color Lua errors
  • FIXED Fixed missing H.U.G.E. 249 world model
  • FIXED Improved look of zombie crouch anims
  • LUA Updated dtooltip.lua
  • LUA Fixed error spam when disabling a DComboBox

Update 163


I have sent a quick patch to Valve for that last update.

  • FIXED Player color errors
  • FIXED Weapons without viewmodels crashing

A few people are complaining that they’re missing textures in some maps with the new update. If you’re having these problems then make sure you have Counter-Strike:Source installed and make sure it’s being mounted into G(arrys)Mod. Try running CS:S. Check the console on startup for any errors. Try validaing CS:S and G(arrys)Mod.

Update 162


What up! I sent a patch to Valve! It should be live now! Your server needs to restart! Here’s what’s changed!

  • NEW Unified viewmodel system
  • FIXED Fixed NPCs going into T-pose
  • FIXED Player model updates
  • FIXED gm_construct update
  • FIXED Fixed Steampipe overrides
  • FIXED Fixed GetCustomAmmoDisplay hook
  • NEW Added PostDraw2DSkyBox hook
  • FIXED Fixed SteamIDTo64, SteamIDFrom64
  • FIXED Fixed Workshop Gamemodes
  • FIXED Fixed Auto Refresh bug
  • FIXED Fixed bone scale accuracy
  • NEW Added “PhysicsCollide” hook
  • NEW Nextbot enhancements
  • NEW  Added PostDraw2DSkyBox hook

GMod Update 161


Hey guys. So it took a long time for update 160 to come out.. and it came out this morning and there was a bunch of crap that went wrong.

Weapons were firing too fast, some people had a missing texture over their screen, crouching and jumping got you stuck in the ceiling and on some systems was insanely low.

So. Weapons firing too fast was fixed. This was a really really dumb oversight made by me – and not picked up by anyone (even though it had been on the SVN version for a month and a half.. blagh.). I rolled back the stuff that caused this until I can do it properly.

Missing texture was caused by having CS:GO or Portal 2 mounted. It was overriding the motion blur material using some stuff we don’t have in our version of the engine. So I included the material with GMod so it overrides everything.

Getting stuck in the ceiling was a bug in my crouch bug fix. Bugs on top of bugs. I think I fixed it.

The low FPS was caused by having LuaJIT enabled by default. Which is kind of funny because it’s meant to make it faster. My feeling is that this is down to one of two things. Either it’s a problem only on AMD CPUs.. which is why it never appeared in any of our tests here in the office.. or it’s something in Wiremod or some other addon that’s dynamically compiling code over and over. Either way we’re back to having LuaJIT disabled by default. If you want to benchmark you can enable jit again by running with the command line “-withjit”.

GMod Update 160


Hey guys – I sent an update to valve. There’s a lot of internal changes here that might bite us in the ass in many different ways. We’ve spent quite a bit of testing but still… cross your fingers!

Here’s the changes:

New balloon models

There’s a couple of new balloon models available by default now! Enjoy!

Player model updates

The HL2 citizen player models were drastically enhanced, and Odessa is now colourable. The player models will now transition between animation states more smoothly, sitting animations have been improved, idle sequences (standing still) are much more varied, and other various things that looked odd or didn’t work were fixed.

Fixed infinite loop when spawning entities

If your GMod was freezing up when trying to spawn some entities – you were getting the infinite loop bug. This is now fixed!

Fixed cheating with crouch

There was a bug with crouching where you could crouch, uncrouch and then crouch again while you were still uncrouching – and your view would stay in place. This was being exploited by people to shoot over boxes while being fully ducked behind them.

Fixed Coroutines

One for the coders.. coroutines should now work flawlessly! Now you just need to find a use for them!

Added Nextbot stuff

Another one for the coders. I exposed a lot of nextbot stuff. This means that we can code better AI. I’m not done with this yet but it should be safe enough to start using it.

SteamPipe Mounting

Valve are switching all their games over to Steam Pipe. This affects us because we like to mount their games. Don’t worry though – I have updated the mounting stuff so it’ll mount games using SteamPipe now too! This includes games like CS:GO and Left 4 Dead!

Fixed Lua errors when saving

Some people were getting Lua errors when creating a save via the spawn menu. This should be fixed now – it was my fault! Sorry guys!

Fixed fastdl downloads

Server owners were having trouble with fastdl downloads. They didn’t download properly if they were compressed. This is also my fault – and should now be fixed!

Fixed duplicate props when loading a save

Sometimes when you loaded a save the props would get duplicated because it was restoring them first, then creating the saved version. This code was all a bit sticky. So I nuked the lot so it will delete all the props on the map and restore them from the save versions.

Lua performance fixes

I added a few small optimizations to improve the performance of Lua. A lot of the slowdown in Lua is when it has to call back to c. So I try to avoid that in a few common places. I make CurTime, RealTime and FrameTime all Lua functions – which don’t call into c in any way. The entity meta tables are also done in Lua now too.

GMod Update 159



There were a few problems with yesterday’s update. Not massive problems, but they should all be fixed in this update.

  • Fixed SteamID not being passed to CheckPassword hook
  • Fixed possible shadow/flashlight crash
  • Fixed addons not showing up immediately
  • Fixed offline addons not working
  • Fixed legacy addons not mounting under linux
  • Fixed crash when live editing Lua in addons folder
  • Fixed crash on windows dedicated server using workshop collection
  • Fixed skin property errors (robotboy)