Skip to content

Pixel RPG: web-terminal parity, Pokémon-style systems, phone controls, and DS-grade art - #89

Merged
Exios66 merged 40 commits into
mainfrom
cursor/pixel-rpg-total-expansion-30a1
Jul 26, 2026
Merged

Exios66 merged 40 commits into
mainfrom
cursor/pixel-rpg-total-expansion-30a1

Conversation

@Exios66

@Exios66 Exios66 commented Jul 25, 2026 •

Copy link
Copy Markdown
Owner

Summary

Expands the pixel RPG from a thin overworld into the resort's third full surface: it now mounts the web terminal's own screens instead of reimplementing them, adds the Pokémon-style layer around them (START menu, quests, dex, bag, secrets, line-of-sight challengers, NPC schedules), and grew from 8 procedural maps to 28 authored rooms with 63 NPCs. It also plays properly on a phone, and the art was redrawn to a DS standard.

Merge conflict resolution (with main)

Synthesized against current main (through Kenney card sprites #91). Resolution policy:

Keep from PR 89 Take from main
Authored pixel-grid characters + scuffed floors Guest corridor / lobby / tower room-access doors & signs (#86)
Phone/touch pad, RESIZE framing, Pathfinder tap-to-walk Title boot reliability (#88) — fallback markup, showMenu(), error surfacing
TerminalHostOverlay + UI factory parity Kenney animated playing-card sprites for table encounters (#91)
Pokémon systems (START menu, quests, dex, bag) Neighbor NPCs + corridor↔registration west elevator

Cache-bust tokens unified to ?v=pr89-main-1.

Type

  • Feature
  • Fix
  • Docs / Quarto
  • Refactor
  • Chore / CI

Surfaces touched

  • Python CLI (mandalay_bay / blackjack / poker)
  • Web terminal (docs/)
  • Pixel RPG (docs/rpg/)
  • Quarto / Posit Connect
  • Tests / tooling

What changed

Terminal parity, not a rewrite. docs/js/app.js's inline renderers were extracted into docs/js/ui/ factories (buildSlotsRenderers(ctx), buildHotelRenderers(ctx), and so on) plus a shared ui/shell.js. The RPG's TerminalHostOverlay mounts those same factories inside an encounter panel with its own view stack, so hotel, pool, shops, slots, sportsbook, racing, craps, lottery, predictions, cashier, and bank cannot drift between the two surfaces. Blackjack, hold'em, roulette, and the rhythm battle stay bespoke because they are pixel screens, not terminal screens.

Pokémon systems. A START menu (Trainer Card, Quests, Dex, Bag, Secrets, Phone, Bank, Stats, Staff, Guest Book, Completion, Options, Save), line-of-sight challengers, encounter transitions, room placards, footstep SFX by tile type, a tier-gated walk speed, and NPCs who move with the clock. Quests live in js/data/quests.json, and dialogue gates on requiresQuestStage.

One world, one clock, one wallet. Maps and NPCs are declarative JSON compiled by MapLoader; world-cycle.js is the single clock driving tint, schedules, daily charges, reservation requirements, and eviction. SAVE_VERSION is 8, v7 saves migrate forward, and mandalay_bay/saves.py carries the web-only keys through a CLI round trip untouched.

Plays on a phone. Phaser.Scale.RESIZE with a camera that frames a handheld-sized window on any viewport. Tap a tile to walk there and Pathfinder.js routes around the furniture; tap a person or a door to walk over and act; tap anywhere to advance dialogue. A thumb pad mounts on touch devices only — d-pad, B to run, A to talk, ☰ for the menu — and hides itself whenever a conversation or panel is up. Menu rows and hosted terminal buttons get 44px targets on coarse pointers, and the rewards phone no longer floats over the pixel panels.

DS-grade art. Tiles are procedural on a 16-pixel grid blitted at 2×, all lit from the top left, and the wide floors carry three faintly scuffed variants so a ballroom stops reading as wallpaper. Characters were rebuilt as authored pixel grids — arrays of 16-character strings resolved through a palette legend — replacing the old stacked rectangles, which gives them real faces, distinguishable sleeves, denim that doesn't take the shirt's colour, and a three-frame stride. The interact prompt is a speech balloon instead of a gold blob.

Test plan

  • python3 -m pytest -q — 208 passed
  • node scripts/smoke-test-rpg.mjs — 4,875 checks across 28 maps, 63 NPCs, 255 dialogue nodes, 10 quests, 12 secrets
  • python3 scripts/smoke-test-web.py — requires Playwright in this environment (not installed here); covered by prior PR runs
  • Merge conflicts with main resolved and PR reports MERGEABLE

Notes

New referential-integrity rules worth knowing about: every routable encounter must be offered by an NPC or a dialogue branch (only stats and staff_manifest are exempt, as menu pages), and every character grid row must be exactly 16 characters drawn from the palette legend. Both are enforced by smoke-test-rpg.mjs, which also renders every wardrobe combination headlessly — a bad palette lookup at boot takes the whole overworld down, so it is worth catching off the wire.

Open in Web Open in Cursor 

cursoragent and others added 30 commits July 25, 2026 19:19
Move app.js DOM helpers into ui/shell.js and every inline renderer into
buildXRenderers(ctx) factories so the pixel RPG can mount the same screens.
app.js keeps bootstrap, the save picker, hub/floor routing and RENDERERS
assembly. Adds scripts/smoke-test-web.py, a headless walk of every terminal
view plus interaction flows, as the regression guard for the move.

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Add TerminalHostOverlay: an encounter panel that builds the same
buildXRenderers(ctx) factories the terminal uses, with its own view stack,
persist and render callbacks. Hotel, pool, amenities, slots, sportsbook,
racing, equestrian, cashier, bank, stats, staff and the gated venues are now
hosted shared screens instead of shallow reimplementations, so the RPG gets
stake tiers, the front-desk tree, 14 slot machines, prop bets and the
off-strip bank for free. Blackjack, hold'em, roulette and the House of Blues
rhythm game stay bespoke pixel battle screens but now pick stakes through the
shared tier picker.

Adds RPG launch params (archetype/skipIntro/chips) and window.__rpg test hooks
so the browser smoke test can drive every encounter headlessly.

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Introduces the Pokemon-style shell layer on top of the hosted terminal
screens:

- MenuOverlay: trainer card, quests, dex, bag, secrets, resort
  completion, options, save, plus delegated bank/stats/staff/guest-book
  panels rendered through TerminalHostOverlay.
- Dex, Inventory, and EasterEggs systems backed by session state, with
  quests.json and easter_eggs.json registries.
- QuestManager reads its registry from JSON and derives progress from
  shared session state instead of hand-incrementing counters.
- High Limit Salon becomes a real map behind the venues.js gate, which
  offers the shared stake-tier picker at the rope; the Foundation Room
  door now uses canEnterFoundationRoom instead of a hardcoded chip check.
- Map-name placard, per-surface footstep SFX, BGM ducking under
  encounters, and tier-scaled walk speed with the comped golf cart.

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
NPCs can now carry a sight cone: walking through it makes them notice
you, march over, and open their challenge dialogue straight into an
encounter, once per save. Six NPCs get cones and six get day-phase
schedules driven by world-cycle phases rather than the old day/night
split.

Dialogue gains node-level requiresFlag/unlessFlag/requiresQuestStage
gates with an elseNext fallback, so a character can say something
different once a quest has moved on, plus a giveItem action that fills
the Bag. Easter eggs discovered in the overworld now route through the
registry so the Secrets page and the world agree.

DEX_REGISTRY makes the three collections inspectable without a session,
and sitting down at a slot machine records it.

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Eight quest givers now offer their quest in dialogue and switch to an
in-progress or finished line afterward via requiresQuestStage, which the
DialogueManager supported but nothing used. Chip Chandler hands out the
dealer meet-and-greet since the pits are zone NPCs whose dialogue belongs
to whichever dealer is on shift.

Completing a quest grants a wearable or flavor item in the Bag rather
than chips, per the GDD rule that collectibles stay cosmetic.

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Main added craps, a lottery counter, expanded prediction markets, a
five-handed no-limit hold'em rework, roulette spin history, and slot bet
memory while this branch was extracting the terminal's screens into
docs/js/ui/ factories. Both sets of changes land here:

- craps and lottery move into buildCrapsRenderers / buildLotteryRenderers
  and are mounted by the terminal and the RPG alike, so main's bespoke
  CrapsOverlay and LotteryOverlay are deleted along with the already
  replaced SlotsOverlay and SportsbookOverlay
- the hold'em, roulette, slots, sportsbook, and salon changes are ported
  into the extracted factories function-for-function
- enterCasino now resets through createRuntime so new state buckets can
  never be forgotten again
- the lobby navigation tests derive the "Leave Casino" index from
  FLOOR_ORDER instead of hardcoding it, which main's two new floors broke
- the smoke test covers craps and lottery on both surfaces

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Keeps the hosted-encounter hotel (main's HotelOverlay is gone) and gives the
terminal host an onExitToFloor hook so 'return to casino floor' closes the
overworld panel instead of pushing a hub view that only the terminal has.

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
The merge brought in main's room-key fix; the journey only proved the rules
function, not that the RPG's hosted desk exposes the door or that leaving the
hotel closes the overworld panel.

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
…l-expansion-30a1

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
…l-expansion-30a1

# Conflicts:
#	docs/rpg/js/systems/TextureFactory.js

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Resolve TextureFactory.js conflict: keep expansion decor_glass/decor_rope
textures and adopt main's layered drawShadow from texture-quality merge.

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
The palette's shade color was destructured over the shade() helper, so every
character texture threw 'shade is not a function' and the RPG never reached
__rpgReady.

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Seven tiles from the world expansion were still single-pass fills while the
rest of the property moved to the 16px writer idiom. The world checker now
runs every tile, sprite, and character palette through a recording canvas and
fails on a drawer that throws or leaves a hole in a floor.

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
cursoragent and others added 8 commits July 25, 2026 22:07
FIT scaled a 960x960 canvas, so a phone got the game in a band across the
middle with black above and below. The canvas now takes the shell and the
camera picks a half-step zoom that keeps at most 20x15 tiles in frame.

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Tapping used to point the player at the spot and drive straight, so any pit,
plant or slot bank in between ended the trip. Taps now plan a four-way route
over the collision grid, aim each step at the tile the feet occupy rather than
the sprite's center, drop the route when something interrupts or blocks it, and
finish by greeting whoever was tapped.

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Touch players had no way to line up with a door, no menu button, and had to
find the dialogue box to read the next line. Touch devices now get a d-pad,
talk, hold-to-run and menu buttons that hide whenever a panel takes the screen,
a tap anywhere advances dialogue, and the hint and rewards phone move out from
under the thumbs. Smoke tests cover the lot at 390x844.

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
…peline

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
@Exios66
Exios66 marked this pull request as ready for review July 25, 2026 23:12

@cursor cursor Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Risk: high. Not approving — this PR spans 109 files with major RPG, web-terminal, and session/save changes that exceed the medium-risk approval threshold. Human review is required before merge.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

cursoragent and others added 2 commits July 26, 2026 00:21
…ne controls

Resolve conflicts in favor of authored pixel-grid characters, touch/pathfinder
controls, and DS art polish, while taking main's title-screen boot reliability
(#88), cache-busting, and compatible CSS/docs updates. Drop CC0 sheet loading
from the live character path (TextureFactory / GameScenes stay on grids).

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
…prites

Resolve conflicts between the pixel-RPG expansion and main by keeping
authored grid characters, phone/touch controls, and terminal hosting from
PR 89, while taking main's guest-corridor/lobby room-access doors (#86),
title boot reliability (#88), and Kenney animated card sprites (#91).

Cache-bust query strings unified to pr89-main-1.

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
cursor[bot]
cursor Bot approved these changes Jul 26, 2026 •

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Risk: medium. Re-approved after the main merge — this sync integrates Kenney card sprites and room-access from main into the RPG branch with bounded UI/overlay changes and proper asset attribution. No reviewers assigned.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@Exios66
Exios66 merged commit dd3acc3 into main Jul 26, 2026
1 check passed
cursor Bot pushed a commit that referenced this pull request Jul 26, 2026
Bring the pixel-RPG expansion onto this fix branch so save-profile
carry-over coexists with phone controls and DS art. Unify RPG asset
query tokens to pr89-carry-1.

Co-authored-by: Jack J Burleson // LJM <Exios66@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants