fnf but both side

Run Settings
LanguageLua
Language Version
Run Command
local function wait(time) return task.wait(time) end local chr = owner.Character local root = chr.HumanoidRootPart local bopeebo = game:service'HttpService':GetAsync('https://raw.githubusercontent.com/FunkinCrew/Funkin/master/assets/preload/data/milf/milf-hard.json') --[[local madness = game:service'HttpService':GetAsync('https://raw.githubusercontent.com/KadeDev/trickster/master/assets/preload/data/madness/madness-hard.json') local hellclown = game:service'HttpService':GetAsync('https://raw.githubusercontent.com/KadeDev/trickster/master/assets/preload/data/hellclown/hellclown-hard.json') local expurgation = game:service'HttpService':GetAsync('https://raw.githubusercontent.com/KadeDev/trickster/master/assets/preload/data/expurgation/expurgation-hard.json') local bopeebobside = game:service'HttpService':GetAsync('https://cdn.glitch.com/5840d45c-410b-46a8-85f5-60fd817bb73b%2Fbopeebo-hard.json?v=1631756913771') local sussusmoogus = game:service'HttpService':GetAsync('https://raw.githubusercontent.com/Clowfoe/ImpostorWeek2/main/assets/preload/data/sussus-moogus/sussus-moogus-hard.json') local lightsdown = game:service'HttpService':GetAsync('https://raw.githubusercontent.com/Clowfoe/ImpostorWeek2/main/assets/preload/data/lights-down/lights-down-hard.json') local ghost = game:service'HttpService':GetAsync('https://raw.githubusercontent.com/ItzFireable/VsCamellia/master/assets/preload/data/ghost/ghost-hard.json') local bushwhack = game:service'HttpService':GetAsync('https://raw.githubusercontent.com/KadeDev/Vs-Zardy/main/assets/preload/data/bushwhack/bushwhack.json') local ectospasm = game:service'HttpService':GetAsync('https://raw.githubusercontent.com/ArcyDev/Vs-Retrospecter/master/assets/preload/data/ectospasm/ectospasm-truehell.json') local endless = game:service'HttpService':GetAsync('https://raw.githubusercontent.com/CryBitDev/Sonic.exe-source/master/assets/preload/data/endless/endless-hard.json') local execution = game:service'HttpService':GetAsync('https://raw.githubusercontent.com/CryBitDev/Sonic.exe-source/master/assets/preload/data/execution/execution-hard.json') local run = game:service'HttpService':GetAsync('https://raw.githubusercontent.com/wildythomas/mmmbob/main/assets/preload/data/run/run-hard.json')]] local chartraw = bopeebo local scrollSpeed = 4 local chartDecode = game:service'HttpService':JSONDecode(chartraw) function getNotes(chart) local notes = {} for i,s in pairs(chart.notes) do for i,v in pairs(s.sectionNotes) do table.insert(notes, {v[1], v[2], v[3], s.mustHitSection}) end end return notes end noteData = getNotes(chartDecode.song) local fardNote = {__index = {}} function createNote(size, position, parent, color) local noteT = {} setmetatable(noteT,fardNote) local note = Instance.new('Part') note.Size = size note.Color = color note.Material = 'SmoothPlastic' note.Massless = true note.Anchored = false note.CastShadow = false note.CanCollide = false note.TopSurface = 'Smooth' note.Parent = script local noteweld = Instance.new('Weld') noteweld.Part0 = parent noteweld.Part1 = note noteweld.C0 = position noteweld.Parent = parent noteT.Note = note noteT.NoteWeld = noteweld return(noteT) end local left1 = createNote(Vector3.new(1.875,.5,2), CFrame.new(8,4.5,0), root, Color3.fromRGB(135,163,173)) local down1 = createNote(Vector3.new(1.875,.5,2), CFrame.new(6,4.5,0), root, Color3.fromRGB(135,163,173)) local up1 = createNote(Vector3.new(1.875,.5,2), CFrame.new(4,4.5,0), root, Color3.fromRGB(135,163,173)) local right1 = createNote(Vector3.new(1.875,.5,2), CFrame.new(2,4.5,0), root, Color3.fromRGB(135,163,173)) local left2 = createNote(Vector3.new(1.875,.5,2), CFrame.new(-2,4.5,0), root, Color3.fromRGB(135,163,173)) local down2 = createNote(Vector3.new(1.875,.5,2), CFrame.new(-4,4.5,0), root, Color3.fromRGB(135,163,173)) local up2 = createNote(Vector3.new(1.875,.5,2), CFrame.new(-6,4.5,0), root, Color3.fromRGB(135,163,173)) local right2 = createNote(Vector3.new(1.875,.5,2), CFrame.new(-8,4.5,0), root, Color3.fromRGB(135,163,173)) local leftSize = left1.Note.Size local downSize = down1.Note.Size local upSize = up1.Note.Size local rightSize = right1.Note.Size local song = Instance.new('Sound') song.Name = 'fnfSong' song.Volume = 1.75 if chartraw == bopeebo then song.SoundId = 'rbxassetid://6804523388' elseif chartraw == madness then song.SoundId = 'rbxassetid://6541168042' elseif chartraw == bopeebobside then song.SoundId = 'rbxassetid://6210494706' elseif chartraw == sussusmoogus then song.SoundId = 'rbxassetid://6855406669' elseif chartraw == lightsdown then song.SoundId = 'rbxassetid://7358286120' elseif chartraw == ghost then song.SoundId = 'rbxassetid://1074484884' elseif chartraw == expurgation then song.SoundId = 'rbxassetid://6918324166' elseif chartraw == bushwhack then song.SoundId = 'rbxassetid://7360389205' elseif chartraw == ectospasm then song.SoundId = 'rbxassetid://7397166811' elseif chartraw == endless then song.SoundId = 'rbxassetid://7313871314' elseif chartraw == hellclown then song.SoundId = 'rbxassetid://6918304049' elseif chartraw == execution then song.SoundId = 'rbxassetid://7315074632' elseif chartraw == run then song.SoundId = 'rbxassetid://6812642602' end local timegui = Instance.new("BillboardGui") timegui.Adornee = root timegui.Name = "timepassed" timegui.Size = UDim2.new(1.5,0,1.25,0) timegui.StudsOffset = Vector3.new(-1.5,3,0) timegui.Parent = root local timeg = Instance.new("Frame") timeg.Size = UDim2.new(3,0,.5,0) timeg.BackgroundColor3 = Color3.fromRGB(135,163,173) timeg.BorderSizePixel = .2 timeg.BorderColor3 = Color3.fromRGB(38,118,77) timeg.Parent = timegui local timepassedg = Instance.new("Frame") timepassedg.Size = UDim2.new(song.TimePosition / song.TimeLength,0,1,0) timepassedg.BackgroundColor3 = Color3.fromRGB(18,250,5) timeg.BorderSizePixel = .2 timepassedg.BorderColor3 = Color3.fromRGB(38,118,77) timepassedg.Parent = timeg song.Parent = root local songPreload = song:Clone() songPreload.SoundId = song.SoundId songPreload.Volume = 0.01 songPreload.Parent = root function noteHit(part, hold) local ogSize = Vector3.new() part.Note.Material = 'Neon' if part == left1 or part == left2 then part.Note.Color = Color3.fromRGB(214,95,173) ogSize = leftSize elseif part == down1 or part == down2 then part.Note.Color = Color3.fromRGB(0,255,255) ogSize = downSize elseif part == up1 or part == up2 then part.Note.Color = Color3.fromRGB(18,250,5) ogSize = upSize elseif part == right1 or part == right2 then part.Note.Color = Color3.fromRGB(249,57,63) ogSize = rightSize end task.spawn(function() if hold > 0 then part.Note.Size = part.Note.Size * 1.1 sizing = true wait(hold - .075) sizing = false part.Note.Size = ogSize part.Note.Material = 'SmoothPlastic' part.Note.Color = Color3.fromRGB(135,163,173) else part.Note.Size = part.Note.Size * 1.1 wait(.075) part.Note.Size = ogSize part.Note.Material = 'SmoothPlastic' part.Note.Color = Color3.fromRGB(135,163,173) end end) end function noteDetect(noteType, holdLength, hitSection) if hitSection == true then if noteType == 0 then noteHit(left2, holdLength) elseif noteType == 1 then noteHit(down2, holdLength) elseif noteType == 2 then noteHit(up2, holdLength) elseif noteType == 3 then noteHit(right2, holdLength) elseif noteType == 4 then noteHit(left1, holdLength) elseif noteType == 5 then noteHit(down1, holdLength) elseif noteType == 6 then noteHit(up1, holdLength) elseif noteType == 7 then noteHit(right1, holdLength) end elseif hitSection == false then if noteType == 0 then noteHit(left1, holdLength) elseif noteType == 1 then noteHit(down1, holdLength) elseif noteType == 2 then noteHit(up1, holdLength) elseif noteType == 3 then noteHit(right1, holdLength) elseif noteType == 4 then noteHit(left2, holdLength) elseif noteType == 5 then noteHit(down2, holdLength) elseif noteType == 6 then noteHit(up2, holdLength) elseif noteType == 7 then noteHit(right2, holdLength) end end end function noteFall(noteType, holdLength, hitSection, offset) local fallNote = createNote(Vector3.new(1.875,.5,2), CFrame.new(0,5,0), root, Color3.fromRGB(0,0,0)) if hitSection == true then if noteType == 0 then fallNote.NoteWeld.Part0 = left2.Note fallNote.NoteWeld.Parent = left2.Note fallNote.Note.Color = Color3.fromRGB(194,75,153) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) elseif noteType == 1 then fallNote.NoteWeld.Part0 = down2.Note fallNote.NoteWeld.Parent = down2.Note fallNote.Note.Color = Color3.fromRGB(0,255,255) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) elseif noteType == 2 then fallNote.NoteWeld.Part0 = up2.Note fallNote.NoteWeld.Parent = up2.Note fallNote.Note.Color = Color3.fromRGB(18,250,5) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) elseif noteType == 3 then fallNote.NoteWeld.Part0 = right2.Note fallNote.NoteWeld.Parent = right2.Note fallNote.Note.Color = Color3.fromRGB(249,57,63) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) elseif noteType == 4 then fallNote.NoteWeld.Part0 = left1.Note fallNote.NoteWeld.Parent = left1.Note fallNote.Note.Color = Color3.fromRGB(194,75,153) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) elseif noteType == 5 then fallNote.NoteWeld.Part0 = down1.Note fallNote.NoteWeld.Parent = down1.Note fallNote.Note.Color = Color3.fromRGB(0,255,255) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) elseif noteType == 6 then fallNote.NoteWeld.Part0 = up1.Note fallNote.NoteWeld.Parent = up1.Note fallNote.Note.Color = Color3.fromRGB(18,250,5) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) elseif noteType == 7 then fallNote.NoteWeld.Part0 = right1.Note fallNote.NoteWeld.Parent = right1.Note fallNote.Note.Color = Color3.fromRGB(249,57,63) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) end elseif hitSection == false then if noteType == 0 then fallNote.NoteWeld.Part0 = left1.Note fallNote.NoteWeld.Parent = left1.Note fallNote.Note.Color = Color3.fromRGB(194,75,153) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) elseif noteType == 1 then fallNote.NoteWeld.Part0 = down1.Note fallNote.NoteWeld.Parent = down1.Note fallNote.Note.Color = Color3.fromRGB(0,255,255) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) elseif noteType == 2 then fallNote.NoteWeld.Part0 = up1.Note fallNote.NoteWeld.Parent = up1.Note fallNote.Note.Color = Color3.fromRGB(18,250,5) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) elseif noteType == 3 then fallNote.NoteWeld.Part0 = right1.Note fallNote.NoteWeld.Parent = right1.Note fallNote.Note.Color = Color3.fromRGB(249,57,63) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) elseif noteType == 4 then fallNote.NoteWeld.Part0 = left2.Note fallNote.NoteWeld.Parent = left2.Note fallNote.Note.Color = Color3.fromRGB(194,75,153) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) elseif noteType == 5 then fallNote.NoteWeld.Part0 = down2.Note fallNote.NoteWeld.Parent = down2.Note fallNote.Note.Color = Color3.fromRGB(0,255,255) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) elseif noteType == 6 then fallNote.NoteWeld.Part0 = up2.Note fallNote.NoteWeld.Parent = up2.Note fallNote.Note.Color = Color3.fromRGB(18,250,5) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) elseif noteType == 7 then fallNote.NoteWeld.Part0 = right2.Note fallNote.NoteWeld.Parent = right2.Note fallNote.Note.Color = Color3.fromRGB(249,57,63) fallNote.NoteWeld.C0 = CFrame.new(0,11 - offset,0) end end task.spawn(function() local delta = 0 while fallNote ~= nil do fallNote.NoteWeld.C0 = fallNote.NoteWeld.C0 - Vector3.new(0,scrollSpeed * (delta * 11),0) if fallNote.NoteWeld.C0.Y <= 0 then fallNote.Note:Destroy() break end delta = wait(.01) end end) end function note() task.spawn(function() for _,v in pairs(noteData) do task.spawn(function() wait((v[1]*0.001)) local mustHit = v[4] if v[2] == 0 or v[2] == 1 or v[2] == 2 or v[2] == 3 or v[2] == 4 or v[2] == 5 or v[2] == 6 or v[2] == 7 then noteDetect(v[2], v[3]*0.001, mustHit) end end) end end) end function runSong() songPreload:Play() task.spawn(function() for _,v in pairs(noteData) do task.spawn(function() local timeToWait = (v[1]*0.001) - (1 / scrollSpeed) local ti = wait(timeToWait) local mustHit = v[4] if v[2] == 0 or v[2] == 1 or v[2] == 2 or v[2] == 3 or v[2] == 4 or v[2] == 5 or v[2] == 6 or v[2] == 7 then noteFall(v[2], v[3]*0.001, mustHit, ti - timeToWait) end end) end end) songPreload:Stop() songPreload:Destroy() song:Play() note() end runSong() game:service("RunService").Heartbeat:Connect(function() timepassedg.Size = UDim2.new(song.TimePosition / song.TimeLength,0,1,0) end)
Editor Settings
Theme
Key bindings
Full width
Lines