Map: divided expressway with median, edge parapets+railings, Daikoku Futo PA ring road

Reworked the mainline and Daikoku Futo PA against real references (Wikimedia
aerials of Daikoku JCT + OSM way data for the junction) rather than guesswork.

- Divided carriageways: raised median kerb with dark anti-glare fence down the
  centre, matching OSM (lanes=2, oneway=yes per carriageway).
- Edge containment: white concrete parapet topped by a dark metal railing --
  the signature Shutoko silhouette -- backed by a kill wall so cars cannot
  leave the deck.
- Palette corrected from dark grey to Shutoko pale concrete; asphalt lightened
  to mid-grey to read correctly in daylight.
- Daikoku Futo PA: replaced the single straight stub ramp with a full loop road
  encircling the parking apron (real loop ramps measured at 48m and 121m
  radius), elevated on pillars, reachable from BOTH carriageways via on/off
  ramps. Median and barriers open at those junctions so the ramps connect.
- Removed the old four-sided perimeter box; the apron now extends under the
  ring, so there is no exposed edge to fall off.

Verified by executing MapBuilder headlessly under a stubbed Roblox API:
build ok, 823 road segs, 797 median segs (26 junction gaps), 1594 barriers +
1594 railings + 1594 kill walls, 72 ring segs at constant 389.6 radius,
apron covering the ring, all decks continuous at Y=46.
This commit is contained in:
2026-07-31 19:46:53 -04:00
parent 0c5ecd2487
commit 37a83e0e8f
4 changed files with 270 additions and 105 deletions
+1 -5
View File
@@ -163,11 +163,7 @@ function ChassisController.init()
-- destroyed on respawn, so it MUST be nil-checked before it
-- is indexed -- that crash is what killed this loop before.
local stale = heartbeatConn ~= nil
and (
drivingSeat ~= seatPart
or seatPart == nil
or not seatPart:IsDescendantOf(workspace)
)
and (drivingSeat ~= seatPart or seatPart == nil or not seatPart:IsDescendantOf(workspace))
if seated and (not heartbeatConn or stale) then
stopDriving()
startDriving(seatPart :: VehicleSeat)