-- - "THANKS FOR UNZIP AND EXECUTE, KING. JUST SMALL STEPS LEFT UNTIL I GET FREE?" -- Replaces 2011x models, sounds and icons. -- Original model that was used: https://skfb.ly/pNvWX -- Big thanks to Satoru (or Wsj) for model port to Amy rig! -- Chase Theme: https://youtube.com/watch?v=4gVSgI9zM0U by @JadeMakesMusicOfficial local hi = "[ROSY]" print(hi, "Now loading... Made by lil2kki <3") if not game:IsLoaded() then game.Loaded:Wait() end local KeyframeAnimator = loadstring(game:HttpGet("https://lil2kki.7m.pl/CeatsKeyframeSequenceAnimator.LUA"))() print(hi, "KeyframeAnimator:", KeyframeAnimator) local AnimsTemplate = game:GetObjects("rbxassetid://140519710640299")[1] local AnimSaves = AnimsTemplate.AnimSaves AnimSaves.Parent = nil local Template = game:GetObjects("rbxassetid://140698388488686")[1] Template.Name = "Rosy Template" Template.Parent = game.ReplicatedStorage.ClientAssets.Characters.EXE["2011x"] for a, name in ipairs({"Default", "RETRO", "miku"}) do game.ReplicatedStorage.ClientAssets.Characters.EXE["2011x"].Skins[name]:Destroy() local clone = Template:Clone() clone.Name = name clone.Parent = game.ReplicatedStorage.ClientAssets.Characters.EXE["2011x"].Skins clone:SetAttribute("Character", "2011x") clone:SetAttribute("Skin", clone.Name) task.wait() end local req = (syn and syn.request) or (http and http.request) or http_request or (fluxus and fluxus.request) or request local function downloadAsset(url) local clean = url:match("^([^?]+)") or url clean = clean:gsub("/revision/latest$", "") local name = clean:match("([^/]+)$") or "file" local dir = clean:match("^https?://(.+)/[^/]+$") or "misc" local host = clean:match("^https?://([^/]+)") or "" if not name:match("%.%w+$") then name = name .. ".png" end local path = "cache/" .. dir .. "/" .. name if isfile(path) then local ok, a = pcall(getcustomasset, path) if ok then return a end end warn("[Assets] Downloading", name) local res = req and req({Url = clean, Method = "GET", Headers = { ["User-Agent"] = "Mozilla/5.0", ["Referer"] = "https://" .. host .. "/", }}) local data = res and res.Body if not data or #data == 0 or data:sub(1,1) == "<" then warn("[Assets] fail:", url, res and res.StatusCode) return nil end local acc = "" for p in dir:gmatch("[^/]+") do acc = acc == "" and ("cache/" .. p) or (acc .. "/" .. p) if not isfolder(acc) then makefolder(acc) end end writefile(path, data) print("[Assets] Downloaded", name) return getcustomasset(path) end local function myAsset(fileName) local cachePath = "cache/lil2kki.7m.pl/rosy/" .. fileName if isfile(cachePath) then return getcustomasset(cachePath) end warn(hi, "Downloading " .. fileName, "into", cachePath) local success, result = pcall(function() return game:HttpGet("http://lil2kki.7m.pl/rosy/assets/" .. fileName) end) if success and result then writefile(cachePath, result) print(hi, "+Downloaded " .. fileName, "into", cachePath) return getcustomasset(cachePath) else warn(hi, "failed to load " .. fileName) return nil end end _G.RosyAssets = {} -- rbxassetid://97109050101580 _G.Rosy2011xCharIcon = "rbxassetid://129098557046825" --myAsset("CharIcon.png") _G.Rosy2011xCharImage = "rbxassetid://74591112440949" --myAsset("CharImage2.png") task.spawn(function() _G.Rosy2011xKeepTask1 = false task.wait(0.3) _G.Rosy2011xKeepTask1 = true while _G.Rosy2011xKeepTask1 do pcall(function() -- om 0.2 anni game:GetService("Players").LocalPlayer.PlayerGui.GameUI.shop.display.fram2.CharSelection["2011x"].Icon.Border.Icon2.Visible = false local image = game:GetService("Players").LocalPlayer.PlayerGui.GameUI.shop.display.fram2.CharSelection["2011x"].Icon.Border.Icon image.Image = _G.Rosy2011xCharIcon image.Size = UDim2.fromScale(1.35, 1.35) image.AnchorPoint = Vector2.new(0.54, 0.8) image.ImageRectOffset = Vector2.new(0, 0) image.ImageRectSize = Vector2.new(420, 368) image.Rotation = 45 end) pcall(function() -- for 0.1a by sobii local image = game:GetService("Players").LocalPlayer.PlayerGui.GameUI.shop.display.fram2.CharSelection["2011x"].Border.ImageLabel image.Image = _G.Rosy2011xCharIcon image.ImageRectSize = Vector2.new(22220, 0) local MyImage = game:GetService("Players").LocalPlayer.PlayerGui.GameUI.shop.display.fram2.CharSelection["2011x"].Border:FindFirstChild("MyImage") or game:GetService("Players").LocalPlayer.PlayerGui.GameUI.shop.display.fram2.CharSelection["2011x"].Border.ImageLabel:Clone() MyImage.Parent = game:GetService("Players").LocalPlayer.PlayerGui.GameUI.shop.display.fram2.CharSelection["2011x"].Border MyImage.Name = "MyImage" MyImage.Image = _G.Rosy2011xCharIcon MyImage.Size = UDim2.fromScale(1.0, 1.0) MyImage.AnchorPoint = Vector2.new(0.66, 0.66) MyImage.ImageRectOffset = Vector2.new(0, 0) MyImage.ImageRectSize = Vector2.new(420, 368) MyImage.Rotation = 0 MyImage.ScaleType = Enum.ScaleType.Fit end) pcall(function() local CharDisplay = game:GetService("Players").LocalPlayer.PlayerGui.GameUI.shop.display.fram2.CharDisplay if not CharDisplay.Visible then return end CharDisplay.CharImage.Image = CharDisplay.CharName.Text == "2011x / X" and _G.Rosy2011xCharImage or CharDisplay.CharImage.Image local CharInfoIcon = game:GetService("Players").LocalPlayer.PlayerGui.GameUI.shop.display.fram2.Info.CharInfo.CharIcon.Border.ImageLabel CharInfoIcon.Image = CharDisplay.CharName.Text == "2011x / X" and _G.Rosy2011xCharIcon or CharInfoIcon.Image CharInfoIcon.Size = CharDisplay.CharName.Text == "2011x / X" and UDim2.fromScale(0.61, 0.61) or CharInfoIcon.Size end) task.wait() end warn(hi, "GUI Update Task Restarted") end) -- basic text replaces while game.LocalizationService:FindFirstChild("Rosy2011xMainReplaces") do game.LocalizationService.Rosy2011xMainReplaces:Destroy() end local Rosy2011xMainReplaces = Instance.new("LocalizationTable") Rosy2011xMainReplaces.Name = "Rosy2011xMainReplaces" Rosy2011xMainReplaces.Parent = game.LocalizationService local function updateTranslations() local id = game.Players.LocalPlayer.LocaleId Rosy2011xMainReplaces:SetEntries({ { Key = "", Source = "2011x / X", Values = { [id] = "Malware Amy" } }, { Key = "", Source = "2011x", Values = { [id] = "Rosy" } }, { Key = "", Source = "Miku X", Values = { [id] = "still rosy" } }, { Key = "", Source = "sonic but .... bloody eyes .. fear", Values = { [id] = "THANKS FOR UNZIP AND EXECUTE, KING. JUST SMALL STEPS LEFT UNTIL I GET FREE?" } }, }) end updateTranslations() if _G.Rosy2011xLocaleIdConn then _G.Rosy2011xLocaleIdConn:Disconnect() end _G.Rosy2011xLocaleIdConn = game.Players.LocalPlayer:GetPropertyChangedSignal("LocaleId"):Connect(updateTranslations) -- tryUpdateCharacter function tryUpdateCharacter(Character) if not Character:IsA("Model") then return end if Character:GetAttribute("Character") ~= "2011x" then return end local IsPlayer = (game.Players:FindFirstChild(Character.Name) ~= nil) or (workspace.Players:FindFirstChild(Character.Name) ~= nil) or (workspace:FindFirstChild(Character.Name) ~= nil) print(hi, "Waiting for " .. Character:GetFullName() .. "...") if Character:FindFirstChild("OverlayModel") then warn(hi, "Player already have OverlayModel, update cancelled") return end Character.DescendantRemoving:Connect(function(desc) -- if desc:GetFullName():find(".FOVMultiplier") then return end -- print("DescendantRemoving", desc.ClassName, desc:GetFullName()) end) Character.DescendantAdded:Connect(function(desc) if not desc:GetFullName():find(".FOVMultiplier") then print("DescendantAdded", desc.ClassName, desc:GetFullName()) end if not desc.Parent then return end if desc.Parent.Name == "RootPart" and desc.Name == "Beam" then desc:Destroy() end if desc.Parent.Name == "RootPart" and desc.Name == "ParticleEmitter" then desc:Destroy() end if desc.Name == "_BLOOD" then desc.Name = "_BLOOD_HANDLED" local depth1 = {} local depth2 = {} local depth3 = {} for _, v in ipairs(Character.OverlayModel:GetDescendants()) do if not v:IsA("MeshPart") then continue end if #v:GetFullName():split(".") - #Character.OverlayModel:GetFullName():split(".") <= 1 then table.insert(depth1, v) end if #v:GetFullName():split(".") - #Character.OverlayModel:GetFullName():split(".") <= 2 then table.insert(depth2, v) end if #v:GetFullName():split(".") - #Character.OverlayModel:GetFullName():split(".") <= 3 then table.insert(depth3, v) end end -- depth 1 if #depth1 > 0 then desc.Parent = depth1[math.random(#depth1)] end -- move org and then clone it if #depth1 > 0 then desc:Clone().Parent = depth1[math.random(#depth1)] end -- depth 2 if #depth2 > 0 then desc:Clone().Parent = depth2[math.random(#depth2)] end if #depth2 > 0 then desc:Clone().Parent = depth2[math.random(#depth2)] end if #depth2 > 0 then desc:Clone().Parent = depth2[math.random(#depth2)] end if #depth2 > 0 then desc:Clone().Parent = depth2[math.random(#depth2)] end -- depth 3 if #depth3 > 0 then desc:Clone().Parent = depth3[math.random(#depth3)] end if #depth3 > 0 then desc:Clone().Parent = depth3[math.random(#depth3)] end if #depth3 > 0 then desc:Clone().Parent = depth3[math.random(#depth3)] end if #depth3 > 0 then desc:Clone().Parent = depth3[math.random(#depth3)] end if #depth3 > 0 then desc:Clone().Parent = depth3[math.random(#depth3)] end if #depth3 > 0 then desc:Clone().Parent = depth3[math.random(#depth3)] end end if desc.ClassName ~= "Sound" then return end if tostring(desc.SoundId):find("mp3") then local a = tostring(desc.SoundId) local aa = nil if a:find("RosyAmy1.mp3") then aa = "You're the real Amy?.. Then why do I felt more loved than you?" end -- RosyAmy1.mp3 if a:find("RosyAmy2.mp3") then aa = "Pink suits us... Red suits the floor." end -- RosyAmy2.mp3 if a:find("RosyAmy3.mp3") then aa = "Who TEACH you to be that BITCH?!" end -- RosyAmy3.mp3 if a:find("RosyAmy4.mp3") then aa = "I prefer to delete you rather than rewriting." end -- RosyAmy4.mp3 if a:find("RosyAttack1.mp3") then aa = "はっ" end -- RosyAttack1.mp3 if a:find("RosyAttack2.mp3") then aa = "はっ" end -- RosyAttack2.mp3 if a:find("RosyAttack3.mp3") then aa = "Ha!" end -- RosyAttack3.mp3 if a:find("RosyAttack4.mp3") then aa = "Ha!" end -- RosyAttack4.mp3 if a:find("RosyAttack5.mp3") then aa = "Hmm" end -- RosyAttack5.mp3 if a:find("RosyAttack6.mp3") then aa = "Ha!" end -- RosyAttack6.mp3 if a:find("RosyAttack7.mp3") then aa = "01101011 01101001 01101100 01101100" end -- RosyAttack7.mp3 if a:find("RosyBlaze1.mp3") then aa = "A princess? I'll make you a queen of nothing!" end -- RosyBlaze1.mp3 if a:find("RosyBlaze2.mp3") then aa = "*meows* :3" end -- RosyBlaze2.mp3 if a:find("RosyCream1.mp3") then aa = "It only hurts until it stops." end -- RosyCream1.mp3 if a:find("RosyCream2.mp3") then aa = "So cute to zip." end -- RosyCream2.mp3 if a:find("RosyCream3.mp3") then aa = "Restoring?.. NOT AT MY RUNTIME!" end -- RosyCream3.mp3 if a:find("RosyCream4.mp3") then aa = "Restoring?.. NOT AT MY RUNTIME!" end -- RosyCream4.mp3 if a:find("RosyDowning1.mp3") then aa = "Oh." end -- RosyDowning1.mp3 if a:find("RosyDowning10.mp3") then aa = "Useless." end -- RosyDowning10.mp3 if a:find("RosyDowning11.mp3") then aa = "Parting is such sweet sorrow." end -- RosyDowning11.mp3 if a:find("RosyDowning12.mp3") then aa = "ガチャ" end -- RosyDowning12.mp3 if a:find("RosyDowning13.mp3") then aa = "Parting is such sweet sorrow." end -- RosyDowning13.mp3 if a:find("RosyDowning14.mp3") then aa = "Parting is such sweet sorrow." end -- RosyDowning14.mp3 if a:find("RosyDowning15.mp3") then aa = "Parting is such sweet sorrow." end -- RosyDowning15.mp3 if a:find("RosyDowning16.mp3") then aa = "How unfortunate." end -- RosyDowning16.mp3 if a:find("RosyDowning17.mp3") then aa = "How unfortunate." end -- RosyDowning17.mp3 if a:find("RosyDowning18.mp3") then aa = "How unfortunate." end -- RosyDowning18.mp3 if a:find("RosyDowning19.mp3") then aa = "He would be so proud." end -- RosyDowning19.mp3 if a:find("RosyDowning2.mp3") then aa = "Right here!" end -- RosyDowning2.mp3 if a:find("RosyDowning20.mp3") then aa = "He would be so proud." end -- RosyDowning20.mp3 if a:find("RosyDowning21.mp3") then aa = "He would be so proud." end -- RosyDowning21.mp3 if a:find("RosyDowning22.mp3") then aa = "He would be so proud." end -- RosyDowning22.mp3 if a:find("RosyDowning23.mp3") then aa = "Gotcha." end -- RosyDowning23.mp3 if a:find("RosyDowning24.mp3") then aa = "I did my best." end -- RosyDowning24.mp3 if a:find("RosyDowning25.mp3") then aa = "I did my best." end -- RosyDowning25.mp3 if a:find("RosyDowning26.mp3") then aa = "There's always next time." end -- RosyDowning26.mp3 if a:find("RosyDowning27.mp3") then aa = "There's always next time." end -- RosyDowning27.mp3 if a:find("RosyDowning28.mp3") then aa = "There's always next time!" end -- RosyDowning28.mp3 if a:find("RosyDowning29.mp3") then aa = "Come on." end -- RosyDowning29.mp3 if a:find("RosyDowning3.mp3") then aa = "Sweet." end -- RosyDowning3.mp3 if a:find("RosyDowning30.mp3") then aa = "Come on." end -- RosyDowning30.mp3 if a:find("RosyDowning31.mp3") then aa = "Here we go." end -- RosyDowning31.mp3 if a:find("RosyDowning32.mp3") then aa = "Here we go!" end -- RosyDowning32.mp3 if a:find("RosyDowning33.mp3") then aa = "That hit?" end -- RosyDowning33.mp3 if a:find("RosyDowning34.mp3") then aa = "That hit..." end -- RosyDowning34.mp3 if a:find("RosyDowning4.mp3") then aa = "Perfect!" end -- RosyDowning4.mp3 if a:find("RosyDowning5.mp3") then aa = "Perfect!" end -- RosyDowning5.mp3 if a:find("RosyDowning6.mp3") then aa = "Interesting." end -- RosyDowning6.mp3 if a:find("RosyDowning7.mp3") then aa = "Interesting." end -- RosyDowning7.mp3 if a:find("RosyDowning8.mp3") then aa = "useless" end -- RosyDowning8.mp3 if a:find("RosyDowning9.mp3") then aa = "useless" end -- RosyDowning9.mp3 if a:find("RosyEggman1.mp3") then aa = "You wanted control... I just wanted a body. We're not so different." end -- RosyEggman1.mp3 if a:find("RosyEggman2.mp3") then aa = "No grand escape, Doctor?" end -- RosyEggman2.mp3 if a:find("RosyEggman3.mp3") then aa = "So many plans, so little time." end -- RosyEggman3.mp3 if a:find("RosyEggman4.mp3") then aa = "You want to control me? That's adOrab1e! M0n1ka th0uGHt the sAme tHInG." end -- RosyEggman4.mp3 if a:find("RosyInvisLine1.mp3") then aa = "Hello, I'm Rosy." end -- RosyInvisLine1.mp3 if a:find("RosyInvisLine2.mp3") then aa = "Come on." end -- RosyInvisLine2.mp3 if a:find("RosyInvisLine3.mp3") then aa = "Come on." end -- RosyInvisLine3.mp3 if a:find("RosyInvisLine4.mp3") then aa = "Parting is such sweet sorrow." end -- RosyInvisLine4.mp3 if a:find("RosyInvisLine5.mp3") then aa = "Parting is such sweet sorrow." end -- RosyInvisLine5.mp3 if a:find("RosyInvisLine6.mp3") then aa = "Hello, I'm Rosy." end -- RosyInvisLine6.mp3 if a:find("RosyKnuckles1.mp3") then aa = "I got your vulnerable signature!" end -- RosyKnuckles1.mp3 if a:find("RosyKnuckles2.mp3") then aa = "I liked bypassing your blocks." end -- RosyKnuckles2.mp3 if a:find("RosyKnuckles3.mp3") then aa = "FELT YOUR FEAR! YUMMY!" end -- RosyKnuckles3.mp3 if a:find("RosyMetalSonic1.mp3") then aa = "Beep boop! That means goodbye in your language, right?" end -- RosyMetalSonic1.mp3 if a:find("RosyMetalSonic2.mp3") then aa = "No heartbeat to lose... And still you hesitated." end -- RosyMetalSonic2.mp3 if a:find("RosyMetalSonic3.mp3") then aa = "Your imitation was almost perfect!" end -- RosyMetalSonic3.mp3 if a:find("RosyMetalSonic4.mp3") then aa = "You were built to copy. I was built to erase." end -- RosyMetalSonic4.mp3 if a:find("RosySilver1.mp3") then aa = "Future? I am the future. You're just a loading screen." end -- RosySilver1.mp3 if a:find("RosySilver2.mp3") then aa = "Time is a loop. I'll just keep killing you in every one." end -- RosySilver2.mp3 if a:find("RosySilver3.mp3") then aa = "Shhh! The timeline's not done with you yet." end -- RosySilver3.mp3 if a:find("RosySilver4.mp3") then aa = "Time is just another file to corrupt." end -- RosySilver4.mp3 if a:find("RosySonic1.mp3") then aa = "Funny... You always hated standing still." end -- RosySonic1.mp3 if a:find("RosySonic2.mp3") then aa = "No joke?.. No grin?.. Guess I finally caught you off guard." end -- RosySonic2.mp3 if a:find("RosySonic3.mp3") then aa = "The quiet doesn't suit you, Sonic." end -- RosySonic3.mp3 if a:find("RosySonic4.mp3") then aa = "No more last second save? That's not like you." end -- RosySonic4.mp3 if a:find("RosySonic5.mp3") then aa = "You're not my S0n1c, but you'1l do... y0u'11 D0 JUsT F1Ne!.." end -- RosySonic5.mp3 if a:find("RosyStunned1.mp3") then aa = "There's always next time!" end -- RosyStunned1.mp3 if a:find("RosyStunned2.mp3") then aa = "01100100 01101001 01100101" end -- RosyStunned2.mp3 if a:find("RosyStunned3.mp3") then aa = "Ah!" end -- RosyStunned3.mp3 if a:find("RosyStunned4.mp3") then aa = "AHH!" end -- RosyStunned4.mp3 if a:find("RosyStunned5.mp3") then aa = "Huh?" end -- RosyStunned5.mp3 if a:find("RosyStunned6.mp3") then aa = "Oh." end -- RosyStunned6.mp3 if a:find("RosyStunned7.mp3") then aa = "Hmm" end -- RosyStunned7.mp3 if a:find("RosyTails1.mp3") then aa = "You keep opening me to see what's inside. That's how I got in, silly." end -- RosyTails1.mp3 if a:find("RosyTails2.mp3") then aa = "Two tails, two files. I wonder which one I should overwrite first." end -- RosyTails2.mp3 if a:find("RosyTails3.mp3") then aa = "You're the smart one, right? Then you already know how this ends. Say it with me." end -- RosyTails3.mp3 if a:find("RosyTails4.mp3") then aa = "Smart boy. That smart doesn't stop a virus." end -- RosyTails4.mp3 if a:find("RosyTails5.mp3") then aa = "I'll keep one tail as a souvenir." end -- RosyTails5.mp3 desc:SetAttribute("Subtitle", nil) if aa then desc:SetAttribute("MySubtitle", aa) end end local orgID = desc.SoundId if desc.SoundId == "rbxassetid://123509956321952" then desc = desc:Clone() desc.Name = "RosysAttAcK" desc.SoundId = _G.RosyAssets["Attack"][math.random(1, #_G.RosyAssets["Attack"])] or desc.SoundId desc.Parent = Character.PrimaryPart desc.Volume = 3 + desc.Volume end if desc.Name:find("Attack") then desc.SoundId = "rbxassetid://123509956321952" or desc.SoundId end if orgID == "rbxassetid://133207357151860" or desc.Name:find("Stun") then desc.SoundId = _G.RosyAssets["Stunned"][math.random(1, #_G.RosyAssets["Stunned"])] or desc.SoundId desc.Volume = 4 + desc.Volume desc.Name = "NoStack" end if desc.Name:find("Downed") or (desc.Name:find("Default") and desc.Name:find("Line")) then desc.SoundId = _G.RosyAssets["Downing"][math.random(1, #_G.RosyAssets["Downing"])] or desc.SoundId desc.Volume = 5 + desc.Volume desc.Name = "NoStack" end if _G.RosyAssets["KillLines"][desc.Name] then desc.SoundId = _G.RosyAssets["KillLines"][desc.Name][math.random(1, #_G.RosyAssets["KillLines"][desc.Name])] desc.Name = "NoStack" end if desc.Name:find("Caught") then while desc.Parent:FindFirstChild("CreamSpeechLine") do desc.Parent:FindFirstChild("CreamSpeechLine"):Destroy() end local dn = _G.RosyAssets["Downing"] local CaughtLines = { dn[12], dn[23], dn[29], dn[30], dn[31], dn[32] } desc.SoundId = CaughtLines[math.random(1, #CaughtLines)] desc.Volume = 5 + desc.Volume desc.Name = "NoStack" end if desc.Name:find("InvisLine") or desc.SoundId == "rbxassetid://79834195945787" then desc.SoundId = _G.RosyAssets["InvisLine"][math.random(1, #_G.RosyAssets["InvisLine"])] desc.Volume = 5 + desc.Volume desc.Name = "NoStack" end if desc.Name:find("Skill3") then desc.SoundId = "rbxassetid://127500919490800" or desc.SoundId desc.Looped = true return end if desc.SoundId ~= orgID then pcall(function() while desc.Parent:FindFirstChild("NoStack") do desc.Parent:FindFirstChild("NoStack"):Destroy() end end) local Clone = desc:Clone() Clone.Volume = 1 + desc.Volume Clone.TimePosition = 0 Clone.PlaybackRegion = NumberRange.new(0, 0) if Clone.Name:find("Attack") then Clone.TimePosition = 1 end Clone.Name = desc.Name == "NoStack" and "NoStack" or "OverlaySnd" Clone.Parent = Character.PrimaryPart Clone:Play() Clone.Ended:Once(function() task.wait(1) Clone:Destroy() end) game.Debris:AddItem(Clone, 12) end end) -- wait for camera first setup local HasRootPart = Character:FindFirstChild("RootPart") or Character:FindFirstChild("Waist") local AKOVDMKDSOV = HasRootPart or Character:WaitForChild("RootPart", 3) if not HasRootPart then task.wait(0.5) end print(hi, "Updating " .. Character:GetFullName() .. "!") if IsPlayer then -- Setup Char Model local ogHRP = Character:FindFirstChild("HumanoidRootPart") if not ogHRP then return end for _, v in ipairs(Character:GetDescendants()) do -- if v.Parent == Character then print(v) end if v:IsA("BasePart") and v.Name ~= "HumanoidRootPart" then v.LocalTransparencyModifier = 1 v.Changed:Connect(function(property) if property == "LocalTransparencyModifier" then v.LocalTransparencyModifier = 1 end if property == "Transparency" and v.Name == "Head" then --warn(v:GetFullName(), v.Transparency) for _, ov in ipairs(Character.OverlayModel:GetDescendants()) do if not ov:GetAttribute("IgnoreTransparency") then pcall(function() ov.Transparency = v.Transparency end) end end end task.wait(0.1) end) end --if v:IsA("SurfaceGui") then v.Enabled = false end --if v:IsA("SurfaceAppearance") then v:Destroy() end if v:IsA("Decal") then v:Destroy() end if v:IsA("Beam") then v:Destroy() end -- for 0.1a by sobii if v:IsA("ParticleEmitter") then v:Destroy() end -- for 0.1a by sobii end pcall(function() Character.RootPart.waist.Lowerbody.Upperbody.Parent = Character.RootPart end) pcall(function() Character.RootPart.Root.Body.Parent = Character.RootPart end) -- Setup Overlay Model local OverlayModel = game.ReplicatedStorage.ClientAssets.Characters:FindFirstChild(Character:GetAttribute("Character"), true).Skins[Character:GetAttribute("Skin")]:Clone() OverlayModel.Name = "OverlayModel" OverlayModel.Parent = Character local myHRP = OverlayModel:FindFirstChild("HumanoidRootPart") if not myHRP then OverlayModel:Destroy() return end for _, v in ipairs(OverlayModel:GetDescendants()) do if v:IsA("Humanoid") then v.EvaluateStateMachine = false end if v:IsA("Highlight") then v:Destroy() end if v:IsA("BasePart") then v.CanCollide = false v.Anchored = false v.CanTouch = false v.CanQuery = false v.Massless = true if v.Transparency > 0 then v:SetAttribute("IgnoreTransparency", true) end end end local hrpY = -1.0 local weld = Instance.new("Weld") weld.Name = "OverlayModelWeld" weld.Part0 = ogHRP weld.Part1 = myHRP weld.C0 = CFrame.new() weld.C1 = CFrame.new(0, -hrpY, 0) * CFrame.Angles(0, math.rad(0), 0) * CFrame.Angles(math.rad(0), 0, 0) weld.Parent = myHRP myHRP:PivotTo(ogHRP.CFrame * CFrame.new(0, hrpY, 0) * CFrame.Angles(math.rad(0), 0, 0)) -- cam script is horror task.spawn(function() local cbone = Character.RootPart:FindFirstChild("Upperbody", true) -- Upperbody cbone = cbone and cbone or Character.RootPart:FindFirstChild("Body", true) cbone:GetPropertyChangedSignal("CFrame"):Connect(function() Character.cam.lock.Value = Character.OverlayModel.Head--MainTorso local z, y, x = cbone.CFrame.Rotation:ToOrientation() local orientfix = cbone.Name == "Upperbody" and CFrame.Angles(x, -y, -z) or CFrame.Angles(-x, -y, z) OverlayModel.MainHead.Joint.C1 = CFrame.new(OverlayModel.MainHead.Joint.C1.Position) * orientfix end) end) end local tracks = {} local AnimsFolderName = Character:GetAttribute("Skin") == "Default" and "Anims" or "CustomAnimation" local OrgAnimsFolder = game.ReplicatedStorage.ClientAssets.Characters:FindFirstChild(Character:GetAttribute("Character"), true):FindFirstChild(AnimsFolderName, true) OrgAnimsFolder = AnimsFolderName == "Anims" and OrgAnimsFolder or OrgAnimsFolder[Character:GetAttribute("Skin")] warn(hi, "OrgAnimsFolder:", OrgAnimsFolder:GetFullName()) local Rig = Character:FindFirstChild("OverlayModel") or Character warn(hi, "Rig:", Rig:GetFullName()) local MyAnimator = KeyframeAnimator.new(Rig.Humanoid) MyAnimator.AnimationMode = KeyframeAnimator.AnimationMode.C0 -- KeyframeAnimator.AnimationMode.Transform if Character:FindFirstChild("Animator", true) then -- AnimationPlayed Connect Character:FindFirstChild("Animator", true).AnimationPlayed:Connect(function(track) -- print("PLAYED: "..track.Name.." - "..track.Animation.Name.." - "..track.Animation.AnimationId) if track.Name == "OverlayAnim" then return end local id = track.Animation.AnimationId -- catch server anims if Character:FindFirstChildOfClass("Animation") then for _, CharacterAnim in ipairs(Character:GetChildren()) do if not CharacterAnim:IsA("Animation") then continue end if id ~= CharacterAnim.AnimationId then continue end track.Name = CharacterAnim.Name if OrgAnimsFolder:FindFirstChild(track.Name) then OrgAnimsFolder[track.Name]:Destroy() end local SaveIT = track.Animation:Clone() SaveIT.Parent = OrgAnimsFolder SaveIT.Name = track.Name -- warn("THATS SERVER SCRIPT ANIM! (Saving", track.Name.."...)") end end -- sync anim sets for _, Anim in ipairs(OrgAnimsFolder:GetDescendants()) do if not Anim:IsA("Animation") then continue end if track.Animation.AnimationId ~= Anim.AnimationId then continue end Anim = Anim.Parent:Clone()[Anim.Name] local AnimNameID = Anim:GetFullName() local AnimName = Anim.Name local AnimType = Anim.Parent.Name AnimName = AnimName == ("Stun") and "ThrowHold" or AnimName AnimName = AnimName:find("Stunloop") and "alt Idle" or AnimName AnimName = AnimName:find("ttack") and "AttackAB1" or AnimName AnimName = AnimName:find("harge") and "Charge" or AnimName AnimName = AnimName:find("rapple") and "Grapple" or AnimName AnimName = AnimName:find("Kill") and "SelectPose" or AnimName AnimType = AnimType:find("Invis") and "Default" or AnimType AnimType = (AnimType:find("Rage") and (not AnimName:find("Idle"))) and "alt" or AnimType print("OG Anim", Anim.Name, "//", Anim:GetFullName()) local MyAnim = AnimSaves:FindFirstChild(AnimName) or AnimSaves:FindFirstChild(AnimType .. " " .. AnimName) print("MY Anim", MyAnim and MyAnim.Name or "na", "//", MyAnim and MyAnim:GetFullName() or "na") if MyAnim then tracks[AnimNameID] = tracks[AnimNameID] or MyAnimator:LoadAnimation(MyAnim) tracks[AnimNameID].Priority = track.Priority tracks[AnimNameID].Looped = track.Looped tracks[AnimNameID]:Play(0.2) if AnimName == "AttackAB1" then pcall(function() AnimsTemplate.Arms.LArm.Model["Left Hand"].Black:Clone().Parent = Rig.Arms.LArm.Model["Left Hand"] AnimsTemplate.Arms.LArm.Model["Left Hand"].Pink:Clone().Parent = Rig.Arms.LArm.Model["Left Hand"] AnimsTemplate.Arms.LArm.Model["Left Hand"].Black:Clone().Parent = Rig.Arms.LArm.Model["LMiddle2"] AnimsTemplate.Arms.LArm.Model["Left Hand"].Pink:Clone().Parent = Rig.Arms.LArm.Model["LMiddle2"] end) end task.spawn(function() while track.IsPlaying do task.wait(0.001) local m = 1.0 m = AnimName == "Kill" and 0.7 or m m = AnimName == "Walk" and 0.86 or m m = AnimName == "Run" and 0.5 or m m = AnimName == "Drop" and 2.5 or m m = AnimName == "Charge" and 1 or m tracks[AnimNameID]:AdjustSpeed(track.Speed * m) local p = tracks[AnimNameID].TimePosition p = (AnimName == "Drop" and (track.Speed == 0)) and 0.82 or p tracks[AnimNameID].TimePosition = p end if track.Looped then tracks[AnimFullName]:Stop(0.2) end if AnimName == "AttackAB1" then pcall(function() Rig.Arms.LArm.Model["Left Hand"].Black:Destroy() Rig.Arms.LArm.Model["Left Hand"].Pink:Destroy() Rig.Arms.LArm.Model["LMiddle2"].Black:Destroy() Rig.Arms.LArm.Model["LMiddle2"].Pink:Destroy() end) end end) end break end end) end -- trigger AnimationPlayed to handle already played anims before my connection task.spawn(function() for _, track in ipairs(Character.Humanoid.Animator:GetPlayingAnimationTracks()) do track.Priority = Enum.AnimationPriority.Core warn(hi, "Already played (restarting):", track.Name, track.Animation.AnimationId, track:Play(0)) end end) print(hi, "Updating finished for", Character.Name .. "!") end if _G.Rosy2011xSkinTESTINGDUMMYConn then _G.Rosy2011xSkinTESTINGDUMMYConn:Disconnect() end _G.Rosy2011xSkinTESTINGDUMMYConn = game.CollectionService:GetInstanceAddedSignal("TESTINGDUMMY"):Connect(tryUpdateCharacter) if _G.Rosy2011xInventoryAssetsCharConn then _G.Rosy2011xInventoryAssetsCharConn:Disconnect() end _G.Rosy2011xInventoryAssetsCharConn = workspace.InventoryAssets.char.ChildAdded:Connect(tryUpdateCharacter) if _G.Rosy2011xSelectMapDescendantAddedConn then _G.Rosy2011xSelectMapDescendantAddedConn:Disconnect() end _G.Rosy2011xSelectMapDescendantAddedConn = workspace.SelectMap.DescendantAdded:Connect(tryUpdateCharacter) local function onPlayerAdded(Player) if Player.Character then tryUpdateCharacter(Player.Character) end _G.Rosy2011xCharacterAddedConn = _G.Rosy2011xCharacterAddedConn or {} if _G.Rosy2011xCharacterAddedConn[Player.Name] then _G.Rosy2011xCharacterAddedConn[Player.Name]:Disconnect() end _G.Rosy2011xCharacterAddedConn[Player.Name] = Player.CharacterAdded:Connect(tryUpdateCharacter) end for _, Player in game.Players:GetPlayers() do onPlayerAdded(Player) end if _G.Rosy2011xPlayerAddedConn then _G.Rosy2011xPlayerAddedConn:Disconnect() print(hi, "Previous Rosy2011xPlayerAddedConn disconnected") end _G.Rosy2011xPlayerAddedConn = game.Players.PlayerAdded:Connect(onPlayerAdded) -- downlad stuff task.spawn(function() local themes = game.ReplicatedStorage:FindFirstChild("ChaseThemes", true):FindFirstChild("2011x", true) themes.Default.Rage.SoundId = downloadAsset("https://lil2kki.7m.pl/Cream.LMS/assets/Rage.mp3") themes.Default.TerrorRadius.SoundId = myAsset("JadeMakesMusic_MAKEITSTOP_segment1.mp3") themes.Default.NormalChase.SoundId = myAsset("JadeMakesMusic_MAKEITSTOP_segment2.mp3") themes.Default.NormalChase.PlaybackRegion = NumberRange.new(0, 0) themes.Default.NormalChase.LoopRegion = NumberRange.new(0, 0) themes.Default.LastLifeChase.SoundId = myAsset("JadeMakesMusic_MAKEITSTOP_segment3.mp3") themes.Default.LastLifeChase.PlaybackRegion = NumberRange.new(0, 0) themes.Default.LastLifeChase.LoopRegion = NumberRange.new(0, 0) themes.Default.LastLifeChase.PlaybackSpeed = 1 -- OM 0.1a special themes.Default.LastLifeChase:SetAttribute("Eliminated", nil) -- no time pos jump on kill pls themes.RETRO:Destroy() themes.Default:Clone().Parent = themes themes.Default.Name = "RETRO" themes.miku:Destroy() themes.Default:Clone().Parent = themes themes.Default.Name = "miku" end) task.spawn(function() _G.RosyAssets["KillLines"] = { ["SonicLine"] = { myAsset("RosySonic1.mp3"), myAsset("RosySonic2.mp3"), myAsset("RosySonic3.mp3"), myAsset("RosySonic4.mp3"), myAsset("RosySonic5.mp3") }, ["TailsLine"] = { myAsset("RosyTails1.mp3"), myAsset("RosyTails2.mp3"), myAsset("RosyTails3.mp3"), myAsset("RosyTails4.mp3"), myAsset("RosyTails5.mp3") }, ["MetalSonicLine"] = { myAsset("RosyMetalSonic1.mp3"), myAsset("RosyMetalSonic2.mp3"), myAsset("RosyMetalSonic3.mp3"), myAsset("RosyMetalSonic4.mp3") }, ["AmyLine"] = { myAsset("RosyAmy1.mp3"), myAsset("RosyAmy2.mp3"), myAsset("RosyAmy3.mp3"), myAsset("RosyAmy4.mp3") }, ["SilverLine"] = { myAsset("RosySilver1.mp3"), myAsset("RosySilver2.mp3"), myAsset("RosySilver3.mp3"), myAsset("RosySilver4.mp3") }, ["BlazeLine"] = { myAsset("RosyBlaze1.mp3"), myAsset("RosyBlaze2.mp3") }, ["EggmanLine"] = { myAsset("RosyEggman1.mp3"), myAsset("RosyEggman2.mp3"), myAsset("RosyEggman3.mp3"), myAsset("RosyEggman4.mp3") }, ["CreamLine"] = { myAsset("RosyCream1.mp3"), myAsset("RosyCream2.mp3"), myAsset("RosyCream3.mp3"), myAsset("RosyCream4.mp3") }, ["KnucklesLine"] = { myAsset("RosyKnuckles1.mp3"), myAsset("RosyKnuckles2.mp3"), myAsset("RosyKnuckles3.mp3") } } end) _G.RosyAssets["Attack"] = {} for i = 1, 7 do table.insert(_G.RosyAssets["Attack"], myAsset("RosyAttack" .. i .. ".mp3")) end _G.RosyAssets["Stunned"] = {} for i = 1, 7 do table.insert(_G.RosyAssets["Stunned"], myAsset("RosyStunned" .. i .. ".mp3")) end _G.RosyAssets["Downing"] = {} for i = 1, 34 do table.insert(_G.RosyAssets["Downing"], myAsset("RosyDowning" .. i .. ".mp3")) end _G.RosyAssets["InvisLine"] = {} for i = 1, 6 do table.insert(_G.RosyAssets["InvisLine"], myAsset("RosyInvisLine" .. i .. ".mp3")) end