First-person Backrooms platformer made in Godot
A first-person Backrooms platformer in early development, with TrenchBroom-built levels and base movement in place.
Overview & Goals
2026 Godot Project is a first-person Backrooms platformer I built solo in Godot 4.6. I did not want to reinvent what already exists, so I built on proven foundations: levels come into the engine through the FuncGodot addon, and movement started from the Ultimate Character Controller template, which I reworked into the platformer feel I was after. Across 75 commits I took it from an empty project to a playable prototype with five service singletons, a working TrenchBroom level pipeline and a controller tuned to my own movement rules.
Game Concept & Design
You walk, run, jump, crouch and slide through liminal Backrooms rooms and corridors. Movement started from the Ultimate Character Controller template, and most of my design time went into reshaping how it feels. Speed and camera height ease between values instead of jumping. You get less control in the air than on the ground. A 0.3-second coyote timer forgives a jump you press a frame or two late, and I clear it the moment you use it, so one ledge gives you one jump. Sliding locks your direction and takes your mouse look away, which makes committing to a slide a real decision. I fire footstep sounds on the zero-crossing of the head-bob curve, so the audio and the camera run off the same phase and your steps stay locked to your gait.
Architecture & Systems
I split the runtime into five services with one job each: game state, input, audio, scenes and UI. One script owns mouse capture, so pausing cuts gameplay input in a single place instead of leaving a flag check in every other script. Scene changes load on a background thread behind a loading screen, and a lock stops a second change starting mid-load. I blend the real load percentage with a minimum display time, so the bar fills smoothly instead of jumping from 0 to 100. Audio runs through a manager I wrote: it reuses a pool of players, picks a random clip for each footstep, and fades sounds out instead of cutting them.
The Level Pipeline
I build levels in TrenchBroom, a brush editor from the Quake lineage, and import them into Godot 4 with the FuncGodot addon, which I set up and configured for this project. I defined six custom entity types: checkpoints, kill volumes, hint triggers, moving platforms and two light fixtures. Their properties carry straight out of the editor into typed GDScript classes, and the light fixtures come with a proxy model so I can see them while laying out a room. Brush faces resolve to world-triplanar PBR materials, which gets me tiling, normal-mapped surfaces on geometry from a 1990s map format without touching a single UV. Making that stable took real toolchain debugging: a stale engine cache kept spawning ghost folders, and imported models were saving to the wrong path without telling me.
Project Outcome & Lessons Learned
The prototype runs a full loop: menu, level, death, respawn. I also built a settings screen for resolution, fullscreen, vsync, multi-monitor and render scaling. The lesson I keep coming back to is that getting the tooling right first paid for itself, and that there is no reason to write from scratch what good versions of already exist. FuncGodot and an existing character controller saved me weeks; the value I added was in the setup, the custom entities and the movement tuning. Once the TrenchBroom pipeline worked, laying out a level was design work instead of programming. I also learned how much of good movement is plain engineering: smoothing, timing windows and interpolation curves that a feature list has no way to show. I plan to come back to this project. For now a team opportunity took priority: we are building AI quality-detection systems. The work is full-stack development, which is the direction I want to grow in. I also get to plan and coordinate the work with a team, which is building my project management skills.
| Genre: | First-Person Backrooms Platformer |
| Project Timeline: | Mar 31, 2026 - May 19, 2026 |
| Project Status: | Prototype |
| Game engine: | Godot 4.6 (Jolt Physics) |
| Programming language: | GDScript |
| Level tools: | TrenchBroom + Func_Godot |
| Team size: | Solo |
| Role: | Designer, Developer & Artist |
Check out my code and see how the project is built