-- SONIC + TAILS + KNUCKLES: character select screen. Pick a character, tap OK. (Run this one file; run it again to pick someone else.) -- decoder: base64 + inflate (raw deflate), written without bit operators local pow2 = {} for i = 0, 40 do pow2[i] = 2 ^ i end local B64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" local B64MAP = {} for i = 1, 64 do B64MAP[string.byte(B64, i)] = i - 1 end local function b64decode(str) local out, n, buf, cnt = {}, 0, 0, 0 for i = 1, #str do local v = B64MAP[string.byte(str, i)] if v then buf = buf * 64 + v cnt = cnt + 6 if cnt >= 8 then cnt = cnt - 8 local d = pow2[cnt] n = n + 1 out[n] = math.floor(buf / d) buf = buf % d end end end local parts = {} for i = 1, n, 1500 do parts[#parts + 1] = string.char(table.unpack(out, i, math.min(i + 1499, n))) end return table.concat(parts) end local LBASE = {3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258} local LEXT = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0} local DBASE = {1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577} local DEXT = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13} local ORDER = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15} local function build(lengths, start, n) local count = {} for i = 0, 15 do count[i] = 0 end for s = 0, n - 1 do local l = lengths[start + s] count[l] = count[l] + 1 end local offs = {} offs[1] = 0 for l = 1, 14 do offs[l + 1] = offs[l] + count[l] end local symbol = {} for s = 0, n - 1 do local l = lengths[start + s] if l ~= 0 then symbol[offs[l]] = s offs[l] = offs[l] + 1 end end return {count = count, symbol = symbol} end local function inflate(src) local pos, bitbuf, bitcnt = 1, 0, 0 local out, outn = {}, 0 local function bits(need) local val = bitbuf while bitcnt < need do val = val + string.byte(src, pos) * pow2[bitcnt] pos = pos + 1 bitcnt = bitcnt + 8 end bitbuf = math.floor(val / pow2[need]) bitcnt = bitcnt - need return val % pow2[need] end local function decode(h) local code, first, index = 0, 0, 0 for len = 1, 15 do code = code + bits(1) local count = h.count[len] if code - count < first then return h.symbol[index + (code - first)] end index = index + count first = (first + count) * 2 code = code * 2 end error("bad code") end local function codes(lencode, distcode) while true do local sym = decode(lencode) if sym < 256 then outn = outn + 1 out[outn] = sym elseif sym == 256 then return else sym = sym - 257 local len = LBASE[sym + 1] + bits(LEXT[sym + 1]) local ds = decode(distcode) local dist = DBASE[ds + 1] + bits(DEXT[ds + 1]) for _ = 1, len do outn = outn + 1 out[outn] = out[outn - dist] end end end end local fixedLen, fixedDist repeat local last = bits(1) local btype = bits(2) if btype == 0 then bitbuf, bitcnt = 0, 0 local len = string.byte(src, pos) + string.byte(src, pos + 1) * 256 pos = pos + 4 for i = 0, len - 1 do outn = outn + 1 out[outn] = string.byte(src, pos + i) end pos = pos + len elseif btype == 1 then if not fixedLen then local l = {} for i = 0, 143 do l[i] = 8 end for i = 144, 255 do l[i] = 9 end for i = 256, 279 do l[i] = 7 end for i = 280, 287 do l[i] = 8 end fixedLen = build(l, 0, 288) local d = {} for i = 0, 29 do d[i] = 5 end fixedDist = build(d, 0, 30) end codes(fixedLen, fixedDist) else local nlen = bits(5) + 257 local ndist = bits(5) + 1 local ncode = bits(4) + 4 local lengths = {} for i = 0, 18 do lengths[i] = 0 end for i = 1, ncode do lengths[ORDER[i]] = bits(3) end local lencode = build(lengths, 0, 19) lengths = {} local idx = 0 while idx < nlen + ndist do local sym = decode(lencode) if sym < 16 then lengths[idx] = sym idx = idx + 1 else local len, rep = 0, 0 if sym == 16 then len = lengths[idx - 1] rep = 3 + bits(2) elseif sym == 17 then rep = 3 + bits(3) else rep = 11 + bits(7) end for _ = 1, rep do lengths[idx] = len idx = idx + 1 end end end codes(build(lengths, 0, nlen), build(lengths, nlen, ndist)) end until last == 1 local parts = {} for i = 1, outn, 1500 do parts[#parts + 1] = string.char(table.unpack(out, i, math.min(i + 1499, outn))) end return table.concat(parts) end local SONIC_B64 = [==[ 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 ]==] local TAILS_B64 = [==[ 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 ]==] local KNUCKLES_B64 = [==[ 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 ]==] -- ---------- character select screen (Sonic Origins style) ---------- local Players = game:GetService("Players") local TweenService = game:GetService("TweenService") local RunService = game:GetService("RunService") local lp = Players.LocalPlayer local gui = Instance.new("ScreenGui") gui.Name = "SonicCharacterSelect" gui.ResetOnSpawn = false gui.IgnoreGuiInset = true gui.DisplayOrder = 100 local placed = pcall(function() gui.Parent = (gethui and gethui()) or game:GetService("CoreGui") end) if not placed then gui.Parent = lp:WaitForChild("PlayerGui") end local BLOBS = {sonic = SONIC_B64, tails = TAILS_B64, knuckles = KNUCKLES_B64} local conns = {} local launched = false local function launch(which) if launched then return end launched = true for _, c in ipairs(conns) do c:Disconnect() end gui:Destroy() local ok, src = pcall(function() return inflate(b64decode(BLOBS[which])) end) if not ok then print("[Select] could not unpack: " .. tostring(src)) return end local run = loadstring or load local fn, err = run(src) if not fn then print("[Select] could not start: " .. tostring(err)) return end local okRun, e = pcall(fn) if not okRun then print("[Select] error: " .. tostring(e)) end end -- small drawing helper: rounded / rotated boxes for the portraits and background local function box(parent, w, h, x, y, color, round, rot, z) local f = Instance.new("Frame") f.AnchorPoint = Vector2.new(0.5, 0.5) f.Size = UDim2.fromOffset(w, h) f.Position = UDim2.fromOffset(x, y) f.BackgroundColor3 = color f.BorderSizePixel = 0 f.Rotation = rot or 0 f.ZIndex = z or 2 if round then local c = Instance.new("UICorner") c.CornerRadius = UDim.new(round, 0) c.Parent = f end f.Parent = parent return f end -- ---------- background: blue sky, drifting clouds, scrolling sea ---------- local bg = Instance.new("Frame") bg.Size = UDim2.fromScale(1, 1) bg.BackgroundColor3 = Color3.new(1, 1, 1) bg.BorderSizePixel = 0 bg.Parent = gui local bgGrad = Instance.new("UIGradient") bgGrad.Rotation = 90 bgGrad.Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, Color3.fromRGB(70, 140, 255)), ColorSequenceKeypoint.new(0.6, Color3.fromRGB(20, 50, 190)), ColorSequenceKeypoint.new(0.62, Color3.fromRGB(10, 25, 150)), ColorSequenceKeypoint.new(1, Color3.fromRGB(5, 15, 110)), }) bgGrad.Parent = bg local clouds, stripes = {}, {} for i = 1, 7 do local c = Instance.new("Frame") c.AnchorPoint = Vector2.new(0.5, 0.5) c.Size = UDim2.fromOffset(70 + (i * 37) % 60, 18 + (i * 7) % 10) c.BackgroundColor3 = Color3.new(1, 1, 1) c.BackgroundTransparency = 0.1 c.BorderSizePixel = 0 c.Parent = bg local cc = Instance.new("UICorner") cc.CornerRadius = UDim.new(1, 0) cc.Parent = c table.insert(clouds, {f = c, x = (i * 0.17) % 1.1, y = 0.08 + ((i * 0.13) % 0.4), s = 0.01 + i * 0.002}) end for i = 1, 16 do local s = Instance.new("Frame") s.AnchorPoint = Vector2.new(0.5, 0.5) s.Size = UDim2.fromOffset(40 + (i * 29) % 90, 3) s.BackgroundColor3 = Color3.fromRGB(150, 190, 255) s.BackgroundTransparency = 0.45 s.BorderSizePixel = 0 s.Parent = bg table.insert(stripes, {f = s, x = (i * 0.23) % 1.2, y = 0.66 + ((i * 0.047) % 0.32), s = 0.03 + (i % 4) * 0.012}) end table.insert(conns, RunService.RenderStepped:Connect(function(dt) for _, c in ipairs(clouds) do c.x = c.x - c.s * dt if c.x < -0.1 then c.x = 1.1 end c.f.Position = UDim2.fromScale(c.x, c.y) end for _, s in ipairs(stripes) do s.x = s.x - s.s * dt if s.x < -0.1 then s.x = 1.1 end s.f.Position = UDim2.fromScale(s.x, s.y) end end)) -- ---------- the panel ---------- local panelShadow = Instance.new("Frame") panelShadow.AnchorPoint = Vector2.new(0.5, 0.5) panelShadow.Size = UDim2.fromOffset(620, 306) panelShadow.Position = UDim2.new(0.5, 6, 0.5, 8) panelShadow.BackgroundColor3 = Color3.fromRGB(0, 0, 40) panelShadow.BackgroundTransparency = 0.5 panelShadow.BorderSizePixel = 0 panelShadow.ZIndex = 2 panelShadow.Parent = gui local psc = Instance.new("UICorner") psc.CornerRadius = UDim.new(0, 16) psc.Parent = panelShadow local panel = Instance.new("Frame") panel.AnchorPoint = Vector2.new(0.5, 0.5) panel.Size = UDim2.fromOffset(620, 306) panel.Position = UDim2.new(0.5, 0, 0.5, 0) panel.BackgroundColor3 = Color3.new(1, 1, 1) panel.BorderSizePixel = 0 panel.ZIndex = 3 panel.Parent = gui local pc = Instance.new("UICorner") pc.CornerRadius = UDim.new(0, 16) pc.Parent = panel local pg = Instance.new("UIGradient") pg.Rotation = 90 pg.Color = ColorSequence.new(Color3.fromRGB(250, 251, 255), Color3.fromRGB(205, 212, 226)) pg.Parent = panel local pst = Instance.new("UIStroke") pst.Color = Color3.new(1, 1, 1) pst.Thickness = 4 pst.ApplyStrokeMode = Enum.ApplyStrokeMode.Border pst.Parent = panel local title = Instance.new("TextLabel") title.Size = UDim2.new(1, 0, 0, 40) title.Position = UDim2.fromOffset(0, 6) title.BackgroundTransparency = 1 title.Font = Enum.Font.GothamBlack title.TextSize = 24 title.TextColor3 = Color3.fromRGB(15, 35, 120) title.Text = "CHARACTER SELECT" title.ZIndex = 4 title.Parent = panel -- ---------- portraits (drawn with shapes) ---------- local BLUE, PEACH = Color3.fromRGB(30, 100, 240), Color3.fromRGB(255, 215, 170) local ORANGE, RED = Color3.fromRGB(255, 150, 25), Color3.fromRGB(225, 40, 45) local WHITE, BLACK = Color3.new(1, 1, 1), Color3.new(0, 0, 0) local function eyes(p, y, pupil) box(p, 20, 26, 40, y, WHITE, 1, 0, 4) box(p, 20, 26, 60, y, WHITE, 1, 0, 4) box(p, 8, 14, 42, y + 2, pupil, 1, 0, 5) box(p, 8, 14, 58, y + 2, pupil, 1, 0, 5) end local function sonic(p) box(p, 46, 18, 22, 46, BLUE, 0.5, -28, 2) box(p, 48, 18, 16, 68, BLUE, 0.5, -8, 2) box(p, 46, 18, 22, 90, BLUE, 0.5, 14, 2) box(p, 16, 24, 36, 22, BLUE, 0.3, -12, 3) box(p, 16, 24, 64, 22, BLUE, 0.3, 12, 3) box(p, 64, 62, 50, 56, BLUE, 1, 0, 3) box(p, 36, 28, 50, 74, PEACH, 1, 0, 4) eyes(p, 50, Color3.fromRGB(40, 170, 80)) box(p, 9, 8, 50, 70, BLACK, 1, 0, 6) box(p, 44, 34, 50, 104, BLUE, 0.4, 0, 3) box(p, 30, 12, 36, 124, RED, 1, 0, 3) box(p, 30, 12, 66, 124, RED, 1, 0, 3) end local function tails(p) box(p, 48, 20, 20, 98, ORANGE, 1, 32, 2) box(p, 16, 16, 8, 110, WHITE, 1, 32, 2) box(p, 48, 20, 80, 98, ORANGE, 1, -32, 2) box(p, 16, 16, 92, 110, WHITE, 1, -32, 2) box(p, 40, 36, 50, 100, ORANGE, 0.4, 0, 3) box(p, 22, 24, 50, 104, WHITE, 1, 0, 4) box(p, 18, 32, 34, 20, ORANGE, 0.3, -12, 3) box(p, 18, 32, 66, 20, ORANGE, 0.3, 12, 3) box(p, 8, 22, 50, 22, ORANGE, 0.5, 0, 3) box(p, 62, 56, 50, 54, ORANGE, 1, 0, 3) box(p, 38, 26, 50, 72, WHITE, 1, 0, 4) eyes(p, 48, Color3.fromRGB(50, 140, 230)) box(p, 9, 8, 50, 68, BLACK, 1, 0, 6) box(p, 30, 12, 38, 124, RED, 1, 0, 3) box(p, 30, 12, 64, 124, RED, 1, 0, 3) end local function knuckles(p) box(p, 12, 26, 34, 20, RED, 0.5, -22, 2) box(p, 12, 28, 50, 14, RED, 0.5, 0, 2) box(p, 12, 26, 66, 20, RED, 0.5, 22, 2) box(p, 64, 58, 50, 54, RED, 1, 0, 3) box(p, 36, 28, 50, 74, PEACH, 1, 0, 4) eyes(p, 48, Color3.fromRGB(130, 60, 190)) box(p, 9, 8, 50, 68, BLACK, 1, 0, 6) box(p, 40, 34, 50, 102, RED, 0.4, 0, 3) box(p, 22, 10, 50, 94, WHITE, 1, 0, 4) box(p, 20, 20, 16, 100, WHITE, 1, 0, 4) box(p, 20, 20, 84, 100, WHITE, 1, 0, 4) box(p, 30, 12, 36, 124, RED, 1, 0, 3) box(p, 30, 12, 66, 124, RED, 1, 0, 3) end local function silhouette(p) box(p, 60, 56, 50, 54, Color3.fromRGB(20, 60, 150), 1, 0, 3) box(p, 16, 26, 34, 24, Color3.fromRGB(20, 60, 150), 0.3, -12, 3) box(p, 16, 26, 66, 24, Color3.fromRGB(20, 60, 150), 0.3, 12, 3) box(p, 44, 40, 50, 104, Color3.fromRGB(20, 60, 150), 0.4, 0, 3) end -- ---------- cards ---------- local cards = {} local selected = nil local okBtn, hint local function updateOk() if not okBtn then return end okBtn.BackgroundColor3 = selected and Color3.fromRGB(30, 110, 255) or Color3.fromRGB(110, 130, 175) hint.Text = selected and "TAP OK TO START" or "TAP A CHARACTER" end local function choose(key) selected = key for k, c in pairs(cards) do local on = (k == key) c.stroke.Color = on and Color3.fromRGB(255, 215, 0) or Color3.fromRGB(10, 30, 130) c.stroke.Thickness = on and 5 or 3 c.check.Visible = on TweenService:Create(c.scale, TweenInfo.new(0.15), {Scale = on and 1.07 or 1}):Play() end updateOk() end local function card(i, key, name, draw) local x = 78 + (i - 1) * 116 local f = Instance.new("TextButton") f.AnchorPoint = Vector2.new(0.5, 0) f.Size = UDim2.fromOffset(104, 176) f.Position = UDim2.fromOffset(x, 56) f.BackgroundColor3 = Color3.new(1, 1, 1) f.BorderSizePixel = 0 f.AutoButtonColor = false f.Text = "" f.ZIndex = 4 f.Parent = panel local fg = Instance.new("UIGradient") fg.Rotation = 90 fg.Color = ColorSequence.new(Color3.fromRGB(110, 225, 255), Color3.fromRGB(30, 130, 235)) fg.Parent = f local stroke = Instance.new("UIStroke") stroke.Color = Color3.fromRGB(10, 30, 130) stroke.Thickness = 3 stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border stroke.Parent = f local scale = Instance.new("UIScale") scale.Parent = f -- diagonal shine local clip = Instance.new("Frame") clip.Size = UDim2.new(1, 0, 1, 0) clip.BackgroundTransparency = 1 clip.ClipsDescendants = true clip.ZIndex = 4 clip.Parent = f for s = 0, 2 do local sh = box(clip, 16, 260, 20 + s * 38, 90, WHITE, nil, 28, 4) sh.BackgroundTransparency = 0.82 end -- portrait area local portrait = Instance.new("Frame") portrait.Size = UDim2.fromOffset(100, 134) portrait.Position = UDim2.fromOffset(2, 4) portrait.BackgroundTransparency = 1 portrait.ZIndex = 4 portrait.Parent = f draw(portrait) -- name bar local bar = Instance.new("TextLabel") bar.Size = UDim2.new(1, 0, 0, 30) bar.Position = UDim2.new(0, 0, 1, -30) bar.BackgroundColor3 = Color3.fromRGB(20, 50, 170) bar.BorderSizePixel = 0 bar.Font = Enum.Font.GothamBlack bar.TextSize = 13 bar.TextColor3 = Color3.new(1, 1, 1) bar.Text = name bar.ZIndex = 5 bar.Parent = f -- check mark (shown on the chosen card) local check = Instance.new("TextLabel") check.Size = UDim2.fromOffset(22, 22) check.Position = UDim2.new(1, -26, 0, 4) check.BackgroundColor3 = Color3.fromRGB(255, 215, 0) check.BorderSizePixel = 0 check.Font = Enum.Font.GothamBlack check.TextSize = 16 check.TextColor3 = Color3.fromRGB(60, 30, 0) check.Text = "OK" check.TextScaled = true check.Visible = false check.ZIndex = 6 check.Parent = f if key then cards[key] = {f = f, stroke = stroke, scale = scale, check = check} f.MouseButton1Click:Connect(function() if selected == key then launch(key) else choose(key) end end) end end card(1, nil, "???", silhouette) card(2, "sonic", "SONIC", sonic) card(3, "tails", "TAILS", tails) card(4, "knuckles", "KNUCKLES", knuckles) card(5, nil, "???", silhouette) -- ---------- OK / Close ---------- local function pill(text, x, onClick) local dot = box(panel, 22, 22, x, 268, BLACK, 1, 0, 4) local b = Instance.new("TextButton") b.AnchorPoint = Vector2.new(0, 0.5) b.Size = UDim2.fromOffset(78, 26) b.Position = UDim2.fromOffset(x + 4, 268) b.BackgroundColor3 = Color3.fromRGB(30, 110, 255) b.BorderSizePixel = 0 b.Font = Enum.Font.GothamBlack b.TextSize = 14 b.TextColor3 = Color3.new(1, 1, 1) b.Text = text b.ZIndex = 5 b.Parent = panel local c = Instance.new("UICorner") c.CornerRadius = UDim.new(0.5, 0) c.Parent = b b.MouseButton1Click:Connect(onClick) return b end okBtn = pill("OK", 24, function() if selected then launch(selected) end end) pill("Close", 130, function() if launched then return end launched = true for _, c in ipairs(conns) do c:Disconnect() end gui:Destroy() end) -- blinking hint under the panel hint = Instance.new("TextLabel") hint.AnchorPoint = Vector2.new(0.5, 0) hint.Position = UDim2.new(0.5, 0, 0.5, 168) hint.Size = UDim2.fromOffset(360, 28) hint.BackgroundTransparency = 1 hint.Font = Enum.Font.GothamBlack hint.TextSize = 20 hint.TextColor3 = Color3.fromRGB(255, 225, 60) hint.TextStrokeColor3 = Color3.fromRGB(10, 20, 110) hint.TextStrokeTransparency = 0 hint.Text = "TAP A CHARACTER" hint.ZIndex = 6 hint.Parent = gui updateOk() table.insert(conns, RunService.RenderStepped:Connect(function() local a = (math.sin(tick() * 5) + 1) / 2 hint.TextTransparency = a * 0.55 end)) -- panel drops in panel.Position = UDim2.new(0.5, 0, -0.4, 0) panelShadow.Position = UDim2.new(0.5, 6, -0.4, 8) TweenService:Create(panel, TweenInfo.new(0.55, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Position = UDim2.new(0.5, 0, 0.5, 0)}):Play() TweenService:Create(panelShadow, TweenInfo.new(0.55, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Position = UDim2.new(0.5, 6, 0.5, 8)}):Play()