Roblox/luau_corpus huggingface dataset:
--calls
caf.Call1.Changed:Connect(function()
	if vaf.Moving.Value == true then
	else
		if vaf.IsOnFirstFloor.Value == true then
			caf.Call1.Value = false
		else
			caf.Call1.Value = false
			vaf.Moving.Value = true
			--
			door2.Close:Fire()
			wait(sef.DoorMoveTime.Value)
			wait(sef.StartMovingDelayTime.Value)
			elev2.SoundBrick.Brick.MoveSound:Play()
			elev1.SoundBrick.Brick.MoveSound:Play()
			elev1.SoundBrick.Brick.MoveSound.Volume = 0
			wait(sef.TravelTime.Value)
			elev2.TeleportBrick.CanTouch = true
			wait(0.2)
			elev2.TeleportBrick.CanTouch = false
			elev2.SoundBrick.Brick.MoveSound:Stop()
			elev1.SoundBrick.Brick.MoveSound.Volume = sef.DefaultMoveSoundLoudness.Value
			wait(sef.DoorDelayTime.Value)
			door1.Open:Fire()
			--
			vaf.Moving.Value = false
			vaf.IsOnFirstFloor.Value = true
		end
	end
end)

caf.Call2.Changed:Connect(function()
	if vaf.Moving.Value == true then
	else
		if vaf.IsOnFirstFloor.Value == false then
			caf.Call2.Value = false
		else
			caf.Call2.Value = false
			vaf.Moving.Value = true
			--
			door1.Close:Fire()
			wait(sef.DoorMoveTime.Value)
			wait(sef.StartMovingDelayTime.Value)
			elev1.SoundBrick.Brick.MoveSound:Play()
			elev2.SoundBrick.Brick.MoveSound:Play()
			elev2.SoundBrick.Brick.MoveSound.Volume = 0
			vaf.Moving.Value = true
			wait(sef.TravelTime.Value)
			elev1.TeleportBrick.CanTouch = true
			wait(0.2)
			elev1.TeleportBrick.CanTouch = false
			elev1.SoundBrick.Brick.MoveSound:Stop()
			elev2.SoundBrick.Brick.MoveSound.Volume = sef.DefaultMoveSoundLoudness.Value
			wait(sef.DoorDelayTime.Value)
			door2.Open:Fire()
			--
			vaf.Moving.Value = false
			vaf.IsOnFirstFloor.Value = false
		end
	end
end)
---Basic_Settings:---
local light = true -- Set to false if u dont have light added
local maxv = 150 -- Max Speed In REAL KT.. Check Online for the real Aviation speed for this plane
local minspeed = -30 -- min speed In real KT 
local Spd_keep = true-- Set to false if U dont want the function to Speed up/down if u hold M/N down, and after release it stops
-- ROBLOX deviation: toBeFalsy checks for Lua falsy values, not JS falsy values
local function toBeFalsy(
	-- ROBLOX deviation: self param in Lua needs to be explicitely defined
	self: MatcherState,
	received: any,
	expected: nil
)
	local matcherName = "toBeFalsy"
	local options: MatcherHintOptions = {
		isNot = self.isNot,
		promise = self.promise,
	}
	ensureNoExpected(expected, matcherName, options)

	local pass = not received

	local message = function()
		return matcherHint(matcherName, nil, "", options)
			.. "\n\n"
			.. string.format("Received: %s", printReceived(received))
	end

	return { message = message, pass = pass }
end

local function toBeGreaterThan(
	-- ROBLOX deviation: self param in Lua needs to be explicitely defined
	self: MatcherState,
	received: number,
	expected: number
)
	local matcherName = "toBeGreaterThan"
	local isNot = self.isNot
	local options: MatcherHintOptions = {
		isNot = isNot,
		promise = self.promise,
	}
	ensureNumbers(received, expected, matcherName, options)

	local pass = received > expected

	local message = function()
		return matcherHint(matcherName, nil, nil, options)
			.. "\n\n"
			.. string.format("Expected:%s > %s\n", isNot and " never" or "", printExpected(expected))
			.. string.format("Received:%s   %s", isNot and "      " or "", printReceived(received))
	end

	return { message = message, pass = pass }
