ModernWormfare — Simultaneous Plan PvP

Automated Playwright run · 2026-07-26 · new "blind-plan" async model · dev server on :5080

Overview

Date: 2026-07-26

Mode: Simultaneous (new) — each player records actions for all their units blind to the enemy; both plans resolve at once when ready.

Players: net vs cake (2 human, Hills map)

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

Result: PASS — both players planned, submitted, the round resolved simultaneously, replayed, and the next round re-armed. 0 disconnections.

The pivot

The previous async model (one unit at a time, immediate replay) felt broken: shooting did nothing visible and the record played back instantly. This run introduces a simultaneous blind-plan model, per the design ask:

1. Record all your units, blind

Each player records actions for all 3 of their units (cycle with Tab), without seeing the enemy's plan. Movement previews live per selected unit.

2. Everything plays at the same time

When both players submit (E), the server resolves both plans tick-by-tick in parallel via GameSimulator.StepMany. Projectiles fly and explode within the round.

3. Damage interrupts remaining actions

If a unit takes damage during resolution, its remaining planned actions are cancelled (it idles for the rest of the round).

4. Rebound keys

Space is jump (was wrongly also submit). E commits/submits the plan.

Round flow exercised

1. Lobby (create + join)→ 2. Loadout→ 3. Begin Match→ 4. Plan (move + fire, Tab to switch unit)→ 5. E = submit plan (wait for enemy)→ 6. Simultaneous resolution + replay→ 7. Next round

Screenshots

Plan mode UI
1. Plan mode. net's turn: "🎯 PLAN (unit 1/3) — A/D move | ↑↓ aim | Enter fire | Tab next unit | E submit". The player records actions for each of their 3 units.
Plan submitted, waiting for enemy
2. Plan submitted — waiting for enemy. net pressed E; the round is held until cake also submits.
After simultaneous resolution
3. After simultaneous resolution. Both plans resolved in parallel; the replay played on both tabs and the next round re-armed (cake back to "PLAN unit 1/3"). Server log: both SubmitTurnPlan accepted, 0 message-size disconnections.

Verification

Server log: SubmitTurnPlan ... ready=False (first player) then ready=True (second triggers resolution).

Disconnections (2 MiB limit): 0

Unit tests: 398 pass, 0 fail — incl. SimultaneousResolutionTests (parallel play, in-round projectile resolution, damage interrupt, ready-gating).

Preflight: dotnet build 0 errors · dotnet test green · dotnet format clean