-- Demonology Pro -- UI rewrite and optimization by Ced -- services local Players = game:GetService("Players") local RS = game:GetService("RunService") local Rep = game:GetService("ReplicatedStorage") local Lighting = game:GetService("Lighting") local CoreGui = game:GetService("CoreGui") local plr = Players.LocalPlayer -- rayfield local Rayfield = loadstring(game:HttpGet("https://raw.githubusercontent.com/shlexware/Rayfield/main/source"))() local Window = Rayfield:CreateWindow({ Name = "Demonology Pro", LoadingTitle = "Demonology Pro", LoadingSubtitle = "Made by Ced", ConfigurationSaving = { Enabled = false } }) local MainTab = Window:CreateTab("Main") local EspTab = Window:CreateTab("ESP") local AutoTab = Window:CreateTab("Auto") local MiscTab = Window:CreateTab("Misc") local CreditsTab = Window:CreateTab("Credits") -- state local ghostModel = workspace:WaitForChild("Ghost") local roomsFolder = workspace.Map.Rooms local PlayersEspToggle = false local EvidenceEspToggle = false local ItemEspToggle = false local AutoSpiritBoxToggle = false local IsEscapeHunt = false local LightToggleStatus = false -- caches local PlayerEspCache = {} local EvidenceCache = {} local ItemCache = {} -- ghost esp local GhostBil local GhostHL local GhostEspOn = false local function ToggleGhostEsp() if not GhostBil then GhostBil = Instance.new("BillboardGui") GhostBil.Size = UDim2.new(0,60,0,30) GhostBil.AlwaysOnTop = true GhostBil.Adornee = ghostModel GhostBil.Parent = CoreGui local txt = Instance.new("TextLabel") txt.Size = UDim2.new(1,0,1,0) txt.BackgroundTransparency = 1 txt.Text = "Ghost" txt.TextColor3 = Color3.fromRGB(255,0,0) txt.TextScaled = true txt.Parent = GhostBil GhostHL = Instance.new("Highlight") GhostHL.Adornee = ghostModel GhostHL.Parent = ghostModel GhostHL.OutlineColor = Color3.fromRGB(255,0,0) GhostHL.FillTransparency = 1 end GhostEspOn = not GhostEspOn GhostBil.Enabled = GhostEspOn GhostHL.Enabled = GhostEspOn end -- player esp local function ClearPlayerEsp() for _, v in pairs(PlayerEspCache) do if v then v:Destroy() end end table.clear(PlayerEspCache) end local function UpdatePlayerEsp() ClearPlayerEsp() if not PlayersEspToggle then return end for _, p in pairs(Players:GetPlayers()) do if p.Character and p.Character:FindFirstChild("HumanoidRootPart") then local hrp = p.Character.HumanoidRootPart local bil = Instance.new("BillboardGui") bil.Size = UDim2.new(0,100,0,30) bil.AlwaysOnTop = true bil.Adornee = hrp bil.Parent = hrp local txt = Instance.new("TextLabel") txt.Size = UDim2.new(1,0,1,0) txt.BackgroundTransparency = 1 txt.Text = p.DisplayName txt.TextScaled = true txt.TextColor3 = Color3.fromRGB(0,170,255) txt.Parent = bil local hl = Instance.new("Highlight") hl.Adornee = p.Character hl.Parent = hrp hl.OutlineColor = Color3.fromRGB(0,170,255) hl.FillTransparency = 1 table.insert(PlayerEspCache, bil) table.insert(PlayerEspCache, hl) end end end -- evidence esp local function ClearEvidenceEsp() for _, v in pairs(EvidenceCache) do if v then v:Destroy() end end table.clear(EvidenceCache) end local function UpdateEvidenceEsp() ClearEvidenceEsp() if not EvidenceEspToggle then return end for _, obj in pairs(workspace.Handprints:GetDescendants()) do if obj:IsA("BasePart") then local bil = Instance.new("BillboardGui") bil.Size = UDim2.new(1,0,1,0) bil.AlwaysOnTop = true bil.Adornee = obj bil.Parent = CoreGui table.insert(EvidenceCache, bil) end end for _, obj in pairs(workspace:GetDescendants()) do if obj:IsA("BasePart") and obj.Name == "GhostOrb" then local bil = Instance.new("BillboardGui") bil.Size = UDim2.new(2,0,2,0) bil.AlwaysOnTop = true bil.Adornee = obj bil.Parent = CoreGui local txt = Instance.new("TextLabel") txt.Size = UDim2.new(1,0,1,0) txt.BackgroundTransparency = 1 txt.Text = "Orb" txt.TextScaled = true txt.TextColor3 = Color3.fromRGB(255,255,255) txt.Parent = bil table.insert(EvidenceCache, bil) break end end end -- lights local function ToggleAllLights() LightToggleStatus = not LightToggleStatus for _, r in pairs(roomsFolder:GetChildren()) do if r:GetAttribute("LightsOn") ~= LightToggleStatus then Rep.Events.UseLightSwitch:FireServer(r) end end end -- spirit box local SpiritLines = { "Where are you?", "Are you near?", "Are you here?", "Do you want us gone?" } local lastSB = 0 local function AutoSpiritBox() if not AutoSpiritBoxToggle then return end if ghostModel:GetAttribute("Hunting") then return end if tick() - lastSB < 0.6 then return end lastSB = tick() Rep.Events.AskSpiritBoxFromUI:FireServer( SpiritLines[math.random(#SpiritLines)] ) end -- heartbeat RS.Heartbeat:Connect(function() AutoSpiritBox() end) -- ui bindings EspTab:CreateToggle({ Name = "Ghost ESP", CurrentValue = false, Callback = function() ToggleGhostEsp() end }) EspTab:CreateToggle({ Name = "Players ESP", CurrentValue = false, Callback = function(v) PlayersEspToggle = v UpdatePlayerEsp() end }) EspTab:CreateToggle({ Name = "Evidence ESP", CurrentValue = false, Callback = function(v) EvidenceEspToggle = v UpdateEvidenceEsp() end }) MainTab:CreateButton({ Name = "Toggle All Lights", Callback = ToggleAllLights }) AutoTab:CreateToggle({ Name = "Auto Spirit Box", CurrentValue = false, Callback = function(v) AutoSpiritBoxToggle = v end }) MiscTab:CreateSlider({ Name = "Walk Speed", Range = {0,100}, Increment = 1, CurrentValue = 16, Callback = function(v) if plr.Character then plr.Character.Humanoid.WalkSpeed = v end end }) MiscTab:CreateToggle({ Name = "Full Bright", CurrentValue = false, Callback = function(v) if v then Lighting.Ambient = Color3.new(1,1,1) Lighting.Brightness = 3 Lighting.GlobalShadows = false else Lighting.Ambient = Color3.new(0,0,0) Lighting.Brightness = 1 Lighting.GlobalShadows = true end end }) CreditsTab:CreateParagraph({ Title = "Credits", Content = "Demonology Pro\nUI rewrite and optimization by Ced" })