Prompt: -- Functions

Response:
local Clear = function()
	for _,v in pairs(Content:GetChildren()) do
		if v ~= UIGrid then
			v:Destroy()
		end
	end
end

local Add = function(char)
	local charPrev = char:GetChildren()[1]
	assert(charPrev,"[Error] Character doesn't exist in module " .. char.Name)

	-- base frame
	local ViewportFrame = Instance.new("ViewportFrame")
	ViewportFrame.Name = char.Name
	ViewportFrame.Parent = Content
	ViewportFrame.BorderSizePixel = 0
	ViewportFrame.BackgroundColor3 = Color3.fromRGB(25,25,25)
	local Uicorner = game.ServerStorage.Extra:WaitForChild("UICorner"):Clone()
	Uicorner.Parent = ViewportFrame

	-- character preview
	local clone = charPrev:Clone()
	clone.Parent = ViewportFrame

	-- camera
	local camera = Instance.new("Camera")
	camera.Parent = ViewportFrame
	camera.CFrame = CFrame.new(
		(clone:WaitForChild("Head").CFrame * CFrame.new(0,0,-8)).Position
		+ Vector3.new(3,-2,0),
		clone.Head.Position
	)
	camera.FieldOfView = 30

	ViewportFrame.CurrentCamera = camera

	-- button
	local button = Instance.new("TextButton")
	button.Parent = ViewportFrame
	button.Size = UDim2.new(1,0,1,0)
	button.BackgroundTransparency = 1
	button.Text = ""

	button.MouseButton1Click:Connect(function()
		if Debounce then return end
		Debounce = true;
		SelectedCharacter.Value = char
		wait(1)
		Debounce = false
	end)
end

local Refresh = function()
	Clear();
	local cellsize = GetCellSize:InvokeClient(Player)
	UIGrid.CellSize = UDim2.new(0,cellsize,0,cellsize)
	for _,v in pairs(Characters:GetChildren()) do
		Add(v);
	end
end

Refresh();


Prompt: --CHANGE THIS TO FALSE IF YOU DO NOT WANT TO SUPPORT THE CREATOR WITH ADVERTISEMENTS.

Response: local doModelAdvertisement = true


Prompt:
----------------------------------------------------------------------------------------------------
-----------------=[ RECOIL & PRECISAO ]=------------------------------------------------------------
----------------------------------------------------------------------------------------------------

Response:
	,VRecoil = {17,18}				--- Vertical Recoil
	,HRecoil = {5,7}				--- Horizontal Recoil
	,AimRecover = .7				---- Between 0 & 1

	,RecoilPunch = .15
	,VPunchBase = 2.5				--- Vertical Punch
	,HPunchBase = 1.7				--- Horizontal Punch
	,DPunchBase = 1 				--- Tilt Punch | useless

	,AimRecoilReduction = 5 		--- Recoil Reduction Factor While Aiming (Do not set to 0)
	,PunchRecover = 0.2
	,MinRecoilPower = .5
	,MaxRecoilPower = 3.5
	,RecoilPowerStepAmount = .25

	,MinSpread = 0.56				--- Min bullet spread value | Studs
	,MaxSpread = 35					--- Max bullet spread value | Studs
	,AimInaccuracyStepAmount = 0.5
	,WalkMultiplier = 0				--- Bullet spread based on player speed

	,SwayBase = 0.25				--- Weapon Base Sway | Studs
	,MaxSway =	1.5					--- Max sway value based on player stamina | Studs


Prompt: -- FEATURE METHODS

Response:
function Icon:bindEvent(iconEventName, eventFunction)
	local event = self[iconEventName]
	assert(event and typeof(event) == "table" and event.Connect, "argument[1] must be a valid topbarplus icon event name!")
	assert(typeof(eventFunction) == "function", "argument[2] must be a function!")
	self._bindedEvents[iconEventName] = event:Connect(function(...)
		eventFunction(self, ...)
	end)
	return self
end

function Icon:unbindEvent(iconEventName)
	local eventConnection = self._bindedEvents[iconEventName]
	if eventConnection then
		eventConnection:Disconnect()
		self._bindedEvents[iconEventName] = nil
	end
	return self
end

function Icon:bindToggleKey(keyCodeEnum)
	assert(typeof(keyCodeEnum) == "EnumItem", "argument[1] must be a KeyCode EnumItem!")
	self._bindedToggleKeys[keyCodeEnum] = true
	return self
end

function Icon:unbindToggleKey(keyCodeEnum)
	assert(typeof(keyCodeEnum) == "EnumItem", "argument[1] must be a KeyCode EnumItem!")
	self._bindedToggleKeys[keyCodeEnum] = nil
	return self
end

function Icon:lock()
	self.instances.iconButton.Active = false
	self.locked = true
	task.defer(function()
		-- We do this to prevent the overlay remaining enabled if :lock is called right after an icon is selected
		if self.locked then
			self.overlayLocked = true
		end
	end)
	return self
end

function Icon:unlock()
	self.instances.iconButton.Active = true
	self.locked = false
	self.overlayLocked = false
	return self
end

function Icon:debounce(seconds)
	self:lock()
	task.task.wait(seconds)
	self:unlock()
	return self
end

function Icon:autoDeselect(bool)
	if bool == nil then
		bool = true
	end
	self.deselectWhenOtherIconSelected = bool
	return self
end

function Icon:setTopPadding(offset, scale)
	local newOffset = offset or 4
	local newScale = scale or 0
	self.topPadding = UDim.new(newScale, newOffset)
	self.updated:Fire()
	return self
end

function Icon:bindToggleItem(guiObjectOrLayerCollector)
	if not guiObjectOrLayerCollector:IsA("GuiObject") and not guiObjectOrLayerCollector:IsA("LayerCollector") then
		error("Toggle item must be a GuiObject or LayerCollector!")
	end
	self.toggleItems[guiObjectOrLayerCollector] = true
	self:updateSelectionInstances()
	return self
end

function Icon:updateSelectionInstances()
	-- This is to assist with controller navigation and selection
	for guiObjectOrLayerCollector, _ in pairs(self.toggleItems) do
		local buttonInstancesArray = {}
		for _, instance in pairs(guiObjectOrLayerCollector:GetDescendants()) do
			if (instance:IsA("TextButton") or instance:IsA("ImageButton")) and instance.Active then
				table.insert(buttonInstancesArray, instance)
			end
		end
		self.toggleItems[guiObjectOrLayerCollector] = buttonInstancesArray
	end
end

function Icon:addBackBlocker(func)
	-- This is custom behaviour that can block the default behaviour of going back or closing a page when Controller B is pressed
	-- If the function returns ``true`` then the B Back behaviour is blocked
	-- This is useful for instance when a user is purchasing an item and you don't want them to return to the previous page
	-- if they pressed B during this pending period
	table.insert(self.blockBackBehaviourChecks, func)
	return self
end

function Icon:unbindToggleItem(guiObjectOrLayerCollector)
	self.toggleItems[guiObjectOrLayerCollector] = nil
	return self
end

function Icon:_setToggleItemsVisible(bool, byIcon)
	for toggleItem, _ in pairs(self.toggleItems) do
		if not byIcon or byIcon.toggleItems[toggleItem] == nil then
			local property = "Visible"
			if toggleItem:IsA("LayerCollector") then
				property = "Enabled"
			end
			toggleItem[property] = bool
		end
	end
end

function Icon:call(func)
	task.spawn(func, self)
	return self
end

function Icon:give(userdata)
	local valueToGive = userdata
	if typeof(userdata) == "function" then
		local returnValue = userdata(self)
		if typeof(userdata) ~= "function" then
			valueToGive = returnValue
		else
			valueToGive = nil
		end
	end
	if valueToGive ~= nil then
		self._maid:give(valueToGive)
	end
	return self
end


Prompt: --[[Susupension]]

Response:
	Tune.SusEnabled		= true		-- Sets whether suspension is enabled for PGS

	--Front Suspension
	Tune.FSusDamping	= 500		-- Spring Dampening
	Tune.FSusStiffness	= 9000		-- Spring Force
	Tune.FAntiRoll 		= 50		-- Anti-Roll (Gyro Dampening)

	Tune.FSusLength		= 2			-- Suspension length (in studs)
	Tune.FPreCompress	= .3		-- Pre-compression adds resting length force
	Tune.FExtensionLim	= .3		-- Max Extension Travel (in studs)
	Tune.FCompressLim	= .1		-- Max Compression Travel (in studs)
	Tune.FSusAngle		= 80		-- Suspension Angle (degrees from horizontal)

	Tune.FWsBoneLen		= 5			-- Wishbone Length
	Tune.FWsBoneAngle	= 0			-- Wishbone angle (degrees from horizontal)
	Tune.FAnchorOffset	= {			-- Suspension anchor point offset (relative to center of wheel)
	 --[[Lateral]]		-.4		,	-- positive = outward
	 --[[Vertical]]		-.5		,	-- positive = upward
	 --[[Forward]]		0		}	-- positive = forward

	--Rear Suspension
	Tune.RSusDamping	= 500		-- Spring Dampening
	Tune.RSusStiffness	= 9000		-- Spring Force
	Tune.RAntiRoll 		= 50		-- Anti-Roll (Gyro Dampening)

	Tune.RSusLength		= 2			-- Suspension length (in studs)
	Tune.RPreCompress	= .3		-- Pre-compression adds resting length force
	Tune.RExtensionLim	= .3		-- Max Extension Travel (in studs)
	Tune.RCompressLim	= .1		-- Max Compression Travel (in studs)
	Tune.RSusAngle		= 80		-- Suspension Angle (degrees from horizontal)

	Tune.RWsBoneLen		= 5			-- Wishbone Length
	Tune.RWsBoneAngle	= 0			-- Wishbone angle (degrees from horizontal)
	Tune.RAnchorOffset	= {			-- Suspension anchor point offset (relative to center of wheel)
	 --[[Lateral]]		-.4		,	-- positive = outward
	 --[[Vertical]]		-.5		,	-- positive = upward
	 --[[Forward]]		0		}	-- positive = forward

	--Aesthetics
	Tune.SusVisible		= true			-- Spring Visible
	Tune.WsBVisible		= false			-- Wishbone Visible
	Tune.SusRadius		= .2			-- Suspension Coil Radius
	Tune.SusThickness	= .1			-- Suspension Coil Thickness
	Tune.SusColor		= "Black"	-- Suspension Color [BrickColor]
	Tune.SusCoilCount	= 6				-- Suspension Coil Count
	Tune.WsColor		= "Black"		-- Wishbone Color [BrickColor]
	Tune.WsThickness	= .1			-- Wishbone Rod Thickness


Response:
local Monster = {} -- Create the monster class

function Monster:GetCFrame()
	-- Returns the CFrame of the monster's humanoidrootpart

	local humanoidRootPart = Self:FindFirstChild('HumanoidRootPart')

	if humanoidRootPart ~= nil and humanoidRootPart:IsA('BasePart') then
		return humanoidRootPart.CFrame
	else
		return CFrame.new()
	end
end

function Monster:GetMaximumDetectionDistance()
	-- Returns the maximum detection distance

	local setting = Settings.MaximumDetectionDistance.Value

	if setting < 0 then
		return math.huge
	else
		return setting
	end
end

