1,405 Commits over 365 Days - 0.16cph!
Update: forgot to save BaseRaidBenchmark scene with the changes
Tests: none, trivial change
Update: BaseRaidBench - add support for spawning a random base from a list
Tests: ran the scene
Update: DemoBuildingsViewer - add ability to export as a merged base
Tests: exported 3 bases from staging demo as 1
Update: DemoBuildingsViewer - can load multiple bases in a scene
Exports them separately, for now.
Tests: loaded top 20 bases from staging demo
Bugfix: DemoBuildingsViewer - spawn TOD prefab to allow digital clock to work
Otherwise it NREed
Tests: loaded base 3839 from staging demo
Bugfix: DemoBuildingsViewer - prevent attribute accumulation that leads to skin duplication
Tests: loaded up the largest base from staging demo
Bugfix: DemoBuildingViewer - fix building block skin spawning in the wrong location
Discovered that there's a new bug with duplicating skins on succesful scene opens
Tests: spawned the largest base from staging
Bugfix: BaseRaidBench - ensure weapons fire right projectiles
- Also reset cooldowns between runs
Tests: ran the scene
Update: BaseRaidBench - add support for multiple run configurations
- Also remote players now have id in their game object names for easier debug
- Fixed a bug with accumulating frame counter (:ops: #2)
- Updated subtitle display to see what's running
There's a burst-related NRE that gets picked up, but it's not directly related to benchmark.
Tests: ran the scene
Update: BaseRaidBench - record run name in results
Next up to setup variable-player runs.
Tests: ran the scene
Update: BaseRaidBench - output avg projectiles per frame
Helps us track changes to timers(bases made the benchmark faster as there's less projectiles on average)
Tests: ran the scene
Update: BaseRaidBench - support skins for spawned bases
Tests: ran the scene in editor
Bugfix: BaseRaidBenchmark - walls now appear on spawned bases
- Export the model bitmask for building blocks
- Updated the base json
Tests: ran the scene
Bugfix: unblock use of DemoBuildingsViewer after running benchmark/playing in editor
- Done via temporarily shutting down steam connection
Tests: opened the scen from the demo after running the benchmark
Update: move building hierarchy sorting to export
- also fixed the bug with using Append instead of Enqueue
Tests: ran BaseRaidBench scene
Update: BaseRaidBench - spawn bases around the firing circle
- added the largest base from my demo
Walls are borked, same issue as editor, gonna fix next.
Tests: ran the scene
Update: export parent IDs for entities in buildings
Tests: exported largest base from demo - confirmed expected entity had ID
Update: Move Building to it's own file
Makes it accessible for benchmarking
Tests: compiles in editor
Update: DemoBuildingsViewer - export base as a json file
Going to see if it's enough to rebuild the base for the benchmark
Tests: exported largest base from my demo
Bugfix: conditionally start bootstrap timer since it can be null
Tests: none, trivial change
Buildfix: remove dead burst code and move job to namespace
Avoids name mangling shenanigans
Tests: build client locally
Update: enable batched projectiles and water checks by default in the BaseRaidBenchmark scene
Tests: ran the scene
Update: add benchmark timer to SoundManager
- replace magic values for timers with named consts
It's chonky, so tracking it as well.
Tests: ran the scene
Update: add benchmark timers to Projectile.Update and BatchUpdate
Tests: ran the scene in editor, saw output
Update: Rewrite BenchmarkTimer to allow for accumulating time
- Renamed API to make it clearer
Tests: measured against a stopwatch in bootstrap loading
Update: BaseRaidBenchmark - lay down basic benchmark timer collection logic
Will contribute to benchmark results, but right now don't have any relevant timers + need to rework how they are implemented.
Tests: ran the scene in editor
Bugfix: DemoBuildingsViewer - fix missing walls
- Manually pre-process prefabs to get around editor skipping preprocessing
- Add an editor-only override for Facepunch.Instantiate to not treat gameobjects as prefabs
- Gather building entities from all keyframes
Tests: loaded biggest base from my cleint demo - matches how demo renders it
New: DemoBuildingsViewer(Tools/Demo Buildings Viewer) - utility to extract buildings from a demo and create a scene of them
- Fixed VisualFoodSetting.PreProcess to nominate for deletion, instead of destroying directly
Currently only looks at keyframe 0 to detect building entities, which doesn't seem like enough
Tests: used a client demo from a release server to spawn a bunch of building scenes
Merge: from autoturret_optim
- Fix server NRE during turret initialization for ones without RCEyes bone set
Tests: spawned sentry.scientist.static(no RCEyes) and autoturret_deployed(with) - no NREs and still can control and shoot from autoturret_deployed
Bugfix: NRE during initialization of turrets without RCEyes set
Tests: spawned sentry.scientist.static(no RCEyes) and autoturret_deployed(with) - no NREs and still can control and shoot from autoturret_deployed
Bugfix: unbork shooting from RC turrets
- Recalculate where RC eyes are on the server
Tests: remoted into a turret and shot in different directions - saw hits where expected
Update: Rewrite how we rotate turrets on server
- Where possible, yaw and pitch rotations are merged, saving us on math (0.32ms)
- Other cases are calculated separately (0.51ms, still faster than original 1.32ms)
Updating of separate bones was fast but wrong in my last commit. This version corrects it while also being faster than pre-borked-optim.
Tests: On Craggy, spawned sentry.scientist.static and autoturret_deployed, made them rotate to different directions - they were able to track and shoot me.
Update: AutoTurretTests.MeasureServerTick now checks merged and separate yaw-pitch bones
Since separated bone transformations take more math, need to profile how big of an impact it'll be.
Tests: ran the test
Bugfix: NPCAutoTurret now shoots when it's facing the target
Caused by not implementing the same optimization as AutoTurret (while NPCAutoTurret depends on it).
Tests: spawned `sentry.scientist.static` on craggy and became hostile to it - was shot within the whole 360 arc
Hack: BaseRaidBench - avoid flooding audio manager
During benchmark, we create too many audio sources and don't clean them up with default budgets - so we up them abit.
Tests: ran the benchmark - no longer grinds at 3fps
Bugfix: BaseRaidBench - audio no longer missing
This aligns it with running from game menu, so standalone editor runs now also struggle under AudioManager lag.
Tests: ran scene + ran `benchmark BaseRaidBenchmark` from game menu
Update: editor benchmarking runs now consistently set benchmarking flag
Tests: ran RaidBenchScene in isolation and all bench scenes in series - no exceptions
Update: add BaseRaidBench to the benchmark scene list
Tests: ran the benchmark command - it did execute my scene, but also started lagging as heck
Update: BaseRaidBench - set batched mode as default for scene
Update: BaseRaidBench - restore global state at the end of the benchmark
Tests: ran the scen
Update: BaseRaidBench - emulate timed explosive fuse
Not really important for now, but later once rockets fly upwards and have a chance to miss, this should make it match reality closer
Tests: ran the scene
Update: BaseRaidBenchmark - expose batching mode via component
Tests: none, trivial change
Update: BaseRaidBench - disable camera shake and hurt effects
Tests: ran the scene
Update: Add BaseRaidBench to build scene list and mark it for maps bundle
- Also removed the nuked Foliage scene - forgot to clean it up
Tests: none
Update: BaseRaidBench - unblock pooling
Takes the edge off halfway through the benchmark, but initial 5 seconds are still rough.
Tests: ran the scene
Update: BaseRaidBench - reposition camera to above the circle
Tests: ran scene
Bugfix: BaseRaidBench - fix NREs by loading game manifest on start
Tests: ran scene