V1.6 – Life Conflict Resolver
Crystal Save 1.6 introduces LiveConflictResolver, an in‑game diff viewer that lets players resolve data clashes without losing progress.
Why it exists
When two copies of the same save diverge-because friends play in parallel or a session is resumed offline-naive solutions pick one copy and discard the other. LiveConflictResolver compares both versions field‑by‑field and presents the differences in a temporary UI overlay so the player can accept, reject, or merge each change
Why you need it
SaveOperationService calls the resolver whenever a local slot and its cloud counterpart have different timestamps and no automatic policy can decide a winner. The merge result then proceeds through the normal save pipeline
Without this step, “last write wins” would silently overwrite one player’s progress, risking corrupted or inconsistent saves.
Configuration
Component –
SaveManager
requiresLiveConflictResolver
on the same GameObject; the manager assigns the overlay canvas from your save settings at startup
Save Settings –
autoResolveConflicts
governs whether conflicts are handled automatically or shown to the player.autoConflictPolicy
and optionalmetadataRules
refine automatic decisions.conflictOverlayCanvas
lets you provide a prefab for the diff-viewer UI; leave null to use the built‑in overlay
Runtime API – Call Resolve<T>(local, remote, callback)
to merge arbitrary objects outside the save pipeline, e.g.:
conflictResolver.Resolve(localObject, remoteObject, merged => { // merged now contains the accepted fields });
Network scenarios and Save Sync
Upcoming versions (v1.7+) add transport layers and real-time save synchronization. When multiple clients edit the same object before a sync, LiveConflictResolver will surface conflicts immediately so players can reconcile changes before they propagate across the network—preventing “last write wins” in distributed play and keeping sessions in lockstep.
It is especially valuable for:
Co‑op sessions with parallel progress – Merge overlapping edits before the next sync tick.
Late joiners – Combine their local state with the host’s snapshot.
Custom transports – Works agnostically across TCP, WebSockets, or community adapters once the SyncManager plugs in.
Summary
LiveConflictResolver is a lightweight, UI‑driven merge tool that preserves player choice and data integrity. Configure it through SaveManager
and SaveSettings
, then rely on it to safeguard collaborative and networked saves as Crystal Save evolves toward full save synchronization.
Last updated