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

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.


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)