commit 48643ed653e2e99c13b539d602f7650f42503744 Author: Jarvis Date: Fri Feb 20 20:56:00 2026 +0000 Initial spec for monop-board diff --git a/SPEC.md b/SPEC.md new file mode 100644 index 0000000..f035d75 --- /dev/null +++ b/SPEC.md @@ -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 , ` — dice roll (two dice) +- `That puts you on ` — player landed on a square +- `You pass Go and get $200` — passed Go +- ` rolled doubles. Goes again` — doubles + +### Buying/Owning +- `That would cost $` — unowned property +- `Do you want to buy?` — purchase prompt +- `You own it.` — already owned + +### Rent +- `You owe $` — 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) +- `'s () holdings (Total worth: $):` +- ` $` — cash on hand +- ` $, get-out-of-jail-free card(s)` +- Then property listing in format: ` ` + +### Board Print (from `board` command) +- Header: `Name Own Price Mg # Rent` +- Properties: ` ` +- Two columns side by side + +### Turn Indicator +- `'s turn` or similar turn announcements + +### Player Info +- ` (is|was) player ` + +## 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