Roblox/luau_corpus huggingface dataset:
-- Formerly getCurrentCameraMode, this function resolves developer and user camera control settings to
-- decide which camera control module should be instantiated. The old method of converting redundant enum types
function CameraModule:GetCameraControlChoice()
	local player = Players.LocalPlayer

	if player then
		if self.lastInputType == Enum.UserInputType.Touch or UserInputService.TouchEnabled then
			-- Touch
			if player.DevTouchCameraMode == Enum.DevTouchCameraMovementMode.UserChoice then
				return CameraUtils.ConvertCameraModeEnumToStandard( UserGameSettings.TouchCameraMovementMode )
			else
				return CameraUtils.ConvertCameraModeEnumToStandard( player.DevTouchCameraMode )
			end
		else
			-- Computer
			if player.DevComputerCameraMode == Enum.DevComputerCameraMovementMode.UserChoice then
				local computerMovementMode = CameraUtils.ConvertCameraModeEnumToStandard(UserGameSettings.ComputerCameraMovementMode)
				return CameraUtils.ConvertCameraModeEnumToStandard(computerMovementMode)
			else
				return CameraUtils.ConvertCameraModeEnumToStandard(player.DevComputerCameraMode)
			end
		end
	end
end

function CameraModule:OnCharacterAdded(char, player)
	if self.activeOcclusionModule then
		self.activeOcclusionModule:CharacterAdded(char, player)
	end
end

function CameraModule:OnCharacterRemoving(char, player)
	if self.activeOcclusionModule then
		self.activeOcclusionModule:CharacterRemoving(char, player)
	end
end

function CameraModule:OnPlayerAdded(player)
	player.CharacterAdded:Connect(function(char)
		self:OnCharacterAdded(char, player)
	end)
	player.CharacterRemoving:Connect(function(char)
		self:OnCharacterRemoving(char, player)
	end)
end

function CameraModule:OnMouseLockToggled()
	if self.activeMouseLockController then
		local mouseLocked = self.activeMouseLockController:GetIsMouseLocked()
		local mouseLockOffset = self.activeMouseLockController:GetMouseLockOffset()
		if self.activeCameraController then
			self.activeCameraController:SetIsMouseLocked(mouseLocked)
			self.activeCameraController:SetMouseLockOffset(mouseLockOffset)
		end
	end
end

local cameraModuleObject = CameraModule.new()
local cameraApi = {}

if FFlagUserRemoveTheCameraApi then
	return cameraApi
else
	return cameraModuleObject
end
-- Debug Message options
local DEFAULT_DEBUG_LOGGER_PREFIX: string = "[ Raycast Hitbox V4 ]\n"
local DEFAULT_MISSING_ATTACHMENTS: string = "No attachments found in object: %s. Can be safely ignored if using SetPoints."
local DEFAULT_ATTACH_COUNT_NOTICE: string = "%s attachments found in object: %s."
--[[
	Races a set of Promises and returns the first one that resolves,
	cancelling the others.
]]
function Promise.race(promises)
	assert(type(promises) == "table", string.format(ERROR_NON_LIST, "Promise.race"))

	for i, promise in pairs(promises) do
		assert(Promise.is(promise), string.format(ERROR_NON_PROMISE_IN_LIST, "Promise.race", tostring(i)))
	end

	return Promise._new(debug.traceback(nil, 2), function(resolve, reject, onCancel)
		local newPromises = {}
		local finished = false

		local function cancel()
			for _, promise in ipairs(newPromises) do
				promise:cancel()
			end
		end

		local function finalize(callback)
			return function (...)
				cancel()
				finished = true
				return callback(...)
			end
		end

		if onCancel(finalize(reject)) then
			return
		end

		for i, promise in ipairs(promises) do
			newPromises[i] = promise:andThen(finalize(resolve), finalize(reject))
		end

		if finished then
			cancel()
		end
	end)
end
--[[
	Higher order component that lets the wrapped component consume the EmoteContext.
]]
local function withEmoteContext(component)
	return function(props)
		if props.emoteContext then
			warn("Child component has a prop named `emoteContext` and will be overriden by EmoteContext.")
		end

		return Roact.createElement(Context.Consumer, {
			render = function(emoteContext)
				local mergedProps = Cryo.Dictionary.join({ emoteContext = emoteContext }, props)

				return Roact.createElement(component, mergedProps)
			end,
		})
	end
end

local EmoteContext = {
	Consumer = Context.Consumer,
	Provider = withConfiguration(EmoteContextProvider),
	withEmoteContext = withEmoteContext,
}

return EmoteContext
-- Original values
local Lighting = game:GetService("Lighting")
local OLC = Lighting.ExposureCompensation


local function PlaySound()
	model.Lighting_Bolt.Transparency = 0
	wait(.05)
	Lighting.ExposureCompensation = 7
	wait(.25)
	Lighting.ExposureCompensation = OLC
	model.Lighting_Bolt.Transparency = 1
	sound:Play()
end

local function touched(otherPart)
	if(otherPart.Name == "HumanoidRootPart" ) then
		local player = game.Players:FindFirstChild(otherPart.Parent.Name)
		if(player) then
			trigger.CanTouch = false

			PlaySound()
		end
	end
end

trigger.Touched:Connect(touched)
-- Remove the default loading screen
ReplicatedFirst:RemoveDefaultLoadingScreen()

wait(5)  -- Force screen to appear for a minimum number of seconds
if not game:IsLoaded() then
	game.Loaded:Wait()
end
screenGui:Destroy()
-- Repeat every 5 seconds
while wait(5) do
	-- Create a new explosion object with the 'Example' template
	local NewExplosion = Explosion.new("Example")
	
	-- Set the explosion lifetime to 4 seconds so that the sound (3.75s long) can finish playing.
	NewExplosion.Lifetime = 4
	
	-- Set the explosion's position
	NewExplosion:SetPosition(Vector3.new(-25, 5, 0))
	
	-- EffectFunction will be called after this.
	NewExplosion:SetParent(workspace)
end
--[[Weight and CG]]
	Tune.Weight			= 3800		-- Total weight (in pounds)
	Tune.WeightBSize	= {			-- Size of weight brick (dimmensions in studs ; larger = more stable)
	 --[[Width]]		6		,
	 --[[Height]]		3		,
	 --[[Length]]		10		}
	Tune.WeightDist		= 50		-- Weight distribution (0 - on rear wheels, 100 - on front wheels, can be <0 or >100)
	Tune.CGHeight		= .6		-- 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		= 2			-- Size of structural members (larger = more stable/carry more weight)
	Tune.AxleDensity	= .1		-- Density of structural members
--throttle.Value = TCount 

if carSeat.Throttle == 1 then
if autoF - 1 > autoR or clutch.Clutch.Value ~= 1 then
	TCount = 1 
	else
	if TCount >= 1 then
		TCount = 1
	else
		if speed > 50 then
		TCount = TCount + 0.167
		
		elseif speed < 20 then
		TCount = TCount + 0.3334
		
			else
		TCount = TCount + 0.02
		end
	end
	
	end
else
	if TCount <= 0 then
		TCount = 0
	else
		TCount = 0
	end
end

if currentgear.Value ~= 1 then tlR = 0
	if clutch.Clutch.Value ~= 1 then
		if throttle.Value ~= 0 then
			if engine.Value > redline.Value * (1-clutch.Clutch.Value) then --------------?? WE DONT NEED A 'FOR' IN THE CLUTCH CODE
				engine.Value = engine.Value - 300
				else
				engine.Value = engine.Value + (((600+decay.Value) * throttle.Value) - decay.Value) 
			end else engine.Value = engine.Value - decay.Value
		end
		rpm.Value = engine.Value
	else
		engine.Value = rpm.Value
	end
