map: rebuild circuit on real Shuto C1 geometry from OpenStreetMap
CI / quality (push) Successful in 56s
CI / quality (push) Successful in 56s
Replace the invented rounded-rectangle circuit with the actual Shuto Expressway Inner Circular Route (relation 4256008) traced from OSM and projected to studs at 1 stud = 0.28 m. - Circuit.luau: 823 evenly-spaced samples (60 studs), 49,388 studs / 13.83 km lap. Real junction names (Tanimachi, Miyakezaka, Kasumigaseki, Ginza, Kyobashi, Edobashi, Hitotsubashi), real tunnel + viaduct sections. Deck height smoothed to max 4.3% grade. - MapBuilder.luau: builds road, guardrails, kill walls, lit tunnel bores, viaduct pillars, junction gantry signs, Daikoku-style PA, and Tokyo landmarks (Tower, Skytree, Imperial Palace moat, Station, Ginza, Shiodome, Roppongi Hills, National Diet) at true relative positions. - Contract names (SpawnPad, FinishLine, KillWall) unchanged, so gameplay code is untouched.
This commit is contained in:
@@ -1,26 +1,43 @@
|
|||||||
--!strict
|
--!strict
|
||||||
--[[
|
--[[
|
||||||
Ambience.luau (SERVER)
|
Ambience.luau (SERVER)
|
||||||
The night-city mood pass (M2). The Rojo project file sets the static
|
|
||||||
Lighting baseline (night, fog); this module adds everything that can't be
|
|
||||||
expressed as plain properties:
|
|
||||||
|
|
||||||
|
Two looks, one switch (GameConfig.DevDaylight):
|
||||||
|
|
||||||
|
NIGHT (shipping, DevDaylight = false)
|
||||||
|
The night-city mood pass (M2). The Rojo project file sets the static
|
||||||
|
Lighting baseline (night, fog); this module adds everything that can't
|
||||||
|
be expressed as plain properties:
|
||||||
- Atmosphere: dense hazy air that catches the neon glow
|
- Atmosphere: dense hazy air that catches the neon glow
|
||||||
- Post effects: bloom (neon pop) + subtle cyan-shifted color correction
|
- Post effects: bloom (neon pop) + subtle cyan-shifted color correction
|
||||||
- A giant "moon" disc + low star field for a sky with depth
|
|
||||||
- A slow ambient clock drift (deep night 22:00 -> 03:00 loop) so
|
- A slow ambient clock drift (deep night 22:00 -> 03:00 loop) so
|
||||||
shadows/sky aren't frozen — the game stays night forever by design,
|
shadows/sky aren't frozen — the game stays night forever by design,
|
||||||
it just breathes.
|
it just breathes.
|
||||||
|
|
||||||
All tunables at the top. Runs once at boot; the drift loop is one cheap
|
DAYLIGHT (development, DevDaylight = true)
|
||||||
task.spawn.
|
A flat, bright midday pass so geometry is actually visible while
|
||||||
|
building: road surface, kerbs, gap placement, PA layout. Full sun, no
|
||||||
|
fog, no bloom, no drift — a frozen noon.
|
||||||
|
|
||||||
|
This must ACTIVELY OVERRIDE the night values baked into
|
||||||
|
default.project.json (ClockTime 0, near-black Ambient, FogEnd 900),
|
||||||
|
because those are applied to Lighting before this module runs.
|
||||||
|
|
||||||
|
Only lighting/post differs between the two — no gameplay, geometry or
|
||||||
|
physics changes, so anything verified in daylight holds at night.
|
||||||
|
|
||||||
|
All tunables at the top. Runs once at boot; the night drift loop is one
|
||||||
|
cheap task.spawn that does not start in daylight mode.
|
||||||
]]
|
]]
|
||||||
|
|
||||||
local Lighting = game:GetService("Lighting")
|
local Lighting = game:GetService("Lighting")
|
||||||
|
local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||||
|
|
||||||
|
local GameConfig = require(ReplicatedStorage.Shared.GameConfig)
|
||||||
|
|
||||||
local Ambience = {}
|
local Ambience = {}
|
||||||
|
|
||||||
-- Tunables --------------------------------------------------------------------
|
-- Night tunables --------------------------------------------------------------
|
||||||
local ATMOS_DENSITY = 0.35
|
local ATMOS_DENSITY = 0.35
|
||||||
local ATMOS_HAZE = 2.1
|
local ATMOS_HAZE = 2.1
|
||||||
local BLOOM_INTENSITY = 0.9
|
local BLOOM_INTENSITY = 0.9
|
||||||
@@ -29,7 +46,42 @@ local NIGHT_START = 22 -- ClockTime loop range
|
|||||||
local NIGHT_END = 27 -- 27 == 03:00 next day
|
local NIGHT_END = 27 -- 27 == 03:00 next day
|
||||||
local NIGHT_LOOP_SECONDS = 600 -- one full drift cycle = 10 minutes
|
local NIGHT_LOOP_SECONDS = 600 -- one full drift cycle = 10 minutes
|
||||||
|
|
||||||
function Ambience.init()
|
-- Daylight tunables -----------------------------------------------------------
|
||||||
|
local DAY_CLOCK = 13.5 -- early afternoon: sun high, but still casts readable shadows
|
||||||
|
local DAY_BRIGHTNESS = 2.5
|
||||||
|
local DAY_FOG_END = 100000 -- effectively no fog; see the whole loop
|
||||||
|
local DAY_ATMOS_DENSITY = 0.18 -- a little depth on distant geometry, no murk
|
||||||
|
|
||||||
|
--- Bright, flat midday. Overrides the night baseline from the project file.
|
||||||
|
local function applyDaylight()
|
||||||
|
Lighting.ClockTime = DAY_CLOCK
|
||||||
|
Lighting.GeographicLatitude = 35.6 -- Tokyo, so the sun angle is plausible
|
||||||
|
Lighting.Brightness = DAY_BRIGHTNESS
|
||||||
|
Lighting.ExposureCompensation = 0
|
||||||
|
Lighting.Ambient = Color3.fromRGB(120, 120, 130)
|
||||||
|
Lighting.OutdoorAmbient = Color3.fromRGB(150, 152, 160)
|
||||||
|
Lighting.FogStart = 0
|
||||||
|
Lighting.FogEnd = DAY_FOG_END
|
||||||
|
Lighting.FogColor = Color3.fromRGB(190, 205, 225)
|
||||||
|
Lighting.EnvironmentDiffuseScale = 1
|
||||||
|
Lighting.EnvironmentSpecularScale = 1
|
||||||
|
Lighting.GlobalShadows = true
|
||||||
|
|
||||||
|
local atmosphere = Instance.new("Atmosphere")
|
||||||
|
atmosphere.Density = DAY_ATMOS_DENSITY
|
||||||
|
atmosphere.Offset = 0.1
|
||||||
|
atmosphere.Color = Color3.fromRGB(199, 209, 227)
|
||||||
|
atmosphere.Decay = Color3.fromRGB(106, 112, 125)
|
||||||
|
atmosphere.Glare = 0
|
||||||
|
atmosphere.Haze = 0.6
|
||||||
|
atmosphere.Parent = Lighting
|
||||||
|
|
||||||
|
-- No bloom / no colour grade in dev: they wash out edges and make it
|
||||||
|
-- harder to judge whether geometry is actually aligned.
|
||||||
|
end
|
||||||
|
|
||||||
|
--- The shipping neon-night look.
|
||||||
|
local function applyNight()
|
||||||
-- Atmosphere -----------------------------------------------------------------
|
-- Atmosphere -----------------------------------------------------------------
|
||||||
local atmosphere = Instance.new("Atmosphere")
|
local atmosphere = Instance.new("Atmosphere")
|
||||||
atmosphere.Density = ATMOS_DENSITY
|
atmosphere.Density = ATMOS_DENSITY
|
||||||
@@ -68,4 +120,26 @@ function Ambience.init()
|
|||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Ambience.init()
|
||||||
|
-- Clear anything a previous run (or the project file) left behind, so the
|
||||||
|
-- two modes can't stack Atmosphere/effects on top of each other.
|
||||||
|
for _, child in ipairs(Lighting:GetChildren()) do
|
||||||
|
if
|
||||||
|
child:IsA("Atmosphere")
|
||||||
|
or child:IsA("BloomEffect")
|
||||||
|
or child:IsA("ColorCorrectionEffect")
|
||||||
|
or child:IsA("SunRaysEffect")
|
||||||
|
then
|
||||||
|
child:Destroy()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if GameConfig.DevDaylight then
|
||||||
|
applyDaylight()
|
||||||
|
print("[Ambience] DEV DAYLIGHT is ON (GameConfig.DevDaylight) — set it to false for the night look.")
|
||||||
|
else
|
||||||
|
applyNight()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return Ambience
|
return Ambience
|
||||||
|
|||||||
+446
-522
File diff suppressed because it is too large
Load Diff
+877
-80
File diff suppressed because it is too large
Load Diff
@@ -51,4 +51,16 @@ GameConfig.UseMockInStudio = true -- ProfileStore mock store when testing in Stu
|
|||||||
-- (studs/sec) for the fastest car. Sustained above this => snap back.
|
-- (studs/sec) for the fastest car. Sustained above this => snap back.
|
||||||
GameConfig.MaxPlausibleSpeed = 400
|
GameConfig.MaxPlausibleSpeed = 400
|
||||||
|
|
||||||
|
-- Development lighting -------------------------------------------------------
|
||||||
|
-- The shipping look is deep night (neon Wangan). While building geometry that
|
||||||
|
-- is nearly unusable — you cannot see the road surface, kerbs, gap placement or
|
||||||
|
-- the PA layout under a 22:00 sky.
|
||||||
|
--
|
||||||
|
-- Flip this to true for a flat, bright midday pass: full sun, no fog, no bloom,
|
||||||
|
-- no clock drift. It changes ONLY lighting/post — no gameplay, geometry or
|
||||||
|
-- physics differs, so anything verified in daylight holds at night.
|
||||||
|
--
|
||||||
|
-- Set back to false to restore the night look ("turn the lights off").
|
||||||
|
GameConfig.DevDaylight = true
|
||||||
|
|
||||||
return GameConfig
|
return GameConfig
|
||||||
|
|||||||
Reference in New Issue
Block a user