4e28de2a646cbb4b9b5ddc869197d44e2a64ccee
5
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
4e28de2a64 |
Play PAPER WINDOW with the shipped pregens; fix four silent defects
Ran the starter end to end. It closed, and it found four defects in what I shipped an hour earlier — all in the scenario data, all silent. R-247: the Borrowed Authority did not work. I wrote scope "operate", which is not one of the five scope tiers; an unrecognised scope ranks 0 and every action came back "impossible" with no error. The first scene of the starter is the Borrowed Authority tutorial. Fixed, guarded in check-kits, and covered by a test that documents the failure mode. R-248: the contact subsystem was unreachable in the scenario built around it. The case file carried a standing for the Returned Clerks and no GROUP ITEM; resolveContact returns null without one, so READ, SIGNAL and OFFER did nothing. Groups are data now, and a test asserts every standing on a shipped case file has a group behind it. R-249: legs wrote `kindId` where resolveLegDialog reads `leg.kind`. It worked only because the terrain text happens to begin with "Extraction". Not a defect: phase four went Difficult because Resources hit 0 and destitution makes every remaining phase Difficult. Best beat in the session. All four phases failed and the case still closed — Containment 8 to 2, Resources 8 to 0 — which is what the scenario is built to survive. Two of six closing requirements succeeded and the settlement still completed. The Cancellation Man opened with a critical against a raised riot shield and went through 10 points of armour, teaching the shield and graded-defence lessons in one roll. Also documented: nobody on the starter team can aim the return, because only the Anchor Officer trains Transposition. The extraction page now says to narrate it rather than roll six dice that will all fail. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
49c2e9fc7b |
Add PAPER WINDOW as the starter scenario Adventure
The six-player introductory case ships as a Foundry Adventure in a new `starter` pack, because a scenario that arrives as nine loose documents a GM has to assemble is a scenario that gets read rather than run. One import brings in: the GM scenario in twelve pages; the seven player handouts as their own journal at OBSERVER ownership so they can be revealed one at a time without the GM editing permissions first, while the GM text stays hidden; the six pregens built through the same buildActor path the shipped pregens use, so they arrive with full skill lists, kit, hit points and linked tokens; the cast, including the Cancellation Man; the Borrowed Authority as a real credential with scope, Trust 2 and its three red flags; and the case file already at Containment 8 / Resources 8 / Clearance 6 with its four phases loaded at the stated difficulties and modifiers. Pregen ratings are fixed at mid-band rather than rolled — a pregen that varies between installs is not a pregen. The expansion from posting or trade into a sheet reuses the register and the induction rule rather than restating them, so the starter cannot drift from the generator. Verified by importing it: no errors, the roster resolves through stable keys, handouts arrive player-visible, Nia has the team's highest Tradecraft as the text requires, Callum's shield is slung so raising it is still a decision, the three probationers show the trade/induction split, and phase one runs out of the box. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
43508259ac |
Consolidation pass after a Codex review
Four real defects, each verified against the source before acting on it. Trade expertise was coupled to agency rank. A probationary burglar came out at 35-50% and a veteran at 65-80%, as though fifteen years of picking locks were something the department conferred. TRADE_BANDS is now fixed at 50-65/30-50 at every rank, and INDUCTION scales with service instead (20-32 probationary to 45-60 veteran) because that half genuinely is the department's. The two axes were the wrong way round. This is the thing I flagged myself after PAPER HARBOUR and then left alone — flagging a defect is not the same as fixing it. Bonus points were sprayed across every skill in the game. grantFullSkillList runs immediately before the loop and puts all fifty-nine skills on the sheet, and the loop picked from actor.items, so a veteran's ninety points landed anywhere. The comment two hundred lines above has always said "over the core skills"; the code never did. "Random species" passed "baseline" into generators that support random perfectly well. No behavioural tests. The strongest point in the review: the three guards are static and none of them can tell whether a rule is READ, which is the only kind of defect this project has ever shipped. tools/check-behaviour.mjs now runs 28 deterministic tests, gated into the build, covering R-231/232/243/245/246, graded defences and the lamp rule. Proved it bites by re-breaking R-246. The register moved to postings.mjs, a Foundry-neutral module the engine, rulebook, guards and tests all import normally — they were previously pulled out of the engine with a regex and eval, which worked and was a trap. My first version of that used `export … from`, which re-exports without local bindings, so ROLES was undefined and the system threw on init: node --check passes that, loading it in Foundry does not. Also: the contact doc comment still said "only OFFER moves standing"; check-kits accepted mas/app, which are the DISPLAY names of siz/cha, so a posting declaring one would have passed and produced an undefined characteristic; package.json disagreed with the manifest; README counts were three revisions stale and are now generated at build. Deferred with reasons: splitting the 6,700-line engine into modules. Right, and a multi-session refactor whose risk is exactly the silent breakage demonstrated above. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
2e10ecced9 |
Fire modes, fitted sights and lamps, and a tab rail
Selectable fire, with the modifiers on the choice Every weapon has carried a fireMode since the packs were first built and nothing read it: a musket could rip a ten-round burst and "rapid" bought a weapon nothing. FIRE_MODE now gates the burst rules and carries its own attack modifier — slow +10% and then you work for the next one, fast a second shot at -20% to both, rapid bursts, beam +5% and it can be held on the target for damage instead of hits. The gate lives in burstAttack too, so no macro can route round it. `fast` was on five catalogue weapons and was not in the system's list of modes at all, so re-saving one of them silently blanked it; the list is derived from the rule now. burstAttack shipped complete and was reachable from nothing. It is the resolution path the selector chooses, and takes the dialog's whole stack rather than charging the player twice for the same burst. Sights and lamps that apply themselves A sight is graded by range band, so a telescopic sight is a -10% liability inside ten metres and worth +20% at extreme, and it only counts if it fits. The band is already known when the modifier is wanted, so nothing is selected and nothing is forgotten. The dark costs something now; a carried lamp buys it back to dim, never to daylight, and the card says it shows them exactly where you are. A migration fits gear that predates the fields, matched on the stamped key rather than by name. The damage card The last card still wearing Foundry's stock dice styling — it posted a bare Roll and let the core template dress it. It renders through the module's own card now, with the Roll still on the message so dice stay inspectable. A rail instead of a strip Eight tabs across an 820px sheet compressed to 11px type. They run down the side now, one line each, with counts as badges; the sheet is 152px wider to pay for it. Also fixed: any weapon with a Coherence cost could not be attacked with AT ALL — the handler re-read the weapon after an await, when currentTarget is already null, and the attack died on a TypeError with nothing shown. And the duplicate-rule guard failed an honest table because FIRE_MODE and speedBands share two key names; it wants a majority now, and prints partial overlaps rather than swallowing them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
d0144f744e |
The Custodians v0.6.1 — full system
A Foundry VTT game system: Basic Roleplaying d100 in a drab British agency that deals with crossings, where reality keeps a record of what belongs where and can be made to get it wrong. Contents: - rules.mjs as the single authority for every rule formula, with 40 rules and 132 spot-checked values. Nothing may restate a formula it defines. - 25 postings, each with a key characteristic, trained skills, talents and its own kit; a 175-item catalogue across four eras; 231 generated icons. - Reaction Lanes initiative, re-rolled every round including the first. - Coherence, and the Quiet Arts, which only ever arrive from a crossing gone wrong. - Graded defences: only a critical stops a critical. - Borrowed Authority — access as a record rather than a hacking roll. - A case generator, and a rules journal generated from rules.mjs so the book cannot drift from the code. Built compendia are committed so a remote Foundry needs only the files. node_modules is not; `npm install` restores it for rebuilding content. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |