Skip to main content

Stage 5: Fireball Footpath

Course progressStage 5 of 10
~32 min
Before you start

Make sure you've finished Stage 4: KillBrick Path.

Build

a footpath guarded by fireball cannons

Learn

how timing hazards change the feel of an obby

Ship

a fireball section with a checkpoint beyond it


Stage preview
Stage 5
Preview the fireball footpath with cannons guarding the route to the checkpoint.

Preview the fireball footpath with cannons guarding the route to the checkpoint.

Build this stage below

The big idea

Stage 4's KillBricks never moved. Today's hazard is the opposite — fireballs that fly across the path. The danger isn't where the brick is anymore. It's when the fireball is there.

The new design lesson is timing turns a platformer into a puzzle. To cross a fireball path, the player has to watch the pattern before they move. That waiting-and-watching beat is the difference between "press buttons" and "play smart." Real arcade games have used this trick for 50 years — the gap between obstacles is what makes the game feel like a rhythm instead of a chase.

The cannons aren't going to fire by themselves — we'll build them as two parts (a base and a barrel) and paste in a script that makes the barrel spawn a fireball every 1.5 seconds.

Build it

Step 1 — Build the path

A long narrow path that forces the player to time their crossing.

stage5Easy

Build this part

CannonPath

Block
Open recipe
Size
4 × 1 × 30
Color
Dark stone grey
Material
Slate
Anchored
✓ Yes
Place
Right in front of the Stage 5 checkpoint, stretching forward 30 studs

4 studs wide — just enough to walk, not enough to dodge sideways. That's the point.

Step 2 — Build a cannon

A cannon is two parts working together: a flat round base and a tube-shaped barrel that aims across the path.

Build this part

CannonBase

Cylinder
Open recipe
Size
2 × 3 × 3
Color
Black
Material
Metal
Anchored
✓ Yes
Place
Beside the path, about halfway along, sitting on the ground

When Shape is Cylinder, the X size is the cylinder's length (so it lies flat). Y and Z are its diameter.

Build this part

CannonBarrel

Cylinder
Open recipe
Size
5 × 1.5 × 1.5
Color
Dark stone grey
Material
Metal
Anchored
✓ Yes
Place
On top of CannonBase, rotated so it points across the path

In Properties → Orientation, try `[0, 90, 0]` to aim across the path. The cannon's tip is where fireballs will come from.

The cannon doesn't fire anything yet — it's just decoration. The script we paste next does the actual firing.

Step 3 — Add the script that fires fireballs

Right-click CannonBarrelInsert ObjectScript. Delete the placeholder code.

Paste into Script
Script

CannonBarrel

The Script goes inside CannonBarrel (not CannonBase). The barrel decides where fireballs come from.

local barrel = script.Parent
local Debris = game:GetService("Debris")

local function spawnFireball()
local fireball = Instance.new("Part")
fireball.Shape = Enum.PartType.Ball
fireball.Size = Vector3.new(2, 2, 2)
fireball.Color = Color3.fromRGB(255, 100, 0)
fireball.Material = Enum.Material.Neon

-- spawn just past the barrel tip (cylinder length is the X axis) so the
-- fireball clears the barrel instead of touching it and self-destructing
local muzzle = barrel.CFrame * CFrame.new(barrel.Size.X / 2 + 2, 0, 0)
fireball.Position = muzzle.Position

local velocity = Instance.new("BodyVelocity")
velocity.Velocity = barrel.CFrame.RightVector * 40
velocity.MaxForce = Vector3.new(40000, 40000, 40000)
velocity.Parent = fireball

fireball.Touched:Connect(function(otherPart)
local character = otherPart.Parent
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = 0
end
fireball:Destroy()
end)

fireball.Parent = workspace
Debris:AddItem(fireball, 3)
end

while true do
spawnFireball()
wait(1.5)
end

Press ▶ Play. A glowing orange fireball shoots out of the barrel every 1.5 seconds. Touch one and you respawn.

Step 4 — Make a second cannon

Two cannons is more interesting than one. Click CannonBase in Explorer, press Ctrl+D to duplicate. Do the same for CannonBarrel. Drag the two new parts further down the path. Drag the Script from your first CannonBarrel onto the new CannonBarrel so both cannons fire.

Want them to fire at different times? Open the Script inside the second cannon's barrel and change wait(1.5) at the bottom to wait(1.7). The two cannons drift in and out of sync — way harder to time.

Step 2 — Add the next checkpoint

Stage 6 checkpoint goes at the end of the fireball path. Same pattern as every other checkpoint so far.

2.1 Add another SpawnLocation

In Explorer, right-click WorkspaceInsert ObjectSpawnLocation.

2.2 Set its properties

  • BrickColor → a new color.
  • AllowTeamChangeOnTouch → checked.
  • Neutral → unchecked.
  • TeamColor → matches the BrickColor.

2.3 Tag it with its stage number

Same gesture as Stage 1. In the Attributes section of Properties, add a StageNumber attribute (number type) and set its value to 6.

2.4 Add a Team

  • In Teams, insert a new Team named Stage 6.
  • Uncheck AutoAssignable.
  • Set TeamColor to match.

Drag the SpawnLocation onto the end of your fireball path.

Understand it

A timing hazard is fundamentally different from a static hazard. Stage 4's KillBricks asked the player "can you walk around me?" — a spatial question. Today's fireballs ask "can you walk past me at the right moment?" — a temporal question. The same brain handles both, but the second one rewards patience over reflexes.

The rhythm of the fireballs matters more than the count. Two cannons firing at the same instant feel unfair; two cannons firing on alternating beats feel like a beat the player can dance to. When you place cannons, watch what they do together — the gaps between fireballs are where the game is fun.

The narrower path is a small but huge design move. On Stage 4's wide path, the player could just walk around the danger. A narrow path means the danger is always in the way. Combine narrow paths with timing hazards and the player can't avoid the puzzle — they have to solve it.

The script you pasted does four things you'll see again and again in Roblox: it creates a new Part in code (Instance.new("Part")), gives it speed with a BodyVelocity, listens for what it touches, and cleans itself up so the game doesn't fill up with dead fireballs. Don't try to memorize the whole thing — just notice that the wait(1.5) at the bottom is the rhythm, and the rest is the recipe for one fireball.

Try this

Learning beat

Try this

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

Predict first

Place two cannons right next to each other on the same side, both aimed across the path. Predict what happens — will the player ever get a safe window? Try it. What did you learn about cannon spacing?

Compare

Walk through your path without watching the fireballs first. Then go back, watch the pattern from the side for 10 seconds, then walk. How different did the two crossings feel?

Connect

Stage 6 hides the hazards — players have to figure out the safe path by trial and error. Look at your fireball path. What makes a timing hazard fair? What would it feel like if you couldn't see the fireballs at all?

Test your stage

Before moving on:

  • Press ▶ Play and start from the Stage 5 checkpoint.
  • Watch the fireball pattern before running.
  • Cross the path without getting hit.
  • Touch the Stage 6 checkpoint, reset, and confirm you respawn there.
  • Design check. Is there always a gap in the fireball pattern, or did you accidentally make a section where the player has to take a hit?

If it breaks

  • The cannon doesn't fire. The Script is probably in the wrong place. It needs to be inside CannonBarrel (not CannonBase, and not at the Workspace level). Check Explorer — the Script should be indented underneath CannonBarrel.
  • The fireball just drops to the floor instead of flying. The BodyVelocity's MaxForce is too low. Re-check that line — MaxForce = Vector3.new(40000, 40000, 40000). If you typed 4000 it won't beat gravity.
  • The fireballs come out the wrong way. The barrel's Orientation controls direction. Click CannonBarrel and try Orientation = [0, 90, 0], [0, -90, 0], or [0, 180, 0] until the fireball flies across the path.
  • Fireballs hit me through the cannon itself. The fireball spawns at the barrel's center, so if you stand right next to the cannon you're inside the spawn point. Move the cannon a couple studs further from the path.
  • The Stage 6 checkpoint doesn't work. Same checkpoint debugging as the earlier stages — check that BrickColor, TeamColor, and the Stage 6 Team all match in color, and that AutoAssignable is unchecked on the Stage 6 Team.
  • Players say it feels random, not timed. You probably have too many cannons too close together — random becomes the effect when there are no gaps to read. Delete one cannon and re-test.