Stage 4: KillBrick Path + dash pad
Make sure gravity returns to normal before you reach Stage 4.
a red hazard path and a dash pad
how speed can help a player cross danger
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.
- 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 partKillBrick_1
BlockOpen recipe
KillBrick_1
Block- Size
- 4 × 1 × 8
- Color
- Really red
- Material
- Neon
- Anchored
- ✓ Yes
Build this partKillBrick_2
BlockOpen recipe
KillBrick_2
Block- Size
- 4 × 1 × 8
- Color
- Really red
- Material
- Neon
- Anchored
- ✓ Yes
Build this partKillBrick_3
BlockOpen recipe
KillBrick_3
Block- 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 partDashPad
BlockOpen recipe
DashPad
Block- 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 partDashTarget
BlockOpen recipe
DashTarget
Block- 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
Try this
Three short experiments. Predict before you run, then test your guess.
What happens if FORWARD_POWER is 45? What about 140?
Try one version where players jump normally and one with the dash. Which feels more like a VR parkour lab?
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
DashTargetand across the hazard path. - Stage 5 checkpoint works.
- The path feels fair after a few tries.
If it breaks
- The dash goes sideways. Move
DashTargetso it sits across the danger. - The dash does not fire. Make sure Stage 2's
LaunchPlayerRemoteEvent andParkourLaunchClientLocalScript still exist. - The hazard is too hard. Spread the kill bricks apart.
- The dash is too strong. Lower
FORWARD_POWERorUP_POWER. - The dash fires too many times. Check that
cooldown[player] = true,task.delay(0.5, ...), andcooldown[player] = nilare in the script.
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.