--!native --!optimize 2 if not game:IsLoaded() then game.Loaded:Wait() end local ui = script.Parent local ReplicatedStorage = game:GetService("ReplicatedStorage") local PlacementState = require(ReplicatedStorage.Shared.PlacementState) local objects = ReplicatedStorage:WaitForChild("Objects", 9e9) objects:WaitForChild("MLLoaded", 9e9) objects:WaitForChild("CSMLLoaded", 9e9) local clientReady = ReplicatedStorage.Objects:WaitForChild("ClientReady", 5) if clientReady and not clientReady.Value then clientReady:GetPropertyChangedSignal("Value"):Wait() end local cd = ReplicatedStorage.Objects.ChunkDebug:Clone() local sky = ReplicatedStorage.Objects.Sky:Clone() local base = ReplicatedStorage.Objects.FakeBaseplate:Clone() cd.Parent = game:GetService("Workspace"):FindFirstChildOfClass("Terrain") sky.Parent = game:GetService("Workspace"):FindFirstChildOfClass("Terrain") base.Parent = game:GetService("Workspace"):FindFirstChildOfClass("Terrain") game:GetService("RunService").RenderStepped:Connect(function(dt) local fps = math.round(1/dt) pcall(function() -- pos in chunks of 32 studs of char local pos = game:GetService("Players").LocalPlayer.Character:GetPivot() local chunk = { x = math.round(pos.X/32), y = math.round(pos.Y/32), z = math.round(pos.Z/32) } if math.abs(chunk.x) == 0 then chunk.x = 0 end if math.abs(chunk.y) == 0 then chunk.y = 0 end if math.abs(chunk.z) == 0 then chunk.z = 0 end local bpos = { x = math.round(pos.X/4), y = math.round(pos.Y/4), z = math.round(pos.Z/4) } if math.abs(bpos.x) == 0 then bpos.x = 0 end if math.abs(bpos.y) == 0 then bpos.y = 0 end if math.abs(bpos.z) == 0 then bpos.z = 0 end sky.CFrame = pos local selected = PlacementState:GetSelected() ui.DebugUpperText.Text = `Chunk {chunk.x} {chunk.y} {chunk.z}\nPos {bpos.x} {bpos.y} {bpos.z}\nSel {selected}\n{fps} FPS` cd:PivotTo(CFrame.new( chunk.x*32, chunk.y*32, chunk.z*32 )) base.CFrame = CFrame.new( chunk.x*32, -24, chunk.z*32 ) end) end)