Quick answer: Godot 4 C# string.Format using culture-dependent number format causing replication mismatch? German locale uses comma decimals; English uses period - use InvariantCulture for network data.

Replicated floats serialize as '1,5' on German clients; deserialized as '1.5' on English. Parse fails.

Use InvariantCulture

v.ToString(CultureInfo.InvariantCulture)

Locale-independent. Network and save data use this universally.

Or use binary serialization

Skip string round-trip; serialize as binary. No locale dependency.

Audit ToString calls

Any data that crosses save or network is suspect. Locale defaults are silent corruption.

“Locales differ. Network data isn't user-facing; use invariant.”

Establish 'invariant for data, localized for display' as project rule. The bug class disappears.

Related reading