end

local function toBeGreaterThanOrEqual(
	-- ROBLOX deviation: self param in Lua needs to be explicitely defined
	self: MatcherState,
	received: number,
	expected: number
)
	local matcherName = "toBeGreaterThanOrEqual"
	local isNot = self.isNot
	local options: MatcherHintOptions = {
		isNot = isNot,
		promise = self.promise,
	}
	ensureNumbers(received, expected, matcherName, options)

	local pass = received >= expected

	local message = function()
		return matcherHint(matcherName, nil, nil, options)
			.. "\n\n"
			.. string.format("Expected:%s >= %s\n", isNot and " never" or "", printExpected(expected))
			.. string.format("Received:%s    %s", isNot and "      " or "", printReceived(received))
	end

	return { message = message, pass = pass }
end
--[=[
	Callable to allow manual GC so things can properly clean up.
	This can be used to pre-emptively cleanup players.

	@param player Player
]=]
function PlayerDataStoreManager:RemovePlayerDataStore(player)
	self:_removePlayerDataStore(player)
end
--[[Engine]]
	--Torque Curve
	Tune.Horsepower		= 650		--	[TORQUE CURVE VISUAL]
	Tune.IdleRPM		= 700		--		https://www.desmos.com/calculator/2uo3hqwdhf
	Tune.PeakRPM		= 11000		--		Use sliders to manipulate values
	Tune.Redline		= 13000		--		Copy and paste slider values into the respective tune values
	Tune.EqPoint		= 5500
	Tune.PeakSharpness	= 7.5
	Tune.CurveMult		= 0.16
	
	--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)
--[=[
	Returns whether the attribute is a valid type or not for an attribute.

	```lua
	print(AttributeUtils.isValidAttributeType(typeof("hi"))) --> true
	```

	@param valueType string
	@return boolean
]=]
function AttributeUtils.isValidAttributeType(valueType)
	return VALID_ATTRIBUTE_TYPES[valueType] == true
end
-- To display lines of labeled values as two columns with monospac alignment:
-- given the strings which will describe the values,
-- return function which given each string, returns the label:
-- stirng, colon, space, and enough padding spaces to align the value.

type PrintLabel = (string) -> string
--- Overwrites a table's value
-- @function Table.deepOverwrite
-- @tparam table target Target table
-- @tparam table source Table to read from
-- @treturn table target
local function deepOverwrite(target, source)
	for index, value in pairs(source) do
		if type(target[index]) == "table" and type(value) == "table" then
			target[index] = deepOverwrite(target[index], value)
		else
			target[index] = value
		end
	end
	return target
end
Table.deepOverwrite = deepOverwrite
--script.Parent.AAA.Velocity = script.Parent.AAA.CFrame.lookVector *script.Parent.Speed.Value
script.Parent.AAAA.Velocity = script.Parent.AAAA.CFrame.lookVector *script.Parent.Speed.Value
script.Parent.B.Velocity = script.Parent.B.CFrame.lookVector *script.Parent.Speed.Value
script.Parent.BB.Velocity = script.Parent.BB.CFrame.lookVector *script.Parent.Speed.Value
--// Touch Connections
L_3_:WaitForChild('Humanoid').Touched:connect(function(L_261_arg1)
	local L_262_, L_263_ = SearchResupply(L_261_arg1)
	if L_262_ then
		L_78_ = L_23_.Ammo
		L_79_ = L_23_.StoredAmmo * L_23_.MagCount
		if L_40_:FindFirstChild('Resupply') then
			L_40_.Resupply:Play()
		end
	end;
end)
-- Decompiled with the Synapse X Luau decompiler.

