1,623 Commits over 396 Days - 0.17cph!
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
Update: BaseRaidBench - players now animate and produce muzzle flashes
Tests: ran the scene
Bugfix: BaseRaidBench - track weapon cooldown properly
- also account for animation delay for weapons that have it
The benchmark is now much more tame.
Tests: ran the scene
Update: BaseRaidBench - stagger initial weapon cooldowns
More realistic, and avoids spiking specific frames
Tests: ran scene
Update: BaseRaid - emulate rockets and grenade movement
Tests: ran scene, player is blasted to high heaven
Update: BaseRaidBench - use projectile specific velocity
Tests: ran scene
Update: BaseRaidBench - weapons now use their respective projectiles instead of rifle bullets
- EffectLibrary can return GameObjects now
Tests: ran the scene. Server-side projectiles need further massaging (as there's no server)
Update: BaseRaidBench - implement firing cooldown
At least now frame time stabilizes around 150ms.
Tests: ran the scene.
Update: BaseRaidBEnch - wip shooting
Since there's no firing cooldown, 100 players shooting every frame lags a ton
Tests: ran scene
Bugfix: BaseRaidBench - this is no longer nude beach
Tests: built C+S and C-only, ran the scene
Update: BaseRaidBench - simulate client flow
- use a fake client backend and a dummy connection
Fixes players not facing the target, but breaks player clothing for what-ever reason.
Tests: ran scene
Update: BaseRaidBench - wip weapon aiming
- Weapon debug graphics confirm aiming direction
- Player model doesn't face the right way (need to run client updates, that's next)
- added benchmark-related safety checks in local client logic
This also hijacks main camera, I'll have to fix that later
Tests: ran the scene
Bugfix: BaseRaidBench - make sure weapon flags are synced with held state
Tests: ran the scene
Update: BaseRaidBench - give players projectile weapons on spawn
For what-ever reason, doesn't appear in hands(instead on back), despite being reported as "held". Still investigating
Tests: ran the bench scene
Update: BaseRaidBenchmark - adjust the camera positioning to get the full circle in view
Tests: ran the scene
Update: BaseRaidBenchmark - players are visible and dressed
Tests: ran the scene
New: BaseRaidBenchmark - stress test client via a raid scenario
- Doesn't do much, just ground framework
Tests: ran the scene - saw players spawn (but not their visuals)
Update: World Setup Benchmark -> BiomeBenchmark World Setup rename
- replaced default params on BiomeBEnchmark with placeholder to indicate they don't do anything
Tests: none, trivial changes
Clean: Refactor free-slot searching logic
Hope is to make it harder to mess up index calculation when writing more code of this style
Tests: GamePhys unit tests + projectile consistency unit test
Tests: GamePhysics.TraceRrays and TraceSpheres coverage
Wasn't covered previously which led a bug slip in. But has already been fixed.
Tests: ran it with bugfix revwerted - failed(as expected). Reapplied fix - passed
Clean: simplify previous bugfix
Tests: ran the unit test
Update: Projectile.TestConsistency now checks for number of phys commands issued
Tests: unit test passes
Bugfix: Projectile.TestConsistency - when substepping movement, use the right trace result
Tests: consistency unit test now passes
Bugfix: TestProjectileEntity now works in C+S
Tests: ran the previously failing unit test
Bugfix: Projectile.Batch - don't over-simulate prjectile when reacting to a hit/ricochet
Also noticed serial test vs entity is failing - will fix next
Tests: single-projectile-batch test passes, but the whole batch fails
Update: ProjectileTests.TestConsistency - debug code to isolate projectile
Still fails on 520, but now with different results(proj moves, but different height).
Tests: ran unit test - fails (expected)
Update: ProjectileTests.TestConsistency - rewrote logic to run both serial and batched in one test
- Removed old serial validation logic
- Renamed PerfSerial test to Performance (since it also runs batched variation)
Detects an issue currently, investigating.
Tests: ran the new test - fails (kind of expected, but still suspicious)
Update: AutoTurret.ProcessInterferenceQueue - remove last float time calc
Think all server-side logic has been ammended
Tests: builds in editor C+S
Update: AutoTurret.nextAmmoCheckTime -> double
Tests: builds in editor C+S
Update: AutoTurret.nextForcedAimTime -> double
Tests: builds in editor C+S
Update: TestLineOfSightBatched
A lil cheeky 44k raycasts test. Missing the actual batched query impl.
Tests: ran the test - failing as expected
Update: GamePhysics tests - move box grid creation to individual tests
Avoids polluting the world for other tests(problem for LineOfSightBatched)
Tests: ran the updated unit tests