140,100 Commits over 4,505 Days - 1.30cph!
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
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
In game player voices are now also muffled by heavy plate helmet
Increased volume reduction (was 2400, now 1800)
Add new HideLods and ShowLods animation events, same as Show/Hide but will iterate over lods 0-4 of the object provided
eg. Called with w_ar_glass_mag_full_LOD0, this will also show/hide LOD0,1,2,3 if they exist
All showing/hiding events now uses a lazily loaded cached renderer list so we pay slightly more the first time an animation event is fired but subsequent calls are faster and allocation free (was allocating 40b each animation event)
Updated glass ak reload to use new events
Merge from deepsea_terrain_everywhere
Swap the ocean colour as well
Animal AO caps: croc/stag/bears/panther/shark/wolf/chicken -> 1024/512, a further 17.5MB VRAM saved
Clothing AO pass: capped 57 maps 2048 -> 512/1024, ~120MB VRAM saved with no visual difference
also hooked up Cocoknight legs/torso AO which was never bound to its materials
merge from automated_testing
Reduce network range of glass ak
Delete unused anim event
Switch drop mag particle to use LOD1 (already has RW enabled)
Enable custom local folder on the animation events so the build doesnt change the path, mag drop works
Testlist, all tests pass
Split MinidumpUploader into multiple .cs files as it got a little unwieldy
Made the pipe hole mesh smaller and tweaked anchor setup to prevent terrain gaps