# data[].attributes.body
Must have a tool in the ReplicatedStorage with the same name as the variable in the script.

# data[].attributes.body
Door with an accompanying key tool.

# data[].attributes.body
Touch to get a tool!

# data[].attributes.attachment_link.readable_text
local toolName = "Key"

local function onTouched(hit)
	local character = hit.Parent
	local player = game.Players:GetPlayerFromCharacter(character)
	
	if player and not player.Backpack:FindFirstChild(toolName) 
		and not player.Character:FindFirstChild(toolName) then
		local tool = game.ReplicatedStorage:FindFirstChild(toolName)
		if tool then
			local toolClone = tool:Clone()
			toolClone.Parent = player.Backpack
		end
	end
end

script.Parent.Touched:Connect(onTouched)

# data[].attributes.body
Ensure the model has a "Hinge" object in its model.

# data[].attributes.attachment_link.readable_text
local door = script.Parent
local hinge = door.Parent.Hinge
local tweenService = game:GetService("TweenService")
local tweenInfo = TweenInfo.new()
local offset = hinge.CFrame:Inverse() * door.CFrame
local doorOpen = tweenService:Create(door, tweenInfo, {CFrame = hinge.CFrame * CFrame.Angles(0, math.rad(90), 0) * offset})
local doorClose = tweenService:Create(door, tweenInfo, {CFrame = hinge.CFrame * CFrame.Angles(0, 0, 0) * offset})


door.Touched:connect(function(p)
	if p.Parent:FindFirstChild("Humanoid") then
		doorOpen:Play()
		wait(3)
		doorClose:Play()
	end
end)

# data[].attributes.body
Creates paths while holding the tool and holding down left mouse button.

# data[].attributes.attachment_link.readable_text
local tool = script.Parent
local Player = game:GetService("Players").LocalPlayer
local character = Player.Character or Player.CharacterAdded:Wait()
local hrp = character:WaitForChild("HumanoidRootPart")
local equipped = false
local running = false

local function createPath()
	local tile = Instance.new("Part")
	game.Debris:AddItem(tile,3)
	tile.Parent = game.Workspace
	tile.Anchored = true
	tile.Size = Vector3.new(10, 1, 10)
	tile.Position = Vector3.new(hrp.CFrame.Position.X,
		hrp.CFrame.Position.Y - 3.2, hrp.CFrame.Position.Z)
end

tool.Equipped:Connect(function()
	equipped = true
end)

tool.Unequipped:Connect(function()
	equipped = false
end)

game:GetService("UserInputService").InputBegan:Connect(function(i,g)
	if equipped and not g 
		and i.UserInputType == Enum.UserInputType.MouseButton1 then
		running = true
		while equipped and running and wait(0.01) do
			createPath()
		end
	end
end)

game:GetService("UserInputService").InputEnded:Connect(function(i,g)
	if equipped and not g 
		and i.UserInputType == Enum.UserInputType.MouseButton1 then
		running = false
	end
end)

# data[].attributes.body
Step on a part with this script inside it to gain a badge. Make sure to change the badge ID.

# data[].attributes.attachment_link.readable_text
local part = script.Parent
part.Touched:connect(function(hit) 
	if hit and hit.Parent and hit.Parent:FindFirstChild("Humanoid") then 
		game:GetService("BadgeService"):
			AwardBadge(game.Players:GetPlayerFromCharacter(hit.Parent).UserId, "2153380836")
	end 
end)

# data[].attributes.body
This creates satisfying dominoes to push over.

# data[].attributes.attachment_link.readable_text
function createDomino(pos)
	local domino = Instance.new("Part")
	domino.Name = "domino"
	domino.Massless = true
	domino.Parent = game.Workspace
	domino.CastShadow = false

	domino.Position = Vector3.new(pos, 0, 0)
	domino.Orientation = Vector3.new(0,0,90)
	domino.Color = Color3.new(pos, 50, 100)
	domino.Size = Vector3.new(pos,1,pos)

end



for i = 0, 200, 2 do
	wait(.1)
	createDomino(i)
end


# data[].attributes.body
Makes all objects and even children of all objects within the workspace which are named "Hazard" kill the player.

# data[].attributes.attachment_link.readable_text
local function onTouched(hit)
	local character = hit.Parent
	local player = game.Players:GetPlayerFromCharacter(character)

	if player and character:FindFirstChild("Humanoid") then
		local humanoid = character:FindFirstChild("Humanoid")
		if humanoid then
			humanoid.Health = 0
		end
	end
