Race Day · UEFN

On-foot racing in Fortnite, built with Claude

A real game in Unreal Editor for Fortnite — custom Verse logic, zone-based tracks, persistent per-mode leaderboards, NPC enemies, and a Claude Code workflow that ships features in phases.


Phase 10

Per-mode Leaderboard

5

Progression zones

9

Verse-aware Claude skills

4-mode

Solo · Duos · Trios · Squads

The intention

UEFN gets pitched as a builder for casual game modes. I'm using it to ship a real game — on-foot racing with a 30-second cinematic countdown, persistent leaderboards across solo and team modes, AI enemy racers, and a victory cinematic. Built entirely from custom Verse logic, not the official Rocket Racing devices.

The thesis: a designer-engineer working with Claude can match what used to take a small studio. The build is phased — every phase ships as a playable, testable increment. Each phase ends with a smoke test passing, a CLAUDE.md doc updated, and the next phase scoped.

Where it is now

Phases 0–8 are complete and shippable: project setup, basic race MVP, timing & scoring, checkpoints, multiplayer, countdown + speed boosts, persistent personal best, zone-based architecture, per-zone item progression with NPC allies. Phases 9–10 are in active testing — team support across duos/trios/squads, three hostile Brother Bill NPC racers with AI navigation, and per-mode persistent leaderboards.

The level

Race Day starts at a control panel in the build hub. The sign overhead reads RACE DAY in lit-up letters. Players spawn in the lobby, ready up, and get pulled into the cinematic countdown.

Race Day hub with control panel, RACE DAY signage, and BrotherBill spawn

The build hub — control panel, RACE DAY sign, lobby spawn area, and a BrotherBill spectating.

The track

Five sequential progression zones (Zone0Start → Zone4Finish) plus optional bonus zones for boost pads. Built on volume_device so the same architecture supports on-foot now and vehicles later. Wrong-zone entry is rejected — you can't skip ahead.

Top-down view of the race track with five progression zones rendered as translucent blue volumes

Top-down view of the track. The translucent blue boxes are the five progression zones, each one a volume_device wired into the Verse race manager.

The flyover

Every race opens with a 30-second countdown. The countdown plays a cinematic flyover of the track so players see what they're about to run before they run it.

The 30-second countdown flyover — the track previewed before the gates drop.

The HUD

Real-time race timer, placement indicator, segment progress (Start → 1 → 2 → 3 → 4 → Finish), and per-zone split times. Custom Verse-driven — every HUD element is a hud_message_device wired to game state via @editable refs.

In-game HUD blueprint in UEFN editor showing placement, timer, and segment progress

In-game HUD — placement and timer at the top (1st · 01:30), segment progress along the side (Start → 1 → 2 → 3 → 4 → Finish).

The win screen

Race Complete modal with placement, finish time, and dual leaderboards: This Race vs All Time persistent. TO LOBBY exits, READY UP queues another race.

Win screen modal showing Race Complete, 1st place, finish time, and dual leaderboards

Post-race modal — placement, time, dual leaderboards (This Race vs. All Time), and TO LOBBY / READY UP actions.

How Claude collaborates

The interesting part isn't that I'm using Claude — it's how the workflow is shaped. The repo has a .claude/skills/ directory with nine domain-specific skills I built for this project:

  • add-phase — plan and scaffold a new development phase
  • verse-api — UEFN device API and Verse language reference
  • verse-snippet — common Verse patterns (zone handlers, NPC nav, persistence, HUD)
  • verse-check — soft linter, run before compiling in UEFN
  • verse-debug — parse compile errors and runtime bugs from UEFN output
  • verse-concurrency — design async patterns with race / sync / rush / branch
  • verse-refactor — duplication and complexity analysis between phases
  • playtest-checklist — generate a manual playtest checklist for the current phase
  • update-claude-md — keep project docs in sync with the actual Verse code

The CLAUDE.md is 220+ lines of living spec — phase status, device wiring, conventions, common imports, key device APIs, and a growing Verse Gotchas Learned section. It's institutional knowledge that compounds: every gotcha I hit gets documented so the next session starts smarter than the last.

The workflow itself is a clean split. Claude writes the Verse files and explains what to do. I do all editor work — placing devices, wiring @editable refs, compiling with Ctrl+Shift+B, playtesting in Launch Session. UEFN project files are generated by the editor; Claude doesn't touch them. Per phase: Claude scaffolds the code and a playtest checklist, I run it, I report back with output logs and observations, Claude diagnoses and updates. Repeat until the phase passes its smoke test, then update CLAUDE.md and move on.

"The custom Claude skills + the living CLAUDE.md spec turn each session into a checkpoint. Claude doesn't have to relearn Verse, the project, or what's broken — it picks up where the last session ended."

What's next

Phase 10.5 — Production readiness. Named constants, failure logging, disconnect handling via PlayerRemovedEvent, code deduplication.

Phase 11 — Victory sequence. Explosions, winner pedestal teleport, leaderboard review with orbit camera cinematic, "RACE OVER!" broadcast.

Phase 12+. Vehicles (the volume_device architecture is already vehicle-ready), power-ups, wrong-way detection, and a public island launch.

Building games this way?

If you're shipping in UEFN, designing with AI, or curious about the workflow — let's talk.