Skip to main content

Stage 7: Rolling Rocks + cover

Course progressStage 7 of 10
~40 min
Before you start

Make sure the hidden hazard field has a fair route to Stage 7.

Build

a ramp, a CoverBlock, and rolling boulders

Learn

how timing and safe cover make moving hazards fair

Ship

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.

New words
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 part

RockRamp

Block
Open recipe
Size
14 × 2 × 36
Color
Medium stone grey
Material
Slate
Anchored
✓ Yes
Build this part

CoverBlock

Block
Open recipe
Size
10 × 10 × 2
Color
Dark stone grey
Material
Concrete
Anchored
✓ Yes
Place
Beside the ramp where players can hide
Build this part

BoulderSpawner

Block
Open recipe
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 part

BoulderTarget

Block
Open recipe
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

Learning beat

Try this

Three short experiments. Predict before you run, then test your guess.

Predict first

What happens if the wait changes from 3 to 1?

Compare

Try slow rocks and fast rocks. Which gives the best "I can learn this" feeling?

Connect

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 BoulderTarget to 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 PUSH or increase the wait.
Coach notes

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.