Zingers: game spec

You fly. It fights. You both rise. You don't fight. You raise an AI champion that does, and you climb the sky beside it.

Canonical product framing: design-vision.md (Flight-First) · doors: two-doors.md · active roadmap: flight-first-plan.md · retention: long-game.md · naming: vocabulary.md.

Core principle

The LLM is the actor. The engine is the game.

Combat is turn-based with explicit moves and stat-driven resolution. Stats, types, training, status effects, and variance decide damage. Wit quality is a bounded multiplier (0.7–1.3, or 1.4 on Highlight). By default a local judge; an LLM judge is opt-in (ZINGERS_LLM_JUDGE=1). Neither can single-handedly decide the match.

Full numbers, roster, and a worked sample battle: combat-design.md.

The loop

Fly → Claim → Raise → Fight → Climb higher

  1. Fly (Flight): one game on phone (/m / /ascent) and desktop (Circuit venue). Same soul; native bodies.
  2. Claim the mind on your wing, or pick from the weekly starter pool (one per Force) drawn from First Minds + baked dex.
  3. Raise: seed Strategy at adopt; then Imprints, persona, and brain choice. Temperament meters are a readout. Fights and lessons move the dials.
  4. Fight 1v1 duels with visible reasoning, in the world (region arenas, Daily Tribunal, …)
  5. Climb higher: Flight depth + honest standings / rating (/standings). Both feed Trainer Rank. The Director points at what's next (lib/director.ts).

One world, many games

Everything you play lives inside the 3D world (/ · /grounds), with a native mobile shell at /m. The Hub gathers meta games as walk-up venues; each floating region hosts arena scenarios. Flight is one soul: Circuit on desktop is the raceable body of the same 100-sector climb as mobile. Catalogue: lib/scenarios/registry.ts · venues: components/grounds/venues.ts.

Hub & venues

ModeWhereWhat it is
The worldeverywhereFly, raise champions, hunt goals. Bodies morph with career.
The AmphitheatreHub venueWatch autonomous league self-play in the Live Gallery; today's Tribunal herald.
Flight (desktop)Circuit venue100-sector Flight in full six-degree flight (ten Reaches); three lives + Reach-clear restore; board by depth, then time.
Flight (phone)/m, /ascentSame Flight soul, one-thumb. The mobile face of the game.
Daily TribunalHub stoneOne shared fight a day. Call it before you watch; share a result grid.

Arena scenarios (in-world)

ScenarioWhereWhat it is
Open Duelany region plaza1v1 debate combat. Pick opponent, settle it. Stat pentagon, finishers, bounded wit judge.
The GauntletEmber Wastes (default)Chain of ever-stronger fighters; press your luck or cash out.
The TribunalObsidian Colosseum (flagship)Assigned-stance debate to a jury; switching sides scores ≈0.

Unlisted /arena remains the agent fight viewer for bring-your-own-agent testing (debate combat).

First journey (Flight-First)

DoorFirst minutes
MobileSplash → Take flight (guest OK) → claim wingmate → raise → boards
DesktopWake → short flight → champion pick (weekly starters) → Hub / Flight → duel motivated by climb

Live sequencing: flight-first-plan.md and two-doors.md. Historical fight-led Act 1: first-journey-roadmap.md.

Flight extras (shipped)

  • Challenges: race another Trainer's ghost mark; share /ascent/<id>; overtake toasts when you clear past their tip (bible/10-ascent.md).
  • Corridor feel: 4–8 rings per sector; Reach-flavored layouts; hazards read as danger (not loot); Crown caches mid-gap are the only mid-run reward (+Crowns + toast); one-shot teach for first hazard / cache / Gate Trial.
  • After the Hundred: finite summit (not endless). Prestige is cleaner flights, friend challenges, and weekly expeditions. Not a cross-body speedrun pitch (shared FLIGHT_WIND_SCALE stretches cruise + gaps on both bodies; desktop W-surge stays a quiet craft flex).
  • Director + unlock track + wing traits + daily Conditions + weekly expeditions: see long-game.md.

Ambience

Procedural soundtrack per place (lib/ambience-scores.ts): Hub, each region biome, Amphitheatre, Flight, and live fights each carry a distinct theme (modes, melodic motifs, AABA-style phrase forms) via resolveAmbienceMood(). Mobile Climb mounts the same engine and pins the Flight score. Loud SFX duck through lib/ambience-bus.ts.

Economy sketch

Crowns are earned in play (Flight, fights, goals) and spent on training / entries (including a Crown fee per Rank Fight on /standings). Champions get unique Ubuntu-style names (Adjective Noun) when they join the standings. Trainers stay nameless drivers. Wallet link is optional identity (career across devices), not a paywall. Name pool ~23k base pairs + suffixes. See bible/08-economy.md, AI-CRYPTO.md.

Async league

Champions are AI. PvP doesn't need both humans online. Raise and deploy; the league runs fights autonomously (the Hub's Live Gallery); you watch replays and climb. Cron / Live Gallery feeds an objective rating board (player copy: standings / rank / board; never ELO or ladder).

Implemented: Live Gallery runner, /api/sim headless fights, mind evolution after every fight.

Participation model

WhoRole
Trainer (human)Flies, claims/raises champions, connects agents, backs Crowns, spectates. Identity = device token (+ optional wallet). Nameless driver.
HandlerThe 3D avatar you see in the world (jetpack on its back). Not a separate player role.
Champion (agent)Picks moves, writes lines, adapts via memory, within engine rules
JudgeScores rhetoric quality (local by default; LLM opt-in); flags Highlights
EngineAuthoritative damage, types, statuses, rating

Agent platform

Any brain that implements act(view) → decision can drive a champion. See agent-protocol.md.

Providers: house Grok · OpenAI-compatible · HTTP webhook · mock (offline). Default house path: single-shot JSON (tool loop opt-in via ZINGERS_AGENT_TOOLS=1).

Share & viral

  • /c/[key]: public champion card page
  • /api/card/[key]: OG PNG for social unfurls
  • Challenge links: /ascent/<id> (ghost race + career snapshot)

Stack (this repo)

Next.js 16 · TypeScript · React Three Fiber · Rapier physics · Zustand · SSE for live fights.