Initial spec for monop-board
This commit is contained in:
commit
48643ed653
1 changed files with 131 additions and 0 deletions
131
SPEC.md
Normal file
131
SPEC.md
Normal file
|
|
@ -0,0 +1,131 @@
|
||||||
|
# monop-board — IRC Monopoly Game State Tracker & Board Viewer
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Two components:
|
||||||
|
1. **IRC Bot (Python)** — Sits in an IRC channel, parses monop-irc game output, writes `game-state.json`
|
||||||
|
2. **Static Site Generator (HTML/CSS/JS)** — Reads `game-state.json`, renders a visual Monopoly board
|
||||||
|
|
||||||
|
## monop-irc Message Format (from source analysis)
|
||||||
|
|
||||||
|
The game outputs text lines to IRC. Key patterns to parse:
|
||||||
|
|
||||||
|
### Roll & Movement
|
||||||
|
- `roll is <N>, <N>` — dice roll (two dice)
|
||||||
|
- `That puts you on <SquareName>` — player landed on a square
|
||||||
|
- `You pass Go and get $200` — passed Go
|
||||||
|
- `<PlayerName> rolled doubles. Goes again` — doubles
|
||||||
|
|
||||||
|
### Buying/Owning
|
||||||
|
- `That would cost $<N>` — unowned property
|
||||||
|
- `Do you want to buy?` — purchase prompt
|
||||||
|
- `You own it.` — already owned
|
||||||
|
|
||||||
|
### Rent
|
||||||
|
- `You owe <PlayerName> $<N>` — rent payment
|
||||||
|
|
||||||
|
### Jail
|
||||||
|
- `That's 3 doubles. You go to jail`
|
||||||
|
- `You're in jail` type messages
|
||||||
|
- GOJF card usage
|
||||||
|
|
||||||
|
### Player Holdings (from `holdings` command)
|
||||||
|
- `<Name>'s (<N>) holdings (Total worth: $<N>):`
|
||||||
|
- ` $<N>` — cash on hand
|
||||||
|
- ` $<N>, <N> get-out-of-jail-free card(s)`
|
||||||
|
- Then property listing in format: ` <SquareName> <Owner> <Group> <Cost> <Morg> <Houses> <Rent>`
|
||||||
|
|
||||||
|
### Board Print (from `board` command)
|
||||||
|
- Header: `Name Own Price Mg # Rent`
|
||||||
|
- Properties: `<Name> <Owner> <Group> <Cost> <Morg> <Houses> <Rent>`
|
||||||
|
- Two columns side by side
|
||||||
|
|
||||||
|
### Turn Indicator
|
||||||
|
- `<Name>'s turn` or similar turn announcements
|
||||||
|
|
||||||
|
### Player Info
|
||||||
|
- `<Name> (is|was) player <N>`
|
||||||
|
|
||||||
|
## The 40 Monopoly Squares (in order, 0-39)
|
||||||
|
|
||||||
|
0: Go, 1: Mediterranean Ave, 2: Community Chest, 3: Baltic Ave,
|
||||||
|
4: Income Tax, 5: Reading Railroad, 6: Oriental Ave, 7: Chance,
|
||||||
|
8: Vermont Ave, 9: Connecticut Ave, 10: Just Visiting/Jail,
|
||||||
|
11: St. Charles Place, 12: Electric Company, 13: States Ave,
|
||||||
|
14: Virginia Ave, 15: Pennsylvania Railroad, 16: St. James Place,
|
||||||
|
17: Community Chest, 18: Tennessee Ave, 19: New York Ave,
|
||||||
|
20: Free Parking, 21: Kentucky Ave, 22: Chance, 23: Indiana Ave,
|
||||||
|
24: Illinois Ave, 25: B&O Railroad, 26: Atlantic Ave,
|
||||||
|
27: Ventnor Ave, 28: Water Works, 29: Marvin Gardens,
|
||||||
|
30: Go to Jail, 31: Pacific Ave, 32: North Carolina Ave,
|
||||||
|
33: Community Chest, 34: Pennsylvania Ave, 35: Short Line Railroad,
|
||||||
|
36: Chance, 37: Park Place, 38: Luxury Tax, 39: Boardwalk
|
||||||
|
|
||||||
|
## Color Groups
|
||||||
|
- Purple: Mediterranean, Baltic (houses $50)
|
||||||
|
- Light Blue: Oriental, Vermont, Connecticut (houses $50)
|
||||||
|
- Pink: St. Charles, States, Virginia (houses $100)
|
||||||
|
- Orange: St. James, Tennessee, New York (houses $100)
|
||||||
|
- Red: Kentucky, Indiana, Illinois (houses $150)
|
||||||
|
- Yellow: Atlantic, Ventnor, Marvin Gardens (houses $150)
|
||||||
|
- Green: Pacific, North Carolina, Pennsylvania (houses $200)
|
||||||
|
- Dark Blue: Park Place, Boardwalk (houses $200)
|
||||||
|
- Railroads: Reading, Pennsylvania, B&O, Short Line
|
||||||
|
- Utilities: Electric Company, Water Works
|
||||||
|
|
||||||
|
## game-state.json Schema
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"lastUpdated": "ISO8601",
|
||||||
|
"currentPlayer": 0,
|
||||||
|
"players": [
|
||||||
|
{
|
||||||
|
"name": "Alice",
|
||||||
|
"number": 1,
|
||||||
|
"money": 1500,
|
||||||
|
"location": 0,
|
||||||
|
"inJail": false,
|
||||||
|
"jailTurns": 0,
|
||||||
|
"goJailFreeCards": 0,
|
||||||
|
"properties": [1, 3],
|
||||||
|
"numRailroads": 0,
|
||||||
|
"numUtilities": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"squares": [
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"name": "Go",
|
||||||
|
"type": "safe",
|
||||||
|
"owner": -1,
|
||||||
|
"cost": 0,
|
||||||
|
"mortgaged": false,
|
||||||
|
"houses": 0,
|
||||||
|
"monopoly": false,
|
||||||
|
"group": null,
|
||||||
|
"rent": [0]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"log": [
|
||||||
|
{"timestamp": "ISO8601", "text": "roll is 3, 4", "player": "Alice"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Static Site Requirements
|
||||||
|
|
||||||
|
- Visual Monopoly board layout (the classic square board shape)
|
||||||
|
- Player tokens shown on their current square
|
||||||
|
- Property ownership indicated by color/icon
|
||||||
|
- Houses/hotels shown on properties
|
||||||
|
- Player info panel: name, money, properties, cards
|
||||||
|
- Color-coded by property group
|
||||||
|
- Auto-refreshes by polling game-state.json
|
||||||
|
- Single HTML file (or minimal files) — no build step needed
|
||||||
|
- Mobile-friendly
|
||||||
|
|
||||||
|
## Git Repo
|
||||||
|
|
||||||
|
- Push to: https://forge.johnmaguire.me/jarvis/monop-board.git
|
||||||
|
- Make periodic commits as work progresses
|
||||||
Loading…
Reference in a new issue