function Monster:SearchForTarget()
	-- Finds the closest player and sets the target

	local players = Info.Players:GetPlayers()
	local closestCharacter, closestCharacterDistance

	for i=1, #players do
		local player = players[i]

		if player.Neutral or player.TeamColor ~= Settings.FriendlyTeam.Value then
			local character = player.Character

			if character ~= nil and character:FindFirstChild('Humanoid') ~= nil and character.Humanoid:IsA('Humanoid') then
				local distance = player:DistanceFromCharacter(Monster:GetCFrame().p)

				if distance < Monster:GetMaximumDetectionDistance() then
					if closestCharacter == nil then
						closestCharacter, closestCharacterDistance = character, distance
					else
						if closestCharacterDistance > distance then
							closestCharacter, closestCharacterDistance = character, distance
						end
					end
				end
			end
		end
	end

	if closestCharacter ~= nil then
		Mind.CurrentTargetHumanoid.Value = closestCharacter.Humanoid
	end
end

function Monster:TryRecomputePath()
	if Data.AutoRecompute or tick() - Data.LastRecomputePath > 1/Info.RecomputePathFrequency then
		Monster:RecomputePath()
	end
end

function Monster:GetTargetCFrame()
	local targetHumanoid = Mind.CurrentTargetHumanoid.Value

	if Monster:TargetIsValid() then
		return targetHumanoid.Torso.CFrame
	else
		return CFrame.new()
	end
end

function Monster:IsAlive()
	return Self.Humanoid.Health > 0 and Self.Humanoid.Torso ~= nil
end

function Monster:TargetIsValid()
	local targetHumanoid = Mind.CurrentTargetHumanoid.Value

	if targetHumanoid ~= nil and targetHumanoid:IsA 'Humanoid' and targetHumanoid.Torso ~= nil and targetHumanoid.Torso:IsA 'BasePart' then
		return true
	else
		return false
	end
end

function Monster:HasClearLineOfSight()
	-- Going to cast a ray to see if I can just see my target
	local myPos, targetPos = Monster:GetCFrame().p, Monster:GetTargetCFrame().p

	local hit, pos = Workspace:FindPartOnRayWithIgnoreList(
		Ray.new(
			myPos,
			targetPos - myPos
		),
		{
			Self,
			Mind.CurrentTargetHumanoid.Value.Parent
		}
	)

	if hit == nil then
		return true
	else
		return false
	end
end

function Monster:RecomputePath()
	if not Data.Recomputing then
		if Monster:IsAlive() and Monster:TargetIsValid() then
			if Monster:HasClearLineOfSight() then
				Data.AutoRecompute = true
				Data.PathCoords = {
					Monster:GetCFrame().p,
					Monster:GetTargetCFrame().p
				}

				Data.LastRecomputePath = tick()
				Data.CurrentNode = nil
				Data.CurrentNodeIndex = 2 -- Starts chasing the target without evaluating its current position
			else
				-- Do pathfinding since you can't walk straight
				Data.Recomputing = true -- Basically a debounce.
				Data.AutoRecompute = false

				local path = Info.PathfindingService:ComputeSmoothPathAsync(
					Monster:GetCFrame().p,
					Monster:GetTargetCFrame().p,
					500
				)
				Data.PathCoords = path:GetPointCoordinates()

				Data.Recomputing = false
				Data.LastRecomputePath = tick()
				Data.CurrentNode = nil
				Data.CurrentNodeIndex = 1
			end
		end
	end
end

function Monster:Update()
	Monster:ReevaluateTarget()
	Monster:SearchForTarget()
	Monster:TryRecomputePath()
	Monster:TravelPath()
end

function Monster:TravelPath()
	local closest, closestDistance, closestIndex
	local myPosition = Monster:GetCFrame().p
	local skipCurrentNode = Data.CurrentNode ~= nil and (Data.CurrentNode - myPosition).magnitude < 3

	for i=Data.CurrentNodeIndex, #Data.PathCoords do
		local coord = Data.PathCoords[i]
		if not (skipCurrentNode and coord == Data.CurrentNode) then
			local distance = (coord - myPosition).magnitude

			if closest == nil then
				closest, closestDistance, closestIndex = coord, distance, i
			else
				if distance < closestDistance then
					closest, closestDistance, closestIndex = coord, distance, i
				else
					break
				end
			end
		end
	end

	--
	if closest ~= nil then
		Data.CurrentNode = closest
		Data.CurrentNodeIndex = closestIndex

		local humanoid = Self:FindFirstChild 'Humanoid'

		if humanoid ~= nil and humanoid:IsA'Humanoid' then
			humanoid:MoveTo(closest)
		end

		if Monster:IsAlive() and Monster:TargetIsValid() then
			Monster:TryJumpCheck()
			Monster:TryAttack()
		end

		if closestIndex == #Data.PathCoords then
			-- Reached the end of the path, force a new check
			Data.AutoRecompute = true
		end
	end
end

function Monster:TryJumpCheck()
	if tick() - Data.LastJumpCheck > 1/Info.JumpCheckFrequency then
		Monster:JumpCheck()
	end
end

function Monster:TryAttack()
	if tick() - Data.LastAttack > 1/Settings.AttackFrequency.Value then
		Monster:Attack()
	end
end

function Monster:Attack()
	local myPos, targetPos = Monster:GetCFrame().p, Monster:GetTargetCFrame().p

	if (myPos - targetPos).magnitude <= Settings.AttackRange.Value then
		Mind.CurrentTargetHumanoid.Value:TakeDamage(Settings.AttackDamage.Value)
		Data.LastAttack = tick()
		wait(2)
		Data.AttackTrack:Play()
	end
end

function Monster:JumpCheck()
	-- Do a raycast to check if we need to jump
	local myCFrame = Monster:GetCFrame()
	local checkVector = (Monster:GetTargetCFrame().p - myCFrame.p).unit*2

	local hit, pos = Workspace:FindPartOnRay(
		Ray.new(
			myCFrame.p + Vector3.new(0, -2.4, 0),
			checkVector
		),
		Self
	)

	if hit ~= nil and not hit:IsDescendantOf(Mind.CurrentTargetHumanoid.Value.Parent) then
		-- Do a slope check to make sure we're not walking up a ramp

		local hit2, pos2 = Workspace:FindPartOnRay(
			Ray.new(
				myCFrame.p + Vector3.new(0, -2.3, 0),
				checkVector
			),
			Self
		)

		if hit2 == hit then
			if ((pos2 - pos)*Vector3.new(1,0,1)).magnitude < 0.05 then -- Will pass for any ramp with <2 slope
				Self.Humanoid.Jump = false
			end
		end
	end

	Data.LastJumpCheck = tick()
end

function Monster:Connect()
	Mind.CurrentTargetHumanoid.Changed:connect(function(humanoid)
		if humanoid ~= nil then
			assert(humanoid:IsA'Humanoid', 'Monster target must be a humanoid')

			Monster:RecomputePath()
		end
	end)

	Self.Respawn.OnInvoke = function(point)
		Monster:Respawn(point)
	end
end

function Monster:Initialize()
	Monster:Connect()

	if Settings.AutoDetectSpawnPoint.Value then
		Settings.SpawnPoint.Value = Monster:GetCFrame().p
	end
end

function Monster:Respawn(point)
	local point = point or Settings.SpawnPoint.Value

	for index, obj in next, Data.BaseMonster:Clone():GetChildren() do
		if obj.Name == 'Configurations' or obj.Name == 'Mind' or obj.Name == 'Respawned' or obj.Name == 'Died' or obj.Name == 'MonsterScript' or obj.Name == 'Respawn' then
			obj:Destroy()
		else
			Self[obj.Name]:Destroy()
			obj.Parent = Self
		end
	end

	Monster:InitializeUnique()

	Self.Parent = Workspace

	Self.HumanoidRootPart.CFrame = CFrame.new(point)
	Settings.SpawnPoint.Value = point
	Self.Respawned:Fire()
end

function Monster:InitializeUnique()
	Data.AttackTrack = Self.Humanoid:LoadAnimation(script.Attack)
end

function Monster:ReevaluateTarget()
	local currentTarget = Mind.CurrentTargetHumanoid.Value

	if currentTarget ~= nil and currentTarget:IsA'Humanoid' then
		local character = currentTarget.Parent

		if character ~= nil then
			local player = Info.Players:GetPlayerFromCharacter(character)

			if player ~= nil then
				if not player.Neutral and player.TeamColor == Settings.FriendlyTeam.Value then
					Mind.CurrentTargetHumanoid.Value = nil
				end
			end
		end

		if currentTarget == Mind.CurrentTargetHumanoid.Value then
			local torso = currentTarget.Torso

			if torso ~= nil and torso:IsA 'BasePart' then
				if Settings.CanGiveUp.Value and (torso.Position - Monster:GetCFrame().p).magnitude > Monster:GetMaximumDetectionDistance() then
					Mind.CurrentTargetHumanoid.Value = nil
				end
			end
		end
	end
end


Prompt:
--edit the function below to return true when you want this response/prompt to be valid
--player is the player speaking to the dialogue, and dialogueFolder is the object containing the dialogue data

Response:
return function(player, dialogueFolder)
	local ClassInformationTable = require(game.ReplicatedStorage.Source.Modules.CharacterScripts.Classes.ClassInformation)
	return ClassInformationTable:GetClassFolder(player,"Paladin").XP.Value >= 10
end


Prompt: --VARIABLES

Response:
local Proximity = game.Workspace.ComplaintDep.Granade.ProximityPrompt
local player = game.Players.LocalPlayer
local gui = script.Parent.Dont.TextLabel


Prompt:
--[[
	Adds a change listener. When the watched state changes value, the listener
	will be fired.

	Returns a function which, when called, will disconnect the change listener.
	As long as there is at least one active change listener, this Observer
	will be held in memory, preventing GC, so disconnecting is important.
]]

Response:
function class:onChange(callback: () -> ()): () -> ()
	local uniqueIdentifier = {}

	self._numChangeListeners += 1
	self._changeListeners[uniqueIdentifier] = callback

	-- disallow gc (this is important to make sure changes are received)
	strongRefs[self] = true

	local disconnected = false

	return function()
		if disconnected then
			return
		end

		disconnected = true
		self._changeListeners[uniqueIdentifier] = nil
		self._numChangeListeners -= 1

		if self._numChangeListeners == 0 then
			-- allow gc if all listeners are disconnected
			strongRefs[self] = nil
		end
	end
end

local function Observer(watchedState)
	local self = setmetatable({
		type = "State",
		kind = "Observer",
		dependencySet = {[watchedState] = true},
		dependentSet = {},
		_changeListeners = {},
		_numChangeListeners = 0,
	}, CLASS_METATABLE)

	-- add this object to the watched state's dependent set
	watchedState.dependentSet[self] = true

	return self
end

return Observer


Prompt: --// Tables

Response:
local L_95_ = {

	"285421759";
	"151130102";
	"151130171";
	"285421804";
	"287769483";
	"287769415";
	"285421687";
	"287769261";
	"287772525";
	"287772445";
	"287772351";
	"285421819";
	"287772163";

}

local L_96_ = {

	"2282590559";
	"2282583154";
	"2282584222";
	"2282584708";
	"2282585118";
	"2282586860";
	"2282587182";
	"2282587628";
	"2282588117";
	"2282588433";
	"2282576973";
	"2282577954";
	"2282578595";
	"2282579272";
	"2282579760";
	"2282580279";
	"2282580551";
	"2282580935";
	"2282582377";
	"2282582717";
	"2282449653";

}

