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 —
|
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
|
starting with a real 1993 Mazda RX-7. **This MVP is deliberately tiny: just
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "fnf-sim",
|
"name": "TokyoWanganRacing",
|
||||||
"tree": {
|
"tree": {
|
||||||
"$className": "DataModel",
|
"$className": "DataModel",
|
||||||
|
|
||||||
@@ -41,6 +41,7 @@
|
|||||||
"Lighting": {
|
"Lighting": {
|
||||||
"$className": "Lighting",
|
"$className": "Lighting",
|
||||||
"$properties": {
|
"$properties": {
|
||||||
|
"Technology": "Future",
|
||||||
"ClockTime": 0.0,
|
"ClockTime": 0.0,
|
||||||
"Brightness": 1.0,
|
"Brightness": 1.0,
|
||||||
"Ambient": [0.05, 0.05, 0.1],
|
"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
|
## Vision
|
||||||
A neon Tokyo expressway you can cruise at night in cool cars — starting with a
|
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
|
end
|
||||||
|
|
||||||
local screen = make("ScreenGui", {
|
local screen = make("ScreenGui", {
|
||||||
Name = "FnF_UI",
|
Name = "Wangan_UI",
|
||||||
ResetOnSpawn = false,
|
ResetOnSpawn = false,
|
||||||
ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
|
ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
|
||||||
}, playerGui)
|
}, playerGui)
|
||||||
@@ -296,4 +296,4 @@ respawnBtn.MouseButton1Click:Connect(function()
|
|||||||
showToast("Respawning your car...")
|
showToast("Respawning your car...")
|
||||||
end)
|
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 function buildGreenhouse(folder: Folder, body: BasePart, paint: Color3, glass: Color3, style: Style)
|
||||||
local origin = body.CFrame
|
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
|
local roofLen = L * 0.26
|
||||||
|
|
||||||
-- Windshield: raked wedge (slope toward front)
|
-- Windshield: raked wedge (slope toward front)
|
||||||
vis({
|
vis({
|
||||||
Name = "Windshield",
|
Name = "Windshield",
|
||||||
Size = Vector3.new(W - 1.0, 1.3, 1.9),
|
Size = Vector3.new(W - 1.0, 1.7, 2.1),
|
||||||
CFrame = origin * CFrame.new(0, H / 2 + 0.85 + 0.5, -L * 0.09) * CFrame.Angles(0, math.pi, 0),
|
CFrame = origin * CFrame.new(0, H / 2 + 1.05 + 0.5, -L * 0.09) * CFrame.Angles(0, math.pi, 0),
|
||||||
Color = glass,
|
Color = glass,
|
||||||
Material = Enum.Material.Glass,
|
Material = Enum.Material.Glass,
|
||||||
Transparency = 0.25,
|
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
|
local rearGlassLen = if style.TailKind == "hatch" then 2.4 else 1.7
|
||||||
vis({
|
vis({
|
||||||
Name = "RearGlass",
|
Name = "RearGlass",
|
||||||
Size = Vector3.new(W - 1.2, 1.3, rearGlassLen),
|
Size = Vector3.new(W - 1.2, 1.7, rearGlassLen),
|
||||||
CFrame = origin * CFrame.new(0, H / 2 + 0.85 + 0.5, L * 0.235),
|
CFrame = origin * CFrame.new(0, H / 2 + 1.05 + 0.5, L * 0.235),
|
||||||
Color = glass,
|
Color = glass,
|
||||||
Material = Enum.Material.Glass,
|
Material = Enum.Material.Glass,
|
||||||
Transparency = 0.25,
|
Transparency = 0.25,
|
||||||
|
|||||||
@@ -223,7 +223,10 @@ local function buildCarModel(car: Car, tuning: Tuning): Model
|
|||||||
seat.HeadsUpDisplay = false
|
seat.HeadsUpDisplay = false
|
||||||
seat.CanCollide = false
|
seat.CanCollide = false
|
||||||
seat.Color = Color3.new(0.1, 0.1, 0.1)
|
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
|
seat.Parent = model
|
||||||
local seatWeld = Instance.new("WeldConstraint")
|
local seatWeld = Instance.new("WeldConstraint")
|
||||||
seatWeld.Part0 = body
|
seatWeld.Part0 = body
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ local function onPlayerAdded(player: Player)
|
|||||||
|
|
||||||
if profile == nil then
|
if profile == nil then
|
||||||
-- Another server holds the lock, or player left mid-load. Kick to be safe.
|
-- 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
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ local function onPlayerAdded(player: Player)
|
|||||||
-- The session was lost (another server stole it, or we released it).
|
-- The session was lost (another server stole it, or we released it).
|
||||||
profiles[player] = nil
|
profiles[player] = nil
|
||||||
if player.Parent == Players then
|
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
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|||||||
@@ -347,13 +347,15 @@ local function buildDaikoku(map: Folder)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Spawn pad (cars appear here — Daikoku is the meet) -----------------------
|
-- 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({
|
local spawn = part({
|
||||||
Name = "SpawnPad",
|
Name = "SpawnPad",
|
||||||
Size = Vector3.new(120, 1, 60),
|
Size = Vector3.new(120, 1, 60),
|
||||||
CFrame = CFrame.new(0, 1.2, z0 + 130),
|
CFrame = CFrame.new(0, 1.2, z0 + 130),
|
||||||
Color = Color3.fromRGB(20, 220, 120),
|
Color = Color3.fromRGB(45, 60, 55),
|
||||||
Material = Enum.Material.Neon,
|
Material = Enum.Material.Asphalt,
|
||||||
Transparency = 0.4,
|
Transparency = 0,
|
||||||
})
|
})
|
||||||
spawn.Parent = folder
|
spawn.Parent = folder
|
||||||
|
|
||||||
|
|||||||
@@ -87,4 +87,4 @@ rEquipCar.OnServerInvoke = function(player, carId)
|
|||||||
return true
|
return true
|
||||||
end
|
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