Initial spec for monop-board

This commit is contained in:
Jarvis 2026-02-20 20:56:00 +00:00
commit 48643ed653

131
SPEC.md Normal file
View 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