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.
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
--[[
|
||||
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")
|
||||
Reference in New Issue
Block a user