diff --git a/src/server/MapBuilder.luau b/src/server/MapBuilder.luau index dae346e..cea849d 100644 --- a/src/server/MapBuilder.luau +++ b/src/server/MapBuilder.luau @@ -654,16 +654,28 @@ local function buildRoad(map: Folder) Material = Enum.Material.Concrete, }) cap.Parent = struct + local colH = capY - 1.6 local col = part({ Name = "PierColumn", - Size = Vector3.new(8, capY - 1.6, 8), - CFrame = CFrame.new(mid.X, (capY - 1.6) / 2, mid.Z), + -- Enum.PartType.Cylinder puts the circular faces on the + -- LOCAL X axis: Size.X is the length ALONG the axis and + -- Size.Y/Z are the diameter. + -- + -- BUG (found 2026-08-03 by measuring the built parts): + -- this passed Size = (8, colH, 8), i.e. 8 studs along the + -- axis by colH wide -- a disc, not a column. Measured on + -- all 80 instances: world vertical extent 8.0 studs for a + -- column that should stand 35.4, leaving each pier + -- floating with a 13.7-stud gap down to the ground. + -- The Z rotation below was already correct; only the Size + -- components were transposed. + Size = Vector3.new(colH, 8, 8), Color = C_CONCRETE, Material = Enum.Material.Concrete, Shape = Enum.PartType.Cylinder, }) -- Cylinder's axis is X, so stand it upright. - col.CFrame = CFrame.new(mid.X, (capY - 1.6) / 2, mid.Z) * CFrame.Angles(0, 0, math.rad(90)) + col.CFrame = CFrame.new(mid.X, colH / 2, mid.Z) * CFrame.Angles(0, 0, math.rad(90)) col.Parent = struct end -- Elevated viaduct: support pillars down to street level @@ -1469,14 +1481,34 @@ local function buildPA(map: Folder) -- Support pillar down to the apron under the raised part of the -- ramp, matching the reference photos' elevated structure. - local h = segMid.Y - (ringY - 1) + -- + -- Round, not square (corrected 2026-08-03 against the underside + -- footage in honmoku_jct_sheet3, which is actually shot beneath + -- Daikoku itself): every column carrying the ramp decks there is + -- a smooth cylindrical concrete pier. These were 6x6 boxes. + -- + -- The base has to be chosen per-pillar. The old code always cut + -- the column off at `ringY - 1` (Y=45, the underside of the PA + -- apron slab). That is right only while the ramp is still over + -- the slab. The measured helix climbs up to 1182 studs BEYOND + -- the slab edge, and out there nothing exists at Y=45 -- no + -- terrain, no baseplate -- so all 55 columns ended in mid-air. + -- Beyond the slab, run them to ground like the viaduct piers do. + local overApron = math.abs(segMid.X - c.X) <= APRON and math.abs(segMid.Z - c.Z) <= APRON + local baseY = overApron and (ringY - 1) or -1 + local h = segMid.Y - baseY if h > 10 and s % 2 == 0 then local pil = part({ Name = "PARampPillar", - Size = Vector3.new(6, h, 6), - CFrame = CFrame.new(segMid.X, segMid.Y - h / 2, segMid.Z), + -- Cylinder axis is local X, so Size.X is the height and + -- Size.Y/Z the diameter; the Z rotation stands it upright. + -- (Same transposition that had all 80 viaduct PierColumns + -- built as 8-stud discs -- see the PierColumn note above.) + Size = Vector3.new(h, 6, 6), + CFrame = CFrame.new(segMid.X, segMid.Y - h / 2, segMid.Z) * CFrame.Angles(0, 0, math.rad(90)), Color = C_CONCRETE, Material = Enum.Material.Concrete, + Shape = Enum.PartType.Cylinder, }) pil.Parent = pa end