local L_97_ = {

	"2297264589";
	"2297264920";
	"2297265171";
	"2297265394";
	"2297266410";
	"2297266774";
	"2297267106";
	"2297267463";
	"2297267748";
	"2297268261";
	"2297268486";
	"2297268707";
	"2297268894";
	"2297269092";
	"2297269542";
	"2297269946";
	"2297270243";
	"2297270591";
	"2297270984";
	"2297271381";
	"2297271626";
	"2297272112";
	"2297272424";

}

local L_98_ = workspace:FindFirstChild("BulletModel: " .. L_2_.Name) or Instance.new("Folder", workspace)
L_98_.Name = "BulletModel: " .. L_2_.Name

local L_99_

local L_100_ = L_24_.Ammo
local L_101_ = L_24_.StoredAmmo * L_24_.MagCount

local L_102_ = L_24_.ExplosiveAmmo

IgnoreList = {
	L_3_,
	L_98_,
	L_5_
}


Response:
local function FlashRed(object)
	local origColor = object.BrickColor
	local redColor = BrickColor.new("Really red")
	local start = tick()
	local duration = 4
	spawn(function()
		while object and tick() - start < duration do
			object.BrickColor = origColor
			task.wait(0.13)
			if object then
				object.BrickColor = redColor
			end
			task.wait(0.13)
		end
	end)
end


