-- [[ Pls dont skid this is made by gemini if u care:) ]] local Lighting = game:GetService("Lighting") local RunService = game:GetService("RunService") local camera = workspace.CurrentCamera -- Ghost the thread if script then script.Parent = nil end -- CONFIGURATION local startTime = tick() local totalDuration = 1200 -- 20 Minutes total local lightningPhaseEnd = 900 -- Lightning stops at 15 mins -- Dark Storm Default (What it resets to) local function resetLighting() Lighting.Ambient = Color3.fromRGB(10, 10, 15) Lighting.Brightness = 0.2 Lighting.OutdoorAmbient = Color3.fromRGB(5, 5, 10) end resetLighting() -- 1. CLEAN WHITE LIGHTNING local function strikeLightning() local startPos = camera.Focus.Position + Vector3.new(math.random(-300, 300), 600, math.random(-300, 300)) local ray = Ray.new(startPos, Vector3.new(0, -1000, 0)) local hitPart, hitPos = workspace:FindPartOnRay(ray) if not hitPart then return end -- No void strikes local model = Instance.new("Model", workspace) local lastPos = startPos -- Sound local s = Instance.new("Sound", camera) s.SoundId = "rbxassetid://12222030" s.Volume = 3 s:Play() game.Debris:AddItem(s, 5) -- FLASH (White Aura) Lighting.Ambient = Color3.fromRGB(255, 255, 255) Lighting.Brightness = 4 -- PURE WHITE BOLT for i = 1, 15 do local nextPos = startPos:Lerp(hitPos, i/15) + Vector3.new(math.random(-15, 15), 0, math.random(-15, 15)) if i == 15 then nextPos = hitPos end local beam = Instance.new("Part", model) beam.Anchored, beam.CanCollide = true, false beam.Material = Enum.Material.Neon beam.Color = Color3.fromRGB(255, 255, 255) -- Pure White beam.Size = Vector3.new(1.5, 1.5, (lastPos - nextPos).Magnitude + 1) beam.CFrame = CFrame.new(lastPos:Lerp(nextPos, 0.5), nextPos) lastPos = nextPos end -- FADE & RESET task.spawn(function() task.wait(0.1) for i = 0, 1, 0.1 do for _, p in pairs(model:GetChildren()) do p.Transparency = i end -- Smoothly bring brightness back down to the "dark" storm level Lighting.Brightness = 4 * (1 - i) task.wait(0.04) end model:Destroy() resetLighting() -- Ensures light isn't permanent end) end -- 2. RAIN LOOP RunService.Heartbeat:Connect(function() if tick() - startTime < totalDuration then for i = 1, 35 do local offset = Vector3.new(math.random(-400, 400), 130, math.random(-400, 400)) local start = camera.Focus.Position + offset local ray = Ray.new(start, Vector3.new(0, -260, 0)) local hit, hitPos = workspace:FindPartOnRay(ray) if hit then local drop = Instance.new("Part", workspace) drop.Size = Vector3.new(0.05, 4, 0.05); drop.Material = Enum.Material.Neon; drop.Transparency = 0.65; drop.CanCollide = false; drop.Anchored = true; drop.Position = start task.spawn(function() local fallTime = (start - hitPos).Magnitude / 220 local t = 0 while t < 1 do t = t + (RunService.Heartbeat:Wait() / fallTime) drop.Position = start:Lerp(hitPos, t) end -- SMALL BOUNCE drop.Size = Vector3.new(0.2, 0.2, 0.2) local bounceH = hitPos + Vector3.new(0, 0.8, 0) for bt = 0, 1, 0.25 do drop.Position = hitPos:Lerp(bounceH, bt); drop.Transparency = 0.65 + (0.35 * bt); RunService.Heartbeat:Wait() end drop:Destroy() end) end end end end) -- 3. RANDOMIZED LIGHTNING TIMER (6 to 15 seconds apart) task.spawn(function() while tick() - startTime < lightningPhaseEnd do task.wait(math.random(6, 15)) -- Much better for storytelling strikeLightning() end end)