4 Commits
Author SHA1 Message Date
slaguru666andClaude Opus 5 9b6c61ffcb Turn the custom Dice So Nice skins off
Registering them with "preferred" made them the default for everybody in the
world, which overrides whatever dice a player had already chosen — the system
helping itself to a setting that belongs to the user. Off at the author's
request.

One named constant rather than a settings API: this codebase registers no game
settings at all, and adding that surface, its lang keys and its UI to switch one
feature off is more machinery than the job needs. Flip RB_DICE_ENABLED to true
and everything below it still works.

The textures in dice/ and the generator behind `npm run dice` are left alone.
Nothing reads them while this is false, and deleting work in order to turn a
feature off is a poor trade.

Verified in a running Foundry with Dice So Nice active: "custodians" is no
longer among the registered systems, and preferredSystem has gone back to
"standard" rather than ours.

Version 1.0.6.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 20:34:22 +01:00
slaguru666andClaude Opus 5 0852427586 Fix the pause: it would not hide, it was off centre, and it was too small
Three faults in 1.0.4, and the first was the serious one.

  1. It never went away. Core hides the overlay with `#pause { display: none }`
     and shows it with `#pause.paused { display: flex }`. 1.0.4 styled the BARE
     #pause with display:flex, which wins on specificity, so unpausing removed
     the class and changed nothing — GAME PAUSED sat over the table for the rest
     of the session. Every rule here is now scoped to `.paused` and `display` is
     not set anywhere.

  2. It was off centre because I repositioned it. Core already centres it: a
     full-width band at top calc(50vh - 100px), column flex, centred both ways,
     pointer-events none. That layout was correct and 1.0.4 fought it with
     left/bottom/transform. It is left alone now; only the height changes, and
     the top moves up by exactly half the extra so the centring holds.

  3. It was small: a 322x116 panel in the corner. It is now core's full-width
     band at 300px with a 170px dial — against core's own 100px — and the
     caption at 24px to match core's.

Guarded: check-behaviour now parses the stylesheet and fails any rule that sets
display on an unscoped #pause. Verified it bites. It strips CSS comments first,
because the first version of the guard reported the comment explaining the
guard — which is exactly what the template guard did last time, so that is twice
now and the lesson is written down properly.

Verified by driving the real toggle: running → display none, box 0x0, no class;
paused → display flex, 341x302, centre X exactly on the viewport centre;
unpaused again → display none, box 0x0.

Version 1.0.5.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 19:31:35 +01:00
slaguru666andClaude Opus 5 ad771ff2b5 A uniselector for the pause
Foundry's pause is a spinning d20 and a caption. This replaces both from CSS
alone, without touching the markup: figure#pause becomes a small navy panel with
a yellow rule along the top, and the <img> becomes the arm of a uniselector.

A uniselector is the stepping switch inside a telephone exchange — an arm that
clicks round one contact at a time, hunting for a free line. It is the right
object for this game. The department's whole business is a machine that says
where things belong, and OPEN DAY is set inside one. Eleven contacts, because
eleven minutes is the interval this setting keeps returning to.

It STEPS rather than sweeps: steps(11) over 7.7s, so a contact every 700ms. A
continuous spin reads as a loading throbber; a discrete click reads as a machine
working through a list, which is what the department is doing while the table is
out of the room. The arm carries a faint trailing sector, because without it a
700ms step is easy to miss and the stepping is the whole idea.

No new text. Foundry's caption is localised and this only restyles it — a string
hardcoded in a stylesheet would be one the lang file could never reach.

Two things the browser had to be asked rather than assumed:

  - Core pins #pause with BOTH top and bottom, so an auto height stretched it to
    180px for a 16px caption. It is pinned here instead and sized to content.
  - The arm is rotated, so getBoundingClientRect returns the diagonal of its own
    square (75px for a 52px element). The layout takes its size from the flex
    basis and never from the measured box.

prefers-reduced-motion stops the movement and keeps the object — a stepping dial
in the corner of the eye is exactly what that preference is asking about.

Version 1.0.4.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 19:25:12 +01:00
slaguru666andClaude Opus 5 53481bdfc1 Ship the LAST ADMISSION plates as showable images
A third journal in the adventure — LAST ADMISSION — Show the players — holding
the seven scene plates and the floor plan as eight image pages at player
visibility. Right-click, Show Players, done.

