@jamunlabs/gameu-uno
v0.1.0
Published
UNO — gameu game
Readme
gameu-uno
UNO for the gameu lobby host.
- 2–8 players, turn-based.
- PixiJS renderer (canvas + sprite cache; vendored
pixi.min.js). - Custom phone controller bundle in
controller/— the only game in the starter set that ships its own controller iframe (every player has a private hand to render). Loaded by the host's controller flow attemplate: "custom"withpath: "/games/gameu-uno/controller/".
This game lives outside the gameu host repo as part of the
gameu-games decoupling — each game ships in its own
repo, npm-package-shaped, and reaches the host via POST /api/install
(catalog tier) or via --external-game-dir (local dev).
Dev loop
Today, run from a gameu source clone:
cargo xtask run-game --game-dir /path/to/gameu-unoOnce @jamunlabs/gameu-cli ships to npm:
npm i -g @jamunlabs/gameu-cli
cd gameu-uno
gameu devBuild
npm install
npm run build # tsc — emits *.js next to *.ts
gameu build # validates manifest + npm pack → .tgzLayout
| File | Purpose |
|---|---|
| manifest.json | Bundle manifest (id, runtime, player counts, sdk_version). |
| index.html | TV-side game iframe entry point. |
| game.js | Boots the GameRunner with UnoReducer + UnoRenderer. |
| reducer.js | Pure synchronous reducer; deck shuffle via seamed RNG, wild-color resolution, +2 / +4 stacking, victory detection. |
| rules.js | Pure helpers: buildDeck, isPlayable, nextPlayer. |
| renderer.js | PixiJS renderer; sprite cache for cards, ticker-driven motion, action toast pill. |
| pixi.min.js | Vendored PixiJS v8 (~600 KB). Not built — copied as-is. |
| dev_mode.js | Auto-drive resolvers gated on ?dev=1. |
| controller/index.html | Custom controller bundle entry point. |
| controller/seams.js | Seam registry for the custom controller flow. |
| controller/controller.js | Controller flow file (mode-agnostic; pure seam invocations). |
| controller/dev_mode.js | Auto-drive resolvers for the controller, gated on ?dev=1. |
| *.ts | TypeScript source. |
Runtime contract
Same as other gameu games — loads /lib/* from the host, imports from
@jamunlabs/gameu-sdk via the host importmap, sandboxed iframe — plus
the custom controller iframe, which mounts at
https://<host>/games/gameu-uno/controller/ and communicates with the
phone-side flow via postMessage tagged gameu-controller (distinct
from the gameu-bridge channel between game iframe and host).