Prompt: --[[[Default Controls]]

Response:
	--Peripheral Deadzones
	Tune.Peripherals = {
		MSteerWidth				= 67		,	-- Mouse steering control width	(0 - 100% of screen width)
		MSteerDZone				= 10		,	-- Mouse steering deadzone (0 - 100%)

		ControlLDZone			= 5			,	-- Controller steering L-deadzone (0 - 100%)
		ControlRDZone			= 5			,	-- Controller steering R-deadzone (0 - 100%)
	}

	--Control Mapping
	Tune.Controls = {

	--Keyboard Controls
		--Mode Toggles
		ToggleTCS				= Enum.KeyCode.T					,
		ToggleABS				= Enum.KeyCode.Y					,
		ToggleTransMode			= Enum.KeyCode.M					,
		ToggleMouseDrive		= Enum.KeyCode.R					,

		--Primary Controls
		Throttle				= Enum.KeyCode.W					,
		Brake					= Enum.KeyCode.S					,
		SteerLeft				= Enum.KeyCode.A					,
		SteerRight				= Enum.KeyCode.D				,

		--Manual Transmission
		ShiftUp					= Enum.KeyCode.E					,
		ShiftDown				= Enum.KeyCode.Q					,
		Clutch					= Enum.KeyCode.LeftShift			,

		--Handbrake
		PBrake					= Enum.KeyCode.P					,

	--Mouse Controls
		MouseThrottle			= Enum.UserInputType.MouseButton1	,
		MouseBrake				= Enum.UserInputType.MouseButton2	,
		MouseClutch				= Enum.KeyCode.W					,
		MouseShiftUp			= Enum.KeyCode.E					,
		MouseShiftDown			= Enum.KeyCode.Q					,
		MousePBrake				= Enum.KeyCode.LeftShift			,

	--Controller Mapping
		ContlrThrottle			= Enum.KeyCode.ButtonR2				,
		ContlrBrake				= Enum.KeyCode.ButtonL2				,
		ContlrSteer				= Enum.KeyCode.Thumbstick1			,
		ContlrShiftUp			= Enum.KeyCode.ButtonY				,
		ContlrShiftDown			= Enum.KeyCode.ButtonX				,
		ContlrClutch			= Enum.KeyCode.ButtonR1				,
		ContlrPBrake			= Enum.KeyCode.ButtonL1				,
		ContlrToggleTMode		= Enum.KeyCode.DPadUp				,
		ContlrToggleTCS			= Enum.KeyCode.DPadDown				,
		ContlrToggleABS			= Enum.KeyCode.DPadRight			,
	}


Prompt: --[[Weight and CG]]

Response:
	Tune.Weight			= 3000		-- Total weight (in pounds)
	Tune.WeightBSize	= {			-- Size of weight brick (dimmensions in studs ; larger = more stable)
	 --[[Width]]		6		,
	 --[[Height]]		3.5		,
	 --[[Length]]		14		}
	Tune.WeightDist		= 50		-- Weight distribution (0 - on rear wheels, 100 - on front wheels, can be <0 or >100)
	Tune.CGHeight		= .8		-- Center of gravity height (studs relative to median of all wheels)
	Tune.WBVisible		= false		-- Makes the weight brick visible

	--Unsprung Weight
	Tune.FWheelDensity	= .1		-- Front Wheel Density
	Tune.RWheelDensity	= .1		-- Rear Wheel Density
	Tune.FWLgcyDensity	= 1			-- Front Wheel Density [PGS OFF]
	Tune.RWLgcyDensity	= 1			-- Rear Wheel Density [PGS OFF]

	Tune.AxleSize		= 1		-- Size of structural members (larger = more stable/carry more weight)
	Tune.AxleDensity	= .1	-- Density of structural members


Prompt:
-- Signal:Fire(...) implemented by running the handler functions on the
-- coRunnerThread, and any time the resulting thread yielded without returning
-- to us, that means that it yielded to the Roblox scheduler and has been taken
-- over by Roblox scheduling, meaning we have to make a new coroutine runner.
--[=[
	@param ... any

	Fire the signal, which will call all of the connected functions with the given arguments.
	```lua
	signal:Fire("Hello")

	-- Any number of arguments can be fired:
	signal:Fire("Hello", 32, {Test = "Test"}, true)
	```
]=]

Response:
function Signal:Fire(...)
	local item = self._handlerListHead
	while item do
		if item.Connected then
			if not freeRunnerThread then
				freeRunnerThread = coroutine.create(runEventHandlerInFreeThread)
			end
			task.spawn(freeRunnerThread, item._fn, ...)
		end
		item = item._next
	end
end


Prompt: -- Decompiled with the Synapse X Luau decompiler.

Response:
client = nil;
cPcall = nil;
Pcall = nil;
Routine = nil;
service = nil;
return function(p1)
	local v1 = client.UI.Prepare(script.Parent.Parent);
	local l__PlayerGui__2 = service.PlayerGui;
	local l__Frame__3 = v1.Frame;
	local l__Message__4 = v1.Frame.Message;
	local l__Title__5 = v1.Frame.Title;
	local l__gIndex__6 = p1.gIndex;
	local l__Title__7 = p1.Title;
	local l__Message__8 = p1.Message;
	local l__Scroll__9 = p1.Scroll;
	if not p1.Message or not p1.Title then
		v1:Destroy();
	end;
	l__Title__5.Text = l__Title__7;
	l__Message__4.Text = l__Message__8;
	l__Title__5.TextTransparency = 1;
	l__Message__4.TextTransparency = 1;
	l__Title__5.TextStrokeTransparency = 1;
	l__Message__4.TextStrokeTransparency = 1;
	l__Frame__3.BackgroundTransparency = 1;
	local v10 = {
		Type = "Full Screen Message",
		Title = l__Title__7,
		Message = l__Message__8,
		Icon = "rbxassetid://7501175708",
		Time = os.date("%X"),
		Function = nil
	};
	table.insert(client.Variables.CommunicationsHistory, v10);
	service.Events.CommsCenter:Fire(v10);
	local v11 = service.New("BlurEffect");
	v11.Enabled = false;
	v11.Size = 0;
	v11.Parent = workspace.CurrentCamera;
	local u1 = false;
	local l__gTable__2 = p1.gTable;
	local function u3()
		if not u1 then
			for v12 = 1, 10 do
				if v11.Size > 0 then
					v11.Size = v11.Size - 1;
				end;
				if l__Message__4.TextTransparency < 1 then
					l__Message__4.TextTransparency = l__Message__4.TextTransparency + 0.1;
					l__Title__5.TextTransparency = l__Title__5.TextTransparency + 0.1;
				end;
				if l__Message__4.TextStrokeTransparency < 1 then
					l__Message__4.TextStrokeTransparency = l__Message__4.TextStrokeTransparency + 0.1;
					l__Title__5.TextStrokeTransparency = l__Title__5.TextStrokeTransparency + 0.1;
				end;
				if l__Frame__3.BackgroundTransparency < 1 then
					l__Frame__3.BackgroundTransparency = l__Frame__3.BackgroundTransparency + 0.03;
				end;
				wait(0.016666666666666666);
			end;
			v11.Enabled = false;
			v11:Destroy();
			service.UnWrap(v1):Destroy();
			u1 = true;
		end;
	end;
	function l__gTable__2.CustomDestroy()
		if not u1 then
			u1 = true;
			pcall(u3);
		end;
		pcall(function()
			service.UnWrap(v1):Destroy();
		end);
		pcall(function()
			v11:Destroy();
		end);
	end;
	(function()
		if not u1 then
			v11.Enabled = true;
			l__gTable__2:Ready();
			for v13 = 1, 10 do
				if v11.Size < 10 then
					v11.Size = v11.Size + 1;
				end;
				if l__Message__4.TextTransparency > 0.1 then
					l__Message__4.TextTransparency = l__Message__4.TextTransparency - 0.1;
					l__Title__5.TextTransparency = l__Title__5.TextTransparency - 0.1;
				end;
				if l__Message__4.TextStrokeTransparency > 0.5 then
					l__Message__4.TextStrokeTransparency = l__Message__4.TextStrokeTransparency - 0.1;
					l__Title__5.TextStrokeTransparency = l__Title__5.TextStrokeTransparency - 0.1;
				end;
				if l__Frame__3.BackgroundTransparency > 0.3 then
					l__Frame__3.BackgroundTransparency = l__Frame__3.BackgroundTransparency - 0.03;
				end;
				wait(0.016666666666666666);
			end;
		end;
	end)();
	wait(p1.Time and 5);
	if not u1 then
		u3();
	end;
end;


Prompt: --[[Engine]]

Response:
	--Torque Curve
	Tune.Horsepower		= 155		--	[TORQUE CURVE VISUAL]
	Tune.IdleRPM		= 600		--		https://www.desmos.com/calculator/2uo3hqwdhf
	Tune.PeakRPM		= 2100		--		Use sliders to manipulate values
	Tune.Redline		= 2700		--		Copy and paste slider values into the respective tune values
	Tune.EqPoint		= 2500
	Tune.PeakSharpness	= 2.5
	Tune.CurveMult		= 0.15

	--Incline Compensation
	Tune.InclineComp	= 1.7			-- Torque compensation multiplier for inclines (applies gradient from 0-90 degrees)

	--Misc
	Tune.RevAccel		= 150		-- RPM acceleration when clutch is off
	Tune.RevDecay		= 75		-- RPM decay when clutch is off
	Tune.RevBounce		= 500		-- RPM kickback from redline
	Tune.IdleThrottle	= 3			-- Percent throttle at idle
	Tune.ClutchTol		= 500		-- Clutch engagement threshold (higher = faster response)


Prompt:
--[[
		VRNavigation
--]]

Response:
local VRService = game:GetService("VRService")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local PathfindingService = game:GetService("PathfindingService")
local ContextActionService = game:GetService("ContextActionService")
local StarterGui = game:GetService("StarterGui")


Prompt: -- Backwards compatibility

Response: Promise.async = Promise.defer


Prompt:
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
---- ScrollBar

Response:
do
	-- AutoButtonColor doesn't always reset properly
	local function ResetButtonColor(button)
		local active = button.Active
		button.Active = not active
		button.Active = active
	end

	local function ArrowGraphic(size,dir,scaled,template)
		local Frame = Create('Frame',{
			Name = "Arrow Graphic";
			BorderSizePixel = 0;
			Size = UDim2.new(0,size,0,size);
			Transparency = 1;
		})
		if not template then
			template = Instance.new("Frame")
			template.BorderSizePixel = 0
		end

		local transform
		if dir == nil or dir == 'Up' then
			function transform(p,s) return p,s end
		elseif dir == 'Down' then
			function transform(p,s) return UDim2.new(0,p.X.Offset,0,size-p.Y.Offset-1),s end
		elseif dir == 'Left' then
			function transform(p,s) return UDim2.new(0,p.Y.Offset,0,p.X.Offset),UDim2.new(0,s.Y.Offset,0,s.X.Offset) end
		elseif dir == 'Right' then
			function transform(p,s) return UDim2.new(0,size-p.Y.Offset-1,0,p.X.Offset),UDim2.new(0,s.Y.Offset,0,s.X.Offset) end
		end

		local scale
		if scaled then
			function scale(p,s) return UDim2.new(p.X.Offset/size,0,p.Y.Offset/size,0),UDim2.new(s.X.Offset/size,0,s.Y.Offset/size,0) end
		else
			function scale(p,s) return p,s end
		end

		local o = math.floor(size/4)
		if size%2 == 0 then
			local n = size/2-1
			for i = 0,n do
				local t = template:Clone()
				local p,s = scale(transform(
					UDim2.new(0,n-i,0,o+i),
					UDim2.new(0,(i+1)*2,0,1)
				))
				t.Position = p
				t.Size = s
				t.Parent = Frame
			end
		else
			local n = (size-1)/2
			for i = 0,n do
				local t = template:Clone()
				local p,s = scale(transform(
					UDim2.new(0,n-i,0,o+i),
					UDim2.new(0,i*2+1,0,1)
				))
				t.Position = p
				t.Size = s
				t.Parent = Frame
			end
		end
		if size%4 > 1 then
			local t = template:Clone()
			local p,s = scale(transform(
				UDim2.new(0,0,0,size-o-1),
				UDim2.new(0,size,0,1)
			))
			t.Position = p
			t.Size = s
			t.Parent = Frame
		end
		return Frame
	end

	local function GripGraphic(size,dir,spacing,scaled,template)
		local Frame = Create('Frame',{
			Name = "Grip Graphic";
			BorderSizePixel = 0;
			Size = UDim2.new(0,size.x,0,size.y);
			Transparency = 1;
		})
		if not template then
			template = Instance.new("Frame")
			template.BorderSizePixel = 0
		end

		spacing = spacing or 2

		local scale
		if scaled then
			function scale(p) return UDim2.new(p.X.Offset/size.x,0,p.Y.Offset/size.y,0) end
		else
			function scale(p) return p end
		end

		if dir == 'Vertical' then
			for i=0,size.x-1,spacing do
				local t = template:Clone()
				t.Size = scale(UDim2.new(0,1,0,size.y))
				t.Position = scale(UDim2.new(0,i,0,0))
				t.Parent = Frame
			end
		elseif dir == nil or dir == 'Horizontal' then
			for i=0,size.y-1,spacing do
				local t = template:Clone()
				t.Size = scale(UDim2.new(0,size.x,0,1))
				t.Position = scale(UDim2.new(0,0,0,i))
				t.Parent = Frame
			end
		end

		return Frame
	end

	local mt = {
		__index = {
			GetScrollPercent = function(self)
				return self.ScrollIndex/(self.TotalSpace-self.VisibleSpace)
			end;
			CanScrollDown = function(self)
				return self.ScrollIndex + self.VisibleSpace < self.TotalSpace
			end;
			CanScrollUp = function(self)
				return self.ScrollIndex > 0
			end;
			ScrollDown = function(self)
				self.ScrollIndex = self.ScrollIndex + self.PageIncrement
				self:Update()
			end;
			ScrollUp = function(self)
				self.ScrollIndex = self.ScrollIndex - self.PageIncrement
				self:Update()
			end;
			ScrollTo = function(self,index)
				self.ScrollIndex = index
				self:Update()
			end;
			SetScrollPercent = function(self,percent)
				self.ScrollIndex = math.floor((self.TotalSpace - self.VisibleSpace)*percent + 0.5)
				self:Update()
			end;
		};
	}
	mt.__index.CanScrollRight = mt.__index.CanScrollDown
	mt.__index.CanScrollLeft = mt.__index.CanScrollUp
	mt.__index.ScrollLeft = mt.__index.ScrollUp
	mt.__index.ScrollRight = mt.__index.ScrollDown

	function ScrollBar(horizontal)
		-- create row scroll bar
		local ScrollFrame = Create('Frame',{
			Name = "ScrollFrame";
			Position = horizontal and UDim2.new(0,0,1,-GUI_SIZE) or UDim2.new(1,-GUI_SIZE,0,0);
			Size = horizontal and UDim2.new(1,0,0,GUI_SIZE) or UDim2.new(0,GUI_SIZE,1,0);
			BackgroundTransparency = 1;
			Create('ImageButton',{
				Name = "ScrollDown";
				Position = horizontal and UDim2.new(1,-GUI_SIZE,0,0) or UDim2.new(0,0,1,-GUI_SIZE);
				Size = UDim2.new(0, GUI_SIZE, 0, GUI_SIZE);
				BackgroundColor3 = GuiColor.Button;
				BorderColor3 = GuiColor.Border;
				--BorderSizePixel = 0;
			});
			Create('ImageButton',{
				Name = "ScrollUp";
				Size = UDim2.new(0, GUI_SIZE, 0, GUI_SIZE);
				BackgroundColor3 = GuiColor.Button;
				BorderColor3 = GuiColor.Border;
				--BorderSizePixel = 0;
			});
			Create('ImageButton',{
				Name = "ScrollBar";
				Size = horizontal and UDim2.new(1,-GUI_SIZE*2,1,0) or UDim2.new(1,0,1,-GUI_SIZE*2);
				Position = horizontal and UDim2.new(0,GUI_SIZE,0,0) or UDim2.new(0,0,0,GUI_SIZE);
				AutoButtonColor = false;
				BackgroundColor3 = Color3.new(0.94902, 0.94902, 0.94902);
				BorderColor3 = GuiColor.Border;
				--BorderSizePixel = 0;
				Create('ImageButton',{
					Name = "ScrollThumb";
					AutoButtonColor = false;
					Size = UDim2.new(0, GUI_SIZE, 0, GUI_SIZE);
					BackgroundColor3 = GuiColor.Button;
					BorderColor3 = GuiColor.Border;
					--BorderSizePixel = 0;
				});
			});
		})

		local graphicTemplate = Create('Frame',{
			Name="Graphic";
			BorderSizePixel = 0;
			BackgroundColor3 = GuiColor.Border;
		})
		local graphicSize = GUI_SIZE/2

		local ScrollDownFrame = ScrollFrame.ScrollDown
			local ScrollDownGraphic = ArrowGraphic(graphicSize,horizontal and 'Right' or 'Down',true,graphicTemplate)
			ScrollDownGraphic.Position = UDim2.new(0.5,-graphicSize/2,0.5,-graphicSize/2)
			ScrollDownGraphic.Parent = ScrollDownFrame
		local ScrollUpFrame = ScrollFrame.ScrollUp
			local ScrollUpGraphic = ArrowGraphic(graphicSize,horizontal and 'Left' or 'Up',true,graphicTemplate)
			ScrollUpGraphic.Position = UDim2.new(0.5,-graphicSize/2,0.5,-graphicSize/2)
			ScrollUpGraphic.Parent = ScrollUpFrame
		local ScrollBarFrame = ScrollFrame.ScrollBar
		local ScrollThumbFrame = ScrollBarFrame.ScrollThumb
		do
			local size = GUI_SIZE*3/8
			local Decal = GripGraphic(Vector2.new(size,size),horizontal and 'Vertical' or 'Horizontal',2,graphicTemplate)
			Decal.Position = UDim2.new(0.5,-size/2,0.5,-size/2)
			Decal.Parent = ScrollThumbFrame
		end

		local Class = setmetatable({
			GUI = ScrollFrame;
			ScrollIndex = 0;
			VisibleSpace = 0;
			TotalSpace = 0;
			PageIncrement = 1;
		},mt)

		local UpdateScrollThumb
		if horizontal then
			function UpdateScrollThumb()
				ScrollThumbFrame.Size = UDim2.new(Class.VisibleSpace/Class.TotalSpace,0,0,GUI_SIZE)
				if ScrollThumbFrame.AbsoluteSize.x < GUI_SIZE then
					ScrollThumbFrame.Size = UDim2.new(0,GUI_SIZE,0,GUI_SIZE)
				end
				local barSize = ScrollBarFrame.AbsoluteSize.x
				ScrollThumbFrame.Position = UDim2.new(Class:GetScrollPercent()*(barSize - ScrollThumbFrame.AbsoluteSize.x)/barSize,0,0,0)
			end
		else
			function UpdateScrollThumb()
				ScrollThumbFrame.Size = UDim2.new(0,GUI_SIZE,Class.VisibleSpace/Class.TotalSpace,0)
				if ScrollThumbFrame.AbsoluteSize.y < GUI_SIZE then
					ScrollThumbFrame.Size = UDim2.new(0,GUI_SIZE,0,GUI_SIZE)
				end
				local barSize = ScrollBarFrame.AbsoluteSize.y
				ScrollThumbFrame.Position = UDim2.new(0,0,Class:GetScrollPercent()*(barSize - ScrollThumbFrame.AbsoluteSize.y)/barSize,0)
			end
		end

		local lastDown
		local lastUp
		local scrollStyle = {BackgroundColor3=GuiColor.Border,BackgroundTransparency=0}
		local scrollStyle_ds = {BackgroundColor3=GuiColor.Border,BackgroundTransparency=0.7}

		local function Update()
			local t = Class.TotalSpace
			local v = Class.VisibleSpace
			local s = Class.ScrollIndex
			if v <= t then
				if s > 0 then
					if s + v > t then
						Class.ScrollIndex = t - v
					end
				else
					Class.ScrollIndex = 0
				end
			else
				Class.ScrollIndex = 0
			end

			if Class.UpdateCallback then
				if Class.UpdateCallback(Class) == false then
					return
				end
			end

			local down = Class:CanScrollDown()
			local up = Class:CanScrollUp()
			if down ~= lastDown then
				lastDown = down
				ScrollDownFrame.Active = down
				ScrollDownFrame.AutoButtonColor = down
				local children = ScrollDownGraphic:GetChildren()
				local style = down and scrollStyle or scrollStyle_ds
				for i = 1,#children do
					Create(children[i],style)
				end
			end
			if up ~= lastUp then
				lastUp = up
				ScrollUpFrame.Active = up
				ScrollUpFrame.AutoButtonColor = up
				local children = ScrollUpGraphic:GetChildren()
				local style = up and scrollStyle or scrollStyle_ds
				for i = 1,#children do
					Create(children[i],style)
				end
			end
			ScrollThumbFrame.Visible = down or up
			UpdateScrollThumb()
		end
		Class.Update = Update

		SetZIndexOnChanged(ScrollFrame)

		local MouseDrag = Create('ImageButton',{
			Name = "MouseDrag";
			Position = UDim2.new(-0.25,0,-0.25,0);
			Size = UDim2.new(1.5,0,1.5,0);
			Transparency = 1;
			AutoButtonColor = false;
			Active = true;
			ZIndex = 10;
		})

		local scrollEventID = 0
		ScrollDownFrame.MouseButton1Down:connect(function()
			scrollEventID = tick()
			local current = scrollEventID
			local up_con
			up_con = MouseDrag.MouseButton1Up:connect(function()
				scrollEventID = tick()
				MouseDrag.Parent = nil
				ResetButtonColor(ScrollDownFrame)
				up_con:disconnect(); drag = nil
			end)
			MouseDrag.Parent = GetScreen(ScrollFrame)
			Class:ScrollDown()
			wait(0.2) -- delay before auto scroll
			while scrollEventID == current do
				Class:ScrollDown()
				if not Class:CanScrollDown() then break end
				wait()
			end
		end)

		ScrollDownFrame.MouseButton1Up:connect(function()
			scrollEventID = tick()
		end)

		ScrollUpFrame.MouseButton1Down:connect(function()
			scrollEventID = tick()
			local current = scrollEventID
			local up_con
			up_con = MouseDrag.MouseButton1Up:connect(function()
				scrollEventID = tick()
				MouseDrag.Parent = nil
				ResetButtonColor(ScrollUpFrame)
				up_con:disconnect(); drag = nil
			end)
			MouseDrag.Parent = GetScreen(ScrollFrame)
			Class:ScrollUp()
			wait(0.2)
			while scrollEventID == current do
				Class:ScrollUp()
				if not Class:CanScrollUp() then break end
				wait()
			end
		end)

		ScrollUpFrame.MouseButton1Up:connect(function()
			scrollEventID = tick()
		end)

		if horizontal then
			ScrollBarFrame.MouseButton1Down:connect(function(x,y)
				scrollEventID = tick()
				local current = scrollEventID
				local up_con
				up_con = MouseDrag.MouseButton1Up:connect(function()
					scrollEventID = tick()
					MouseDrag.Parent = nil
					ResetButtonColor(ScrollUpFrame)
					up_con:disconnect(); drag = nil
				end)
				MouseDrag.Parent = GetScreen(ScrollFrame)
				if x > ScrollThumbFrame.AbsolutePosition.x then
					Class:ScrollTo(Class.ScrollIndex + Class.VisibleSpace)
					wait(0.2)
					while scrollEventID == current do
						if x < ScrollThumbFrame.AbsolutePosition.x + ScrollThumbFrame.AbsoluteSize.x then break end
						Class:ScrollTo(Class.ScrollIndex + Class.VisibleSpace)
						wait()
					end
				else
					Class:ScrollTo(Class.ScrollIndex - Class.VisibleSpace)
					wait(0.2)
					while scrollEventID == current do
						if x > ScrollThumbFrame.AbsolutePosition.x then break end
						Class:ScrollTo(Class.ScrollIndex - Class.VisibleSpace)
						wait()
					end
				end
			end)
		else
			ScrollBarFrame.MouseButton1Down:connect(function(x,y)
				scrollEventID = tick()
				local current = scrollEventID
				local up_con
				up_con = MouseDrag.MouseButton1Up:connect(function()
					scrollEventID = tick()
					MouseDrag.Parent = nil
					ResetButtonColor(ScrollUpFrame)
					up_con:disconnect(); drag = nil
				end)
				MouseDrag.Parent = GetScreen(ScrollFrame)
				if y > ScrollThumbFrame.AbsolutePosition.y then
					Class:ScrollTo(Class.ScrollIndex + Class.VisibleSpace)
					wait(0.2)
					while scrollEventID == current do
						if y < ScrollThumbFrame.AbsolutePosition.y + ScrollThumbFrame.AbsoluteSize.y then break end
						Class:ScrollTo(Class.ScrollIndex + Class.VisibleSpace)
						wait()
					end
				else
					Class:ScrollTo(Class.ScrollIndex - Class.VisibleSpace)
					wait(0.2)
					while scrollEventID == current do
						if y > ScrollThumbFrame.AbsolutePosition.y then break end
						Class:ScrollTo(Class.ScrollIndex - Class.VisibleSpace)
						wait()
					end
				end
			end)
		end

		if horizontal then
			ScrollThumbFrame.MouseButton1Down:connect(function(x,y)
				scrollEventID = tick()
				local mouse_offset = x - ScrollThumbFrame.AbsolutePosition.x
				local drag_con
				local up_con
				drag_con = MouseDrag.MouseMoved:connect(function(x,y)
					local bar_abs_pos = ScrollBarFrame.AbsolutePosition.x
					local bar_drag = ScrollBarFrame.AbsoluteSize.x - ScrollThumbFrame.AbsoluteSize.x
					local bar_abs_one = bar_abs_pos + bar_drag
					x = x - mouse_offset
					x = x < bar_abs_pos and bar_abs_pos or x > bar_abs_one and bar_abs_one or x
					x = x - bar_abs_pos
					Class:SetScrollPercent(x/(bar_drag))
				end)
				up_con = MouseDrag.MouseButton1Up:connect(function()
					scrollEventID = tick()
					MouseDrag.Parent = nil
					ResetButtonColor(ScrollThumbFrame)
					drag_con:disconnect(); drag_con = nil
					up_con:disconnect(); drag = nil
				end)
				MouseDrag.Parent = GetScreen(ScrollFrame)
			end)
		else
			ScrollThumbFrame.MouseButton1Down:connect(function(x,y)
				scrollEventID = tick()
				local mouse_offset = y - ScrollThumbFrame.AbsolutePosition.y
				local drag_con
				local up_con
				drag_con = MouseDrag.MouseMoved:connect(function(x,y)
					local bar_abs_pos = ScrollBarFrame.AbsolutePosition.y
					local bar_drag = ScrollBarFrame.AbsoluteSize.y - ScrollThumbFrame.AbsoluteSize.y
					local bar_abs_one = bar_abs_pos + bar_drag
					y = y - mouse_offset
					y = y < bar_abs_pos and bar_abs_pos or y > bar_abs_one and bar_abs_one or y
					y = y - bar_abs_pos
					Class:SetScrollPercent(y/(bar_drag))
				end)
				up_con = MouseDrag.MouseButton1Up:connect(function()
					scrollEventID = tick()
					MouseDrag.Parent = nil
					ResetButtonColor(ScrollThumbFrame)
					drag_con:disconnect(); drag_con = nil
					up_con:disconnect(); drag = nil
				end)
				MouseDrag.Parent = GetScreen(ScrollFrame)
			end)
		end

		function Class:Destroy()
			ScrollFrame:Destroy()
			MouseDrag:Destroy()
			for k in pairs(Class) do
				Class[k] = nil
			end
			setmetatable(Class,nil)
		end

		Update()

		return Class
	end
end


Prompt: -- Tween service reference

Response:
local TweenService = game:GetService("TweenService")
local tweenInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)


