Rename: Tokyo Wangan Racing (was Fast & Furious: Tokyo Expressway)
- Title in README + GDD, UI/log prefixes FnF -> Wangan - Rojo project name -> TokyoWanganRacing - Fix undefined `H` in CarManager seat CFrame (selene error) -> Chassis.BODY_SIZE.Y
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Fast & Furious: Tokyo Expressway — MVP (drive-only)
|
||||
# Tokyo Wangan Racing — MVP (drive-only)
|
||||
|
||||
A Roblox game where you cruise a neon Tokyo expressway at night in cool cars —
|
||||
starting with a real 1993 Mazda RX-7. **This MVP is deliberately tiny: just
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "fnf-sim",
|
||||
"name": "TokyoWanganRacing",
|
||||
"tree": {
|
||||
"$className": "DataModel",
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"Lighting": {
|
||||
"$className": "Lighting",
|
||||
"$properties": {
|
||||
"Technology": "Future",
|
||||
"ClockTime": 0.0,
|
||||
"Brightness": 1.0,
|
||||
"Ambient": [0.05, 0.05, 0.1],
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
# Game Design Document — Fast & Furious: Tokyo Expressway (MVP)
|
||||
# Game Design Document — Tokyo Wangan Racing (MVP)
|
||||
|
||||
## Vision
|
||||
A neon Tokyo expressway you can cruise at night in cool cars — starting with a
|
||||
|
||||
@@ -53,7 +53,7 @@ local function corner(inst: Instance, radius: number)
|
||||
end
|
||||
|
||||
local screen = make("ScreenGui", {
|
||||
Name = "FnF_UI",
|
||||
Name = "Wangan_UI",
|
||||
ResetOnSpawn = false,
|
||||
ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
|
||||
}, playerGui)
|
||||
@@ -296,4 +296,4 @@ respawnBtn.MouseButton1Click:Connect(function()
|
||||
showToast("Respawning your car...")
|
||||
end)
|
||||
|
||||
print("[FnF] Client UI ready (drive-only MVP).")
|
||||
print("[Wangan] Client UI ready (drive-only MVP).")
|
||||
|
||||
@@ -224,14 +224,14 @@ end
|
||||
|
||||
local function buildGreenhouse(folder: Folder, body: BasePart, paint: Color3, glass: Color3, style: Style)
|
||||
local origin = body.CFrame
|
||||
local roofY = H / 2 + 1.5
|
||||
local roofY = H / 2 + 1.9 -- tall enough that a seated avatar fits under it
|
||||
local roofLen = L * 0.26
|
||||
|
||||
-- Windshield: raked wedge (slope toward front)
|
||||
vis({
|
||||
Name = "Windshield",
|
||||
Size = Vector3.new(W - 1.0, 1.3, 1.9),
|
||||
CFrame = origin * CFrame.new(0, H / 2 + 0.85 + 0.5, -L * 0.09) * CFrame.Angles(0, math.pi, 0),
|
||||
Size = Vector3.new(W - 1.0, 1.7, 2.1),
|
||||
CFrame = origin * CFrame.new(0, H / 2 + 1.05 + 0.5, -L * 0.09) * CFrame.Angles(0, math.pi, 0),
|
||||
Color = glass,
|
||||
Material = Enum.Material.Glass,
|
||||
Transparency = 0.25,
|
||||
@@ -262,8 +262,8 @@ local function buildGreenhouse(folder: Folder, body: BasePart, paint: Color3, gl
|
||||
local rearGlassLen = if style.TailKind == "hatch" then 2.4 else 1.7
|
||||
vis({
|
||||
Name = "RearGlass",
|
||||
Size = Vector3.new(W - 1.2, 1.3, rearGlassLen),
|
||||
CFrame = origin * CFrame.new(0, H / 2 + 0.85 + 0.5, L * 0.235),
|
||||
Size = Vector3.new(W - 1.2, 1.7, rearGlassLen),
|
||||
CFrame = origin * CFrame.new(0, H / 2 + 1.05 + 0.5, L * 0.235),
|
||||
Color = glass,
|
||||
Material = Enum.Material.Glass,
|
||||
Transparency = 0.25,
|
||||
|
||||
@@ -223,7 +223,10 @@ local function buildCarModel(car: Car, tuning: Tuning): Model
|
||||
seat.HeadsUpDisplay = false
|
||||
seat.CanCollide = false
|
||||
seat.Color = Color3.new(0.1, 0.1, 0.1)
|
||||
seat.CFrame = origin * CFrame.new(0, 1.2, -0.5)
|
||||
-- Seat pan just above the body slab (top = H/2): low enough to look tucked
|
||||
-- in the cabin, high enough that the avatar's legs never interpenetrate
|
||||
-- the slab (which causes physics launches).
|
||||
seat.CFrame = origin * CFrame.new(0, Chassis.BODY_SIZE.Y / 2 + 0.3, 0.2)
|
||||
seat.Parent = model
|
||||
local seatWeld = Instance.new("WeldConstraint")
|
||||
seatWeld.Part0 = body
|
||||
|
||||
@@ -64,7 +64,7 @@ local function onPlayerAdded(player: Player)
|
||||
|
||||
if profile == nil then
|
||||
-- Another server holds the lock, or player left mid-load. Kick to be safe.
|
||||
player:Kick("[FnF] Your data could not be loaded. Please rejoin.")
|
||||
player:Kick("[Wangan] Your data could not be loaded. Please rejoin.")
|
||||
return
|
||||
end
|
||||
|
||||
@@ -85,7 +85,7 @@ local function onPlayerAdded(player: Player)
|
||||
-- The session was lost (another server stole it, or we released it).
|
||||
profiles[player] = nil
|
||||
if player.Parent == Players then
|
||||
player:Kick("[FnF] Your session ended (data loaded elsewhere). Please rejoin.")
|
||||
player:Kick("[Wangan] Your session ended (data loaded elsewhere). Please rejoin.")
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
@@ -347,13 +347,15 @@ local function buildDaikoku(map: Folder)
|
||||
end
|
||||
|
||||
-- Spawn pad (cars appear here — Daikoku is the meet) -----------------------
|
||||
-- Subtle painted zone, NOT neon: the cars are the stars of the meet, the
|
||||
-- floor must never outshine them.
|
||||
local spawn = part({
|
||||
Name = "SpawnPad",
|
||||
Size = Vector3.new(120, 1, 60),
|
||||
CFrame = CFrame.new(0, 1.2, z0 + 130),
|
||||
Color = Color3.fromRGB(20, 220, 120),
|
||||
Material = Enum.Material.Neon,
|
||||
Transparency = 0.4,
|
||||
Color = Color3.fromRGB(45, 60, 55),
|
||||
Material = Enum.Material.Asphalt,
|
||||
Transparency = 0,
|
||||
})
|
||||
spawn.Parent = folder
|
||||
|
||||
|
||||
@@ -87,4 +87,4 @@ rEquipCar.OnServerInvoke = function(player, carId)
|
||||
return true
|
||||
end
|
||||
|
||||
print("[FnF] Server booted (drive-only MVP): map built, car system online.")
|
||||
print("[Wangan] Server booted (drive-only MVP): map built, car system online.")
|
||||
|
||||
Reference in New Issue
Block a user