Remote movement now preserves the sender's 30 Hz snapshot timeline when Steam delivers packets in bursts, removing stop/jump motion.
The interpolation buffer adapts to measured packet jitter and starts at 85 ms instead of imposing a fixed 120 ms delay.
Remote rigidbodies use velocity feed-forward with proportional correction instead of frame-sized velocity spikes.
Protocol version 21 prevents mixing the old and new movement timelines.
0.10.7
Death now follows the base game: no more frozen "downed" state. The dying player plays the native death/ghost flow; the other side sees the proxy as dead (game over when both are dead). Network revive disabled.
Diagnostics: [Damage] ENEMY lines (hits on enemies) and [Combat] lines (who the first enemy targets).
0.10.6
Remote player animation: sprite frames are now played on the same delayed timeline as the interpolated position (was newest-packet sprite on a 120 ms delayed body); position send rate 20 -> 30 Hz.
Diagnostics: [Damage] log lines (source, amount, room, position) for the first 60 hits on any player.
0.10.5
Fix: ownerless companions (cloned with the remote player proxy) no longer throw a NullReferenceException every frame in CompanionController.Update.
0.10.4
Fix: NPC conversations and all Breach (foyer) interactions/breakables are no longer synchronized. Replaying a dialogue on the other machine froze input and broke the game ("cannot pass doors").
0.10.3
Remote player movement: snapshot interpolation (120 ms buffer) instead of last-packet prediction, tighter physics tracking, and warp only after a sustained gap. Fixes jittery movement and periodic teleporting.
0.10.2
Fix: remote avatar no longer re-applies identical health/armor every packet (removes the "changing health" log flood).
[Progress] sync summaries are now logged at Info level so they appear in LogOutput.log.
0.10.1
Client no longer rolls its own private seed when a floor starts loading before the host world state is applied; it reuses the host seed.
0.10.0 - ProgressProfile sync
All players now play with the intersection of everyone's progress (flags, stats, encountered rooms/items), like Isaac Online: the least-progressed player decides. Computed in memory only; save files are never modified.
Map layout/unlocks now match between host and clients, fixing the world-mismatch rejection after dungeon load.
New config ProgressSync/Enabled (default true). Host and clients should use the same value.
Protocol version 20 (all players must update).
Fix: remote avatar no longer spams "changing health" log lines.
0.9.8
The authoritative foyer state now starts the client's normal playable-Breach transition instead of calling a foyer load while the title menu is still active.
Duplicate reliable world-state packets no longer cancel and restart an in-progress client placement.
Same-world placement retries until the local player exists instead of failing after one early attempt.
Protocol version 19 prevents mixing visually identical but binary-different 0.9.7 test packages.
0.9.7
Clients now enter the host's Breach only through the authoritative world-state packet; the menu no longer starts a second competing foyer load after joining.
A newer host world state cancels an older delayed placement, preventing a queued Breach teleport from firing after dungeon loading has begun.
Includes the LEAVE main-menu return fix prepared after 0.9.6.
Protocol version 18 rejects earlier builds that still contain the double-load race.
0.9.6
Added a JOIN LOBBY option beside the main-menu host flow.
Added an in-game Steam lobby browser showing the host name, player count and version compatibility.
Hosted rooms are discoverable as public Steam lobbies, while the browser filters out every lobby that is not created by Gungeon Together.
Full or incompatible rooms remain visible for diagnosis but cannot be joined.
LEAVE now closes the network session and returns to the real main menu instead of silently leaving the player in a single-player breach.
0.9.5
Preserve reliable delivery when structural inventory changes are relayed through the host; lightweight heartbeat snapshots remain unreliable.
Added sender-minted transaction IDs for pickups, ground-item changes, interactions and breakables so retransmission or snapshot replay cannot apply a world mutation twice.
Added host-session and floor-epoch stamps to movement, combat, rooms, vitals, inventory and world-event packets; delayed packets from an earlier floor are rejected before application.
Reconnecting clients use a fresh transaction namespace while retaining the host's current world identity.
Fixed the lobby UI reporting a pending or rejected Steam-lobby member as game-connected; protocol/mod mismatches now remain out of the game and show an explicit rejection reason and per-member connection state.
Protocol version 17 rejects older clients that do not carry transaction and world stamps.
0.9.4
Inventory removals require two distinct revisions, preventing a stale snapshot from dropping a freshly acquired item.
A reliable confirmation snapshot follows inventory changes after 0.45 seconds, so legitimate drops do not wait for the two-second heartbeat.
Ammo counts no longer alter the inventory fingerprint, avoiding reliable inventory traffic for every shot; ammo continues through the regular vitals stream and inventory heartbeat.
Fixed null passive/active item reconciliation and throttled failed modded-item grant retries.
Protocol version 16 rejects mixed 0.9.2/0.9.3 sessions.
Release DLLs are built directly from the tagged source with versioned assembly metadata.
0.9.3
Internal inventory-race test build; superseded by 0.9.4.
0.9.2
Restored the game's native co-op door, sealed-room and elevator movement instead of warping the party on every room transition.
Added periodic host-relayed inventory snapshots for all guns, per-gun ammo, passive items, active items and current weapon selection.