Commit Graph

764 Commits

Author SHA1 Message Date
baa93ce92c docs(runicnpc): stage 7 spike, measured on both rigs
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
2026-10-05 19:51:19 -05:00
0fbfbed41f docs(runicnpc): stage 7 decisions D290-D299
Loot: the corpse's start is the profile's (Rust's scientist loot, the kit,
or nothing) with its table on top; a table is always-rows plus a pool
capped at N picks; an optional crate, the locked one included, with the
profile's hack timer; anyone loots; the corpse's time is the profile's;
one table per profile, edited in the data file without a site; an
event's Place NPCs step switches table loot; one stage, spike first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-05 19:43:36 -05:00
4910802367 docs(runicnpc): stage 6 s6 group 42/42 on both rigs
The check that came with the adds teardown fix ran after the walk and
passed on both rigs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-05 13:18:56 -05:00
1f6255adec docs(runicnpc): stage 6 tested line says what ran
The s6 group passed 41/41 on both rigs; its 42nd check (a dead boss's id
taking its adds) came with the walk's fix and has not been run in the
harness yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-05 13:13:34 -05:00
6d319c843b docs(runicnpc): stage 6 built and walked; API 5; protocol §19.14
API.md version 5: the profile's boss and use blocks, the passive role
and stand, the boss hooks and OnRunicNpcUsed, role and boss in
RunicNpc_List, RunicNpc_Despawn taking a boss's adds, the example kits
written once, and a Kits reload taking RunicNPC with it (D283).

PROTOCOL.md §19.14: npc.boss.spawned, npc.boss.phase and npc.boss.died,
their classes, and runicnpc_api 5.