end

for _, part in pairs(workspace:GetDescendants()) do
	if part.Name == "Hazard" then
		part.Touched:Connect(onTouched)
	end
end

# data[].attributes.body
Put it in a part to make it move up and then quickly slam down every few seconds and crush a player.

# data[].attributes.attachment_link.readable_text
local crusher = script.Parent
local pos = crusher.CFrame
local TS = game:GetService("TweenService")

local down = TweenInfo.new(3, Enum.EasingStyle.Bounce)
local up = TweenInfo.new(1, Enum.EasingStyle.Elastic,Enum.EasingDirection.Out,0,false,0.5)

local slam = TS:Create(crusher, down, {CFrame = pos * CFrame.new(0, 9, 0)})
local retract = TS:Create(crusher, up, {CFrame = pos})

slam:Play()
slam.Completed:Connect(function()
	retract:Play()
end)
retract.Completed:Connect(function()
	slam:Play()
end)

crusher.Touched:connect(function(hit) 
	if hit and hit.Parent and hit.Parent:FindFirstChild("Humanoid") then 
		hit.Parent.Humanoid.Health = 0;
	end
end)


# data[].attributes.body
Put this code in a part to make it bounce!

# data[].attributes.attachment_link.readable_text
local trampoline = script.Parent
local bounceForce = 50 -- Adjust this force to control the bounce height

trampoline.Touched:Connect(function(plr)
	if plr then
		if plr.Parent:FindFirstChild("HumanoidRootPart") then
			local root = plr.Parent.HumanoidRootPart
			if root:FindFirstChild("JumpForce") == nil then
				local jump = Instance.new("BodyForce")
				jump.Force = Vector3.new(0,math.pow(bounceForce,2),0)
				jump.Parent = root
				plr.Parent.Humanoid.Jump = true
				wait(0.1)
				if jump and plr then
					jump:Destroy()
				end
			end
		end
	end
end)


# data[].attributes.body
Shoots cannon balls at the player to fling them!

# data[].attributes.attachment_link.readable_text
local parentPart = script.Parent

local projectileSpeed = 250 -- Speed of projectile
local projectileSize = Vector3.new(3, 3, 3) -- Size of projectile
local projectileColor = BrickColor.new("Black") -- Color of projectile
local flingForce = 50 -- Force applied (Make this a big number to fling the player!)

while true do
	wait(1)
	-- Find the nearest player
	local nearestPlayer = nil
	local shortestDistance = math.huge
	
	for _,player in pairs(game.Players:GetChildren()) do
		local character = player.Character
		if character and character.PrimaryPart then
			local distance = (parentPart.Position - character.PrimaryPart.Position).Magnitude
			if distance < shortestDistance then
				print(character.PrimaryPart)
				nearestPlayer = player
				shortestDistance = distance
			end
		end
	end

	-- Fire a projectile at the nearest player
	if nearestPlayer then
		local projectile = Instance.new("Part")
		projectile.Shape = "Ball"
		projectile.Size = projectileSize
		projectile.Anchored = false
		projectile.Name = "Cannon Ball"
		projectile.BrickColor = projectileColor
		projectile.CFrame = CFrame.new(parentPart.Position, nearestPlayer.Character.PrimaryPart.Position) 
			+ Vector3.new(0,parentPart.Size.Y /2,0)
		projectile.Velocity = (nearestPlayer.Character.PrimaryPart.Position - parentPart.Position).unit * projectileSpeed
		projectile.Parent = game.Workspace

		-- Handle collision
		projectile.Touched:Connect(function(hit)
			local character = hit.Parent
			local humanoid = character:FindFirstChild("Humanoid")
			if humanoid and nearestPlayer == game.Players:GetPlayerFromCharacter(character) then
				character.PrimaryPart.AssemblyLinearVelocity = projectile.Velocity * flingForce
				projectile:Destroy()
			end
			game.Debris:AddItem(projectile, 5) 
		end)
	end
end

# data[].attributes.body
Attach it to a Hinge part and watch it spin! Make sure the pieces are unanchored except for the Hinge!

# data[].attributes.attachment_link.readable_text
local spinner = script.Parent
while(wait(0.01)) do
	spinner.CFrame = spinner.CFrame * CFrame.Angles(spinner.CFrame.Rotation.X, 
		spinner.CFrame.Rotation.Y + 0.1, spinner.CFrame.Rotation.Z)
