<roblox version="4">
  <Item class="ReplicatedStorage" referent="0">
    <Properties>
      <string name="Name">ReplicatedStorage</string>
    </Properties>
  </Item>
  <Item class="ServerScriptService" referent="1">
    <Properties>
      <string name="Name">ServerScriptService</string>
    </Properties>
    <Item class="Script" referent="2">
      <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="3">
      <Properties>
        <string name="Name">ShotgunServer</string>
        <token name="RunContext">0</token>
        <string name="Source"><![CDATA[local Players = game:GetService("Players")
local Teams = game:GetService("Teams")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Lighting = game:GetService("Lighting")

local ROUND_TIME = 120
local INTERMISSION = 10
local MAGAZINE = 5
local RANGE = 115
local PELLETS = 8
local DAMAGE = 12

local remotes = Instance.new("Folder")
remotes.Name = "ShotgunRemotes"
remotes.Parent = ReplicatedStorage
local fireRemote = Instance.new("RemoteEvent")
fireRemote.Name = "Fire"
fireRemote.Parent = remotes
local reloadRemote = Instance.new("RemoteEvent")
reloadRemote.Name = "Reload"
reloadRemote.Parent = remotes
local stateRemote = Instance.new("RemoteEvent")
stateRemote.Name = "State"
stateRemote.Parent = remotes

local blue = Instance.new("Team")
blue.Name = "Blue"
blue.TeamColor = BrickColor.new("Bright blue")
blue.AutoAssignable = false
blue.Parent = Teams
local orange = Instance.new("Team")
orange.Name = "Orange"
orange.TeamColor = BrickColor.new("Bright orange")
orange.AutoAssignable = false
orange.Parent = Teams

local world = Instance.new("Folder")
world.Name = "FreightyardArena"
world.Parent = workspace
workspace.FallenPartsDestroyHeight = -50
Lighting.ClockTime = 19
Lighting.Brightness = 2
Lighting.Ambient = Color3.fromRGB(86, 92, 105)
Lighting.OutdoorAmbient = Color3.fromRGB(105, 111, 124)

local atmosphere = Instance.new("Atmosphere")
atmosphere.Density = 0.22
atmosphere.Color = Color3.fromRGB(199, 213, 235)
atmosphere.Parent = Lighting

local function part(name, size, position, color, material)
	local object = Instance.new("Part")
	object.Name = name
	object.Size = size
	object.Position = position
	object.Anchored = true
	object.Material = material or Enum.Material.Concrete
	object.Color = color
	object.TopSurface = Enum.SurfaceType.Smooth
	object.BottomSurface = Enum.SurfaceType.Smooth
	object.Parent = world
	return object
end

part("ArenaFloor", Vector3.new(170, 2, 130), Vector3.new(0, -1, 0), Color3.fromRGB(60, 63, 68), Enum.Material.Concrete)
for _, wall in ipairs({
	{Vector3.new(170, 24, 2), Vector3.new(0, 11, -65)}, {Vector3.new(170, 24, 2), Vector3.new(0, 11, 65)},
	{Vector3.new(2, 24, 130), Vector3.new(-85, 11, 0)}, {Vector3.new(2, 24, 130), Vector3.new(85, 11, 0)},
}) do part("WarehouseWall", wall[1], wall[2], Color3.fromRGB(89, 94, 101), Enum.Material.Brick) end

for x = -60, 60, 30 do
	for z = -38, 38, 38 do
		part("CargoCover", Vector3.new(18, 9, 9), Vector3.new(x, 4.5, z), x % 60 == 0 and Color3.fromRGB(44, 104, 139) or Color3.fromRGB(153, 79, 49), Enum.Material.Metal)
	end
end
for _, cover in ipairs({Vector3.new(-45, 3, 0), Vector3.new(-18, 3, -16), Vector3.new(0, 3, 16), Vector3.new(22, 3, -12), Vector3.new(48, 3, 4)}) do
	part("ConcreteCover", Vector3.new(12, 6, 5), cover, Color3.fromRGB(127, 128, 125), Enum.Material.Concrete)
end

local function spawnPad(name, position, teamColor)
	local spawn = Instance.new("SpawnLocation")
	spawn.Name = name
	spawn.Size = Vector3.new(10, 1, 10)
	spawn.Position = position
	spawn.Anchored = true
	spawn.Neutral = false
	spawn.TeamColor = teamColor
	spawn.AllowTeamChangeOnTouch = false
	spawn.Material = Enum.Material.Neon
	spawn.Transparency = 0.3
	spawn.Parent = world
	return spawn
end
spawnPad("BlueSpawn", Vector3.new(-72, 1, 0), blue.TeamColor)
spawnPad("OrangeSpawn", Vector3.new(72, 1, 0), orange.TeamColor)

local trainingBots = Instance.new("Folder")
trainingBots.Name = "TrainingBots"
trainingBots.Parent = world

local function createTrainingBot(index, position)
	local model = Instance.new("Model")
	model.Name = "TrainingBot" .. index
	model:SetAttribute("TrainingBot", true)
	model:SetAttribute("SpawnPosition", position)
	model.Parent = trainingBots
	local root = Instance.new("Part")
	root.Name = "HumanoidRootPart"
	root.Size = Vector3.new(4, 6, 3)
	root.Position = position
	root.Anchored = true
	root.Material = Enum.Material.Metal
	root.Color = Color3.fromRGB(216, 99, 57)
	root.Parent = model
	local head = Instance.new("Part")
	head.Name = "Head"
	head.Size = Vector3.new(3, 3, 3)
	head.Position = position + Vector3.new(0, 4.5, 0)
	head.Anchored = true
	head.Material = Enum.Material.SmoothPlastic
	head.Color = Color3.fromRGB(235, 198, 157)
	head.Parent = model
	local humanoid = Instance.new("Humanoid")
	humanoid.MaxHealth = 96
	humanoid.Health = 96
	humanoid.DisplayName = "Training Raider"
	humanoid.Parent = model
	model.PrimaryPart = root
	return model
end

createTrainingBot(1, Vector3.new(28, 3, -22))
createTrainingBot(2, Vector3.new(45, 3, 18))
createTrainingBot(3, Vector3.new(7, 3, 35))

local roundActive = false
local roundEndsAt = 0
local scores = {Blue = 0, Orange = 0}
local combatState = {}

local function chooseTeam()
	local blueCount, orangeCount = 0, 0
	for _, player in ipairs(Players:GetPlayers()) do
		if player.Team == blue then blueCount += 1 elseif player.Team == orange then orangeCount += 1 end
	end
	return blueCount <= orangeCount and blue or orange
end

local function resetCombat(player)
	combatState[player] = {ammo = MAGAZINE, lastShot = 0, reloading = false}
	player:SetAttribute("Ammo", MAGAZINE)
	player:SetAttribute("Eliminations", player:GetAttribute("Eliminations") or 0)
end

local function respawnRound()
	for _, player in ipairs(Players:GetPlayers()) do
		player:LoadCharacter()
		resetCombat(player)
	end
end

local function spreadDirection(direction, spread)
	local right = direction:Cross(Vector3.yAxis)
	if right.Magnitude < 0.1 then right = Vector3.xAxis else right = right.Unit end
	local up = right:Cross(direction).Unit
	return (direction + right * spread.X + up * spread.Y).Unit
end

fireRemote.OnServerEvent:Connect(function(player, direction)
	local state = combatState[player]
	local character = player.Character
	local root = character and character:FindFirstChild("HumanoidRootPart")
	local humanoid = character and character:FindFirstChildOfClass("Humanoid")
	if not roundActive or not state or state.reloading or not root or not humanoid or humanoid.Health <= 0 or typeof(direction) ~= "Vector3" or direction.Magnitude < 0.9 then return end
	if os.clock() - state.lastShot < 0.85 or state.ammo <= 0 then return end
	state.lastShot = os.clock()
	state.ammo -= 1
	player:SetAttribute("Ammo", state.ammo)

	local params = RaycastParams.new()
	params.FilterType = Enum.RaycastFilterType.Exclude
	params.FilterDescendantsInstances = {character}
	local hitPlayers = {}
	for pellet = 1, PELLETS do
		local seed = Random.new(math.floor(os.clock() * 100000) + pellet)
		local pelletDirection = spreadDirection(direction.Unit, Vector2.new(seed:NextNumber(-0.09, 0.09), seed:NextNumber(-0.07, 0.07)))
		local result = workspace:Raycast(root.Position + Vector3.new(0, 1.5, 0), pelletDirection * RANGE, params)
		if result then
			local model = result.Instance:FindFirstAncestorOfClass("Model")
			local targetHumanoid = model and model:FindFirstChildOfClass("Humanoid")
			local targetPlayer = model and Players:GetPlayerFromCharacter(model)
			if targetHumanoid and targetHumanoid.Health > 0 and targetPlayer ~= player and (not targetPlayer or targetPlayer.Team ~= player.Team) then
				targetHumanoid:TakeDamage(DAMAGE)
				hitPlayers[targetHumanoid] = true
				if targetHumanoid.Health <= 0 then
					player:SetAttribute("Eliminations", (player:GetAttribute("Eliminations") or 0) + 1)
					scores[player.Team.Name] += 1
					if model:GetAttribute("TrainingBot") and not model:GetAttribute("Respawning") then
						model:SetAttribute("Respawning", true)
						for _, object in ipairs(model:GetChildren()) do if object:IsA("BasePart") then object.Transparency = 0.75 end end
						task.delay(2.5, function()
							if not model.Parent then return end
							targetHumanoid.Health = targetHumanoid.MaxHealth
							model:PivotTo(CFrame.new(model:GetAttribute("SpawnPosition")))
							for _, object in ipairs(model:GetChildren()) do if object:IsA("BasePart") then object.Transparency = 0 end end
							model:SetAttribute("Respawning", false)
						end)
					end
				end
			end
		end
	end
	stateRemote:FireClient(player, next(hitPlayers) and "Hit" or "Fired")
end)

reloadRemote.OnServerEvent:Connect(function(player)
	local state = combatState[player]
	if not state or state.reloading or state.ammo >= MAGAZINE then return end
	state.reloading = true
	player:SetAttribute("Reloading", true)
	task.delay(1.8, function()
		if combatState[player] ~= state then return end
		state.ammo = MAGAZINE
		state.reloading = false
		player:SetAttribute("Ammo", MAGAZINE)
		player:SetAttribute("Reloading", false)
	end)
end)

Players.PlayerAdded:Connect(function(player)
	player.Team = chooseTeam()
	resetCombat(player)
	player.CharacterAdded:Connect(function(character)
		local humanoid = character:WaitForChild("Humanoid")
		humanoid.WalkSpeed = 18
		resetCombat(player)
	end)
end)
Players.PlayerRemoving:Connect(function(player) combatState[player] = nil end)

task.spawn(function()
	while true do
		roundActive = false
		for remaining = INTERMISSION, 0, -1 do
			stateRemote:FireAllClients("Intermission", remaining, scores)
			task.wait(1)
		end
		scores = {Blue = 0, Orange = 0}
		respawnRound()
		roundActive = true
		roundEndsAt = os.clock() + ROUND_TIME
		while roundActive and os.clock() < roundEndsAt do
			stateRemote:FireAllClients("Round", math.ceil(roundEndsAt - os.clock()), scores)
			task.wait(1)
		end
		roundActive = false
		local winner = scores.Blue == scores.Orange and "DRAW" or (scores.Blue > scores.Orange and "BLUE WINS" or "ORANGE WINS")
		stateRemote:FireAllClients("Result", winner, scores)
		task.wait(5)
	end
end)
]]></string>
      </Properties>
    </Item>
  </Item>
  <Item class="StarterPlayer" referent="4">
    <Properties>
      <string name="Name">StarterPlayer</string>
    </Properties>
    <Item class="StarterPlayerScripts" referent="5">
      <Properties>
        <string name="Name">StarterPlayerScripts</string>
      </Properties>
      <Item class="LocalScript" referent="6">
        <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="7">
        <Properties>
          <string name="Name">ShotgunClient</string>
          <string name="Source"><![CDATA[local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")

local player = Players.LocalPlayer
local mouse = player:GetMouse()
local remotes = ReplicatedStorage:WaitForChild("ShotgunRemotes")
local fireRemote = remotes:WaitForChild("Fire")
local reloadRemote = remotes:WaitForChild("Reload")
local stateRemote = remotes:WaitForChild("State")

local gui = Instance.new("ScreenGui")
gui.Name = "ShotgunHUD"
gui.ResetOnSpawn = false
gui.Parent = player:WaitForChild("PlayerGui")

local function label(name, size, position, textSize)
	local object = Instance.new("TextLabel")
	object.Name = name
	object.Size = size
	object.Position = position
	object.BackgroundColor3 = Color3.fromRGB(14, 18, 25)
	object.BackgroundTransparency = 0.18
	object.TextColor3 = Color3.new(1, 1, 1)
	object.Font = Enum.Font.GothamBold
	object.TextSize = textSize
	object.Parent = gui
	Instance.new("UICorner", object).CornerRadius = UDim.new(0, 12)
	return object
end

local score = label("Score", UDim2.fromOffset(360, 54), UDim2.new(0.5, -180, 0, 20), 20)
score.Text = "BLUE  0   •   0  ORANGE"
local status = label("Status", UDim2.fromOffset(270, 42), UDim2.new(0.5, -135, 0, 82), 16)
status.Text = "WAITING FOR ROUND"
local ammo = label("Ammo", UDim2.fromOffset(190, 68), UDim2.new(1, -216, 1, -96), 30)
ammo.Text = "5 / 5"
local crosshair = Instance.new("TextLabel")
crosshair.Size = UDim2.fromOffset(32, 32)
crosshair.Position = UDim2.new(0.5, -16, 0.5, -16)
crosshair.BackgroundTransparency = 1
crosshair.Text = "+"
crosshair.TextColor3 = Color3.new(1, 1, 1)
crosshair.Font = Enum.Font.GothamBlack
crosshair.TextSize = 28
crosshair.Parent = gui

local reloadButton = Instance.new("TextButton")
reloadButton.Size = UDim2.fromOffset(150, 44)
reloadButton.Position = UDim2.new(1, -196, 1, -148)
reloadButton.BackgroundColor3 = Color3.fromRGB(47, 59, 76)
reloadButton.Text = "RELOAD  [R]"
reloadButton.TextColor3 = Color3.new(1, 1, 1)
reloadButton.Font = Enum.Font.GothamBold
reloadButton.TextSize = 14
reloadButton.Parent = gui
Instance.new("UICorner", reloadButton).CornerRadius = UDim.new(0, 10)
reloadButton.Activated:Connect(function() reloadRemote:FireServer() end)

local function updateAmmo()
	ammo.Text = player:GetAttribute("Reloading") and "RELOADING" or string.format("%d / 5", player:GetAttribute("Ammo") or 0)
end
player:GetAttributeChangedSignal("Ammo"):Connect(updateAmmo)
player:GetAttributeChangedSignal("Reloading"):Connect(updateAmmo)
updateAmmo()

local function fire()
	local character = player.Character
	local root = character and character:FindFirstChild("HumanoidRootPart")
	if not root then return end
	local direction = mouse.Hit.Position - (root.Position + Vector3.new(0, 1.5, 0))
	if direction.Magnitude > 0 then fireRemote:FireServer(direction.Unit) end
end

mouse.Button1Down:Connect(fire)
UserInputService.InputBegan:Connect(function(input, processed)
	if processed then return end
	if input.KeyCode == Enum.KeyCode.R then reloadRemote:FireServer() end
end)

stateRemote.OnClientEvent:Connect(function(kind, value, scores)
	if kind == "Hit" then
		crosshair.TextColor3 = Color3.fromRGB(255, 82, 82)
		crosshair.Text = "×"
		task.delay(0.15, function() crosshair.TextColor3 = Color3.new(1, 1, 1); crosshair.Text = "+" end)
	elseif kind == "Intermission" then
		status.Text = "NEXT ROUND  " .. tostring(value)
	elseif kind == "Round" then
		status.Text = "ROUND  " .. tostring(value) .. "s"
		score.Text = string.format("BLUE  %d   •   %d  ORANGE", scores.Blue, scores.Orange)
	elseif kind == "Result" then
		status.Text = tostring(value)
		score.Text = string.format("BLUE  %d   •   %d  ORANGE", scores.Blue, scores.Orange)
	end
end)
]]></string>
        </Properties>
      </Item>
    </Item>
  </Item>
</roblox>