-- LocalScript: Delta_MorphAllCharacters_Scroll_NoNoclip_VisibleDummy local Players = game:GetService("Players") local RunService = game:GetService("RunService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui", 10) if not playerGui then warn("No PlayerGui encontrado") return end local dummysFolder = ReplicatedStorage:WaitForChild("Dummys", 5) if not dummysFolder then warn("ReplicatedStorage.Dummys no encontrado") end local buttons = {} local function disableAllButtons() for _, btn in ipairs(buttons) do if btn and btn:IsA("GuiButton") then btn.Active = false btn.AutoButtonColor = false btn.BackgroundColor3 = Color3.fromRGB(60,60,60) end end end local function enableAllButtons() for _, btn in ipairs(buttons) do if btn and btn:IsA("GuiButton") then btn.Active = true btn.AutoButtonColor = true btn.BackgroundColor3 = Color3.fromRGB(100,100,100) end end end local function safeFindDummy(name) if not dummysFolder then return nil end local found = dummysFolder:FindFirstChild(name) or dummysFolder:FindFirstChild(name:lower()) or dummysFolder:FindFirstChild(name:upper()) return found end local function copySpecialFoldersAndAnimations(sourceModel, targetCharacter) if not sourceModel or not targetCharacter then return end local specialFolders = {"CharacterFolder", "HitFolder"} for _, folderName in ipairs(specialFolders) do local sourceFolder = sourceModel:FindFirstChild(folderName) local targetFolder = targetCharacter:FindFirstChild(folderName) if sourceFolder then if targetFolder then targetFolder:Destroy() end sourceFolder:Clone().Parent = targetCharacter end end local sourceAnimate = sourceModel:FindFirstChild("Animate") local targetAnimate = targetCharacter:FindFirstChild("Animate") if sourceAnimate then if targetAnimate then targetAnimate:Destroy() end sourceAnimate:Clone().Parent = targetCharacter end end local function setupHeadFollow(headPart) if not headPart then return end local camera = workspace.CurrentCamera local conn conn = RunService.RenderStepped:Connect(function() if not headPart or not headPart.Parent then if conn then conn:Disconnect() end return end headPart.CFrame = CFrame.new(headPart.Position, camera.CFrame.Position) end) end local function weldToRoot(rootPart, modelRoot) if not (rootPart and modelRoot) then return end local weld = Instance.new("WeldConstraint") weld.Part0 = rootPart weld.Part1 = modelRoot weld.Parent = modelRoot end local function morphTo(characterName) local dummyTemplate = safeFindDummy(characterName) if not dummyTemplate then warn("Modelo no encontrado para morph: "..tostring(characterName)) return end local char = player.Character or player.CharacterAdded:Wait() local rootPart = char:FindFirstChild("HumanoidRootPart") or char:FindFirstChildWhichIsA("BasePart") if not rootPart then return end -- Destruye morph anterior for _, c in ipairs(char:GetChildren()) do if c.Name == "CharacterModel" then c:Destroy() end end -- Hace invisible el modelo original (solo visual) for _, part in ipairs(char:GetDescendants()) do if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then part.Transparency = 1 end end -- Copia animaciones y carpetas especiales copySpecialFoldersAndAnimations(dummyTemplate, char) -- Clona el dummy local clone = dummyTemplate:Clone() clone.Name = "CharacterModel" local dummyHum = clone:FindFirstChildOfClass("Humanoid") if dummyHum then dummyHum:Destroy() end local dummyRoot = clone:FindFirstChild("HumanoidRootPart") or clone.PrimaryPart if not dummyRoot then for _, p in ipairs(clone:GetDescendants()) do if p:IsA("BasePart") then dummyRoot = p break end end end if dummyRoot then clone.Parent = char clone.PrimaryPart = dummyRoot clone:SetPrimaryPartCFrame(rootPart.CFrame) weldToRoot(rootPart, dummyRoot) else clone.Parent = char end -- Cabeza sigue cámara for _, name in ipairs({"Head","head"}) do local headPart = clone:FindFirstChild(name, true) if headPart and headPart:IsA("BasePart") then setupHeadFollow(headPart) break end end disableAllButtons() end -- ---------- GUI ---------- local screenGui = Instance.new("ScreenGui") screenGui.Name = "DeltaMorphGUI" screenGui.ResetOnSpawn = false screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling screenGui.Parent = playerGui local toggle = Instance.new("TextButton") toggle.Name = "ToggleButton" toggle.Text = "MORPH" toggle.Font = Enum.Font.SourceSansBold toggle.TextSize = 18 toggle.Size = UDim2.new(0,84,0,44) toggle.Position = UDim2.new(0,8,0,8) toggle.BackgroundColor3 = Color3.fromRGB(40,40,40) toggle.TextColor3 = Color3.new(1,1,1) toggle.Parent = screenGui local panel = Instance.new("Frame") panel.Name = "MainPanel" panel.Size = UDim2.new(0.78,0,0.72,0) panel.Position = UDim2.new(0.11,0,0.14,0) panel.BackgroundColor3 = Color3.fromRGB(20,20,20) panel.Visible = false panel.Parent = screenGui local scrollFrame = Instance.new("ScrollingFrame") scrollFrame.Size = UDim2.new(1,-16,1,-16) scrollFrame.Position = UDim2.new(0,8,0,8) scrollFrame.BackgroundTransparency = 1 scrollFrame.ScrollBarThickness = 8 scrollFrame.Parent = panel local layout = Instance.new("UIListLayout") layout.Parent = scrollFrame layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Padding = UDim.new(0,6) layout.HorizontalAlignment = Enum.HorizontalAlignment.Center layout.VerticalAlignment = Enum.VerticalAlignment.Top local closeBtn = Instance.new("TextButton") closeBtn.Name = "CloseBtn" closeBtn.Text = "Cerrar" closeBtn.Size = UDim2.new(0,90,0,34) closeBtn.AnchorPoint = Vector2.new(1,0) closeBtn.Position = UDim2.new(1,-8,0,8) closeBtn.BackgroundColor3 = Color3.fromRGB(50,50,50) closeBtn.TextColor3 = Color3.new(1,1,1) closeBtn.Parent = panel toggle.MouseButton1Click:Connect(function() panel.Visible = not panel.Visible end) closeBtn.MouseButton1Click:Connect(function() panel.Visible = false end) -- ---------- BOTONES MORPH ---------- local charactersList = { "Sonic","Shadow","Vanilla","Cream", "Bendy","Boris", "Cuphead","Mugman", "Sayori","Monika","Yuri", "Sans","Frisk","Chara", "Sonic.exe" } for _, name in ipairs(charactersList) do local btn = Instance.new("TextButton") btn.Name = name.."Btn" btn.Text = name btn.Size = UDim2.new(0.9,0,0,44) btn.BackgroundColor3 = Color3.fromRGB(100,100,100) btn.TextColor3 = Color3.new(1,1,1) btn.Font = Enum.Font.SourceSansBold btn.TextScaled = true btn.Parent = scrollFrame table.insert(buttons, btn) btn.MouseButton1Click:Connect(function() if btn.Active == false then return end morphTo(name) end) end layout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() scrollFrame.CanvasSize = UDim2.new(0,0,0,layout.AbsoluteContentSize.Y + 8) end) -- ---------- RESET / MORTES ---------- local function onCharacterAdded(char) local humanoid = char:WaitForChild("Humanoid",10) if humanoid then humanoid.Died:Connect(function() task.wait(0.8) for _, child in ipairs(char:GetChildren()) do if child.Name == "CharacterModel" then child:Destroy() end end -- Restaura visibilidad del modelo original for _, part in ipairs(char:GetDescendants()) do if part:IsA("BasePart") then part.Transparency = 0 end end enableAllButtons() end) end end if player.Character then onCharacterAdded(player.Character) end player.CharacterAdded:Connect(onCharacterAdded) print("[DeltaMorphGUI] Cargado: 15 personajes listos con scroll + toggle móvil, sin noclip, modelo original oculto visualmente")