ModernWormfare — Sync PvP Test

Automated Playwright run · 2026-07-22 · SyncLive real-time 2-player · dev server on :5080

Overview

Date: 2026-07-22

Mode: SyncLive — real-time live tick loop, all players act simultaneously

Players: alpha (Rocket race) vs beta (Cow race)

Map: Bridge

Server: dev server ./dev.sh on http://localhost:5080

Game ID: a247ee15-5e9f-42d9-8dc5-920d64e10539

Screenshots

Sync lobby
1. Sync lobby — host creates a SyncLive game (alpha, Rocket, Bridge)
Sync join
2. Second player (beta, Cow) joins the open sync game
Sync loadout
3. Sync loadout — Ready button (auto-begins when all ready)
Game start
4. Sync game start — "ModernWormfare Sync — unit 1/3", no submit/recording UI
Beta fires
5. Beta fires a Shotgun in real time
Alpha view
6. Alpha's view — same shared world, different loadout/funds
Alpha fires
7. Alpha fires a Rocket simultaneously — live combat
Unit cycle
8. Tab cycles units; A/D moves in real time (sync-only feature)
Pause menu
9. Escape opens pause menu (Settings / Resume / Leave)
Live combat
10. Live combat — both players in the same real-time world

Report

What SyncLive means: Unlike Async (turn-batch) and SyncRoundBased (vs AI, one unit at a time), SyncLive is live simultaneous PvP. Both players act at the same time on a real-time server tick loop. No turn rotation, no batch recording, no replay, no submit button. Each player cycles their units with Tab and fires in real time.

Features exercised

1. Sync lobby create + join — PASS

2. Loadout + auto-begin — PASS

3. Live simultaneous combat — PASS

4. Tab unit cycling + movement — PASS

5. Pause menu — PASS

Mode comparison

FeatureAsync (PvP)SyncRoundBased (PvE)SyncLive (PvP)
Turn modelBatch submitLive tick, 1 unitLive tick, all
Simultaneous playNoNoYes
ReplayYesNoNo
Undo/commitYesNoNo
Submit buttonYesNoNo
Tab unit cyclingNoNoYes
Auto-beginNoYes (1 human)Yes (≥2 humans)

Known issues found

1. Sync-mode canvas redraw quirk — NOTE (investigated, expected behaviour)

When idle (no projectile in flight), the canvas appears to show a stale frame. Investigation confirmed the canvas IS redrawn every animation frame via requestAnimationFrame → Tick() → RenderFrameAsync() → drawFrame(). The “stale” appearance is expected: when the world state is static, each redrawn frame is identical. No fix needed.

Conclusion

The SyncLive PvP loop works: lobby → loadout → auto-begin → simultaneous real-time combat with Tab unit cycling and live movement. Both players fired weapons at the same time with no turn rotation. The mode correctly omits async-only UI (recording, submit, replay, admin toolbar). The canvas-redraw quirk was investigated and confirmed as expected behaviour (canvas redraws but frames are identical when the world is static).