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

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,51 @@ 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, and (**D213**) Canyon B, Canyon C, Lake A, Oasis A,
Oasis C, Mountain, Train Tunnel Link, Abandoned Cabins. **All twenty-two were read from a rig**: the
Carbon rig regenerated at world 6000, seed 981448696 (2026-09-29), whose map has 144 markers under 51
labels, including every one on the list. Mining Outpost is the `warehouse` prefab and Ranch is
`stables_a`. The game spells one label two ways, "Jungle ruin" on that map and "Jungle Ruin" on the
3000 map, which the lower-case key absorbs. *Large* Fishing Village is a separate label and stays on.
A 6000 world needs more than 8 GB: the rig was killed at 8 GB after "Initialized … occlusion
sub-chunks", ran at 8.5 GB once up, and now has a 12 GB limit.
- **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:** 7 server (`map.test.js`, one of them the rig map's 51 real labels) and 8 client (`mapMarkers.test.js`, the page's pure half) — 462 and
66 in all.
- **Walked 2026-09-29** on the local walk core against the Carbon rig's 6000 map. Signed in as a test admin: the
fleet list read 51 labels, 22 hidden. Carbon read 51/22 and the Oxide rig's 3000 map 33/11. Ticking Substation
on the fleet dropped both server counts by one before saving. Carbon was then set to Hidden and the page saved.
The rows were `map.marker.substation` = `on` (fleet) and `off` (rust-carbon), with one activity row naming both.
The public answer then gave Oxide 55 markers (its 31 substations back) and Carbon 31 (none). Undoing both
through the page deleted both rows, logged as `default` and `inherit`. The public map tab on Carbon drew
its 31 monuments over the Rust+ picture with no console errors (144 before the filter). The walk found one
cosmetic flaw, now fixed: the fleet list printed the game's lower-case "jungle swamp". It now prefers a
capitalised spelling. The page remounts after a save, which collapses the open lists, as it does for the rest of the page.
---
## 5. Chat titles: twenty-three conditions (§4.6; D172–D175)
@@ -824,6 +870,12 @@ The §3 build raised two more, answered on 2026-09-29:
| **D211** | **The bridge reads ZoneManager's flag list** through its API call `ZoneFieldListRaw()` and sends it in hello. A server without the zone helper still offers every flag. | Keeping the read in the zone helper, with a name/radius/minutes-only mode without it. | 3.4 |
| **D212** | **A zone's dome defaults to ZoneDomes' Standard type, the full shaded dome.** The coloured types show only where they meet the ground or a building, and the step says so. | A coloured default. | 3.4 |
The §4 build raised one more, answered on 2026-09-29:
| # | Decision | Rejected | § |
|---|---|---|---|
| **D213** | **Eight labels the 6000 map showed also start hidden:** Canyon B, Canyon C, Lake A, Oasis A, Oasis C, Mountain (terrain, not places to loot), Train Tunnel Link (like Train Tunnel), and Abandoned Cabins (the third swamp, like Wild Swamp). | Leaving them drawn under "every other label is on"; hiding the terrain and tunnel but drawing the cabins for their loot. | 4.1 |
## 11. First-class optional plugins (D199–D202)
The org lead named four plugins the module supports as first-class integrations. Kits already is one. The other