184 Commits over 487 Days - 0.02cph!
Merge: from randomize_junkpile_checkempty
- minor optim to load balance JunkPile::CheckEmpty
Tests: looted one on craggy, saw it disappear
Merge: from procpop_debug
- Bugfix: fix DensitySpawnPopulation prefab pool being starved out, resulting in failed spawn attempts
- Optim: DensitySpawnPopulation early exits if it reached prefab population target isntead of continuing to try to spawn
- New: spawn.report now contains info about failed iterations and how many entities it recently spawned
- New: spawn.dump_map <pop> [count] which simulates spawns and generates pngs indicating general spawn area and attempted spawns. Pngs in <server_ident>/debug.
Tests: 4.5k procgen in editor - server started with full junkpile pop, simulated spawn gave better numbers
▆▅▇▍▇: █▌▋▄ ▋▊▌▊▆_▉▋▍█▊▆
- ▌▆▉▉▊▍▍▅▊▊▋▋▄ ▊█▆▊▉▉ - ▅▉▉▋▍▅ ▊▋▊ ▉▍▉ █▆ ▆▌▄▊▋▇ ▇▉▊▅▇▍▌▌▄ ▋▇ ▅█▌▉▊▆█▉█▍▅▆▊▊▅▆█▋▌█▉▌▅▅
▉▌██▄: ▆▌▋▌, ▆▌▄▊▋▊▉ ▉▅▇▇▆▇
Merge: from invis_phantom
- Bugfix: old ServerOcclusion logic could spawn a phantom player on the client for invis players
Tests: on a fresh server tried to come into range of invis player - phantom no longer spawns. Validated UsePlayerUpdateJobs 0, 1, 2
Merge: from spectate_3p_fix
- Bugfix for spectating yourself causing a client crash
Tests: tried to spectate via F1 menu - no longer possible
Merge: from spectate_3p_fix
- Bugfix: fixes 3rd person spectate camera not following spectated player
Tests: spectated target in 3rd person while original body was in a box - camera orbitted target as expected
Merge: from jobs_noclip_mask_fix
- Bugfix for UsePlayerUpdateJobs > 0 NoClip checks incorrectly using vehicle layer mask
- Updated unit test to check for above case
Tests: ran unit test, tried to push against modular vehicles on craggy
Merge: from jobs_coarsedist_crashfix
- Bugfix: fixes crash when players connect to a fresh server with UsePlayerUpdateJobs > 0
Tests: local C+S with UsePlayerUpdateJobs 2 enabled from the start - no more exceptions by height and shoredist jobs
Merge: from main
- Bugfix: Removes client-side network group setting when updating parents - fixes phantom entities on cargoship and other global network entities
Tests: flew around craggy, was able to pick up items, chop trees, kill animals. spawned cargoship and dropped items on it, spawned dressed player & killed him, then deleted them using console cmd - they got cleaned up as expected
Bugfix: handle spawn groups on non-baseentity gameobjects
Tests: procgen 2.5k in editor
Merge: from hackweek_jit_explorer
- Buildfix for missing type definitions
Tests: built scripts in all editor modes
Merge: from hackweek_jit_explorer
- New(editor): Tools/Engine/Jit Viewer that allows to inspect native instruction output from JIT compiling managed methods
Tests: used Jit Viewer to inspect BasePlayer::ServerUpdate. Ran perfsnapshot in C+S editor
Merge: from spectate_related_cmd_fixes
- sleeping-/usersinrange commands now run from spectated player's position, if spectating
Tests: used commands when spectating
Merge: from spectate_command_fix
- Bugfix for spectate doing nothing when spectating far-away player
- Bugfix for error on respawn after spectate if previously didn't have a spectate target
Tests: used spectate out of network range 10 times in a row, used keybind to spectate twice in a row - no issues
Merge: from baseplayer_serverupdateparallel
- Optim for OcclusionV2 - remove extra hash lookup in a busy loop
Tests: with UsePlayerUpdateJobs 2 - toggled invis in close proximity and far away, suicided away from spawn and flew back, teleported around
Merge: from baseplayer_serverupdateparallel
- Bugfix for UsePlayerUpdateJobs 2 not replicating players for spectators
- Bugfix for leaking players in occlusion groups
Tests: spectated players from far away. Inspected server state after killing a sleeper
Merge: from spectate_dontfloodsnapshots
- Bugfix for occlusion not destroying all players in UsePlayerUpdateJobs 2 mode
Tests: 2p on craggy - used hill as obstruction, checked entity lists on both clients in editor
Merge: from spectate_dontfloodsnapshots
- Fixes spectate not working in UsePlayerUpdateJobs 2 case
Tests: tried to spectate occluded player
Merge: from analytics_entity_createdestroy
- minor code clean
Tests: editor compiles
Merge: from analytics_entity_createdestroy
- we now collect entity spawn and destroy events once the server has started up (part of `gameplay_analytics` servervar)
Tests: observed logs of analytics in CLIENT+SERVER editor
Merge: from server_occlusion_poppin
- Reduce player poppin by making occlusion grid generation more conservative
- Bumped occlusion version, will cause regeneration on next server boot
Tests: visualized in editor, ran previously failed queries
Merge: from hide_getinternalarrayunsafe
- Replaces dangerous API with a safer, updates existing use cases
Tests: unit tests
Merge: from analytics_v2_expose_telem
- Fixes CLient crash when running analytics.tablestats or uploaderstats
Tests: built standalone and ran the commands - no crash
Merge: from spectate_dontfloodsnapshots
- reduce potential delay when starting to spectate a far-away player
Tests: flew around 2k procgen map, got to the other side of it then spectated player on the opposite end.
Merge: from networkpositiontick_reduce
- Optim: buoys, containers, water-junkpiles and vines no longer always replicate their position. Reduces number of NetworkPositionTick invokes from 2309 down to 522 on 4.5k map
Tests: interacted with each prefab type, observed up close and from afar
Update: Enable AnalyticsV2 by default
Staging servers ran this for a couple days now and this'll switch over clients as well.
Tests: none, trivial change
Merge: from analytics_v2_expose_telem
- Can view AnalyticsV2 stats via analytics.stats, analytics.tablestats and analytics.uploaderstats
Tests: used above to check stats in editor
Merge: from voice_when_invis_fixes
- Voice chat is now heard by nearby invisible players and spectators
Tests: tested voice replication between 2 players, when invis and when spectating. invis case also tested disconnect-reconnect while invis.
Update: minor ServerProfiler function filtering adjustment
- built from b90a83e5
Was annotating everything from SubGrid, instead of ignoring everything
Tests: unit tests
Merge: from baseplayer_serverupdateparallel
- Optimizes ServerOcclusion by reordering work and reducing number of pairs considered
- Optimizes parallel snapshot send out by reducing Pool contention
- General optims via reduced profiler instrumentation (new ServerProfiler.Core binaries)
Tests: 2p session on craggy with teleporting around and various occlusion scenarios (invis, dead, normal occluded, in view)
Merge: from spectating_disconnect_nre_fix
- Bugfix for server NRE when spectating player disconnects
Tests: 2p on Craggy, disconnected while spectating - no more NRE
Merge: from basepalyer_netgroup_interit_fix
- Fixes cargoships(and other global entities) putting players into global network group which stops replication with "outside" world
Tests: 2p session on Craggy, spawned a cargo ship and threw items, killed other player, tried spectating
Merge: from analytics_queue_rewrite
- Bugfix for missing session-start event from Client, invalid session-end event from Client, malformed json aggregation
- Added support to edit upload intervals (tied to existing same server vars)
- Adjusted uploaders for some tables to avoid trying to send to our backend
Tests: unit tests + manual testing on Craggy (S+C mode) and Bootstrap (C only)
Merge: from analytics_save
- Adds a "save" event tracking when server creates a save
Tests: triggered save in editor with logging
Buildfix: add missing CLIENT guards
Tests: build all configs locally
Merge: from analytics_queue_rewrite
- New analytics uploading backend, disabled by default (analytics.usev2)
- New debug vars - analytics.log and analytics.dryrun
Tests: unit tests, used both old and new analytics backends and monitored logs
Merge: from baseplayer_vis_nre
- Simplified how debug.invis works
- Reimplemented how global.spectate and spectateid work - spectator no longer parents to the spectated player
- Tightened existing debug logs around mystery baseplayer NRE.
This eliminates a source of potential NREs related to players spectating others, but doesn't outright forbid them
Tests: 2p sesions on Craggy, one player spectates other - killed scientist with AK(hs audio replicated), helicopter fly around, motorbike ride around, noclipped outside of usual network range and back, cycled invis, left the server and returned - no issues. Tried debug camera.
Merge: from baseplayer_vis_nre
- fixed false positive logging, better logs
Tests: built standalone and connected to staging server - no extra errors on connect
Buildfix: add missing namespace using
Tests: none, trivial change
Merge: from analytics_track_menu_times
- Client analytics now aggregates frametimes, lag spikes and gc events into InGame, MainMenu, Inventory, Crafting, Contacts and Map groups
- Skip sending lag spikes and gc counts if there were none during performance logging tick
Tests: observerd client_perf analytics ticks in editor with debug code
Merge: from server_occlusion_gen_reorder_narrowphase
- Bugfix for ServerOcclusion potentially crashing during generation
Tests: generated custom map that had a consistent crash and a default 4.5k procgen editor world
Merge: from baseplayer_vis_nre
- Potential(low chance) bugfix for NRE on spectate end
- Breadcrumbs in case it's not fixed
Tests: editor and standalone build spectating loop
Bugfix(editor): LoadMapFile - don't NRE when no scene is loaded and Server Occlusio Debug is open
Tests: used in editor
Merge: from server_occlusion_poppin
- Bugfix: fixes false-negative occlusion queries at the top of the hills
- Bugfix: fixes false-positive occlusion queries while looking through a hill
- Optim: sped up occlusion cache generation by 65%+ (4.5k from 134s -> 50s, can be faster with sufficient RAM)
- Editor: extended LoadMapFile with Server Occlusion debug tools
Tests: generated reported bug case and visualized and debug traced. Generated 6k, 4.5k, 2k and Craggy to confirm generation doesn't crash.
Merge: from baseplayer_serverupdateparallel
- Bugfix/Update: don't use parallel snapshot sending in UsePlayerUpdateJobs 1 (it's a level 2 feature)
Tests: used both modes in Craggy, confirmed things are working
Merge: from baseplayer_serverupdateparallel
- Bugfix for frequently disabling UsePlayerUpdateJobs leading to player cache desync
Tests: wrote a unit test that confirms the bug and confirms the fix
Merge: from baseplayer_serverupdateparallel
- Bugfix: PlayerCache can no longer desync when disabling UsePlayerUpdateJobs
- Optim: removed couple extra allocs in UsePlayerUpdateJobs 2
Tests: ran unit tests + bunch of disable-enable of UsePlayerUpdateJobs in local session
Merge: from sleepignbag_assign_to_friend_bug
- Bugfixes for sleeping bag friend assignation, making private and "make bed" action not replicating to the new owner fully
- Added sleepingbag.assigntoplayer <bag entity id> and clearfromplayer <bag entity id> server vars for testing
Tests: spawned sleeping bag and bed and used above functionaility while assigning/clearing from self - was visible on map when expected.
Merge: from steamworks_posix_fix
- Bugfix for mods not beign able to work with Steamworks.Linux.dll - we go back to shipping Posix.dll
Tests: Built server standalone for Windows and Linux from Windows
Merge: from baseplayer_serverupdateparallel
- Optim: reducing allocs for UsePlayerUpdateJobs 2 codepath as much as possible(I think)
Tests: a bunch of 2p session on Craggy with UsePlayerUpdateJobs 2 and various interactions(occlusion, shooting, connect-disconnect)