Repository navigation
Pixel RPG: web-terminal parity, Pokémon-style systems, phone controls, and DS-grade art - #89
Merged
Merged
Conversation
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>
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
marked this pull request as ready for review
July 25, 2026 23:12
…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
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>
This was referenced Jul 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


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:mainshowMenu(), error surfacingCache-bust tokens unified to
?v=pr89-main-1.Type
Surfaces touched
mandalay_bay/blackjack/poker)docs/)docs/rpg/)What changed
Terminal parity, not a rewrite.
docs/js/app.js's inline renderers were extracted intodocs/js/ui/factories (buildSlotsRenderers(ctx),buildHotelRenderers(ctx), and so on) plus a sharedui/shell.js. The RPG'sTerminalHostOverlaymounts 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 onrequiresQuestStage.One world, one clock, one wallet. Maps and NPCs are declarative JSON compiled by
MapLoader;world-cycle.jsis the single clock driving tint, schedules, daily charges, reservation requirements, and eviction.SAVE_VERSIONis 8, v7 saves migrate forward, andmandalay_bay/saves.pycarries the web-only keys through a CLI round trip untouched.Plays on a phone.
Phaser.Scale.RESIZEwith a camera that frames a handheld-sized window on any viewport. Tap a tile to walk there andPathfinder.jsroutes 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 passednode scripts/smoke-test-rpg.mjs— 4,875 checks across 28 maps, 63 NPCs, 255 dialogue nodes, 10 quests, 12 secretspython3 scripts/smoke-test-web.py— requires Playwright in this environment (not installed here); covered by prior PR runsmainresolved and PR reports MERGEABLENotes
New referential-integrity rules worth knowing about: every routable encounter must be offered by an NPC or a dialogue branch (only
statsandstaff_manifestare exempt, as menu pages), and every character grid row must be exactly 16 characters drawn from the palette legend. Both are enforced bysmoke-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.