Fix support columns: cylinder axis transposition + floating ramp piers
Two structural bugs found by measuring built parts, not by eye.
1. PierColumn (pre-existing, all 80 instances). Enum.PartType.Cylinder
puts the circular faces on the local X axis, so Size.X is the length
ALONG the axis and Size.Y/Z are the diameter. The code passed
Size = (8, colH, 8) and then rotated 90deg about Z -- building a disc
8 studs long and colH wide. Measured: world vertical extent 8.0 studs
for a column that should stand 35.4, leaving every viaduct pier
floating with a 13.7-stud gap down to the ground. Only the Size
components were transposed; the rotation was already right.
After: extent 35.4, base Y=0.0.
2. PARampPillar. Two problems.
a) Built as 6x6 square blocks. The underside footage (honmoku_jct
sheet3 -- mislabeled, it is actually shot beneath Daikoku itself)
shows every column carrying the ramp decks is a smooth cylindrical
concrete pier. Now Cylinder, same axis convention as PierColumn.
b) Height was always segMid.Y - (ringY - 1), cutting the column off
at Y=45, the underside of the PA apron slab. Correct only while
the ramp is over the slab; the measured helix climbs up to 1182
studs beyond the slab edge, where nothing exists at Y=45. Base is
now chosen per-pillar: apron level over the slab, ground (Y=-1)
beyond it, matching the established viaduct Pillar convention.
After: all bases at Y=-1, 0 pancakes, min height/width ratio 1.7.
Ramp geometry, chevron alignment and gore zebra all unchanged:
0 misaligned panels (worst 0.06/0.08 studs), 832 gore bars, merge
mouths 24.0/23.8 studs from the nearest bar.
This commit is contained in:
@@ -654,16 +654,28 @@ local function buildRoad(map: Folder)
|
|||||||
Material = Enum.Material.Concrete,
|
Material = Enum.Material.Concrete,
|
||||||
})
|
})
|
||||||
cap.Parent = struct
|
cap.Parent = struct
|
||||||
|
local colH = capY - 1.6
|
||||||
local col = part({
|
local col = part({
|
||||||
Name = "PierColumn",
|
Name = "PierColumn",
|
||||||
Size = Vector3.new(8, capY - 1.6, 8),
|
-- Enum.PartType.Cylinder puts the circular faces on the
|
||||||
CFrame = CFrame.new(mid.X, (capY - 1.6) / 2, mid.Z),
|
-- 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,
|
Color = C_CONCRETE,
|
||||||
Material = Enum.Material.Concrete,
|
Material = Enum.Material.Concrete,
|
||||||
Shape = Enum.PartType.Cylinder,
|
Shape = Enum.PartType.Cylinder,
|
||||||
})
|
})
|
||||||
-- Cylinder's axis is X, so stand it upright.
|
-- 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
|
col.Parent = struct
|
||||||
end
|
end
|
||||||
-- Elevated viaduct: support pillars down to street level
|
-- 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
|
-- Support pillar down to the apron under the raised part of the
|
||||||
-- ramp, matching the reference photos' elevated structure.
|
-- 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
|
if h > 10 and s % 2 == 0 then
|
||||||
local pil = part({
|
local pil = part({
|
||||||
Name = "PARampPillar",
|
Name = "PARampPillar",
|
||||||
Size = Vector3.new(6, h, 6),
|
-- Cylinder axis is local X, so Size.X is the height and
|
||||||
CFrame = CFrame.new(segMid.X, segMid.Y - h / 2, segMid.Z),
|
-- 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,
|
Color = C_CONCRETE,
|
||||||
Material = Enum.Material.Concrete,
|
Material = Enum.Material.Concrete,
|
||||||
|
Shape = Enum.PartType.Cylinder,
|
||||||
})
|
})
|
||||||
pil.Parent = pa
|
pil.Parent = pa
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user