else
	tlR = tlR + 0.05
	if tlR > 20 then
		script.Parent.Functions.Engine.Value = false
		first = 0.333
	end
	engine.Value = engine.Value + (((600+decay.Value) * first) - decay.Value)
	if engine.Value > idle.Value*2 then
		first = 0 
	end
		--engine.Value = (idle.Value-decay.Value)
		
end

drive = "x"
--<<--Enable/Disable Chat menu-->>--
game:GetService("StarterGui"):SetCoreGuiEnabled(Enum.CoreGuiType.Chat, false) --Set 'false' to disable the Chat, or set 'true' to enable the Chat
-- Decompiled with the Synapse X Luau decompiler.

local l__RunService__1 = game:GetService("RunService");
if game:GetService("UserInputService").TouchEnabled then
	local v2 = Instance.new("Frame");
	v2.Name = "BottomLeftControl";
	v2.Size = UDim2.new(0.1, 0, 0.1, 0);
	v2.Position = UDim2.new(1, 0, 1, 0);
	v2.AnchorPoint = Vector2.new(1, 1);
	v2.BackgroundTransparency = 1;
	v2.ZIndex = 10;
	v2.Parent = script.Parent;
	local v3 = Instance.new("ImageButton");
	v3.Name = "MouseLockLabel";
	v3.Size = UDim2.new(1, 0, 1, 0);
	v3.Position = UDim2.new(0, 0, 0, 0);
	v3.BackgroundTransparency = 1;
	v3.Image = "rbxasset://textures/ui/mouseLock_off.png";
	v3.Visible = true;
	v3.Parent = v2;
	local v4 = Instance.new("Frame");
	v4.Name = "MiddleIcon";
	v4.Size = UDim2.new(0.075, 0, 0.075, 0);
	v4.Position = UDim2.new(0.5, 0, 0.5, 0);
	v4.AnchorPoint = Vector2.new(0.5, 0.5);
	v4.BackgroundTransparency = 1;
	v4.ZIndex = 10;
	v4.Visible = true;
	v4.Parent = script.Parent;
	local v5 = Instance.new("ImageLabel");
	v5.Name = "MouseLockLabel";
	v5.Size = UDim2.new(1, 0, 1, 0);
	v5.Position = UDim2.new(0, 0, 0, 0);
	v5.BackgroundTransparency = 1;
	v5.Image = "rbxasset://textures/MouseLockedCursor.png";
	v5.Visible = false;
	v5.Parent = v4;
	local v6 = Instance.new("UIAspectRatioConstraint");
	v6.AspectRatio = 1;
	v6.DominantAxis = "Height";
	v6.Parent = v2;
	v6:Clone().Parent = v4;
	local u1 = false;
	v3.Activated:connect(function()
		u1 = not u1;
		if u1 then
			local v7 = "rbxasset://textures/ui/mouseLock_on.png";
		else
			v7 = "rbxasset://textures/ui/mouseLock_off.png";
		end;
		v3.Image = v7;
		v5.Visible = u1 or false;
	end);
	local l__LocalPlayer__2 = game.Players.LocalPlayer;
	l__RunService__1:BindToRenderStep("MobileShiftLock", Enum.RenderPriority.Camera.Value + 1, function()
		if u1 then
			local l__CurrentCamera__8 = workspace.CurrentCamera;
			if l__CurrentCamera__8 then
				local l__Character__9 = l__LocalPlayer__2.Character;
				local v10 = l__Character__9 and l__Character__9:FindFirstChild("Humanoid");
				local v11 = l__Character__9 and l__Character__9:FindFirstChild("HumanoidRootPart");
				local v12 = l__Character__9 and l__Character__9:FindFirstChild("Head");
				if v10 and v10.Health > 0 and v11 then
					local l__LookVector__13 = l__CurrentCamera__8.CFrame.LookVector;
					v11.CFrame = CFrame.new(v11.Position) * CFrame.Angles(0, math.atan2(-l__LookVector__13.X, -l__LookVector__13.Z), 0);
				end;
				if v12 and (v12.Position - l__CurrentCamera__8.CFrame.Position).Magnitude >= 1 then
					l__CurrentCamera__8.CFrame = l__CurrentCamera__8.CFrame * CFrame.new(1.75, 0, 0);
				end;
			end;
		end;
	end);
