Untitled

Run Settings
LanguageLua
Language Version
Run Command
--!optimize 2 --!native --// SERVICES \\-- local RSV = game:GetService("RunService") local LN = game:GetService("Lighting") local SOUNDS = game:GetService("SoundService") local Debris = game:GetService("Debris") local plrs = game:GetService("Players") local HTTP = game:GetService("HttpService") local TS = game:GetService("TweenService") --// VARIABLES \\-- local RND = Random.new() local TI = TweenInfo.new local UTILS = require(106143749205036) local CHAT = UTILS.CHAT local VFX = UTILS.VFX local SFX = UTILS.SFX local DICT = UTILS.DICT local OTHER = UTILS.OTHER local CURRPOS = CFrame.new(0,30,0) local replicatedServices = {"Workspace","SoundService","Chat","Players","MarketplaceService","MaterialService","StarterPlayer","StarterPack","StarterGui","LocalizationService","JointsService","FriendService","InsertService","ReplicatedStorage","Lighting","Teams","TestService","TextChatService","ProximityPromptService","VoiceChatService"} local script = require(121865815857859) local Parts = script.Parts local Joints = script.Joints local Assets = script.Assets local Anims = script.Anims local B = { Torso = Parts["Torso"]:Clone(), Head = Parts["Head"]:Clone(), ["Right Arm"] = Parts["Right Arm"]:Clone(), ["Right Leg"] = Parts["Right Leg"]:Clone(), ["Left Arm"] = Parts["Left Arm"]:Clone(), ["Left Leg"] = Parts["Left Leg"]:Clone(), } --// FUNCTIONS \\-- function talk(msg) coroutine.resume(coroutine.create(function() for _,v in pairs(plrs:GetPlayers()) do pcall(function() local gui = Assets.Message:Clone() gui.Local:SetAttribute("msg",msg) gui.Local.Enabled = true gui.Parent = v:FindFirstChildWhichIsA("PlayerGui") end) end end)) end function CIsA(obj,classname) local cl = classname:lower() if cl == "mesh" then return obj:IsA("SpecialMesh") or obj:IsA("FileMesh") or obj:IsA("EditableMesh") or obj:IsA("CharacterMesh") or obj:IsA("BevelMesh") or obj:IsA("CylinderMesh") or obj:IsA("DataModelMesh") or obj:IsA("BlockMesh") elseif cl == "bodymover" then return obj:IsA("BodyMover") or obj:IsA("VectorForce") or obj:IsA("Torque") or obj:IsA("AlignPosition") or obj:IsA("AlignOrientation") or obj:IsA("LineForce") or obj:IsA("LinearVelocity") else return obj:IsA(classname) end end function CFindFirstChildOfClass(obj,classname,recursive,whitelisttag) local children = recursive and obj:GetDescendants() or obj:GetChildren() for _,v in pairs(children) do if not (whitelisttag and v:HasTag(whitelisttag)) then if CIsA(v,classname) then return v end end end end function ProperStall(lvl, f, ...) local t = ... if RSV:IsStudio() then f(t) return end task.spawn(function() for i = 1, lvl do task.synchronize() task.desynchronize() end f(t) end) end function Priority() local Methods,Running,IsSerial = {},false,true local TweenPriority = nil function Methods:Connect(Function,...) Running = true local Thread = {...} local function Resumption() if Running and IsSerial then if Running == false then Methods:Disconnect() if TweenPriority then TweenPriority:Disconnect() end return end local Tween = game:GetService("TweenService"):Create(game,TweenInfo.new(0),{}) TweenPriority = Tween.Completed:Connect(function() task.spawn(Resumption) Function(table.unpack(Thread)) end) Tween:Play() end end task.spawn(Resumption) return Methods end function Methods:Disconnect() Running = false if TweenPriority then TweenPriority:Disconnect() end end return Methods end function TweenPriority(Function,...) return Priority():Connect(Function,...) end function BFLoop(f,...) local args = ... local t = tick() local last local function bf() if last then pcall(last.Destroy,last) end last = Instance.new("BindableEvent") last.Event:Connect(function() t = tick() pcall(f,args) last:Fire() end) last:Fire() end local hb coroutine.resume(coroutine.create(function() hb = game:GetService("RunService").Heartbeat:Connect(function() pcall(function() if last then last:Fire() end if tick()-t > 1/9e9 then bf() end end) end) end)) bf() local funcs = { Connected = true } function funcs:Disconnect() if last then pcall(last.Destroy,last) end hb:Disconnect() funcs.Connected = false end return funcs end function Perm(obj, property, value) pcall(function() obj[property] = value obj:GetPropertyChangedSignal(property):Connect(function() pcall(function() obj[property] = value end) end) end) end function ifSetProp(obj,prop,val) pcall(function() if obj[prop] ~= val then obj[prop] = val end end) end function motorToOffset(m6d) local c1,c0 = m6d.C1, m6d.C0 local offset = c0 * c1:Inverse() return offset end function getJointByPartname(pname) for _,v in next,Joints:GetChildren() do if v:GetAttribute("PartName") == pname then return v end end end function random(...) return ({...})[math.random(1,#({...}))] end function randomstr(chars) local r = "" for i=1,chars do local rd = math.random(1,2) local ch = string.char(math.random(33,126)) if rd == 1 then r = r..ch:upper() else r = r..ch:lower() end end return r end local _JD = {} for _,v in next,Joints:GetChildren() do _JD[v.Name]=v.C0 end function LoadAnimation(Sequence,SmoothAnimation,Speed,TimeDiff) Speed = Speed or 1 local times = {} for i,kf in next,Sequence:GetChildren() do times[i]=kf.Time end local self = { Playing = false, SmoothAnimation = SmoothAnimation, Sequence = Sequence, OnEnded = (function() end), OnKeyframeReached = (function(keyframeName) end), OnDidLoop = (function() end), Speed = Speed } local _keyframes = self.Sequence:GetKeyframes() local t = {} local function play() for i,kf in next,_keyframes do local _descendants = kf:FindFirstChild("HumanoidRootPart") and kf.HumanoidRootPart:GetDescendants() or kf:GetDescendants() task.delay(kf.Time/self.Speed,function() if not self.Playing then return end self.OnKeyframeReached(kf.Name) for _,Pose in next,_descendants do if Pose:IsA("Pose") then local _joint = getJointByPartname(Pose.Name) local _style = (Pose.EasingStyle or Enum.EasingStyle.Linear) local _dir = (Pose.EasingDirection or Enum.EasingDirection.In) local _tweenTime = .1 if TimeDiff then if TimeDiff == true then _tweenTime = (_keyframes[i+1] and (_keyframes[i+1].Time-(kf and kf.Time or 0)) or _keyframes[1].Time)/(tonumber(self.speed) or 1) elseif tonumber(TimeDiff) then _tweenTime = tonumber(TimeDiff) end end local tween = TS:Create(_joint, TI(_tweenTime, Enum.EasingStyle[(_style.Name == "Constant" and "Linear" or _style.Name)], Enum.EasingDirection[_dir.Name]), {C0 = _JD[_joint.Name]*Pose.CFrame}) tween:Play() table.insert(t,tween) end end end) end end local maxwait = math.max(table.unpack(times)) function self:Play() if not self.Playing then self.Playing = true if Sequence.Loop then coroutine.resume(coroutine.create(function() while self.Playing do play() task.wait(maxwait/Speed) if self.Playing then self.OnDidLoop() end end end)) else play() task.delay(maxwait/Speed,function() if self.Playing then self.Playing = false self.OnEnded() end end) end end end function self:Stop() self.Playing = false for _,v in next,t do v:Cancel() end self.OnEnded() end function self:Replay() self:Stop() RSV.Stepped:Wait() self:Play() end return self end function refit() for i,v in next,B do coroutine.resume(coroutine.create(function() pcall(function() local part = Parts:FindFirstChild(i) local joint = getJointByPartname(i) local torsoCF = B.Torso.CFrame if i == "Torso" then torsoCF = CURRPOS end if not v or OTHER.IsDestroyed(v) then local clone = part:Clone() B[i] = clone v = clone Perm(v,"Size",part.Size) Perm(v,"Anchored",true) Perm(v,"Transparency",part.Transparency) Perm(v,"LocalTransparencyModifier",0) end pcall(function() local mesh = CFindFirstChildOfClass(v,"mesh",false) if mesh then mesh:Destroy() end end) ifSetProp(v,"CanCollide",false) ifSetProp(v,"CanTouch",false) ifSetProp(v,"CanQuery",false) ifSetProp(v,"AssemblyLinearVelocity",Vector3.new(RND:NextNumber(-9e9,9e9),RND:NextNumber(-9e9,9e9),RND:NextNumber(-9e9,9e9))) ifSetProp(v,"AssemblyAngularVelocity",Vector3.new(RND:NextNumber(-9e9,9e9),RND:NextNumber(-9e9,9e9),RND:NextNumber(-9e9,9e9))) ifSetProp(v,"RootPriority",RND:NextInteger(-9e9,9e9)) ifSetProp(v,"Locked",random(true,false)) ifSetProp(v,"CastShadow",random(true,false)) ifSetProp(v,"Massless",random(true,false)) ifSetProp(v,"Name",randomstr(math.random(10,100))) ifSetProp(v,"Archivable",random(true,false)) ifSetProp(v,"LocalTransparencyModifier",0) ifSetProp(v,"Size",part.Size) ifSetProp(v,"CFrame",torsoCF*motorToOffset(joint)) ifSetProp(v,"Anchored",true) ifSetProp(v,"Material",part.Material) ifSetProp(v,"Color",part.Color) ifSetProp(v,"Transparency",part.Transparency) ifSetProp(v,"Reflectance",part.Reflectance) if part:IsA("MeshPart") then if v.MeshId ~= part.MeshId or v.TextureID ~= part.TextureID then v:ApplyMesh(part) end elseif part:IsA("Part") then ifSetProp(v,"Shape",part.Shape) end ifSetProp(v,"Parent",random(workspace,workspace.Terrain)) end) end)) end end coroutine.resume(coroutine.create(function() for _,v in pairs({RSV.PostSimulation, RSV.PreSimulation, RSV.PreRender}) do v:Connect(function() coroutine.wrap(refit)() end) end end)) TS:Create(LN,TI(2,Enum.EasingStyle.Sine),{ExposureCompensation=-1.25}):Play() local currAnim = LoadAnimation(Anims.Idle,true) currAnim:Play() local Scene = VFX.CutScene() Scene.SetPos(CURRPOS*CFrame.new(0,0,-5)*CFrame.Angles(0,math.rad(180),0)) Scene.Start() talk("Hello....") task.wait(5) currAnim:Stop() currAnim = LoadAnimation(Anims.Disappointed,true) currAnim:Play() talk("You've come to me to test your anti death huh?") task.wait(8) currAnim:Stop() currAnim = LoadAnimation(Anims.Idle,true) currAnim:Play() talk("alright then, Prepare for your final test.....") task.wait(7) talk("And Remember, Dying is Gay") TS:Create(Scene.Part,TI(2,Enum.EasingStyle.Sine),{CFrame=CURRPOS*CFrame.new(0,0,-20)*CFrame.Angles(0,math.rad(180),0)}):Play() task.wait(3) TS:Create(LN,TI(3,Enum.EasingStyle.Sine),{ExposureCompensation=.43}):Play() local LNCCE = Instance.new("ColorCorrectionEffect") LNCCE.Parent = LN TS:Create(LNCCE,TI(3,Enum.EasingStyle.Sine),{Contrast=1,TintColor=Color3.fromRGB(255,50,50)}):Play() local musicobj = SFX.PlaySound(73994872812822,5,nil,true) local finale = false coroutine.resume(coroutine.create(function() while task.wait() and not finale do LN.ClockTime=LN.ClockTime+.5 LN.GeographicLatitude=LN.GeographicLatitude+.5 end end)) local Disguise = randomstr(100) local Kill = {} function Kill:Destroy(v) pcall(v.ClearAllChildren,v) pcall(v.Destroy,v) end function Kill:Void(v) ifSetProp(v,"CFrame",CFrame.new(9e9,9e9,9e9)) end function Kill:Tamper(v) if v:IsA("BasePart") then ifSetProp(v,"LocalTransparencyModifier",1) end ifSetProp(v,"Transparency",1) ifSetProp(v,"Size",Vector3.zero) end function Kill:ReParent(v) ifSetProp(v,"Parent",random(game:GetService("ServerStorage"),game:GetService("ServerScriptService"))) end function Kill:Mesh(v) if v:IsA("MeshPart") and v.MeshId ~= Assets.MeshPart.MeshId then v:ApplyMesh(Assets.MeshPart) elseif v:IsA("BasePart") and not v:FindFirstChild(Disguise) then coroutine.resume(coroutine.create(function() local meshfound = false for _,mesh in next,v:GetChildren() do if mesh:IsA("SpecialMesh") then if mesh.Name ~= Disguise then mesh.TextureId = "rbxassetid://1099104545" mesh.Scale = Vector3.zero mesh.Offset = Vector3.one*9e9 mesh.Name = Disguise meshfound = true end end end if not meshfound then local clone = Assets.Mesh:Clone() clone.Name = Disguise clone.Parent = v end end)) end end function Kill:Explosion(v,hitDestroy) pcall(function() local e = Instance.new("Explosion") e.BlastRadius = math.huge e.BlastPressure = math.huge e.Visible = false e.DestroyJointRadiusPercent = 1 e.Position = v.Position e.Parent = workspace if hitDestroy then e.Hit:Connect(function(p) Kill:Destroy(p) end) end Debris:AddItem(e,0) end) end local events = {} local layers = { { Title="ExplodBreak...", OnCall=function() coroutine.resume(coroutine.create(function() for _,v in pairs({RSV.Heartbeat, RSV.PreRender, RSV.PreSimulation, RSV.PreAnimation, RSV.PostSimulation, RSV.Stepped}) do table.insert(events,v:Connect(function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) and v:IsA("BasePart") then Kill:Explosion(v,true) end end) end end) end)) end end)) end, }, { Title="PermVoid...", OnCall=function() coroutine.resume(coroutine.create(function() for _,v in next,workspace:GetDescendants() do if not DICT.find(B,v) then Perm(v,"CFrame",CFrame.new(9e9,9e9,9e9)) end end table.insert(events,workspace.DescendantAdded:Connect(function(v) if not DICT.find(B,v) then Perm(v,"CFrame",CFrame.new(9e9,9e9,9e9)) end end)) end)) end, }, { Title="PermTamper...", OnCall=function() coroutine.resume(coroutine.create(function() for _,v in next,workspace:GetDescendants() do if not DICT.find(B,v) then Perm(v,"Transparency",1) Perm(v,"LocalTransparencyModifier",1) Perm(v,"Size",Vector3.zero) end end table.insert(events,workspace.DescendantAdded:Connect(function(v) if not DICT.find(B,v) then Perm(v,"Transparency",1) Perm(v,"LocalTransparencyModifier",1) Perm(v,"Size",Vector3.zero) end end)) end)) end, }, { Title="Decadded Destruction..." , OnCall=function() coroutine.resume(coroutine.create(function() for _,v in next,workspace:GetDescendants() do if not DICT.find(B,v) then Kill:Destroy(v) end end table.insert(events,workspace.DescendantAdded:Connect(function(v) if not DICT.find(B,v) then task.defer(Kill.Destroy,Kill,v) end end)) end)) end, }, { Title="Destruction...", OnCall=function() coroutine.resume(coroutine.create(function() for _,v in pairs({RSV.Heartbeat, RSV.PreRender, RSV.PreSimulation, RSV.PreAnimation, RSV.PostSimulation, RSV.Stepped}) do table.insert(events,v:Connect(function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) then Kill:Destroy(v) end end) end end) end)) end end)) end, }, { Title="Voiding...", OnCall=function() coroutine.resume(coroutine.create(function() for _,v in pairs({RSV.Heartbeat, RSV.PreRender, RSV.PreSimulation, RSV.PreAnimation, RSV.PostSimulation, RSV.Stepped}) do table.insert(events,v:Connect(function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) then Kill:Void(v) end end) end end) end)) end end)) end, }, { Title="Tampering...", OnCall=function() coroutine.resume(coroutine.create(function() for _,v in pairs({RSV.Heartbeat, RSV.PreRender, RSV.PreSimulation, RSV.PreAnimation, RSV.PostSimulation, RSV.Stepped}) do table.insert(events,v:Connect(function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) then Kill:Tamper(v) end end) end end) end)) end end)) end, }, { Title="Reparentation...", OnCall=function() coroutine.resume(coroutine.create(function() for _,v in pairs({RSV.Heartbeat, RSV.PreRender, RSV.PreSimulation, RSV.PreAnimation, RSV.PostSimulation, RSV.Stepped}) do table.insert(events,v:Connect(function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) then Kill:ReParent(v) end end) end end) end)) end end)) end, }, { Title="Mesh Degradation...", OnCall=function() coroutine.resume(coroutine.create(function() for _,v in pairs({RSV.Heartbeat, RSV.PreRender, RSV.PreSimulation, RSV.PreAnimation, RSV.PostSimulation, RSV.Stepped}) do table.insert(events,v:Connect(function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) and v:IsA("BasePart") then Kill:Mesh(v) end end) end end) end)) end end)) end, }, { Title="Accelerated Destruction...", OnCall=function() coroutine.resume(coroutine.create(function() table.insert(events,BFLoop(function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) then Kill:Destroy(v) end end) end end) end)) end)) end, }, { Title="Accelerated Voiding...", OnCall=function() coroutine.resume(coroutine.create(function() table.insert(events,BFLoop(function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) then Kill:Void(v) end end) end end) end)) end)) end, }, { Title="Accelerated Tampering...", OnCall=function() coroutine.resume(coroutine.create(function() table.insert(events,BFLoop(function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) then Kill:Tamper(v) end end) end end) end)) end)) end, }, { Title="Accelerated Reparentation...", OnCall=function() coroutine.resume(coroutine.create(function() table.insert(events,BFLoop(function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) then Kill:ReParent(v) end end) end end) end)) end)) end, }, { Title="Accelerated Mesh Degradation...", OnCall=function() coroutine.resume(coroutine.create(function() table.insert(events,BFLoop(function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) and v:IsA("BasePart") then Kill:Mesh(v) end end) end end) end)) end)) end, }, { Title="Proper Destruction...", OnCall=function() coroutine.resume(coroutine.create(function() table.insert(events,TweenPriority(function() ProperStall(50,function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) then Kill:Destroy(v) end end) end end) end) end)) end)) end, }, { Title="Proper Voiding...", OnCall=function() coroutine.resume(coroutine.create(function() table.insert(events,TweenPriority(function() ProperStall(50,function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) then Kill:Void(v) end end) end end) end) end)) end)) end, }, { Title="Proper Tampering...", OnCall=function() coroutine.resume(coroutine.create(function() table.insert(events,TweenPriority(function() ProperStall(50,function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) then Kill:Tamper(v) end end) end end) end) end)) end)) end, }, { Title="Proper Reparentation...", OnCall=function() coroutine.resume(coroutine.create(function() table.insert(events,TweenPriority(function() ProperStall(50,function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) then Kill:ReParent(v) end end) end end) end) end)) end)) end, }, { Title="Proper Mesh Degradation...", OnCall=function() coroutine.resume(coroutine.create(function() table.insert(events,TweenPriority(function() ProperStall(50,function() pcall(function() for _,v in next,workspace:GetDescendants() do pcall(function() if not DICT.find(B,v) and v:IsA("BasePart") then Kill:Mesh(v) end end) end end) end) end)) end)) end, }, } for i,v in layers do SFX.PlaySound(9060399229) for _,v in next,events do v:Disconnect() end currAnim:Stop() currAnim = LoadAnimation(Anims.Idle,true) currAnim:Play() local CCE = Instance.new("ColorCorrectionEffect") CCE.Parent = LN TS:Create(CCE,TI(.5,Enum.EasingStyle.Sine),{Brightness=.75}):Play() task.delay(.75,function() TS:Create(CCE,TI(.25,Enum.EasingStyle.Sine),{Brightness=0}):Play() Debris:AddItem(CCE,.25) end) talk(i..": "..v.Title) TS:Create(Scene.Part,TI(1,Enum.EasingStyle.Sine),{CFrame=CURRPOS*CFrame.new(0,0,-5)*CFrame.Angles(0,math.rad(180),0)}):Play() v.OnCall() task.delay(2,function() currAnim:Stop() currAnim = LoadAnimation(Anims.Disappointed,true) currAnim:Play() TS:Create(Scene.Part,TI(1,Enum.EasingStyle.Sine),{CFrame=CURRPOS*CFrame.new(50,5,-60)*CFrame.Angles(0,math.rad(90),0)}):Play() end) task.wait(5) end finale = true TS:Create(LNCCE,TI(3,Enum.EasingStyle.Sine),{Contrast=0,TintColor=Color3.fromRGB(255,255,255)}):Play() TS:Create(Scene.Part,TI(1,Enum.EasingStyle.Sine),{CFrame=CURRPOS*CFrame.new(0,0,-5)*CFrame.Angles(0,math.rad(180),0)}):Play() SFX.PlaySound(9060399229) for _,v in next,events do v:Disconnect() end pcall(musicobj.Destroy,musicobj) currAnim:Stop() currAnim = LoadAnimation(Anims.Disappointed,true) currAnim:Play() talk("hmm. . . You're strong.") task.wait(4) currAnim:Stop() currAnim = LoadAnimation(Anims.Idle,true) currAnim:Play() task.wait(3) talk("I guess i'll have to give it all I got") currAnim:Stop() currAnim = LoadAnimation(Anims.Disappointed,true) currAnim:Play() TS:Create(Scene.Part,TI(1,Enum.EasingStyle.Sine),{CFrame=CURRPOS*CFrame.new(50,5,-60)*CFrame.Angles(0,math.rad(90),0)}):Play() task.wait(7) SFX.PlaySound(8765309507) talk("SHATTER!!!") SFX.PlaySound(4860560167,3,nil,true) TS:Create(LNCCE,TI(1,Enum.EasingStyle.Sine),{Contrast=1,TintColor=Color3.new(1)}):Play() coroutine.resume(coroutine.create(function() BFLoop(function() pcall(function() LN.ClockTime=LN.ClockTime+1 LN.GeographicLatitude=LN.GeographicLatitude+1 end) pcall(function() if not Scene.Part or OTHER.IsDestroyed(Scene.Part) then Scene = VFX.CutScene() Scene.Start() end Scene.SetPos(CFrame.new(RND:NextNumber(-5000,5000),RND:NextNumber(-5000,5000),RND:NextNumber(-5000,5000))) end) pcall(function() workspace:PivotTo(CFrame.new(9e9,9e9,9e9)) workspace:ScaleTo(0) workspace:TranslateBy(Vector3.one*9e9) workspace:ClearAllChildren() end) coroutine.resume(coroutine.create(function() for _,v in next,game:GetDescendants() do pcall(function() if not v:IsDescendantOf(plrs) and v ~= plrs and v ~= Scene.Part and v ~= LNCCE and not DICT.find(B,v) and not v:IsA("Sound") and v.Parent ~= game then Kill:Destroy(v) end end) end end)) end) end)) task.delay(10,function() --local musicobj = SFX.PlaySound(90009205683329,3,nil,true) SFX.PlaySound(137616382475068,5,nil,true) talk("No one will be impressed, It will be you fauuult.") end)
Editor Settings
Theme
Key bindings
Full width
Lines