Aux-lane suppression + PA geometry fixes; probe/verify tooling
CI / quality (push) Failing after 1m9s
CI / quality (push) Failing after 1m9s
MapBuilder.luau
- Suppress the aux lane across samples 525-550 (AUX_SUPPRESS_FROM/TO),
honoring the user's hand deletion in Studio so a rebuild no longer
regenerates it.
- Smoothstep the width ramp over AUX_BLEND=5 samples on each side. A hard
cut produced a 26-stud lateral fence jog; the blend removes it.
- DO NOT remove this suppression. Re-enabling it resurrects geometry the
user deleted by hand.
rokit.toml
- rojo 7.5.1 -> 7.7.0 to match the auto-updating Studio plugin.
Server older than plugin fails the handshake with
"attempt to index number with 'protocolVersion'".
tools/
- 34 read-only probe/verify/capture scripts used to measure the datamodel
instead of reasoning from source.
Verified-good baseline at this commit:
total parts 16788
PAWestSlip 60 segs, 34.4 deg total bend, worst 1.4, 0 kinks >5
PAEastSlip 60 segs, 30.7 deg total bend, worst 1.3, 0 kinks >5
AuxLane parts 30 (samples 525-550 deliberately absent)
barrier coverage 823 samples, 0 unguarded
fence jogs >10st 0
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
-- The user hand-edited ramps in Studio. Their work exists ONLY in the live
|
||||
-- workspace, not in MapBuilder source. Before touching anything, measure what
|
||||
-- is actually there now and how it differs from what source would generate.
|
||||
local out = {}
|
||||
local function say(s) table.insert(out, s) end
|
||||
|
||||
say("place: " .. tostring(game.Name))
|
||||
|
||||
local map = workspace:FindFirstChild("Map")
|
||||
if not map then return "workspace.Map MISSING" end
|
||||
|
||||
local parts = 0
|
||||
for _, d in ipairs(map:GetDescendants()) do
|
||||
if d:IsA("BasePart") then parts += 1 end
|
||||
end
|
||||
say(("Map parts=%d (source rebuild produced 16820)"):format(parts))
|
||||
|
||||
-- Slip deck geometry as it stands RIGHT NOW.
|
||||
local slip = {}
|
||||
for _, d in ipairs(map:GetDescendants()) do
|
||||
if d:IsA("BasePart") then
|
||||
for _, s in ipairs({ "PAWestSlip", "PAEastSlip" }) do
|
||||
local k = d.Name:match("^" .. s .. "_Deck_(%d+)$")
|
||||
if k then
|
||||
slip[s] = slip[s] or {}
|
||||
table.insert(slip[s], {
|
||||
i = tonumber(k), pos = d.Position, size = d.Size,
|
||||
cf = d.CFrame, inst = d,
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for _, s in ipairs({ "PAWestSlip", "PAEastSlip" }) do
|
||||
local g = slip[s]
|
||||
if not g or #g == 0 then
|
||||
say(s .. ": ABSENT")
|
||||
else
|
||||
table.sort(g, function(a, b) return a.i < b.i end)
|
||||
local topY, level = g[1].pos.Y, 0
|
||||
for _, seg in ipairs(g) do
|
||||
if math.abs(seg.pos.Y - topY) < 0.5 then level += 1 else break end
|
||||
end
|
||||
-- widths and gaps tell us if the user reshaped it
|
||||
local wmin, wmax = math.huge, -math.huge
|
||||
local maxGap, gapAt = 0, -1
|
||||
for j, seg in ipairs(g) do
|
||||
wmin = math.min(wmin, seg.size.X); wmax = math.max(wmax, seg.size.X)
|
||||
if j > 1 then
|
||||
local d2 = (seg.pos - g[j - 1].pos).Magnitude
|
||||
if d2 > maxGap then maxGap = d2; gapAt = seg.i end
|
||||
end
|
||||
end
|
||||
say(("%s: segs=%d idx[%d..%d] startY=%.1f endY=%.1f level=%d width=%.1f..%.1f maxGap=%.1f@%d"):format(
|
||||
s, #g, g[1].i, g[#g].i, topY, g[#g].pos.Y, level, wmin, wmax, maxGap, gapAt))
|
||||
end
|
||||
end
|
||||
|
||||
-- What barrier-ish parts exist, and on what? Name survey first so I know the
|
||||
-- real naming scheme before I go hunting for "missing" ones.
|
||||
local kinds = {}
|
||||
for _, d in ipairs(map:GetDescendants()) do
|
||||
if d:IsA("BasePart") then
|
||||
local n = d.Name:gsub("_%d+$", "_#")
|
||||
if n:lower():match("barrier") or n:lower():match("parapet") or n:lower():match("rail")
|
||||
or n:lower():match("wall") or n:lower():match("guard") or n:lower():match("kerb")
|
||||
or n:lower():match("curb") or n:lower():match("fence") then
|
||||
kinds[n] = (kinds[n] or 0) + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
local list = {}
|
||||
for k, v in pairs(kinds) do table.insert(list, ("%s=%d"):format(k, v)) end
|
||||
table.sort(list)
|
||||
say("BARRIER-LIKE PART NAMES: " .. (#list > 0 and table.concat(list, " ") or "NONE"))
|
||||
|
||||
return table.concat(out, "\n")
|
||||
Reference in New Issue
Block a user