Description
About This Script Name : SimpleMenu UI Framework : Obsidian UI (LinoriaLib Fork) Target Game : Housebound (Roblox) Key Features : Player & Movement : WalkSpeed customization, Noclip, Fly Hack, and Camera Zoom unlock. Visuals & Lighting : Fullbright, adjustable FOV, and automatic removal of screen blurs, horror color filters, static, vignette, and blood overlays. Entity ESP : Configurable highlight Chams and distance/name text tags targeting game entities (such as Billy, CellGuy, FleshGuy, etc.). Configuration Manager : Supports UI custom themes, keybind customization, DPI scaling, and config auto-saving/loading.
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
--[[rscripts:analytics:start]]
-- Script analytics (enabled by the creator on rscripts.net).
-- Runs in its own thread and cannot affect the script below.
task.spawn(function()
pcall(function()
loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6ac475d4226d41277e9edd7b"))()
end)
end)
--[[rscripts:analytics:end]]
--[[
================================================================
SIMPLEMENU - MULTI-FUNCTIONAL SCRIPT
UI Framework: Obsidian UI (LinoriaLib Fork)
Target Game: Housebound
================================================================
]]
-- Services and Variables
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Lighting = game:GetService("Lighting")
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local Camera = Workspace.CurrentCamera
-- UI Library Setup
local repo = "https://raw.githubusercontent.com/deividcomsono/Obsidian/main/"
local Library = loadstring(game:HttpGet(repo .. "Library.lua"))()
local ThemeManager = loadstring(game:HttpGet(repo .. "addons/ThemeManager.lua"))()
local SaveManager = loadstring(game:HttpGet(repo .. "addons/SaveManager.lua"))()
local Options = Library.Options
local Toggles = Library.Toggles
-- Cache initial lighting state for clean resetting
local OriginalLighting = {
Ambient = Lighting.Ambient,
OutdoorAmbient = Lighting.OutdoorAmbient,
Brightness = Lighting.Brightness,
ClockTime = Lighting.ClockTime,
FogEnd = Lighting.FogEnd,
GlobalShadows = Lighting.GlobalShadows
}
-- Known monster target list
local KnownMonsters = {
["Billy"] = true,
["HouseBilly"] = true,
["CellGuy"] = true,
["FleshGuy"] = true
}
local RenderConnections = {}
local ESPStorage = {}
-- Create Window
local Window = Library:CreateWindow({
Title = "SimpleMenu",
Footer = "Version 1.0.0",
Icon = 95816097006870,
NotifySide = "Right",
ShowCustomCursor = true,
})
-- Create Tabs
local Tabs = {
Main = Window:AddTab("Player & Movement", "user"),
Visuals = Window:AddTab("Visuals & Lighting", "eye"),
ESP = Window:AddTab("Entities & ESP", "crosshair"),
["UI Settings"] = Window:AddTab("UI Settings", "settings"),
}
--------------------------------------------------------------------------------
-- TAB 1: PLAYER & MOVEMENT
--------------------------------------------------------------------------------
local MovementGroup = Tabs.Main:AddGroupbox({
Side = "Left",
Name = "Movement Modifier",
IconName = "zap"
})
-- WalkSpeed Toggle & Slider
MovementGroup:AddToggle("EnableWalkSpeed", {
Text = "Custom WalkSpeed",
Default = false,
Tooltip = "Overrides your default movement speed",
}):AddKeyPicker("WalkSpeedBind", {
Default = "None",
SyncToggleState = true,
Mode = "Toggle",
Text = "WalkSpeed Keybind"
})
MovementGroup:AddSlider("WalkSpeedValue", {
Text = "Speed Multiplier",
Default = 16,
Min = 6,
Max = 60,
Rounding = 0,
Suffix = " studs/s"
})
-- Noclip Toggle
MovementGroup:AddToggle("EnableNoclip", {
Text = "Noclip",
Default = false,
Tooltip = "Allows walking through walls and doors",
}):AddKeyPicker("NoclipBind", {
Default = "N",
SyncToggleState = true,
Mode = "Toggle",
Text = "Noclip Keybind"
})
-- Fly Hack Toggle
MovementGroup:AddToggle("EnableFly", {
Text = "Fly Hack",
Default = false,
Tooltip = "Allows flying around the map",
}):AddKeyPicker("FlyBind", {
Default = "F",
SyncToggleState = true,
Mode = "Toggle",
Text = "Fly Keybind"
})
MovementGroup:AddSlider("FlySpeed", {
Text = "Fly Speed",
Default = 20,
Min = 5,
Max = 100,
Rounding = 0,
})
local PlayerMechanicsGroup = Tabs.Main:AddGroupbox({
Side = "Right",
Name = "Player Settings",
IconName = "shield"
})
-- Camera Zoom Unlock
PlayerMechanicsGroup:AddToggle("UnlockCameraZoom", {
Text = "Unlock Third Person Camera",
Default = false,
Tooltip = "Unlocks first-person camera distance restrictions",
})
--------------------------------------------------------------------------------
-- TAB 2: VISUALS & LIGHTING
--------------------------------------------------------------------------------
local LightingGroup = Tabs.Visuals:AddGroupbox({
Side = "Left",
Name = "Lighting Enhancements",
IconName = "sun"
})
-- Fullbright Toggle
LightingGroup:AddToggle("EnableFullbright", {
Text = "Fullbright",
Default = false,
Tooltip = "Removes map darkness, shadows, and fog",
})
LightingGroup:AddSlider("FullbrightBrightness", {
Text = "Brightness Level",
Default = 2,
Min = 1,
Max = 5,
Rounding = 1,
})
-- Anti Visual Effects
local AntiFXGroup = Tabs.Visuals:AddGroupbox({
Side = "Right",
Name = "Anti Visual Effects",
IconName = "eye-off"
})
AntiFXGroup:AddToggle("AntiBlur", {
Text = "Remove Screen Blurs",
Default = true,
Tooltip = "Disables active blur effects",
})
AntiFXGroup:AddToggle("AntiColorCorrection", {
Text = "Disable Color Correction",
Default = true,
Tooltip = "Removes dark horror filters (Saturation / Contrast)",
})
AntiFXGroup:AddToggle("AntiVignette", {
Text = "Remove Vignette / Blood FX",
Default = true,
Tooltip = "Hides vignette overlays, static effects, and blood noise",
})
-- Field of View
AntiFXGroup:AddSlider("FieldOfView", {
Text = "Camera FOV",
Default = 70,
Min = 60,
Max = 120,
Rounding = 0,
})
--------------------------------------------------------------------------------
-- TAB 3: ENTITIES & ESP
--------------------------------------------------------------------------------
local ESPGroup = Tabs.ESP:AddGroupbox({
Side = "Left",
Name = "Monster ESP Settings",
IconName = "user-x"
})
ESPGroup:AddToggle("EnableMonsterESP", {
Text = "Enable Monster ESP",
Default = false,
Tooltip = "Renders highlights and labels on entities",
}):AddColorPicker("ESPColor", {
Default = Color3.fromRGB(255, 30, 30),
Title = "Monster ESP Color",
})
ESPGroup:AddToggle("ESPShowName", {
Text = "Show Entity Name",
Default = true,
})
ESPGroup:AddToggle("ESPShowDistance", {
Text = "Show Distance",
Default = true,
})
ESPGroup:AddSlider("ESPFillTransparency", {
Text = "Chams Fill Transparency",
Default = 0.5,
Min = 0,
Max = 1,
Rounding = 2,
})
ESPGroup:AddSlider("ESPOutlineTransparency", {
Text = "Chams Outline Transparency",
Default = 0,
Min = 0,
Max = 1,
Rounding = 2,
})
--------------------------------------------------------------------------------
-- CORE LOGIC
--------------------------------------------------------------------------------
-- Utility Functions
local function GetCharacter()
return LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
end
local function GetHumanoid()
local Char = GetCharacter()
return Char and Char:FindFirstChildOfClass("Humanoid")
end
local function GetRootPart()
local Char = GetCharacter()
return Char and (Char:FindFirstChild("HumanoidRootPart") or Char.PrimaryPart)
end
-- WalkSpeed Loop
RenderConnections.WalkSpeedLoop = RunService.PreRender:Connect(function()
local Humanoid = GetHumanoid()
if not Humanoid then return end
if Toggles.EnableWalkSpeed.Value then
Humanoid.WalkSpeed = Options.WalkSpeedValue.Value
end
end)
-- Noclip Loop
RenderConnections.NoclipLoop = RunService.Stepped:Connect(function()
if not Toggles.EnableNoclip.Value then return end
local Char = LocalPlayer.Character
if not Char then return end
for _, part in ipairs(Char:GetDescendants()) do
if part:IsA("BasePart") and part.CanCollide then
part.CanCollide = false
end
end
end)
-- Fly Hack Loop
local FlyFlying = false
local FlyBodyVel, FlyBodyGyro
RenderConnections.FlyLoop = RunService.RenderStepped:Connect(function(delta)
local Char = LocalPlayer.Character
local Root = GetRootPart()
if Toggles.EnableFly.Value and Char and Root then
if not FlyFlying then
FlyFlying = true
FlyBodyVel = Instance.new("BodyVelocity")
FlyBodyVel.MaxForce = Vector3.new(1e9, 1e9, 1e9)
FlyBodyVel.Parent = Root
FlyBodyGyro = Instance.new("BodyGyro")
FlyBodyGyro.MaxTorque = Vector3.new(1e9, 1e9, 1e9)
FlyBodyGyro.P = 9000
FlyBodyGyro.Parent = Root
end
FlyBodyGyro.CFrame = Camera.CFrame
local MoveDir = Vector3.new()
if UserInputService:IsKeyDown(Enum.KeyCode.W) then
MoveDir = MoveDir + Camera.CFrame.LookVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.S) then
MoveDir = MoveDir - Camera.CFrame.LookVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.A) then
MoveDir = MoveDir - Camera.CFrame.RightVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.D) then
MoveDir = MoveDir + Camera.CFrame.RightVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.Space) then
MoveDir = MoveDir + Vector3.new(0, 1, 0)
end
if UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) then
MoveDir = MoveDir - Vector3.new(0, 1, 0)
end
FlyBodyVel.Velocity = MoveDir.Unit * Options.FlySpeed.Value
if MoveDir.Magnitude == 0 then
FlyBodyVel.Velocity = Vector3.new(0, 0, 0)
end
else
if FlyFlying then
FlyFlying = false
if FlyBodyVel then FlyBodyVel:Destroy() end
if FlyBodyGyro then FlyBodyGyro:Destroy() end
end
end
end)
-- Lighting & FX Loop
RenderConnections.LightingLoop = RunService.RenderStepped:Connect(function()
if Toggles.EnableFullbright.Value then
Lighting.Ambient = Color3.new(1, 1, 1)
Lighting.OutdoorAmbient = Color3.new(1, 1, 1)
Lighting.Brightness = Options.FullbrightBrightness.Value
Lighting.FogEnd = 1000000
Lighting.GlobalShadows = false
end
if Toggles.AntiBlur.Value then
for _, blurName in ipairs({"Blur", "PickupBlur", "BackgroundBlur", "ChoreBlur"}) do
local blur = Lighting:FindFirstChild(blurName)
if blur and blur:IsA("BlurEffect") then
blur.Enabled = false
end
end
end
if Toggles.AntiColorCorrection.Value then
local cc = Lighting:FindFirstChild("ColorCorrection")
if cc and cc:IsA("ColorCorrectionEffect") then
cc.Enabled = false
end
end
if Toggles.AntiVignette.Value then
pcall(function()
local Retro = LocalPlayer.PlayerGui:FindFirstChild("RetroEffects")
if Retro and Retro:FindFirstChild("Visual") and Retro.Visual:FindFirstChild("Vignette") then
Retro.Visual.Vignette.Visible = false
end
local HealthGUI = LocalPlayer.PlayerGui:FindFirstChild("HealthGUI")
if HealthGUI and HealthGUI:FindFirstChild("BloodImage") then
HealthGUI.BloodImage.Visible = false
end
local TitleScreen = LocalPlayer.PlayerGui:FindFirstChild("TitleScreen")
if TitleScreen and TitleScreen:FindFirstChild("Static") then
TitleScreen.Static.Visible = false
end
end)
end
end)
-- Restore lighting on Fullbright toggle off
Toggles.EnableFullbright:OnChanged(function(State)
if not State then
Lighting.Ambient = OriginalLighting.Ambient
Lighting.OutdoorAmbient = OriginalLighting.OutdoorAmbient
Lighting.Brightness = OriginalLighting.Brightness
Lighting.ClockTime = OriginalLighting.ClockTime
Lighting.FogEnd = OriginalLighting.FogEnd
Lighting.GlobalShadows = OriginalLighting.GlobalShadows
end
end)
-- Camera Adjustments
Options.FieldOfView:OnChanged(function(Value)
Camera.FieldOfView = Value
end)
Toggles.UnlockCameraZoom:OnChanged(function(State)
if State then
LocalPlayer.CameraMaxZoomDistance = 128
LocalPlayer.CameraMinZoomDistance = 0.5
else
LocalPlayer.CameraMaxZoomDistance = 0.5
LocalPlayer.CameraMinZoomDistance = 0.5
end
end)
-- Entity ESP Functions
local function CreateESPForEntity(model)
if ESPStorage[model] then return end
local highlight = Instance.new("Highlight")
highlight.Name = "ESP_Highlight"
highlight.Adornee = model
highlight.FillColor = Options.ESPColor.Value
highlight.OutlineColor = Color3.fromRGB(255, 255, 255)
highlight.FillTransparency = Options.ESPFillTransparency.Value
highlight.OutlineTransparency = Options.ESPOutlineTransparency.Value
highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
highlight.Parent = model
local billboard = Instance.new("BillboardGui")
billboard.Name = "ESP_Tag"
billboard.Adornee = model:FindFirstChild("HumanoidRootPart") or model.PrimaryPart or model:FindFirstChildWhichIsA("BasePart")
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.StudsOffset = Vector3.new(0, 3, 0)
billboard.AlwaysOnTop = true
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0)
textLabel.BackgroundTransparency = 1
textLabel.TextColor3 = Options.ESPColor.Value
textLabel.TextStrokeTransparency = 0
textLabel.TextSize = 14
textLabel.Font = Enum.Font.SourceSansBold
textLabel.Parent = billboard
billboard.Parent = model
ESPStorage[model] = {
Highlight = highlight,
Billboard = billboard,
TextLabel = textLabel
}
end
local function RemoveESPForEntity(model)
if ESPStorage[model] then
if ESPStorage[model].Highlight then ESPStorage[model].Highlight:Destroy() end
if ESPStorage[model].Billboard then ESPStorage[model].Billboard:Destroy() end
ESPStorage[model] = nil
end
end
-- ESP Update Loop
RenderConnections.ESPLoop = RunService.RenderStepped:Connect(function()
if not Toggles.EnableMonsterESP.Value then
for model, _ in pairs(ESPStorage) do
RemoveESPForEntity(model)
end
return
end
for _, obj in ipairs(Workspace:GetChildren()) do
if KnownMonsters[obj.Name] or (obj:IsA("Model") and obj:FindFirstChildOfClass("Humanoid") and not Players:GetPlayerFromCharacter(obj)) then
if not ESPStorage[obj] then
CreateESPForEntity(obj)
else
local espData = ESPStorage[obj]
espData.Highlight.FillColor = Options.ESPColor.Value
espData.Highlight.FillTransparency = Options.ESPFillTransparency.Value
espData.Highlight.OutlineTransparency = Options.ESPOutlineTransparency.Value
local root = obj:FindFirstChild("HumanoidRootPart") or obj.PrimaryPart or obj:FindFirstChildWhichIsA("BasePart")
local localRoot = GetRootPart()
if root and localRoot then
local dist = math.floor((root.Position - localRoot.Position).Magnitude)
local displayText = ""
if Toggles.ESPShowName.Value then
displayText = obj.Name
end
if Toggles.ESPShowDistance.Value then
displayText = displayText .. (displayText ~= "" and " [" or "[") .. tostring(dist) .. "m]"
end
espData.TextLabel.Text = displayText
espData.TextLabel.TextColor3 = Options.ESPColor.Value
end
end
end
end
end)
-- Listen for new entities spawning
Workspace.ChildAdded:Connect(function(child)
if Toggles.EnableMonsterESP.Value and KnownMonsters[child.Name] then
task.wait(0.2)
CreateESPForEntity(child)
end
end)
--------------------------------------------------------------------------------
-- TAB 4: UI SETTINGS & CONFIGURATION
--------------------------------------------------------------------------------
local MenuGroup = Tabs["UI Settings"]:AddGroupbox({
Side = "Left",
Name = "Menu Customization",
IconName = "wrench"
})
MenuGroup:AddToggle("KeybindMenuOpen", {
Default = Library.KeybindFrame.Visible,
Text = "Open Keybind Menu",
Callback = function(value)
Library.KeybindFrame.Visible = value
end,
})
MenuGroup:AddDropdown("DPIDropdown", {
Values = { "50%", "75%", "100%", "125%", "150%" },
Default = "100%",
Text = "DPI Scale",
Callback = function(Value)
Value = Value:gsub("%%", "")
Library:SetDPIScale(tonumber(Value))
end,
})
MenuGroup:AddDivider()
MenuGroup:AddLabel("Menu Toggle Bind"):AddKeyPicker("MenuKeybind", { Default = "RightControl", NoUI = true, Text = "Menu keybind" })
MenuGroup:AddButton("Unload Script", function()
Library:Unload()
end)
Library.ToggleKeybind = Options.MenuKeybind
-- Save & Theme Manager Setup
ThemeManager:SetLibrary(Library)
SaveManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({ "MenuKeybind" })
ThemeManager:SetFolder("SimpleMenu")
SaveManager:SetFolder("SimpleMenu/config")
SaveManager:BuildConfigSection(Tabs["UI Settings"])
ThemeManager:ApplyToTab(Tabs["UI Settings"])
-- Cleanup on Script Unload
Library:OnUnload(function()
for _, conn in pairs(RenderConnections) do
if conn and conn.Connected then
conn:Disconnect()
end
end
for model, _ in pairs(ESPStorage) do
RemoveESPForEntity(model)
end
Lighting.Ambient = OriginalLighting.Ambient
Lighting.OutdoorAmbient = OriginalLighting.OutdoorAmbient
Lighting.Brightness = OriginalLighting.Brightness
Lighting.ClockTime = OriginalLighting.ClockTime
Lighting.FogEnd = OriginalLighting.FogEnd
Lighting.GlobalShadows = OriginalLighting.GlobalShadows
print("[SimpleMenu] Unloaded successfully!")
end)
-- Load Configurations
SaveManager:LoadAutoloadConfig()
Library:Notify({
Title = "SimpleMenu",
Description = "Loaded successfully!",
Time = 5,
})Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.


Your community, in one place