<roblox version="4">
  <Item class="ServerScriptService" referent="0">
    <Properties>
      <string name="Name">ServerScriptService</string>
    </Properties>
    <Item class="Script" referent="1">
      <Properties>
        <string name="Name">PortfolioPolish</string>
        <token name="RunContext">0</token>
        <string name="Source"><![CDATA[local Players = game:GetService("Players")
local Lighting = game:GetService("Lighting")

local PROJECTS = {
	AetherDuel = {title = "AETHER DUEL", accent = Color3.fromRGB(67, 167, 255)},
	SkylineSprint = {title = "SKYLINE SPRINT", accent = Color3.fromRGB(45, 200, 255)},
	BomblineGrid = {title = "BOMBLINE GRID", accent = Color3.fromRGB(255, 193, 70)},
	SignalSiege = {title = "SIGNAL SIEGE", accent = Color3.fromRGB(55, 190, 255)},
	BuildAndSaveWorld = {title = "BUILD & SAVE", accent = Color3.fromRGB(255, 208, 84)},
	RailRushWorld = {title = "RAIL RUSH", accent = Color3.fromRGB(104, 205, 255)},
	FreightyardArena = {title = "TEAM SHOTGUN", accent = Color3.fromRGB(255, 133, 73)},
	CrystalFoundry = {title = "CRYSTAL FOUNDRY", accent = Color3.fromRGB(151, 103, 255)},
}

local function findProject()
	for name, config in pairs(PROJECTS) do
		local world = workspace:FindFirstChild(name)
		if world then return world, name, config end
	end
	for _ = 1, 100 do
		task.wait(0.1)
		for name, config in pairs(PROJECTS) do
			local world = workspace:FindFirstChild(name)
			if world then return world, name, config end
		end
	end
end

local world, projectName, config = findProject()
if not world then return end
workspace:SetAttribute("PortfolioProject", projectName)
workspace:SetAttribute("PortfolioTitle", config.title)
workspace:SetAttribute("PortfolioAccent", config.accent)

local polish = Instance.new("Folder")
polish.Name = "PresentationPolish"
polish.Parent = world

local function makePart(name, size, cframe, color, material, parent)
	local part = Instance.new("Part")
	part.Name = name
	part.Size = size
	part.CFrame = cframe
	part.Color = color
	part.Material = material or Enum.Material.SmoothPlastic
	part.Anchored = true
	part.TopSurface = Enum.SurfaceType.Smooth
	part.BottomSurface = Enum.SurfaceType.Smooth
	part.Parent = parent or polish
	return part
end

local function billboard(position, text, accent)
	local anchor = makePart("Landmark", Vector3.new(1, 1, 1), CFrame.new(position), accent, Enum.Material.Neon)
	anchor.Transparency = 1
	anchor.CanCollide = false
	local gui = Instance.new("BillboardGui")
	gui.Size = UDim2.fromOffset(420, 90)
	gui.AlwaysOnTop = false
	gui.MaxDistance = 260
	gui.Parent = anchor
	local label = Instance.new("TextLabel")
	label.Size = UDim2.fromScale(1, 1)
	label.BackgroundTransparency = 1
	label.Text = text
	label.TextColor3 = Color3.new(1, 1, 1)
	label.TextStrokeTransparency = 0.25
	label.Font = Enum.Font.GothamBlack
	label.TextScaled = true
	label.Parent = gui
end

local function barrier(size, position)
	local wall = makePart("SafetyBarrier", size, CFrame.new(position), Color3.new(1, 1, 1), Enum.Material.SmoothPlastic)
	wall.Transparency = 1
	wall.CanCollide = true
	wall.CanQuery = false
end

local function lamp(position, accent)
	makePart("LampPost", Vector3.new(1, 12, 1), CFrame.new(position + Vector3.new(0, 6, 0)), Color3.fromRGB(47, 53, 63), Enum.Material.Metal)
	local head = makePart("LampHead", Vector3.new(3, 1, 3), CFrame.new(position + Vector3.new(0, 12, 0)), accent, Enum.Material.Neon)
	head.CanCollide = false
	local light = Instance.new("PointLight")
	light.Color = accent
	light.Range = 24
	light.Brightness = 1.2
	light.Parent = head
end

local dressers = {}

dressers.AetherDuel = function()
	billboard(Vector3.new(0, 35, -49), "AETHER DUEL", config.accent)
	for _, position in ipairs({Vector3.new(-38, 2, 0), Vector3.new(38, 2, 0), Vector3.new(0, 2, -38), Vector3.new(0, 2, 38)}) do lamp(position, config.accent) end
	barrier(Vector3.new(116, 18, 2), Vector3.new(0, 8, -56)); barrier(Vector3.new(116, 18, 2), Vector3.new(0, 8, 56))
	barrier(Vector3.new(2, 18, 116), Vector3.new(-56, 8, 0)); barrier(Vector3.new(2, 18, 116), Vector3.new(56, 8, 0))
end

dressers.SkylineSprint = function()
	billboard(Vector3.new(0, 34, -150), "SKYLINE SPRINT", config.accent)
	for _, position in ipairs({Vector3.new(-185, 2, -168), Vector3.new(-90, 2, -168), Vector3.new(0, 2, -168), Vector3.new(90, 2, -168), Vector3.new(185, 2, -168)}) do lamp(position, config.accent) end
end

dressers.BomblineGrid = function()
	billboard(Vector3.new(0, 29, -82), "BOMBLINE GRID", config.accent)
	barrier(Vector3.new(170, 12, 2), Vector3.new(0, 5, -83)); barrier(Vector3.new(170, 12, 2), Vector3.new(0, 5, 83))
	barrier(Vector3.new(2, 12, 170), Vector3.new(-83, 5, 0)); barrier(Vector3.new(2, 12, 170), Vector3.new(83, 5, 0))
end

dressers.SignalSiege = function()
	billboard(Vector3.new(155, 39, 18), "PROTECT THE SIGNAL", config.accent)
	for _, position in ipairs({Vector3.new(-170, 1, -140), Vector3.new(-80, 1, 35), Vector3.new(45, 1, 55), Vector3.new(145, 1, 100)}) do lamp(position, config.accent) end
end

dressers.BuildAndSaveWorld = function()
	billboard(Vector3.new(0, 25, 36), "YOUR WORKSHOP", config.accent)
	for _, position in ipairs({Vector3.new(-43, 0, -43), Vector3.new(43, 0, -43), Vector3.new(-43, 0, 43), Vector3.new(43, 0, 43)}) do lamp(position, config.accent) end
end

dressers.RailRushWorld = function()
	billboard(Vector3.new(0, 53, 4), "RAIL RUSH", config.accent)
	for _, position in ipairs({Vector3.new(-18, 32, 8), Vector3.new(18, 32, 8), Vector3.new(-18, 30, -10), Vector3.new(18, 30, -10)}) do lamp(position, config.accent) end
end

dressers.FreightyardArena = function()
	billboard(Vector3.new(0, 29, -61), "FREIGHTYARD SHOWDOWN", config.accent)
	for _, position in ipairs({Vector3.new(-70, 0, -50), Vector3.new(-25, 0, 50), Vector3.new(25, 0, -50), Vector3.new(70, 0, 50)}) do lamp(position, config.accent) end
end

dressers.CrystalFoundry = function()
	billboard(Vector3.new(0, 28, 73), "CRYSTAL FOUNDRY", config.accent)
	for _, position in ipairs({Vector3.new(-32, 0, 35), Vector3.new(32, 0, 35), Vector3.new(-32, 0, 70), Vector3.new(32, 0, 70)}) do lamp(position, config.accent) end
end

if dressers[projectName] then dressers[projectName]() end

local colorCorrection = Instance.new("ColorCorrectionEffect")
colorCorrection.Name = "PortfolioColor"
colorCorrection.Brightness = 0.02
colorCorrection.Contrast = 0.08
colorCorrection.Saturation = 0.06
colorCorrection.Parent = Lighting

local function dressCharacter(character)
	local torso = character:WaitForChild("UpperTorso", 3) or character:WaitForChild("Torso", 3)
	if not torso or character:FindFirstChild("PortfolioArmor") then return end
	local folder = Instance.new("Folder")
	folder.Name = "PortfolioArmor"
	folder.Parent = character
	for _, offset in ipairs({-1, 1}) do
		local plate = Instance.new("Part")
		plate.Name = "ShoulderPlate"
		plate.Size = Vector3.new(1.5, 0.55, 1.8)
		plate.Color = config.accent
		plate.Material = Enum.Material.Metal
		plate.CanCollide = false
		plate.Massless = true
		plate.CFrame = torso.CFrame * CFrame.new(offset * 1.55, 0.75, 0)
		plate.Parent = folder
		local weld = Instance.new("WeldConstraint")
		weld.Part0 = torso
		weld.Part1 = plate
		weld.Parent = plate
	end
end

local function stabilizeCharacter(character)
	local humanoid = character:WaitForChild("Humanoid", 8)
	local root = character:WaitForChild("HumanoidRootPart", 8)
	if not humanoid or not root then return end

	-- Every portfolio map is generated by a server script. On a cold Studio play,
	-- Roblox can create the avatar before that map''s SpawnLocation is ready.
	local spawnLocation = world:FindFirstChildWhichIsA("SpawnLocation", true)
	if spawnLocation then
		root.AssemblyLinearVelocity = Vector3.zero
		root.AssemblyAngularVelocity = Vector3.zero
		root.CFrame = spawnLocation.CFrame * CFrame.new(0, 4, 0)
	end

	local forceField = Instance.new("ForceField")
	forceField.Name = "SpawnProtection"
	forceField.Visible = false
	forceField.Parent = character
	humanoid.Health = humanoid.MaxHealth

	local safeCFrame = root.CFrame
	local started = os.clock()
	local connection
	connection = game:GetService("RunService").Heartbeat:Connect(function()
		if not character.Parent or humanoid.Health <= 0 then
			connection:Disconnect()
			return
		end
		if root.Position.Y < -40 then
			root.AssemblyLinearVelocity = Vector3.zero
			root.AssemblyAngularVelocity = Vector3.zero
			root.CFrame = safeCFrame
			humanoid.Health = humanoid.MaxHealth
		end
		if os.clock() - started >= 8 then
			connection:Disconnect()
			if forceField.Parent then forceField:Destroy() end
		end
	end)
end

local function setupPlayer(player)
	player.CharacterAdded:Connect(function(character)
		task.spawn(stabilizeCharacter, character)
		task.spawn(dressCharacter, character)
	end)
	if player.Character then
		task.spawn(stabilizeCharacter, player.Character)
		task.spawn(dressCharacter, player.Character)
	end
end
Players.PlayerAdded:Connect(setupPlayer)
for _, player in ipairs(Players:GetPlayers()) do setupPlayer(player) end
]]></string>
      </Properties>
    </Item>
    <Item class="Script" referent="2">
      <Properties>
        <string name="Name">RaceServer</string>
        <token name="RunContext">0</token>
        <string name="Source"><![CDATA[local Players=game:GetService("Players") local RS=game:GetService("ReplicatedStorage") local Run=game:GetService("RunService") local Lighting=game:GetService("Lighting")
local old=workspace:FindFirstChild("SkylineSprint") if old then old:Destroy() end local world=Instance.new("Folder",workspace) world.Name="SkylineSprint"
local rem=Instance.new("Folder",RS) rem.Name="RaceRemotes" local input=Instance.new("RemoteEvent",rem) input.Name="Input" local sync=Instance.new("RemoteEvent",rem) sync.Name="Sync" local note=Instance.new("RemoteEvent",rem) note.Name="Notice"
local C={road=Color3.fromRGB(45,51,62),edge=Color3.fromRGB(45,200,255),pink=Color3.fromRGB(255,83,155),gold=Color3.fromRGB(255,202,75),grass=Color3.fromRGB(77,133,91),white=Color3.fromRGB(239,244,249)}
local function part(n,s,cf,c,m) local p=Instance.new("Part",world) p.Name=n p.Size=s p.CFrame=cf p.Color=c p.Material=m or Enum.Material.SmoothPlastic p.Anchored=true p.TopSurface=Enum.SurfaceType.Smooth p.BottomSurface=Enum.SurfaceType.Smooth return p end
part("Island",Vector3.new(620,10,520),CFrame.new(0,-7,0),C.grass,Enum.Material.Grass)
local segments={{Vector3.new(-190,0,-150),Vector3.new(190,0,-150)},{Vector3.new(190,0,-150),Vector3.new(240,0,-90)},{Vector3.new(240,0,-90),Vector3.new(240,0,130)},{Vector3.new(240,0,130),Vector3.new(170,0,180)},{Vector3.new(170,0,180),Vector3.new(-170,0,180)},{Vector3.new(-170,0,180),Vector3.new(-240,0,110)},{Vector3.new(-240,0,110),Vector3.new(-240,0,-90)},{Vector3.new(-240,0,-90),Vector3.new(-190,0,-150)}}
local function road(a,b) local d=(b-a).Magnitude local cf=CFrame.lookAt((a+b)/2+Vector3.new(0,1,0),b+Vector3.new(0,1,0)) part("Track",Vector3.new(54,2,d),cf,C.road,Enum.Material.Asphalt) for _,x in ipairs({-28,28}) do part("NeonEdge",Vector3.new(2,2,d),cf*CFrame.new(x,1,0),C.edge,Enum.Material.Neon) end end
for _,s in ipairs(segments) do road(s[1],s[2]) end
local checkpoints={Vector3.new(0,3,-150),Vector3.new(240,3,0),Vector3.new(0,3,180),Vector3.new(-240,3,0)}
for i,p in ipairs(checkpoints) do local cp=part("Checkpoint"..i,Vector3.new(48,8,3),CFrame.new(p),i==1 and C.gold or C.edge,Enum.Material.Neon) cp.Transparency=.65 cp.CanCollide=false cp:SetAttribute("Index",i) end
for _,p in ipairs({Vector3.new(120,2,-150),Vector3.new(240,2,80),Vector3.new(-100,2,180),Vector3.new(-240,2,-40)}) do local b=part("BoostPad",Vector3.new(18,.6,9),CFrame.new(p),C.pink,Enum.Material.Neon) b:SetAttribute("Boost",true) end
for i=1,36 do local a=i/36*math.pi*2 local r=math.rad(i*47%20-10) local x=math.cos(a)*285 local z=math.sin(a)*235 local h=18+(i*13)%55 part("CityBlock",Vector3.new(28,h,28),CFrame.new(x,h/2-1,z)*CFrame.Angles(0,r,0),Color3.fromRGB(55+(i*9)%70,67+(i*5)%65,85+(i*11)%80),Enum.Material.Concrete) end
local spawn=Instance.new("SpawnLocation",world) spawn.Name="RaceSpawn" spawn.Size=Vector3.new(12,1,12) spawn.CFrame=CFrame.new(-150,4,-150) spawn.Anchored=true spawn.Neutral=true spawn.Color=C.gold
local sessions={}
local function board(char,color) local root=char:WaitForChild("HumanoidRootPart") local old=char:FindFirstChild("HoverKart") if old then old:Destroy() end local m=Instance.new("Model",char) m.Name="HoverKart" for _,v in ipairs({{Vector3.new(5,.7,8),CFrame.new(0,-2.4,0),color},{Vector3.new(6,.35,2),CFrame.new(0,-2.1,-3.5),C.edge},{Vector3.new(1,1.2,2),CFrame.new(-2.5,-2.5,1.8),C.pink},{Vector3.new(1,1.2,2),CFrame.new(2.5,-2.5,1.8),C.pink}}) do local p=Instance.new("Part",m) p.Size=v[1] p.CFrame=root.CFrame*v[2] p.Color=v[3] p.Material=Enum.Material.Neon p.CanCollide=false p.Massless=true local w=Instance.new("WeldConstraint",p) w.Part0=root w.Part1=p end end
local function send(p) local s=sessions[p] if s then sync:FireClient(p,{speed=math.abs(s.speed),lap=s.lap,checkpoint=s.checkpoint,time=os.clock()-s.lapStart,best=s.best,boost=s.boost}) end end
local function setup(p) local hue=(p.UserId%100)/100 sessions[p]={throttle=0,steer=0,drift=false,boostInput=false,speed=0,heading=0,checkpoint=2,lap=1,lapStart=os.clock(),best=0,boost=100,lastInput=os.clock()} p.CharacterAdded:Connect(function(c) local h=c:WaitForChild("Humanoid") h.WalkSpeed=0 h.JumpPower=0 task.wait(.2) local root=c:WaitForChild("HumanoidRootPart") local s=sessions[p] if not s then return end root.CFrame=CFrame.new(-150+(p.UserId%4)*12,5,-150) s.heading=math.rad(90) s.speed=0 s.checkpoint=2 s.lap=1 s.lapStart=os.clock() board(c,Color3.fromHSV(hue,.72,1)) note:FireClient(p,"GO · FOLLOW THE CHECKPOINT GATES") end) end
Players.PlayerAdded:Connect(setup) for _,p in ipairs(Players:GetPlayers()) do setup(p) end Players.PlayerRemoving:Connect(function(p) sessions[p]=nil end)
input.OnServerEvent:Connect(function(p,data) local s=sessions[p] if not s or typeof(data)~="table" then return end s.throttle=math.clamp(tonumber(data.throttle) or 0,-1,1) s.steer=math.clamp(tonumber(data.steer) or 0,-1,1) s.drift=data.drift==true s.boostInput=data.boost==true s.lastInput=os.clock() end)
Run.Heartbeat:Connect(function(dt) for p,s in pairs(sessions) do local root=p.Character and p.Character:FindFirstChild("HumanoidRootPart") if root then if os.clock()-s.lastInput>1 then s.throttle=0 s.steer=0 end local boosting=s.boostInput and s.boost>0 and s.throttle>0 if boosting then s.boost=math.max(0,s.boost-28*dt) else s.boost=math.min(100,s.boost+8*dt) end local max=boosting and 125 or 82 local accel=s.throttle>=0 and 62 or 42 s.speed+=s.throttle*accel*dt s.speed*=math.max(0,1-(s.drift and .5 or 1.5)*dt) s.speed=math.clamp(s.speed,-28,max) local turn=(s.drift and 2.2 or 1.45)*s.steer*dt*math.clamp(math.abs(s.speed)/20,0,1) s.heading-=turn*(s.speed>=0 and 1 or -1) local forward=Vector3.new(math.sin(s.heading),0,math.cos(s.heading)) local pos=root.Position+forward*s.speed*dt pos=Vector3.new(pos.X,5,pos.Z) root.CFrame=CFrame.lookAt(pos,pos+forward)
 local target=checkpoints[s.checkpoint] if (Vector3.new(pos.X,0,pos.Z)-Vector3.new(target.X,0,target.Z)).Magnitude<30 then local reached=s.checkpoint s.checkpoint=s.checkpoint%#checkpoints+1 note:FireClient(p,"CHECKPOINT "..reached.." / "..#checkpoints) if s.checkpoint==2 then local t=os.clock()-s.lapStart s.best=s.best==0 and t or math.min(s.best,t) note:FireClient(p,string.format("LAP %d COMPLETE · %.2fs",s.lap,t)) s.lap+=1 s.lapStart=os.clock() end end
 for _,b in ipairs(world:GetChildren()) do if b:GetAttribute("Boost") and (b.Position-pos).Magnitude<12 then s.speed=math.min(max+28,s.speed+48*dt) end end send(p) end end end)
Lighting.ClockTime=17.4 Lighting.Brightness=2.4 Lighting.Ambient=Color3.fromRGB(95,107,125) Lighting.OutdoorAmbient=Color3.fromRGB(140,151,165)
]]></string>
      </Properties>
    </Item>
  </Item>
  <Item class="StarterPlayer" referent="3">
    <Properties>
      <string name="Name">StarterPlayer</string>
    </Properties>
    <Item class="StarterPlayerScripts" referent="4">
      <Properties>
        <string name="Name">StarterPlayerScripts</string>
      </Properties>
      <Item class="LocalScript" referent="5">
        <Properties>
          <string name="Name">PortfolioPolish</string>
          <string name="Source"><![CDATA[local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")

local player = Players.LocalPlayer
local projectName = workspace:GetAttribute("PortfolioProject")
if not projectName then
	workspace:GetAttributeChangedSignal("PortfolioProject"):Wait()
	projectName = workspace:GetAttribute("PortfolioProject")
end

local title = workspace:GetAttribute("PortfolioTitle") or "NAKEL GAMEPLAY DEMO"
local accent = workspace:GetAttribute("PortfolioAccent") or Color3.fromRGB(68, 180, 255)
local instructions = {
	AetherDuel = "CLICK COMBO  •  E HEAVY  •  Q DASH  •  HOLD F BLOCK",
	SkylineSprint = "W/S THROTTLE  •  A/D STEER  •  SHIFT DRIFT  •  SPACE BOOST",
	BomblineGrid = "WATCH WARNING TILES  •  MOVE BEFORE THE BLAST",
	SignalSiege = "CLICK GOLD PADS  •  CLICK TOWERS TO SELECT  •  U UPGRADE",
	BuildAndSaveWorld = "B BUILD MODE  •  1–4 ITEM  •  R ROTATE  •  X DELETE",
	RailRushWorld = "E START  •  A/D CHOOSE ROUTE  •  SPACE JUMP",
	FreightyardArena = "CLICK FIRE  •  R RELOAD  •  USE COVER",
	CrystalFoundry = "CLICK OR E TO HARVEST  •  E AT STATIONS TO UPGRADE",
}

local gui = Instance.new("ScreenGui")
gui.Name = "PortfolioPresentation"
gui.IgnoreGuiInset = true
gui.ResetOnSpawn = false
gui.DisplayOrder = 100
gui.Parent = player:WaitForChild("PlayerGui")

local intro = Instance.new("Frame")
intro.Size = UDim2.fromScale(1, 1)
intro.BackgroundColor3 = Color3.fromRGB(7, 11, 18)
intro.Parent = gui

local line = Instance.new("Frame")
line.AnchorPoint = Vector2.new(0.5, 0.5)
line.Position = UDim2.fromScale(0.5, 0.58)
line.Size = UDim2.fromOffset(0, 3)
line.BackgroundColor3 = accent
line.BorderSizePixel = 0
line.Parent = intro

local heading = Instance.new("TextLabel")
heading.AnchorPoint = Vector2.new(0.5, 0.5)
heading.Position = UDim2.fromScale(0.5, 0.45)
heading.Size = UDim2.new(0.9, 0, 0, 80)
heading.BackgroundTransparency = 1
heading.Text = title
heading.TextColor3 = Color3.new(1, 1, 1)
heading.TextTransparency = 1
heading.Font = Enum.Font.GothamBlack
heading.TextScaled = true
heading.Parent = intro
local sizeConstraint = Instance.new("UITextSizeConstraint")
sizeConstraint.MaxTextSize = 46
sizeConstraint.MinTextSize = 24
sizeConstraint.Parent = heading

local subtitle = Instance.new("TextLabel")
subtitle.AnchorPoint = Vector2.new(0.5, 0.5)
subtitle.Position = UDim2.fromScale(0.5, 0.66)
subtitle.Size = UDim2.new(0.9, 0, 0, 40)
subtitle.BackgroundTransparency = 1
subtitle.Text = instructions[projectName] or "PLAYABLE PORTFOLIO PROTOTYPE"
subtitle.TextColor3 = Color3.fromRGB(188, 202, 219)
subtitle.TextTransparency = 1
subtitle.Font = Enum.Font.GothamBold
subtitle.TextSize = 14
subtitle.TextWrapped = true
subtitle.Parent = intro

TweenService:Create(heading, TweenInfo.new(0.35), {TextTransparency = 0}):Play()
TweenService:Create(line, TweenInfo.new(0.45), {Size = UDim2.new(0.5, 0, 0, 3)}):Play()
TweenService:Create(subtitle, TweenInfo.new(0.4), {TextTransparency = 0}):Play()
task.delay(1.8, function()
	TweenService:Create(intro, TweenInfo.new(0.45), {BackgroundTransparency = 1}):Play()
	TweenService:Create(heading, TweenInfo.new(0.3), {TextTransparency = 1}):Play()
	TweenService:Create(subtitle, TweenInfo.new(0.3), {TextTransparency = 1}):Play()
	TweenService:Create(line, TweenInfo.new(0.3), {BackgroundTransparency = 1}):Play()
	task.wait(0.5)
	intro:Destroy()
end)

if UserInputService.TouchEnabled then
	local touchHint = Instance.new("TextLabel")
	touchHint.AnchorPoint = Vector2.new(0.5, 1)
	touchHint.Position = UDim2.new(0.5, 0, 1, -10)
	touchHint.Size = UDim2.new(0.92, 0, 0, 26)
	touchHint.BackgroundColor3 = Color3.fromRGB(10, 16, 25)
	touchHint.BackgroundTransparency = 0.18
	touchHint.Text = "Desktop controls recommended for this portfolio build"
	touchHint.TextColor3 = Color3.fromRGB(213, 221, 232)
	touchHint.Font = Enum.Font.GothamMedium
	touchHint.TextSize = 11
	touchHint.Parent = gui
	Instance.new("UICorner", touchHint).CornerRadius = UDim.new(0, 8)
end
]]></string>
        </Properties>
      </Item>
      <Item class="LocalScript" referent="6">
        <Properties>
          <string name="Name">RaceClient</string>
          <string name="Source"><![CDATA[local Players=game:GetService("Players") local RS=game:GetService("ReplicatedStorage") local UIS=game:GetService("UserInputService") local Run=game:GetService("RunService") local p=Players.LocalPlayer local rem=RS:WaitForChild("RaceRemotes")
local gui=Instance.new("ScreenGui",p:WaitForChild("PlayerGui")) gui.Name="RaceHUD" gui.ResetOnSpawn=false local function corner(x) local c=Instance.new("UICorner",x) c.CornerRadius=UDim.new(0,10) end local function txt(par,v,pos,size,font,col) local t=Instance.new("TextLabel",par) t.BackgroundTransparency=1 t.Position=pos t.Size=size t.Text=v t.Font=font or Enum.Font.Gotham t.TextColor3=col or Color3.new(1,1,1) t.TextSize=15 t.TextXAlignment=Enum.TextXAlignment.Left return t end
local card=Instance.new("Frame",gui) card.Position=UDim2.fromOffset(18,18) card.Size=UDim2.fromOffset(350,170) card.BackgroundColor3=Color3.fromRGB(18,24,35) card.BackgroundTransparency=.04 corner(card)
local title=txt(card,"SKYLINE SPRINT",UDim2.fromOffset(16,12),UDim2.fromOffset(315,26),Enum.Font.GothamBlack,Color3.fromRGB(45,200,255)) title.TextSize=21
local lap=txt(card,"LAP 1  ·  CP 1/4",UDim2.fromOffset(16,45),UDim2.fromOffset(315,22),Enum.Font.GothamBold)
local speed=txt(card,"000 KM/H",UDim2.fromOffset(16,72),UDim2.fromOffset(315,32),Enum.Font.GothamBlack,Color3.fromRGB(255,202,75)) speed.TextSize=28
local time=txt(card,"TIME 0.00  ·  BEST --",UDim2.fromOffset(16,108),UDim2.fromOffset(315,20),Enum.Font.GothamBold)
local controls=txt(card,"W/S throttle · A/D steer · SHIFT drift · SPACE boost",UDim2.fromOffset(16,138),UDim2.fromOffset(320,20),Enum.Font.GothamMedium,Color3.fromRGB(185,200,216)) controls.TextSize=11
local boostBack=Instance.new("Frame",gui) boostBack.AnchorPoint=Vector2.new(.5,1) boostBack.Position=UDim2.new(.5,0,1,-28) boostBack.Size=UDim2.fromOffset(420,18) boostBack.BackgroundColor3=Color3.fromRGB(43,53,66) corner(boostBack) local boost=Instance.new("Frame",boostBack) boost.Size=UDim2.fromScale(1,1) boost.BackgroundColor3=Color3.fromRGB(255,83,155) corner(boost)
local banner=txt(gui,"",UDim2.new(.5,-300,.2,0),UDim2.fromOffset(600,50),Enum.Font.GothamBlack,Color3.fromRGB(255,202,75)) banner.TextXAlignment=Enum.TextXAlignment.Center banner.TextSize=25 rem.Notice.OnClientEvent:Connect(function(m) banner.Text=m task.delay(1.5,function() if banner.Text==m then banner.Text="" end end) end)
rem.Sync.OnClientEvent:Connect(function(s) speed.Text=string.format("%03d KM/H",math.floor(s.speed*1.7)) lap.Text=string.format("LAP %d  ·  CP %d/4",s.lap,s.checkpoint) time.Text=string.format("TIME %.2f  ·  BEST %s",s.time,s.best>0 and string.format("%.2f",s.best) or "--") boost.Size=UDim2.fromScale(math.clamp(s.boost/100,0,1),1) end)
local keys={w=false,s=false,a=false,d=false,drift=false,boost=false} local function set(k,v) if k==Enum.KeyCode.W then keys.w=v elseif k==Enum.KeyCode.S then keys.s=v elseif k==Enum.KeyCode.A then keys.a=v elseif k==Enum.KeyCode.D then keys.d=v elseif k==Enum.KeyCode.LeftShift then keys.drift=v elseif k==Enum.KeyCode.Space then keys.boost=v end end UIS.InputBegan:Connect(function(i,g) if not g then set(i.KeyCode,true) end end) UIS.InputEnded:Connect(function(i) set(i.KeyCode,false) end)
local acc=0 Run.RenderStepped:Connect(function(dt) acc+=dt if acc>.05 then acc=0 rem.Input:FireServer({throttle=(keys.w and 1 or 0)-(keys.s and 1 or 0),steer=(keys.d and 1 or 0)-(keys.a and 1 or 0),drift=keys.drift,boost=keys.boost}) end local root=p.Character and p.Character:FindFirstChild("HumanoidRootPart") local cam=workspace.CurrentCamera if root and cam then cam.CameraType=Enum.CameraType.Scriptable local target=root.CFrame*CFrame.new(0,8,18) cam.CFrame=cam.CFrame:Lerp(CFrame.lookAt(target.Position,root.Position+root.CFrame.LookVector*8),math.clamp(dt*7,0,1)) end end)
]]></string>
        </Properties>
      </Item>
    </Item>
  </Item>
  <Item class="Workspace" referent="7">
    <Properties>
      <string name="Name">Workspace</string>
      <bool name="NeedsPivotMigration">false</bool>
      <bool name="StreamingEnabled">true</bool>
    </Properties>
  </Item>
</roblox>