Pinkstack/roblox-luau-corpus-text huggingface dataset:
--Thanks for using this script
--This script is made by Joriangames/Problox Studio Scripts
--Want to know how to use this? Watch my tutorial: https://youtu.be/T65gtxrukQg


local button = script.Parent.OpenSpectate
local frame = script.Parent.Frame
local title = frame.PlrName
local left = frame.Left
local right = frame.Right
local cam = workspace.CurrentCamera
local num = 1
local plr = game.Players.LocalPlayer

button.MouseButton1Click:Connect(function()
	if frame.Visible == true then
		frame.Visible = false
		title.Text = plr.Name
		cam.CameraSubject = plr.Character.Humanoid
		num = 1
	else
		frame.Visible = true
		title.Text = plr.Name
		cam.CameraSubject = plr.Character.Humanoid
		num = 1
	end
end)

right.MouseButton1Click:Connect(function()
	local players = game.Players:GetPlayers()
	local all = #players
	num = num +1
	if num > all then
		num = 1
	end
	cam.CameraSubject = players[num].Character.Humanoid
	title.Text = players[num].Name
end)

left.MouseButton1Click:Connect(function()
	local players = game.Players:GetPlayers()
	local all = #players
	num = num -1
	if num < 1 then
		num = all
	end
	cam.CameraSubject = players[num].Character.Humanoid
	title.Text = players[num].Name
end)
----- Water particle handler -----



function waterOutput()
	if script.Parent.ColdOn.Value == false and script.Parent.HotOn.Value == false then
		faucetParticles.Enabled = false
		showerHead.Enabled = false
		bathSound:Stop()
		showerSound:Stop()
	elseif script.Parent.ShowerMode.Value == false then
		faucetParticles.Enabled = true
		showerHead.Enabled = false
		bathSound:Play()
		showerSound:Stop()
	else
		faucetParticles.Enabled = false
		showerHead.Enabled = true
		bathSound:Stop()
		showerSound:Play()	
	end
end

script.Parent.ColdOn.Changed:connect(function()
	waterOutput()
end)

script.Parent.HotOn.Changed:connect(function()
	waterOutput()
end)

script.Parent.ShowerMode.Changed:connect(function()
	waterOutput()
end)
--[=[
	@class SpringObject
]=]



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

local RunService= game:GetService("RunService")

local Spring = require("Spring")
local Maid = require("Maid")
local Signal = require("Signal")
local StepUtils = require("StepUtils")
local Observable = require("Observable")
local SpringUtils = require("SpringUtils")
local Blend = require("Blend")
local Rx = require("Rx")

local SpringObject = {}
SpringObject.ClassName = "SpringObject"
SpringObject.__index = SpringObject
--Made by Stickmasterluke




sp=script.Parent

speedboost=2		--100% speed bonus
speedforsmoke=10	--smoke apears when character running >= 10 studs/second.

function waitfor(a,b,c)
	local c=c or 5*60
	local d=tick()+c
	while a:FindFirstChild(b)==nil and tick()<=d do
		wait()
	end
	return a:FindFirstChild(b)
end

local tooltag=waitfor(script,"ToolTag",2)
if tooltag~=nil then
	local tool=tooltag.Value
	local h=sp:FindFirstChild("Humanoid")
	if h~=nil then
		h.WalkSpeed=16+10*speedboost
		local t=sp:FindFirstChild("Torso")
		if t~=nil then
			smokepart=Instance.new("Part")
			smokepart.FormFactor="Custom"
			smokepart.Size=Vector3.new(0,0,0)
			smokepart.TopSurface="Smooth"
			smokepart.BottomSurface="Smooth"
			smokepart.CanCollide=false
			smokepart.Transparency=1
			local weld=Instance.new("Weld")
			weld.Name="SmokePartWeld"
			weld.Part0=t
			weld.Part1=smokepart
			weld.C0=CFrame.new(0,-3.5,0)*CFrame.Angles(math.pi/4,0,0)
			weld.Parent=smokepart
			smokepart.Parent=sp
			smoke=Instance.new("Fire")
			smoke.Enabled=t.Velocity.magnitude>speedforsmoke
			smoke.Size=5
			smoke.Parent=smokepart
			h.Running:connect(function(speed)
				if smoke and smoke~=nil then
					smoke.Enabled=speed>speedforsmoke
				end
			end)
		end
	end
	while tool~=nil and tool.Parent==sp and h~=nil do
		sp.ChildRemoved:wait()
	end
	local h=sp:FindFirstChild("Humanoid")
	if h~=nil then
		h.WalkSpeed=16
	end