return {
	Name = "math", 
	Aliases = {}, 
	Description = "Perform a math operation on 2 values.", 
	Group = "DefaultUtil", 
	AutoExec = { "alias \"+|Perform an addition.\" math + $1{number|Number} $2{number|Number}", "alias \"-|Perform a subtraction.\" math - $1{number|Number} $2{number|Number}", "alias \"*|Perform a multiplication.\" math * $1{number|Number} $2{number|Number}", "alias \"/|Perform a division.\" math / $1{number|Number} $2{number|Number}", "alias \"**|Perform an exponentiation.\" math ** $1{number|Number} $2{number|Number}", "alias \"%|Perform a modulus.\" math % $1{number|Number} $2{number|Number}" }, 
	Args = { {
			Type = "mathOperator", 
			Name = "Operation", 
			Description = "A math operation."
		}, {
			Type = "number", 
			Name = "Value", 
			Description = "A number value."
		}, {
			Type = "number", 
			Name = "Value", 
			Description = "A number value."
		} }, 
	ClientRun = function(p1, p2, p3, p4)
		return p2.Perform(p3, p4);
	end
};
-- Placeholder texture can be any roblox asset link
local initialTexture = ""

local RowCount = 4
local ColCount = 4
local perImageSpriteCount = RowCount * ColCount
local width = 256
local height = 256

local framesInTotal = 15
assert(numImages * RowCount * ColCount >= framesInTotal)

local animPeriod = 1 -- period for the whole animation, in seconds
assert(animPeriod > 0)

local curImageIdx = 0
local curSpriteIdx = 0

local fps = framesInTotal / animPeriod
local accumulatedTime = 0

local function AnimateImageSpriteSheet(dt)
	accumulatedTime = math.fmod(accumulatedTime + dt, animPeriod)
	curSpriteIdx = math.floor(accumulatedTime * fps)

	local prevImageIndex = curImageIdx
	curImageIdx = math.floor(curSpriteIdx / perImageSpriteCount)
	if prevImageIndex ~= curImageIdx then
		imageInstance.Image = imageAssetIDs[curImageIdx + 1]
	end

	local localSpriteIndex = curSpriteIdx - curImageIdx * perImageSpriteCount
	local row = math.floor(localSpriteIndex / ColCount)
	local col = localSpriteIndex - row * ColCount
	imageInstance.ImageRectOffset = Vector2.new(col * width, row * height)
end

Animator.Connection = nil

Animator.Init = function()
	Animator.Connection = game:GetService("RunService").RenderStepped:Connect(AnimateImageSpriteSheet)
end

Animator.Stop = function()
	if Animator.Connection then
		imageInstance.Image = initialTexture
		Animator.Connection:Disconnect()
	end
end


