local Players = game:GetService("Players") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") local glyphs = { A = {" ### ","# #","# #","#####","# #","# #","# #"}, B = {"#### ","# #","# #","#### ","# #","# #","#### "}, C = {" ####","# ","# ","# ","# ","# "," ####"}, D = {"#### ","# #","# #","# #","# #","# #","#### "}, E = {"#####","# ","# ","#### ","# ","# ","#####"}, F = {"#####","# ","# ","#### ","# ","# ","# "}, G = {" ####","# ","# ","# ##","# #","# #"," ####"}, H = {"# #","# #","# #","#####","# #","# #","# #"}, I = {"#####"," # "," # "," # "," # "," # ","#####"}, J = {"#####"," #"," #"," #"," #","# #"," ### "}, K = {"# #","# # ","# # ","## ","# # ","# # ","# #"}, L = {"# ","# ","# ","# ","# ","# ","#####"}, M = {"# #","## ##","# # #","# # #","# #","# #","# #"}, N = {"# #","## #","# # #","# ##","# #","# #","# #"}, O = {" ### ","# #","# #","# #","# #","# #"," ### "}, P = {"#### ","# #","# #","#### ","# ","# ","# "}, Q = {" ### ","# #","# #","# #","# # #","# # "," ## #"}, R = {"#### ","# #","# #","#### ","# # ","# # ","# #"}, S = {" ####","# ","# "," ### "," #"," #","#### "}, T = {"#####"," # "," # "," # "," # "," # "," # "}, U = {"# #","# #","# #","# #","# #","# #"," ### "}, V = {"# #","# #","# #","# #","# #"," # # "," # "}, W = {"# #","# #","# #","# # #","# # #","## ##","# #"}, X = {"# #","# #"," # # "," # "," # # ","# #","# #"}, Y = {"# #","# #"," # # "," # "," # "," # "," # "}, Z = {"#####"," #"," # "," # "," # ","# ","#####"}, ["0"] = {" ### ","# #","# ##","# # #","## #","# #"," ### "}, ["1"] = {" # "," ## "," # "," # "," # "," # "," ### "}, ["2"] = {" ### ","# #"," #"," # "," # "," # ","#####"}, ["3"] = {"#### "," #"," #"," ### "," #"," #","#### "}, ["4"] = {" # "," ## "," # # ","# # ","#####"," # "," # "}, ["5"] = {"#####","# ","#### "," #"," #","# #"," ### "}, ["6"] = {" ### ","# ","# ","#### ","# #","# #"," ### "}, ["7"] = {"#####"," #"," # "," # "," # "," # "," # "}, ["8"] = {" ### ","# #","# #"," ### ","# #","# #"," ### "}, ["9"] = {" ### ","# #","# #"," ####"," #"," #"," ### "}, [" "] = {" "," "," "," "," "," "," "}, } local builtModels = {} local screenGui = Instance.new("ScreenGui") screenGui.Name = "TextBlockBuilderGui" screenGui.ResetOnSpawn = false screenGui.Parent = playerGui local frame = Instance.new("Frame") frame.Name = "MainFrame" frame.Size = UDim2.new(0, 300, 0, 230) frame.Position = UDim2.new(0, 20, 0.5, -115) frame.BackgroundColor3 = Color3.fromRGB(30, 30, 35) frame.BorderSizePixel = 0 frame.Active = true frame.Draggable = true frame.Parent = screenGui local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 8) corner.Parent = frame local title = Instance.new("TextLabel") title.Size = UDim2.new(1, 0, 0, 36) title.BackgroundTransparency = 1 title.Text = "F3X Text Blocks" title.TextColor3 = Color3.fromRGB(255, 255, 255) title.Font = Enum.Font.GothamBold title.TextSize = 20 title.Parent = frame local function makeBox(name, y, placeholder, text) local box = Instance.new("TextBox") box.Name = name box.Size = UDim2.new(1, -30, 0, 36) box.Position = UDim2.new(0, 15, 0, y) box.BackgroundColor3 = Color3.fromRGB(50, 50, 58) box.TextColor3 = Color3.fromRGB(255, 255, 255) box.PlaceholderText = placeholder box.PlaceholderColor3 = Color3.fromRGB(150, 150, 150) box.Text = text box.ClearTextOnFocus = false box.Font = Enum.Font.Gotham box.TextSize = 16 box.Parent = frame local c = Instance.new("UICorner") c.CornerRadius = UDim.new(0, 6) c.Parent = box return box end local textInput = makeBox("TextInput", 44, "Type text here...", "") local sizeInput = makeBox("BlockSize", 88, "Block size (studs)", "1") local function makeButton(name, x, y, w, text, color) local btn = Instance.new("TextButton") btn.Name = name btn.Size = UDim2.new(0, w, 0, 36) btn.Position = UDim2.new(0, x, 0, y) btn.BackgroundColor3 = color btn.TextColor3 = Color3.fromRGB(255, 255, 255) btn.Text = text btn.Font = Enum.Font.GothamBold btn.TextSize = 16 btn.AutoButtonColor = true btn.Parent = frame local c = Instance.new("UICorner") c.CornerRadius = UDim.new(0, 6) c.Parent = btn return btn end local buildBtn = makeButton("BuildButton", 15, 136, 270, "BUILD TEXT", Color3.fromRGB(0, 140, 80)) local undoBtn = makeButton("UndoButton", 15, 180, 130, "UNDO", Color3.fromRGB(180, 130, 0)) local clearBtn = makeButton("ClearButton", 155, 180, 130, "CLEAR ALL", Color3.fromRGB(170, 40, 40)) local status = Instance.new("TextLabel") status.Size = UDim2.new(1, -30, 0, 20) status.Position = UDim2.new(0, 15, 0, 220) status.BackgroundTransparency = 1 status.Text = "Ready" status.TextColor3 = Color3.fromRGB(180, 180, 180) status.Font = Enum.Font.Gotham status.TextSize = 13 status.TextXAlignment = Enum.TextXAlignment.Left status.Parent = frame local function getRoot() local character = player.Character return character and character:FindFirstChild("HumanoidRootPart") end local function buildText() local root = getRoot() if not root then status.Text = "No character found" return end local text = string.upper(textInput.Text) if #text == 0 then status.Text = "Enter some text first" return end local size = math.clamp(tonumber(sizeInput.Text) or 1, 0.2, 10) local look = root.CFrame.LookVector local origin = root.Position + look * 12 + Vector3.new(0, 4, 0) local base = CFrame.lookAt(origin, origin + look) local model = Instance.new("Model") model.Name = "TextBlocks_" .. text local blockCount = 0 local totalCols = #text * 6 - 1 local startX = -((totalCols - 1) / 2) * size for i = 1, #text do local ch = string.sub(text, i, i) local glyph = glyphs[ch] if glyph then local colOffset = (i - 1) * 6 local hue = (i - 1) / math.max(#text, 1) local color = Color3.fromHSV(hue, 0.6, 1) for row = 1, 7 do local line = glyph[row] for col = 1, 5 do if string.sub(line, col, col) == "#" then local x = startX + (colOffset + col - 1) * size local y = (7 - row) * size local part = Instance.new("Part") part.Size = Vector3.new(size, size, size) part.Anchored = true part.CanCollide = true part.Material = Enum.Material.SmoothPlastic part.Color = color part.TopSurface = Enum.SurfaceType.Smooth part.BottomSurface = Enum.SurfaceType.Smooth part.CFrame = base * CFrame.new(x, y, 0) part.Parent = model blockCount += 1 end end end end end if blockCount == 0 then model:Destroy() status.Text = "No supported characters (A-Z, 0-9)" return end model.Parent = workspace table.insert(builtModels, model) status.Text = "Built " .. blockCount .. " blocks" end buildBtn.MouseButton1Click:Connect(buildText) undoBtn.MouseButton1Click:Connect(function() local last = table.remove(builtModels) if last then last:Destroy() status.Text = "Undid last build" else status.Text = "Nothing to undo" end end) clearBtn.MouseButton1Click:Connect(function() for _, model in ipairs(builtModels) do model:Destroy() end table.clear(builtModels) status.Text = "Cleared all text" end)