Appearance
More games: shorter notes
Each of these fits the platform as decided. The notes say which pieces you'd reach for, and what's not built yet.
Among Us
A working version is the sample plot/samples/hidden-roles (raw host API only: roles by visibility sets, lag-compensated shooting, a full-screen voting overlay, custom predicted movement).
Runtime,
stashItems: true,lobbies: { size: 10 }. Lock the lobby and start the countdown when it's full (lobbies.lock(),lobbies.startCountdown({ protectEveryone: true })).After
onCountdownEnd, teleport the group from the lobby room to the ship (somewhere else inside your bounds).Roles and kills are visibility sets. The impostor's kill button is a button only they get; vents and the body before it's reported can be
{ players: [...] }. Onlookers see players moving about, and no roles.tsui.setButton(impostor, { id: "kill", side: "right", icon: "knife", cooldown: 30 }); const body = scene.create({ Transform: { pos }, Model: { asset: "models/body.glb" } }, { visibility: { players: [impostor] } }); // until someone reports it scene.setVisibility(body, "lobby");Meetings are your own full-screen UI (
ui.drawOverlaywithhitregions for votes) orui.setScoreboardplus buttons. Votes come back asonButtonPressor channel messages.Turn real nametags off for anonymity:
players.setRealNametagsVisible(false).
Risk in blocks
- Runtime,
stashItems: true. Season stats in storage (storage.setPlot,storage.setPlayerProfile). - The board is blocks: the cheapest rendering there is, and onlookers see the live map.
- After their entry protection,
players.setCamera(p, { mode: "top", pos: [64, 120, 64], fov: 50 }). - Orders through buttons, or
ui.drawOverlayhit regions plusInputEvent.pointerfor tapping territories. - Fog of war: give hidden armies a visibility set per player.
- No prediction needed: turns or slow ticks at the default 20 Hz are plenty.
Mario Galaxy
- Runtime,
stashItems: true. The planets are mesh terrain in your sky (glTF guide), or spheres of blocks. - Gravity toward the nearest planet is custom movement:
players.setMovement(p, { kind: "custom" })inonPlayerProtectionEnd, colliding throughworld.raycast. - The device predicts your custom movement with
predictStepin client code (In progress: in the plots dev page; the room runs the samepredictStepas the referee). Or use"movement": "client"for responsiveness. - At the seam, the player walks in under the base walk; your movement takes over from their velocity when their entry protection ends.
Skyrim
- Runtime. Either
stashItems: true(its own gear and saves: simplest), orstashItems: falseso players bring their real gear: trying things out by default (undone when they leave), or keeping their items (players.askToKeepItems) to make gains and losses real. - One open world (
lobbies: null), or lobbies of N for co-op parties. - Land and dungeons as mesh terrain with supplied collision meshes; engine LODs keep it visible from outside.
- NPCs as entity types, moved by your code (no base mob AI runs in plots); quests in storage (
storage.setPlayerProfile); dialogue withui.showDialogueandonDialogueChoice(voice lines are Planned). Cutscenes areplayers.playCameraPathonce a player's entry protection is over. - Combat: between players, the base game's PvP with their weapons; against your NPCs, your own hit checks (lag-compensated like the shooter) and
content.damageEntity.
Horror
- Runtime,
stashItems: true, a lobby per group (lock it once the group is in). - Darkness: few
Lights, dark materials. Audio:audio.playwithto: { players: [target] }for scares only one player hears; positional sounds everywhere else. - Scares aimed at one player: entities with
{ players: [target] }. Outsiders see the building, not the scares. - Blackouts, flashes, full-screen video and camera-locked scares are all allowed (moderated, rated). There are no flash or loudness caps. The trusted layer stays on top, so the settings button, and its "Leave {plot}", is always there.
Duels and an own-items arena
- Not stashed. Duels where players try things out: bring your strength (your real gear, fought with the base game's PvP), and everything's undone when you leave. An arena where they keep their items: ask with
players.askToKeepItems(p)while they're protected; losses and gains are real.
A chest room (how the base game itself fits)
The base game's chest rooms become a lobby per chest: everyone who opens that chest is in its lobby, sees the same stacks and moves them together. It's the first real test of lobbies, and needs no client code.