PLAN.md stage 6: what was built, the builds it was tested on, the
harness and the site walk on both rigs, and what building it found.
The example kits' permission is kits.runicnpc.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-05 13:12:16 -05:00
023ba77ceb docs(runicnpc): stage 6 build decisions D285-D289
D285 an event's boss rewards stay the Rust module's existing steps;
D286 spawn and death lines to everyone, phase lines to players near
the boss; D287 adds fight on after the boss dies; D288 a passive NPC
moves as its profile says; D289 the four example profiles.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-05 10:28:54 -05:00
64f6e019cf Merge pull request 'docs(runicnpc): stage 6 spike questions answered, D283–D284' (#315) from docs/runicnpc-stage6-spike into main
Reviewed-on: #315
2026-10-05 15:19:28 +00:00
e30b8c0391 docs(runicnpc): stage 6 spike questions answered, D283-D284
D283: RunicNPC keeps "// Requires: Kits"; a Kits reload reloads it and
its spawned NPCs are lost, so operators are told not to reload Kits
during an event. D284: the four example kits are written only on the
first install, behind a flag, and never restored or overwritten.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-05 09:28:18 -05:00
59586eece7 Merge pull request 'docs(runicnpc): stage 6 spike, measured on both rigs' (#314) from docs/runicnpc-stage6-spike into main
Reviewed-on: #314
2026-10-05 14:26:08 +00:00
fe85901195 docs(runicnpc): stage 6 spike, measured on both rigs
What rnt.spike6 found on the Oxide and Carbon rigs: press E has no
hook but OnPlayerInput; the bar can redraw in place with CUI's update;
a phase's kit swap keeps the target but needs EquipWeapon; adds cost
4-8 ms each in one frame; Kits' data file takes an added kit on reload
and keeps players' usage. Found on the way: RunicNPC's
"// Requires: Kits" makes every Kits reload take RunicNPC and its
NPCs down. Two questions for the org lead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-05 06:23:36 -05:00
a070780368 Merge pull request 'docs(tree): sync installer/PROJECT_TREE.md' (#308) from chore/sync-installer-tree into main
Reviewed-on: #308
2026-10-05 10:21:07 +00:00
a21bbec659 Merge pull request 'docs(runicnpc): stage 6 decisions D273–D282' (#313) from docs/runicnpc-stage6-decisions into main
Reviewed-on: #313
2026-10-05 10:20:46 +00:00
1b773764dd docs(runicnpc): stage 6 decisions D273-D282
The org lead's answers on 2026-10-05 for stage 6 (bosses, passive NPCs,
example profiles): a boss box on any profile, the bar's audience, what a
phase changes, rewards through an event only, announcements in game and
in the app (Discord through an event), press E, passive NPCs unhurt by
default, four example profiles whose kits RunicNPC writes into Kits'
data file, no greet/hurt/kill lines, one stage opening with a spike.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-05 05:15:53 -05:00
d32886f348 Merge pull request 'docs(runicnpc): stage 5 built, tested and walked; API 4; protocol 13 §19.13' (#312) from docs/runicnpc-stage5-built into main
Reviewed-on: #312
2026-10-05 08:35:35 +00:00
8ef7da034f docs(runicnpc): stage 5 built, tested and walked; API 4; protocol 13 §19.13
- runicnpc/PLAN.md: stage 5 as built, what the build found that the spike
  did not (Rust's CanSeeTarget is no line of sight for an NPC target; a
  destroyed escort target compares equal to null; a rocket's line of
  sight), the harness results on both rigs, and the site walk;
- runicnpc/API.md: API 4 (the faction table, escort, ally, tether, the
  profile's stage 5 fields, a placement's tether, OnRunicNpcEscortEnded,
  the new rows of RunicNpc_List, rnpc.faction, /rnpc follow, tether=);
- rust-link/PROTOCOL.md §19.13: the faction table on npc.profiles and
  npc.profiles.set, world.place's escort, ally and tether, the three new
  world.error reasons; the bridge needs RunicNPC API 4. Joins protocol 13
  (D253).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-05 01:16:34 -05:00
eb729f7dd4 docs(runicnpc): stage 5 build decisions D267-D272
The org lead's answers to the six questions the stage 5 build raised
(2026-10-01): a Harmony patch for the safe-zone sentries under the
condition that it never reaches Rust's own scientists (D267), faction pairs
both ways and shooting back (D268), escort as an order that walks home
when the target is gone (D269), the event step's escort and ally (D270),
the PVE opt-out as two checkboxes (D271), and the tether on placements and
event steps rather than profiles (D272).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-01 07:00:39 -05:00
098c379918 Merge pull request 'docs(runicnpc): stage 5 spike, measured, and D263–D266' (#310) from docs/runicnpc-stage5-spike into main
Reviewed-on: #310
2026-10-01 08:17:12 +00:00
7dade6cce1 docs(runicnpc): stage 5 decisions D263-D266
The org lead's answers to the spike's four open questions (2026-10-01):
D263 a fight with Rust's scientists stays one-sided and our NPCs never
go hunting into monuments; D264 `turrets: always` adds Outpost's and
Bandit Camp's sentries; D265 the main weapon's ammunition is endless, as
in Rust; D266 fire burns as it does in Rust, allies included.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-01 03:05:42 -05:00
ae0b8753bb docs(runicnpc): stage 5 spike, measured (D231, D253)
What the stage 5 spike measured on both rigs, written into the stage 5
section of runicnpc/PLAN.md: why an NPC's bullets never hurt an NPC (Rust
skips the hit unless the victim's faction is Horror) and the per-shot
mark that fixes it; what our own sensing costs against stage 1's; what
Rust's turrets, its AI and TruePVE or NextGenPVE do with our NPC; and
four questions the answers leave for the org lead.

Stage 1's row on fighting NPCs is corrected: its "cover and facing states
win" was not the cause.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-01 01:02:16 -05:00
c28a688b03 Merge pull request 'docs(runicnpc): stage 5 decisions D253–D262' (#309) from docs/runicnpc-stage5-decisions into main
Reviewed-on: #309
2026-10-01 04:10:10 +00:00
f899834453 docs(runicnpc): stage 5 decisions D253-D262
The org lead's answers of 2026-09-30 for stage 5 (behaviour): one stage
walked once, opening with the D231 spike; named factions with per-profile
exceptions; players-only by default; group alert at 40 m; clan and team
allies defended; escort targets from events, the API and /rnpc follow;
turrets as for Rust's scientists; kit extras opt-in; PVE hooks allowed both
ways; a patrol returns to the point it was heading to.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 23:05:24 -05:00
runic-docs-bot
b76fa0ada3 docs(tree): sync installer/PROJECT_TREE.md from RunicGateway/installer@2567cf5 [skip ci] 2026-09-30 19:52:14 +00:00
337451f9f7 Merge pull request 'docs(runicnpc): stage 4 built and walked; protocol 13 §19.12; API 3' (#307) from docs/runicnpc-stage4-built into main
Reviewed-on: #307
2026-09-30 19:51:29 +00:00
2ad2043060 docs(runicnpc): stage 4 built and walked; protocol 13 §19.12; API 3
PROTOCOL.md §19.12: RunicNPC over the bridge — integrations.runicNpc, the
npc.profiles, npc.profiles.set, npc.placements and npc.placement commands and
their refusals, the npc.died, npc.health and npc.placement.changed frames,
world.place with a profile, attackerNpc and attackerProfile, the tally's
npcProfileKills, the four sidecar routes, and overlay.toml's runicnpc_api.

API.md: API 3 — RunicNpc_AddPlacement, RunicNpc_RenamePlacement,
RunicNpc_RespawnPlacement and OnRunicNpcPlacementChanged.

PLAN.md stage 4: what was built in five repositories, the walk on both rigs
row by row, what was not walked and why, and what building it found.

rust-link/INSTALL.md: RunicNPC as the bundle's third file, by hand, the egg,
doctor and uninstall.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 08:45:21 -05:00
c6ba46d692 Merge pull request 'docs(runicnpc): stage 4 decisions D249–D251' (#306) from docs/runicnpc-stage4-api3-decisions into main
Reviewed-on: #306
2026-09-30 09:34:25 +00:00
a3d815dea1 docs(runicnpc): D252, a player's per-profile kills in their leaderboard row
The module has no public player page, so D250's "player's public stats" are
shown by opening the player's row in a server's leaderboard, and to the player
on their own Player -> Rust page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 04:12:00 -05:00
c48efe18c0 docs(runicnpc): stage 4 decisions D249-D251
D249: RunicNPC gets API 3 in stage 4 (a fifth PR): a call that creates and
names a placement from a map point it grounds and checks, rename and respawn
calls, and a hook raised when a placement changes.
D250: per-profile kills on the player's public stats, as a title category,
and as a leaderboard ranked by a picked profile.
D251: where an adopted server profile and a site profile share a name on
that server, the site's wins; the server's own is kept as "replaced".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 03:39:47 -05:00
e57fc5889a Merge pull request 'docs(runicnpc): stage 4 decisions D243–D248' (#305) from docs/runicnpc-stage4-decisions into main
Reviewed-on: #305
2026-09-30 08:32:27 +00:00
e601f1a1c6 docs(runicnpc): stage 4 decisions D243-D248
The org lead's answers for stage 4 (Runic Gateway integration): the event
picker shows profiles and Rust's own scientists (D243); a server's own
profiles are adopted on the first push (D244); placements are listed,
edited and created from the live map with /rnpc place's options (D245,
D246); kills count by profile name per server unless a profile says
otherwise (D247); one stage, four PRs, joining protocol 13 (D248).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 03:30:43 -05:00
84de5b2879 Merge pull request 'docs(runicnpc): stage 3 as built, and its in-game walk' (#304) from docs/runicnpc-stage3 into main
Reviewed-on: #304
2026-09-30 08:20:51 +00:00
953044b806 docs(runicnpc): stage 3 as built, and its in-game walk
- PLAN.md stage 3: what was built (runicnpc-rust#5), the results on
  both rigs (134/134, reload and restart 5/5), what building it found
  (Rust leaves an NPC in the air when its floor goes; a route leg can
  be on the navmesh and still unwalkable; a shore floor not covered;
  stage 2's JSON leak), the console-only at= option for the org
  lead's call, and the in-game walk checklist.
- API.md: SetPlacement's navmesh check and D239 fallback, the
  placements' note, List's regrounded, and SetRoute's unchecked legs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 03:19:14 -05:00
fdfd525bc4 Merge pull request 'docs(runicnpc): stage 3's design, D239–D242' (#303) from docs/runicnpc-stage3-decisions into main
Reviewed-on: #303
2026-09-30 06:52:55 +00:00
791ac75b14 docs(runicnpc): stage 3's design, D239–D242
The org lead answered stage 3's four questions on 2026-09-30:

- D239: a roamer may stand on a player-built floor (Rust's mesh covers it
  a moment after it is built, stage 2), with a warning in the answer.
  §5, §8 and stage 10 now follow it; stage 2's open item is closed.
- D240: routes are recorded point by point (record, point, undo,
  save loop|back, cancel), with nothing drawn on screen.
- D241: placements made in game are named <profile>-<n>, renamable.
- D242: /rnpc place and /rnpc here take key=value options in any order.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 01:49:48 -05:00
3f358bba76 Merge pull request 'docs(runicnpc): stage 2 as built, and API.md' (#302) from docs/runicnpc-stage2 into main
Reviewed-on: #302
2026-09-30 06:40:48 +00:00
1e00c5da6e docs(runicnpc): stage 2 as built, and API.md
runicnpc/API.md is the reference for other plugins: owners, every
RunicNpc_* call, the four hooks, and the profile, placement and route
shapes. PLAN.md records stage 2's results on both rigs and what building it
found: Rust's chase needs an AI zone like its roam, and a player-built floor
joins the navmesh 0.1-0.3 s after it spawns, which corrects stage 1's Q4
(left open for the org lead). README indexes API.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-30 01:31:44 -05:00
5c44ce437a Merge pull request 'docs(runicnpc): stage 2's design, D232–D238' (#301) from docs/runicnpc-stage2-decisions into main
Reviewed-on: #301
2026-09-30 04:41:05 +00:00
a542ae917f docs(runicnpc): stage 2's design, D232–D238
The org lead answered stage 2's open questions: a fixed field list for the
swap, three movement modes a placement may choose (wander, Rust's monument
paths, admin-recorded routes), sleep past 160 m after walking home, respawn
per placement (each or group), placements that wait for a deleted profile,
and the profile's shape. Stage 2 and 3 are rewritten around them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 23:40:19 -05:00
c2061d5dda Merge pull request 'docs(runicnpc): stage 1 measured, D231' (#300) from docs/runicnpc-stage1 into main
Reviewed-on: #300
2026-09-30 04:26:45 +00:00
e3ae1905cb docs(runicnpc): stage 1 measured, D231
The harness answered all six stage 1 questions on both rigs, on one 6000 world:
the swap needs AwakeFromInstantiate; unsaved NPCs never return; Rust's brain
honours sense values only before it starts, roams only in AI zones and never
attacks NPCs; placement checks use Rust's Gen2 navmesh (89% of monument points,
never a player-built floor); the cost table for 1/10/100 idle and fighting on
Oxide and Carbon; the death screen needs an AttackerInfo override, and the
bridge's frames still name the prefab.

D231: each profile or group decides whether its NPCs target NPCs, and which
kinds, which needs our own combat state and sensing (stage 5 spike).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 23:23:35 -05:00
23c2a5a5cf Merge pull request 'docs(runicnpc): stage 0 as built, D229–D230' (#299) from docs/runicnpc-stage0 into main
Reviewed-on: #299
2026-09-30 02:05:26 +00:00
ced4755ebb docs(runicnpc): stage 0 as built, D229-D230
Records what runicnpc-rust#1 built for stage 0 and the two decisions taken with
it: the empty repository seeded by one chore commit to main, then edge and PRs
(D229); plugin/RunicNPC.cs + plugin.toml rather than an overlay tree (D230).
Notes the Oxide floor that differs from the bridge's (2.0.7726, what the rig
runs), the three checks added over the bridge's checker, the manifest's `api`
field, and con.js renamed console.js because CON is a reserved device name on
Windows. PLAN_REDESIGNS' pointer now reads D214-D230.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 21:04:47 -05:00
216bbf9c54 Merge pull request 'docs(runicnpc): plan RunicNPC, our own Rust NPC plugin (D214–D220)' (#298) from docs/runicnpc-plan into main
Reviewed-on: #298
2026-09-30 01:47:49 +00:00
aec01342d5 docs(runicnpc): record the org lead's answers, D221-D228
Standalone use too (D221), placements live on the server (D222), our own
scientist subclass and brain (D223), installer and egg ship it plus a
Gitea release and possibly other download sites (D224), per-profile
kills public and in titles (D225), edge to main (D226), no default caps
but a measured cost warning wherever NPCs are added (D227), and the
names RunicNPC, /rnpc, runicnpc.* (D228). The sections they change are
updated: standalone profiles, the console profile verb, cost warnings,
stage 1's measurements, and publishing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 20:38:28 -05:00
97be4fb5ab docs(runicnpc): plan RunicNPC, our own Rust NPC plugin (D214-D220)
The PLAN_REDESIGNS §6 spike ran on the Oxide rig on 2026-09-30. Route A
kept its kit and fought with it but cannot be named; HumanNPC counted its
NPCs as players in the killfeed and tallies; NpcSpawn worked but costs a
boot hitch, a phone-home and an unbundleable dependency. The org lead
chose to write our own API-style plugin in runicnpc-rust.

runicnpc/PLAN.md records the spike, the decisions, the features, the API,
the chat commands, and stages 0-10 with how each is tested, plus eight
questions. PLAN_REDESIGNS §6, §9 and §10 point at it; the index lists it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 20:31:57 -05:00
71ab0c01af Merge pull request 'docs(rust): the map's monument labels as built and walked — PLAN_REDESIGNS 4.1, D213' (#297) from docs/rust-map-markers into main
Reviewed-on: #297
2026-09-30 00:17:04 +00:00
d7b178fb8b docs(rust): the map marker labels as walked
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 18:19:31 -05:00
3bd7a22bc6 docs(rust): the minor labels read from a 6000 map, and D213
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 18:12:08 -05:00
637a11326e docs(rust): the map's monument labels as built (PLAN_REDESIGNS §4.1, D196)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 12:10:47 -05:00
75a45b51a1 Merge pull request 'docs(rust): the chat-title conditions as built — PROTOCOL 19.10, PLAN_REDESIGNS 5.8 and D209' (#295) from docs/rust-title-conditions into main
Reviewed-on: #295
2026-09-29 17:00:40 +00:00
6ed4021c12 Merge main into docs/rust-title-conditions: §3's docs
PROTOCOL.md: §19.10 (titles) and §19.11 (zones) both kept, in order.
PLAN_REDESIGNS: the D210-D212 table moved from the end of the file, where
docs#296 appended it by mistake, into §10 after D209.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-09-29 11:36:45 -05:00