end;
--[=[
	Options for the broadcast middleware.
]=]
export type BroadcasterOptions = {
	--[=[
		The producers that will be tracked.
	]=]
	producers: ProducerMap,

	--[=[
		The rate in seconds at which the server should hydrate the
		clients with the latest state.
		@default 60
	]=]
	hydrateRate: number?,

	--[=[
		The rate in seconds at which the server should dispatch
		actions to the clients. If set to `0`, actions will be
		dispatched within the next frame.
		@default 0
	]=]
	dispatchRate: number?,

	--[=[
		Runs before actions are dispatched to a player. Can be used to
		filter actions or manipulate them before sending.

		Avoid directly mutating the action. Instead, return a new action
		if you need to change it. Return `nil` to not share the action
		with this player.
	]=]
	beforeDispatch: ((player: Player, action: BroadcastAction) -> BroadcastAction?)?,

	--[=[
		Runs before the client is hydrated with the latest state. Can be
		used to filter the state or hide certain values from the client.

		Do not mutate the state in this function! Treat it as a read-only
		object, and return a new object if you need to change it.
	]=]
	beforeHydrate: ((player: Player, state: { [string]: any }) -> { [string]: any })?,

	--[=[
		An optional custom hydration function. If provided, this function
		will be called instead of being implicitly handled in 'dispatch'.

		Useful for reducing load on a single remote if your state is large.
	]=]
	hydrate: ((player: Player, state: { [string]: any }) -> ())?,

	--[=[
		The function that will send the actions to the client.
	]=]
	dispatch: (player: Player, actions: { BroadcastAction }) -> (),
}
-- Disconnect all handlers. Since we use a linked list it suffices to clear the
-- reference to the head handler.
function Signal:DisconnectAll()
	self._handlerListHead = false
end
--[[
	Shorthand for a done handler that returns the given value.
]]
function Promise.prototype:doneReturn(...)
	local length, values = pack(...)
	return self:_finally(debug.traceback(nil, 2), function()
		return unpack(values, 1, length)
	end, true)
end
-----------------
--| Variables |--
-----------------

local DebrisService = Game:GetService('Debris')

local Rocket = script.Parent

local CreatorTag = WaitForChild(Rocket, 'creator')

local SwooshSound = WaitForChild(Rocket, 'Swoosh')
-- When key pressed
function onKeyDown(key)
	if key == nil then return end
	key = key:lower()
			
	-- Coaxial Machine Gun Control
	if key == 'f' then
		if firingMg then return end
			
		firingMg = true;
			
		while firingMg do
			if not fireCoax() then
				firingMg = false;
			wait()
			end
			updateAmmo();
		end	
	end
	
	-- Switch ammo type
	if key == 'e' then
		parts.Engine.BodyGyro.MaxTorque = Vector3.new(0,0,100)
		print("Flipping Vehicle")
		wait(5)
		parts.Engine.BodyGyro.MaxTorque = Vector3.new(0,0,0)
	end
	if key == 'q' then
		if braking then return end
			
		braking = true;
			
		while braking do
			if not Brakes() then
				braking = false;
			end
			updateAmmo();
		end	
	end
end
--[[ Roblox Services ]]--
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local StarterGui = game:GetService("StarterGui")
local VRService = game:GetService("VRService")
local UserGameSettings = UserSettings():GetService("UserGameSettings")

local player = Players.LocalPlayer
--EDIT BELOW----------------------------------------------------------------------
settings.PianoSoundRange = 45

settings.KeyAesthetics = true

settings.PianoSounds = {
	"269058581",
	"269058744",
	"269058842",
	"269058899",
	"269058974",
	"269059048"
}
-- Waits for the child of the specified parent
local function WaitForChild(parent, childName)
	while not parent:FindFirstChild(childName) do parent.ChildAdded:wait() end
	return parent[childName]
