# Native action and incremental game reference

The Action arcade shelf contains six original games with keyboard and touch buttons. Neon Wake
also supports dragging to move; Pulse Breaker supports pointer paddle movement. These games never
request camera/microphone access. The combined `No mic or camera` catalogue filter includes them,
the incremental games and compatible local, online and community games.

| Game | Main decision | Scoring pressure |
| --- | --- | --- |
| Neon Wake | Move, dash, collect shards while auto-fire attacks | Turrets, tougher enemies, shard multiplier and faster weapons |
| Rift Runner | Lane change, jump or slide | Increasing track speed, clean gates and bonus cells |
| Pulse Breaker | Rebound angle and focus timing | Faster ball, armored bricks, finite balls and chain multiplier |
| Orbit Needle | Rotate through moving gaps or phase across the ring | Shrinking gaps, rotating rings, one-hit failure and edge bonus |
| Scrapstorm | Thrust, rotate, fire and shield | Inertia, splitting wreckage, finite health and escalating spawns |
| Spark Cascade | Position/rotate pairs and plan chain reactions | Increasing fall speed, four-connected groups, gravity and chain multipliers |

`public/js/action-rules.js` is a standalone seeded simulation, exportable in Node. `initial(id, seed)`
creates a run, and `step(state, input)` advances exactly 1/60 second. Inputs contain directions and
one-shot actions; no browser drawing or network access is needed. Rendering lives in `action-art.js`.
`games/action.js` supplies native inputs, a bounded fixed-step accumulator, pause/release on hidden
or blurred pages, reusable controls and the normal intro/results/recording/feedback flow. Mouse
coordinates use CSS dimensions even on retina canvases. Native game sounds can be recorded without
requesting a microphone; a previously enabled microphone is mixed into a single audio track.

Game registration uses `kind: "action"`, complete `inputTypes`, a unique ID and a preview with the
platform signature `preview(width, height, time)`. The platform temporarily supplies the preview's
canvas as global `g`. Never accept a rendering context as that function's first argument. Give each
game an entry in `public/og/games/index.json` for deep links and feedback validation.

Action results can use the existing free, unverified latest-challenger comparison. Its build hash
pins the shared rules, adapter and core engine. It does not authorize token wagers or payouts. When
leaderboards are enabled, the existing explicit video-submission notice and review process applies.
These local simulations are not a server anti-cheat authority.

## Reactor Foundry

`foundry-rules.js` supplies a complete four-stage production chain, resource-limited consumption,
escalating machine costs, 10/25/50-machine milestones, twenty research levels per machine, a timed
overclock and prestige cores. Prestige explicitly confirms the reset, retaining permanent cores,
lifetime data and total playtime. Produced data, rather than remaining unspent data, earns cores.

`games/foundry.js` autosaves locally every five seconds and on actions/page exit. Offline production
is bounded to eight hours. Save imports use JSON with a size limit and normalize only known,
finite, nonnegative fields with bounded counts. Web Locks allow one active writer per browser
origin; another tab shows read-only controls and offers to take over after the first leaves.
Browsers without Web Locks are told to keep one foundry tab open. Export backups before clearing
site storage. There is no account/cloud-save promise and no financial effect.

Register endless progression with `scoreless: true` and a state other than `play`, since there is no
finite competitive run to film or score. Score challenges and leaderboard results must not use
editable lifetime balances as verified scores.

## Licensed imports

Progress Knight and A Dark Room are pinned adaptations, with credits, local licenses, change notes,
complete source manifests and source ZIPs. They run only under `/_open/<game>/` on the games host,
inside a sandbox. Their response policy denies camera/microphone permissions, external connections,
extra frames and popups. No platform wallet bridge or player credentials are sent into these games.
Saves are scoped per game, and reset no longer clears all games on that origin. The imported games
use their original save/export controls. A Dark Room is a text edition without the upstream audio
asset pack; its classic wide layout scrolls on narrow screens.

See [credits and changes](../opensource.html). After modifying a hosted edition, run
`.venv/bin/python tools/package_open_games.py`; this refreshes both complete source ZIPs. Preserve
the upstream license and notices, document changes, and keep covered modified source available.
Do not import code merely because it is visible on GitHub; verify the applicable license first.
