1,062 Commits over 1,004 Days - 0.04cph!
▇ ▄▆▍▍▊ ▇▆▌▄ ▍▇▇▇█▍▇▌█▆▆▅▊▇▆▋
▋ ▋▉▋▉▋▍ ▋▋▋ ▆▉▊▌▋▇▍▆ █▌▅▌█▍▅▅ ▉▍▅▅ ▆▅▍▊▆▆▊▄▇▊▊▆▌ █▌█▍▉▅▋▊ ▆▉ ▅▄▌▇▊▉ █▆▄ ▉▊█▄▊ ▍▊▉▊ ▌▍▋▅
▄ ▉▆█▊▌ ▆▊▉▆ ▅▄▉▋▆▆▉▊▍▉▊▅▆█▌▌
▉ ▆▉▆▅ ▍▋▅█ ▌█▆▌▆▉▉▅ ▄▍▅█▍▄ ▅▋▆▆▆▍▆▌ ▌▋▉▉▉▇▋
merge from aibrain_sleep_spawn_fix
AI movement tick is not ran on AI init if they are sleeping on spawn
- long-standing bug, because Think never runs on sleeping AI a destination is never actually set and movement tick is wasted processing
merge from aizone_sleep_fix
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
merge from work_queue_optims
▄ █▍█▅▊ ▌▅▋▉ ▇▄▍▅▌▊▍██▍▍▋█▊▊▄
█ ▅ ▆▆▋▋▇ ▊▉▅▊ ▆▆▊▅▄ ▉▌ ▇▉▌ █▆▆▉█▄▋▅▊▆ ▇▉▅▄▊▉▆▋ ▄▅▍▌▍▋▆▇▍▊▋ ▇▍ ▌▊▄ ▍▌▍▊ ▆▊▉▉ ▍▌ ▇▊▄▊▉█▆▄▇▇ ▍▊▇▉▇▅▅▅ ▇▇ ▇▉▌ ▄▄▋▊▊ █▇ ▉▇▍▄ █▉▆▇▅▆▄ ▌█▆▅ ▇▉█▇▅ ▉█▅ ▉▉▌▋▄▉▋▌ ▊▊▄▋▉▊▆
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 water junkpile queue leaking at about 150 entries/hour, causing budget to max out pretty quickly
- also introduce concept of work queue intervals, allowing the enforcement of min seconds between two passes, UpdateNearbyPlayers only runs every 0.5-1 second so queue has been changed to match this
▉ ▆▆▊▊▄ ▌▍▊▋ ▍▌▄▄▄▉▆▍▆▇▉▍█▌▊▄
▄ ▍▉▇▅▅ ▇█▉▇▅▄▇▉▇▌ ▌▇▆▍▇▋▆█▉▇▊▇▊▊█ ▋▊▆▆▍▄▇▇▉▍▅ ▋▉▉▊ ▍ ▉▊▇█▉▍ ▇▆▇▋▅ ▌ ▌▉▄ ▌▍ ▍█▇ ▄▆█▌█▍▊▍ ▆▍ ▋ ▍▌█▅▋▆ ▆▌▌ ▇▄ ▍▆▌█▉▄ ▍ ▇▌▉▅▆▌ ▆▆▉▍▉▆▇▄▇ ▍▅ ▄ ▇█▆▊ ▊▄▉▄▄▇▅ ▍▄█▉▄ ▍▄▅▌▉▉ ▌▉▋ ▆▆▉▄▍▉ ▆▋█▅▊▊ ▋▅▉▉▆▋▍▄▉▌ ▅▋▇▅ ▆▌▇█
merge from cargoshop_crate_optim
Cargoship crates no longer mark themselves as dropped
- Prevents an unnecessary raycast being ran for each crate 66 times a second (costing ~80 µs each call) for as long as they're active
▆ ▊▉▌▆▊ ▅▅▄▌ █▆██▋▉▉▉▆▋▊▆▉▆▋▄▉▆▌▍▆▆▋▊▆▍▅▇▍█▌▊█▉▋▍
▋ ▇▌▊▌ ▋▋▊▍▉▋ █▌ ▌▄▍▅▌▆█▉ ▍▇▌▊█▋▉▉▅▌▍ ▇▊▍▍ ▆▊ ▋▌ ▄█▌█▆▄█▉ ▆▋▇█▄▋█ ▌▍▄▄█▄▅▄▋▊▋ ▅▆ ▍▄▊█▅▇ ▇▅▅▍▉▉ ▍▆▇ ▌▋
▇ ▍▇▇▊ ▋▅█▇█▊▍▄▄▊ ▋█▉▌▅▋▆
▍ █▅▄▄▊ ▊▌▉▄ ▌█▆▋▇▇▄█▌▄▉▊▊▄▆▄▆▊▉█▊▆
█ ▅█▌▊▋▆ ▇█▊ ▅▋▉▆▊▋▊ ▋▌▊█▇▉▋▅█▇ ▄▇ ▊▆▄ ▌▅█▇▋▆▌▌█▋ █▆▊▄▌▋▍
merge from analytics_biofuel_generator
Add resource consumption/production events for the biofuel generator
▍ ▄▍▉▆▌ ▌██▉ ▊▌▍▉▇▉▋█▌▍▉▄▄▅▌▇█▄▌▍▌▇
▋ ▆▋▇▉▊▅█ ▊▇▆▆▋█▅▋▆ ▊▊▉ ▋▊▄▄▇▉▆▆ ▅▄ ▊▌▍▋ ▍▇ ▉▉█▇▄▅▆▉ ▌▅▄▇█ ▇▋▄ ▍▉▇ ▅▆▋▄▄▇▌▇▉ ▋█▆▄▉▌▆▊▆▆▉ ▊█▉▅▆▉ ▌▌▋▇ ▉ ▌▇▇ ▋▄▋▉▇▄
▆ ▄▅▋▄▊ ▆▅▅█ ▅▄▉▆█▍▄▊▊▌█▌▄▌▇▊█▊▇▉▆▋
▋ ▋█▉ ▉▋▌▊▄▄ █▆ ▌▋▋ ▆▉▄▊▉▇▊ ▌▉▆ ▄▉▄▄▋ ▌█▍▌▊▌▉▄▌▊▄▇▌ ▅▊▄▆▉▋▋▅▍ ▍▆▋▅▍ ▍▆▉▅▋▉▆▅ ▄▇▍▅ ▍▋▉▅▍█▄ ▋▊ ▌▅▋▄▇▇ ▉▍▉▋▅▉▍▉▋▇█▇▋ ▉▍▊▋▇ █▌▍▉▋ ▍▋▋▇▆▄▄▋▅█▆▋▆█▊▋
merge from contacts_server_occlusion_fix
Remove allowrelationshipserverocclusion convar and associated code, redundant and cost us a dictionary lookup
merge from contacts_server_occlusion_fix
Fix visibility logic on acquaintance updates never working with server occlusion disabled
Ignore actively animated building block entities when calculating headroom for player movement
- fixes awkward autocrouch when overlapping on a closing door
merge from animated_entity_headroom
▇ ▌▆█▊▆ ▊█▉▊ ▄▅▉▇▄▊█▅█▇▌▆▊▄▊▋▌▍▄▉█▅▇▌▍▄▌
▌ ▉▉▆ ▅▇▅▍█▆▇▇▌▋▇▍ ▍██▄▋▄█ ▋▉ ▅▍▇▋▋▄▍▍▌ ▉▄ ▄▇▅▊▌▊ ▌▍▋▊ ▇▊▉▇▅▅ ▉▉ ▄▌ ▄▋▊▄▇▌▅ ▊▅ ▇▇ ▍ ▆▆▍▊▇▌▅
▅ █▊▋▄▆ ▄█▉▊ ▅▌▄▅█▊▄▅▆▆▌▇▆▆▍▊▍▍▌▅▉▄▅▊▅▋▆
▊ ▅▍▉▉▇▉▍ █▆█ ▅▇▊▋▍▊ ▉▆▍ ▊▄▄▍ ▌▍▅▇▉▇ ▅▌ ▋ ▊▋▊ █▌▋▄▋█▆▄▉ ▊▊▉▋▆ ▆▉▋▌ █▊ ▄▍▋▉ ▆▆ ▇▅▅▊▇ ▊▌▄▉▋▋▅▅▆
▅ ▄▊▍▉▅ ▊█▌▌ ▌▅▉▄▊█▅▄▍▉▋▊▋▄▄▅▅▉▄▇▌▅▋▍▆▇█▋█▊▍▅▅▇
▊ ▋▍▋ ▅▇▆▌▋█ ▅▇▍▉▍▌▋█▍ ▅▊▇ ▉▋▍▉▆▍▌▉ ▉▍▇▍▌ ▇▊ ▄▆▅▅▌ ▉▆▍▉▊▊█ █▍█▅█▆▆▅▆▋▉▄▆ ▄▅▍▆▍ ▍▊▊▅▊▅▌▍ ▌▋▇▋ ▇▌ ▊▉▇▊▄▋▍▊ ▉▆█▆▋▄ ▍▋ ▇▆▋▊▊ ▍▌▆▆ ▆▇█ ██▋█▇▋ ▇▋▋▉▌█
▆ ▋▊▍▄▌ ▉▆▋▄ █▅▆▄▄▊▍▊▋▅▉▅▉▉█▆▉▆▍▌▍▅▉▆▅▊▍▋▄▇▊▉▌▅▇
▇ ▋▌▆▇▍▍▋ ▊▋▍▌▊ ▅▅ ▄▋ ▅▆▊▇▍▊▉ ▋▆▍▋▆▅ ▋▊▋▌ ▅▌▌▅▅
█ ▄▅▉▇▅ ▅▅▇▋ ▄▊▍▄▅█▊▅▌▄▌▅█▆█▅▄▌▊▆█▉▍▄▍▊▍▊▆▍▍▊▍▊▌
▍ ▆▄▍▍█▋ ▊▍▊▌▇▍▉ ▄▉▇▆▋▍█ ▇▍▆▅ ▆ █▍▋▌▇▋▋▍▍▉█▉▊ ▆▊▌▆▆▆▋▉ ▍▊█▊ ▋▍▌▉▉ ▆▌▋▋ ▄▋▌▄▆ ▅▉ ▍▉█▄▋▉
▋ ▅▌▄ ▍▄▋▋▍▅▋ ▋▉▇▉▊ ▋▍▋▉ ▄▆ ▉▍▄▍ ▌▉▋▍▍ ▉▊▉▄ ▊▄▄▄▇█▄ ▆▌▌ ▊▉█▅▋▅▉ ▄▉██▉ ▌ ▄▄▅▅▍▍▆ ▆▅▍▇▌▉▋▌▇▄ ▄▍▋▅▇▇ █▇▄▌▇█ ▄▅▉▄ ▆▄▍▆▆ ▄▆▉▉█▉▅▇▅ █▊▋█▇█▌ ▋▊▊ ▋▌▍▅▌ ▌ ▅▋▋▋▇▊▍▅ ▋▄▊▅▉ ▌▋▇▍▍█▋ ▊▉▌▄▆ ▉▇▇ ▉█▅▅▋▋▇▌▇▊▋▋▋▊▋ ▇▋▋▅▋ ▍▇▌▄▊▅ ▅▉ ▌▋▉▌▆ ▉▉▇▌▉█▌▉▍ ▄▇▅▊▍ ▄▌▉▆▉▇▉▇▅▊ ▅█ ▉ ▉▌▍▊ ▅▍█▅▄▇█ ▆▆▆▆▄▇█ ▌▄ ▅▅▊▇ █▍█▊▆█▊ ▋▄ ▌▇▊▍▇▆▆ ▆▌ ▍█▄▍ ▆▅▇▇▋▆▆ ██▇▅▉▅▅█▋▍ ▊▋▊▆█ ▍▉▄▍▅ ▊ ▌▇▆▅▆█▋ ▇▇▌▊█ ▉▉▇▍ ▉▇▆▅ ▌█▌▇▋█ ▋▋▅▋ ▇▌▄▊▊ ▅▅▍ ▇▊▇▄▇▄ ▍▇▅▊▄▍ ▄▊▋▄ ▌▇█▌█
▆ ▊▄▄▉▍ ▇▆▌▉ ▇▉▅█▊▅█▉▇▉▇▇▄▋▊▋▅▊▅▅
▋ ▇█▌▅▄▌ ▋▊▅▊▋█ ▌▍█ ▄▍▇▅▆▅ ▌█▉▄▆▄▍▇█ █▍▉ ▊█ ▌▌▋ ▌█▇▋ ▋▆▌▉▆▄▊▊▊
merge from server_occlusion_wait_and_integrate_pairs
Parallel pair gathering for server occlusion now uses the same wait-and-integrate mechanism as net subscription updates
- also reduced pair gathering player count to 16 from 64, to ensure more threads are being used in medium-high pop scenarios
- consistency tests pass