tevansandClaude Opus 4.8 cdf980ea62 NPCs as character sheets with B&W portraits; item cards with line art
- Each NPC now has a description (who they are), disposition, and significance
  (why they matter), plus a deterministic per-NPC seed.
- New procedural black-and-white art: npcPortraitSVG (stencil "ident" mugshots,
  varied head/hair/eyes/mouth/accessory) and itemIconSVG (line-art icons by
  OTEM category), with data-URI variants.
- Field Dossier renders NPC character-sheet cards and item cards with art.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 18:26:17 +01:00

Blueprint News

An engine-agnostic generator for SLA Industries BPN (Blue Print News) mission briefings. It produces two clearly separated surfaces from one briefing:

  • Player Brief — the official corporate dispatch the squad is allowed to see.
  • GM Dossier — the handler-only truth: the twist, the withheld fact, the real threat read, the levers, and the dice state.

Every briefing is reproducible from a short seed, which also drives the procedural SVG artwork — flat, stencil/propaganda SLA styling, never photorealistic. Fonts are bundled locally, so it looks identical offline.

It deliberately owns no game-engine schema. NPC and monster generation are left to companion modules; each briefing reserves a clean hand-off seam (npcSeam) carrying archetype keys only.

Run the app

No build step. Serve the folder over HTTP (ES modules need it) and open it:

python3 -m http.server 8778
# then open http://localhost:8778/index.html

The app: pick a colour band / scenario frame (or leave on Any to roll), Generate, toggle Player / GM / Both, Save to a local library, Print (clean print stylesheet) or Export HTML (self-contained file).

Architecture — a component, plus an app built on it

The reusable component is three framework-free ES-module layers with no DOM or engine dependencies in the core:

core/                 generation engine (pure, deterministic)
  bpn-core.js           generateBPN(opts) -> resolved BPN object; randomSeed()
  data/colours.js       the 10 colour bands + d20 issue table
  data/frames.js        hand-authored scenario frames (with npcSeam hints)
  data/tables.js        generic SLA flavour tables
art/
  bpn-art.js            seeded procedural SVG: crestSVG(), bannerSVG()
render/
  bpn-render.js         briefHTML() / dossierHTML() + mount helpers
  bpn-render.css        the SLA-styled, responsive, print-ready stylesheet
assets/fonts/           bundled Josefin Sans, Roboto Mono, Modesto Condensed
app/                    the standalone generator UI (consumes the above)
index.html

Using the component in another engine

import { generateBPN } from "./core/bpn-core.js";
import { briefHTML, dossierHTML } from "./render/bpn-render.js";

const bpn = generateBPN({ seed: "BPN-1A2B-3C4D", colourKey: "red" });
host.innerHTML = `<div class="bpn">${briefHTML(bpn)}</div>`;   // player-facing
gmPanel.innerHTML = `<div class="bpn">${dossierHTML(bpn)}</div>`; // GM-only

Include render/bpn-render.css and assets/fonts/fonts.css in the host. The markup is plain HTML/SVG scoped under .bpn, so it drops into a Foundry journal page, a website, or an Electron app unchanged.

generateBPN(opts) accepts: seed, colourKey, frameId, squadSize, and an overrides object to pin any individual field. Same inputs → identical output, art included.

The NPC / monster seam

Each briefing exposes bpn.npcSeam = { contactArchetype, threatArchetype, threatRole } — archetype keys only, no stats. A future NPC/monster module reads these to spin up cast members in whatever engine it targets, without this module ever importing that engine's actor schema. The GM Dossier surfaces the seam explicitly so the handler knows which cast slots are reserved.

Colour bands

Blue · Yellow · Green · White · Grey · Silver · Jade · Red · Black · Platinum — each with its own classification, SCL requirement, CBS pay band, media posture, and render accent. See core/data/colours.js.

Provenance

Rebuilt from the strongest parts of the earlier Foundry-bound experiments (sla-bpn-dispatch's mission engine and player/GM split, the sla-bpn-toolkit data, sla-briefing-desk's output pattern), with every engine call removed and the real SLA house fonts and palette applied.

S
Description
Engine-agnostic SLA Industries BPN (Blue Print News) mission-briefing generator — reusable component + standalone app, seeded procedural SVG art, separate Player Brief and GM Dossier.
Readme
318 KiB
Languages
JavaScript 78%
CSS 19.7%
HTML 2.3%