-- Rebuild with AUX_SUPPRESS widened to 525..550, then verify BOTH marked -- defects are gone: -- (A) left oval -> zero samples with no left barrier -- (B) right circle -> no 26-stud lateral snap at the suppression boundary -- The 6.3-stud steps at 512/513/563 are the aux lane's own smooth taper -- (width 26 -> 19 -> 13 -> 7 -> 0) and are CORRECT; the parapet rides the -- taper. Only steps much larger than that are real juts. local SS = game:GetService("ServerScriptService") local out = {} local function say(s) table.insert(out, s) end local mod = SS:FindFirstChild("MapBuilder", true) if not mod then return "MapBuilder NOT FOUND" end local fresh = mod:Clone() fresh.Name = "MB_fresh_" .. tostring(math.random(1e6)) fresh.Parent = SS local ok, MB = pcall(require, fresh) if not ok then fresh:Destroy() return "require FAILED: " .. tostring(MB) end local ok2, err = pcall(function() MB.build() end) fresh:Destroy() if not ok2 then return "build ERROR: " .. tostring(err) end say("build OK") local map = workspace:FindFirstChild("Map") local parts = 0 for _, d in ipairs(map:GetDescendants()) do if d:IsA("BasePart") then parts += 1 end end say(("parts=%d"):format(parts)) local UP = Vector3.new(0, 1, 0) local deck, aux, bars = {}, {}, {} for _, d in ipairs(map:GetDescendants()) do if d:IsA("BasePart") then local k = d.Name:match("^Road_(%d+)$") or d.Name:match("^Deck_(%d+)$") if k then deck[tonumber(k)] = d end local a = d.Name:match("^AuxLane_(%d+)$") if a then aux[tonumber(a)] = d end if d.Name == "Barrier" then table.insert(bars, d) end end end say("sample | auxW | left barrier lat | step") local prevLat, jogs, gaps = nil, {}, {} for i = 505, 570 do local d = deck[i] if d then local right = d.CFrame.LookVector:Cross(UP).Unit local c = d.Position local best, bestLat = math.huge, nil for _, b in ipairs(bars) do if math.abs(b.Position.Y - c.Y) < 14 then local rel = b.Position - c local along = math.abs(rel:Dot(d.CFrame.LookVector)) local lat = rel:Dot(right) if along < 22 and lat < 0 and along < best then best = along; bestLat = lat end end end local auxW = aux[i] and aux[i].Size.X or 0 if bestLat then local step = prevLat and math.abs(math.abs(bestLat) - math.abs(prevLat)) or 0 if step > 10 then table.insert(jogs, ("%d(%.1f)"):format(i, step)) end if step > 10 or i % 5 == 0 then say((" %d | aux=%.0f | lat=%.1f | step=%.1f%s"):format( i, auxW, bestLat, step, step > 10 and " <<< JOG" or "")) end prevLat = bestLat else table.insert(gaps, i) say((" %d | aux=%.0f | NO LEFT BARRIER <<< GAP"):format(i, auxW)) prevLat = nil end end end say(("BIG JOGS (>10): %d %s"):format(#jogs, #jogs > 0 and table.concat(jogs, " ") or "(none)")) say(("GAPS: %d %s"):format(#gaps, #gaps > 0 and table.concat(gaps, ",") or "(none)")) -- full-loop unguarded sweep, same rule as before local function flat(v) return Vector3.new(v.X, 0, v.Z) end local allBars = {} for _, d in ipairs(map:GetDescendants()) do if d:IsA("BasePart") and (d.Name == "Barrier" or d.Name == "EdgeRail") then table.insert(allBars, d) end end local slipParts = {} for _, d in ipairs(map:GetDescendants()) do if d:IsA("BasePart") and d.Name:match("Slip") then table.insert(slipParts, d) end end local holes, swept = {}, 0 for i, d in pairs(deck) do swept += 1 local right = d.CFrame.LookVector:Cross(UP).Unit for _, sgn in ipairs({ -1, 1 }) do local edge = d.Position + right * sgn * (d.Size.X / 2 + 2) local bd = math.huge for _, b in ipairs(allBars) do if math.abs(b.Position.Y - edge.Y) < 14 then local dd = (flat(b.Position) - flat(edge)).Magnitude if dd < bd then bd = dd end end end if bd >= 12 then local ok2b = false local a = aux[i] if a then local outer = a.Position + right * sgn * (a.Size.X / 2 + 2) local bd2 = math.huge for _, b in ipairs(allBars) do if math.abs(b.Position.Y - outer.Y) < 14 then local dd = (flat(b.Position) - flat(outer)).Magnitude if dd < bd2 then bd2 = dd end end end if bd2 < 14 then ok2b = true end end if not ok2b then local sd = math.huge for _, p in ipairs(slipParts) do local dd = (flat(p.Position) - flat(edge)).Magnitude if dd < sd then sd = dd end end if sd > 30 then table.insert(holes, i .. (sgn < 0 and "L" or "R")) end end end end end say(("FULL SWEEP: %d samples, unguarded=%d %s"):format(swept, #holes, #holes > 0 and table.concat(holes, ",") or "(none)")) local auxN = 0 for _ in pairs(aux) do auxN += 1 end say(("AuxLane total=%d (want 30)"):format(auxN)) return table.concat(out, "\n")