end

if smokepart~=nil then
	smokepart:remove()
end
script:remove()
-- Must have hopped on a segway


SegwayObject.Changed:connect(function()
	if SegwayObject.Value ~= nil and SegwayObject.Value.Parent then
		if UserInputService.VREnabled then
			Camera.CameraType = "Scriptable"
		else
			Camera.CameraType = "Follow"
		end
		Lights = SegwayObject.Value:WaitForChild("Lights")
		Notifiers = SegwayObject.Value:WaitForChild("Notifiers")
		Character = Player.Character
		Humanoid = Character:WaitForChild("Humanoid")
		PlayerGui = Player.PlayerGui
		SitListener = Humanoid.Seated:connect(function()Hopoff(Character)end)
		JumpListener = UserInputService.JumpRequest:connect(function()Hopoff(Character)end)
		ConfigLights:FireServer(0,"Cyan",true,"Neon",Lights,Notifiers)
		CheckMobile()
		CheckVR()
		IsOnSegway = true
	end
end)

SetGuiButtons()

while game:GetService("RunService").RenderStepped:wait() do
	
	-- Update segway's bottom direction
	CastToGround()
	
	if SegwayObject.Value and SegwayObject.Value.Parent and SeaterObject.Value and Thruster.Value and TiltMotor.Value then
	
		-- Move segway
		Accelerate()
			
		-- Change sound of segway
		Sound()
			
		-- Tilts the segway
		Tilt()
		
		UpdateVRPos()
	
	elseif IsOnSegway then
		IsOnSegway = false
		UpdateCharTrans(0,0)
	end
	
end
-- declarations



local sDied = newSound("")
sDied.Pitch = 1.89
local sFallingDown = newSound("rbxasset://sounds/splat.wav")
local sFreeFalling = newSound("rbxasset://sounds/swoosh.wav")
local sGettingUp = newSound("rbxasset://sounds/hit.wav")
local sJumping = newSound("rbxasset://sounds/hit.wav")
local sRunning = newSound("rbxasset://sounds/bfsl-minifigfoots1.mp3")
sRunning.Looped = true

local Figure = script.Parent
local Head = waitForChild(Figure, "Head")
local Humanoid = waitForChild(Figure, "Humanoid")
--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.Up					,
	Brake					= Enum.KeyCode.Down					,
	SteerLeft				= Enum.KeyCode.Left					,
	SteerRight				= Enum.KeyCode.Right				,

	--Secondary Controls
	Throttle2				= Enum.KeyCode.W					,
	Brake2					= Enum.KeyCode.S					,
	SteerLeft2				= Enum.KeyCode.A					,
	SteerRight2				= 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			,
}
--



function uisBinds:BindToInput(actionName, func, ...)
	local binds = {...};
	self.connections[actionName] = {}
	
	for i = 1, #binds do
		local keycode = binds[i];
		self.connections[actionName][keycode] = {
			UIS.InputBegan:Connect(function(input, process)
				if (input.KeyCode == keycode) then
					func(actionName, input.UserInputState, input);
				end
			end),
			
			UIS.InputChanged:Connect(function(input, process)
				if (input.KeyCode == keycode) then
					func(actionName, input.UserInputState, input);
				end
			end),
			
			UIS.InputEnded:Connect(function(input, process)
				if (input.KeyCode == keycode) then
					func(actionName, input.UserInputState, input);
				end
			end)
		}
	end
end

function uisBinds:UnbindAction(actionName)
	for keycode, array in next, self.connections[actionName] do
		for i = 1, #array do
			array[i]:Disconnect();
		end
	end
	self.connections[actionName] = nil;
end
--Made by Luckymaxer



Camera = game:GetService("Workspace").CurrentCamera

Rate = (1 / 60)

Shake = {Movement = 40, Rate = 0.001}

