140,315 Commits over 4,505 Days - 1.30cph!
Bugfix: fix races in parameter caches when slamming SwitchToThreadPool
- UniTask synced up to commit c995d2b
Tests: ran SwitchToThreadPool test - now passes
New(tests): add TaskTests.SwitchToThreadPool that reproduces deadlock reported by community
Tests: gets stuck as expected when PooledRunners are active
Boat sail optimization, LOD2 and LOD3 now switch to newly baked static meshes (with lowered/raised variants) instead of the skinned mesh renderers, so they can be batched
Replaced animator string usage
Fixed material not being applied in 3rd person
Fixed honey bandage position not being the same as the regular bandage in 3rd person
Cleanup wolf foundation jump test
Fixed save load path registeringcomponents twice
Add test for wolf leap on foundation, not cleaned up yet
Updated all IO tests to the new syntax
Rename navpos to navVector3, as it can also be a direction / delta, delete old navVector3, fix compile errors
Fix world space leak in wolf and tiger leaps, fix eqs donut potentially using uninitialized garbage nav nextPosition
Initial work to create dedicated navmesh position
merge from trdesk_snapping_fix
Fix an old "Cannot set the parent of the GameObject" sound error when disconnecting while on a moving train
Slight cleanup + reformat
Fix for procedural rail lines sometimes not linking up properly at junctions
There was an old bug in train track collation that could miss junctions when splitting up the splines, depending on the iteration order. Likely only became visible recently when we switched to FindObjectsByType with FindObjectsSortMode.None
Tested a known case / seed that had a broken junction after initial map generation but not when loading the map from a file - now works in both scenarios
Added language.FormatPhrase
* Helper function, to replace language.GetString():format()
Add localization string for "Skin 0", etc (properties sub menu)
Fixed DPanelSelect running convars too much on creation
* When creating a bunch of icons (player model selector), it would run the convars for selected item for each item added. Now only runs the convars when the selection actually changes.
Added right click menu with reset option to DColorCube
Fixed DColorMixer:GetVector being always 1 change behind
* This changes GetColor in DColorMixer:ValueChanged to be the new value, not the old value. This fixes player model selector color selector always being one "change tick" behind, so color resets were not really applying correctly
Added ability to localize player model names, and categorize them
* Data only
* Added player_manager.GetAllPlayerModels() that includes categories/nice names
* Added 2 new arguments to AddValidModel - nice name and category
Minor derma cleanups
Make DColorMixer palette centered and attempt to size it correctly
* Size to fit all palette items into exact number of rows
* Added DColorMixer:SetPaletteName
Make DHorizontalDivider work with percentages
* This helps when resizing panels, and when screen resolution changes between game sessions
Fixed DPanelList ownLine handling
Overhauled the default Player Model Selector
* Take more of the screen by default
* Improve model rendering to not have overblown phong effect
* Display player model categories
* Can now resize model and model selectors via a divider
* Can reset player/weapon colors to default, and added palettes so you can store custom color presets (separate from all other palettes)
* Preview: https://files.facepunch.com/rubat/2026/August14-3121-LightslategrayIrishsetter.png
Update player model spawnicons
* To get rid of the plastic phong sheen
IOTestFixture, helpers for IO2 automated tests
Updated AND switch tests
Converted more stuff: seismic sensor, some audio entities, fuse box
improvements to the muzzle attachment setup
unified origin point for these attachements to be at their base - makes placement much easier
used prototype 17 as an example and updated its muzzle attachment positions
attempting to normalise render sizes weapons and clothing
setting up glass ar 3p anims and world model
fix bugs with syncing the server state of the arcade to the active player, update manifest
fixed large planter gibs spawning upside down
improved first person and specifcally 3rd person muzzle brake positioning for the following:
sks, thompson, sar, pistol revolver, space lr300, pump shotgun, prototype 17, mp5, m4 shotgun, m249, m16, hmlmg, custom smg and handmade smg
prefab setup, gotta regen manifest
add feedback for hitting notes, bootleg fake particles, level up toasts
basic replication for spectators
Initial setup for character customisation. Simple convar based system to swap between various pre-existing player model features
Glass AR - shader fix for self sorting issues in viewmodel
Converted door controller: had to set the monument door controller prefab inputs as main power slots, will need some S2P
Converted most lights, fridge and car lift
New tool Tools > Find > Unreferenced Assets
Scans the project for assets that are not referenced by anything, tracing chains so that eg. a texture referenced by a material that is not used anywhere will be counted as unused
Can't catch everything - assets loaded by string path in scripts won't be caught by this tool, so use with care
Right click-dragging items in the crafting queue now lets you move them around within the queue.
Fade all other queued items out when dragging an item.
https://files.facepunch.com/ad/1b1411b1_2026-08-14_12-27-43/crafting_reorder.mp4
merge from woodarmour_skinnable (wood armour items skinnable setup)
wood armor hat, gloves, jacket, pants skin setup, fixed icons, icon renderer, workshop scene rotations, workshop source models for each
network_range_audit -> main
optimised LOD0 of the burlap sack, much cheaper than before.
Reduce the networking range of the following objects from 256 -> 128m (7/7)
Reduce the networking range of the following objects from 256 -> 128m (6/7)
Reduce the networking range of the following objects from 256 -> 128m (5/7)
Reduce the networking range of the following objects from 256 -> 128m (4/7)
Add a "Random" option with a dice icon to the start of the skin list, selectable/saved per-item type.
With this selected, a random unlocked skin is used per craft.