docs(rust): the map's monument labels as built and walked — PLAN_REDESIGNS 4.1, D213 #297

Merged
whitlocktech merged 3 commits from docs/rust-map-markers into main 2026-09-30 00:17:07 +00:00
Showing only changes of commit 637a11326e - Show all commits

View File

@@ -5,7 +5,8 @@ On 2026-09-28 the org lead added the first-class optional plugins (§11, D199–
It is step 3 of [`PLAN_FIXES.md`](PLAN_FIXES.md) §6: the six changes the org lead decided during the first
player walk, each "planned in detail before code". The org lead asked for all six in one plan (2026-09-27), so
they can be read together. **Built so far:** §1, walked 2026-09-28 (§1.9); §5, built 2026-09-28 with its
rig walk still to come (§5.8, D209).
rig walk still to come (§5.8, D209); §3, built and walked on the rigs and the site 2026-09-29, its in-game
rows still to come (§3.4); §4, built 2026-09-29 (§4.1).
This is a companion to [`PLAN_FIXES.md`](PLAN_FIXES.md) and [`PLAN.md`](PLAN.md). Where they disagree, this
document is later and wins. Its decisions continue PLAN_FIXES' numbering at **D188**.
@@ -558,6 +559,39 @@ so the site refuses it until protocol 13 ships:
- **Not chosen:** the game's own `MonumentType` (§0.7), sent by the plugin. It is authoritative, but it is a
wire change, and nothing yet shows that substations are a type of their own.
### 4.1 As built (2026-09-29; Module-Rust only, no wire change)
- **Storage.** One row per label, `on` or `off`: the fleet's in `rust_settings` as `map.marker.<key>`, a
server's in `rust_map_overrides` under the same setting name. No schema change. The key is the label
trimmed, single-spaced and lower case, because the game is not consistent: the rig's map says
`jungle swamp` for `ue_jungle_swamp_a`. Both columns are `VARCHAR(64)`, so a label longer than 53
characters cannot carry a switch and the write says so. A stored word that is neither `on` nor `off`
follows the default above it. Unlike a layer audience, this does not narrow, because a label switch is
clutter control and not a security boundary. The world layer's audience still decides whether a viewer
gets monuments at all.
- **Precedence.** A server's switch wins over the fleet's, and the fleet's over the built-in list, label by
label. Setting the fleet back to what the built-in list says deletes the row instead of storing a copy,
so a later change to the list reaches that label.
- **The built-in list** (`MINOR_LABELS`, off by default): Substation, Underground Cave, Train Tunnel, Water
Well, Wild Swamp, Jungle Swamp, Ice Lake, Jungle Ruin, Fishing Village, Large Barn, Abandoned
Supermarket, **Oxum's Gas Station, Mining Outpost, Ranch**. The first eleven are spelled as the rigs'
map (world 3000, seed 1234) labels them. The last three are not on that map, and their spellings are
Rust's display names, **not read from a rig**. If one is wrong, that monument is drawn. That is the side
the rule fails on, and the admin can still hide it by hand. *Large* Fishing Village is a separate label
and stays on.
- **Where it is applied.** `GET /public/rust/servers/:id/map` leaves out every monument whose label is
hidden on that server. The website and the Android app read the same answer, so both lose the markers
with no client change. `map.access()` carries the merged switches. Event steps that name a monument
(`world.monuments`) are untouched: an event can still be placed at a substation that the map hides.
- **Admin → Rust visibility, the live map card.** Under the fleet layer switches, **Monuments on the map**
is a collapsed list with a checkbox for each label found on any server's current map plus the built-in
list (a minor label no map has yet is still listed, so it can be decided before a wipe brings it). Each
server row has its own collapsed **Monuments** list of the labels on its current map, each set to
*Default (drawn/hidden)*, *Drawn* or *Hidden*. The page's one `PUT` carries `map.fleet.markers` and
`map.servers.<id>.markers`, each `{ key: true | false | null }`. `null` clears the switch.
- **Tests:** 6 server (`map.test.js`) and 7 client (`mapMarkers.test.js`, the page's pure half) — 461 and
65 in all.
---
## 5. Chat titles: twenty-three conditions (§4.6; D172–D175)