A lamp lights the people standing in it

The goods yard fight made the case: three agents inside the same pool of light shot at
-50% while the fourth, four metres away, shot at -10%.

A lamp now has a reach, per item rather than global, because a weapon lamp and a
vehicle searchlight are not the same offer — 4 m for cold light strips, 6 m for a
weapon lamp, 10 m for the issue field lamp, 30 m for a roof searchlight. Anyone inside
it is in the light and the card names whose lamp it is, so both halves of the rule
travel together: the pool is one position and the whole group is standing in it.

Measured from the tokens. The shot that started this — no lamp of her own, four metres
from somebody else's, in pitch dark — goes from 20% to 60%, while an agent
twenty-five metres out still eats the full -50%.

An UNKNOWN distance is explicitly not lit: Number(null) is 0, so an unmeasured
distance would otherwise have read as standing on top of the lamp and lit any scene
with no tokens placed. The dialog carries a tick instead, pre-set when the canvas could
measure it and the GM's answer when it could not.

Note: template.json is read when Foundry loads the system, so a deployed server needs
a restart and not just a pull before the migration can stamp the new field.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
slaguru666
2026-08-11 09:49:30 +01:00
co-authored by Claude Opus 5
parent 5c640d65cf
commit 4bfa7110d0
114 changed files with 262 additions and 50 deletions
+30
View File
@@ -4361,3 +4361,33 @@ result instead of trusting it, which is the only reason this log is accurate.
**A content wart:** the barghest bites with something called "Vesh grasp limb" — the
generic `grasp` weapon still carrying a Ringworld-era display name. Every creature in
the bestiary that uses `grasp` inherits it.
## R-240. A lamp lights the people standing in it
The goods yard fight made the case: three agents inside the same pool of light shot at
−50% while the fourth, four metres away, shot at −10%. Nobody would run that at a
table, and the rule was wrong rather than merely coarse.
A lamp now has a **reach**, and it is per item rather than global, because a weapon
lamp and a vehicle searchlight are not the same offer — 6 m, 10 m for the issue field
lamp, 4 m for cold light strips, 30 m for a roof searchlight. Anyone inside the reach
is in the light, and the card names whose lamp it is: *"MODE: Tomas's, 4 m away — you
are in it."* Both halves of the rule travel together, so the pool is one position and
the whole group is standing in it.
Measured from the tokens, because the canvas already knows who is standing where. The
same shot that started this — Rakhi, no lamp of her own, four metres from Tomas's, in
pitch dark — went from **20% to 60%**, and Ceyla twenty-five metres out still ate the
full −50%.
**The interesting part was the unknown.** `Number(null)` is 0, so an unmeasured
distance read as *standing on top of the lamp* and would have lit any scene with no
tokens placed. My own spot-check caught it before it ever ran: an unknown distance is
now explicitly not lit, and the dialog carries a tick that arrives pre-set when the
canvas could measure it and is the GM's answer when there is nothing to measure. That
keeps it automatic where it can be and honest where it cannot, rather than quietly
lighting the world.
Note for deployment: `template.json` is read when Foundry loads the system, so the new
`lightReachM` field did not exist on items until the server was restarted — the
migration then stamped it. A remote server needs the restart, not just a pull.
+6 -2
View File
@@ -861,7 +861,6 @@
"RINGBRP.Sight.reflex": "Reflex sight",
"RINGBRP.Sight.telescopic": "Telescopic sight",
"RINGBRP.Sight.thermal": "Thermal sight",
"RINGBRP.Sight.LampEffect": "lit, and visible",
"RINGBRP.Sight.Revealed": "{name} shows them exactly where you are",
"RINGBRP.Lighting.lit": "Lit",
"RINGBRP.Lighting.dim": "Dim",
@@ -876,5 +875,10 @@
"RINGBRP.Chat.Damage": "damage",
"RINGBRP.Chat.Sustained": "sustained",
"RINGBRP.Chat.DamageMod": "damage mod",
"RINGBRP.Notify.GearFitted": "Fitted {n} item(s) that were carried before sights and lamps did anything."
"RINGBRP.Notify.GearFitted": "Fitted {n} item(s) that were carried before sights and lamps did anything.",
"RINGBRP.Sight.LampOwn": "yours, {reach} m of it",
"RINGBRP.Sight.LampNear": "{holder}'s, {m} m away — you are in it",
"RINGBRP.Sight.SomeLamp": "The light you are standing in",
"RINGBRP.Dialog.InLight": "I am in the light",
"RINGBRP.Dialog.InLightHint": "Ticked already if a lit lamp is within reach of your token. Tick it yourself when there are no tokens to measure."
}
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/11-08:56:03.947107 16e763000 Delete type=3 #1
2026/08/11-09:44:12.196312 1737fb000 Recovering log #3
2026/08/11-09:44:12.196429 1737fb000 Level-0 table #5: started
2026/08/11-09:44:12.196537 1737fb000 Level-0 table #5: 3269 bytes OK
2026/08/11-09:44:12.196738 1737fb000 Delete type=0 #3
2026/08/11-09:44:12.196764 1737fb000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/11-09:43:09.979643 172267000 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/11-08:56:03.980151 16f77b000 Delete type=3 #1
2026/08/11-09:44:12.205237 172fef000 Recovering log #3
2026/08/11-09:44:12.205611 172fef000 Level-0 table #5: started
2026/08/11-09:44:12.205721 172fef000 Level-0 table #5: 4129 bytes OK
2026/08/11-09:44:12.205945 172fef000 Delete type=0 #3
2026/08/11-09:44:12.205992 172fef000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/11-09:43:10.009129 17327f000 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/11-08:56:03.949621 16f77b000 Delete type=3 #1
2026/08/11-09:44:12.197435 172fef000 Recovering log #3
2026/08/11-09:44:12.198040 172fef000 Level-0 table #5: started
2026/08/11-09:44:12.198321 172fef000 Level-0 table #5: 31614 bytes OK
2026/08/11-09:44:12.198514 172fef000 Delete type=0 #3
2026/08/11-09:44:12.198552 172fef000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/11-09:43:09.981180 17327f000 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/11-08:56:03.966944 16ef6f000 Delete type=3 #1
2026/08/11-09:44:12.184168 172fef000 Recovering log #3
2026/08/11-09:44:12.185997 172fef000 Level-0 table #5: started
2026/08/11-09:44:12.187435 172fef000 Level-0 table #5: 223489 bytes OK
2026/08/11-09:44:12.187693 172fef000 Delete type=0 #3
2026/08/11-09:44:12.187728 172fef000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/11-09:43:09.996017 172a73000 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/11-08:56:03.974409 16e763000 Delete type=3 #1
2026/08/11-09:44:12.193256 1737fb000 Recovering log #3
2026/08/11-09:44:12.193611 1737fb000 Level-0 table #5: started
2026/08/11-09:44:12.193707 1737fb000 Level-0 table #5: 3295 bytes OK
2026/08/11-09:44:12.193908 1737fb000 Delete type=0 #3
2026/08/11-09:44:12.193951 1737fb000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/11-09:43:10.003815 172267000 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/11-08:56:03.956900 16ff87000 Delete type=3 #1
2026/08/11-09:44:12.181257 172fef000 Recovering log #3
2026/08/11-09:44:12.182096 172fef000 Level-0 table #5: started
2026/08/11-09:44:12.182622 172fef000 Level-0 table #5: 58065 bytes OK
2026/08/11-09:44:12.182900 172fef000 Delete type=0 #3
2026/08/11-09:44:12.182935 172fef000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/11-09:43:09.987323 173a8b000 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/11-08:56:03.978547 16ff87000 Delete type=3 #1
2026/08/11-09:44:12.200848 172fef000 Recovering log #3
2026/08/11-09:44:12.201122 172fef000 Level-0 table #5: started
2026/08/11-09:44:12.201397 172fef000 Level-0 table #5: 30975 bytes OK
2026/08/11-09:44:12.201635 172fef000 Delete type=0 #3
2026/08/11-09:44:12.201675 172fef000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/11-09:43:10.007699 172267000 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/11-08:56:03.938794 16e763000 Delete type=3 #1
2026/08/11-09:44:12.190287 1737fb000 Recovering log #3
2026/08/11-09:44:12.190653 1737fb000 Level-0 table #5: started
2026/08/11-09:44:12.190822 1737fb000 Level-0 table #5: 7486 bytes OK
2026/08/11-09:44:12.191038 1737fb000 Delete type=0 #3
2026/08/11-09:44:12.191067 1737fb000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/11-09:43:09.973842 172a73000 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/11-08:56:03.972924 16ef6f000 Delete type=3 #1
2026/08/11-09:44:12.202502 171fd7000 Recovering log #3
2026/08/11-09:44:12.202661 171fd7000 Level-0 table #5: started
2026/08/11-09:44:12.202854 171fd7000 Level-0 table #5: 16892 bytes OK
2026/08/11-09:44:12.203092 171fd7000 Delete type=0 #3
2026/08/11-09:44:12.203146 171fd7000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/11-09:43:10.002176 173a8b000 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/11-08:56:03.971218 16e763000 Delete type=3 #1
2026/08/11-09:44:12.203885 1737fb000 Recovering log #3
2026/08/11-09:44:12.204195 1737fb000 Level-0 table #5: started
2026/08/11-09:44:12.204288 1737fb000 Level-0 table #5: 3739 bytes OK
2026/08/11-09:44:12.204494 1737fb000 Delete type=0 #3
2026/08/11-09:44:12.204520 1737fb000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/11-09:43:10.000153 172267000 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/11-08:56:03.942298 16ff87000 Delete type=3 #1
2026/08/11-09:44:12.191930 172fef000 Recovering log #3
2026/08/11-09:44:12.192079 172fef000 Level-0 table #5: started
2026/08/11-09:44:12.192222 172fef000 Level-0 table #5: 5770 bytes OK
2026/08/11-09:44:12.192448 172fef000 Delete type=0 #3
2026/08/11-09:44:12.192478 172fef000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/11-09:43:09.976561 172267000 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/11-08:56:03.951942 16e763000 Delete type=3 #1
2026/08/11-09:44:12.199441 1737fb000 Recovering log #3
2026/08/11-09:44:12.199690 1737fb000 Level-0 table #5: started
2026/08/11-09:44:12.199821 1737fb000 Level-0 table #5: 6939 bytes OK
2026/08/11-09:44:12.200021 1737fb000 Delete type=0 #3
2026/08/11-09:44:12.200051 1737fb000 Delete type=3 #2
+1
View File
@@ -0,0 +1 @@
2026/08/11-09:43:09.983507 172267000 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