local CoordinateFrame = Camera.CoordinateFrame
local Focus = Camera.Focus
while true do
	local CameraRotation = Camera.CoordinateFrame - Camera.CoordinateFrame.p
	local CameraScroll = (CoordinateFrame.p - Focus.p).magnitude
	local NewCFrame = CFrame.new(Camera.Focus.p) * CameraRotation * CFrame.fromEulerAnglesXYZ((math.random(-Shake.Movement, Shake.Movement) * Shake.Rate), (math.random(-Shake.Movement, Shake.Movement) * Shake.Rate), 0)
	CoordinateFrame = NewCFrame * CFrame.new(0, 0, CameraScroll)
	Camera.CoordinateFrame = CoordinateFrame
	wait(Rate)
end
--[[**
	"Links" this Janitor to an Instance, such that the Janitor will `Cleanup` when the Instance is `Destroyed()` and garbage collected. A Janitor may only be linked to one instance at a time, unless `AllowMultiple` is true. When called with a truthy `AllowMultiple` parameter, the Janitor will "link" the Instance without overwriting any previous links, and will also not be overwritable. When called with a falsy `AllowMultiple` parameter, the Janitor will overwrite the previous link which was also called with a falsy `AllowMultiple` parameter, if applicable.
	@param [t:Instance] Object The instance you want to link the Janitor to.
	@param [t:boolean?] AllowMultiple Whether or not to allow multiple links on the same Janitor.
	@returns [t:RbxScriptConnection] A pseudo RBXScriptConnection that can be disconnected.
**--]]


function Janitor.__index:LinkToInstance(Object, AllowMultiple)
	local Connection
	local IndexToUse = AllowMultiple and newproxy(false) or LinkToInstanceIndex
	local IsNilParented = Object.Parent == nil
	local ManualDisconnect = setmetatable({}, Disconnect)

	local function ChangedFunction(_DoNotUse, NewParent)
		if ManualDisconnect.Connected then
			_DoNotUse = nil
			IsNilParented = NewParent == nil

			if IsNilParented then
				coroutine.wrap(function()
					Heartbeat:Wait()
					if not ManualDisconnect.Connected then
						return
					elseif not Connection.Connected then
						self:Cleanup()
					else
						while IsNilParented and Connection.Connected and ManualDisconnect.Connected do
							Heartbeat:Wait()
						end

						if ManualDisconnect.Connected and IsNilParented then
							self:Cleanup()
						end
					end
				end)()
			end
		end
	end

	Connection = Object.AncestryChanged:Connect(ChangedFunction)
	ManualDisconnect.Connection = Connection

	if IsNilParented then
		ChangedFunction(nil, Object.Parent)
	end

	Object = nil
	return self:Add(ManualDisconnect, "Disconnect", IndexToUse)
end
-- << SETUP ITEMS (items which continue on respawn) >>


function module:SetupItem(player, itemName, playerRespawned)
	if playerRespawned then
		wait(0.1)
	end
	local pdata = main.pd[player]
	local item = pdata.Items[itemName]
	local head = main:GetModule("cf"):GetHead(player)
	if head and pdata then
		
		if itemName == "FreezeBlock" then
			main:GetModule("cf"):Movement(false, player)
			main:GetModule("cf"):SetTransparency(player.Character, 1)
			if item:FindFirstChild("FreezeClone") then
				main.signals.SetCameraSubject:FireClient(player, (item.FreezeClone.Humanoid))
			end
			
		elseif itemName == "JailCell" then
			head.CFrame = item.Union.CFrame
		
		elseif itemName == "ControlPlr" then
			local plr = item.Value
			local controllerHumanoid = main:GetModule("cf"):GetHumanoid(player)
			if plr and controllerHumanoid then
				main:GetModule("MorphHandler"):BecomeTargetPlayer(player, plr.UserId)
				main.signals.SetCameraSubject:FireClient(player, (controllerHumanoid))
				main:GetModule("cf"):CreateFakeName(player, plr.Name)
			else
				main:GetModule("cf"):RemoveControlPlr(player)
			end
			
		elseif itemName == "UnderControl" then
			local controller = item.Value
			local controllerHumanoid = main:GetModule("cf"):GetHumanoid(controller)
			if controller and controllerHumanoid then
				main.signals.SetCameraSubject:FireClient(player, (controllerHumanoid))
				--main:GetModule("cf"):SetTransparency(player.Character, 1, true)
				--main:GetModule("cf"):Movement(false, player)
				player.Character.Parent = nil
			else
				main:GetModule("cf"):RemoveUnderControl(player)
			end
			
			-- Controler
			-- Plr
			
		end
	end
end



return module
--vars


local weldbholestoanchoredparts = false --when you repeatedly weld new stuff to lets say a base it will start bouncing people up
local headrotationx = 0
local adsing = false
local sprinte = false
local savedws
local headoffset = Instance.new("Weld", handle)
headoffset.Name = "headoffsetholder"
headoffset.C0 = CFrame.new()
local movehead = true
local rayignore = {}
--[[**
	Checks if the given group is an ally of the target group and vice-versa.
	@param [Integer] GroupID The group you are checking.
	@param [Integer] TargetGroupID The group you are checking.
	@returns [Boolean] Whether or not the groups are allies.
**--]]


function GroupService:IsGroupAlly(GroupID, TargetGroupID)
	for _, Group in ipairs(GroupService:GetGroupAlliesAsync(GroupID)) do
		if Group.Id == TargetGroupID then
			return true
		end
	end

	return false
end
--Rear Suspension


Tune.RSusDamping	= 5		-- Spring Dampening
Tune.RSusStiffness	= 150		-- Spring Force
Tune.FAntiRoll 		= 0		-- Anti-Roll (Gyro Dampening)

Tune.RSusLength		= 10			-- Suspension length (in studs)
Tune.RPreCompress	= 5		-- Pre-compression adds resting length force
Tune.RExtensionLim	= 2		-- Max Extension Travel (in studs)
Tune.RCompressLim	= .5		-- Max Compression Travel (in studs)
Tune.RSusAngle		= 70		-- 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
--[[Engine]]


	--Torque Curve
	Tune.Horsepower		= 150		--	[TORQUE CURVE VISUAL]
	Tune.IdleRPM		= 1400		--		https://www.desmos.com/calculator/2uo3hqwdhf
	Tune.PeakRPM		= 7500		--		Use sliders to manipulate values
	Tune.Redline		= 8500		--		Copy and paste slider values into the respective tune values
	Tune.EqPoint		= 6000
	Tune.PeakSharpness	= 10.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)
--// F key, HornOn


mouse.KeyDown:connect(function(key)
	if key=="f" then 
		veh.Lightbar.middle.Airhorn:Play()
		veh.Lightbar.middle.Wail.Volume = 0
		veh.Lightbar.middle.Yelp.Volume = 0
		veh.Lightbar.middle.Priority.Volume = 0 
		veh.Lightbar.AH.Transparency = 0
	end
end)
---- IconMap ----
-- Image size: 256px x 256px
-- Icon size: 16px x 16px
-- Padding between each icon: 2px
-- Padding around image edge: 1px
-- Total icons: 14 x 14 (196)


local Icon, ClassIcon do
	local iconMap = 'http://www.roblox.com/asset/?id=' .. MAP_ID
	game:GetService('ContentProvider'):Preload(iconMap)
	local iconDehash do
		-- 14 x 14, 0-based input, 0-based output
		local f=math.floor
		function iconDehash(h)
			return f(h/14%14),f(h%14)
		end
	end

	function Icon(IconFrame,index)
		local row,col = iconDehash(index)
		local mapSize = Vector2_new(256,256)
		local pad,border = 2,1
		local iconSize = 16

		local class = 'Frame'
		if type(IconFrame) == 'string' then
			class = IconFrame
			IconFrame = nil
		end

		if not IconFrame then
			IconFrame = Create(class,{
				Name = "Icon";
				BackgroundTransparency = 1;
				ClipsDescendants = true;
				Create('ImageLabel',{
					Name = "IconMap";
					Active = false;
					BackgroundTransparency = 1;
					Image = iconMap;
					Size = UDim2_new(mapSize.x/iconSize,0,mapSize.y/iconSize,0);
				});
			})
		end

		IconFrame.IconMap.Position = UDim2_new(-col - (pad*(col+1) + border)/iconSize,0,-row - (pad*(row+1) + border)/iconSize,0)
		return IconFrame
	end

	function ClassIcon(IconFrame, index)
		local offset = index * 16

		local class = 'Frame'
		if type(IconFrame) == 'string' then
			class = IconFrame
			IconFrame = nil
		end

		if not IconFrame then
			IconFrame = Create(class,{
				Name = "Icon";
				BackgroundTransparency = 1;
				ClipsDescendants = true;
				Create('ImageLabel',{
					Name = "IconMap";
					BackgroundTransparency = 1;
					Image = CLASS_MAP_ID;
					ImageRectSize = Vector2_new(16, 16);
					ImageRectOffset = Vector2_new(offset, 0);
					Size = UDim2_new(1, 0, 1, 0);
					Parent = IconFrame
				});
			})
		end 

		IconFrame.IconMap.ImageRectOffset = Vector2_new(offset, 0);
		return IconFrame
	end
end
--- Gets a list of all possible values that could match based on the current value.


function Argument:GetAutocomplete()
	if self.Type.Autocomplete then
		return self.Type.Autocomplete(self:GetTransformedValue(#self.TransformedValues))
	else
		return {}
	end
end

function Argument:ParseValue(i)
	if self.Type.Parse then
		return self.Type.Parse(self:GetTransformedValue(i))
	else
		return self:GetTransformedValue(i)
	end
end
--[[Steering]]


	Tune.SteerInner		= 70		-- Inner wheel steering angle (in degrees)
	Tune.SteerOuter		= 70		-- Outer wheel steering angle (in degrees)
	Tune.SteerSpeed		= .5		-- Steering increment per tick (in degrees)
	Tune.ReturnSpeed	= .5		-- Steering increment per tick (in degrees)
	Tune.SteerDecay		= 320		-- Speed of gradient cutoff (in SPS)
	Tune.MinSteer		= 10		-- Minimum steering at max steer decay (in percent)
	Tune.MSteerExp		= 1			-- Mouse steering exponential degree
	
	--Steer Gyro Tuning
	Tune.SteerD			= 1200		-- Steering Dampening
	Tune.SteerMaxTorque	= 50000		-- Steering Force
	Tune.SteerP			= 8000		-- Steering Aggressiveness
--[[

Want an explanation of the script? ٩(｡•́‿•̀｡)۶
https://youtu.be/a6WMCfSZF8k (Shirooo)
	
--]]



game:GetService('StarterGui'):SetCoreGuiEnabled(Enum.CoreGuiType.Backpack, false)
 
 --< variables >--
local uis = game:GetService("UserInputService")
local player = game.Players.LocalPlayer
local char = workspace:WaitForChild(player.Name) -- added WaitForChild
local bp = player.Backpack
local hum = char:WaitForChild("Humanoid")
local frame = script.Parent.Frame
local template = frame.Template
local equipped = 0.2 -- icon transparencies
local unequipped = 0.7

local iconSize = template.Size
local iconBorder = {x = 15, y = 5} -- pixel space between icons

local inputKeys = { -- dictionary for effective referencing
	["One"] = {txt = "1"},
	["Two"] = {txt = "2"},
	["Three"] = {txt = "3"},
	["Four"] = {txt = "4"},
	["Five"] = {txt = "5"},
	["Six"] = {txt = "6"},
	["Seven"] = {txt = "7"},
	["Eight"] = {txt = "8"},
	["Nine"] = {txt = "9"},
	["Zero"] = {txt = "0"},
}

local inputOrder = { -- array for storing the order of the keys
	inputKeys["One"],inputKeys["Two"],inputKeys["Three"],inputKeys["Four"],inputKeys["Five"],
	inputKeys["Six"],inputKeys["Seven"],inputKeys["Eight"],inputKeys["Nine"],inputKeys["Zero"],
}
--	local function make()
--		local p = Instance.new("Part")
--		p.Anchored = true;
--		p.CanCollide = false
--		p.Size = Vector3.new(0,0,0)
--		p.Parent = workspace
--		return p
--	end
--	
--	Pets.Visualize = {make(),make(),make(),make()}


		
	function Pets:GetHeight(char_cf, instance)
		
		local instance_extents = instance:GetExtentsSize()
		local center, size = instance:GetBoundingBox() 
		local points = {(center:PointToWorldSpace(Vector3.new(size.X/2,-size.Y/2,size.Z/2))),
			(center:PointToWorldSpace(Vector3.new(-size.X/2,-size.Y/2,-size.Z/2))),
			(center:PointToWorldSpace(Vector3.new(size.X/2,-size.Y/2,-size.Z/2))), 
			(center:PointToWorldSpace(Vector3.new(-size.X/2,-size.Y/2,size.Z/2)))
		}
		
		local ignore = {instance, Player.Character}
		local height
		
		local all_height = {}
--[[Weight and CG]]


	Tune.Weight			= 2871		-- Total weight (in pounds)
	Tune.WeightBSize	= {			-- Size of weight brick (dimmensions in studs ; larger = more stable)
	 --[[Width]]		6		,
	 --[[Height]]		3.5		,
	 --[[Length]]		15		}
	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		= 2.17			-- Size of structural members (larger = more stable/carry more weight)
	Tune.AxleDensity	= .1		-- Density of structural members
-- defines subject and height of VR camera


function VRBaseCamera:GetVRFocus(subjectPosition, timeDelta)
	local lastFocus = self.lastCameraFocus or subjectPosition

	self.cameraTranslationConstraints = Vector3.new(
		self.cameraTranslationConstraints.x,
		math.min(1, self.cameraTranslationConstraints.y + timeDelta),
		self.cameraTranslationConstraints.z)

	local cameraHeightDelta = Vector3.new(0, self:GetCameraHeight(), 0)
	local newFocus = CFrame.new(Vector3.new(subjectPosition.x, lastFocus.y, subjectPosition.z):
			Lerp(subjectPosition + cameraHeightDelta, self.cameraTranslationConstraints.y))

	return newFocus
end
-- ROBLOX MOVED: expect/utils.lua


local function iterableEquality(a: any, b: any, aStack: Array<any>, bStack: Array<any>): boolean | nil
	aStack = aStack or {}
	bStack = bStack or {}

	if getType(a) ~= "set" or getType(b) ~= "set" then
		return nil
	end

	-- ROBLOX deviation: omitting constructor check

	local length = #aStack
	while length > 0 do
		-- Linear search. Performance is inversely proportional to the number of
		-- unique nested structures.
		-- circular references at same depth are equal
		-- circular reference is not equal to non-circular one
		if aStack[length] == a then
			return bStack[length] == b
		end

		-- ROBLOX deviation: this if check is not included in upstream
		-- if bStack[length] == b then
		-- 	return aStack[length] == a
		-- end

		length -= 1
	end

	table.insert(aStack, a)
	table.insert(bStack, b)

	local function iterableEqualityWithStack(localA: any, localB: any)
		return iterableEquality(localA, localB, { unpack(aStack) }, { unpack(bStack) })
	end

	-- ROBLOX TODO: (ADO-1217) If we eventually have a Map polyfill, we can
	-- expand this to include the Map case as well
	if a.size ~= nil then
		if a.size ~= b.size then
			return false
		elseif isA("set", a) then
			local allFound = true
			for _, aValue in a:ipairs() do
				if not b:has(aValue) then
					local has = false
					for _, bValue in b:ipairs() do
						local isEqual = equals(aValue, bValue, { iterableEqualityWithStack })
						if isEqual == true then
							has = true
						end
					end

					if has == false then
						allFound = false
						break
					end
				end
			end
			table.remove(aStack)
			table.remove(bStack)
			return allFound
		end
	end

	return nil

	-- ROBLOX deviation: omitted section of code for handling the case of a different
	-- kind of iterable not covered by the above Set case
end
--Right lean


XR15RightLegRightLean = -.5
YR15RightLegRightLean = -.35
ZR15RightLegRightLean = -.55
R15RightKneeRightLean = .1

XR15RightArmRightLean = .5
YR15RightArmRightLean = .5
ZR15RightArmRightLean = .72
R15RightElbowRightLean = 1.2

XR15LeftLegRightLean = -0
YR15LeftLegRightLean = .2
ZR15LeftLegRightLean = -.3
R15LeftKneeRightLean = .3

XR15LeftArmRightLean = -.5
YR15LeftArmRightLean = .3
ZR15LeftArmRightLean = -.2
R15LeftElbowRightLean = .2

XR15LowerTorsoRightLean = -.3
YR15LowerTorsoRightLean = .3
ZR15LowerTorsoRightLean = 0.1
ZR15UpperTorsoRightLean = .2
--while configuracao.EnableMedSys do
--	if ACS_Client:GetAttribute("Bleeding") then
--		if ACS_Client:GetAttribute("Tourniquet")then
--			Sang.Value = (Sang.Value - 0.5)
--		else
--			Sang.Value = (Sang.Value - (MLs.Value/120))
--			MLs.Value =  math.max(0,MLs.Value + 0.025)
--		end
--	end