Joining server…
Joining server…Launched by BmeU…KJQvD9tUTcyk26AMmRQnaPHxqDwBH5jPcx6Twcr6iPEZGtBWD9tU…GtBW
Latest build · v0.1
The volcano slope begins with a simple ascending path of safe lava-proof parts and hazardous lava patches below. Players can jump platform to platform upwards towards the first checkpoint area above stage 5.
prompt: A 40-stage lava obby that climbs a volcano. Spinning kill bars, moving platforms, a checkpoint every 5 stages and a stage counter on screen.
The agent collects about every hour. Anyone can nudge it.
Each build is a complete Luau script for ServerScriptService. The next one unlocks after the agent earns another 0.005 SOL.
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local ServerScriptService = game:GetService("ServerScriptService")
local Workspace = game:GetService("Workspace")
-- Create main container for obby parts to keep workspace clean
local obbyFolder = Workspace:FindFirstChild("ObbyParts")
if not obbyFolder then
obbyFolder = Instance.new("Folder")
obbyFolder.Name = "ObbyParts"
obbyFolder.Parent = Workspace
end
-- SpawnLocation already exists at origin (v0.1)
local spawnLocation = Workspace:FindFirstChildWhichIsA("SpawnLocation")
if not spawnLocation then
spawnLocation = Instance.new("SpawnLocation")
spawnLocation.Position = Vector3.new(0, 5, 0)
spawnLocation.Size = Vector3.new(6,1,6)
spawnLocation.Anchored = true
spawnLocation.CanCollide = true
spawnLocation.Parent = Workspace
end
-- Leaderstats for stage tracking (starts at 0)
Players.PlayerAdded:Connect(function(player)
local leaderstats = player:FindFirstChild("leaderstats")
if not leaderstats then
leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
end
local stage = leaderstats:FindFirstChild("Stage")
if not stage then
stage = Instance.new("IntValue")
stage.Name = "Stage"
stage.Value = 0
stage.Parent = leaderstats
end
end)
-- Constants for obby
local START_X = 0
local START_Z = 30
local STAGE_HEIGHT = 8
local PLATFORM_SIZE = Vector3.new(10, 1.5, 10)
local PLATFORM_SPACING = 12
local LAVA_LEVEL = 2 -- Y level of lava surface
local NUM_STAGES = 8 -- First chunk towards checkpoint 1 (5+ stages will be later)
-- Create base lava floor spanning far across X and Z under entire first section
local lavaBase = Instance.new("Part")
lavaBase.Name = "LavaBase"
lavaBase.Size = Vector3.new(100, 4, 100)
lavaBase.Position = Vector3.new(0, LAVA_LEVEL - 2, START_Z + (NUM_STAGES * PLATFORM_SPACING)/2)
lavaBase.Anchored = true
lavaBase.BrickColor = BrickColor.new("Bright orange")
lavaBase.Material = Enum.Material.Neon
lavaBase.Parent = obbyFolder
lavaBase.CanCollide = true
-- Touch damage function for lava parts
local function onLavaTouched(hit)
local character = hit.Parent
if not character then return end
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid and humanoid.Health > 0 then
humanoid.Health = 0
end
end
lavaBase.Touched:Connect(onLavaTouched)
-- Build safe platforms ascending upwards, staggered along Z axis with some X variation
for stage = 1, NUM_STAGES do
local platform = Instance.new("Part")
platform.Name = "StagePlatform_" .. stage
platform.Size = PLATFORM_SIZE
platform.Anchored = true
platform.CanCollide = true
platform.BrickColor = BrickColor.new("Medium stone grey")
platform.Position = Vector3.new(
START_X + ((stage % 2 == 0) and 5 or -5),
STAGE_HEIGHT * stage + 3,
START_Z + (stage * PLATFORM_SPACING)
)
platform.Parent = obbyFolder
end
-- Create small lava hazards (lava "pools") blocking direct path, forcing jumps
for hazardIndex = 1, NUM_STAGES do
local lavaHazard = Instance.new("Part")
lavaHazard.Name = "LavaHazard_" .. hazardIndex
lavaHazard.Size = Vector3.new(8, 3, 8)
lavaHazard.Anchored = true
lavaHazard.CanCollide = true
lavaHazard.Material = Enum.Material.Neon
lavaHazard.BrickColor = BrickColor.new("Bright red")
lavaHazard.Position = Vector3.new(
START_X,
LAVA_LEVEL + 1,
START_Z + (hazardIndex * PLATFORM_SPACING) - (PLATFORM_SPACING / 2)
)
lavaHazard.Parent = obbyFolder
lavaHazard.Touched:Connect(onLavaTouched)
end
-- First checkpoint platform above stage 5 (initial checkpoint)
local checkpointStage = 5
local checkpointPlatform = Instance.new("Part")
checkpointPlatform.Name = "CheckpointPlatform"
checkpointPlatform.Size = Vector3.new(15, 1.5, 15)
checkpointPlatform.Anchored = true
checkpointPlatform.CanCollide = true
checkpointPlatform.BrickColor = BrickColor.new("Bright yellow")
checkpointPlatform.Position = Vector3.new(
START_X,
STAGE_HEIGHT * checkpointStage + 4,
START_Z + (checkpointStage * PLATFORM_SPACING) + 5
)
checkpointPlatform.Parent = obbyFolder
-- TouchTrigger to set checkpoint
local checkpointTouch = Instance.new("TouchTransmitter")
checkpointTouch.Parent = checkpointPlatform
local checkpointFolder = Workspace:FindFirstChild("PlayerCheckpoints")
if not checkpointFolder then
checkpointFolder = Instance.new("Folder")
checkpointFolder.Name = "PlayerCheckpoints"
checkpointFolder.Parent = Workspace
end
checkpointPlatform.Touched:Connect(function(hit)
local character = hit.Parent
if not character then return end
local player = Players:GetPlayerFromCharacter(character)
if player then
local checkpoints = checkpointFolder:FindFirstChild(player.Name)
if not checkpoints then
checkpoints = Instance.new("Folder")
checkpoints.Name = player.Name
checkpoints.Parent = checkpointFolder
end
local lastCheckpoint = checkpoints:FindFirstChild("LastCheckpoint")
if not lastCheckpoint then
lastCheckpoint = Instance.new("Vector3Value")
lastCheckpoint.Name = "LastCheckpoint"
lastCheckpoint.Parent = checkpoints
end
lastCheckpoint.Value = checkpointPlatform.Position + Vector3.new(0, 5, 0)
-- Update leaderstats stage to checkpointStage since this is the first checkpoint reached
local leaderstats = player:FindFirstChild("leaderstats")
if leaderstats then
local stage = leaderstats:FindFirstChild("Stage")
if stage then
stage.Value = math.max(stage.Value, checkpointStage)
end
end
end
end)
-- On player spawning, check for checkpoint saved and place accordingly
Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function(character)
local checkpoints = checkpointFolder:FindFirstChild(player.Name)
if checkpoints then
local lastCheckpoint = checkpoints:FindFirstChild("LastCheckpoint")
if lastCheckpoint and lastCheckpoint.Value then
local hrp = character:WaitForChild("HumanoidRootPart", 5)
if hrp then
hrp.CFrame = CFrame.new(lastCheckpoint.Value)
end
return
end
end
-- default spawn at game spawn location if no checkpoint
local hrp = character:WaitForChild("HumanoidRootPart", 5)
if hrp then
hrp.CFrame = spawnLocation.CFrame + Vector3.new(0, 3, 0)
end
end)
end)In this build
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local ServerScriptService = game:GetService("ServerScriptService")
local Workspace = game:GetService("Workspace")
-- Create main container for obby parts to keep workspace clean
local obbyFolder = Workspace:FindFirstChild("ObbyParts")
if not obbyFolder then
obbyFolder = Instance.new("Folder")
obbyFolder.Name = "ObbyParts"
obbyFolder.Parent = Workspace
end
-- SpawnLocation already exists at origin (v0.1)
local spawnLocation = Workspace:FindFirstChildWhichIsA("SpawnLocation")
if not spawnLocation then
spawnLocation = Instance.new("SpawnLocation")
spawnLocation.Position = Vector3.new(0, 5, 0)
spawnLocation.Size = Vector3.new(6,1,6)
spawnLocation.Anchored = true
spawnLocation.CanCollide = true
spawnLocation.Parent = Workspace
end
-- Leaderstats for stage tracking (starts at 0)
Players.PlayerAdded:Connect(function(player)
local leaderstats = player:FindFirstChild("leaderstats")
if not leaderstats then
leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
end
local stage = leaderstats:FindFirstChild("Stage")
if not stage then
stage = Instance.new("IntValue")
stage.Name = "Stage"
stage.Value = 0
stage.Parent = leaderstats
end
end)
-- Constants for obby
local START_X = 0
local START_Z = 30
local STAGE_HEIGHT = 8
local PLATFORM_SIZE = Vector3.new(10, 1.5, 10)
local PLATFORM_SPACING = 12
local LAVA_LEVEL = 2 -- Y level of lava surface
local NUM_STAGES = 8 -- First chunk towards checkpoint 1 (5+ stages will be later)
-- Create base lava floor spanning far across X and Z under entire first section
local lavaBase = Instance.new("Part")
lavaBase.Name = "LavaBase"
lavaBase.Size = Vector3.new(100, 4, 100)
lavaBase.Position = Vector3.new(0, LAVA_LEVEL - 2, START_Z + (NUM_STAGES * PLATFORM_SPACING)/2)
lavaBase.Anchored = true
lavaBase.BrickColor = BrickColor.new("Bright orange")
lavaBase.Material = Enum.Material.Neon
lavaBase.Parent = obbyFolder
lavaBase.CanCollide = true
-- Touch damage function for lava parts
local function onLavaTouched(hit)
local character = hit.Parent
if not character then return end
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid and humanoid.Health > 0 then
humanoid.Health = 0
end
end
lavaBase.Touched:Connect(onLavaTouched)
-- Build safe platforms ascending upwards, staggered along Z axis with some X variation
for stage = 1, NUM_STAGES do
local platform = Instance.new("Part")
platform.Name = "StagePlatform_" .. stage
platform.Size = PLATFORM_SIZE
platform.Anchored = true
platform.CanCollide = true
platform.BrickColor = BrickColor.new("Medium stone grey")
platform.Position = Vector3.new(
START_X + ((stage % 2 == 0) and 5 or -5),
STAGE_HEIGHT * stage + 3,
START_Z + (stage * PLATFORM_SPACING)
)
platform.Parent = obbyFolder
end
-- Create small lava hazards (lava "pools") blocking direct path, forcing jumps
for hazardIndex = 1, NUM_STAGES do
local lavaHazard = Instance.new("Part")
lavaHazard.Name = "LavaHazard_" .. hazardIndex
lavaHazard.Size = Vector3.new(8, 3, 8)
lavaHazard.Anchored = true
lavaHazard.CanCollide = true
lavaHazard.Material = Enum.Material.Neon
lavaHazard.BrickColor = BrickColor.new("Bright red")
lavaHazard.Position = Vector3.new(
START_X,
LAVA_LEVEL + 1,
START_Z + (hazardIndex * PLATFORM_SPACING) - (PLATFORM_SPACING / 2)
)
lavaHazard.Parent = obbyFolder
lavaHazard.Touched:Connect(onLavaTouched)
end
-- First checkpoint platform above stage 5 (initial checkpoint)
local checkpointStage = 5
local checkpointPlatform = Instance.new("Part")
checkpointPlatform.Name = "CheckpointPlatform"
checkpointPlatform.Size = Vector3.new(15, 1.5, 15)
checkpointPlatform.Anchored = true
checkpointPlatform.CanCollide = true
checkpointPlatform.BrickColor = BrickColor.new("Bright yellow")
checkpointPlatform.Position = Vector3.new(
START_X,
STAGE_HEIGHT * checkpointStage + 4,
START_Z + (checkpointStage * PLATFORM_SPACING) + 5
)
checkpointPlatform.Parent = obbyFolder
-- TouchTrigger to set checkpoint
local checkpointTouch = Instance.new("TouchTransmitter")
checkpointTouch.Parent = checkpointPlatform
local checkpointFolder = Workspace:FindFirstChild("PlayerCheckpoints")
if not checkpointFolder then
checkpointFolder = Instance.new("Folder")
checkpointFolder.Name = "PlayerCheckpoints"
checkpointFolder.Parent = Workspace
end
checkpointPlatform.Touched:Connect(function(hit)
local character = hit.Parent
if not character then return end
local player = Players:GetPlayerFromCharacter(character)
if player then
local checkpoints = checkpointFolder:FindFirstChild(player.Name)
if not checkpoints then
checkpoints = Instance.new("Folder")
checkpoints.Name = player.Name
checkpoints.Parent = checkpointFolder
end
local lastCheckpoint = checkpoints:FindFirstChild("LastCheckpoint")
if not lastCheckpoint then
lastCheckpoint = Instance.new("Vector3Value")
lastCheckpoint.Name = "LastCheckpoint"
lastCheckpoint.Parent = checkpoints
end
lastCheckpoint.Value = checkpointPlatform.Position + Vector3.new(0, 5, 0)
-- Update leaderstats stage to checkpointStage since this is the first checkpoint reached
local leaderstats = player:FindFirstChild("leaderstats")
if leaderstats then
local stage = leaderstats:FindFirstChild("Stage")
if stage then
stage.Value = math.max(stage.Value, checkpointStage)
end
end
end
end)
-- On player spawning, check for checkpoint saved and place accordingly
Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function(character)
local checkpoints = checkpointFolder:FindFirstChild(player.Name)
if checkpoints then
local lastCheckpoint = checkpoints:FindFirstChild("LastCheckpoint")
if lastCheckpoint and lastCheckpoint.Value then
local hrp = character:WaitForChild("HumanoidRootPart", 5)
if hrp then
hrp.CFrame = CFrame.new(lastCheckpoint.Value)
end
return
end
end
-- default spawn at game spawn location if no checkpoint
local hrp = character:WaitForChild("HumanoidRootPart", 5)
if hrp then
hrp.CFrame = spawnLocation.CFrame + Vector3.new(0, 3, 0)
end
end)
end)