return Animator
--//Connections
event.OnClientEvent:Connect(function(jumpingPlr)
	if jumpingPlr == player then return end --Don't player the effect again for our own player
	
	local jumpingChar = jumpingPlr.Character or jumpingPlr.CharacterAdded:Wait()
	JumpEffect(jumpingChar)
end)
--[[
		___      _______                _     
	   / _ |____/ ___/ /  ___ ____ ___ (_)__ 
	  / __ /___/ /__/ _ \/ _ `(_-<(_-</ (_-<
	 /_/ |_|   \___/_//_/\_,_/___/___/_/___/
 						SecondLogic @ Inspare
]]
local FE = workspace.FilteringEnabled
local car = script.Parent.Car.Value
local handler = car:WaitForChild("AC6_FE_SoundsMisc")
local _Tune = require(car["A-Chassis Tune"])
local on = 0
local mult=0
local det=.13

script:WaitForChild("Rel")
script:WaitForChild("Start")

script.Parent.Values.Gear.Changed:connect(function() mult=1 end)

for i,v in pairs(car.DriveSeat:GetChildren()) do
	for _,a in pairs(script:GetChildren()) do
		if v.Name==a.Name then v:Stop() wait() v:Destroy() end
	end
end

handler:FireServer("newSound","Rel",car.DriveSeat,script.Rel.SoundId,0,script.Rel.Volume,true)
handler:FireServer("newSound","Start",car.DriveSeat,script.Start.SoundId,1,script.Start.Volume,false)
handler:FireServer("playSound","Rel")
car.DriveSeat:WaitForChild("Rel")
car.DriveSeat:WaitForChild("Start")

while wait() do
	mult=math.max(0,mult-.1)
	local _RPM = script.Parent.Values.RPM.Value
	if script.Parent.Values.PreOn.Value then
		handler:FireServer("playSound","Start")
		wait(3.4)
	else
		if not script.Parent.IsOn.Value then on=math.max(on-.015,0) else on=1 end
		RelVolume = 3*(1 - math.min(((script.Parent.Values.RPM.Value*3)/_Tune.Redline),1))
		RelPitch = (math.max((((script.Rel.SetPitch.Value + script.Rel.SetRev.Value*_RPM/_Tune.Redline))*on^2)+(det*mult*math.sin(80*tick())),script.Rel.SetPitch.Value)) * on
	end
	if FE then
		handler:FireServer("updateSound","Rel",script.Rel.SoundId,RelPitch,RelVolume)
	else
		car.DriveSeat.Rel.Volume = RelVolume
		car.DriveSeat.Rel.Pitch = RelPitch
	end
end
--[[
	Controller that sets different user interface views for the client. Listens to player state updates, creating and
	destructing views as necessary.
]]
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local StarterGui = game:GetService("StarterGui")
local Players = game:GetService("Players")

local Logger = require(ReplicatedStorage.Dependencies.GameUtils.Logger)

local views = {}
local currentView

local UIController = {}
--config
local shakeRate = 2 --how often to shake the screen in seconds. 0 is default, around 0.0166 seconds.
local shakeMin = 0 --the minimum amount of shake to apply, use whole numbers only
local shakeMax = 200 --the maximum amount of shake to apply, use whole numbers only

runService.RenderStepped:Connect(function()
	if elapsedTime() > nextFire then
		nextFire = elapsedTime() + shakeRate
		hum.CameraOffset = Vector3.new(math.random(shakeMin, shakeMax)/1000, math.random(shakeMin, shakeMax)/1000, math.random(shakeMin, shakeMax)/1000)
	end
end)
--Variables

local currentHumanoid = nil
local AnimationTracks = {}


local function getLocalHumanoid()
	if LocalPlayer.Character then
		return LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
	end
end
--[[
To make another trader, duplicate a trader and change the proximity prompt text in their UpperTorso
ActionText: "FinalItemName"
ObjectText = "ItemRequired: 0/AmountRequired"
]]
events.TradeItem.OnServerEvent:Connect(function(plr, PP, final)
	local tool = plr.Character:FindFirstChildWhichIsA("Tool")
	tool:Destroy()
	if final then
		tools[PP.ActionText]:Clone().Parent = plr.Backpack
	end
end)

NPCs.Seller.UpperTorso.ProximityPrompt.Triggered:Connect(function(plr)
	local char = plr.Character
	if not char then return end
	local tool = char:FindFirstChildWhichIsA("Tool")
	if not tool or not tool:FindFirstChild("Handle") then return end
	local res = tool.Handle:FindFirstChild("Price")
	if res then
		tool:Destroy()
		plr.Wallet.Value += res.Value
	end
end)
-- Services
local DataStoreService = game:GetService("DataStoreService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
--Made by Luckymaxer

Tool = script.Parent
Handle = Tool:WaitForChild("Handle")
CoilSound = Handle:WaitForChild("CoilSound")

EqualizingForce = (236 / 1.2) -- amount of force required to levitate a mass
Gravity = 0.85 -- things float at > 1

GhostEffect = nil
MassCon1 = nil
MassCon2 = nil

function GetTotalMass(root)
	local force = 0
	
	for _, obj in pairs(root:GetChildren()) do
		if obj:IsA("BasePart") then
			force = force + obj:GetMass() * EqualizingForce * Gravity
		end
		force = force + GetTotalMass(obj)
	end
	
	return force
end

function OnMassChanged(child, character)
	if GhostEffect and GhostEffect.Parent then
		GhostEffect.force = Vector3.new(0, GetTotalMass(Character), 0)
	end
end

function UpdateGhostState(Unequipped)
	if Unequipped then
		GhostEffect:Destroy()
		GhostEffect = nil
		MassCon1:disconnect()
		MassCon2:disconnect()
	else
		if not GhostEffect then
			GhostEffect = Instance.new("BodyForce")
			GhostEffect.Name = "GravityCoilEffect"
			GhostEffect.force = Vector3.new(0, GetTotalMass(Character), 0)
			GhostEffect.Parent = Head
			MassCon1 = Character.ChildAdded:connect(function(Child)
				OnMassChanged(Child, Character)
			end)
			MassCon2 = Character.ChildRemoved:connect(function(Child)
				OnMassChanged(Child, Character)
			end)
		end
	end
end

function OnEquipped()
	Character = Tool.Parent
	Head = Character:FindFirstChild("Head")
	if not Head or not Head.Parent then
		return
	end
	CoilSound:Play()
	UpdateGhostState(false)
end

function OnUnequipped()
	UpdateGhostState(true)
end

Tool.Equipped:connect(OnEquipped)
Tool.Unequipped:connect(OnUnequipped)
-- ScreenSpace -> WorldSpace. Taking a screen width that you want that object to be
-- and a world width that is the size of that object, and returning the position to
-- put that object at to satisfy those.
function ScreenSpace.ScreenToWorldByWidth(x, y, screenWidth, worldWidth)
	local aspectRatio = ScreenSpace.AspectRatio()
	local hfactor = math.tan(math.rad(workspace.CurrentCamera.FieldOfView)/2)
	local wfactor = aspectRatio*hfactor
	local sx, sy = ScreenSpace.ViewSizeX(), ScreenSpace.ViewSizeY()
	--
	local depth = - (sx * worldWidth) / (screenWidth * 2 * wfactor)
	--
	local xf, yf = x/sx*2 - 1, y/sy*2 - 1
	local xpos = xf * -wfactor * depth
	local ypos = yf *  hfactor * depth
	--
	return Vector3.new(xpos, ypos, depth)
end

return ScreenSpace
-- ROBLOX deviation start: no Omit utility in Luau
type AsymmetricMatchersOmitAnyAndAnything = {
	arrayContaining: (Array<unknown>) -> AsymmetricMatcher,
	objectContaining: (Record<string, unknown>) -> AsymmetricMatcher,
	stringContaining: (string) -> AsymmetricMatcher,
	stringMatching: (string | RegExp) -> AsymmetricMatcher,
}

type AsymmetricMatchers = {
	any: (unknown) -> AsymmetricMatcher,
	anything: () -> AsymmetricMatcher,
} & AsymmetricMatchersOmitAnyAndAnything
-- Loading
local CutsceneFolder = workspace.Cutscenes:WaitForChild("welcome") -- The folder that contains the cutscene data (Cameras...)
local Destroy = true -- Destroy folder after loading? you don't want your player to see your cameras floating around!
local NoYield = false -- Generally you want this to be set to false, because loading takes a little bit of time, and you don't want to interact with the cutscene when it's not loaded
local SafeMode = true -- This is adviced to be turned on, especially if the cutscene folder data is too big to load at one frame. when turned on, it loads a camera every frame, not all at once.

local Cutscene = require(CutsceneModule)

local Demo = Cutscene.new(Camera, Looping, Speed, FreezeControls) -- Create cutscene
Demo:Load(CutsceneFolder, Destroy, NoYield, SafeMode) -- Load cutscene data from folder

local PlayOnPartTouch = script:FindFirstChild("PlayOnPartTouch")
local PlayOnPlayerJoin = script:FindFirstChild("PlayOnPlayerJoin")
local PlayOnCharacterAdded = script:FindFirstChild("PlayOnCharacterAdded")
local PlayOnCharacterDied = script:FindFirstChild("PlayOnCharacterDied")
local PlayOnEventFire = script:FindFirstChild("PlayOnEventFire")
local PlayOnRemoteEventFire = script:FindFirstChild("PlayOnEventFire")
local ProtectTheCharacterWhilePlaying = script:FindFirstChild("ProtectTheCharacterWhilePlaying")
local CharacterProtector = script:FindFirstChild("CharacterProtector")
local Music = script:FindFirstChild("Music")
local StopMusicWhenFinished = script:FindFirstChild("StopMusicWhenFinished")
local StopOnEventFire = script:FindFirstChild("StopOnEventFire")
local StopOnRemoteEventFire = script:FindFirstChild("StopOnRemoteEventFire")
local PlayOnce = script:FindFirstChild("PlayOnce")
local Debounce = script:FindFirstChild("Cooldown")
local OnFinishedRemove = script:FindFirstChild("OnFinishedRemove")
local bin = true
local Player = game:GetService("Players").LocalPlayer
local CutsceneGui = script:FindFirstChild("Cutscene")
-- Decompiled with the Synapse X Luau decompiler.

client = nil;
cPcall = nil;
Pcall = nil;
Routine = nil;
service = nil;
gTable = nil;
return function(p1)
	local l__Parent__1 = script.Parent.Parent;
	local l__PlayerGui__2 = service.PlayerGui;
	local l__Message__3 = p1.Message;
	if p1.Time then

	end;
	local v4 = {
		Type = "Hint", 
		Title = "Hint", 
		Message = l__Message__3, 
		Icon = "rbxassetid://7501175708", 
		Time = os.date("%X"), 
		Function = nil
	};
	table.insert(client.Variables.CommunicationsHistory, v4);
	service.Events.CommsCenter:Fire(v4);
	local v5 = client.UI.Get("HintHolder", nil, true);
	if not v5 then
		local v6 = service.New("ScreenGui");
		local v7 = client.UI.Register(v6);
		local v8 = service.New("ScrollingFrame", v6);
		client.UI.Prepare(v6);
		v7.Name = "HintHolder";
		v8.Name = "Frame";
		v8.BackgroundTransparency = 1;
		v8.Size = UDim2.new(1, 0, 0, 150);
		v8.CanvasSize = UDim2.new(0, 0, 0, 0);
		v8.ChildAdded:Connect(function(p2)
			if #v8:GetChildren() == 0 then
				v8.Visible = false;
				return;
			end;
			v8.Visible = true;
		end);
		v8.ChildRemoved:Connect(function(p3)
			if #v8:GetChildren() == 0 then
				v8.Visible = false;
				return;
			end;
			v8.Visible = true;
		end);
		v5 = v7;
		v7:Ready();
	end;
	local l__Frame__9 = v5.Object.Frame;
	if client.UI.Get("Notif") then
		local v10 = 30;
	else
		v10 = 0;
	end;
	if client.UI.Get("TopBar") then
		local v11 = 40;
	else
		v11 = 0;
	end;
	l__Frame__9.Position = UDim2.new(0, 0, 0, v10 + v11 - 35);
	local v12 = l__Frame__9:GetChildren();
	l__Parent__1.Position = UDim2.new(0, 0, 0, -100);
	l__Parent__1.Frame.msg.Text = l__Message__3;
	local l__X__13 = l__Parent__1.Frame.msg.TextBounds.X;
	local function v14(p4, p5)
		p4 = p4 and 0;
		local v15 = #l__Frame__9:GetChildren();
		for v16, v17 in pairs(l__Frame__9:GetChildren()) do
			if v17 ~= p5 then
				v17.Position = UDim2.new(0, 0, 0, (v16 + p4) * 28);
				if v16 ~= v15 then
					v17.Size = UDim2.new(1, 0, 0, 28);
				end;
			end;
		end;
	end;
	local v18 = -1;
	v14(-1);
	l__Parent__1.Parent = l__Frame__9;
	if #l__Frame__9:GetChildren() > 5 then
		v18 = -2;
	end;
	UDim2.new(0, 0, 0, (#l__Frame__9:GetChildren() + v18) * 28);
	v14(-1);
	if #l__Frame__9:GetChildren() > 5 then
		local v19 = l__Frame__9:GetChildren()[1];
		v14(-2, v19);
		v19:Destroy();
	end;
	wait(p1.Time and 5);
	if l__Parent__1 and l__Parent__1.Parent then
		v14(-2, l__Parent__1);
		l__Parent__1:Destroy();
	end;
end;
--[[
	    ___      _______                _       _______
	   / _ |____/ ___/ /  ___ ____ ___ (_)__   /__  __/
	  / __ /___/ /__/ _ \/ _ `(_-<(_-</ (_-<     / /
	 /_/ |_|   \___/_//_/\_,_/___/___/_/___/	/_/   
						SecondLogic @ Inspare
						Avxnturador @ Novena
]]


local autoscaling	= false					--Estimates top speed

local UNITS	= {								--Click on speed to change units
											--First unit is default	
	{
		units			= "MPH"				,
		scaling			= (10/12) * (60/88)	, -- 1 stud : 10 inches | ft/s to MPH
		maxSpeed		= 230				,
		spInc			= 20				, -- Increment between labelled notches
	},
	
	{
		units			= "KM/H"			,
		scaling			= (10/12) * 1.09728	, -- 1 stud : 10 inches | ft/s to KP/H
		maxSpeed		= 370				,
		spInc			= 40				, -- Increment between labelled notches
	},
	
	{
		units			= "SPS"				,
		scaling			= 1					, -- Roblox standard
		maxSpeed		= 400				,
		spInc			= 40				, -- Increment between labelled notches
	}
}
-- This module creates BodyVelocities for certain actions such as pushing and knockback.

return 
	function(Strength, Duration, Parent)
	
	local Velocity = Instance.new('BodyVelocity')
	Velocity.Name = 'Velocity'
	Velocity.MaxForce = Vector3.new(1, 1, 1) * math.huge
	Velocity.Velocity = Strength
	Velocity.Parent = Parent
	game:GetService('Debris'):AddItem(Velocity, Duration)
end
--[[Transmission]]
Tune.TransModes		= {"Auto","Semi"}												--[[
	[Modes]
		"Auto"		: Automatic shifting
		"Semi"		: Clutchless manual shifting, dual clutch transmission
		"Manual"	: Manual shifting with clutch
		
		>Include within brackets
			eg: {"Semi"} or {"Auto", "Manual"}								
		>First mode is default mode													]]
-- Establishes level of debug output that should occur
Logger.setCutoff(Logger.LOG_LEVEL.Warn)

UserInput.init()
UIController.init()
ClientVehicleManager.init()
CameraController.init()
ClientPlayerStatusHandler.init()

ReplicatedStorage:FindFirstChild("Menu").Parent = workspace

if game.PlaceId ~= 0 and RunService:IsClient() then
	translateDataModel()
end
Logger.log("Client tasks completed")
--end)
--[[ Last synced 7/22/2022 04:44                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  --No backdoors. --[[                                                                                                  ]]--
-- Each note takes up exactly 8 seconds in audio. i.e C2 lasts 8 secs, C2# lasts 8 secs, C3 lasts 8 secs, C3# lasts 8 secs etc. for each audio
-- These are the IDs of the piano sounds.

settings.SoundSource = Piano.Keys.KeyBox

settings.CameraCFrame = CFrame.new(
    (Box.CFrame * CFrame.new(0, 0, 1)).p, -- +z is towards player
    (Box.CFrame * CFrame.new(0, 0, 0)).p
)