Run it
Copy the script and paste it into your executor.
P = :().LocalPlayer
CFG = .({ PLACE = , WAIT = , SETTLE = , ACK = , FLOOR_TIMEOUT = , FINAL_TIMEOUT = , SEARCH_LIMIT = , ROTATIONS = , MAX_ATTEMPTS = , HEIGHT = })
(.PlaceId == CFG.PLACE, )
RS = :()
Tags = :()
Http = :()
E = ()
E.PersonalHollowFloors E.PersonalHollowFloors.()
names = { , , , , , , , , }
state = { phase = , floor = , stopped = , paused = , completed = {}, finaleComplete = , = }
worker: thread? =
panel: TextButton? =
gui = .()
gui.Name =
gui.ResetOnSpawn =
gui.Parent = P.PlayerGui
label = .()
label.Size = .(, )
label.Position = .(, )
label.TextWrapped =
label.BackgroundColor3 = .(, , )
label.TextColor3 = .(, , )
label.Parent = gui
panel = label
()
_, key { , }
h = E[key]
h h.Stop h.()
h (h.thread) == h.thread ~= .() .(h.thread) == .(h.thread)
(message: )
state.phase = message
panel panel.Text = .. message .. .. state.floor ..
(, state.floor, message)
connection: RBXScriptConnection? =
()
state.stopped =
()
worker worker ~= .() .(worker) == .(worker)
connection connection:(); connection =
gui:()
panel =
()
( state.stopped, )
(:():(), )
state.paused .(CFG.WAIT); ( state.stopped, )
h = P.Character P.Character:()
(h h.Health > , )
(predicate, timeout: number?)
untilTime = .() + (timeout CFG.ACK)
(); () ; .(CFG.WAIT) .() > untilTime
( .. state.phase)
()
(RS:(, )).()
(pos: , look: ?)
()
c = ()
(c, )
c:(pos, look .(, , -))
.(CFG.SETTLE)
()
(name: , ...)
()
r = RS.Remotes:(name)
(r r:(), .. name)
r:(...)
(name: ): boolean
.(Http:(P.PlayerGui.Data.SolvedPuzzles.Value), name) ~=
(tag: )
Tags:(tag)[]
(name: ?)
exit =
(() exit = (); exit ~= )
((exit.CFrame * .(, , )).Position, exit.CFrame.LookVector)
destination = exit.ExitMaze:()
((destination) == , )
(destination.Position, destination.LookVector)
name (() (name) )
(floor: number)
P:() == floor (floor == P:())
P:() ()
entrance =
_, v :() v.Name == v:() entrance = v;
entrance
(.(, , -))
(()
_, v :() v.Name == v:() entrance = v;
)
((entrance.CFrame * .(, , )).Position, entrance.CFrame.LookVector)
= entrance.EnterMaze:(floor)
(() == , )
(( * .(, , )).Position, .LookVector)
(() P:() == floor (floor == P:()) )
(floor: number)
room =
(()
_, v :()
v:() v.Name:(, ) == .(v:().Position.Z - floor * ) < room = v;
)
(room:().Position + .(, CFG.HEIGHT, ))
.(CFG.SETTLE)
room
(test)
_, v () (v) == (v) v
(source: , key: , name: )
((source))()
(()
h = E[key]
h h.state h.state.phase == ( .. name)
(name)
, CFG.FLOOR_TIMEOUT)
()
()
records = {}
graves = Tags:()
(#graves > , )
_, grave graves
(grave.Position + .(, , ))
key = (RS.SharedModules.TombRoster).(grave)
record = (, key)
record .(CFG.SETTLE); record = (, key)
((record) == , )
.(records, record)
.(records, (a, b) a.Death - a.Birth < b.Death - b.Birth )
chest = ()
(chest, )
(chest:().Position + .(, , ))
answer = {}
slots = ().Slots
i = , slots answer[i] = records[i].Icon
((, answer).Result == , )
()
b =
(() b = ((v) (v, ) (v, ) (v, ) ); b ~= )
(b.startPlatform.Position + .(, CFG.HEIGHT, ))
(() b.state == , CFG.ACK * )
_, i b.path
(b.state == , )
(b.tiles[i].Rest.Position + .(, CFG.HEIGHT, ))
(b.endPlatform.Position + .(, CFG.HEIGHT, ))
(() ().Solved == )
(room)
object =
(()
_, v room:() v:() v:() object = v;
)
beam = (RS.ClientModules.ReleasedPuzzles.LightMirror.LightBeam)
layout = beam.(object)
rp = RaycastParams.()
rp.FilterType = .RaycastFilterType.Include
rp.FilterDescendantsInstances = { layout.Blockers }
yaws, plan = {}, {}
nodes =
()
nodes +=
nodes > CFG.SEARCH_LIMIT
trace = beam.(layout, yaws, rp)
trace.Complete
trace.Unknown
i = trace.Unknown
t = , CFG.ROTATIONS -
plan[i] = t; yaws[i] = beam.(layout.Mirrors[i], t)
()
plan[i] = ; yaws[i] =
((), )
current = ()
i, target plan
(layout.Mirrors[i].Base.Position + .(, , ))
_ = , (target - current.Turns[i]) % CFG.ROTATIONS
current.Turns = (, i)
((current.Turns) == , )
.(CFG.WAIT)
.(CFG.SETTLE)
(() == , )
(().Solved == , )
()
recipe = ()
mouth =
(() v = ((t) (t, ) (t, ) ); mouth = v v.mouthPart; mouth ~= )
step = recipe.Step + , #recipe.Recipe
key =
k, color recipe.Pads color == recipe.Recipe[step] key = k;
(key, )
xyz = .(key, )
(.((xyz[]), (xyz[]) + CFG.HEIGHT, (xyz[])))
((, key) == , )
(mouth.Position + .(, , ))
result = ()
((result) == result.Correct, )
(().Solved, )
()
brazier = ()
(brazier, )
(brazier.Position + .(, , ))
brazier.LightRemote:()
torch =
(() torch = P.Backpack:() P.Character:(); torch ~= )
P.Character:():(torch)
(() torch:() == )
count =
_, v Tags:()
v:((P.UserId))
count +=
v:( .. P.UserId) (v.Position + .(, , )); (v.LightRemote:(), )
(count > , )
()
s = ()
altar = ()
(altar, )
key, item s.Needs
s.Placed[key]
pad =
_, v Tags:() (v:((P.UserId))) == key pad = v;
(pad, )
(altar.Position + .(, , ))
((, item) == , )
(pad.Position + .(, , ))
((, key) == , )
(().Solved, )
()
s = ()
i = s.Opened + , #s.Walls
wanted = s.Walls[i]
key =
k, icon s.Levers icon == wanted key = k;
lever = ((v) (v, ) == wanted ((v, )) == key (v, ) )
(lever, )
(lever.adornee.Position + .(, , ))
((, key).Correct, )
relic = ((v) (v, ) (v, ) v.prompt.ActionText == )
(relic, )
(relic.adornee.Position + .(, , ))
(() == , )
(().Solved, )
()
P.PlayerGui.Data.FinaleComplete.Value state.finaleComplete = ; ();
state.floor =
()
deadline = .() + CFG.FINAL_TIMEOUT
lastIndex, stale = -,
.() < deadline
()
P.PlayerGui.Data.FinaleComplete.Value state.finaleComplete = ;
obj = ()
((obj) == , )
( .. (obj.text))
obj.index == lastIndex stale += stale =
lastIndex = obj.index
(stale < CFG.MAX_ATTEMPTS + , )
obj.index ==
gate = .FinaleZone:()
(gate gate.CanCollide == , )
portal = ()
(portal, )
(portal.Position, portal.CFrame.LookVector)
RS.Remotes.FinalExitEnter:(portal)
(() P.PlayerGui.Data.FinaleComplete.Value )
_, v .FinaleZone:()
v:() (v.Name == v.Name == ) v.CanCollide ()
section = obj.index <= obj.index obj.index -
portal =
(()
_, v Tags:() v:() == .. section v:() portal = v;
)
(portal.WindowPortalTrigger.Position, portal.CFrame.LookVector)
(() ().index ~= obj.index )
()
controller = { state = state, Stop = stop }
E.PersonalHollowFloors = controller
controller.Pause = () state.paused = ; (); ()
controller.Resume = ()
()
((E.PersonalHollowFloorsSource) == , )
((E.PersonalHollowFloorsSource))()
connection = label.Activated:(() state.paused controller.() controller.() )
worker = .(()
ok, err = (()
E.TzarEventCluster E.TzarEventCluster.Pause E.TzarEventCluster.()
()
P:() (() P:() ~= , CFG.FINAL_TIMEOUT)
floor, name names
state.floor = floor
(name) state.completed[floor] = ; (name .. );
done =
issue =
attempt = , CFG.MAX_ATTEMPTS
()
(name .. .. attempt)
success, message = (()
(floor)
floor == (MAZE_SOURCE, , name);
floor == (PILLAR_SOURCE, , name);
room = (floor)
floor == () floor == () floor == (room) floor == () floor == () floor == () floor == ()
(() P:() == )
(name)
)
()
success (name) done = ;
issue = (message)
state.stopped
deadline = .() + CFG.ACK
.(CFG.WAIT) (P.Character P.Character:() P.Character:().Health > ) .() > deadline
(done, name .. .. issue)
state.completed[floor] =
(name .. )
_, name names ((name), .. name)
(P.PlayerGui.Data.FinaleComplete.Value, )
state.finaleComplete =
state.serverProof = { userId = P.UserId, solvedPuzzles = Http:(P.PlayerGui.Data.SolvedPuzzles.Value), completedFloors = P:(), finaleComplete = }
()
(, Http:(state.serverProof))
, debug.traceback)
()
ok state.stopped state.error = (err); ( .. (err)); (, err)
)
controller.thread = workerOne script for The Hollow floors 1–9 and the finale. Skips saved floors, checks server progress, and includes pause/resume, stop controls, and limited retries.

The Hollow