-- Constants
local REMOVE_BANANA_PEELS = false -- if true it will make banana peel was invisible
local REMOVE_JEFFTHEKILLER_HITBOX = true -- makes jeff unable to deal damage but he still able to deal damage if you enter the closest
local REMOVE_GREED_RISK = true -- makes you unable to collect gold when you risk taking damage from greed
local REMOVE_AMBIENCE_SOUNDS = false -- not that necessary but if you want to hear better keep it
local REMOVE_EYES_DAMAGE = true -- makes eyes deal no damage, it deal damage if you get laggy when opening a door
local REMOVE_SCREECH = true
local REMOVE_LIGHT_SHATTER = true -- makes lights not shatter from any entity moving (screech will still appear unless removed)
local REMOVE_LIBRARY_DOOR = true -- you can just go past it without doing the padlock
local COMPLETE_ELEVATOR_MINIGAME = true -- elevator breaker (be ready to run)
-- creates a guiding light so you know where to go
local MARK_NEXT_DOOR = true
local MARK_KEY_PICKUP = true
local MARK_GATE_LEVER = true
local MARK_HINT_BOOKS = true
local MARK_ELEVATOR_BREAKER_POLES = true -- for room 100
local SPEED_BOOST_ENABLED = true
local BOOST_EXTRA_WALKSPEED = 6 -- above makes you teleport back by anticheat
local CREATE_ENTITY_HINTS = true -- watch your topbar for hints when entities spawn
--- don't touch below (you can however change light properties, color is (red, green, blue) up to 255)
-- Services
local PlayersService = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Vars
local CurrentRooms = workspace:WaitForChild("CurrentRooms")
local LocalPlayer = PlayersService.LocalPlayer
--
local Hint, OnRemovalConnection
local function HandleModels(model)
task.wait()
local modelIdentifier = model.Name
if modelIdentifier == "BananaPeel" and REMOVE_BANANA_PEELS then
model:Destroy()
elseif modelIdentifier == "JeffTheKiller" and REMOVE_JEFFTHEKILLER_HITBOX then
local knife = model:WaitForChild("Knife", 10)
if not knife then
return
end
for _, descendant in ipairs(model:GetDescendants()) do
if descendant:IsA("BasePart") then
descendant.CanTouch = false
descendant.CanQuery = false
end
end
elseif (modelIdentifier == "RushMoving" or modelIdentifier == "AmbushMoving") and CREATE_ENTITY_HINTS then
local function formatIdentifier(primaryPart)
local entityIdentifier = primaryPart.Name
return entityIdentifier == "RushNew" and string.gsub(model.Name, "Moving", "") or entityIdentifier
end
local function onRemovalFunction()
Hint:Destroy()
Hint = nil
OnRemovalConnection = nil
end
local primaryPart = model.PrimaryPart or model:FindFirstChildWhichIsA("BasePart")
if not primaryPart or primaryPart.Position.Y < -1000 then -- ignore fake ones
return
end
local entityIdentifier = formatIdentifier(primaryPart)
if Hint and OnRemovalConnection then
OnRemovalConnection:Disconnect()
-- let the player know there is another entity coming right after
Hint.Text = entityIdentifier.. " is coming right after! hide!!!!!"
-- clear stuff up later
OnRemovalConnection = model:GetPropertyChangedSignal("Parent"):Once(onRemovalFunction)
return
end
Hint = Instance.new("Hint")
Hint.Text = entityIdentifier.. " is coming! hide!!!"
Hint.Parent = workspace
-- clear stuff up
OnRemovalConnection = model:GetPropertyChangedSignal("Parent"):Once(onRemovalFunction)
end
end
local function HandleRooms(room)
local currentRoomId = tonumber(room.Name)
local nextRoomId = currentRoomId + 1
local nextRoomNumber = string.rep("0", 4 - #tostring(nextRoomId))..nextRoomId
local isLibrary = currentRoomId == 50
local isTheEnd = not isLibrary and currentRoomId == 100
local function waitForAttribute(instance, attribute, expectedValue)
local function isValid()
local currentValue = instance:GetAttribute(attribute)
return currentValue == expectedValue
end
if isValid() then
return true
end
instance:GetAttributeChangedSignal(attribute):Wait()
return isValid()
end
local function handleDescendant(descendant)
local guidingLight = Instance.new("PointLight")
if MARK_NEXT_DOOR and descendant.Name == "Door" and waitForAttribute(descendant, "RoomID", nextRoomId) then
guidingLight.Range = 40
guidingLight.Color = Color3.fromRGB(255, 255, 255)
guidingLight.Shadows = false
guidingLight.Parent = descendant:WaitForChild("Door", 5)
elseif MARK_KEY_PICKUP and descendant.Name == "KeyObtain" and waitForAttribute(descendant, "LockID", nextRoomNumber) then
local hitbox = descendant:WaitForChild("Hitbox", 5)
local keyBase = hitbox and hitbox:WaitForChild("Key", 5)
if keyBase then
local hintAttachment = keyBase:WaitForChild("Attachment", 5)
local hintLight = hintAttachment and hintAttachment:WaitForChild("PointLight", 5)
if hintLight then
hintLight.Enabled = true
hintLight.Shadows = true
hintLight.Range = 60
hintLight.Brightness = 2
end
end
elseif MARK_GATE_LEVER and descendant.Name == "LeverForGate" then
guidingLight.Range = 60
guidingLight.Color = Color3.fromRGB(0, 255, 255)
guidingLight.Shadows = true
guidingLight.Parent = descendant:WaitForChild("Main", 5)
elseif MARK_HINT_BOOKS and descendant.Name == "LiveHintBook" then
guidingLight.Range = 20
guidingLight.Color = Color3.fromRGB(255, 0, 255)
guidingLight.Shadows = false
guidingLight.Parent = descendant:WaitForChild("Base", 5)
elseif MARK_ELEVATOR_BREAKER_POLES and isTheEnd and descendant.Name == "LiveBreakerPolePickup" then
local base = descendant:WaitForChild("Base", 5)
local hintAttachment = base and base:WaitForChild("Attachment", 5)
if hintAttachment then
local hintParticle = hintAttachment:WaitForChild("HintParticle", 5)
local hintLight = hintAttachment:WaitForChild("HintLight", 5)
if hintParticle then
hintParticle.Enabled = true
end
if hintLight then
hintLight.Enabled = true
end
end
end
end
if REMOVE_LIBRARY_DOOR and isLibrary then
task.wait()
local door = room:WaitForChild("Door", 60)
if door then
door:Destroy()
end
end
for _, descendant in ipairs(room:GetDescendants()) do
task.spawn(handleDescendant, descendant)
end
room.DescendantAdded:Connect(handleDescendant)
end
local function HandleLoot(prompt)
if not REMOVE_GREED_RISK then
return
end
if prompt.Name ~= "LootPrompt" or prompt.ActionText ~= "Collect" then
return
end
-- if this isn't done script won't be able to use holdbegan signal to prevent collecting
prompt.HoldDuration = 0.05
local holdBeganConnection
local ancestryChangedConnection
holdBeganConnection = prompt.PromptButtonHoldBegan:Connect(function(playerWhoTriggered)
if LocalPlayer ~= playerWhoTriggered or LocalPlayer:GetAttribute("Greed") ~= 6 or prompt.HoldDuration == 999999 then
return
end
prompt.HoldDuration = 999999
-- yield until greed level changes
LocalPlayer:GetAttributeChangedSignal("Greed"):Wait()
prompt.HoldDuration = 0.05
end)
ancestryChangedConnection = game.AncestryChanged:Connect(function()
if prompt:IsDescendantOf(CurrentRooms) then
return
end
-- prompt was removed from workspace; these connections will only take memory
holdBeganConnection:Disconnect()
ancestryChangedConnection:Disconnect()
holdBeganConnection = nil
ancestryChangedConnection = nil
end)
end
local function HandleEntities()
local entitiesFolder = ReplicatedStorage:WaitForChild("Entities", 5)
if not entitiesFolder then
return
end
if REMOVE_SCREECH then
local screechModel = entitiesFolder:WaitForChild("Screech", 5)
if not screechModel then
return
end
screechModel:Destroy()
end
end
local function HandleAmbience()
if not REMOVE_AMBIENCE_SOUNDS then
return
end
local ambience_dark = workspace:WaitForChild("Ambience_Dark", 5)
if ambience_dark then
ambience_dark.Volume = 0
end
local ambienceFolder = workspace:WaitForChild("Ambience", 5)
if not ambienceFolder then
return
end
for _, descendant in ipairs(ambienceFolder:GetDescendants()) do
if descendant.ClassName == "Sound" then
descendant.Volume = 0
end
end
end
local function HandleSpeedBoost()
if not SPEED_BOOST_ENABLED then
return
end
local function handleCharacter(character)
local humanoid = character:WaitForChild("Humanoid")
local updating = false
local function updateSpeedBoost()
if updating then
return
end
-- basic debounce
updating = true
humanoid:SetAttribute("SpeedBoostBehind", BOOST_EXTRA_WALKSPEED)
updating = false
end
humanoid:GetAttributeChangedSignal("SpeedBoostBehind"):Connect(updateSpeedBoost)
updateSpeedBoost()
end
-- on revive
LocalPlayer.CharacterAdded:Connect(handleCharacter)
handleCharacter(LocalPlayer.Character)
end
local function HandleGameEvents()
local function isValid(func)
return type(func) == "function" and islclosure(func) and not is_synapse_function(func)
end
local gc = getgc()
if REMOVE_LIGHT_SHATTER then
for _, value in pairs(gc) do
if isValid(value) then
local info = debug.getinfo(value)
if info.currentline == 14 and string.find(info.short_src, "Module_Events") then
local functionEnvironment = getfenv(value)
-- remove luau optimizations (thats necessary)
setuntouched(functionEnvironment, false)
-- overwrite spawn
functionEnvironment.spawn = function()end
break
end
end
end
end
end
local function HandleRemotes()
local entityInfo = ReplicatedStorage:WaitForChild("EntityInfo", 5)
if not entityInfo then
return
end
if REMOVE_EYES_DAMAGE then
local motorReplicationEvent = entityInfo:WaitForChild("MotorReplication", 5)
if not motorReplicationEvent then
return
end
local findFirstChild = game.FindFirstChild
local originalNC
originalNC = hookmetamethod(game, "__namecall", function(self, ...)
if self and rawequal(self, motorReplicationEvent) then
if findFirstChild(workspace, "Eyes") then
local function filter(x, y, ...) -- x, y, z, crouching
return x, -89 - math.random(), ...
end
return originalNC(self, filter(...))
end
end
return originalNC(self, ...)
end, true)
end
if COMPLETE_ELEVATOR_MINIGAME then
local engageMinigame = entityInfo:WaitForChild("EngageMinigame", 5)
local elevatorBreakerFinished = entityInfo:WaitForChild("EBF", 5)
if not engageMinigame or not elevatorBreakerFinished then
return
end
local minigameFunction
for _, connection in ipairs(getconnections(engageMinigame.OnClientEvent)) do
local func = connection.Function
if not func then
return -- ???
end
local minigame = debug.getupvalue(func, 1)
-- grab minigame func
if not minigameFunction and type(minigame) == "function" then
minigameFunction = minigame
end
connection:Disable()
end
-- create our own handler (i dont want to use hookfunction that much)
engageMinigame.OnClientEvent:Connect(function(minigame, ...)
if minigame == "ElevatorBreaker" then
task.wait(20)
-- mark as completed
elevatorBreakerFinished:FireServer()
return
end
if not minigameFunction then
return
end
task.spawn(minigameFunction, minigame, ...)
end)
end
end
local function SetUp()
workspace.ChildAdded:Connect(HandleModels)
for _, child in ipairs(workspace:GetChildren()) do
task.spawn(HandleModels, child)
end
--
CurrentRooms.ChildAdded:Connect(HandleRooms)
for _, room in ipairs(CurrentRooms:GetChildren()) do
task.spawn(HandleRooms, room)
end
--
game.DescendantAdded:Connect(HandleLoot)
for _, descendant in ipairs(game:GetDescendants()) do
task.spawn(HandleLoot, descendant)
end
--
task.spawn(HandleEntities)
task.spawn(HandleAmbience)
task.spawn(HandleSpeedBoost)
task.spawn(HandleGameEvents)
task.spawn(HandleRemotes)
end
SetUp()
Doors super hard mode script - Pastebin.com (2024)
References
- https://pastebin.com/tufDF1vi
- https://www.ginx.tv/en/roblox/doors-super-hard-mode
- https://komponentenpc.com/wie-man-den-super-hard-modus-in-doors-schlaegt-best-guide/
- https://pastebin.com/8M9WjLKu
- https://pastebin.com/Qhc1BC8P
Top Articles
Vegan Croissants Recipe (Homemade From Scratch) | Aline Made
Easy Gluhwein Recipe (German Mulled Wine)
Antananarivo and around | Madagascar Travel Guide
Dairy Queen Menu & Prices – Menu Price
Farm & Garden near Hermiston, OR - craigslist
LEVEL 52 CODM ACCOUNT WITH 50 EPIC WEAPON SKINS AND CHARACTER SKI... | ID 212345969 | PlayerAuctions
Tower Of Babble: Nonnative Speakers Navigate The World Of 'Good' And 'Bad' English
Family Dollar Pedialyte
My Memoirs of the Civil War: The Louisa May Alcott's Collection: Including Letters, Hospital Sketches & Biography of the Author - Ebook - Louisa May Alcott - ISBN 9788075839183 - Storytel
Delphi Complete Works of Louisa May Alcott (Illustrated)
O&R Working to Restore Power After Strong Winds Cause Outages
O&R Restoring Service to Customers Who Lost Power in Thunderstorm
Latest Posts
Article information
Author: Gregorio Kreiger
Last Updated:
Views: 5824
Rating: 4.7 / 5 (57 voted)
Reviews: 80% of readers found this page helpful
Author information
Name: Gregorio Kreiger
Birthday: 1994-12-18
Address: 89212 Tracey Ramp, Sunside, MT 08453-0951
Phone: +9014805370218
Job: Customer Designer
Hobby: Mountain biking, Orienteering, Hiking, Sewing, Backpacking, Mushroom hunting, Backpacking
Introduction: My name is Gregorio Kreiger, I am a tender, brainy, enthusiastic, combative, agreeable, gentle, gentle person who loves writing and wants to share my knowledge and understanding with you.