userDaniel Pcancel

1,969 Commits over 488 Days - 0.17cph!

41 Minutes Ago
Update: couple improvements to JIT viewer display - relative jumps are shown as "signed hex" offsets, to avoid jnz 0xffffffffffffffe cases - avoid duplication of address when we have a method name for a jitted address Tests: viewed BasePlayer::BoxTest and BasePlayer::ServerUpdateParallel
Today
Clean: get rid of debug logs Tests: none, trivial change
Today
Update: remember selecter row index between dissasm states Tests: viewed BasePlayer::BoxTest
Today
Update: use consecutive int3s to stop decoding Doesn't always apply, but when it does saves a lot Tests: viewed BasePlayer::BoxTest
Today
Update: allow inspecting instructions at address-like values Need to improve stream decoding in those cases, as it can run away to 12k lines of assembly even though the method was over on line 10. Tests: viewed BasePlayer::BoxTest
Yesterday
Clean: logic refactor in prep for multiple view support Tests: viewed BasePlayer::BoxTest
Yesterday
Update: resolve addresses to methods/trampolines where possible - ServerPorfiler built from 18130132 A bit ugly, but don't care for now Tests: viewed BasePlayer::ServerUpdateParallel
Yesterday
Bugfix: jump addresses are now valid - Also added ability to show opcode bytes - ServerProfiler built from 95cd43f7 Was due to invalid use of library API (I should've RTFMd) Tests: viewed BasePlayer::ServerUpdateParallel
Yesterday
Clean: remove binary dumping debug code Mystery byte was caused by fopen using "w" mode isntead of "wb", which allows windows to handle special characters. In our case it was injecting an extra byte that was screwing over jumps. But it was all debug code anyway. Tests: none, trivial change
Yesterday
Bugfix: treat instruction stream as 64bit, not 32bit - ServerProfiler built from 6c5c94dd Got mislead by Unity's mono --version reporting it as x86. Last bug left - an unexpected byte appearing mid instruction stream when copying from unmanaged, but missing on managed side Tests: viewed BasePlayer::ServerUpdateParallel
Yesterday
Bugfix: use ListView+labels intead of multiline TextField Fixes weird disappearing text and gets rid of the vertex limit for text Tests: viewed BasePlayer.ServerUpdateParallel
Yesterday
Update: display 32-bit disassembled instruction stream in editor window - ServerProfiler built from 5bff6c48 Couple weird issues - textfield goes invisible half-way through (but can copy the text out of it and goes back visible before end), binary stream differs between managed and unmanaged sides. Will chase up next Tests: viewed BasePlayer::ServerUpdateParallel
3 Days Ago
New: ServerProfiler can now dump raw binary of a managed method after JIT - using debug binary built from facc83cb Baby steps. No idea how to read it yet, and will need to explore how to control optimization levels. Tests: Exported Assembly-CSharp!BasePlayer::ServerUpdateParallel
6 Days Ago
Merge: from spectate_related_cmd_fixes - sleeping-/usersinrange commands now run from spectated player's position, if spectating Tests: used commands when spectating
6 Days Ago
Update: when running sleeping-/usersinrange, prefer to query from spectating target position Tests: used the commands while spectating
6 Days Ago
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
6 Days Ago
Bugfix: Spectating - when no valid spectator found when starting to spectate, ensure we still set the right SubStrategy - If no spectate targets were found, chat message now contains the used filter Could easily happen for people using keybinds, as keybind sends "spectate True" Tests: using keybind, spectated other player twice in a row - no more errors
6 Days Ago
Bugfix: Spectating - ensure Spectating flag always gets sent to the owner Fallout from the queue skipping optimization Tests: Went outside of network range, waited for subscription to unsub and and started spectating on a 2p server. Did it 10 times - no failures
7 Days Ago
Update: Adopt Scientist2FSM to be aware of ghostship navmesh Need to double check aiming logic (sometiems they aim at the sky), and investigate how initial on-navmesh spawning is done. Also need to convert variant FSMs Tests: spawned ship navmesh offset and with a rotation. Ran around into different areas of the ship and rooms - they pursued
7 Days Ago
Update: serverocclusiondebug - clarify what invalid grid means Now explicitly saying that server occlusion treats path with one or more invalid grid positions as unblocked Tests: none, trivial change
7 Days Ago
Bugfix: server occlusion - skip occlusion for players outside of the occlusion grid Tests: checked occlusion between y:90 and y:110 - previously would stutter(OcclusionV1) or would occlude(OcclusionV2). Tested hiding behind a hill - still works
7 Days Ago
Update: introduce BaseEntity.ServerNavMeshPos property and use it instead of the methods Incomplete work(need to expose transform matrices), will return after bugfixing Tests: none
8 Days Ago
Update: LimitedTurnNavAgent sets npc's position via helper functions - ScientistNPC2 overrides it to optionally map on to the detached navmesh if it's on a ghost ship - LimitedTurnNavAgent uses navmesh positions to calculate steering to waypoint in FaceTarget mode (think it was the original intent anyway) There's a bunch more code that needs to be converted just to be safe with strong waves Tests: spawned ghost ship away from craggy, enabled AI, and ran around to different areas - scientist caught up, were able to shoot me
8 Days Ago
Update: GhostShip spawns navmesh instead of NavMeshSurface - Disabled NavMeshSurface on GhostSHip prefab (will need to do it for the rest later) This stops NavMeshSurface constrantly running add-remove navmesh every server frame. Need to figure out how to tie it to NPCs Tests: visualzied navmesh in editor via gizmos, checked profiler to not see any more NavMeshSurface::UpdateActive calls
9 Days Ago
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
9 Days Ago
Optim: OcclusionV2 - skip resetting lastPlayerVisibility every frame Turns out didn't need to make the other half of changes Tests: used invis close and far away
9 Days Ago
Update: UseOcclusionV2 - simplify toggling invis - when enabling invis, notify occlusion tracking that we destroyed entity on subscriber's end - when disabling invis, skip sending snapshots - occlusion will handle it Halfway to remove the constant hashSet.Remove calls in GatherPairs loop Tests: UsePlayerUpdateJobs 2, toggled invis in front of player. went invis, flew outside network range, flew back, disabled invis - spawned correctly.
9 Days Ago
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
9 Days Ago
Bugfix: ServerOcclusion - clean up players from all of their occlusion groups on server destroy Turns out we were leaving a lot of "zombie" players once sleepers were killed. This would slow down server occlusion eventually. Tests: on Craggy, killed a sleeper, moved to a different network group, and checked in debugger if the occlusion group only contains my player
9 Days Ago
Bugfix: UseOcclusionV2 - handle spectating players Since we no longer do bidirectional checks when iterating occlusion groups, we ended up missing out on spectators and wouldn't allow replication to them. Tests: on craggy with UsePlayerUpdateJobs 2, flew far away to get outside of network range then started spectating - could see target moving.
9 Days Ago
Merge: from main
9 Days Ago
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
9 Days Ago
Bugfix: UsePlayerTasks - calculate end of batch correctly in SendEntityDestroyMessages_AsyncState This was causing server occlusion to skip sending some of destroy commands (from last batch), leaving a phantom player Tests: on Craggy went on behind hill, then checked editor entity list - confirmed that replicated players got removed on both ends
9 Days Ago
Merge: from main
10 Days Ago
Merge: from spectate_dontfloodsnapshots - Fixes spectate not working in UsePlayerUpdateJobs 2 case Tests: tried to spectate occluded player
10 Days Ago
Bugfix: Ensure initial player snapshot gets sent to spectator in UsePlayerUpdateJobs 2 case Tests: on craggy with UsePlayerUpdateJobs 2, took 2nd player behind a hill to occlude, then tried to spectate them - confirmed that the first snapshot got sent.
10 Days Ago
Merge: from main
13 Days Ago
Clean: post-submit feedback - rename entity_prefabId field to entity_prefab_id - rename AddShortEntity to AddShortEntityField More consistent with other examples Tests: compiles in editor
13 Days Ago
Merge: from analytics_entity_createdestroy - minor code clean Tests: editor compiles
13 Days Ago
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
13 Days Ago
Merge: from main
13 Days Ago
Clean: fix formatting in Analytics.Azure.cs Most of file was offset with 2 tabs. Sorry to anyone who has conflicting changes in same file (hopefully no-one) Tests: editor compiles
13 Days Ago
Update: Analytics - track all entity spawn/destroy events after server initializes - change the format of these events to only send vital data - HackableLockedCrate no longer has it's own EntityCreated event Tests: logged analytics on Craggy - saw events being appended after server initialized
13 Days Ago
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
13 Days Ago
Update: ServerOcclusion - only block occlusion cell if it's fully under terrain - bumped occlusion file version Previously we considered it was blocked if one of sample points was in terrain. This allows more occlusion queries to pass, which should reduce poppin. Tests: visualized new grid, ran previously failing query - they now pass
14 Days Ago
Merge: from hide_getinternalarrayunsafe - Replaces dangerous API with a safer, updates existing use cases Tests: unit tests
14 Days Ago
Update: replace invalid usage of GetInternalArrayUnsafe Tests: none, trivial change
14 Days Ago
Update: Hide List.GetInternalArrayUnsafe - introduce ListAsReadOnlySpanOf to help deal with casting up (since we don't have ReadOnlySpan<T>.CastUp<U>) - added simple unit tests Tests: ran unit tests
14 Days Ago
Merge: from analytics_v2_expose_telem - Fixes CLient crash when running analytics.tablestats or uploaderstats Tests: built standalone and ran the commands - no crash
14 Days Ago
▊▉▆█▋▌: ▇█▍▊ ▌▋▉▋▍▅▆▍▇▊▌▊▌▇▇▊▋▌▉▋▇▋ ▊█ ▅▉▍██▉▋▉▄ █▌▉▅▊▍▍▆▆▌▋ ▋▄▊▌▅ ▄▄█▌▅▇▄ ▅▅▊▇▆▌, ▉▋▌▆▉ ██▋▉▅ ▍▊█▄▍ ▌▊▄▌▄ ▆▇ █▆ ▊▌▅▌█▍ ▄▉▋█▋▅▌ █▉▆█ █▉▍ ▉▅▋▆▅▆█▉█▅ ▉▅▇▉ ▊▊▆▊▆▉▄▇▍. ▄▆▌▄▆: ▉▊▊▌▌ █▋█▅▌▋▆▉▉▄ ▉▍▊▋▆▌, ▌▍▌ ▅▍▌▆▆▊▍▇▆.▅▍▌█▊▇▌▌▅▉ - █▍ ▄▄▉▆ ▇▅▊▄▋█▋