Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
8e7170f
Extract terminal UI into shared docs/js/ui factories
cursoragent Jul 25, 2026
6b2ebb4
Mount shared terminal screens inside the RPG
cursoragent Jul 25, 2026
15b9cb1
Add START menu, collections, and real venue gating to the RPG
cursoragent Jul 25, 2026
0b467ba
Add line-of-sight challengers, story items, and node-level quest gating
cursoragent Jul 25, 2026
9c4f4f1
Give every quest a giver, a gated follow-up, and a cosmetic reward
cursoragent Jul 25, 2026
548cd7c
Move world authoring into JSON: 28 maps, MapLoader, per-map spawns
cursoragent Jul 25, 2026
fc963d7
Fill out dialogue and easter eggs for the 20 new rooms
cursoragent Jul 25, 2026
755fc38
Drive the overworld from world-cycle: phases, daily charges, eviction
cursoragent Jul 25, 2026
5c7cde5
Bump saves to v8 with RPG collection buckets and CLI passthrough
cursoragent Jul 25, 2026
7687d84
Add an end-to-end RPG journey to the smoke test and wire up CI
cursoragent Jul 25, 2026
622d5b8
Tag every room with its wing and show it on the placard
cursoragent Jul 25, 2026
72e839a
Rewrite the GDD and refresh the player, architecture, and README docs
cursoragent Jul 25, 2026
e2726ea
Add a data-driven pixel RPG page to the Quarto site
cursoragent Jul 25, 2026
82311fe
Refresh expired Posit tokens and stop the publisher duplicating content
cursoragent Jul 25, 2026
b71db65
Merge origin/main: host craps and lottery instead of duplicating them
cursoragent Jul 25, 2026
b437e9e
Refresh the wiki NPC roster for the 59-NPC world
cursoragent Jul 25, 2026
9a8dcd5
Give craps, the lottery, and prediction markets doors in the overworld
cursoragent Jul 25, 2026
956c520
Fail the checks when a routable encounter has no way in
cursoragent Jul 25, 2026
57cbd94
Point the docs at the shared renderers and the two new NPCs
cursoragent Jul 25, 2026
cfc2fe5
Stop freezing the RPG page so it publishes the current world
cursoragent Jul 25, 2026
0490e6d
Merge origin/main: DS-scale art, character creator, and touch controls
cursoragent Jul 25, 2026
b757929
Document the character creator, touch controls, and floor wayfinding
cursoragent Jul 25, 2026
ad0dac6
Merge origin/main: hotel front desk fix and manual gh-pages publish
cursoragent Jul 25, 2026
3234628
Check the hosted front desk hands a checked-in guest their room
cursoragent Jul 25, 2026
239b29f
Merge remote-tracking branch 'origin/main' into cursor/pixel-rpg-tota…
cursoragent Jul 25, 2026
37d03ab
Say when the room key activates now that either path grants it
cursoragent Jul 25, 2026
69e3529
Merge origin/main into cursor/pixel-rpg-total-expansion-30a1
github-actions[bot] Jul 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Checks

on:
push:
branches: [main]
pull_request:
workflow_dispatch:

concurrency:
group: checks-${{ github.ref }}
cancel-in-progress: true

jobs:
python:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- run: python -m pip install --upgrade pip pytest
- run: python -m pytest -q

web:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "22"
- uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: RPG world data integrity
run: node scripts/smoke-test-rpg.mjs

- name: Install Playwright
run: |
python -m pip install --upgrade pip playwright
python -m playwright install --with-deps chromium

- name: Browser smoke test
run: python3 scripts/smoke-test-web.py
22 changes: 13 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,15 +78,19 @@ The **11-acre pool expansion** includes wave pool timing, hot tubs, private caba

Lifetime wagered chips advance you through Sapphire → Pearl → Gold → Platinum → Noir → Chairman. Each tier unlocks narrative comps (welcome drink, slot free-play, buffet, room night, suite upgrade, penthouse fantasy) and perks that gate TV channels, phone calls, and VIP access.

### Pixel RPG (Phases 1–4)

Walk the resort in a **16-bit JRPG–style overworld** built with Phaser 3:

- **Eight maps** — casino lobby, hotel tower, pool, Shark Reef, House of Blues, ULTRA Arena, Foundation Room, staff corridor
- **Full activity encounters** — blackjack, holdem, roulette, slots, sportsbook, racing, dressage/jumper, hotel, pool mini-games, shops/bar, cashier
- **Quests & systems** — shark photo collection, Trainer Card (T), day/night tint, faction reputation, guest archetypes
- **Arcade polish** — procedural textures, Web Audio BGM/SFX, cabinet bezel, Konami + Easter eggs
- **Unified saves** — RPG position, quests, flags, and chip balance sync with the web terminal
### Pixel RPG

Walk the resort in a **Pokémon-style pixel overworld** built with Phaser 3:

