Files
jesse c8dabea53a Daikoku PA: lift mainline over the apron, rebuild both ramps
The PA ring road and the expressway mainline were both at ground level, so
the ring parapet stood INSIDE the carriageway (measured -10.0 studs of
vertical overlap: a wall in the middle of the road).

Reference photos of the real Daikoku Futo PA show the expressway flying
OVER the parking apron on pillars, with the PA at ground level and ramps
climbing up to meet it. Rebuilt to match:

- mainline lifted 38 studs through the junction, eased in/out (max 5.26%
  grade, within real expressway limits)
- PA ring + apron stay at ground level; legacy PARingPillar props removed
- both on/off ramps regraded over the full rise with smoothstep easing,
  segments overlapped 3 studs so wheels can't catch a seam, plus support
  pillars and edge kerbs where the deck is high

Verified in-engine against built parts (tools/diag_daikoku.luau), not just
source: clearance now +28.0 studs, both ramps continuous (max step 5.62,
no gaps). tools/plot_daikoku.py renders the plan/section for comparison.
2026-08-02 15:56:13 -04:00

140 lines
4.4 KiB
Luau

--[[
diag_whatami.luau -- answer three questions the user's report raises, with
no assumptions:
Q1. Is the module in THIS DataModel the source I edited on disk?
(compare length + marker strings; disk file is 41650 bytes and
contains SHELL_YAW_OVERRIDE and bestVol)
Q2. Is the require() cache still pinned to pre-push code?
(_buildForDiag present in source but nil after require == pinned,
meaning NO fix can be in effect yet this session)
Q3. Are the cars the user is looking at STALE STAGED PROPS?
workspace.ShellReview was populated by tools/shot_shells.luau in an
earlier run. Those models are a frozen snapshot -- they are inert
Instances, not live rebuilds, so they will look identical forever
regardless of what CarManager says. Report whether ShellReview
exists, what is in it, and how each car is oriented RIGHT NOW so we
can tell "stale props" from "fix genuinely not working".
For Q3 the facing is read from the staged model directly: compare the mean
Z of the F* wheel groups against the R* groups in the model's own frame.
Front should sit at NEGATIVE Z (chassis convention: front axle built at
Z = -WHEELBASE/2). If front is at +Z the car is backwards.
]]
local ServerScriptService = game:GetService("ServerScriptService")
local out = {}
local function log(...)
local parts = {}
for i = 1, select("#", ...) do
parts[#parts + 1] = tostring((select(i, ...)))
end
table.insert(out, table.concat(parts, " "))
end
-- ------------------------------------------------------------------ Q1 + Q2
log("=== Q1: is the live module my edited source? ===")
local mods = {}
for _, d in ipairs(ServerScriptService:GetDescendants()) do
if d:IsA("ModuleScript") and d.Name == "CarManager" then
mods[#mods + 1] = d
end
end
log(string.format(" instances: %d", #mods))
for _, m in ipairs(mods) do
local src = ""
pcall(function()
src = m.Source
end)
log(
string.format(
" %s len=%d (disk 41650) SHELL_YAW_OVERRIDE=%s bestVol=%s",
m:GetFullName(),
#src,
tostring(src:find("SHELL_YAW_OVERRIDE", 1, true) ~= nil),
tostring(src:find("bestVol", 1, true) ~= nil)
)
)
end
log("")
log("=== Q2: is require() still pinned to old code? ===")
if #mods == 1 then
local ok, mod = pcall(require, mods[1])
if ok and typeof(mod) == "table" then
local fresh = typeof(mod._buildForDiag) == "function"
log(" _buildForDiag after require: " .. typeof(mod._buildForDiag))
log(
fresh and " => NEW code is live; fixes CAN take effect"
or " => STILL PINNED to pre-push code; NO fix can be in effect yet"
)
end
end
-- ---------------------------------------------------------------------- Q3
log("")
log("=== Q3: what is actually sitting in workspace.ShellReview? ===")
local review = workspace:FindFirstChild("ShellReview")
if not review then
log(" ShellReview does NOT exist -- user must be looking at something else")
log(" (spawned cars in-game, or the templates in ReplicatedStorage)")
else
log(" ShellReview EXISTS with " .. #review:GetChildren() .. " children.")
log(" These are FROZEN PROPS from an earlier shot_shells.luau run.")
log(" They do not rebuild themselves -- code fixes cannot change them.")
log("")
log(string.format(" %-14s %10s %10s %s", "model", "frontZ", "rearZ", "verdict"))
for _, m in ipairs(review:GetChildren()) do
if m:IsA("Model") then
local shell = m:FindFirstChild("Shell")
local wg = shell and shell:FindFirstChild("Wheels")
if not wg then
local f = m:FindFirstChild("Wheels", true)
wg = f
end
if wg then
local pivot = m:GetPivot()
local inv = pivot:Inverse()
local fS, fN, rS, rN = 0, 0, 0, 0
for _, w in ipairs(wg:GetChildren()) do
local sum, n = Vector3.zero, 0
if w:IsA("BasePart") then
sum, n = w.Position, 1
end
for _, d in ipairs(w:GetDescendants()) do
if d:IsA("BasePart") then
sum, n = sum + d.Position, n + 1
end
end
if n > 0 then
local z = (inv * (sum / n)).Z
local head = w.Name:sub(1, 1):upper()
if head == "F" then
fS, fN = fS + z, fN + 1
elseif head == "R" then
rS, rN = rS + z, rN + 1
end
end
end
if fN > 0 and rN > 0 then
local fz, rz = fS / fN, rS / rN
log(
string.format(
" %-14s %10.3f %10.3f %s",
m.Name,
fz,
rz,
fz < rz and "front at -Z OK" or "front at +Z BACKWARDS"
)
)
end
end
end
end
end
return table.concat(out, "\n")