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)