monop-board/SPEC.md

4 KiB

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

{
  "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