repeat task.wait() until game:IsLoaded() local Players = game:GetService("Players") local TweenService = game:GetService("TweenService") local RunService = game:GetService("RunService") local Lighting = game:GetService("Lighting") local LocalPlayer = Players.LocalPlayer or Players.PlayerAdded:Wait() local CFG = { size = 270, thickness = 18, corner = 24, duration = 7, spinDeg = 95, spinTime = 0.85, breathMin = 0.985, breathMax = 1.02, bubbleCount = 4, bubbleScale = 2.7, bubbleGap = 0.12, creditText = "-- Thunder Hub --", rainbowSeconds = 1.0, rainbowTurns = 1.25 } local BLUE_LIGHT = Color3.fromRGB(120, 205, 255) local BLUE_MAIN = Color3.fromRGB( 64, 145, 255) local BLUE_DEEP = Color3.fromRGB( 28, 72, 165) local CYAN_SOFT = Color3.fromRGB(140, 245, 255) local BG_COLOR = Color3.fromRGB( 5, 9, 20) local function getGuiParent() local ok, root = pcall(function() return (gethui and gethui()) end) if ok and root then return root end ok, root = pcall(function() return (get_hidden_gui and get_hidden_gui()) end) if ok and root then return root end ok, root = pcall(function() return (gethiddengui and gethiddengui()) end) if ok and root then return root end local pg = LocalPlayer:FindFirstChildOfClass("PlayerGui") or LocalPlayer:WaitForChild("PlayerGui", 5) return pg or game:GetService("CoreGui") end pcall(function() if _G.ThunderIntro_Stop then _G.ThunderIntro_Stop() end end) local parent = getGuiParent() local running = true local blur = Instance.new("BlurEffect") blur.Size = 8 blur.Name = "ThunderIntroBlur" blur.Parent = Lighting local sg = Instance.new("ScreenGui") sg.Name = "ThunderIntroMAX" sg.IgnoreGuiInset = true sg.ResetOnSpawn = false pcall(function() if syn and syn.protect_gui then syn.protect_gui(sg) end end) sg.Parent = parent local bg = Instance.new("Frame") bg.Size = UDim2.fromScale(1,1) bg.BackgroundColor3 = BG_COLOR bg.BackgroundTransparency = 0.25 bg.Parent = sg local main = Instance.new("Frame") main.Size = UDim2.fromOffset(CFG.size, CFG.size) main.AnchorPoint = Vector2.new(0.5,0.5) main.Position = UDim2.fromScale(0.5,0.5) main.BackgroundTransparency = 1 main.Parent = sg local ring = Instance.new("Frame") ring.Size = UDim2.fromScale(1,1) ring.BackgroundTransparency = 1 ring.Parent = main local rCorner = Instance.new("UICorner"); rCorner.CornerRadius = UDim.new(0, CFG.corner); rCorner.Parent = ring local rStroke = Instance.new("UIStroke") rStroke.Thickness = CFG.thickness rStroke.Color = BLUE_MAIN pcall(function() rStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border end) rStroke.Parent = ring local glowRing = Instance.new("Frame") glowRing.Size = UDim2.fromScale(1,1) glowRing.BackgroundTransparency = 1 glowRing.ZIndex = -1 glowRing.Parent = main local gCorner = Instance.new("UICorner"); gCorner.CornerRadius = UDim.new(0, CFG.corner); gCorner.Parent = glowRing local gStroke = Instance.new("UIStroke") gStroke.Thickness = CFG.thickness * 1.7 gStroke.Color = CYAN_SOFT gStroke.Transparency = 0.7 pcall(function() gStroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border end) gStroke.Parent = glowRing local inner = Instance.new("Frame") inner.Size = UDim2.fromOffset(CFG.size - CFG.thickness*2, CFG.size - CFG.thickness*2) inner.AnchorPoint = Vector2.new(0.5,0.5) inner.Position = UDim2.fromScale(0.5,0.5) inner.BackgroundTransparency = 1 inner.Parent = main local title = Instance.new("TextLabel") title.Size = UDim2.fromScale(0.9,0.4) title.AnchorPoint = Vector2.new(0.5,0.5) title.Position = UDim2.fromScale(0.5,0.40) title.BackgroundTransparency = 1 title.Text = "THUNDER" title.TextScaled = true title.Font = Enum.Font.GothamBlack title.TextColor3 = BLUE_MAIN title.TextTransparency = 1 title.Parent = inner local grad = Instance.new("UIGradient") grad.Color = ColorSequence.new{ ColorSequenceKeypoint.new(0.00, BLUE_LIGHT), ColorSequenceKeypoint.new(0.50, BLUE_MAIN), ColorSequenceKeypoint.new(1.00, BLUE_DEEP) } grad.Rotation = 25 grad.Parent = title local sub = Instance.new("TextLabel") sub.Size = UDim2.fromScale(0.6,0.2) sub.AnchorPoint = Vector2.new(0.5,0.5) sub.Position = UDim2.fromScale(0.5,0.65) sub.BackgroundTransparency = 1 sub.Text = "HUB" sub.TextScaled = true sub.Font = Enum.Font.GothamMedium sub.TextColor3 = BLUE_LIGHT sub.TextTransparency = 1 sub.Parent = inner task.spawn(function() while running do grad.Rotation = (grad.Rotation + 1) % 360 task.wait(0.02) end end) local orb = Instance.new("Frame") orb.AnchorPoint = Vector2.new(0.5,0.5) orb.Position = UDim2.fromScale(0.5,0.65) orb.Size = UDim2.fromOffset(120,120) orb.BackgroundColor3 = CYAN_SOFT orb.BackgroundTransparency = 0.9 orb.ZIndex = -1 orb.Parent = inner local orbCorner = Instance.new("UICorner"); orbCorner.CornerRadius = UDim.new(1,0); orbCorner.Parent = orb local function Spark() local s = Instance.new("Frame") s.Size = UDim2.fromOffset(2,2) s.AnchorPoint = Vector2.new(0.5,0.5) s.Position = orb.Position s.BackgroundColor3 = Color3.fromRGB(255,255,255) s.BackgroundTransparency = 0 s.ZIndex = 5 s.Parent = inner local goalPos = orb.Position + UDim2.fromOffset(math.random(-60,60), math.random(-60,60)) TweenService:Create(s, TweenInfo.new(0.25), {Position = goalPos, BackgroundTransparency = 1}):Play() game:GetService("Debris"):AddItem(s, 0.3) end for i=1,12 do task.delay(i*0.01, Spark) end local function CameraShake(ui) local orig = ui.Position for i = 1, 4 do ui.Position = orig + UDim2.fromOffset(math.random(-4,4), math.random(-4,4)) task.wait(0.04) end ui.Position = orig end CameraShake(main) local credit = Instance.new("TextLabel") credit.Size = UDim2.fromOffset(220,20) credit.AnchorPoint = Vector2.new(1,1) credit.Position = UDim2.fromScale(0.985,0.985) credit.BackgroundTransparency = 1 credit.Text = CFG.creditText credit.TextColor3 = Color3.fromRGB(190,205,235) credit.Font = Enum.Font.Gotham credit.TextSize = 12 credit.TextTransparency = 1 credit.Parent = sg local sweep = Instance.new("Frame") sweep.BackgroundTransparency = 1 sweep.Size = UDim2.fromScale(1.2,1.2) sweep.AnchorPoint = Vector2.new(0.5,0.5) sweep.Position = UDim2.fromScale(-0.2,0.5) sweep.Rotation = -15 sweep.ZIndex = 8 sweep.Parent = inner local sweepGrad = Instance.new("UIGradient") sweepGrad.Color = ColorSequence.new{ ColorSequenceKeypoint.new(0.00, Color3.new(1,1,1)), ColorSequenceKeypoint.new(0.50, Color3.new(1,1,1)), ColorSequenceKeypoint.new(1.00, Color3.new(1,1,1)), } sweepGrad.Transparency = NumberSequence.new{ NumberSequenceKeypoint.new(0.00,1.0), NumberSequenceKeypoint.new(0.48,0.25), NumberSequenceKeypoint.new(0.52,0.00), NumberSequenceKeypoint.new(0.56,0.25), NumberSequenceKeypoint.new(1.00,1.0), } sweepGrad.Parent = sweep local bubbleFolder = Instance.new("Folder") bubbleFolder.Name = "Bubbles" bubbleFolder.Parent = main local function makeBubble() local b = Instance.new("Frame") b.AnchorPoint = Vector2.new(0.5,0.5) b.Position = UDim2.fromScale(0.5,0.5) b.Size = UDim2.fromOffset(1,1) b.BackgroundTransparency = 1 b.ZIndex = -2 b.Parent = bubbleFolder local s = Instance.new("UIStroke") s.Thickness = 3 s.Color = CYAN_SOFT s.Transparency = 0.1 s.Parent = b local c = Instance.new("UICorner"); c.CornerRadius = UDim.new(1,999); c.Parent = b return b, s end local ringScale = Instance.new("UIScale"); ringScale.Scale = 1; ringScale.Parent = ring local mainScale = Instance.new("UIScale"); mainScale.Scale = 1; mainScale.Parent = main _G.ThunderIntro_Stop = function() if not running then return end running = false if sg and sg.Parent then sg:Destroy() end if blur and blur.Parent then blur:Destroy() end end local ORIG = { rStroke = rStroke.Color, gStroke = gStroke.Color, titleGradient = grad.Color, sub = sub.TextColor3, orb = orb.BackgroundColor3 } local function HSV(h, s, v) return Color3.fromHSV(h % 1, s, v) end local function setTitleGradientFromHue(h) grad.Color = ColorSequence.new{ ColorSequenceKeypoint.new(0.00, HSV(h, 1,1)), ColorSequenceKeypoint.new(0.50, HSV(h+0.15,1,1)), ColorSequenceKeypoint.new(1.00, HSV(h+0.30,1,1)) } end local function RainbowBurst() local dur = math.max(0.099, CFG.rainbowSeconds) local turns = CFG.rainbowTurns local start = os.clock() while running do local t = os.clock() - start if t > dur then break end local u = t / dur local h = u * turns rStroke.Color = HSV(h, 1, 1) gStroke.Color = HSV(h+0.08, 1, 1) setTitleGradientFromHue(h) sub.TextColor3 = HSV(h+0.22, 1, 1) orb.BackgroundColor3 = HSV(h+0.12, 0.85, 1) RunService.Heartbeat:Wait() end rStroke.Color = ORIG.rStroke gStroke.Color = ORIG.gStroke grad.Color = ORIG.titleGradient sub.TextColor3 = ORIG.sub orb.BackgroundColor3 = ORIG.orb end task.spawn(RainbowBurst) task.spawn(function() local flash = Instance.new("Frame") flash.Size = UDim2.fromScale(1,1) flash.BackgroundColor3 = Color3.new(1,1,1) flash.BackgroundTransparency = 1 flash.ZIndex = 999 flash.Parent = sg local fIn = TweenService:Create(flash, TweenInfo.new(0.05), {BackgroundTransparency = 0.55}) local fOut = TweenService:Create(flash, TweenInfo.new(0.12), {BackgroundTransparency = 1}) fIn:Play(); fIn.Completed:Wait(); fOut:Play(); fOut.Completed:Wait() flash:Destroy() end) task.spawn(function() while running do local t1 = TweenService:Create(ring, TweenInfo.new(CFG.spinTime, Enum.EasingStyle.Exponential, Enum.EasingDirection.InOut), {Rotation = ring.Rotation + CFG.spinDeg}) local t2 = TweenService:Create(glowRing, TweenInfo.new(CFG.spinTime, Enum.EasingStyle.Exponential, Enum.EasingDirection.InOut), {Rotation = glowRing.Rotation + CFG.spinDeg}) t1:Play(); t2:Play(); t1.Completed:Wait() end end) task.spawn(function() while running do TweenService:Create(ringScale, TweenInfo.new(1.2, Enum.EasingStyle.Sine, Enum.EasingDirection.Out), {Scale = CFG.breathMax}):Play() task.wait(1.2) TweenService:Create(ringScale, TweenInfo.new(1.2, Enum.EasingStyle.Sine, Enum.EasingDirection.In), {Scale = CFG.breathMin}):Play() task.wait(1.2) end end) task.spawn(function() task.wait(0.3) TweenService:Create(title, TweenInfo.new(0.8, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {TextTransparency = 0}):Play() task.wait(0.25) TweenService:Create(sub, TweenInfo.new(0.6, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {TextTransparency = 0}):Play() TweenService:Create(credit, TweenInfo.new(0.6, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {TextTransparency = 0.2}):Play() end) task.spawn(function() while running do local up = TweenService:Create(orb, TweenInfo.new(1.5, Enum.EasingStyle.Sine, Enum.EasingDirection.Out), {BackgroundTransparency = 0.8, Size = UDim2.fromOffset(140,140)}) local dn = TweenService:Create(orb, TweenInfo.new(1.5, Enum.EasingStyle.Sine, Enum.EasingDirection.In), {BackgroundTransparency = 0.9, Size = UDim2.fromOffset(120,120)}) up:Play(); up.Completed:Wait(); dn:Play(); dn.Completed:Wait() end end) local function BubblePop() local baseT = bg.BackgroundTransparency local flashDown = TweenService:Create(bg, TweenInfo.new(0.08, Enum.EasingStyle.Sine, Enum.EasingDirection.Out), {BackgroundTransparency = math.max(0, baseT - 0.12)}) local flashUp = TweenService:Create(bg, TweenInfo.new(0.18, Enum.EasingStyle.Sine, Enum.EasingDirection.In), {BackgroundTransparency = baseT}) flashDown:Play(); flashDown.Completed:Wait(); flashUp:Play() local oldThick = rStroke.Thickness local oldColor = rStroke.Color local boostA = TweenService:Create(rStroke, TweenInfo.new(0.08, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), {Thickness = oldThick * 1.35, Color = CYAN_SOFT}) local boostB = TweenService:Create(rStroke, TweenInfo.new(0.22, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {Thickness = oldThick, Color = oldColor}) boostA:Play(); boostA.Completed:Wait(); boostB:Play() local thumpUp = TweenService:Create(mainScale, TweenInfo.new(0.08, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Scale = 1.03}) local thumpDn = TweenService:Create(mainScale, TweenInfo.new(0.20, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {Scale = 1}) thumpUp:Play(); thumpUp.Completed:Wait(); thumpDn:Play() for i = 1, CFG.bubbleCount do task.spawn(function() local b, s = makeBubble() local grow = TweenService:Create(b, TweenInfo.new(0.6, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out), {Size = UDim2.fromOffset(CFG.size * CFG.bubbleScale, CFG.size * CFG.bubbleScale)}) local fade = TweenService:Create(s, TweenInfo.new(0.6, Enum.EasingStyle.Sine, Enum.EasingDirection.Out), {Transparency = 1}) grow:Play(); fade:Play(); grow.Completed:Wait() b:Destroy() end) task.wait(CFG.bubbleGap) end end task.spawn(function() BubblePop() end) task.spawn(function() task.wait(0.25) local flash = Instance.new("Frame") flash.Size = UDim2.fromScale(1,1) flash.BackgroundColor3 = Color3.fromRGB(255,255,255) flash.BackgroundTransparency = 1 flash.ZIndex = -5 flash.Parent = sg local fIn = TweenService:Create(flash, TweenInfo.new(0.08, Enum.EasingStyle.Sine, Enum.EasingDirection.Out), {BackgroundTransparency = 0.6}) local fOut = TweenService:Create(flash, TweenInfo.new(0.20, Enum.EasingStyle.Sine, Enum.EasingDirection.In), {BackgroundTransparency = 1}) fIn:Play(); fIn.Completed:Wait(); fOut:Play(); fOut.Completed:Wait() flash:Destroy() end) task.spawn(function() task.wait(0.55) TweenService:Create(sweep, TweenInfo.new(1.1, Enum.EasingStyle.Sine, Enum.EasingDirection.Out), {Position = UDim2.fromScale(1.2, 0.5)}):Play() end) local function PulseRing() local ring = main:Clone() ring.Size = UDim2.fromOffset(0, 0) ring.BackgroundTransparency = 0.5 ring.Parent = inner TweenService:Create(ring, TweenInfo.new(0.6, Enum.EasingStyle.Quart), { Size = UDim2.fromOffset(300, 300), BackgroundTransparency = 1 }):Play() game:GetService("Debris"):AddItem(ring, 0.6) end if bubbleTween then bubbleTween.Completed:Connect(PulseRing) end if popSound then popSound.Ended:Connect(PulseRing) end if CFG.duration and CFG.duration > 0 then task.delay(CFG.duration, function() if not running then return end local fade = TweenInfo.new(0.55, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut) TweenService:Create(rStroke, fade, {Transparency = 1}):Play() TweenService:Create(gStroke, fade, {Transparency = 1}):Play() TweenService:Create(title, fade, {TextTransparency = 1}):Play() TweenService:Create(sub, fade, {TextTransparency = 1}):Play() TweenService:Create(credit, fade, {TextTransparency = 1}):Play() TweenService:Create(bg, fade, {BackgroundTransparency = 1}):Play() task.wait(0.6) _G.ThunderIntro_Stop() end) end