title.show is false and there is no caption, on purpose: the table gets the
picture and nothing else. No heading telling them which room this is, no label
naming the thing on the stairs. The page NAMES exist only for the GM's sidebar
so the right one can be found in a hurry under pressure, and the players never
see them.

Ordered by when each comes up, not by asset number, for the same reason.

The builder throws if a plate is missing from disk, because a missing image is
a blank frame on a projector in front of six people.

Verified in Foundry: eight pages import at OBSERVER, the image loads, and the
rendered page contains no headings, no figcaption and no text at all.

Version 1.0.3.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 19:12:35 +01:00
143 changed files with 319 additions and 39 deletions
+1 -1
View File
@@ -183,6 +183,6 @@ The build runs all three guards before it writes anything:
check-rules: OK — 87 rules, 21 files scanned, 3 aliases + 41 constant sets checked, 275 formulas verified
check-kits: OK — 25 roles, 10 trades, 218 catalogue items, every kit key resolves, every posting can use what it carries, every loadout distinct
check-lang: OK — en.json, 945 keys, no leaf/branch collisions
check-behaviour: OK — 45 behavioural tests
check-behaviour: OK — 46 behavioural tests
```
<!-- guards:end -->
+7
View File
@@ -426,6 +426,13 @@ If there is time — and there usually is, because this ends early — she says
## Artwork
**Showing them at the table.** The adventure ships a third journal,
**LAST ADMISSION — Show the players**, holding these as eight image pages at player
visibility. Right-click a page and *Show Players*: the table gets the picture and
nothing else — no heading, no caption, no label naming what they are looking at. The
page names are for the GM's sidebar and the players never see them.
**Style line:** flat editorial vector, deep navy and pale yellow with warm off-white,
1970s British public-information poster, `--style raw --ar 3:2 --v 6`.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000002
MANIFEST-000004
+5 -1
View File
@@ -1 +1,5 @@
2026/08/12-19:01:54.231003 174603000 Delete type=3 #1
2026/08/12-20:33:19.258824 175abb000 Recovering log #3
2026/08/12-20:33:19.258964 175abb000 Level-0 table #5: started
2026/08/12-20:33:19.259113 175abb000 Level-0 table #5: 4591 bytes OK
2026/08/12-20:33:19.259390 175abb000 Delete type=0 #3
2026/08/12-20:33:19.259432 175abb000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/12-20:33:03.500947 17385b000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000002
MANIFEST-000004
+5 -1
View File
@@ -1 +1,5 @@
2026/08/12-19:01:54.298648 173df7000 Delete type=3 #1
2026/08/12-20:33:19.281748 1772df000 Recovering log #3
2026/08/12-20:33:19.282130 1772df000 Level-0 table #5: started
2026/08/12-20:33:19.282266 1772df000 Level-0 table #5: 4129 bytes OK
2026/08/12-20:33:19.282510 1772df000 Delete type=0 #3
2026/08/12-20:33:19.282542 1772df000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/12-20:33:03.577064 17385b000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000002
MANIFEST-000004
+5 -1
View File
@@ -1 +1,5 @@
2026/08/12-19:01:54.232848 174603000 Delete type=3 #1
2026/08/12-20:33:19.260549 1772df000 Recovering log #3
2026/08/12-20:33:19.260715 1772df000 Level-0 table #5: started
2026/08/12-20:33:19.261020 1772df000 Level-0 table #5: 31614 bytes OK
2026/08/12-20:33:19.261257 1772df000 Delete type=0 #3
2026/08/12-20:33:19.261283 1772df000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/12-20:33:03.503203 174067000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000002
MANIFEST-000004
+5 -1
View File
@@ -1 +1,5 @@
2026/08/12-19:01:54.282484 173df7000 Delete type=3 #1
2026/08/12-20:33:19.273026 175abb000 Recovering log #3
2026/08/12-20:33:19.273575 175abb000 Level-0 table #5: started
2026/08/12-20:33:19.273963 175abb000 Level-0 table #5: 45532 bytes OK
2026/08/12-20:33:19.274265 175abb000 Delete type=0 #3
2026/08/12-20:33:19.274316 175abb000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/12-20:33:03.557918 172843000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000002
MANIFEST-000004
+5 -1
View File
@@ -1 +1,5 @@
2026/08/12-19:01:54.266480 174603000 Delete type=3 #1
2026/08/12-20:33:19.245248 1762c7000 Recovering log #3
2026/08/12-20:33:19.246727 1762c7000 Level-0 table #5: started
2026/08/12-20:33:19.248205 1762c7000 Level-0 table #5: 225945 bytes OK
2026/08/12-20:33:19.248498 1762c7000 Delete type=0 #3
2026/08/12-20:33:19.248546 1762c7000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/12-20:33:03.540045 172843000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000002
MANIFEST-000004
+5 -1
View File
@@ -1 +1,5 @@
2026/08/12-19:01:54.293373 173df7000 Delete type=3 #1
2026/08/12-20:33:19.255310 175abb000 Recovering log #3
2026/08/12-20:33:19.255554 175abb000 Level-0 table #5: started
2026/08/12-20:33:19.255695 175abb000 Level-0 table #5: 3295 bytes OK
2026/08/12-20:33:19.255978 175abb000 Delete type=0 #3
2026/08/12-20:33:19.256022 175abb000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/12-20:33:03.569801 17304f000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000002
MANIFEST-000004
+5 -1
View File
@@ -1 +1,5 @@
2026/08/12-19:01:54.252536 174603000 Delete type=3 #1
2026/08/12-20:33:19.232393 175abb000 Recovering log #3
2026/08/12-20:33:19.235807 175abb000 Level-0 table #5: started
2026/08/12-20:33:19.239193 175abb000 Level-0 table #5: 545293 bytes OK
2026/08/12-20:33:19.239934 175abb000 Delete type=0 #3
2026/08/12-20:33:19.240034 175abb000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/12-20:33:03.524869 17385b000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000002
MANIFEST-000004
+5 -1
View File
@@ -1 +1,5 @@
2026/08/12-19:01:54.290196 172ddf000 Delete type=3 #1
2026/08/12-20:33:19.263420 1762c7000 Recovering log #3
2026/08/12-20:33:19.263582 1762c7000 Level-0 table #5: started
2026/08/12-20:33:19.263817 1762c7000 Level-0 table #5: 21613 bytes OK
2026/08/12-20:33:19.264044 1762c7000 Delete type=0 #3
2026/08/12-20:33:19.264079 1762c7000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/12-20:33:03.565946 17304f000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000002
MANIFEST-000004
+5 -1
View File
@@ -1 +1,5 @@
2026/08/12-19:01:54.286378 174603000 Delete type=3 #1
2026/08/12-20:33:19.275275 175abb000 Recovering log #3
2026/08/12-20:33:19.275814 175abb000 Level-0 table #5: started
2026/08/12-20:33:19.276182 175abb000 Level-0 table #5: 43953 bytes OK
2026/08/12-20:33:19.276489 175abb000 Delete type=0 #3
2026/08/12-20:33:19.276529 175abb000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/12-20:33:03.562330 17385b000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000002
MANIFEST-000004
+5 -1
View File
@@ -1 +1,5 @@
2026/08/12-19:01:54.297168 1735eb000 Delete type=3 #1
2026/08/12-20:33:19.264705 176ad3000 Recovering log #3
2026/08/12-20:33:19.265215 176ad3000 Level-0 table #5: started
2026/08/12-20:33:19.265531 176ad3000 Level-0 table #5: 33484 bytes OK
2026/08/12-20:33:19.265770 176ad3000 Delete type=0 #3
2026/08/12-20:33:19.265802 176ad3000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/12-20:33:03.575038 17304f000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000002
MANIFEST-000004
+5 -1
View File
@@ -1 +1,5 @@
2026/08/12-19:01:54.224954 172ddf000 Delete type=3 #1
2026/08/12-20:33:19.251838 175abb000 Recovering log #3
2026/08/12-20:33:19.252367 175abb000 Level-0 table #5: started
2026/08/12-20:33:19.252611 175abb000 Level-0 table #5: 7590 bytes OK
2026/08/12-20:33:19.252941 175abb000 Delete type=0 #3
2026/08/12-20:33:19.252982 175abb000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/12-20:33:03.494044 17304f000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000002
MANIFEST-000004
+5 -1
View File
@@ -1 +1,5 @@
2026/08/12-19:01:54.291920 1735eb000 Delete type=3 #1
2026/08/12-20:33:19.277727 175abb000 Recovering log #3
2026/08/12-20:33:19.278352 175abb000 Level-0 table #5: started
2026/08/12-20:33:19.278612 175abb000 Level-0 table #5: 16902 bytes OK
2026/08/12-20:33:19.278891 175abb000 Delete type=0 #3
2026/08/12-20:33:19.278925 175abb000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/12-20:33:03.567928 17385b000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More