Four fidelity fixes, all verified in a live Studio datamodel (not just built):
1. Wire up the dead `bridge` flag. Circuit.luau marks 474 samples as bridge
spans but nothing ever read the field, so every elevated metre rendered as
the same slab on square columns. Flagged spans now get a steel box girder
(鋼箱桁橋) with stiffener ribs under the deck, carried on a transverse pier
cap and round columns at a wider pitch than the viaduct pillars.
2. Ginza 跨道橋. The Ginza section sits below street level in the filled-in
楓川・築地川 river beds and the surviving city bridges cross over it, their
piers landing in the median. Adds the crossing decks, parapets and centre
piers -- which is the physical reason lane changes are banned there, not
just a paint choice.
3. Junction speed plates. 江戸橋JCT内 / 浜崎橋JCT内 / 京橋JCT-旧白魚橋乗継所 are
posted 40 km/h, not the 50 km/h mainline limit; plates repeat more often
through the short restricted stretches.
4. Shiodome JCT -> Hamazakibashi JCT widened to 3+3 lanes via widthAt(), with
a taper (max ~1.7 studs/sample) instead of a step. Every fixed-width
consumer -- deck, median, parapets, lane marks, signage offsets, skyline
setback, finish line -- now reads widthAt() so nothing floats or clips.
Verified headlessly (tools/verify_c1_fixes*.luau):
girders 488 / 474 flagged samples, pier caps 85, columns 80
Ginza overpasses 7, piers 7, lateral offset from centreline 0.000 studs
speed plates 40km/h x7, 50km/h x8
deck width Shiodome 81.5 vs Kasumigaseki 60.0
seam lip max 0.0006, road-surface raycast step max 0.260, 0 deck holes
Two earlier "failures" were bad tests, not bad geometry, and the fixed
harnesses document the traps: deck parts are pitched by CFrame.lookAt so
Position.Y+Size.Y/2 is not the surface height (and LookVector is -Z, so the
end faces are easy to swap), and a seam raycast must filter to the Expressway
folder or it hits TunnelCeiling/MedianFence and reports a phantom 19-stud step.
Road markings now follow the 全標協 (Japan Road Marking Association) 2012/2018
standard rather than eyeballed values:
- Lane dividers: 8 m painted / 12 m gap on a continuous 20 m cycle carried
across segment boundaries (previously each segment restarted its own dash
phase, so the rhythm broke at every joint).
- Line widths corrected to 0.15 m lane / 0.20 m edge. The 0.45 m width often
quoted for expressways applies only to the boundary against a 変速車線
(accel/decel lane) -- now used at ramps only, where it belongs.
- Yellow SOLID no-lane-change lines through tunnels and tight curves, per the
standard's rule that the boundary goes solid where overtaking is undesirable.
- 導流帯 gore zebra at ramp junctions: 45 cm bars at 1.0 m pitch.
Signage:
- Guide-sign green corrected to the official #005D35; route badges #007F1F.
- Bilingual Japanese + romaji layout (JP above, romaji below).
- Added 規制標識 speed limit plates posted at 50 km/h -- the C1 Inner Circular
limit. (80 km/h is the Bayshore Route; the two are not the same.)
- Added キロポスト distance markers every 0.5 km.
Lighting/furniture:
- Tunnel lighting changed from blue/teal neon to warm sodium + cool LED runs,
and made continuous rather than every-other-segment.
- Deck lamps on a ~34 m pitch; added reflective delineator posts.
Verified in-engine by headless measurement, not by inspection: 14/14 geometric
assertions pass (dash length/width, edge width, yellow count, zebra pitch,
light colour, sign colour/bilingual, speed+km posts, markings flush with deck).
Sources and the corrections to widely-repeated wrong figures are recorded in
docs/japanese-road-standards.md.