monop-state/site/game-state.json
Jarvis 72d996cb4b Show players during setup: empty slots and registration progress
Parser changes:
- Track num_players_expected from user input after 'How many players?'
- Create placeholder players ('Player N') on 'say me please' prompts
- Replace placeholder names when real names appear in roll lines
- Emit state during setup phase (was returning None)
- Include phase and numPlayersExpected in state JSON

UI changes:
- Empty slots shown as dashed/dimmed panels with '?' token
- Placeholder players shown as 'Registering...'
- Registered players shown with checkmark and ,500
- Status bar shows 'Setting up · 2/3 players registered'
2026-02-21 11:24:49 +00:00

521 lines
No EOL
10 KiB
JSON

{
"players": [
{
"name": "bob",
"number": 2,
"money": 966,
"location": 2,
"inJail": false,
"jailTurns": 0,
"doublesCount": 0,
"getOutOfJailFreeCards": 0
},
{
"name": "charlie",
"number": 3,
"money": 349,
"location": 0,
"inJail": false,
"jailTurns": 0,
"doublesCount": 0,
"getOutOfJailFreeCards": 0
},
{
"name": "alice",
"number": 1,
"money": 276,
"location": 14,
"inJail": false,
"jailTurns": 0,
"doublesCount": 0,
"getOutOfJailFreeCards": 1
}
],
"currentPlayer": 2,
"squares": [
{
"id": 0,
"name": "=== GO ===",
"type": "safe"
},
{
"id": 1,
"name": "Mediterranean ave. (P)",
"type": "property",
"owner": 3,
"mortgaged": false,
"group": "purple",
"cost": 60,
"houses": 0
},
{
"id": 2,
"name": "Community Chest i",
"type": "cc"
},
{
"id": 3,
"name": "Baltic ave. (P)",
"type": "property",
"owner": 1,
"mortgaged": false,
"group": "purple",
"cost": 60,
"houses": 0
},
{
"id": 4,
"name": "Income Tax",
"type": "tax"
},
{
"id": 5,
"name": "Reading RR",
"type": "railroad",
"owner": 1,
"mortgaged": false,
"group": "railroad",
"cost": 200
},
{
"id": 6,
"name": "Oriental ave. (L)",
"type": "property",
"owner": 3,
"mortgaged": false,
"group": "lightblue",
"cost": 100,
"houses": 0
},
{
"id": 7,
"name": "Chance i",
"type": "chance"
},
{
"id": 8,
"name": "Vermont ave. (L)",
"type": "property",
"owner": null,
"mortgaged": false,
"group": "lightblue",
"cost": 100,
"houses": 0
},
{
"id": 9,
"name": "Connecticut ave. (L)",
"type": "property",
"owner": null,
"mortgaged": false,
"group": "lightblue",
"cost": 120,
"houses": 0
},
{
"id": 10,
"name": "Just Visiting",
"type": "safe"
},
{
"id": 11,
"name": "St. Charles pl. (V)",
"type": "property",
"owner": 2,
"mortgaged": false,
"group": "violet",
"cost": 140,
"houses": 0
},
{
"id": 12,
"name": "Electric Co.",
"type": "utility",
"owner": 3,
"mortgaged": false,
"group": "utility",
"cost": 150
},
{
"id": 13,
"name": "States ave. (V)",
"type": "property",
"owner": 1,
"mortgaged": false,
"group": "violet",
"cost": 140,
"houses": 0
},
{
"id": 14,
"name": "Virginia ave. (V)",
"type": "property",
"owner": 3,
"mortgaged": false,
"group": "violet",
"cost": 160,
"houses": 0
},
{
"id": 15,
"name": "Pennsylvania RR",
"type": "railroad",
"owner": 3,
"mortgaged": false,
"group": "railroad",
"cost": 200
},
{
"id": 16,
"name": "St. James pl. (O)",
"type": "property",
"owner": null,
"mortgaged": false,
"group": "orange",
"cost": 180,
"houses": 0
},
{
"id": 17,
"name": "Community Chest ii",
"type": "cc"
},
{
"id": 18,
"name": "Tennessee ave. (O)",
"type": "property",
"owner": 1,
"mortgaged": false,
"group": "orange",
"cost": 180,
"houses": 0
},
{
"id": 19,
"name": "New York ave. (O)",
"type": "property",
"owner": 3,
"mortgaged": false,
"group": "orange",
"cost": 200,
"houses": 0
},
{
"id": 20,
"name": "Free Parking",
"type": "safe"
},
{
"id": 21,
"name": "Kentucky ave. (R)",
"type": "property",
"owner": null,
"mortgaged": false,
"group": "red",
"cost": 220,
"houses": 0
},
{
"id": 22,
"name": "Chance ii",
"type": "chance"
},
{
"id": 23,
"name": "Indiana ave. (R)",
"type": "property",
"owner": 3,
"mortgaged": false,
"group": "red",
"cost": 220,
"houses": 0
},
{
"id": 24,
"name": "Illinois ave. (R)",
"type": "property",
"owner": null,
"mortgaged": false,
"group": "red",
"cost": 240,
"houses": 0
},
{
"id": 25,
"name": "B&O RR",
"type": "railroad",
"owner": 2,
"mortgaged": false,
"group": "railroad",
"cost": 200
},
{
"id": 26,
"name": "Atlantic ave. (Y)",
"type": "property",
"owner": null,
"mortgaged": false,
"group": "yellow",
"cost": 260,
"houses": 0
},
{
"id": 27,
"name": "Ventnor ave. (Y)",
"type": "property",
"owner": 3,
"mortgaged": false,
"group": "yellow",
"cost": 260,
"houses": 0
},
{
"id": 28,
"name": "Water Works",
"type": "utility",
"owner": null,
"mortgaged": false,
"group": "utility",
"cost": 150
},
{
"id": 29,
"name": "Marvin Gardens (Y)",
"type": "property",
"owner": null,
"mortgaged": false,
"group": "yellow",
"cost": 280,
"houses": 0
},
{
"id": 30,
"name": "GO TO JAIL",
"type": "gotojail"
},
{
"id": 31,
"name": "Pacific ave. (G)",
"type": "property",
"owner": 3,
"mortgaged": false,
"group": "green",
"cost": 300,
"houses": 0
},
{
"id": 32,
"name": "N. Carolina ave. (G)",
"type": "property",
"owner": 1,
"mortgaged": false,
"group": "green",
"cost": 300,
"houses": 0
},
{
"id": 33,
"name": "Community Chest iii",
"type": "cc"
},
{
"id": 34,
"name": "Pennsylvania ave. (G)",
"type": "property",
"owner": 1,
"mortgaged": false,
"group": "green",
"cost": 320,
"houses": 0
},
{
"id": 35,
"name": "Short Line RR",
"type": "railroad",
"owner": 1,
"mortgaged": false,
"group": "railroad",
"cost": 200
},
{
"id": 36,
"name": "Chance iii",
"type": "chance"
},
{
"id": 37,
"name": "Park place (D)",
"type": "property",
"owner": 2,
"mortgaged": false,
"group": "darkblue",
"cost": 350,
"houses": 0
},
{
"id": 38,
"name": "Luxury Tax",
"type": "tax"
},
{
"id": 39,
"name": "Boardwalk (D)",
"type": "property",
"owner": 3,
"mortgaged": false,
"group": "darkblue",
"cost": 400,
"houses": 0
}
],
"log": [
{
"text": "bob's turn \u2014 $1138 on New York ave. (O)",
"player": "bob",
"timestamp": "2026-02-21 11:24:23"
},
{
"text": "roll is 6, 2",
"player": "bob",
"timestamp": "2026-02-21 11:24:24"
},
{
"text": "Landed on Ventnor ave. (Y)",
"player": "bob",
"timestamp": "2026-02-21 11:24:25"
},
{
"text": "Paid $22 rent to charlie",
"player": "bob"
},
{
"text": "charlie's turn \u2014 $163 on Ventnor ave. (Y)",
"player": "charlie",
"timestamp": "2026-02-21 11:24:26"
},
{
"text": "roll is 2, 3",
"player": "charlie",
"timestamp": "2026-02-21 11:24:27"
},
{
"text": "Landed on N. Carolina ave. (G)",
"player": "charlie",
"timestamp": "2026-02-21 11:24:28"
},
{
"text": "Paid $26 rent to alice",
"player": "charlie"
},
{
"text": "alice's turn \u2014 $88 on Pennsylvania ave. (G)",
"player": "alice",
"timestamp": "2026-02-21 11:24:29"
},
{
"text": "roll is 3, 3",
"player": "alice",
"timestamp": "2026-02-21 11:24:31"
},
{
"text": "Passed GO \u2014 collected $200",
"player": "alice",
"timestamp": "2026-02-21 11:24:31"
},
{
"text": "Landed on === GO ===",
"player": "alice",
"timestamp": "2026-02-21 11:24:32"
},
{
"text": "alice's turn \u2014 $288 on === GO ===",
"player": "alice",
"timestamp": "2026-02-21 11:24:33"
},
{
"text": "roll is 2, 1",
"player": "alice",
"timestamp": "2026-02-21 11:24:34"
},
{
"text": "Landed on Baltic ave. (P)",
"player": "alice",
"timestamp": "2026-02-21 11:24:35"
},
{
"text": "bob's turn \u2014 $1116 on Ventnor ave. (Y)",
"player": "bob",
"timestamp": "2026-02-21 11:24:36"
},
{
"text": "roll is 4, 6",
"player": "bob",
"timestamp": "2026-02-21 11:24:37"
},
{
"text": "Landed on Park place (D)",
"player": "bob",
"timestamp": "2026-02-21 11:24:38"
},
{
"text": "charlie's turn \u2014 $137 on N. Carolina ave. (G)",
"player": "charlie",
"timestamp": "2026-02-21 11:24:40"
},
{
"text": "roll is 3, 5",
"player": "charlie",
"timestamp": "2026-02-21 11:24:41"
},
{
"text": "Passed GO \u2014 collected $200",
"player": "charlie",
"timestamp": "2026-02-21 11:24:41"
},
{
"text": "Landed on === GO ===",
"player": "charlie",
"timestamp": "2026-02-21 11:24:42"
},
{
"text": "alice's turn \u2014 $288 on Baltic ave. (P)",
"player": "alice",
"timestamp": "2026-02-21 11:24:43"
},
{
"text": "roll is 6, 5",
"player": "alice",
"timestamp": "2026-02-21 11:24:44"
},
{
"text": "Landed on Virginia ave. (V)",
"player": "alice",
"timestamp": "2026-02-21 11:24:45"
},
{
"text": "Paid $12 rent to charlie",
"player": "alice"
},
{
"text": "bob's turn \u2014 $766 on Park place (D)",
"player": "bob",
"timestamp": "2026-02-21 11:24:46"
},
{
"text": "roll is 3, 2",
"player": "bob",
"timestamp": "2026-02-21 11:24:47"
},
{
"text": "Passed GO \u2014 collected $200",
"player": "bob",
"timestamp": "2026-02-21 11:24:48"
},
{
"text": "Landed on Community Chest i",
"player": "bob",
"timestamp": "2026-02-21 11:24:48"
}
],
"lastUpdated": "2026-02-21T11:24:48.953583+00:00"
}