160,358 Commits over 4,566 Days - 1.46cph!
Improve DImage shader replacement system
* Uses case insensitive check for VertexLitGeneric, includes LightmappedGeneric now
* Handles SubRect shader materials by drawing the correct part of the texture
Try to have Paint tool UI with previews
* https://files.facepunch.com/rubat/2026/October13-3318-SecondhandWoodborer.png
Lets try ignoring UV adjustments in surface.DrawTexturedRectUV
* So the function's UV arguments work like expected, without the "sub pixel adjustment" stuff, which seems unnecessary?
* Only the Lua binding is affected
Refine DImage subrect support and KeepAspect features
Minor cleanups
Remove leftover debug panel from Paint tool, KeepAspect the icons
Update GHA actions to version 6 for Linux and Windows
Add trigger_portal_cleanser to entity override whitelist
Fixed a crash with render.UpdateScreenEffectTexture
Remove widgets.RenderMe and properties.GetHovered serverside
* widgets would just do nothing, but shouldn't exist on the server, properties.GetHovered would just error out
Minor cleanups of various methods to match wiki and vice versa
Fixed a couple memory leaks with multicore rendering
* Mostly relates to functions such as render.UpdateScreenEffectTexture and render.PushCustomClipPlane
Try downgrading actions/checkout to v5
* goddamn github man
Port a fix for math.ceil/floor
Add some self checks for corrupted map files
"load" concommand doesn't boot you from session for missing saves
* So "load quick" bind doesn't disconnect you if you accidentally press it without having a quick save
Fixed ZFunc not being set when overriding depth testing
Fixed regression with DPanel:OnMousePressed due to recent changes
Merge Pull Requests
* Make ENT:StoreOutput treat times=0 same as times=-1, making it consistent with engine entities
Try to add the file path to CWin32ReadOnlyFile::FS_fread warnings
Move DrawTexturedRectUV changes to a separate func
* DrawTexturedRectRawUV
Prediction errors on arrays include array index for ints and floats
Try to add classname to CUtlRBTree overflow message
Rename ErrorFromLua to ErrorNoHaltStack
Added CLuaInterface::FormatError
Fixed some compile warnings
Allow mesh.BoneData to be called with index 2
* Weight value is ignored in this case
* Mesh() global now allows 3 bone weights
* Mesh:BuildFromTriangles will now read up to 3 weights, depending on the input above
Added 2 new sub scopes to PhysFrame
* `PhysFrame-CPhysicsEnvironment::Simulate` and `PhysFrame-VPhysicsShadowUpdate`
Added OnChangedFromMin/Max to math_counter entity
* Also added SetMax/MinValueNoFire inputs for it
Improve error handling of Autorefresh
Fixed memory leak with Windows auto refresh with symlinks
* Hopefully without regressions, as the system was changed somewhat substantially
Fixed a crash with inputs firing from removed triggers
Fixed wrong lookup function used in Hunter NPC code
Add m_hStoredPathTarget to SetSaveValue whitelist
Minor Hammer code fixes
Fixed wrongful error with Mesh:DrawSkinned with 52 bones
Fix Folder addons being searched in mountable games/platform
Add "Engine Error" to Sys_Error_Internal printf
Disable some unused Bootil stuff that spits out warnings
Fixed an issue with prediction error counting affecting certain fields
Make "SetPos touch triggers" change opt-in via argument
* This change causes infinite loops in existing addons, such as TTT.
Fixed auto complete for lua_refresh_file
rename `demo.newui` to `demo.oldui`, enable demoui2 by default.
[old ui stays. we really don't have a reason to nuke it for now and there are still some people that prefer the old one.]
Adjust empty model file handling
* Change where it bails so maybe its less error prone?
Fixed an issue with prediction error counting affecting certain fields
Added icons for the 5 new TF2 maps
Set "occlusion_door_immediate" to false by default (was supposed to be since we show everything within 32m)
merge from aizone_sleep_fix
Add special staging-only gamepad UI button option that hackily enables gamepad override just for that session.
Hide all other gamepad options in the gamepad section until it is enabled.
Fix navmesh building on top of cargoship
Fix AI Sleep Zones not working correctly since May
- race condition fix earlier this year inadvertently made any zone outside of a BaseEntity not initialise correctly (all except underwater labs)
- before / after on fresh procmap: https://files.facepunch.com/ryanw/2026/October/26_19-06-IndelibleBlackrhino.png / https://files.facepunch.com/ryanw/2026/October/26_18-54-FluffyDaddylonglegs.png
Fix sheeps starving despite a trough, their feed time was lower than cows so they wasted time shuffling with each other for a turn, now feeding time can't desync between sheep and cows
Update: Item.UseItem now returns if the entire item was consumed
- bugfix IndustrialConveyor's use-after-free of item in QuickMove path
Tests: ran conveyor tests, no longer failing
▉ ▄▅▄▌▇ █▆ ▍▅▉▇ ▋▋▄▍▌▉▅▄█▅▌ ▋▆▋▆▉ ▊█▆██ ▌█▋▍▊▇▇▍█▇ ▄ ▍▄▉▇▇ ▇█ ▅█▅▉█▆▇▋ ▅▄▍▊▉ ▌▄▍▍▆▆▍▆ ▅▋▅▍▋▌▋▆▆ ▌▆▆▍▅▍▆▇▄▉▉ ▌▆▆▍ ▋▋▅ ▌▅▉▅▄▇▆ ▍▊▄▉ ▊█▊▉▌ ▅▋▇▉▋ ▅▊▊▆▊ █▇▍ █▅▅▄ ▊▌▄▋▋▅ ▍▋▅▆ ▅▌ ▇▅▌▇█ ▄▆█▆▇ ▋█▌▍▇▌▍▍▆ ▍▇▊▋▋▉▄█▉▇▌▉▌█▌▌▉▉▄▉▇▍▋▋▆▅ ▉▌▌ ▌▄▋▆▄▆█▊ █▅▌▇▊▊▄▇ ▌▍▄▄▄ ▌▇▍ █▌▍▉ ▌█▊ ▍▆▊▋▇▄▇▋▅▇▆▄█▅▅▋▆▊ ██▅▉▌ ▋▍▋▌ ▋▆▆▍▋▍█▌▅▄▍▋▆█ ▅▌▊▌ ▋▌▋▆▅▊▌█▄ █▇▇▌▋▉▅▉
Optimize doors when recalculating series of connected rooms when doors are opened & closed
merge from analytics_base_occlusion -> main
merge from work_queue_optims
- anims and clips for weapons own anims, inc stock deploy + collapse, reload and fire
- initial animator setup for these weapon anims
- clip update of 3p idle
- avatar setup for world weapon rig
Add analytics events for rotating and flipping building blocks
▄ █▍█▅▊ ▌▅▋▉ ▇▄▍▅▌▊▍██▍▍▋█▊▊▄
█ ▅ ▆▆▋▋▇ ▊▉▅▊ ▆▆▊▅▄ ▉▌ ▇▉▌ █▆▆▉█▄▋▅▊▆ ▇▉▅▄▊▉▆▋ ▄▅▍▌▍▋▆▇▍▊▋ ▇▍ ▌▊▄ ▍▌▍▊ ▆▊▉▉ ▍▌ ▇▊▄▊▉█▆▄▇▇ ▍▊▇▉▇▅▅▅ ▇▇ ▇▉▌ ▄▄▋▊▊ █▇ ▉▇▍▄ █▉▆▇▅▆▄ ▌█▆▅ ▇▉█▇▅ ▉█▅ ▉▉▌▋▄▉▋▌ ▊▊▄▋▉▊▆
boat_scientists_improvements -> main
Only attempt turns when we can actually see the player
Lap interval pass on additional work queues
- DroppedItemUnderwaterQueue, 0.05, keep inline (ish) with physics tick rate
- BotColliderWorkQueue, 0.1, this is only refreshed every 0.2-0.3 seconds anyway
Fix bad merge when updated before submitting livestock lamp changes
merge from main -> base_occlusion
merge from analytics_base_occlusion -> main
boat_scientist_improvements -> main
- Give up players if you've been chasing them for a while
- Pursue for a max set of meters unless that player shoost you
replicated_convar_error_change -> main
item_pool_expansion -> main
radwater_color_throw_fix -> main
Add "isOpen" to the existing door toggled event
3p setup wip
- 3p anims
- holdtype controller population
- holster placement
▇ ▇▉▅▊▋ ▉▄ ▌▍▇▌█ ▋█▋▊▋ █▄█▄▆█▊▋▄ ▋▉█▄▊ ▄▇▆▉▋▌▉ ▋▊▆▆▍ ▆▋ ▅▌▋▇▄▍▆▆▌ ▇▄▅█ ▌▊▋▉▇ ▍▋▌ ▄█▍▍▌▆ ▋▇▆▌ ▇▅▍▉▅ ▄▅█▅▇▌ █▍▉▊ █▊▄▍▊▍▄▉▍▅▇▌█▆ ▋█▌▊█▊▍▉▇ ▉▊▇▍▌ ▇▍▉▉▇▇▇▉ ▋█▉ ▍▇▉▍█▋▆ ▋▅▇▍▍▋ █▌▊▌▇█▆▆▄▆▆▍▉▌█▄▌▅ ▋▇▅▉▇▇▉▌▋ █▉▋█▇▍▋▄ ▉▊▉ ▅▆▆▆ ▍▅▇ ▄ ▍▍▌▊▆▅▅ ▊▊▌ █▇▆▉▋ ▋▊▆ ▋▌▍▋▋▌█▇▄▉ ▄▍▊▆▄▉▌ ▋▊ ▌█▆▆▇▅▆▄▇▆
- Swap to another target if the boats main target is obstructed
- Otherwise decide to bail if the target has been hidden for a long time
Fixed NPC related crashes
Minor cleanups
Move DrawTexturedRectUV changes to a separate func
* DrawTexturedRectRawUV
Make "SetPos touch triggers" change opt-in via argument
* This change causes infinite loops in existing addons, such as TTT.
Fixed auto complete for lua_refresh_file
Added Player:RunConsoleCommand
* It's serverside only, has the same limitations as Global.RunConsoleCommand
Use Player:RunConsoleCommand in some sandbox tools
Fixed citizen_sheet_bloody.vtf appearing blurry
Bugfix: fix WaterPurifier incorrectly increasing stack of garbage in output just before removing it
Tests: none, trivial change
Bugfix: ResearchTable.ResearchAttemptFinished - preserve ItemDef from the removed item to avoid NREs
Tests: none, trivial change
commit remaining textures that were for some reason not included
added new milk icons so its clearer what they are when in fridge. updated asset textures accordingly
Optim: use IndexOf to avoid double scan in ItemContainer.Remove
Tests: ran unit tests
▊▇▌▌▆ ▍▇▄▊ █▆▆ ▄▄▊██▋ ▉▍▌▋▉ ▉▇▌▋▋
Bugfix: reimplement ItemContainer.Clear loop to invalidate items at the end of iteration
- removed couple cases of dead code
Tests: unit tests + server automated tests, down to 1 failing
If the target is no longer valid then move on to someone we can see, or bail out
Workshop Downloadable Source - Default name for files now uses dashes instead of dots. "rifle.ak.obj" would now be "rifle-ak.obj" to prevent issues
Workshop Downloadable Source Models - Updated all files, adding a (correctly shaded) _triangulated mesh for every quadded mesh. Kept the quadded meshes when they existed for skinners to choose. Downloading meshes now downloads one file with all the meshes inside instead of one mesh per file. Updated .skinnable files to match the new file names. Removed old files
exported seagull take off anim