local Assets = game.ReplicatedStorage:WaitForChild("Assets") local Audio = require(game.ReplicatedStorage.Library.Audio) local Functions = require(game.ReplicatedStorage.Library.Functions) local Shake = require(game.ReplicatedStorage.Library.Client.Shake) local Config = { TNTHeight = 20, TNTRaiseTime = 0.55, TNTLowerTime = 0.3, ScaleSize = 1.5, } local WorkspaceThings = game.Workspace:WaitForChild("__THINGS") local LocalPlayer = game.Players.LocalPlayer function DropTNTAtPlayer() local character = LocalPlayer.Character if not character or not character:FindFirstChild("HumanoidRootPart") then warn("LocalPlayer has no character or HumanoidRootPart") return end local clone = Assets.Models.Misc.TNT:Clone() clone.Parent = WorkspaceThings:WaitForChild("Items") local startPosition = character.HumanoidRootPart.Position + Vector3.new(0, Config.TNTHeight, 0) local endPosition = character.HumanoidRootPart.Position local startTime = workspace:GetServerTimeNow() local raiseEndTime = startTime + Config.TNTRaiseTime Audio.Play("rbxassetid://14970351121", clone.PrimaryPart, 1, 0.25, 100) Functions.RenderStepped(function(deltaTime) local elapsed = math.clamp((workspace:GetServerTimeNow() - startTime) / Config.TNTRaiseTime, 0, 1) local position = startPosition:Lerp(endPosition, Functions.Easing(elapsed, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)) clone:PivotTo(CFrame.new(position)) end, Config.TNTRaiseTime):Wait() Functions.Tween(clone, { Scale = Config.ScaleSize, }, {Config.TNTLowerTime, "Quart", "In"}) Functions.RenderStepped(function(deltaTime) local elapsed = math.clamp((workspace:GetServerTimeNow() - raiseEndTime) / Config.TNTLowerTime, 0, 1) local position = endPosition:Lerp(endPosition, Functions.Easing(elapsed, Enum.EasingStyle.Quad, Enum.EasingDirection.In)) clone:PivotTo(CFrame.new(position)) end, Config.TNTLowerTime):Wait() Explode(endPosition, true) clone:Destroy() end function Explode(position, isLocal) Functions.Emit(position, function(particle) Functions.ScaleParticle(particle, 3) end, Assets.Particles.Items.TNT:GetChildren()) Audio.Play("rbxassetid://14970351150", position, 1, 1, 250) local shakeConfig = { Origin = position, RollOffDistance = 50, MaxDistance = 125, } Shake.Create(0.5, 0.5, 0.3, nil, shakeConfig, isLocal) end DropTNTAtPlayer()