Skip to content

Desync caused by Anomaly DLC UnnaturalCorpse: wrong random state / trace hashes match but RNG diverges (3 desync reports) #959

Description

@VanDarkh0lm3

Summary

Same 3-player multiplayer session, 3 consecutive desync reports collected. All related to Anomaly DLC UnnaturalCorpse -- the entity appears as different Thing types/states on different clients, causing RNG consumption paths to diverge.

Environment

  • RimWorld: 1.6.4871 rev591
  • Multiplayer: 0.11.5+4a3be27-dirty
  • DLC: Anomaly
  • OS: Windows 11 64bit
  • CPU: AMD Ryzen 7 5800H
  • GPU: NVIDIA GeForce RTX 3060 Laptop GPU
  • RAM: 16GB
  • Player Count: 3
  • Map Count: 1

Root Cause

Desync-126 (Tick ~2898866): Thing identity mismatch

Same Thing ID 10644612 is a different entity type on each client:

  • Local: Human687 (faction 16) -- Pawn_FilthTracker.Notify_EnteredNewCell -> Rand.get_Value
  • Host: UnnaturalCorpse_Human842202 (faction 14) -- UnnaturalCorpse.TickInterval -> Rand.MTBEventOccurs -> Rand.get_Value

Local thinks it is a regular human, host thinks it is an UnnaturalCorpse. Different tick logic, different RNG consumption -> immediate random state fork.

Desync-128 (Tick ~2941609): Pawn death/corpse state mismatch

Same pawn Human698 (ID 10822901) -- corpse state differs:

  • Local: WorkGiver_HaulCorpses.JobOnThing -- thinks it is a corpse
  • Host: WorkGiver_HaulGeneral.JobOnThing -- thinks it is NOT a corpse

HaulCorpses path consumes different RNG than HaulGeneral path, causing divergence.

Desync-130 (Tick ~2948932): Trace hashes match but RNG diverges

  • Trace count: local=142, host=142 (completely identical)
  • All 142 trace hashes match exactly between local and host
  • "Trace of first desynced map random state: -1" -- desync happened in untraced code
  • Last context trace: GameComponent_Anomaly.UpdateCorpseTrackers -> UnnaturalCorpseTracker.UpdateMentalBreak

Desync occurred in code paths that Multiplayer mod does NOT patch for RNG tracing.

Combined timeline

All 3 reports are from the same game session (same Player.log):

  1. Tick 2309911 -- first desync (Wrong random state on map 6)
  2. Tick 2560771 -- Wrong random state on map 7
  3. Tick 2601164 -- Trace hashes do not match
  4. Tick 2647171 -- Random state from commands does not match
  5. Tick 2652931 -- Wrong random state on map 7
  6. ... subsequent desyncs until disconnect

Conclusion

Multiplayer mod's RNG tracing and entity sync does not fully cover the Anomaly DLC UnnaturalCorpse system. Desync-130 in particular shows that the tracing infrastructure is unaware of certain Anomaly code paths that consume RNG.

Desync zip files available upon request.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions