Pinkstack/roblox-luau-corpus-text huggingface dataset:
-- Animation 


CEs.AnimateT.OnClientEvent:connect(function(Part,NCF,Time,O)
	if Part:IsDescendantOf(plr.Character) then return end
	
	if O then
		TweenService:Create(Part,TweenInfo.new(Time),O):Play()	
	else
		TweenService:Create(Part,TweenInfo.new(Time),{C1=NCF}):Play()
	end
end)

CEs.AnimateFE.OnClientEvent:connect(function(w,Time,Ans,NAngle,NRotation,Rchr,HigV)
	if Rchr == plr.Character then return end
	
	TweenService:Create(Rchr.Torso.Neck,TweenInfo.new(Time),{C0=OriginalC0*CFrame.Angles(Ans,NAngle,NRotation)}):Play()
	
	TweenService:Create(Rchr.Torso.Mweld1,TweenInfo.new(Time),
		{C1=w[1]*CFrame.new(0,HigV,0)}):Play()
	
	TweenService:Create(Rchr.Torso.Mweld2,TweenInfo.new(Time),
		{C1=w[2]*CFrame.new(0,HigV,0)}):Play()
	
	if w[3] then -- Check if there is an extra weld
		TweenService:Create(Rchr["Right Arm"].Mweld3,TweenInfo.new(Time),
		    {C1=w[3]*CFrame.new(0,HigV,0)}):Play()	
	end
				
	TweenService:Create(Rchr.HumanoidRootPart.Mtweld,TweenInfo.new(Time),
		{C1=w[4]*CFrame.new(0,HigV,0)}):Play()
end)
--[[
AnimateKey(note1,px,py,pz,ox,oy,oz,Time)
--note1(1-61), position x, position y, position z, orientation x, orientation y, orientation z, time

local obj = --object or gui or wahtever goes here
local Properties = {}
Properties.Size = UDim2.new()
Tween(obj,Properties,2,true,Enum.EasingStyle.Linear,Enum.EasingDirection.Out,0,false)
--Obj,Property,Time,wait,Easingstyle,EasingDirection,RepeatAmt,Reverse
]]


local parts = Piano.Case:GetChildren()
local PartAmt = 0
function HighlightPianoKey(note1,transpose)
	if not Settings.KeyAesthetics then return end
	local octave = math.ceil(note1/12)
	local note2 = (note1 - 1)%12 + 1
	if PartAmt < 20 then
		PartAmt = PartAmt + 1
		local part = parts[math.random(1,#parts)]:clone()
		part.Parent = Piano.Keys.Parts
		part.Name = note1
		part.Color = Color3.fromRGB(math.random(70,255),math.random(70,255),math.random(70,255))
		part.Material = Materials[math.random(1,#Materials)]
		part.Position = Vector3.new(part.Position.x + math.random(-5,5),part.Position.y,part.Position.z + math.random(-5,5))
		part.Transparency = 0
		local lifelen = math.random(0.6,2.0)
		local t = 0
		
		while t <= lifelen do
			wait(.05)
			t = t + .05
			if math.random(1,4) ~= 1 then
				for i = 1,5 do
					if math.random(1,2) == 1 then
						if i == 1 then
							part.Color = Color3.fromRGB(math.random(70,255),math.random(70,255),math.random(70,255))
						elseif i == 2 then
							part.Material = Materials[math.random(1,#Materials)]
						elseif i == 3 then
							part.Position = Vector3.new(part.Position.x + math.random(-8.0,8.0),part.Position.y,part.Position.z + math.random(-8.0,8.0))
						elseif i == 4 then
							part.Orientation = Vector3.new(part.Orientation.x + math.random(-80,80),part.Orientation.y + math.random(-80,80),part.Orientation.z + math.random(-80,80))
						elseif i == 5 then
							part.Size = Vector3.new(part.Size.x + math.random(-2.0,2.0),part.Size.y + math.random(-2.0,2.0),part.Size.z + math.random(-2.0,2.0))
						end
					end
				end
			end
		end
		PartAmt = PartAmt - 1
		part:destroy()
	end
	return
end
-- Detect input stopped


UIS.InputEnded:Connect(function(input)
	-- Detect input to run
	if input.KeyCode==Enum.KeyCode.LeftShift then
		-- Make sure is running and not crawling
		if shiftDown==true and not cDown then
			-- Stop running
			shiftDown=false
			hum.WalkSpeed=18
		end
	-- Detect input to stop crawling
	else if input.KeyCode==Enum.KeyCode.C then
			-- Make sure crawling and is not running
			if cDown==false and not shiftDown then
				cDown=false
				hum.WalkSpeed=18
				--crawlAnm:Stop()
			end
		end
	end
end)
-- ================================================================================
-- VARIABLES
-- ================================================================================
-- Services


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local PhysicsService = game:GetService("PhysicsService")
local ContextActionService = game:GetService("ContextActionService")
local GuiService = game:GetService("GuiService")
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
--[[Susupension]]


	Tune.SusEnabled		= false		-- works only in with PGSPhysicsSolverEnabled, defaults to false when PGS is disabled
	
	--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.FAntiRoll 		= 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		= "Bright red"	-- Suspension Color [BrickColor]
	Tune.SusCoilCount	= 6				-- Suspension Coil Count
	Tune.WsColor		= "Black"		-- Wishbone Color [BrickColor]
	Tune.WsThickness	= .1			-- Wishbone Rod Thickness
-- Variables (best not to touch these!)


local button = script.Parent .Parent.Parent
local car = script.Parent.Parent.Parent.Parent.Car.Value
local sound = script.Parent.Parent.Start
local st = script.Parent.Parent.Stall
st.Parent = car.DriveSeat
sound.Parent = car.DriveSeat -- What brick the start sound is playing from.
button.MouseButton1Click:connect(function() -- Event when the button is clicked
	if script.Parent.Parent.Parent.Text == "Engine: Off" then -- If the text says it's off then..
		sound:Play() -- Startup sound plays..
		wait(1) -- I don't know what to put for this
		script.Parent.Parent.Parent.Parent.IsOn.Value = true -- The car is is on, or in other words, start up the car.
		button.Text = "Engine: On"  -- You don't really need this, but I would keep it.
	else -- If it's on then when you click the button,
		st:play()
		script.Parent.Parent.Parent.Parent.IsOn.Value = false -- The car is turned off.
		button.Text = "Engine: Off"
	end -- Don't touch this.
end) -- And don't touch this either.
--







sp=script.Parent

sp.Luminate.SourceValueChanged:connect(function(val)
	if val==1 then
		sp.BrickColor=BrickColor.new("White")
		sp.Transparency=0
		sp.PointLight.Enabled=true
	elseif val==0 then
		sp.BrickColor=BrickColor.new("Really black")
		sp.Transparency=.5
		sp.PointLight.Enabled=false
	end
end)

script.Parent.Configuration.Brightness.Changed:connect(function()
script.Parent.PointLight.Range = script.Parent.Configuration.Brightness.Value
script.Parent.PointLight.Brightness = 1+script.Parent.Configuration.Brightness.Value/300
end)
--back motor



script.Parent.Wheels.boggieB.motb.HingeConstraint.AngularVelocity = speed
script.Parent.Wheels.boggieB.motb.HingeConstraint2.AngularVelocity = -speed
script.Parent.Wheels.boggieB.motb.HingeConstraint.MotorMaxTorque = RPM
script.Parent.Wheels.boggieB.motb.HingeConstraint2.MotorMaxTorque = RPM
--[[Transmission]]


	Tune.TransModes		= {"Auto", "Semi", "Manual"}								--[[
	[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													]]
	
	--Automatic Settings
	Tune.AutoShiftMode	= "Speed"												--[[
	[Modes]
		"Speed"		: Shifts based on wheel speed
		"RPM"		: Shifts based on RPM											]]	
	Tune.AutoUpThresh	= -200		--Automatic upshift point 	(relative to peak RPM, positive = Over-rev)
	Tune.AutoDownThresh = 1400		--Automatic downshift point (relative to peak RPM, positive = Under-rev)
	
	--Gear Ratios
	Tune.FinalDrive		= 4.06			-- Gearing determines top speed and wheel torque
	Tune.Ratios			= {				-- Higher ratio = more torque, Lower ratio = higher top speed
		--[[Reverse]]	3.70		,	-- Copy and paste a ratio to add a gear
		--[[Neutral]]	0			,	-- Ratios can also be deleted
		--[[ 1 ]]		3.53		,	-- Reverse, Neutral, and 1st gear are required
		--[[ 2 ]]		2.04		,
		--[[ 3 ]]		1.38		,
		--[[ 4 ]]		1.03		,
		--[[ 5 ]]		0.81		,
		--[[ 6 ]]		0.64		,
		--[[ 7 ]]		0.50		,
		--[[ 8 ]]		0.37		,
	}
	Tune.FDMult			= 1.5			-- Ratio multiplier (Change this value instead of FinalDrive if car is struggling with torque ; Default = 1)
--[[
	Creates and configures collision groups.
	Used to prevent characters from colliding with wagons.
--]]



local PhysicsService = game:GetService("PhysicsService")
local ServerStorage = game:GetService("ServerStorage")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local DescendantsCollisionGroup = require(ServerStorage.Source.DescendantsCollisionGroup)
local ComponentCreator = require(ReplicatedStorage.Source.ComponentCreator)
local CollisionGroup = require(ServerStorage.Source.CollisionGroup)
local CharacterTag = require(ReplicatedStorage.Source.SharedConstants.CollectionServiceTag.CharacterTag)

local CollisionGroupManager = {}

function CollisionGroupManager.start()
	PhysicsService:RegisterCollisionGroup(CollisionGroup.Character)
	PhysicsService:RegisterCollisionGroup(CollisionGroup.Wagon)
	PhysicsService:CollisionGroupSetCollidable(CollisionGroup.Character, CollisionGroup.Wagon, false)
	PhysicsService:CollisionGroupSetCollidable(CollisionGroup.Wagon, CollisionGroup.Wagon, false)

	-- DescendantsCollisionGroup.new() will be called with the Character model, CollisionGroup.Character as the arguments
	ComponentCreator.new(CharacterTag.Character, DescendantsCollisionGroup, CollisionGroup.Character):listen()
end

return CollisionGroupManager
--[=[
	@return Streamable
	@param parent Instance
	@param childName string

	Constructs a Streamable that watches for a direct child of name `childName`
	within the `parent` Instance. Call `Observe` to observe the existence of
	the child within the parent.
]=]


function Streamable.new(parent: Instance, childName: string)
	local self: StreamableWithInstance = {}
	setmetatable(self, Streamable)

	self._trove = Trove.new()
	self._shown = self._trove:Construct(Signal)
	self._shownTrove = Trove.new()
	self._trove:Add(self._shownTrove)

	self.Instance = parent:FindFirstChild(childName)

	local function OnInstanceSet()
		local instance = self.Instance
		if typeof(instance) == "Instance" then
			self._shown:Fire(instance, self._shownTrove)
			self._shownTrove:Connect(instance:GetPropertyChangedSignal("Parent"), function()
				if not instance.Parent then
					self._shownTrove:Clean()
				end
			end)
			self._shownTrove:Add(function()
				if self.Instance == instance then
					self.Instance = nil
				end
			end)
		end
	end

	local function OnChildAdded(child: Instance)
		if child.Name == childName and not self.Instance then
			self.Instance = child
			OnInstanceSet()
		end
	end

	self._trove:Connect(parent.ChildAdded, OnChildAdded)
	if self.Instance then
		OnInstanceSet()
	end

	return self
end
--		child.C0 = CFrame.new(0,-0.6,0)*CFrame.fromEulerAnglesXYZ(-(math.pi/2),0,0) --// Reposition player


		if child.Part1.Name == "HumanoidRootPart" then
			player = game.Players:GetPlayerFromCharacter(child.Part1.Parent)
			if player and (not player.PlayerGui:FindFirstChild("Screen")) then --// The part after the "and" prevents multiple GUI's to be copied over.
				GUI.CarSeat.Value = script.Parent --// Puts a reference of the seat in this ObjectValue, now you can use this ObjectValue's value to find the car directly.
				GUI:Clone().Parent = player.PlayerGui --// Compact version
				script.Parent.Parent.Body.Lights.RunL.Material = "Neon"
				script.Parent.Parent.Body.Lights.RunR.Material = "Neon"
				script.Parent.Parent.Body.Dash.DashSc.G.Enabled = true
				script.Parent.Parent.Body.Dash.S.G.Enabled = true
			end
		end
	end
end)

script.Parent.ChildRemoved:connect(function(child)
	if child:IsA("Weld") then
		if child.Part1.Name == "HumanoidRootPart" then
			game.Workspace.CurrentCamera.FieldOfView = 70
			player = game.Players:GetPlayerFromCharacter(child.Part1.Parent)
			if player and player.PlayerGui:FindFirstChild("SS3") then
				player.PlayerGui:FindFirstChild("SS3"):Destroy()
				script.Parent.Parent.Body.Lights.RunL.Material = "SmoothPlastic"
				script.Parent.Parent.Body.Lights.RunR.Material = "SmoothPlastic"
				script.Parent.Parent.Body.Dash.DashSc.G.Enabled = false
				script.Parent.Parent.Body.Dash.S.G.Enabled = false
			end
		end
	end	
end)
--// im not gonna comment this :troll:


local function OnDeath()
	StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.All, false)
	TweenService:Create(Overlay, TweenInfo.new(0.5), {BackgroundTransparency = 0.4}):Play()
	TweenService:Create(Text, TweenInfo.new(0.6), {TextTransparency = 0, TextStrokeTransparency = 0}):Play()
	task.wait(2)
	TweenService:Create(Text, TweenInfo.new(0.6), {TextTransparency = 1, TextStrokeTransparency = 1}):Play()
	TweenService:Create(Overlay, TweenInfo.new(0.5), {BackgroundTransparency = 0}):Play()
	local OldCharacter = Character
	repeat task.wait() until OldCharacter ~= Character
	task.wait(1)
	Overlay:TweenPosition(UDim2.fromScale(-1,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quad,0.5)
	task.wait(0.5)
	StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.All, true)
	Overlay.Position = UDim2.fromScale(0,0)
	Overlay.BackgroundTransparency = 1
end

local DiedConnection = Humanoid.Died:Connect(OnDeath)

Player.CharacterAdded:Connect(function()
	repeat task.wait() until Player.Character
	Character = Player.Character
	Humanoid = Character:WaitForChild("Humanoid")
	DiedConnection:Disconnect()
	DiedConnection = Humanoid.Died:Connect(OnDeath)
end)
-- Functions



local function onRenderStepped()
	-- Adjust main frame canvas size based on amount of items.
	
	local uiGridLayout = iContainer.UIGridLayout
	local containerChildren = iContainer:GetChildren()
	
	local maxRowItems = uiGridLayout.FillDirectionMaxCells
	local rowCount = math.ceil((#containerChildren - 1) / maxRowItems)
	
	local totalHeight = ((uiGridLayout.CellSize.Y.Offset) + (uiGridLayout.CellPadding.Y.Offset * 2)) * rowCount
	
	iContainer.Size = UDim2.new(0.8,0, 0,totalHeight)
	
	mFrame.CanvasSize = UDim2.new(0, mFrame.CanvasSize.X.Offset, 0, iContainer.Size.Y.Offset + 100)
	
	-- Get amount of tools player owns
	
	local toolsFound = {}
	
	for i, obj in pairs(char:GetChildren()) do
		if obj:IsA("Tool") then
			currentTool = obj
			table.insert(toolsFound, obj)
			
		end
	end
	
	for i, obj in pairs(plr.Backpack:GetChildren()) do
		if obj:IsA("Tool") then	
			table.insert(toolsFound, obj)
			
		end
	end
	
	print(#toolsFound)
	
	-- If player has more than 1 tool in his character. . .
	
	if #toolsFound > 1 then
		
		-- Transport second item to inventory storage
		
		local toolToTransfer = toolsFound[1]
		
		local folder_prefabs = game.ReplicatedStorage.Prefabs
		local prefab_itemSlot = folder_prefabs.ItemSlot
		
		local itemSlot = prefab_itemSlot:Clone()
		itemSlot.Parent = iContainer
		
		itemSlot.equip.Text = toolToTransfer.Name
		
		itemSlot.ItemName.Value = toolToTransfer.Name
		
		-- Remove tool from existence
		
		toolToTransfer:Destroy()
		
	end
	
	-- Reset table
	
	table.clear(toolsFound)
	
end
--------



local Handler = require(script.MainHandler)
local HitboxClass = require(script.HitboxObject)

function RaycastHitbox:Initialize(object, ignoreList)
	assert(object, "You must provide an object instance.")
	
	local newHitbox = Handler:check(object)
	if not newHitbox then
		newHitbox = HitboxClass:new()
		newHitbox:config(object, ignoreList)
		newHitbox:seekAttachments(RaycastHitbox.AttachmentName, RaycastHitbox.WarningMessage)
		newHitbox.debugMode = RaycastHitbox.DebugMode
		Handler:add(newHitbox)
	end
	return newHitbox
end

function RaycastHitbox:Deinitialize(object) --- Deprecated
	Handler:remove(object)
end

function RaycastHitbox:GetHitbox(object)
   return Handler:check(object)
end

return RaycastHitbox
--[[
* Determine if the suffix of one string is the prefix of another.
* @param {string} text1 First string.
* @param {string} text2 Second string.
* @return {number} The number of characters common to the end of the first
*     string and the start of the second string.
* @private
--]]


local function _diff_commonOverlap(text1: string, text2: string): number
	-- Cache the text lengths to prevent multiple calls.
	local text1_length = #text1
	local text2_length = #text2
	-- Eliminate the null case.
	if text1_length == 0 or text2_length == 0 then
		return 0
	end
	-- Truncate the longer string.
	if text1_length > text2_length then
		text1 = strsub(text1, text1_length - text2_length + 1)
	elseif text1_length < text2_length then
		text2 = strsub(text2, 1, text1_length)
	end
	local text_length = min(text1_length, text2_length)
	-- Quick check for the worst case.
	if text1 == text2 then
		return text_length
	end

	-- Start by looking for a single character match
	-- and increase length until no match is found.
	-- Performance analysis: https://neil.fraser.name/news/2010/11/04/
	local best = 0
	local length = 1
	while true do
		local pattern = strsub(text1, text_length - length + 1)
		local found = strfind(text2, pattern, 1, true)
		if found == nil then
			return best
		end
		-- ROBLOX FIXME Luau: narrowing/type state should make this cast unnecessary
		length += (found :: number - 1)
		if found == 1 or strsub(text1, text_length - length + 1) == strsub(text2, 1, length) then
			best = length
			length += 1
		end
	end
	return best
end
-- Helper functions


local function loadAnimation(controller, animationId)
	animation.AnimationId = "rbxassetid://" .. animationId
	return controller:LoadAnimation(animation)
end

local function isolateAndDampenYAngle(targetCFrame, proportionMultiplier)
	proportionMultiplier = proportionMultiplier or 1
	local _, y = targetCFrame:ToEulerAnglesXYZ()
	
	return CFrame.new(targetCFrame.Position) * CFrame.Angles(
		0,
		y * proportionMultiplier,
		0
	)
end

local function makeNPCLookAt(lookAtPosition)
	if not lookAtPosition then
		return
	end
	
	local differenceVector = lookAtPosition - npcModel.PrimaryPart.Position
	local targetCFrame = rotationOffset * CFrame.new(Vector3.new(), differenceVector.Unit) or rotationOffset
	
	-- Let the waving animation move the body
	if not waveAnimationTrack.IsPlaying then
		NPC.Root.Transform = isolateAndDampenYAngle(targetCFrame, TwistProportions.Root)
		NPC.Waist.Transform = isolateAndDampenYAngle(targetCFrame, TwistProportions.Waist)
	end
	NPC.Neck.Transform = isolateAndDampenYAngle(targetCFrame, waveAnimationTrack.IsPlaying and TwistProportions.Full or TwistProportions.Neck)
	
	return differenceVector.Magnitude
end
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------




function onRunning(speed)
	if speed > 0.01 then
		playAnimation("walk", 0.1, Humanoid)
		if currentAnimInstance and currentAnimInstance.AnimationId == "http://www.roblox.com/asset/?id=180426354" then
			setAnimationSpeed(speed / 14.5)
		end
		pose = "Running"
	else
		if emoteNames[currentAnim] == nil then
			playAnimation("idle", 0.1, Humanoid)
			pose = "Standing"
		end
	end
end

function onDied()
	pose = "Dead"
end

function onJumping()
	playAnimation("jump", 0.1, Humanoid)
	jumpAnimTime = jumpAnimDuration
	pose = "Jumping"
end

function onClimbing(speed)
	playAnimation("climb", 0.1, Humanoid)
	setAnimationSpeed(speed / 12.0)
	pose = "Climbing"
end

function onGettingUp()
	pose = "GettingUp"
end

function onFreeFall()
	if (jumpAnimTime <= 0) then
		playAnimation("fall", fallTransitionTime, Humanoid)
	end
	pose = "FreeFall"
end

function onFallingDown()
	pose = "FallingDown"
end

function onSeated()
	pose = "Seated"
end

function onPlatformStanding()
	pose = "PlatformStanding"
end

function onSwimming(speed)
	if speed > 0 then
		pose = "Running"
	else
		pose = "Standing"
	end
end

function getTool()	
	for _, kid in ipairs(Figure:GetChildren()) do
		if kid.className == "Tool" then return kid end
	end
	return nil
end

function getToolAnim(tool)
	for _, c in ipairs(tool:GetChildren()) do
		if c.Name == "toolanim" and c.className == "StringValue" then
			return c
		end
	end
	return nil
end

function animateTool()
	
	if (toolAnim == "None") then
		playToolAnimation("toolnone", toolTransitionTime, Humanoid, Enum.AnimationPriority.Idle)
		return
	end

	if (toolAnim == "Slash") then
		playToolAnimation("toolslash", 0, Humanoid, Enum.AnimationPriority.Action)
		return
	end

	if (toolAnim == "Lunge") then
		playToolAnimation("toollunge", 0, Humanoid, Enum.AnimationPriority.Action)
		return
	end
end

function moveSit()
end

local lastTick = 0

function move(time)
	local amplitude = 1
	local frequency = 1
  	local deltaTime = time - lastTick
  	lastTick = time

	local climbFudge = 0
	local setAngles = false

  	if (jumpAnimTime > 0) then
  		jumpAnimTime = jumpAnimTime - deltaTime
  	end

	if (pose == "FreeFall" and jumpAnimTime <= 0) then
		playAnimation("fall", fallTransitionTime, Humanoid)
	elseif (pose == "Seated") then
		playAnimation("sit", 0.5, Humanoid)
		return
	elseif (pose == "Running") then
		playAnimation("walk", 0.1, Humanoid)
	elseif (pose == "Dead" or pose == "GettingUp" or pose == "FallingDown" or pose == "Seated" or pose == "PlatformStanding") then
-- ROBLOX deviation not ported as it doesn't seem necessary in Lua
-- exports.interopRequireDefault = require(script.interopRequireDefault).default


exports.isInteractive = require(script.isInteractive).default
exports.isPromise = require(script.isPromise).default
exports.setGlobal = require(script.setGlobal).default
exports.deepCyclicCopy = require(script.deepCyclicCopy).default
exports.convertDescriptorToString = require(script.convertDescriptorToString).default
local specialCharsModule = require(script.specialChars)
Object.assign(exports, specialCharsModule)
--[[
	Runs the given TestPlan and returns a TestResults object representing the
	results of the run.
]]


function TestRunner.runPlan(plan)
	local session = TestSession.new(plan)
	local lifecycleHooks = LifecycleHooks.new()

	local exclusiveNodes = plan:findNodes(function(node)
		return node.modifier == TestEnum.NodeModifier.Focus
	end)

	session.hasFocusNodes = #exclusiveNodes > 0

	_G[JEST_TEST_CONTEXT] = {
		blocks = {},
		instance = nil,
		snapshotState = nil,
	}

	-- ROBLOX deviation START: adding startTime so that jest reporters can report time elapsed for tests
	local fenv = getfenv()
	-- ROBLOX NOTE: additional check as DateTime only exists in Luau and not in native Lua
	if fenv.DateTime then
		session.results.startTime = fenv.DateTime.now().UnixTimestampMillis
	end
	-- ROBLOX deviation END

	TestRunner.runPlanNode(session, plan, lifecycleHooks)

	_G[JEST_TEST_CONTEXT] = nil

	return session:finalize()
end