Skip to main content

Stage 4: KillBrick Path + dash pad

Course progressStage 4 of 10
~35 min
Before you start

Make sure gravity returns to normal before you reach Stage 4.

Build

a red hazard path and a dash pad

Learn

how speed can help a player cross danger

Ship

a stage that feels fast instead of frustrating

The big idea

Hazards create tension. A dash pad gives the player a tool. Good parkour is not just danger; it is danger plus a fair way through.

New words
hazard
something dangerous the player must avoid
dash
a quick burst of speed
fair
hard enough to be exciting, clear enough to learn

Build it

Step 1 — Build the hazard path

Create a safe path part named HazardPath, then add three red anchored parts across it:

Build this part

KillBrick_1

Block
Open recipe
Size
4 × 1 × 8
Color
Really red
Material
Neon
Anchored
✓ Yes
Build this part

KillBrick_2

Block
Open recipe
Size
4 × 1 × 8
Color
Really red
Material
Neon
Anchored
✓ Yes
Build this part

KillBrick_3

Block
Open recipe
Size
4 × 1 × 8
Color
Really red
Material
Neon
Anchored
✓ Yes

Put this Script in each kill brick:

local brick = script.Parent

brick.Touched:Connect(function(hit)
local humanoid = hit.Parent and hit.Parent:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = 0
end
end)

Step 2 — Add the dash pad

Place a neon pad before the kill bricks:

Build this part

DashPad

Block
Open recipe
Size
8 × 1 × 8
Color
Lime green
Material
Neon
Anchored
✓ Yes
Place
Before KillBrick_1
Target
DashTarget

Add a small marker where the dash should send the player:

Build this part

DashTarget

Block
Open recipe
Size
2 × 1 × 2
Color
Bright yellow
Material
Neon
Anchored
✓ Yes
Place
Past the kill bricks, near the safe landing

Make DashTarget transparent if you want it hidden.

Insert this Script inside DashPad:

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local pad = script.Parent
local target = workspace:WaitForChild("DashTarget")
local launchEvent = ReplicatedStorage:WaitForChild("LaunchPlayer")
local FORWARD_POWER = 95
local UP_POWER = 45
local cooldown = {}

pad.Touched:Connect(function(hit)
local character = hit.Parent
local root = character and character:FindFirstChild("HumanoidRootPart")
if not root then return end

local player = Players:GetPlayerFromCharacter(character)
if not player or cooldown[player] then return end

local direction = target.Position - pad.Position
local flatDirection = Vector3.new(direction.X, 0, direction.Z)
if flatDirection.Magnitude == 0 then return end

cooldown[player] = true

local launch = flatDirection.Unit * FORWARD_POWER + Vector3.new(0, UP_POWER, 0)
launchEvent:FireClient(player, launch)

task.delay(0.5, function()
cooldown[player] = nil
end)
end)

Move DashTarget until the dash sends players across the danger. The target marker is the aim.

Step 3 — Add the Stage 5 checkpoint

Place the Stage 5 SpawnLocation after the dash landing. Add StageNumber = 5 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 kill bricks punish mistakes. The dash pad gives the player a fun answer. The server Script detects the touch, checks a short per-player cooldown, then tells ParkourLaunchClient to apply the burst on the player's own character. The dash reads direction from DashPad to DashTarget, so students can aim by moving a visible marker instead of guessing which way the pad faces.

Try this

Learning beat

Try this

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

Predict first

What happens if FORWARD_POWER is 45? What about 140?

Compare

Try one version where players jump normally and one with the dash. Which feels more like a VR parkour lab?

Connect

What color should always mean "this part helps me" in your game?

Test your stage

  • Touching a kill brick resets the player.
  • DashPad sends the player toward DashTarget and across the hazard path.
  • Stage 5 checkpoint works.
  • The path feels fair after a few tries.

If it breaks

  • The dash goes sideways. Move DashTarget so it sits across the danger.
  • The dash does not fire. Make sure Stage 2's LaunchPlayer RemoteEvent and ParkourLaunchClient LocalScript still exist.
  • The hazard is too hard. Spread the kill bricks apart.
  • The dash is too strong. Lower FORWARD_POWER or UP_POWER.
  • The dash fires too many times. Check that cooldown[player] = true, task.delay(0.5, ...), and cooldown[player] = nil are in the script.
Coach notes

Keep the goal visible: students are designing feel. If they spend too long fighting vector directions, help place the pad so the launch works and move on.