141,857 Commits over 4,505 Days - 1.31cph!
russian roulette;
- lods added
- updated prefab
- material updated
LODGroup/RendererLOD -> MeshLOD conversion pass on vending machines, covered ch47/bradley props and tin can alarm: 129 -> 75 renderers, 23 -> 6 LODGroups, brings them into the LOD grid + occlusion culling
- vendingmachine family x5: RendererLODs collapsed to MeshLODs (55 -> 33 renderers) now can occlusion cull
- covered bradley/ch47 x6: LODGroups converted, wraps stay RendererLOD where materials demand it (66 -> 39 renderers); ch47_covered, ch47_covered_wrap + bradley_covered_wrap FBXs re-exported so LOD material order matches
- tincan.alarm: split into frame + cans MeshLODs so the rattle anim survives (8 -> 2 renderers); worldmodel onto MeshLOD too
merge from hackweek_parented_ddraw
Parent DDraw objects onto the player model instead of the BasePlayer object
merge from admin_status_indicators
Added Infinite Ammo admin status indicator
https://files.facepunch.com/raul/2026/August/31_19-35-AppropriateYosemitetoad.png
better FSM way to handle critter overrideable Interested states
merge from jukebox_snapping
Added Jukebox deployment snapping
https://files.facepunch.com/raul/2026/August/31_18-30-KeyWildebeast.mp4
9 alpha-less BC7 albedo/em maps -> DXT1, 3 also halved (retro cupboard ems, m16a2_02, loot barrel): saved ~28 MB VRAM, no alpha lost
no visual quality difference
VGUI tweaks
* Make Lua panels never overlap main menu (except for modal panels, TBD)
* Clientside DrawOverlay is no longer called from menu overlay panel
* DrawOverlay and CaptureVideo hooks use pooled strings
* DrawOverlay and PostRenderVGUI are now called just before main menu rendering (PostRender still is called after, TBD)
* Disable PreRender return value while main menu is open
Minor cleanup - give internal GMod panels better names
Move PostRender hook slightly earlier to never cover up main menu
* Specifically just before rendering the overlay panels/hooks (DrawOverlay/PostDrawVGUI), exactly where ClientMode::PostRender is called
Add caller info to "MapIO infinite loop" warning (if available)
Minor adjustments to detailobject system from CS:GO
* No functional changes, just maybe 0.001% faster loading times
Draw Lua panels behind main menu when it is open
Reduced DMenuBar spacing, removing it from the left side
Fixed DToolTip spamming PerformLayout from engine
* This was always happening, but was invisible before recent DrawOverlay changes. Now directly call PerformLayout to set/update the size, without going through the engine
Fixed DMenuOption spamming InvalidateLayout
* Another previously invisible issue
* Fixed DLabel:SetDisabled always calling InvalidateLayout(), even when the enabled value did not change. This is consistent with engine Label:SetEnabled behavior
Try to make Entity:IsPlayerHolding more reliable
Re-export fixed combine soldier player model textures
* Fixes green tint from VTFEdit export that I forgot about
Experimental error handling for Sandbox spawn concommands
* gm_spawn commands give player a notification when they fail, stating the failure reason
* This should hopefully help understand why it seems to not work sometimes?
Make seat jeep animation default to 0.5, not 0
Rework how Lua panels are put behind the main menu
* Fixes that one server having issues (probably not the only one), fixes spawnmenu getting rendered in save previews
Remove "VehicleMemDupe" entity modifier
* Appears to really just do nothing
Minor cleanups
Fixed green tint on group03 male player model texture
Minor adjustments to CEF implementation
* Added some safeguards in resource handlers
* Added mime type translations for gif, webm, mp4
Remove "Hinge Axis (Non functional)" field from prop_door_rotating
Fixed a crash with failing to create `physics_entity_solver` entity
Try to fix -tools on Linux
Fixed igniter and tesla coil damage tests failing since the last optim
Improve carvable pumpkin deployment
Batteries now add drain for the power actually reaching them
Updated tests
Regenerated MaterialIndex.json - was dated Aug 2021, so Tools/Optimize/Find Material Optimzations had been reporting 5-year-old state. Fresh scan covers 9,055 materials and flags 164 with compression savings (84 unique textures, ~68 MB VRAM potential) for example m16a2 ao on high quality compression = 1.3mb, normal compression with no visual cost = 0.7mb
First pass on the free wins: 15 alpha-less DXT5/BC7 textures -> DXT1, ~13 MB VRAM, no quality cost
- m2bradley mainbody/armor: removed DXT5 standalone override (5.3 MB)
- m16a2 AOs x3, flamethrower AO: HQ -> Normal compression (5.3 MB)
- workbench upgrade AOs x2, apartment door mats AO, crate_2/gib/webbing AOs: HQ -> Normal compression (2.2 MB)
Fixed wonky spark material offset. (Satchel charge and others...)
Fixed circuits dirtied mid tick not being handled in that same tick
merge from espcanvas_autosize_clan_fix
Improved alignment of the clan text UI on the player nameplates when it's auto-sized
https://files.facepunch.com/raul/2026/August/31_15-28-SatisfiedMonarch.mp4
merge from maintainables_fixes
Fix HQM collectable missing name token
Add beach to water pipe topology NOT filter
merge from maintainables_fixes
russian roulette;
- optim pass on game models
- updated prefab table collision rotation
Few more pipe acess fixes / prevented trees from spawning in the middle of the pipes / smoother terrain transition near the pipes
merge from sleeper_safezone_fix_2
Fixed typo causing sleepers to never be killed in safezones after server restart, regression from last month
Paintball Gun - added ammo to LOD3 to reduce popping
fixed blowpipe world model material order so it can be converted to meshLOD
russian roulette;
- textures updated
merge from ddraw_demo_fix
Fixed ddraw objects showing up in demos even if ddraw.hideddrawduringdemo is true
Before: https://files.facepunch.com/raul/2026/August/31_13-18-FirebrickDromedary.mp4
After: https://files.facepunch.com/raul/2026/August/31_13-19-GrizzledSteer.mp4
Paintball Gun - replaced rigged mesh in worldmodel with static one, updated hopper shader to fix self sorting issues
Disabled skin viewer viewmodel inspection for the crystal AR, SSR just cant work in the skin viewer so it looked terrible
Ornate horse mask WM LOD fix
Fix a scale override on large rig monument blocker, causing collision issues
Add a few missing vent cages
S2P large and small oilrig
WaterStandardCore light intensity correction
Reduce radius of all new crate gib sounds
Apply elite-crate-gib sound to crate_tools
Setup oxygen RRP postfx volume and overlay
Merge from hands_preview_workflow (includes changes from main)
Cleaned up some edge cases
Added a toggle to the animation inspector itself and added a text readout of what meshes were detected and loaded
Proof of concept of an automated editor utility that inserts the viewmodel hands mesh into the animation inspector preview window if no hands mesh is present
Allows us to still use the animation preview window once the hand mesh has been removed from the rig file
Uses some naming semantics to try and resolve what the actual mesh that should be displayed should be, this is probably where we'll feel some pain for this system
If the animation file ends in _anim it will check for a file ending in _rig, then fall back to looking for a file without the _anim suffix
So v_bow_anims.fbx will look for v_bow_rig.fbx, failing that it will look for v_bow.fbx
The preview window will then load that fbx and the hands model if needed, combine them and feed it into the preview window
Added new ViewmodelClothingRandomiser component
Allows us to mirror the randomisation applied to a Wearable to it's viewmodel in case that randomisation affects the arms
Component has a groups array like the Random section of the Wearable, when used the group count needs to match (as we'll just copy over which "group" was activated)
Merge from heavy_helmet_audio