145,220 Commits over 4,413 Days - 1.37cph!
auto_turret missing cover fix, fixed in scene prefabs, fixed workshop issues
merge from main -> optimize_generate_textures_alloc
Implement IO entity reskinning with the new system, will now always nicely adjust any connected wires / pipes to the new positions:
https://files.facepunch.com/cipeaX/2026/May/21_01-08-RightBighorn.mp4
Add culling sphere component to the apartments
Add culling support for apartment furniture
- start with large spheres around each apartment
- add extra check if the player is inside the apartment to handle corners of the apartment the culling sphere doesn't reach
Update: Codegen
Tests: builds
Merge: from main
Needs codegen
Optim: reimplement all Arg.Get* via GetStringView
Avoids allocations in the GetString fallback
Tests: unit tests
Update: add StringView-to-numeric extensions
Tests: ran unit tests
Fixed mid-length hair being skinned to eyes
Clean(tests): get rid of redundant profiling code
Tests: builds
Fix a bug causing io lines to not update correctly when multiple storage adaptors on the same barrel have connections between themselves
Optim: BuildCommand - remove another Substring alloc via StringView
Down to 3 allocs/0.34KB per call
Tests: ran a couple commands with and without args
Reconnect apartment doors to apartment prefabs
Optim: ConsoleSystem.Index uses StringView internally to avoid allocations
Tests: booted into craggy, ran a couple commands (short and fully qualified)
Put apartment elevator at the end of the wing
- add extra floor for basement
- split apartment floors into their own prefabs
Integrate item container and child item container preserving into the new system
Re-implement entity children preserving, with attachments repositioning if their sockets shifted, child io entity also have their connected lines update correctly
Fixes various current bugs with storage adaptors / door controllers when their parent is reskinned
Make ceilinglight reskinnable again, will fix reskinning io entities themselves next
Fix not being able to skin snowmobile back to default
▇ ▉▋▊▌▍▋▇ ▉▍█▋▄▌▅▇▇▇▄▉ █▊█▉▉▌▌▅ ▍▍▍█▍▍▅▋ ▍▉▄▍█ ▄▊▉▇▉▆▇█ ▋▆▍▄ ▇█▊▄▆▄▍▄▉█ ▉▄▄▋▄▋▇█ ▋▇▅▄█▍▍
Duplicated second elevator in reception area
Apartment elevator now functional
restored missing hair textures for movember moustache and santa beard
Industrial Torch - Small texture update (still WIP), changed base materials from smoothness to metalness, fixed material assignment on worldmodel (from half on to full off)
Added a viewmodel button to the skin viewer, pops the view model (wip)
increase censorship pixelation size with decreasing camera FOV (binoculars, etc) to account for further away stuff taking up more screen area
add optional override for pixelation censorship pixel size, override it for player preview so it looks correct
functional darts 1p viewmodel
Analytics event for changing entity colours with the spraycan should now be raised for all appropriate entities
finalize RRP underwater post processing
▇ ▋ ▋▊█▌█▌▋▉█▋▅▍▄ ▄▊ ▅█▊ █ ▄▊█▆▅▄▌▉██▇ ▋▇▅▋▍▌▄ ▍▌ ▊▉▍▅▆█▄▆▋▊▉▆▋ ▌▇ ▅▆█ ▇▋▉▆▆ ▄▅▄▌▌▆ ▅▋▄ ▉▌▌█▊▆▍▊ ▄▊▌▌▌ ▄▄▉ ▋▊▊█▋ ▅▆ ▇▆▍▄ ▆▊▆ ▍▊▌▉ ▋▍▄▌▉▍█ ▊▋ ▌█ █▅▄▄▇ ▄▊█▆ ▇█▉ █▆▋▆▋▄▌▊▆▄ ▇▇▅ █▍▄ ▋▄▄█▇ ▍▌▋▍▅▇▆▇▅▉▅▆▇▊▉▌ ▋▊▊▌▅▅ ▇▌▋▍▌ ▄▉▋▆▇ ▄▅ █▇▍▆ ▉▋ ▊▇▄█▅▄▋ ▋▇▆▍▇▇▉▆
HasActiveFakeConnection tweaked order of conditions + added `relay.status` convar
Optim: Arg.Args is now a StringView[]
Most of the code uses GetString to lazy alloc a string. BuildCommand is now 4 allocs/0.4KB per call
Tests: unit tests, booted into craggy and set a couple variables, tested crosshair clientvars
merge from texture_optimisations
Adding bullet joint to m16 rig
Optim: Arg.FullString is now a StringView
- updated CodeGenerator to support StringView params
- ran codegen
Saves an allocation(once I’m done with conversion). Currently at 12 allocs/0.85KB per call
Tests: booted into cragy, tried echo and say commands
▍ ▉▅▌▇▄ ▇▋▉▌ ▆▋▌▉█▋▄▍▍▊▄▊▉▅▉▉▉▋▉▍▌▊█▍
█ ▆█▊▍▆▍ ▆▇▉█▍▅ ▄▋▅▊ ▇▍▆ ▍▇▇▌█▌▋ ▅▇▅█▇▄▍ █▍▅
Head texture optimisations
Randomly apply a movement offset thruster effect too when tightening radius.
Refactor.
Update: add StringView.Trim(char) overload
- add unit tests
Tests: ran unit tests
Optim: add StringView.SplitQuotesStrings overload
- Refactored logic to work on StringViews internally
Only has 1 alloc(StringView[]). Using it is blocked on whether I'll be able to convert Arg.Args field to StringView[] or not
Tests: none
Update: add StringView.EndsWith(StringView)
- added trivial unit test
Tests: ran unit tests
Fixing swimwear 05 skinning