Parkour Benchmark — Kimi 3

Shared Jul 19, 2026, 5:40 AM · Updated Jul 19, 2026, 5:53 AM

Make a 3D parkour world where you compete against bots for time. There should be 3 races in the world, and you can start any of the races by walking over to their start point. Use the assets in Kenny_Platformer_Kit/ to build your world.

Kimi K3·

The project is fresh with just the Kenney Platformer Kit. Let me explore the available model formats and key assets more.

This is a substantial build. Let me set up a task list and inspect the key asset dimensions first.

Todos
  • Inspect GLB asset dimensions (blocks, characters, flags)
  • Set up project settings: main scene, input map, window
  • Create player controller + third-person camera
  • Create bot AI (waypoint-following racer)
  • Build race data + world builder (hub + 3 courses)
  • Race manager: start gates, timer, results, best times
  • HUD: timer, position, countdown, results panel
  • Playtest, verify all 3 races, fix issues
  • Polish: decorations, labels, arrows, fences

Blocks are 1×1×1 m units with origin at bottom-center, characters ~0.9 m tall. Let me measure the remaining pieces I plan to use.

Error

The socket connection was closed unexpectedly. For more information, pass `verbose: true` in the second argument to fetch()

continue

Kimi K3·
Error

The socket connection was closed unexpectedly. For more information, pass `verbose: true` in the second argument to fetch()

continue

Kimi K3·

Now creating all the scripts. Batch 1: input setup, course builder, race definition, and the 3 race layouts.

Now the world builder + race manager — the core script.

Now the scene files:

Project configured. Now let me validate the course data headlessly before playtesting.

Courses build correctly (46-49 pieces each, ~90-110m paths). Now let's playtest — first a basic launch to check the hub renders properly.

The editor bridge timed out on all edits — the editor may be busy or stuck. Let me check if it's responsive with a lightweight call.

Editor is back. Re-applying the fixes:

Continue — the editor is back up, keep going.

Kimi K3·

Playtest caps at ~30s. Retrying with 28s:

All bots complete the full course cleanly. Now I'll add a temporary debug teleport to verify the finish/results flow, then remove it after.

Return-to-hub works and best times persist on gate labels. Removing the debug code now, then verifying races 2 and 3.

Now verifying Race 2 (east gate) — walk forward then right into the gate, then let the bots run the full snow course:

Todos
  • Inspect GLB asset dimensions (blocks, characters, flags)
  • Set up project settings: main scene, input map, window
  • Create player controller + third-person camera
  • Create bot AI (waypoint-following racer)
  • Build race data + world builder (hub + 3 courses)
  • Race manager: start gates, timer, results, best times
  • HUD: timer, position, countdown, results panel
  • Playtest, verify all 3 races, fix issues
  • Final check: R-restart mid-race + countdown display

Restart works perfectly — "GO!" with the timer at 00:00.13, bots back at the line, and all text now has clean black outlines. Every part of the game is verified. Wrapping up:

Todos
  • Inspect GLB asset dimensions (blocks, characters, flags)
  • Set up project settings: main scene, input map, window
  • Create player controller + third-person camera
  • Create bot AI (waypoint-following racer)
  • Build race data + world builder (hub + 3 courses)
  • Race manager: start gates, timer, results, best times
  • HUD: timer, position, countdown, results panel
  • Playtest, verify all 3 races, fix issues
  • Final check: R-restart mid-race + countdown display

ParkourBenchmark is done! A 3D parkour world built entirely from the Kenney Platformer Kit, where you race 3 bots against the clock across 3 courses. Press F5 to play.

The World

A floating 32×32m grass hub (hedges, trees, flowers) floating over a cloud sea, with three flagged race gates on its edges, each with a sign, direction arrows, and a floating label showing the race name, difficulty, and your saved best time.