end

local Tool = script.Parent

local Animations = {}
local MyHumanoid
local MyCharacter


local function PlayAnimation(animationName)
	if Animations[animationName] then
		Animations[animationName]:Play()
	end
end

local function StopAnimation(animationName)
	if Animations[animationName] then
		Animations[animationName]:Stop()
	end
end


function OnEquipped(mouse)
	MyCharacter = Tool.Parent
	MyHumanoid = WaitForChild(MyCharacter, 'Humanoid')
	if MyHumanoid then
				Animations['IdleAnim'] = MyHumanoid:LoadAnimation(WaitForChild(script, 'idle'))
					end
	PlayAnimation('IdleAnim')
end

function OnUnequipped()
	for animName, _ in pairs(Animations) do
		StopAnimation(animName)
	end
end

Tool.Equipped:connect(OnEquipped)
Tool.Unequipped:connect(OnUnequipped)
-- Mimic the enabling of the topbar when StarterGui:SetCore("TopbarEnabled", state) is called
coroutine.wrap(function()
	local chatScript = players.LocalPlayer.PlayerScripts:WaitForChild("ChatScript", 4) or game:GetService("Chat"):WaitForChild("ChatScript", 4)
	if not chatScript then return end
	local chatMain = chatScript:FindFirstChild("ChatMain")
	if not chatMain then return end
	local ChatMain = require(chatMain)
	ChatMain.CoreGuiEnabled:connect(function()
		local topbarEnabled = checkTopbarEnabled()
		if topbarEnabled == IconController.previousTopbarEnabled then
			IconController.updateTopbar()
			return "SetCoreGuiEnabled was called instead of SetCore"
		end
		if IconController.mimicCoreGui then
			IconController.previousTopbarEnabled = topbarEnabled
			if IconController.controllerModeEnabled then
				IconController.setTopbarEnabled(false,false)
			else
				IconController.setTopbarEnabled(topbarEnabled,false)
			end
		end
		IconController.updateTopbar()
	end)
	local makeVisible = checkTopbarEnabled()
	if not makeVisible and not IconController.mimicCoreGui then
		makeVisible = true
	end
	IconController.setTopbarEnabled(makeVisible, false)
end)()
-- This function is a primitive "pick randomly from table" function.
function main:GetRandomSound(SoundTable : {}) : string
	return SoundTable[math.random(#SoundTable)]
end

return main
-- Define the variables for the dash ability
local isDashing = false
local dashSpeed = 125
--// Return values: bool filterSuccess, bool resultIsFilterObject, variant result
function methods:InternalApplyRobloxFilterNewAPI(speakerName, message, textFilterContext) --// USES FFLAG
	local alwaysRunFilter = false
	local runFilter = RunService:IsServer() and not RunService:IsStudio()
	if (alwaysRunFilter or runFilter) then

		local fromSpeaker = self:GetSpeaker(speakerName)
		if fromSpeaker == nil then
			return false, nil, nil
		end

		local fromPlayerObj = fromSpeaker:GetPlayer()
		if fromPlayerObj == nil then
			return true, false, message
		end

		if allSpaces(message) then
			return true, false, message
		end

		local success, filterResult = pcall(function()
			local ts = game:GetService("TextService")
			local result = ts:FilterStringAsync(message, fromPlayerObj.UserId, textFilterContext)
			return result
		end)
		if (success) then
			return true, true, filterResult
		else
			warn("Error filtering message:", message, filterResult)
			self:InternalNotifyFilterIssue()
			return false, nil, nil
		end
	end

	--// Simulate filtering latency.
	wait()
	return true, false, message
end

function methods:InternalDoMessageFilter(speakerName, messageObj, channel)
	local filtersIterator = self.FilterMessageFunctions:GetIterator()

	for funcId, func, priority in filtersIterator do
		local success, errorMessage = pcall(function()
			func(speakerName, messageObj, channel)
		end)

		if not success then
			warn(string.format("DoMessageFilter Function '%s' failed for reason: %s", funcId, errorMessage))
		end
	end
end

function methods:InternalDoProcessCommands(speakerName, message, channel)
	local commandsIterator = self.ProcessCommandsFunctions:GetIterator()

	for funcId, func, priority in commandsIterator do
		local success, returnValue = pcall(function()
			local ret = func(speakerName, message, channel)
			if type(ret) ~= "boolean" then
				error("Process command functions must return a bool")
			end
			return ret
		end)

		if not success then
			warn(string.format("DoProcessCommands Function '%s' failed for reason: %s", funcId, returnValue))
		elseif returnValue then
			return true
		end
	end

	return false
end

function methods:InternalGetUniqueMessageId()
	local id = self.MessageIdCounter
	self.MessageIdCounter = id + 1
	return id
end

function methods:InternalAddSpeakerWithPlayerObject(speakerName, playerObj, fireSpeakerAdded)
	if (self.Speakers[speakerName:lower()]) then
		error("Speaker \"" .. speakerName .. "\" already exists!")
	end

	local speaker = Speaker.new(self, speakerName)
	speaker:InternalAssignPlayerObject(playerObj)
	self.Speakers[speakerName:lower()] = speaker

	if fireSpeakerAdded then
		local success, err = pcall(function() self.eSpeakerAdded:Fire(speakerName) end)
		if not success and err then
			print("Error adding speaker: " ..err)
		end
	end

	return speaker
end

function methods:InternalFireSpeakerAdded(speakerName)
	local success, err = pcall(function() self.eSpeakerAdded:Fire(speakerName) end)
	if not success and err then
		print("Error firing speaker added: " ..err)
	end
end
-- MUSIC/SOUNDS

print("DOORS 👁️ Sound Pack: Installing Musics/Ambiences Sounds...")

if SoundsInSoundService == true then
	script.Parent.Parent = game.SoundService
end

if MusicLobbyEnabled == false then
	script.Parent.Music.Lobby:Destroy()
end

if GuidingLightMusicEnabled == false then
	script.Parent.Music["Guiding Light"]:Destroy()
end

if EndingMusicEnabled == false then
	script.Parent.Music.Ending:Destroy()
end

if ElevatorJamMusicEnabled == false then
	script.Parent.Music["Elevator Jam"]:Destroy()
end

if UnhingedMusicEnabled == false then
	script.Parent.Music.Unhinged:Destroy()
end

if AmbienceSoundEnabled == false then
	script.Parent.Ambience.Ambience:Destroy()
end
-- Helpers
local function updateCheckbox()
	local checked = CheckedValue.Value
	
	if checked then
		Checkbox.Image = Assets.Checkbox.Checked
		Checkbox.ImageColor3 = checkedColor 
	else
		Checkbox.Image = Assets.Checkbox.Unchecked
		Checkbox.ImageColor3 = defaultImageColor
	end
end

CheckedValue.Changed:Connect(updateCheckbox)

local function selectCheckbox()
	CheckedValue.Value = not CheckedValue.Value
end
-- Expose GetLibraries function
_G.GetLibraries = GetLibraries;
return GetLibraries
-- obtain goals based on Center part
center.BodyPosition.position = beacon.Center.Position
teamColor = center.Color
vel = center.BodyVelocity
vel.velocity = Vector3.new(0, -2, 0)

healerIsResting = false

function restHealer()
	healerIsResting = true
	wait(5)
	healerIsResting = false
end

function onTouchHumanoid(humanoid)	
	if not healerIsResting then
		-- Heal the player
		humanoid.Health = humanoid.Health + 50
		coroutine.resume(coroutine.create(restHealer))
	end
end

goingUp = false
function goUp(speed)
	if goingUp then
		return
	end
	goingUp = true
	vel.velocity = Vector3.new(0,speed,0)
	wait(20/speed)
	vel.velocity = Vector3.new(0,-2,0)
	goingUp = false
end

function onTouch(touchedPart)
	-- see if a character touched it
	local parent = touchedPart.Parent
	if parent ~= nil then
		local humanoid = parent:findFirstChild("Humanoid", false);
		if humanoid ~= nil then
			onTouchHumanoid(humanoid)
			goUp(10)
			return
		end
	end

	-- change direction
	if touchedPart.Position.y > beacon.Center.Position.y then
		vel.velocity = Vector3.new(0,-2,0)
		goingUp = false
	elseif touchedPart.Position.y < beacon.Center.Position.y then
		goUp(2)
	end
end

function connectPart(part)
	part.Color = teamColor
	part.Touched:connect(onTouch)
end
-- at max range
script.Parent.Explosion.PlayOnRemove = false
swoosh:stop()
shaft:remove()
--BOV--
script.Parent.Parent.Values.RPM.Changed:connect(function()
	local t = 0
	t = (totalPSI*20)
	BOVact = math.floor(t)
end)
script.Parent.Parent.Values.RPM.Changed:connect(function()
	wait(0.1)
	local t2 = 0
	t2 = (totalPSI*20)
	BOVact2 = math.floor(t2)
end)
script.Parent.Parent.Values.RPM.Changed:connect(function()
	if BOVact > BOVact2 then
		if BOV.IsPlaying == false then
			BOV:Play()
			
		end
	end
	if BOVact < BOVact2 then
		if BOV.IsPlaying == true then
			BOV:Stop()
			
		end
	end
end)
-- variables

local lastDamage	= 0
local lastArmor		= ARMOR.Value
--[[Brakes]]
	Tune.ABSEnabled		= true		-- Implements ABS
	Tune.ABSThreshold	= 20		-- Slip speed allowed before ABS starts working (in SPS) 

	Tune.BrakeForce		= 2500		-- Total brake force (LuaInt)
	Tune.BrakeBias		= .6		-- Brake bias towards the front, percentage (1 = Front, 0 = Rear, .5 = 50/50)
	Tune.PBrakeForce	= 5000		-- Handbrake force
	Tune.PBrakeBias		= 0			-- Handbrake bias towards the front, percentage (1 = Front, 0 = Rear, .5 = 50/50)
	Tune.EBrakeForce	= 500		-- Engine braking force at redline
--- SpecialP
   ExpNeed.Value = ExpNeed1:GetAsync(Plr.UserId) or ExpNeed.Value
	   ExpNeed1:SetAsync(Plr.UserId, ExpNeed.Value)
      ExpNeed.Changed:connect(function()
	   ExpNeed1:SetAsync(Plr.UserId, ExpNeed.Value)
   end)
--if (script.Parent ~= nil) and (script.Parent.className == "Part") then --Work if in a block
--	connection = script.Parent.Touched:connect(onTouched)
--end
script.Parent.Touched:connect(onTouched)
--[[ The Module ]]--
local BaseCamera = require(script.Parent:WaitForChild("BaseCamera"))
local ClassicCamera = setmetatable({}, BaseCamera)
ClassicCamera.__index = ClassicCamera

function ClassicCamera.new()
	local self = setmetatable(BaseCamera.new(), ClassicCamera)

	self.isFollowCamera = false
	self.isCameraToggle = false
	self.lastUpdate = tick()
	self.cameraToggleSpring = Util.Spring.new(5, 0)

	return self
end

function ClassicCamera:GetCameraToggleOffset(dt)
	if self.isCameraToggle then
		local zoom = self.currentSubjectDistance

		if CameraInput.getTogglePan() then
			self.cameraToggleSpring.goal = math.clamp(Util.map(zoom, 0.5, self.FIRST_PERSON_DISTANCE_THRESHOLD, 0, 1), 0, 1)
		else
			self.cameraToggleSpring.goal = 0
		end

		local distanceOffset = math.clamp(Util.map(zoom, 0.5, 64, 0, 1), 0, 1) + 1
		return Vector3.new(0, self.cameraToggleSpring:step(dt)*distanceOffset, 0)
	end

	return Vector3.new()
end