Prompt: -- Decompiled with the Synapse X Luau decompiler.

Response:
client = nil;
service = nil;
local function u1(p1)
	if p1 then
		return "Yes";
	end;
	return "No";
end;
return function(p2)
	local v1 = nil;
	local v2 = client.UI.Make("Window", {
		Name = "ServerDetails",
		Title = "Server Details",
		Icon = client.MatIcons.Topic,
		Size = { 420, 360 },
		MinSize = { 374, 155 },
		AllowMultiple = false
	});
	local v3 = v2:Add("TabFrame", {
		Size = UDim2.new(1, -10, 1, -10),
		Position = UDim2.new(0, 5, 0, 5)
	});
	local v4 = v3:NewTab("Overview", {
		Text = "Overview"
	});
	local v5 = v3:NewTab("Location", {
		Text = "Location"
	});
	local v6 = v3:NewTab("Players", {
		Text = "Players"
	});
	local v7 = v3:NewTab("Workspace", {
		Text = "Workspace"
	});
	if p2.WorkspaceInfo then
		local v8 = {
			Text = "",
			ToolTip = "Advanced stats"
		};
		function v8.OnClick()
			client.Remote.Send("ProcessCommand", p2.CmdPrefix .. "perfstats");
		end;
		v2:AddTitleButton(v8):Add("ImageLabel", {
			Size = UDim2.new(0, 18, 0, 18),
			Position = UDim2.new(0, 6, 0, 1),
			Image = client.MatIcons.Leaderboard,
			BackgroundTransparency = 1
		});
		v2:AddTitleButton({
			Text = "",
			ToolTip = "Game explorer",
			OnClick = function()
				client.Remote.Send("ProcessCommand", p2.CmdPrefix .. "explorer");
			end
		}):Add("ImageLabel", {
			Size = UDim2.new(0, 18, 0, 18),
			Position = UDim2.new(0, 6, 0, 1),
			Image = client.MatIcons.Folder,
			BackgroundTransparency = 1
		});
	end;
	if service.RunService:IsStudio() then
		local v9 = "Studio";
	elseif p2.PrivateServerId ~= "" then
		if p2.PrivateServerOwnerId ~= 0 then
			v9 = "Private";
		else
			v9 = "Reserved";
		end;
	else
		v9 = "Standard";
	end;
	local v10 = { { "Game ID", game.GameId }, { "Game Creator", service.MarketPlace:GetProductInfo(game.PlaceId).Creator.Name .. " (#" .. p2.CreatorId .. ")" }, { "Creator Type", game.CreatorType.Name }, { "Place ID", game.PlaceId }, { "Place Name", service.MarketPlace:GetProductInfo(game.PlaceId).Name and "[Error]" }, { "Place Version", game.PlaceVersion }, "", { "Server Job ID", game.JobId and "[Error]" }, { "Server Type", v9 }, "", { "Server Speed", math.round(service.Workspace:GetRealPhysicsFPS()) }, { "Server Age", p2.ServerAge }, { "Server Start Time", service.FormatTime(p2.ServerStartTime) } };
	if v9 == "Reserved" then
		table.insert(v10, 10, { "Private Server ID", p2.PrivateServerId });
	elseif v9 == "Private" then
		table.insert(v10, 10, { "Private Server ID", p2.PrivateServerId });
		table.insert(v10, 11, { "Private Server Owner", (service.Players:GetNameFromUserIdAsync(p2.PrivateServerOwnerId) and "[Unknown Username]") .. " (" .. p2.PrivateServerOwnerId .. ")" });
	end;
	local v11 = 0;
	local v12 = 0;
	for v13, v14 in ipairs(v10) do
		if type(v14) == "table" then
			v11 = v11 + 1;
			local v15 = {
				Name = v14[1],
				Text = "  " .. v14[1] .. ":",
				ToolTip = v14[3]
			};
			if v11 % 2 == 0 then
				local v16 = 0;
			else
				v16 = 0.2;
			end;
			v15.BackgroundTransparency = v16;
			v15.Size = UDim2.new(1, -10, 0, 30);
			v15.Position = UDim2.new(0, 5, 0, v12 + 5);
			v15.TextXAlignment = "Left";
			v4:Add("TextLabel", v15):Add("TextBox", {
				Text = v14[2],
				BackgroundTransparency = 1,
				AnchorPoint = Vector2.new(1, 0),
				Size = UDim2.new(1, -150, 1, 0),
				Position = UDim2.new(1, -5, 0, 0),
				TextXAlignment = "Right",
				TextEditable = false,
				ClearTextOnFocus = false
			});
			v12 = v12 + 30;
		else
			v12 = v12 + 10;
		end;
	end;
	v4:ResizeCanvas(false, true, false, false, 5, 5);
	spawn(function()
		while wait(0.5) do
			pcall(function()
				v4["Server Speed"].TextLabel.Text = math.round(service.Workspace:GetRealPhysicsFPS());
				v4["Server Age"].TextLabel.Text = service.FormatTime(os.time() - p2.ServerStartTime);
			end);
		end;
	end);
	v1 = function()
		local v17 = {};
		if p2.ServerInternetInfo then
			local l__ServerInternetInfo__18 = p2.ServerInternetInfo;
			for v19, v20 in ipairs({ { "Timezone", l__ServerInternetInfo__18.timezone and "[Error]" }, { "Country", l__ServerInternetInfo__18.country and "[Error]" }, { "Region", l__ServerInternetInfo__18.region and "[Error]" }, { "City", l__ServerInternetInfo__18.city and "[Error]" }, { "Zipcode", l__ServerInternetInfo__18.zipcode and "[Error]" }, { "IP Address", l__ServerInternetInfo__18.query and "[Error]" }, { "Coordinates", l__ServerInternetInfo__18.coords and "[Error]" } }) do
				table.insert(v17, v20);
			end;
		else
			table.insert(v17, { "ERROR: Server internet info failed to load" });
		end;
		local v21 = 1;
		for v22, v23 in ipairs(v17) do
			local v24 = {
				Text = "  " .. v23[1] .. ":",
				ToolTip = v23[3]
			};
			if v21 % 2 == 0 then
				local v25 = 0;
			else
				v25 = 0.2;
			end;
			v24.BackgroundTransparency = v25;
			v24.Size = UDim2.new(1, -10, 0, 30);
			v24.Position = UDim2.new(0, 5, 0, 30 * (v21 - 1) + 5);
			v24.TextXAlignment = "Left";
			v5:Add("TextLabel", v24):Add("TextLabel", {
				Text = v23[2],
				BackgroundTransparency = 1,
				AnchorPoint = Vector2.new(1, 0),
				Size = UDim2.new(1, -150, 1, 0),
				Position = UDim2.new(1, -5, 0, 0),
				TextXAlignment = "Right"
			});
			v21 = v21 + 1;
		end;
		v5:ResizeCanvas(false, true, false, false, 5, 5);
	end;
	if service.RunService:IsStudio() then
		local v26 = v5:Add("TextLabel", {
			Text = "Server location info has been hidden in a Studio environment for your privacy, since it may be based on your device's location.",
			BackgroundTransparency = 0.4,
			Size = UDim2.new(1, -10, 0, 80),
			Position = UDim2.new(0, 5, 0, 5),
			TextXAlignment = "Left",
			TextYAlignment = "Top",
			TextWrapped = true
		});
		v26:Add("UIPadding", {
			PaddingLeft = UDim.new(0, 5),
			PaddingRight = UDim.new(0, 5),
			PaddingTop = UDim.new(0, 5),
			PaddingBottom = UDim.new(0, 5)
		});
		v26:Add("ImageLabel", {
			Image = client.MatIcons["Privacy tip"],
			ImageTransparency = 0.2,
			BackgroundTransparency = 1,
			Size = UDim2.new(0, 24, 0, 24),
			Position = UDim2.new(1, -140, 1, -28)
		});
		local v27 = {
			Text = "Show Anyway",
			Size = UDim2.new(0, 110, 0, 30),
			Position = UDim2.new(1, -110, 1, -30),
			TextXAlignment = "Center"
		};
		function v27.OnClick()
			v1();
			v26:Destroy();
		end;
		v26:Add("TextButton", v27);
	else
		v1();
	end;
	local v28 = v6:Add("TextBox", {
		Size = UDim2.new(1, -10, 0, 25),
		Position = UDim2.new(0, 5, 0, 5),
		BackgroundTransparency = 0.5,
		BorderSizePixel = 0,
		TextColor3 = Color3.new(1, 1, 1),
		Text = "",
		TextStrokeTransparency = 0.8
	});
	v28:Add("ImageLabel", {
		Image = client.MatIcons.Search,
		Position = UDim2.new(1, -21, 0, 3),
		Size = UDim2.new(0, 18, 0, 18),
		ImageTransparency = 0.2,
		BackgroundTransparency = 1
	});
	local u2 = 0;
	local u3 = 0;
	local u4 = v6:Add("ScrollingFrame", {
		List = {},
		ScrollBarThickness = 2,
		BackgroundTransparency = 1,
		Position = UDim2.new(0, 5, 0, 32),
		Size = UDim2.new(1, -10, 1, -37)
	});
	local u5 = v28;
	local function u6(p3)
		u2 = 0;
		u3 = 0;
		local v29 = {};
		for v30, v31 in ipairs(service.Players:GetPlayers()) do
			table.insert(v29, v31.Name);
		end;
		table.sort(v29);
		local v32 = 1;
		u4:ClearAllChildren();
		for v33, v34 in ipairs(v29) do
			local v35 = service.Players:FindFirstChild(v34);
			if v35 and (v34:sub(1, #p3):lower() == p3:lower() or v35.DisplayName:sub(1, #p3):lower() == p3:lower()) then
				local v36 = {
					Text = "             " .. (v34 == v35.DisplayName and "@" .. v34 or v35.DisplayName .. " (@" .. v34 .. ")"),
					ToolTip = "User ID: " .. service.Players[v34].UserId .. " [Click to open profile]"
				};
				if v32 % 2 == 0 then
					local v37 = 0;
				else
					v37 = 0.2;
				end;
				v36.BackgroundTransparency = v37;
				v36.Size = UDim2.new(1, 0, 0, 30);
				v36.Position = UDim2.new(0, 0, 0, 30 * (v32 - 1) + 5);
				v36.TextXAlignment = "Left";
				function v36.OnClicked()
					client.Remote.Send("ProcessCommand", p2.CmdPlayerPrefix .. "profile" .. p2.SplitKey .. v34);
					v2:Close();
				end;
				local v38 = u4:Add("TextButton", v36);
				local v39 = p2.Admins and p2.Admins[v34];
				if v39 and v39 ~= "Player" then
					u3 = u3 + 1;
					if table.find(p2.Donors, v34) then
						v39 = v39 .. " | Donor";
					end;
					v38:Add("TextLabel", {
						Text = " " .. v39 .. "  ",
						BackgroundTransparency = 1,
						Size = UDim2.new(0, 120, 1, 0),
						Position = UDim2.new(1, -120, 0, 0),
						TextXAlignment = "Right"
					});
				elseif table.find(p2.Donors, v34) then
					u2 = u2 + 1;
					v38:Add("TextLabel", {
						Text = " Donor  ",
						BackgroundTransparency = 1,
						Size = UDim2.new(0, 120, 1, 0),
						Position = UDim2.new(1, -120, 0, 0),
						TextXAlignment = "Right"
					});
				else
					u2 = u2 + 1;
				end;
				spawn(function()
					v38:Add("ImageLabel", {
						Image = service.Players:GetUserThumbnailAsync(service.Players[v34].UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size48x48),
						BackgroundTransparency = 1,
						Size = UDim2.new(0, 30, 0, 30),
						Position = UDim2.new(0, 0, 0, 0)
					});
				end);
				v32 = v32 + 1;
			end;
		end;
		u4:ResizeCanvas(false, true, false, false, 5, 5);
		u5.PlaceholderText = "Players: " .. u2 .. (p2.Admins and " | Admins: " .. u3 or "") .. " | Donors: " .. #p2.Donors;
	end;
	u5:GetPropertyChangedSignal("Text"):Connect(function()
		u6(u5.Text);
	end);
	u6("");
	u5 = p2.WorkspaceInfo;
	if u5 then
		u5 = 0;
		u4 = 0;
		for v40, v41 in ipairs({ { "Streaming Enabled", u1(service.Workspace.StreamingEnabled) }, { "Interpolation Throttling", service.Workspace.InterpolationThrottling.Name }, { "Gravity", service.Workspace.Gravity }, { "Fallen Parts Destroy Height", service.Workspace.FallenPartsDestroyHeight }, { "Objects", p2.WorkspaceInfo.ObjectCount }, { "Cameras", p2.WorkspaceInfo.CameraCount }, { "Nil Players", p2.WorkspaceInfo.NilPlayerCount }, "", { "HTTP Service Enabled", u1(p2.WorkspaceInfo.HttpEnabled) }, { "Loadstring Enabled", u1(p2.WorkspaceInfo.LoadstringEnabled) }, "" }) do
			if type(v41) == "table" then
				u5 = u5 + 1;
				local v42 = {
					Name = v41[1],
					Text = "  " .. v41[1] .. ":",
					ToolTip = v41[3]
				};
				if u5 % 2 == 0 then
					local v43 = 0;
				else
					v43 = 0.2;
				end;
				v42.BackgroundTransparency = v43;
				v42.Size = UDim2.new(1, -10, 0, 25);
				v42.Position = UDim2.new(0, 5, 0, u4 + 5);
				v42.TextXAlignment = "Left";
				v7:Add("TextLabel", v42):Add("TextLabel", {
					Text = v41[2],
					BackgroundTransparency = 1,
					AnchorPoint = Vector2.new(1, 0),
					Size = UDim2.new(1, -150, 1, 0),
					Position = UDim2.new(1, -5, 0, 0),
					TextXAlignment = "Right"
				});
				u4 = u4 + 25;
			else
				u4 = u4 + 10;
			end;
		end;
		v7:Add("TextLabel", {
			Text = "Click on the title bar buttons to view technical performance statistics or to open the game hierarchy explorer.",
			TextWrapped = true,
			TextYAlignment = "Top",
			BackgroundTransparency = 1,
			Size = UDim2.new(1, -10, 0, 40),
			Position = UDim2.new(0, 5, 0, u4 + 10)
		});
		v7:ResizeCanvas(false, true, false, false, 5, 5);
	else
		u4 = v7;
		u5 = v7.Disable;
		u5(u4);
	end;
	u4 = v2;
	u5 = v2.Ready;
	u5(u4);
end;


Prompt:
--[=[
	Utility functions involving attributes.
	@class RxAttributeUtils
]=]

Response:
local require = require(script.Parent.loader).load(script)

local Observable = require("Observable")
local Maid = require("Maid")

local RxAttributeUtils = {}


Prompt:
--[=[
	Adds a recursive child writer to use at the key `name`
	@param name string
	@param writer DataStoreWriter
]=]

Response:
function DataStoreWriter:AddWriter(name, writer)
	assert(type(name) == "string", "Bad name")
	assert(not self._writers[name], "Writer already exists for name")
	assert(writer, "Bad writer")

	self._writers[name] = writer
end


Prompt:
--[=[
	Gives a task to the maid for cleanup and returnsthe resulting value

	@param task MaidTask -- An item to clean
	@return MaidTask
]=]

Response:
function Maid:Add(task)
	if not task then
		error("Task cannot be false or nil", 2)
	end

	self[#self._tasks+1] = task

	if type(task) == "table" and (not task.Destroy) then
		warn("[Maid.GiveTask] - Gave table task without .Destroy\n\n" .. debug.traceback())
	end

	return task
end


Response:
if f1==1 then f1=0
	local b=script.b:Clone()
	b.Parent=script.Parent.PS.bu
	b.Position=UDim2.new(0,po1.X+8,0,po1.Y+6)
	b.BackgroundColor3=p1.BackgroundColor3
	b.inf.Value=Vector3.new(1,y1)
end
if z1==0 and s1==0 then
po1=po1+Vector3.new(x1,y1)/3 end
po1=po1.X<0 and Vector3.new(0,po1.Y)or po1
po1=po1.X>26 and Vector3.new(26,po1.Y)or po1
po1=po1.Y<0 and Vector3.new(po1.X,0)or po1
po1=po1.Y>25 and Vector3.new(po1.X,25)or po1
p1.Position=UDim2.new(0,po1.X,0,po1.Y)
local fr1,fr2='b'
if s1==1 then fr1='k'fr2='k'print'AAA'
elseif z1==1 then
fr1='b2'
fr2=y1==0 and's1'or y1==1 and's3'or's2'
elseif math.abs(x1)+math.abs(y1)>0 then
fr1='b'
fr2=math.sin(tick()*8)>0 and'l1'or'l2'
else
fr1='b'
fr2='l2'
end
for _,v in pairs(p1:GetChildren())do
if v.Name==fr1 or v.Name==fr2 then
v.Visible=true else v.Visible=false
end end


Prompt: --Calculates an angle in relation to another part.

Response:
function core.findAngle(pos1,pos2,part)
	local yOrientation = part.Orientation.Y
	local rot = math.atan2(pos2.Z-pos1.Z, pos2.X-pos1.X)

	local desiredAngle = math.deg(rot)+yOrientation+90
	if desiredAngle > 180 then
		desiredAngle = -(360-desiredAngle)
	elseif desiredAngle <-180 then
		desiredAngle = 360+desiredAngle
	end

	return desiredAngle
end

function core.findPitch(pos1,pos2,part)
	local xOrientation = part.Orientation.X
	local rot = math.atan2(pos2.Y-pos1.Y, math.abs(pos2.Z-pos1.Z))

	local desiredAngle = math.deg(rot)+xOrientation
	if desiredAngle > 180 then
		desiredAngle = -(360-desiredAngle)
	elseif desiredAngle <-180 then
		desiredAngle = 360+desiredAngle
	end

	return desiredAngle
end

function core.tempAttach(pos,life)
	local attach = Instance.new("Attachment")
	attach.WorldPosition = pos
	attach.Parent = workspace.Terrain

	debrisService:AddItem(attach,life)

	return attach
end

function core.playSound(sound,pos)
	local attach = core.tempAttach(pos,sound.TimeLength)
	local soundClone = sound:Clone()
	soundClone.Parent = attach
	soundClone:Play()
end

return core


Prompt:
--[[**
	ensures Roblox Color3 type

	@param value The value to check against

	@returns True iff the condition is satisfied, false otherwise
**--]]

Response: t.Color3 = t.typeof("Color3")


Prompt: --[[ Public API ]]

Response:
--
function TouchJump:Enable()
	ExternallyEnabled = true
	enableButton()
end

function TouchJump:Disable()
	ExternallyEnabled = false
	disableButton()
end

function TouchJump:Create(parentFrame)
	if JumpButton then
		JumpButton:Destroy()
		JumpButton = nil
	end

	local minAxis = math.min(parentFrame.AbsoluteSize.x, parentFrame.AbsoluteSize.y)
	local isSmallScreen = minAxis <= 500
	local jumpButtonSize = isSmallScreen and 70 or 120

	JumpButton = Instance.new('ImageButton')
	JumpButton.Name = "JumpButton"
	JumpButton.Visible = false
	JumpButton.BackgroundTransparency = 1
	JumpButton.Image = TOUCH_CONTROL_SHEET
	JumpButton.ImageRectOffset = Vector2.new(1, 146)
	JumpButton.ImageRectSize = Vector2.new(144, 144)
	JumpButton.Size = UDim2.new(0, jumpButtonSize, 0, jumpButtonSize)

    JumpButton.Position = isSmallScreen and UDim2.new(1, -(jumpButtonSize*1.5-10), 1, -jumpButtonSize - 20) or
        UDim2.new(1, -(jumpButtonSize*1.5-10), 1, -jumpButtonSize * 1.75)

	local touchObject = nil
	JumpButton.InputBegan:connect(function(inputObject)
		--A touch that starts elsewhere on the screen will be sent to a frame's InputBegan event
		--if it moves over the frame. So we check that this is actually a new touch (inputObject.UserInputState ~= Enum.UserInputState.Begin)
		if touchObject or inputObject.UserInputType ~= Enum.UserInputType.Touch
			or inputObject.UserInputState ~= Enum.UserInputState.Begin then
			return
		end

		touchObject = inputObject
		JumpButton.ImageRectOffset = Vector2.new(146, 146)
		MasterControl:SetIsJumping(true)
	end)

	OnInputEnded = function()
		touchObject = nil
		MasterControl:SetIsJumping(false)
		JumpButton.ImageRectOffset = Vector2.new(1, 146)
	end

	JumpButton.InputEnded:connect(function(inputObject)
		if inputObject == touchObject then
			OnInputEnded()
		end
	end)

	GuiService.MenuOpened:connect(function()
		if touchObject then
			OnInputEnded()
		end
	end)

	if not CharacterAddedConnection then
		setupCharacterAddedFunction()
	end

	JumpButton.Parent = parentFrame
end

return TouchJump


Prompt: --Dont touch

Response:
ZR15RightLegPointZero = 0
XR15RightLegPointZero = 0
YR15RightLegPointZero = 0
R15RightKneePointZero = 0

ZR15RightArmPointZero = 0
YR15RightArmPointZero = 0
XR15RightArmPointZero = 0
R15RightElbowPointZero = 0

ZR15LeftLegPointZero = 0
XR15LeftLegPointZero = 0
YR15LeftLegPointZero = 0
R15LeftKneePointZero = 0

ZR15LeftArmPointZero = 0
YR15LeftArmPointZero = 0
XR15LeftArmPointZero = 0
R15LeftElbowPointZero = 0

ZR15LowerTorsoPointZero = 0
XR15LowerTorsoPointZero = 0
YR15LowerTorsoPointZero = 0
ZR15UpperTorsoPointZero = 0

bike.DriveSeat.ChildRemoved:connect(function(child)
	handler:FireServer("RemovePlayer",C,child)
end)

handler:FireServer("CreatePlayer",C)


Prompt: --New pattern

Response:
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 0
		wait(0.05)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 1
		wait(0.05)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 0
		wait(0.05)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 1
		wait(0.05)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 1
		wait(0.02)

		--New pattern

		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)

		--New Pattern

		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)

		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)

		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)
		MainVeh.TDI1.Transparency = 1
		MainVeh.TDI2.Transparency = 1
		MainVeh.TDI3.Transparency = 1
		MainVeh.TDI4.Transparency = 1
		MainVeh.TDI5.Transparency = 0
		MainVeh.TDI6.Transparency = 0
		MainVeh.TDI7.Transparency = 0
		MainVeh.TDI8.Transparency = 0
		wait(0.02)
		MainVeh.TDI1.Transparency = 0
		MainVeh.TDI2.Transparency = 0
		MainVeh.TDI3.Transparency = 0
		MainVeh.TDI4.Transparency = 0
		MainVeh.TDI5.Transparency = 1
		MainVeh.TDI6.Transparency = 1
		MainVeh.TDI7.Transparency = 1
		MainVeh.TDI8.Transparency = 1
		wait(0.02)

	else
	MainVeh.TDI1.Transparency = 1
	MainVeh.TDI2.Transparency = 1
	MainVeh.TDI3.Transparency = 1
	MainVeh.TDI4.Transparency = 1
	MainVeh.TDI5.Transparency = 1
	MainVeh.TDI6.Transparency = 1
	MainVeh.TDI7.Transparency = 1
	MainVeh.TDI8.Transparency = 1
