2,834 Commits over 700 Days - 0.17cph!
Update(editor): change window title label for MotionVectorsChecker
Tests: none, trivial change
New(editor): MotionVectorsChecker - categorizes all renderers by motion vector mode
Can be found at "Tools/Find/List Motion Vector generators"
Tests: looked at appt monument - almost everything has per-object mode
New(editor): CulledMeshesChecker - finds all meshes without some sort of culling setup
Can be found in "Tools/Find/Meshes without Occlusion setups".
Tests: ran the tool on appt monument, found ~360 issues
New(editor): CulledLightsChecker, reports lights that don't have a culling setup
Inspired by ShadowProxyChecker. Can be found in Tools/Find/Lights without Occlusion setups.
Tests: Used it to inspect the appt scene
Merge: from unity_frame_dump
- New(editor): frame debugger dump utility(https://github.com/sputnicyoji/unity-frame-dump) to help analyze what is rendered
Tests: used it to dump out a couple passes
Update(editor): move the exporter to Window/Analysis
We've got too much in Tools
Tests: editor compiles
New(editor): import and change https://github.com/sputnicyoji/unity-frame-dump
- Changed full export to run on the provided user range
- added stop full export that still emits the resulting json instead of aborting
- Added license
Tests: exported a frame from standalone client
Buildfix: expose NetworkPosTickCallback setter
Tests: none, trivial change
Merge: from cargoship_bot_replication_fix
- Buildfix: expose setter for NetworkPosTickCallback
Tests: editor compiles
Merge: from cargoship_bot_replication_fix
- Bugfix: fix bots/sleepers disappearing from cargoship
Tests: spawned cargoship event, spawned bot, followed them for a couple mins - no houdini
Bugfix: ensure netgroup of sleepers/bots is updated when parented to a moving global entity
Tests: spawned cargo ship, spawned a bot and moved through net grid for a minute - bot didn't disappear
Merge: from dropspectators_nre_fix
- Bugfix: fix for NRE that happens when multiple spectators watch a player being banned
Tests: 2 players spectated 3rd, banned them - no NRE
Bugfix: use reverse traversal avoid NRE caused by iterator invalidation when dropping spectators
Tests: 2p spectated 3rd, banned them - no more NRE
Merge: from alloc_clean_july2026
- Optim: avoid ~15 separate allocations related to scheduling/cancelling invokes
Tests: none, trivial changes
Optim: cache FogMachine invokes
- StartFogging, EnableFogFieldCB, DisableNozzleCB, FinishFoggingCB
There were invoked in StartFogging, which can oscilate with power.
Tests: none, trivial changes
Optim: skip BeeSwarmMaster.StartDie call if already dying
Saves on ActuallyDie invoke and allocation
Tests: none, trivial change
Optim: avoid repeated invoke scheduling in BeeSwarmAI
- SetOnFire gets skipped if bees are already on fire (saves StartDie scheduling)
- StartDie gets skipped if bees are already dying (saves Egress scheduling)
Tests: none, trivial changes
Bugfix: fix caching of DiveSiteBuoy.updateAction
Tests: checked IL
Optim: cache Sprinkler.DoSplash invoke
Tests: none, trivial change
Optim: cache HBHFSensor.UpdatePassthroughAmount invoke
Tests: none, trivial change
Optim: cache ElectricBattery.TickUsage invoke
Tests: none, trivial change
Optim: cache ElectricBattery.AddCharge invoke
Tests: none, trivial change
Optim: cache CoalingTower.CheckWagonLinedUp invoke
Tests: none, trivial change
Optim: Cache StrobeLight.SelfDamage invoke
Tests: none, trivial change
Optim: cache SamSite.WeaponTick invoke
Tests: none, trivial change
Merge: from fullserverdemo_removal
- Clean: Remove FullServerDemo implementation (RustRelay will take us to the promised land)
Tests: compiles, recorded client and server demos and was able to play them back
Clean: get rid of Network.ServerInfo
Was added for FullServerDemo support, no longer needed
Tests: compiles
Clean(editor): rip out DemoSever framework
It could technically emulate server state from client demos, but required too much compromising, so not worth it.
Tests: compiles
Clean: delete Demos folder from Facepunch.Network
Tests: compiles
Clean: delete full-server-demo convars
Tests: compiles
Clean: remove IServerCallback save request support
Keeping the core functionality on SaveRestore
Tests: compiles
Clean: remove FullServerDemos.cs
Tests: compiles
Clean: remove BaseNetwork.SupportsServerDemos
Tests: compiles
Clean: remove demo.full_server_demo
- rip out a bunch of stuff related to it, including transient entity serialization
- remove MessageType.DemoDisconnect and DemoTransientEntities (no need for protocol change)
Tests: compiles
Clean(editor): remove ServerDemoPlayer
Tests: compiles
Clean: remove AntiHackDemoProcessor
- drive by deprecated API fixup
Starting process of removing full server demos
Tests: compiles
Resave TimeManager
Tests: nothing specific, but have been running with this changed for a couple days
Merge: from waterlevel_deepsea_sample_fix
- Bugfix for water level queries incorrectly mixing deep sea and overworld states
- Bugfix for deep sea ocean sim using overworld heightmap
- Simplified TerrainHeightMap API
Tests: ran unit tests, booted into craggy, explored deep sea and swam around
Bugfix: avoid NRE when ocean sim is not initialized and we don't need it
Tests: booted into craggy
Clean: simplifyy WaterSystemBurst.GetHeightArray_Burst
Tests: none, trivial changes
Clean: minor adjustments to WaterLevel.GetWaterLevels impl
- use FillJobIndirect instead of FillJob when waves are not needed
- get rid of namespace qualifier
Tests: ran unit tests
Bugfix: OceanSimulation.GetHeightAttenuation - handle positions in deep sea
Tests: WaterLevel unit tests pass
Bugfix: Rewrite WaterLevel.GetWaterLevel to properly take in deep sea state
Tests: ran unit tests, water level consistency tests fail due to bug on OceanSimulation side, serial path, will fix next
Update: TerrainHeightMap.GetQueryStructure now takes in a flag for deep sea data
- got rid of bespoke height and normal sampling from HeightMapQueryStructure
- bugfix: buoyancy - WaterSystemBurst.GetHeightArray_Burst now samples relevant heightfields instead of assuming deepsea heightfield is a single const
Last duplicate is gone, yay. Can finally look at fixing WaterLevel.GetWaterLevel and other spots
Tests: booted into craggy, generated deepsea and teleported to it - swam around, went to the islands, went to scientist tugboats
Clean: rip out TerrainHeightMap.GetHeightsFastIndirect
GetHeightsIndirect is similarly fast(~10%) and consistent at borders with GetHeight
Tests: ran water level tests (but they're falsely passing)
Clean: remove TerrainHeightMap.GetHeightFast, replace with GetHeight
- added GetHeight(Vec2) overloads to avoid accidental GetHeight(Vec3) call via implicit conversion
GetHeightFast is ~55% faster in managed land, but it's not used in very hot loops, so doubt we'll notice the difference. If we really care, we can replace it with available burst jobs.
Tests: ran unit tests
Update(tests): add TestGetHeightsIndirect_UV_Overworld and TestGetHeightsIndirect_UV_DeepSea tests
Tests: ran all unit tests