-- Diagnose the raycast outlier: report WHICH parts the rays hit. -- The v3 raycast filtered on the whole map, so overhead geometry (overpass -- decks, girders, gantries, tunnel ceilings) can be hit before the road. local sss = game:GetService("ServerScriptService") local orig = sss:FindFirstChild("MapBuilder", true) local clone = orig:Clone() clone.Name = "MapBuilder_Diag" clone.Parent = orig.Parent local MB = require(clone) local map = MB.build() local Circuit = require(game:GetService("ReplicatedStorage"):FindFirstChild("Circuit", true)) local samples = Circuit.samples local n = #samples local rp = RaycastParams.new() rp.FilterType = Enum.RaycastFilterType.Include rp.FilterDescendantsInstances = { map } local out = {} -- Road-only params: what the driver actually touches. local roadOnly = RaycastParams.new() roadOnly.FilterType = Enum.RaycastFilterType.Include roadOnly.FilterDescendantsInstances = { map:FindFirstChild("Expressway") } local worstAll, worstRoad, atAll, atRoad = 0, 0, -1, -1 local hits = {} for i = 1, n do local j = (i % n) + 1 local p = samples[j].pos local fwd = (samples[(j % n) + 1].pos - samples[i].pos) fwd = Vector3.new(fwd.X, 0, fwd.Z) if fwd.Magnitude > 0.01 then fwd = fwd.Unit local o1 = p - fwd * 3 + Vector3.new(0, 40, 0) local o2 = p + fwd * 3 + Vector3.new(0, 40, 0) local a1 = workspace:Raycast(o1, Vector3.new(0, -120, 0), rp) local a2 = workspace:Raycast(o2, Vector3.new(0, -120, 0), rp) if a1 and a2 then local d = math.abs(a1.Position.Y - a2.Position.Y) if d > worstAll then worstAll, atAll = d, i end if d > 1 then hits[#hits + 1] = ("i=%d(%s) d=%.2f hitA=%s hitB=%s"):format( i, samples[i].piece, d, a1.Instance.Name, a2.Instance.Name) end end local b1 = workspace:Raycast(o1, Vector3.new(0, -120, 0), roadOnly) local b2 = workspace:Raycast(o2, Vector3.new(0, -120, 0), roadOnly) if b1 and b2 then local d = math.abs(b1.Position.Y - b2.Position.Y) if d > worstRoad then worstRoad, atRoad = d, i end end end end out[#out + 1] = ("ALL-GEOMETRY worst=%.3f at i=%d"):format(worstAll, atAll) out[#out + 1] = ("ROAD-ONLY worst=%.3f at i=%d -> %s"):format( worstRoad, atRoad, worstRoad <= 0.60 and "PASS" or "FAIL") out[#out + 1] = ("outlier samples (d>1), first 12 of %d:"):format(#hits) for k = 1, math.min(12, #hits) do out[#out + 1] = " " .. hits[k] end map:Destroy() clone:Destroy() return table.concat(out, "\n")