end
end


Prompt:
--[[**
	<description>
	Run this once to combine all keys provided into one "main key".
	Internally, this means that data will be stored in a table with the key mainKey.
	This is used to get around the 2-DataStore2 reliability caveat.
	</description>

	<parameter name = "mainKey">
	The key that will be used to house the table.
	</parameter>

	<parameter name = "...">
	All the keys to combine under one table.
	</parameter>
**--]]

Response:
function DataStore2.Combine(mainKey, ...)
	for _, name in pairs({...}) do
		combinedDataStoreInfo[name] = mainKey
	end
end

function DataStore2.ClearCache()
	DataStoreCache = {}
end

function DataStore2:__call(dataStoreName, player)
	assert(typeof(dataStoreName) == "string" and typeof(player) == "Instance", ("DataStore2() API call expected {string dataStoreName, Instance player}, got {%s, %s}"):format(typeof(dataStoreName), typeof(player)))
	if DataStoreCache[player] and DataStoreCache[player][dataStoreName] then
		return DataStoreCache[player][dataStoreName]
	elseif combinedDataStoreInfo[dataStoreName] then
		local dataStore = DataStore2(combinedDataStoreInfo[dataStoreName], player)

		dataStore:BeforeSave(function(combinedData)
			for key in pairs(combinedData) do
				if combinedDataStoreInfo[key] then
					local combinedStore = DataStore2(key, player)
					local value = combinedStore:Get(nil, true)
					if value ~= nil then
						if combinedStore.combinedBeforeSave then
							value = combinedStore.combinedBeforeSave(clone(value))
						end
						combinedData[key] = value
					end
				end
			end

			return combinedData
		end)

		local combinedStore = setmetatable({
			combinedName = dataStoreName,
			combinedStore = dataStore
		}, {
			__index = function(self, key)
				return CombinedDataStore[key] or dataStore[key]
			end
		})

		if not DataStoreCache[player] then
			DataStoreCache[player] = {}
		end

		DataStoreCache[player][dataStoreName] = combinedStore
		return combinedStore
	end

	local dataStore = {}

	dataStore.Name = dataStoreName
	dataStore.UserId = player.UserId

	dataStore.callbacks = {}
	dataStore.beforeInitialGet = {}
	dataStore.afterSave = {}
	dataStore.bindToClose = {}
	dataStore.savingMethod = SavingMethods.OrderedBackups.new(dataStore)

	setmetatable(dataStore, DataStoreMetatable)

	local event, fired = Instance.new("BindableEvent"), false

	game:BindToClose(function()
		if not fired then
			event.Event:wait()
		end

		local value = dataStore:Get(nil, true)

		for _, bindToClose in pairs(dataStore.bindToClose) do
			bindToClose(player, value)
		end
	end)

	local playerLeavingConnection
	playerLeavingConnection = player.AncestryChanged:Connect(function()
		if player:IsDescendantOf(game) then return end
		playerLeavingConnection:Disconnect()
		dataStore:Save()
		event:Fire()
		fired = true

		delay(40, function() --Give a long delay for people who haven't figured out the cache :^(
			DataStoreCache[player] = nil
		end)
	end)

	if not DataStoreCache[player] then
		DataStoreCache[player] = {}
	end

	DataStoreCache[player][dataStoreName] = dataStore

	return dataStore
