Back to Black Site
SOURCE / PINNED RELEASE

Made of little things.

Black Site

Release
666bc7c74ebd…
Author-recorded commit
05e95af79676…
License
LICENSE
Author’s source reference
nostr://npub12lm3rxsva8kfempyjkxupt09e02n3fezurkyadyqfejdc5e0r2kscqty6r/wss%3A%2F%2Fgit.napplet.soy%2F/n-d2225ddc391

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

media/README.md
# Listing media

- `icon.png` (512×512) is the napplet icon, selected by `icon` in `napplet.json`.
  `icon.svg` is its editable source: an operator's 100° field of view picking out a
  hostile while a wall keeps the rest dark. Re-render it to a 512×512 PNG after edits;
  manifests accept PNG, JPEG or WebP icons only, not SVG.
- `screenshots/` holds 1200×750 gameplay frames from each map plus the map select
  screen, for galleries, store pages and posts. The listing cover that `soyli publish`
  signs is still `preview.png` in the project root (`preview.image`).

## Capture recipe

Frames are real captures of the built napplet on Normal difficulty with the default
Assaulter loadout, in a 1200×750 sandboxed `allow-scripts` iframe like
`scripts/smoke-frame.mjs` uses. Each run selects the map, deploys, then drives the
player with real key and mouse input: follow the game's `findPath` toward the nearest
hostile and hold fire whenever it is in line of sight. Frames are taken every 600 ms
and the clearest firefight on each map was kept by hand.

To reach `G`, `findPath` and `los` from the driver, the capture build temporarily
prepends one line to `src/game-bridge.js` and builds into a scratch directory:

```js
globalThis.__BS = () => ({ G, W, H, VIEW_SCALE, findPath, los, SOLID_SHOT });
```

Don't commit that line; the shipped build doesn't expose game state.

The game shows a "make the window bigger" notice below 560×380, so there is no portrait
phone screenshot.