Back to Outbreak: Soycoon City
SOURCE / PINNED RELEASE

Made of little things.

Outbreak: Soycoon City

Release
db7750b1d009…
Author-recorded commit
3ee3f5fd27a6…
License
LICENSE
Author’s source reference
nostr://npub182jczunncwe0jn6frpqwq3e0qjws7yqqnc3auccqv9nte2dnd63scjm4rf/wss%3A%2F%2Fgit.napplet.soy%2F/n-b87c04571a9

Archive hash verified: dbebdc772b142a1c…. The source-to-build association is the author’s claim; it has not been independently rebuilt.

docs/level-sharing-brief.md
# Repository levels, sound planning and player sharing

Purpose: let developers extend the checked-in precinct and let players author, publish, discover and play their own levels while retaining the PS1 game and evidence-terminal UI.

The canonical demo becomes `levels/demo.json`: rooms, map origins, paired doors, props, dressing, spawns, cameras, trigger areas, level rules and a linked artwork inventory. The game loads that JSON; geometry is no longer duplicated in TypeScript. Background bindings retain the geometry signature of the shot they were generated for. A developer check verifies file hashes; updating a signature is an explicit authoring step after reviewing regenerated art.

`sounds/demo.json` records sound IDs, production prompts, variants, duration, looping, output targets, mixing and gameplay cues. All files begin as planned. This pass does not generate sounds or implement playback; the later ElevenLabs computer-use session consumes this catalogue.

Player levels use the documented `soy.app-data/1` public NIP-78 convention: collection `levels`, schema `soyindent.level`, version 1. A small record links a hash-verified immutable level JSON package on Blossom. Matching background images are uploaded separately and referenced by URL, SHA-256, MIME and size. Unsupported hosts retain local play, editing, draft save and JSON export. Library reads are bounded recent views, with incomplete/invalid results visible. Publishing, updates and removal use the selected viewer and host consent; remixes create a new record. Retry retains prepared work, stale edits are rejected, and failures preserve the editor draft.

Authority: `requires: []`. Existing optional storage/config/fs remain. Optional shell initialization, identity, OUTBOX, upload and resource support enable sharing; SDK wrappers own calls. No direct network, signer, relay escape hatch or new NAP domain. The shared application-data helper reads the existing shell policy; shell initialization has no SDK wrapper in the installed package. No public release or unattended publication of a player's level is part of implementation testing.

Native Gamepad input feeds the existing tank-control simulation once per animation frame. Standard pads use stick/D-pad movement, left trigger aim, right trigger fire, face buttons for reload/doors/run, and Start for begin/resume/pause. Keyboard and touch remain. Drift, edges, focus loss, disconnect/replacement and unknown mappings receive explicit handling; no device bridge or capability requirement is added.

UI: keep app-owned olive, brass and precinct typography. Add a compact Levels workspace with publication fields, owned-level actions and a recent community list. Add editor level-rule fields and controller status/help. Panels scroll on phone layouts and fit the established minimum notice. Verify repository JSON/assets, rules, sharing through independent test identities and failure cases, controller samples in the hosted game, desktop/touch layouts, guidance, TypeScript, build, conformance and soyLI check. Physical gamepads and live public-provider behavior remain separate verification steps.