Stage 7: Rolling Rocks + cover
Make sure the hidden hazard field has a fair route to Stage 7.
a ramp, a CoverBlock, and rolling boulders
how timing and safe cover make moving hazards fair
a stage where players dodge rocks instead of guessing
The big idea
Moving hazards are exciting when players can read them. A rolling rock should have a rhythm, and the CoverBlock should give players a safe plan.
- spawner
- a part whose script creates new game objects
- Debris
- a Roblox service that removes objects after a delay
- rhythm
- a repeated pattern the player can learn
Build it
Step 1 — Build the ramp and cover
Build this partRockRamp
BlockOpen recipe
RockRamp
Block- Size
- 14 × 2 × 36
- Color
- Medium stone grey
- Material
- Slate
- Anchored
- ✓ Yes
Build this partCoverBlock
BlockOpen recipe
CoverBlock
Block- Size
- 10 × 10 × 2
- Color
- Dark stone grey
- Material
- Concrete
- Anchored
- ✓ Yes
- Place
- Beside the ramp where players can hide
Build this partBoulderSpawner
BlockOpen recipe
BoulderSpawner
Block- Size
- 4 × 1 × 4
- Color
- Bright yellow
- Material
- Neon
- Anchored
- ✓ Yes
- Place
- At the high end of RockRamp
- Target
- BoulderTarget
Add one marker where the rocks should roll:
Build this partBoulderTarget
BlockOpen recipe
BoulderTarget
Block- Size
- 2 × 1 × 2
- Color
- Bright yellow
- Material
- Neon
- Anchored
- ✓ Yes
- Place
- At the low end of RockRamp
Make BoulderTarget transparent if you want it hidden.
Step 2 — Spawn simple boulders
Insert a Script inside BoulderSpawner:
local spawner = script.Parent
local target = workspace:WaitForChild("BoulderTarget")
local Debris = game:GetService("Debris")
local PUSH = 45
while true do
local rock = Instance.new("Part")
rock.Shape = Enum.PartType.Ball
rock.Size = Vector3.new(5, 5, 5)
rock.Position = spawner.Position + Vector3.new(0, 4, 0)
rock.Color = Color3.fromRGB(90, 70, 50)
rock.Material = Enum.Material.Slate
rock.Anchored = false
rock.Parent = workspace
local direction = target.Position - spawner.Position
if direction.Magnitude > 0 then
rock:ApplyImpulse(direction.Unit * PUSH * rock.AssemblyMass)
end
Debris:AddItem(rock, 6)
task.wait(3)
end
Press Play. Watch the rocks. Move BoulderTarget so the rocks roll down the ramp, then move the ramp, spawner, target, or cover until the stage has a learnable rhythm.
Step 3 — Add the Stage 8 checkpoint
Place the Stage 8 SpawnLocation after the ramp. Add StageNumber = 8 and the matching Team. Give this checkpoint the same settings as Stage 1 (check AllowTeamChangeOnTouch, uncheck Neutral, match the pad's TeamColor to its Team), and uncheck AutoAssignable on the new Team so players always start at Stage 1.
Understand it
The spawner creates an unanchored ball, gives it one impulse toward BoulderTarget, waits, and does it again. This impulse stays in a server Script because the rock is created by the server. That is different from launching a player character, where ParkourLaunchClient applies the impulse on the player's own computer.
Try this
Try this
Three short experiments. Predict before you run, then test your guess.
What happens if the wait changes from 3 to 1?
Try slow rocks and fast rocks. Which gives the best "I can learn this" feeling?
What other obstacle could use a rhythm instead of random danger?
Test your stage
- Boulders spawn on a steady beat.
- Players can hide behind
CoverBlock. - The route is hard but readable.
- Stage 8 checkpoint works.
If it breaks
- No rocks appear. Check the Script is inside
BoulderSpawner. - Rocks roll the wrong way. Move
BoulderTargetto the low end of the ramp. - Too many rocks pile up. Confirm
Debris:AddItem(rock, 6)is in the script. - The stage feels impossible. Lower
PUSHor increase the wait.
Stage 7 is the hardest required script in the younger path. Pair students, type as a room if needed, and protect the tuning/playtesting time.