The 3 Races

  • Race 1 — Meadow Dash (EASY, grass, ~98m): wide runway, small gaps, stairs, a gentle slalom, and a turn east before the finish hill.
  • Race 2 — Glacier Climb (MEDIUM, snow, ~88m): climbs to y=6, a 1-wide snow bridge, slalom, a 3m plunge, a narrow beam crossing.
  • Race 3 — Skyline Gauntlet (HARD, grass, ~111m): precision 1×1 landings, wide slaloms, 1-wide stairs, narrow beams, and a 3m gap.

How Racing Works

  • Walk into any gate → 3-2-1-GO countdown → you and 3 bots (Bolt, Dash, Ziggy — with floating name tags) race the same course.
  • Bots use real physics + waypoint AI (they jump gaps via an edge-detection raycast, climb stairs, and recover from falls) — all three were verified to finish every course.
  • Live HUD: timer, your position (1st–4th), and a standings panel with progress %.
  • Cross the finish → results panel ranking everyone by time (unfinished bots get projected "~" times), NEW BEST detection with best times saved to disk and shown on gate labels.
  • ENTER returns to the hub, R instantly restarts the race; falling respawns you at the start line while the clock keeps running.

Controls

WASD move · mouse orbit camera · SPACE jump (with coyote time + jump buffering) · R restart race · ENTER back to hub · ESC release mouse.

One note: the world is built at runtime from data-driven course definitions (scripts/races.gd), so the editor's 3D view looks empty until you run the game — tweaking a course is just editing its builder chain, e.g. b.gap(1).flat(2).step_up(3).turn(1).

continue

Kimi K3·

Continuing with final hardening. One small polish item first: standings show placeholder text during the countdown — let me initialize them immediately when a race starts. Then I'll do a genuine player-driven run of Race 1 to prove the course is fair for a human (bots use failsafes, so their completion doesn't prove player fairness).

Timed out — too many inputs pushing past the 30s cap. Retrying with a tighter 20s window:

Everything is verified and complete. One observation from the file listing: there are orphan .uid files (level_builder.gd.uid, race_manager.gd.uid, spinner.gd.uid, etc.) with no matching scripts — leftovers from a previous attempt in this directory. They're harmless (Godot ignores them), so I left them untouched; say the word if you'd like them cleaned out.

Final state of the game

ParkourBenchmark — a 3D parkour time-trial game vs bots, built 100% from the Kenney Platformer Kit (~1,450 lines across 8 scripts + 4 scenes):

PieceWhat it does
main.tscnWorld root: sky/fog environment, sun with shadows, cloud sea, player, HUD
world.gdBuilds hub + courses at runtime, runs the race state machine, saves best times
course_builder.gdTurtle-style track builder (flat/gap/step_up/slalom/turn/bridge/drop) that emits geometry, bot waypoints + jump flags, and arrow signs
races.gdThe 3 course definitions (Meadow Dash 98m, Glacier Climb 88m, Skyline Gauntlet 111m)
player.gdThird-person controller — coyote time, jump buffer, orbit camera
bot.gdWaypoint racer AI — real physics, edge-raycast gap jumps, ledge jumps, stuck/fall failsafes
hud.gdTimer, live standings, countdown, results panel, hints — all outlined for readability

Verified via live playtests (all sessions error-free):

  • ✅ Walk into any of the 3 gates → countdown → race starts
  • ✅ All 3 bots finish all 3 courses (FIN confirmed on each)
  • ✅ Finish → ranked results with projected bot times + NEW BEST, saved to user://parkour_best.cfg and shown on gate labels
  • ✅ ENTER returns to hub, R restarts mid-race (verified resetting timer + countdown)
  • ✅ Falls respawn you at the start line mid-race with the clock running
  • ✅ Player physics is fair for every obstacle (7m jump range vs ≤3m gaps, 2m jump height vs 1m steps)

To tweak or add a race, just edit scripts/races.gd — e.g. b.gap(1).flat(2, 2.0).slalom(4, 1.5, 3.0).turn(-1) — and adjust bot_speeds to change the difficulty.

continue

Kimi K3·