end

# data[].attributes.body
Step on it and it falls!

# data[].attributes.attachment_link.readable_text
local part = script.Parent
local cframe = part.CFrame
local pos = part.Position
local touched = false
part.Touched:connect(function(hit) 
	if hit and hit.Parent and hit.Parent:FindFirstChild("Humanoid") and not touched then 

		if not touched then
			-- part.AssemblyLinearVelocity = Vector3.new(0, 50, 0)
			-- part.AssemblyAngularVelocity = Vector3.new(50, 0, 0)
			touched = true
		end
		wait(0.1)
		part.Anchored = false
		wait(2)
		-- part.AssemblyLinearVelocity = Vector3.new(0, 0, 0)
		-- part.AssemblyAngularVelocity = Vector3.new(0, 0, 0)
		part.Anchored = true
		part.Position = pos
		part.CFrame = cframe
		touched = false

	end 
end)

# data[].attributes.body
They move! You'll have to tweak the numbers on lines 4 and 5 though, and maybe the duration of time in the wait() functions.

# data[].attributes.attachment_link.readable_text
local platform = script.Parent
local tweenService = game:GetService("TweenService")
local tweenInfo = TweenInfo.new()
local platformMove = tweenService:Create(platform, tweenInfo, {CFrame = platform.CFrame * CFrame.new(5, 0, 0)})
local platformReturn = tweenService:Create(platform, tweenInfo, {CFrame = platform.CFrame * CFrame.new(-5, 0, 0)})


while(wait(1)) do
	platformMove:Play()
	wait(1)
	platformReturn:Play()
end

# data[].attributes.body
Change Jumpheight to WalkSpeed to change this from a jump boost to a speed boost.

# data[].attributes.attachment_link.readable_text
local function trapTouched(otherPart)
	local humanoid = otherPart.parent:FindFirstChildWhichIsA("Humanoid")
	if humanoid and humanoid.JumpHeight < 40 then
		--Change the walkspeed or jumpheight
		humanoid.JumpHeight=40
		
		local trail = Instance.new("Trail", otherPart)
		local att1 = Instance.new("Attachment", humanoid.Parent.Head)
		local att2 = Instance.new("Attachment", humanoid.Parent.HumanoidRootPart)
		
		att1.Name="Att1"
		att2.Name="Att2"
		
		trail.Attachment0 = humanoid.Parent.Head.Att1
		trail.Attachment1 = humanoid.Parent.HumanoidRootPart.Att2
		trail.Color = ColorSequence.new(Color3.new(script.Parent.Color.R,script.Parent.Color.G, script.Parent.Color.B)) --ColorSequence.new(Color3.new(0.85098, 0.101961, 1))
		
		wait(1.5)
		humanoid.JumpHeight=7.2
		trail:Destroy()
	end
end

script.Parent.Touched:Connect(trapTouched)

# data[].attributes.body
Step on it and you die... Obviously.

# data[].attributes.attachment_link.readable_text
script.Parent.Touched:connect(function(hit) 
	if hit and hit.Parent and hit.Parent:FindFirstChild("Humanoid") then 
		hit.Parent.Humanoid.Health = 0 
	end 
end)

# data[].attributes.body
Put it in a block, and then you're good to go.

# data[].attributes.attachment_link.readable_text
local spawn = script.Parent 
local touched = false
local current = 0;
spawn.Touched:connect(function(hit)
	if hit and hit.Parent and hit.Parent:FindFirstChild("Humanoid") then
		local player = game.Players:GetPlayerFromCharacter(hit.Parent)

		local checkpointData = game.ServerStorage:FindFirstChild("CheckpointData")
		if not checkpointData then
			checkpointData = Instance.new("Model", game.ServerStorage)
			checkpointData.Name = "CheckpointData"
		end

		local checkpoint = checkpointData:FindFirstChild(tostring(player.userId))
		if not checkpoint then
			checkpoint = Instance.new("ObjectValue", checkpointData)
			checkpoint.Name = tostring(player.userId)

			player.CharacterAdded:connect(function(character)
				wait() 
				local newUser = tostring(player.userId) 
				local newData = game.ServerStorage.CheckpointData[newUser].Value.CFrame
				local newCheckpoint = newData + Vector3.new(0, 4, 0) 
				character:WaitForChild("HumanoidRootPart").CFrame = newCheckpoint
			end)
		end 

		checkpoint.Value = spawn
	end 
end)