Shared Jul 19, 2026, 5:41 AM · Updated Jul 19, 2026, 8:15 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.
I'll build this from scratch. Let me first inspect the Kenney kit model dimensions so I can lay out the world correctly.
Now let me create the remaining scripts and the player scene.
Now set up input actions:
Now the player scene, and an update to bot.gd for name labels:
The scene saved, but the race scripts failed to parse in the subprocess (class_name cache issue), so script attachments may be missing. Let me check:
The game.gd and race.gd scripts failed to attach due to the parse errors. I'll fix the .tscn directly. Let me look at the relevant sections:
The scene saved, but game.gd and race.gd failed to attach in the subprocess (class_name cache not available headless). I'll patch the .tscn directly:
The first run likely spent time importing the GLB assets. Let me retry:
The editor overwrote my input actions when it saved project settings (it had a stale in-memory copy). Let me check and re-add them through the editor:
The editor's in-memory input map may not have refreshed yet, but the game process reads project.godot from disk. Let me playtest:
These errors may be stale. Let me clear logs, verify project.godot still has the input map on disk, and re-run:
The editor keeps overwriting project.godot with its stale in-memory settings. The robust fix: register the input actions at runtime in code instead:
Only the integer division warning remains. Let me fix that, and add temporary prints to verify race flow end-to-end:
No print output captured. Let me verify the race trigger flow deterministically with a test:
The world loads fine headless. Let me instrument the test to find where it stalls:
The full race flow verified end-to-end in simulation: countdown triggers on the start pad, bots run their paths, timer counts, finish produces standings, and fall-respawn works. Note the editor kept reverting my project.godot input-map edits, so the player script registers the input actions at runtime instead — this is robust regardless of project settings.
Here's what I built:
res://scenes/world.tscn (set as main scene)A central hub plaza built from Kenney grass blocks, decorated with trees, flowers, mushrooms and rocks. Three flag pads sit on the plaza edges — walk onto a flag pad to start that race (3-2-1 countdown, then GO).
Three courses, all built from the Kenney Platformer Kit with accurate trimesh collision:
player.gd): third-person CharacterBody3D with mouse-look SpringArm3D camera, WASD + Space jump, model turns to face movement.game.gd): state machine (free-roam → countdown → racing → results), race timer HUD, fall detection that respawns you at the race start (mid-race) or the hub (free roam), and auto-return to the hub after results.bot.gd): waypoint-path ghosts with hop arcs across gaps.Press Esc to release the mouse. Just hit play — you spawn in the hub with all three race pads labeled around you.