--[[ WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk! ]] local Workspace = game:GetService("Workspace") local RunService = game:GetService("RunService") local npcFolder = Workspace:WaitForChild("NPCFolders") local enemyFolder = npcFolder:WaitForChild("EnemyFolder") local projectileFolder = Workspace:WaitForChild("Projectile") local block local timerRemaining = 0 local UNFREEZE_TIMER = 0.8 local isActive = false local frozen = {} local function createBlock() if block and block.Parent then return block end block = Instance.new("Part") block.Name = "Block of Doom" block.Anchored = true block.CanCollide = false block.CanTouch = false block.CanQuery = false block.Transparency = 1 block.Size = Vector3.new(6, 6, 6) block.CFrame = CFrame.new(0, -0.250244379, 1.2336266) block.Parent = Workspace return block end local function getOffset(index) local perLayer = 5 local layer = math.floor((index - 1) / perLayer) local pos = (index - 1) % perLayer local angle = (pos / perLayer) * math.pi * 2 local horizontalRadius = 0.22 local x = math.cos(angle) * horizontalRadius local z = math.sin(angle) * horizontalRadius local y = layer * 2.5 return Vector3.new(x, y, z) end local function teleportAllFists() if not block or not block.Parent then return end for _, v in ipairs(projectileFolder:GetChildren()) do if v:IsA("BasePart") and v.Name == "StoneFist" or v.Name == "Teapot" or v.Name == "FireTeapot" then v.CFrame = block.CFrame v.AssemblyLinearVelocity = Vector3.zero v.AssemblyAngularVelocity = Vector3.zero end end end local function gatherEnemies() if not block or not block.Parent then return end local enemies = {} for _, npc in ipairs(enemyFolder:GetChildren()) do local root = npc:FindFirstChild("HumanoidRootPart") local hum = npc:FindFirstChildOfClass("Humanoid") if root and hum and hum.Health > 0 then table.insert(enemies, npc) end end for i, npc in ipairs(enemies) do local root = npc:FindFirstChild("HumanoidRootPart") if not root then continue end if not frozen[npc] then frozen[npc] = root.CFrame end root.CFrame = block.CFrame * CFrame.new(getOffset(i)) root.AssemblyLinearVelocity = Vector3.zero root.AssemblyAngularVelocity = Vector3.zero end end local function releaseEnemies() for npc, originalCFrame in pairs(frozen) do if npc and npc.Parent then local root = npc:FindFirstChild("HumanoidRootPart") if root then root.CFrame = originalCFrame root.AssemblyLinearVelocity = Vector3.zero root.AssemblyAngularVelocity = Vector3.zero end end end table.clear(frozen) end local function activate() createBlock() timerRemaining = UNFREEZE_TIMER isActive = true end for _, v in ipairs(projectileFolder:GetChildren()) do if v.Name == "StoneFist" or v.Name == "Teapot" or v.Name == "FireTeapot" then activate() end end projectileFolder.ChildAdded:Connect(function(child) if child.Name == "StoneFist" or child.Name == "Teapot" or child.Name == "FireTeapot" then activate() end end) RunService.Heartbeat:Connect(function(dt) if not isActive then return end timerRemaining -= dt teleportAllFists() gatherEnemies() if timerRemaining <= 0 then releaseEnemies() isActive = false timerRemaining = 0 end end) script.AncestryChanged:Connect(function(_, parent) if parent == nil then releaseEnemies() if block and block.Parent then block:Destroy() end end end)