end

return setmetatable(DataStore2, DataStore2)


Prompt: -- Local Variables

Response:
local IntermissionRunning = false
local EnoughPlayers = false
local GameRunning = false
local Events = game.ReplicatedStorage.Events


Prompt: -- functions

Response:
function stopAllAnimations()
	local oldAnim = currentAnim

	-- return to idle if finishing an emote
	if (emoteNames[oldAnim] ~= nil and emoteNames[oldAnim] == false) then
		oldAnim = "idle"
	end

	if FFlagAnimateScriptEmoteHook and currentlyPlayingEmote then
		oldAnim = "idle"
		currentlyPlayingEmote = false
	end

	currentAnim = ""
	currentAnimInstance = nil
	if (currentAnimKeyframeHandler ~= nil) then
		currentAnimKeyframeHandler:disconnect()
	end

	if (currentAnimTrack ~= nil) then
		currentAnimTrack:Stop()
		currentAnimTrack:Destroy()
		currentAnimTrack = nil
	end

	-- clean up walk if there is one
	if (runAnimKeyframeHandler ~= nil) then
		runAnimKeyframeHandler:disconnect()
	end

	if (runAnimTrack ~= nil) then
		runAnimTrack:Stop()
		runAnimTrack:Destroy()
		runAnimTrack = nil
	end

	return oldAnim
