docs(runicnpc): stage 8 decisions D302–D305 and its design #321

Merged
whitlocktech merged 1 commits from docs/runicnpc-stage8-decisions into main 2026-10-06 07:17:45 +00:00
Member

What

Stage 8 (on the map and in the app): your answers from 2026-10-06, and the design they lead to, in runicnpc/PLAN.md.

# Decision
D302 The live map shows an event's NPCs, a boss's adds among them, and every boss, including one placed outside an event. A placement's ordinary NPCs are not shown.
D303 A marker says the NPC's name and its event; a boss is a bigger marker. No health on the map.
D304 While an event runs, its page has a line per Place NPCs step, with a boss as its health ("Bandits: 3 of 8 left", "The Juggernaut: 62%"). Adds are not counted.
D305 Core may change as needed, as long as it stays game-agnostic and the UO integration does not break.

The design (D305):

  • Core: MODULE_API 1.12.0. An event action may declare an optional live. While a run is live, core asks each step's action, with a deadline and a short cache, and puts the answers ({label, left, of} or {label, percent}) in the public run. The web page and the app render them as text without knowing the game.
  • Module-uo declares ^1.10.0 and has no such action, so nothing changes for it.
  • The integration kit's pin goes red by design until the kit is read again and the pin moved.
  • The bridge (protocol 13, still unreleased): map.live's RunicNPC rows gain name, the step key, boss and add. A boss placed outside an event joins the world layer as kind: "boss".
  • Module-Rust: named markers with bosses drawn bigger, and rust.npc.place's live. Both follow the map's events-layer visibility.
  • The app: the same markers, and the event screen renders live.

One choice I made inside D305: a boss placed outside an event goes in the map's world layer, next to cargo and helicopters, so it is shown or hidden with them.

Stacked on #320 (stage 7 built), which stacks on #319.

Checklist

  • I have read CONTRIBUTING.md.
  • Docs only.
  • AI tools were used. Tool(s): Claude Code (Claude Opus 5.5). The commit carries the Co-Authored-By trailer.
  • I agree that my contribution is licensed under GPL-3.0-or-later.

🤖 Generated with Claude Code

https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY

## What Stage 8 (on the map and in the app): your answers from 2026-10-06, and the design they lead to, in `runicnpc/PLAN.md`. | # | Decision | |---|---| | D302 | The live map shows an event's NPCs, a boss's adds among them, and every boss, including one placed outside an event. A placement's ordinary NPCs are not shown. | | D303 | A marker says the NPC's name and its event; a boss is a bigger marker. No health on the map. | | D304 | While an event runs, its page has a line per Place NPCs step, with a boss as its health ("Bandits: 3 of 8 left", "The Juggernaut: 62%"). Adds are not counted. | | D305 | Core may change as needed, as long as it stays game-agnostic and the UO integration does not break. | **The design (D305):** - **Core: MODULE_API 1.12.0.** An event action may declare an optional `live`. While a run is live, core asks each step's action, with a deadline and a short cache, and puts the answers (`{label, left, of}` or `{label, percent}`) in the public run. The web page and the app render them as text without knowing the game. - **Module-uo** declares `^1.10.0` and has no such action, so nothing changes for it. - **The integration kit's pin** goes red by design until the kit is read again and the pin moved. - **The bridge** (protocol 13, still unreleased): `map.live`'s RunicNPC rows gain `name`, the step `key`, `boss` and `add`. A boss placed outside an event joins the `world` layer as `kind: "boss"`. - **Module-Rust:** named markers with bosses drawn bigger, and `rust.npc.place`'s `live`. Both follow the map's events-layer visibility. - **The app:** the same markers, and the event screen renders `live`. **One choice I made inside D305:** a boss placed outside an event goes in the map's `world` layer, next to cargo and helicopters, so it is shown or hidden with them. **Stacked on #320** (stage 7 built), which stacks on #319. ## Checklist - [x] I have read CONTRIBUTING.md. - [x] Docs only. - [x] AI tools were used. Tool(s): `Claude Code (Claude Opus 5.5)`. The commit carries the `Co-Authored-By` trailer. - [x] I agree that my contribution is licensed under GPL-3.0-or-later. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
wtclaude added 5 commits 2026-10-06 07:14:25 +00:00
The corpse is filled in OnCorpsePopulate (ApplyLoot is protected on
Oxide and public on Carbon, so no one override fits both); Rust's
crates spawn empty with their loot off; a locked crate's timer is its
starting count; a corpse's time is ResetRemovalTime.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
D300 a "nothing" corpse is truly empty, clothes too; D301 a dropped crate
stays until emptied, the locked crate keeping Rust's own decay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
- runicnpc/API.md: version 6, the profile's loot block and a spawn's
  loot.dropTable override.
- rust-link/PROTOCOL.md: §19.15, world.place's dropLoot.
- runicnpc/PLAN.md: stage 7's "Built" section. It covers the builds it
  was tested on (Rust 25681086, Oxide 2.0.7801, Carbon 2.0.262), the
  harness (s7 25/25, all 270/270, both rigs) and the walk on both rigs
  through the site. It also lists what building it found: Rust's
  ApplyLoot after the hook, and the inventory already emptied when the
  hook runs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
The org lead's answers on 2026-10-06:

- D302: the map shows an event's NPCs (a boss's adds among them) and
  every boss.
- D303: a marker says its name and event, and a boss is bigger; no
  health on the map.
- D304: the event page has a line per Place NPCs step, with a boss as
  its health; a boss's adds are not counted.
- D305: core may change, as long as it stays game-agnostic and the UO
  integration does not break.

The design: MODULE_API 1.12.0 adds an optional `live` function to an
event action, whose answers core puts in the public run. map.live's
RunicNPC rows gain a name, the step key and boss/add flags. A boss
placed outside an event goes in the world layer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
whitlocktech merged commit 6a87ce4d23 into main 2026-10-06 07:17:45 +00:00
whitlocktech deleted branch docs/runicnpc-stage8-decisions 2026-10-06 07:17:47 +00:00
Sign in to join this conversation.
No description provided.