- **28 rooms, 61 NPCs** — the Boulevard and valet, registration, two casino floors, the book, High Limit Salon, Foundation Room, the Shoppes and sky bridge, two bars, the hotel tower and your own room, Delano, the spa, four pool zones, Shark Reef, House of Blues, ULTRA Arena, and the back of house
- **Terminal parity, not a rewrite** — hotel, pool, shops, slots, sportsbook, racing, and cashier are the terminal's own screens mounted inside an encounter panel, so the two surfaces cannot drift
- **Pokémon systems** — START menu, line-of-sight challengers, a quest board, a three-part dex, a bag, twelve cosmetic secrets, and NPCs who move with the clock
- **One clock, one wallet** — daily resort charges, rotating reservation requirements, and eviction all reach the overworld
- **Legible floors** — gold walkways connect every door, dark trim separates each zone, and floating signs name the room you're standing in
- **Your guest, your sprite** — a character creator for archetype, skin tone, hair, and outfit, reopenable as the Trainer Card's wardrobe
- **Plays on a phone** — tap a tile to walk, tap dialogue to advance
- **Arcade polish** — DS-scale procedural textures, Web Audio BGM/SFX, cabinet bezel, room placards, Konami code
- **Unified saves** — position, quests, flags, and chips ride the same slot as the terminal and the CLI

See [`docs/rpg/GDD.md`](docs/rpg/GDD.md).

Expand Down
6 changes: 3 additions & 3 deletions _freeze/index/execute-results/html.json

Large diffs are not rendered by default.

Binary file modified _freeze/index/figure-html/fig-activities-by-floor-output-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions _quarto.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ project:
render:
- index.qmd
- play.qmd
- rpg.qmd
- docs/getting-started.md
- docs/player-guide.md
- docs/chip-economy.md
Expand Down Expand Up @@ -33,6 +34,8 @@ website:
text: Overview
- href: play.qmd
text: Play
- href: rpg.qmd
text: Pixel RPG
- text: Player Guides
menu:
- href: docs/getting-started.md
Expand Down Expand Up @@ -89,6 +92,7 @@ website:
contents:
- index.qmd
- play.qmd
- rpg.qmd
- section: "Player Guides"
contents:
- docs/getting-started.md
Expand Down
47 changes: 45 additions & 2 deletions docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,58 @@ degen-llms/
│ └── ...
├── docs/ # Documentation & web terminal (GitHub Pages)
│ ├── js/
│ │ ├── core.js # PlayerSession, ChipWallet, save versioning
│ │ ├── hotel.js / hotel-ui.js
│ │ ├── room-amenities.js
│ │ ├── pool-complex.js
│ │ ├── resort-bridge.js / resort-completion.js
│ │ └── casino-amenities.js
│ └── rpg/ # Phaser overworld (main_resort, hotel_tower, mandalay_beach)
│ │ ├── casino-amenities.js
│ │ ├── world-cycle.js # The single resort clock
│ │ └── ui/ # buildXRenderers(ctx) screen factories
│ │ ├── shell.js # el, banner, chipLine, statusBanner, view stack
│ │ ├── slots-renderers.js / table-renderers.js
│ │ ├── sportsbook-renderers.js / racing-renderers.js
│ │ ├── cashier-renderers.js / meta-renderers.js
│ │ └── stakes-ui.js
│ └── rpg/ # Phaser overworld — 28 JSON-authored maps
│ ├── js/data/ # maps, npcs, dialogues, quests, easter_eggs, triggers
│ └── js/systems/ # MapLoader, TerminalHostOverlay, MenuOverlay, ...
└── tests/ # pytest suite
```

## Three surfaces, one engine

| Surface | Entry | Role |
|---------|-------|------|
| Python CLI | `python3 -m mandalay_bay` | Authoritative rules |
| Web terminal | `docs/index.html` | Browser parity, ES modules under `docs/js/` |
| Pixel RPG | `docs/rpg/index.html` | Phaser overworld over the same modules |

### The delegation rule

**The RPG never reimplements a game screen.** Casino, hotel, pool, shopping,
sportsbook, racing, cashier, and every meta screen is written once in
`docs/js/ui/` as a `buildXRenderers(ctx)` factory that returns a view-name →
render-function map. The terminal spreads those maps into its `RENDERERS`
table; the RPG's `TerminalHostOverlay` builds the same `ctx` and mounts them
inside an encounter panel. A feature added to the terminal therefore appears in
the RPG with no RPG-side work.

```mermaid
flowchart LR
LOGIC["docs/js/ — rules"] --> UI["docs/js/ui/ — buildXRenderers(ctx)"]
UI --> APP["app.js (terminal)"]
UI --> HOST["TerminalHostOverlay (RPG)"]
```

The exceptions are the four bespoke "battle screens" the RPG draws itself
because they read better in-world: blackjack, hold'em, roulette, and the House
of Blues rhythm minigame. They still route bet entry through the shared stake
picker. See the [Pixel RPG GDD](rpg/GDD.md) for the overworld side.

Anything genuinely new belongs in `docs/js/` first, with the RPG consuming it —
never the reverse.

## Data flow

```mermaid
Expand Down
Loading
Loading