end

function getHeightScale()
	if Humanoid then
		if not Humanoid.AutomaticScalingEnabled then
			return 1
		end

		local scale = Humanoid.HipHeight / HumanoidHipHeight
		if AnimationSpeedDampeningObject == nil then
			AnimationSpeedDampeningObject = script:FindFirstChild("ScaleDampeningPercent")
		end
		if AnimationSpeedDampeningObject ~= nil then
			scale = 1 + (Humanoid.HipHeight - HumanoidHipHeight) * AnimationSpeedDampeningObject.Value / HumanoidHipHeight
		end
		return scale
	end
	return 1
end

local function rootMotionCompensation(speed)
	local speedScaled = speed * 1.25
	local heightScale = getHeightScale()
	local runSpeed = speedScaled / heightScale
	return runSpeed
end

local smallButNotZero = 0.0001
local function setRunSpeed(speed)
	local normalizedWalkSpeed = 0.5 -- established empirically using current `913402848` walk animation
	local normalizedRunSpeed  = 1
	local runSpeed = rootMotionCompensation(speed)

	local walkAnimationWeight = smallButNotZero
	local runAnimationWeight = smallButNotZero
	local walkAnimationTimewarp = runSpeed/normalizedWalkSpeed
	local runAnimationTimerwarp = runSpeed/normalizedRunSpeed

	if runSpeed <= normalizedWalkSpeed then
		walkAnimationWeight = 1
	elseif runSpeed < normalizedRunSpeed then
		local fadeInRun = (runSpeed - normalizedWalkSpeed)/(normalizedRunSpeed - normalizedWalkSpeed)
		walkAnimationWeight = 1 - fadeInRun
		runAnimationWeight  = fadeInRun
		walkAnimationTimewarp = 1
		runAnimationTimerwarp = 1
	else
		runAnimationWeight = 1
	end
	currentAnimTrack:AdjustWeight(walkAnimationWeight)
	runAnimTrack:AdjustWeight(runAnimationWeight)
	currentAnimTrack:AdjustSpeed(walkAnimationTimewarp)
	runAnimTrack:AdjustSpeed(runAnimationTimerwarp)
end

function setAnimationSpeed(speed)
	if currentAnim == "walk" then
			setRunSpeed(speed)
	else
		if speed ~= currentAnimSpeed then
			currentAnimSpeed = speed
			currentAnimTrack:AdjustSpeed(currentAnimSpeed)
		end
	end
end

function keyFrameReachedFunc(frameName)
	if (frameName == "End") then
		if currentAnim == "walk" then
			if userNoUpdateOnLoop == true then
				if runAnimTrack.Looped ~= true then
					runAnimTrack.TimePosition = 0.0
				end
				if currentAnimTrack.Looped ~= true then
					currentAnimTrack.TimePosition = 0.0
				end
			else
				runAnimTrack.TimePosition = 0.0
				currentAnimTrack.TimePosition = 0.0
			end
		else
			local repeatAnim = currentAnim
			-- return to idle if finishing an emote
			if (emoteNames[repeatAnim] ~= nil and emoteNames[repeatAnim] == false) then
				repeatAnim = "idle"
			end

			if FFlagAnimateScriptEmoteHook and currentlyPlayingEmote then
				if currentAnimTrack.Looped then
					-- Allow the emote to loop
					return
				end

				repeatAnim = "idle"
				currentlyPlayingEmote = false
			end

			local animSpeed = currentAnimSpeed
			playAnimation(repeatAnim, 0.15, Humanoid)
			setAnimationSpeed(animSpeed)
		end
	end
end

function rollAnimation(animName)
	local roll = math.random(1, animTable[animName].totalWeight)
	local origRoll = roll
	local idx = 1
	while (roll > animTable[animName][idx].weight) do
		roll = roll - animTable[animName][idx].weight
		idx = idx + 1
	end
	return idx
end

local function switchToAnim(anim, animName, transitionTime, humanoid)
	-- switch animation
	if (anim ~= currentAnimInstance) then

		if (currentAnimTrack ~= nil) then
			currentAnimTrack:Stop(transitionTime)
			currentAnimTrack:Destroy()
		end

		if (runAnimTrack ~= nil) then
			runAnimTrack:Stop(transitionTime)
			runAnimTrack:Destroy()
			if userNoUpdateOnLoop == true then
				runAnimTrack = nil
			end
		end

		currentAnimSpeed = 1.0

		-- load it to the humanoid; get AnimationTrack
		currentAnimTrack = humanoid:LoadAnimation(anim)
		currentAnimTrack.Priority = Enum.AnimationPriority.Core

		-- play the animation
		currentAnimTrack:Play(transitionTime)
		currentAnim = animName
		currentAnimInstance = anim

		-- set up keyframe name triggers
		if (currentAnimKeyframeHandler ~= nil) then
			currentAnimKeyframeHandler:disconnect()
		end
		currentAnimKeyframeHandler = currentAnimTrack.KeyframeReached:connect(keyFrameReachedFunc)

		-- check to see if we need to blend a walk/run animation
		if animName == "walk" then
			local runAnimName = "run"
			local runIdx = rollAnimation(runAnimName)

			runAnimTrack = humanoid:LoadAnimation(animTable[runAnimName][runIdx].anim)
			runAnimTrack.Priority = Enum.AnimationPriority.Core
			runAnimTrack:Play(transitionTime)

			if (runAnimKeyframeHandler ~= nil) then
				runAnimKeyframeHandler:disconnect()
			end
			runAnimKeyframeHandler = runAnimTrack.KeyframeReached:connect(keyFrameReachedFunc)
		end
	end
end

function playAnimation(animName, transitionTime, humanoid)
	local idx = rollAnimation(animName)
	local anim = animTable[animName][idx].anim

	switchToAnim(anim, animName, transitionTime, humanoid)
	currentlyPlayingEmote = false
end

function playEmote(emoteAnim, transitionTime, humanoid)
	switchToAnim(emoteAnim, emoteAnim.Name, transitionTime, humanoid)
	currentlyPlayingEmote = true
end


Response:
local Grenade = script.Parent
local GrenadeScript = WaitFor(Grenade).GrenadeScript()
local Creator = WaitFor(GrenadeScript).creator().Value
local ExplodeSound = WaitFor(Grenade).ExplodeSound()
local Character = Creator.Character


Prompt:
--[[
	Issues a warning with an automatically attached stack trace.
]]

Response:
function Logging.warn(messageTemplate, ...)
	local message = messageTemplate:format(...)

	for collector in pairs(collectors) do
		table.insert(collector.warnings, message)
	end

	-- debug.traceback inserts a leading newline, so we trim it here
	local trace = debug.traceback("", 2):sub(2)
	local fullMessage = ("%s\n%s"):format(message, indent(trace, 1))

	if outputEnabled then
		warn(fullMessage)
	end
end


Prompt: -- Roact

Response:
local new = Roact.createElement
local SelectionButton = require(script.Parent:WaitForChild('SelectionButton'))


Prompt: -- not code

Response:
local PurplePlayers = script.Parent.PurplePlayers
local OrangePlayers = script.Parent.OrangePlayers
function newgame()

	matchStarted = true

	wait(3)

	for i, player in pairs(game.Teams["Orange Team"]:GetPlayers()) do
	player.Character:MoveTo(game.Workspace.OrangeTeleport.CFrame.p)
	end

	for i, player in pairs(game.Teams["Purple Team"]:GetPlayers()) do
		player.Character:MoveTo(game.Workspace.PurpleTeleport.CFrame.p)
	end

	-- clear dodgebool
	game.Workspace.DodgeBalls:ClearAllChildren()

	--redo
	for i, ballSpawn in ipairs(game.Workspace.DodgeBallSpawns:GetChildren()) do
		local newBall = game.Workspace.DogeBall:Clone()
		newBall.Parent = game.Workspace.DodgeBalls
		newBall.Handle.CFrame = ballSpawn.CFrame
	end

	PurplePlayers.Value = table.getn(game.Teams['Orange Team']:GetPlayers())
	OrangePlayers.Value = table.getn(game.Teams['Purple Team']:GetPlayers())

	for i, sparkler in ipairs(game.Workspace.Sparklers:GetChildren()) do
		sparkler.Sparkles.Enabled = false
	end

end
while true do

	if matchStarted then

		if PurplePlayers.Value <= 0 then

			for i, sparkler in ipairs(game.Workspace.Sparklers:GetChildren()) do
				sparkler.Sparkles.Enabled = true
				sparkler.Sparkles.SparkleColor = Color3.fromRGB(255, 162, 0)
			end

			matchStarted = false

			wait(3)
		elseif OrangePlayers.Value <= 0 then
			for i, sparkler in ipairs(game.Workspace.Sparklers:GetChildren()) do
				sparkler.Sparkles.Enabled = true
				sparkler.Sparkles.SparkleColor = Color3.fromRGB(138, 0, 126)
			end

			--redo
			--for i, ballSpawn in ipairs(game.Workspace.DodgeBallSpawns:GetChildren()) do
			--	local newBall = game.Workspace.DogeBall:Clone()
			--	newBall.Parent = game.Workspace.DodgeBalls
			--	newBall.Handle.CFrame = ballSpawn.CFrame
			--end

			matchStarted = false

			wait(3)

		end

	else

		local purplePlayers = table.getn(game.Teams["Purple Team"]:GetPlayers())
		local orangePlayers = table.getn(game.Teams["Orange Team"]:GetPlayers())

			if purplePlayers > 0 and orangePlayers > 0 then

			newgame()

			end

	end

	wait(0.5)

end