The monument's block draws as a paved square #132

Owner

Tracker: #3611

Step 5 of plan #3558. The monument's 8 capture cells stay closed to structures, as the shared site rule already has them (row 11). They now draw as a paved square around the monument in every finish, so the ground shows the tiles a structure cannot take.

  • Boomtown: each of the 8 cells holds a paved piece (SQUARE, a whole-tile stone slab in monuments.ts, keyed SQUARE_KEY in models.ts). The city layer places them with the monument, through its batch, once the monument's tile is explored. In every finish the piece is a plain box, like the plot slab: 12 triangles a cell, no ink. Its top lies below a street piece's own paving, so a street laid on those cells covers it. Like a street, it picks no tile, so a tap on it is a tap on the ground.
  • Classic: the Kenney layer merges the same 8 pieces into the monument tower's mesh. That adds no draw call and no program. A ray that hits the square's faces picks no plot.
  • Cities Yard: the Monuments section gains three cells, the paved square of a roundabout, a plaza and a corner, each under the streets a grown city lays on it.
  • Help and changelog: the help's Cities section says the monument stands on a paved square, and the Build line and the Building section name it. The changelog gains a Current bullet, and the "Build inside cities" bullet names the paved square instead of the 3×3 block.

No saved structure changes, so MAP_VERSION stays.

Tests

  • src/client/render/boomtown/layer.test.ts: for a roundabout, a plaza and a corner city grown 70 steps (8, 0 and 6 of their block cells carry streets), no cell holds the paved piece before the monument's tile is explored. Afterwards each of the 8 cells holds it at its centre. A ray down onto a cell meets the street first where one is laid, and the square elsewhere, and it picks no tile.
  • src/client/render/city-layers.test.ts: the same three cities in Classic. Before the monument's tile is explored, no monument mesh is drawn. Afterwards the monument's mesh tops exactly the 8 cells with the piece. The rays meet the street or the square as above, a tap on a cell picks no tile, and a tap on the monument still picks the monument.
  • Mutations: skipping the Boomtown placements, raising the piece above the street paving, dropping Classic's square parts, and dropping Classic's face rule in pick each fail the matching test.

Draw checks (Map Yard WebKit bench, iPhone 15 landscape, 5 sessions × 7 interleaved runs per arm, head 7e9509b against base bcae85a; Δ is the median of the sessions' median deltas, and the phone estimate is 7.5 × Δ)

view at rest, Toybox at rest, Classic (finish=0) doom=battle vs &spare doom=nuke vs &spare
1× +0.013 ms (phone +0.10), 67 = 67 calls, +480 triangles +0.000 ms, 71 = 71 calls, +192 triangles +0.073 ms (phone +0.55) +0.073 ms (phone +0.55)
0.5× +0.033 ms (phone +0.25), 65 = 65 calls, +1,248 triangles +0.000 ms, 92 = 92 calls, +768 triangles +0.080 ms (phone +0.60) +0.060 ms (phone +0.45)
0.25× +0.057 ms (phone +0.42), 41 = 41 calls, +2,208 triangles +0.003 ms (phone +0.03), 131 = 131 calls, +2,208 triangles +0.110 ms (phone +0.82) +0.103 ms (phone +0.77)

The peaks are the head's doom arms against its own &spare arms, as the standing method has it. The square never changes during a doom scene, because the monument never falls. The Map Yard phone test's peaks add no shader program, and in Playwright WebKit renders every finish at 1× and 0.5× draws the same calls and programs as the base.

Tracker: [#3611](https://sak.swipelab.com/tasks/3611) Step 5 of plan #3558. The monument's 8 capture cells stay closed to structures, as the shared site rule already has them (row 11). They now draw as a paved square around the monument in every finish, so the ground shows the tiles a structure cannot take. - **Boomtown:** each of the 8 cells holds a paved piece (`SQUARE`, a whole-tile stone slab in monuments.ts, keyed `SQUARE_KEY` in models.ts). The city layer places them with the monument, through its batch, once the monument's tile is explored. In every finish the piece is a plain box, like the plot slab: 12 triangles a cell, no ink. Its top lies below a street piece's own paving, so a street laid on those cells covers it. Like a street, it picks no tile, so a tap on it is a tap on the ground. - **Classic:** the Kenney layer merges the same 8 pieces into the monument tower's mesh. That adds no draw call and no program. A ray that hits the square's faces picks no plot. - **Cities Yard:** the Monuments section gains three cells, the paved square of a roundabout, a plaza and a corner, each under the streets a grown city lays on it. - **Help and changelog:** the help's Cities section says the monument stands on a paved square, and the Build line and the Building section name it. The changelog gains a Current bullet, and the "Build inside cities" bullet names the paved square instead of the 3×3 block. No saved structure changes, so MAP_VERSION stays. **Tests** - src/client/render/boomtown/layer.test.ts: for a roundabout, a plaza and a corner city grown 70 steps (8, 0 and 6 of their block cells carry streets), no cell holds the paved piece before the monument's tile is explored. Afterwards each of the 8 cells holds it at its centre. A ray down onto a cell meets the street first where one is laid, and the square elsewhere, and it picks no tile. - src/client/render/city-layers.test.ts: the same three cities in Classic. Before the monument's tile is explored, no monument mesh is drawn. Afterwards the monument's mesh tops exactly the 8 cells with the piece. The rays meet the street or the square as above, a tap on a cell picks no tile, and a tap on the monument still picks the monument. - Mutations: skipping the Boomtown placements, raising the piece above the street paving, dropping Classic's square parts, and dropping Classic's face rule in `pick` each fail the matching test. **Draw checks** (Map Yard WebKit bench, iPhone 15 landscape, 5 sessions × 7 interleaved runs per arm, head 7e9509b against base bcae85a; Δ is the median of the sessions' median deltas, and the phone estimate is 7.5 × Δ) | view | at rest, Toybox | at rest, Classic (`finish=0`) | `doom=battle` vs `&spare` | `doom=nuke` vs `&spare` | |---|---|---|---|---| | 1× | +0.013 ms (phone +0.10), 67 = 67 calls, +480 triangles | +0.000 ms, 71 = 71 calls, +192 triangles | +0.073 ms (phone +0.55) | +0.073 ms (phone +0.55) | | 0.5× | +0.033 ms (phone +0.25), 65 = 65 calls, +1,248 triangles | +0.000 ms, 92 = 92 calls, +768 triangles | +0.080 ms (phone +0.60) | +0.060 ms (phone +0.45) | | 0.25× | +0.057 ms (phone +0.42), 41 = 41 calls, +2,208 triangles | +0.003 ms (phone +0.03), 131 = 131 calls, +2,208 triangles | +0.110 ms (phone +0.82) | +0.103 ms (phone +0.77) | The peaks are the head's doom arms against its own `&spare` arms, as the standing method has it. The square never changes during a doom scene, because the monument never falls. The Map Yard phone test's peaks add no shader program, and in Playwright WebKit renders every finish at 1× and 0.5× draws the same calls and programs as the base.
agra merged commit 4c87e97ce3 into task/3558-build-inside-the-city-and-a-flat-map 2026-10-22 13:52:44 +03:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
agra/mini-alert!132
No description provided.