Three iterations of the Daikoku PA ramps never read as a real
interchange. Measured why, rather than tuning further:
* the entry and exit decks INTERSECTED -- 2547 sample pairs within
30 studs horizontally at <12 studs dY, worst case 0.5 studs apart
at dY=0.0. On screen that is the bowtie tangle of white rails.
* both real Daikoku ramps turn the SAME way (clockwise; the guide
video says "right, right"). This build mirrored them into each
other.
* the real arc wraps OUTSIDE the lot and forms its north/east
boundary. This build cut across the apron interior.
Gated behind BUILD_PA_RAMPS=false rather than deleted -- the radius
was already correct (470 studs vs an OSM-measured mean of 469) and
the merge lands tangent at 0.1-0.2 deg divergence. Both worth keeping.
Also removed two leftovers that would have outlived the ramps:
* rampOpen punched holes in the mainline's outer parapet, railing
and kill wall for ramps that no longer exist -- a barrier gap with
a drop behind it. Sealed via RAMP_EDGE_OPENINGS=false. Verified:
Barrier/EdgeRail/KillWall = 1646 each = 823 samples x 2 edges,
0 road samples without a guard within 90 studs.
* gore zebra hatching painted 1024 bars + 64 boundary lines marking
a junction that is not there. Sealed via RAMP_GORE_MARKINGS=false.
Verified after a cache-busting fresh rebuild (Studio's require() cache
otherwise serves the previous map and reports a false pass):
parts 22628 -> 15988
all ramp part classes = 0
Road = 823 (unchanged), spawn pad + PASpawn intact
clip probe TRUSTWORTHY (control +11/-0), CLIPPING=0
Research and rebuild spec kept for when this is revisited:
reference/ramps/BUILD_SPEC.md, INDEX.md (10 CC-licensed Commons
photos), docs/daikoku-reference-spec.md (OSM circle fits).
Rework the PA junction to match the reference drawing: yellow = PA -> highway
(entry), red = highway -> PA (exit). Entry and exit swap sides (entry now
EAST, exit WEST) and both trunks hug the PA perimeter instead of running
concentric spirals.
The simplification: both carriageways sit at the same deck level, adjacent,
so the median opening IS the far-side access path. The under-deck crossing
and merge runs are deleted outright -- 8 runs collapse to 4, and the
girder-soffit ceiling logic that constrained the crossing goes with them.
Part count 24,210 -> 21,691.
The median opening is now load-bearing rather than cosmetic (it is the only
route from the far carriageway to the ramps), so it widens from 6 to 9
samples per junction.
Orientation is a single flip-able constant (ORIENT) so a mirrored result is
a one-line correction, not a rewrite.
Measured on the built map (not asserted):
- 600 entry + 600 exit ramp parts
- max grade 8.00% / 8.27%, under the 9% limit
- 0 collisions with piers/masts/girders (558 structural parts)
- segment continuity <= 2.5 studs; trunk->merge handoff <= 1.7 studs
- merge lands at dY 0.0 (exact deck level), 33 studs lateral
- median open at junctions: 0 parts vs. control ~7 on plain mainline
Two traps worth recording, both caught by controls:
1. Studio's require() cache silently rebuilt STALE code. The first "passing"
build reported 17,575 parts and zero ramps, and the map contained
PAOffRamp/PAOnRamp parts whose names exist nowhere in the current source.
Every measurement taken before this was describing an old map. Added
tools/rebuild_fresh.luau, which clones the module to bust the cache; use
it rather than requiring MapBuilder directly.
2. A reported "median never opens" bug was a bad probe, not a defect. It
counted `Barrier` (the outer edge parapet, which must NEVER open) instead
of `Median_<i>`. Re-run against the right name: control 7, junctions 0.
Both were only visible because the probes carry controls -- a 0-hit result
with no control is vacuous. The verification harnesses are kept in tools/
with their controls built in.