**Final verification pass — phase 03 `simulation_movement_and_interaction` (all 5 task files already in `complete/`)** - Verified all phase-03 deliverables exist and work: `sim/` kernel (`step`, `state_build`, `rng`, `movement`, `collision`, `interact`, `carry`, `replay`), replay fixtures + 3 committed goldens, `docs/SIMULATION.md`. - `bash .agents/validate.sh` → **passed**: ruff `All checks passed!`, pyright `0 errors`, `undercooked-levels validate` green, full `pytest` **1033 passed** (coverage **99.71%** ≥ 90% floor), slow sim stage green, repo-hygiene clean. - Perf smoke (4 players, 2 000 ticks): mean **0.049 ms/tick, 20 423 ticks/s** — ≥ 10 000 ticks/s criterion met (test lives in `test_perf_smoke.py`, which the gate's slow stage runs; the overview names it `test_replay.py`). - Completion criteria: import `undercooked.sim.step.step` ✅ · `tests/sim` green incl. determinism + goldens ✅ · perf ✅ · constant-change-fails-by-design ✅ (committed-hash equality + mutation test naming first bad tick/field; goldens never rewritten by tests) · `docs/SIMULATION.md` ✅ (constants, 8-step order, purity/determinism, re-bless) · full suite + coverage ✅ · app launches: `/healthz` 200, `/` 200, `/api/levels` serves content ✅ · replay CLI `check walk_solo.json` exit 0 ✅ · no regression in phases 01/02 (their suites green) ✅. - Documentation: README.md — fixed one stale inconsistency (Status opening listed only 01/02 complete with 03 pending; now lists 01–03 complete, next pending `04_kitchen_pipeline_and_scoring`); all other README claims (CLI flags, config table, shell text, replay CLI exit codes) verified against code. AGENTS.md — verified consistent with the project as it stands, no changes needed. - No deviations. Next pending phase: **`04_kitchen_pipeline_and_scoring`**.
2157 lines
31 KiB
JSON
2157 lines
31 KiB
JSON
{
|
|
"seed": 24301,
|
|
"level_id": "99_replay_pick_drop_pass",
|
|
"tick_hz": 20,
|
|
"record_every": 1,
|
|
"items": [
|
|
{
|
|
"station": "spawn_shelf_0",
|
|
"item": "tomato",
|
|
"form": "raw"
|
|
}
|
|
],
|
|
"frames": [
|
|
{
|
|
"tick": 0,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 0,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 1,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 1,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 2,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 2,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 3,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 3,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 4,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 4,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 5,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 5,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 6,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 6,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 7,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 7,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 8,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 8,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 9,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 9,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 10,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 10,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 11,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 11,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 12,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 12,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 13,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 13,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 14,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 14,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 15,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 15,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 16,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 16,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 17,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 17,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 18,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 18,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 19,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 19,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 20,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 20,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 21,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 21,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 22,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 22,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 23,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 23,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 24,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 24,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 25,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 25,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 26,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 26,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 27,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 27,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 28,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 28,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 29,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 29,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 30,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 30,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 31,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 31,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 32,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 32,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 33,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 33,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 34,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 34,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 35,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 35,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 36,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 36,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 37,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 37,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 38,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 38,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 39,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 39,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 40,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 40,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 41,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 41,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 42,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 42,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 43,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 43,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 44,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 44,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
-1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 45,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 45,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 46,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": true,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 47,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 48,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 48,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 49,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 49,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 50,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 50,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 51,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 51,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 52,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 52,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 53,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 53,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 54,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 54,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 55,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 55,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 56,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 56,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 57,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 57,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 58,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 58,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 59,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 59,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 60,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 60,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 61,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 61,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 62,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 62,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 63,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 63,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 64,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 64,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 65,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 65,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 66,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 66,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 67,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 67,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 68,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 68,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 69,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 69,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 70,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 70,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 71,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 71,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 72,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 72,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 73,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 73,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 74,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 74,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 75,
|
|
"player_id": "p0",
|
|
"move": [
|
|
1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 75,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 76,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": true,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 77,
|
|
"player_id": "p0",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 77,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": true,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 78,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 79,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 80,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 81,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 82,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 83,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 84,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 85,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 86,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 87,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 88,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 89,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 90,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 91,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 92,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 93,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 94,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 95,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 96,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 97,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 98,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 99,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 100,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 101,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 102,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 103,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 104,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 105,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 106,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 107,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 108,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 109,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 110,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 111,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 112,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 113,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 114,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 115,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 116,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 117,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 118,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 119,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 120,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 121,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 122,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 123,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 124,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 125,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 126,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 127,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 128,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 129,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 130,
|
|
"player_id": "p1",
|
|
"move": [
|
|
-1.0,
|
|
0.0
|
|
],
|
|
"action": false,
|
|
"face": null
|
|
},
|
|
{
|
|
"tick": 131,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": true,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 132,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": true,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 133,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": true,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 134,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": true,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 135,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": true,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 136,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": true,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 137,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": true,
|
|
"face": "left"
|
|
},
|
|
{
|
|
"tick": 138,
|
|
"player_id": "p1",
|
|
"move": [
|
|
0.0,
|
|
0.0
|
|
],
|
|
"action": true,
|
|
"face": "left"
|
|
}
|
|
],
|
|
"name": "pick_drop_pass"
|
|
}
|