Repository navigation
Conversation
Port the server relay change from Dosylia/urSovngarde 87ea449f. Nearby exterior players in the same worldspace receive lock updates while interior delivery stays cell-scoped. Validation: SkyrimTogetherServer release build passed using a temporary correction of the existing TiltedCore tag to v0.2.9. Two-client cell-boundary testing remains required.
Adapt urSovngarde 347ce181 and local 35717e8. Track failed buffer growth explicitly, retry outside the scratch allocator up to the transport's 512 KiB limit, and preserve packet flags. Validation: client release build and TPTests passed (76 assertions, 8 cases), including exact-size limits, failed writes followed by successful writes, and a 2000-plugin authentication round trip.
Port urSovngarde 9342bca4 lookup hardening. Synchronize our registry, cache only successful lookups, and skip missing calls with one diagnostic. Missing values are false, null or zero; void calls are not replayed. Ghidra MCP: SE 1.6.1170 registration ID 104788 at 0x141445FE0 locks the VM registration table. Our queued registry access is source-verified. Native ABI, positive function-pointer lifetime and 1.7.104 equivalence remain assumed; hooks are unchanged. Client release build passed; delayed-registration gameplay testing remains required.
Adapt the inventory portion of urSovngarde 7712c3e6. Store pending snapshots on entities with ownership epochs, preserve subsequent inventory and equipment updates in order, and clear deferred state on removal or disconnect. Require process and 3D readiness for spawn and ownership grants. Ghidra MCP, SE 1.6.1170: equip ID 38894 at 0x1406C9820 reaches 0x1406CBE30, reading Actor+0xF8; spell equip ID 38896 reaches 0x1406CBAD0 with the same process access. CommonLib places middleHigh at AIProcess+0x8, now asserted. This is a conservative readiness gate; the exact fork crash, all engine threading guarantees and 1.7.104 equivalence remain unproven. Client release build passed; two-client loading, loot, transfer and disconnect tests remain required.
I found the relevant fix in 34fe6f91, plus a correction in 83be966c. The problem is timing: applying zero health before an NPC’s body loads can mark it dead before it gets a chance to fall over. The fix keeps a newly arriving copy briefly alive until its body is ready, then applies the death. The correction prevents doing that to an NPC that is already dead locally. I’m checked the Skyrim 1.6.1170 death routine before adapting those changes to our existing loading flow. Used Ghidra integration, ran commands In the 1.6.1170 binary, the death routine at 0x1406972D0 (Address Library ID 37896) has an early-return state check and separate handling when the actor’s process or loaded body is missing. That supports deferring the death until loading completes, though the visible result still needs an in-game test. I ported the health and loading guards, including the “already dead locally” correction. The fork’s VR-specific corpse repair code isn’t needed for this port. The port is in place across new spawns, recreated actors, and reconciliation. Already-dead NPCs retain their original health values. The client build has compiled the changed service without errors and is continuing through the remaining files. This port uses the existing WaitingFor3D step and adds no hooks or offsets. The key in-game check is to kill an NPC, have a second player enter the cell, then leave and re-enter. The corpse should lie down correctly on each client, while bodies already dead locally should stay untouched. The client release build passed. I’ll restore the temporary build-file change, commit this as the fifth reliability fix, and push it to the same fork branch.
Retain canonical death state across unloaded actors and defer NPC death until its high process and body are ready. Suppress stale living animation writes on corpses while retaining position synchronization, and update pending spawns from death notifications. Verified KillImpl readiness branches in Skyrim 1.6.1170 via read-only Ghidra. Client releasedbg build passes; multiplayer regression checks and 1.7.104 binary equivalence remain unverified. See RemoteDeathSystem.md.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
source and credit from urSovngarde @Dosylia in case this is relevant to the upstream main project. Check with ghidra for steam 1.6.1170 and 1.7.104. Awaiting playtesting in 1.8.7-8 unless there are objections
These are reliability improvements. Their actual gameplay effects still need testing with multiple players.