Brackeys Game Jam 2026.1 - Day 6 Closing the Loop Properly
Today was about making sure the game ends well. Not mechanically - that part was already working. The forced flip lands. The fade hits. The final line lingers in silence. The clearing feels calm before it breaks. Today was about what happens after that moment. Because a game doesn’t just need a climax. It needs closure.
From Ending to Aftermath
The fade to black already worked beautifully. The one-liner appeared exactly when it should. The emotional beat was there.
But when the screen faded and the text settled, the experience just... stopped. It didn’t feel unfinished - but it didn’t feel complete either.
So today I extended the flow. After the fade and the final line, the player now sees a subtle prompt: Press Space. When they do, a dedicated credits scene loads. From there, they can return to the main menu.
That simple addition transforms the structure of the project:
Main Menu → Journey → Realisation → Credits → Main Menu.
It now loops properly. It now feels like a full product rather than a jam prototype.
Improving the First Impression
The other major improvement today was onboarding. Previously, the “Press E to swap” hint was functional, but detached - more of a floating instruction than part of the world. So I moved it into the scene itself.
Now, when the player approaches the first meaningful moment in Chunk 1, a small popup appears in context. It informs them they can press E to swap worlds. And crucially - it disappears permanently after the first swap. No repetition. No UI clutter. Just guidance at the right moment.
It feels intentional now. Not instructional - but supportive.
Technical Layer (For Dev Readers)
Under the hood, today reinforced some architectural decisions I’m glad I made earlier.
- The tutorial popup is driven by an
Area2Dtrigger, self-connecting itsbody_enteredsignal in_ready(), making it fully reusable and duplication-safe. - The swap system emits a
world_swappedsignal, allowing the tutorial popup to react and hide itself without tight coupling. - The credits scene is its own
Controlscene, loaded viachange_scene_to_file(), keeping transitions clean and predictable. - Input for continuing is mapped to a dedicated
continueaction in the InputMap, avoiding hard-coded key checks. - The ending flow is state-driven: fade completes → text appears → input unlocks → credits load.
The Full Loop Now Exists
With today’s additions, the game now has:
- A title screen
- A structured level arc
- A mechanical escalation
- An emotional reveal
- A reaction window
- A fade to black
- A haunting final line
- A credits scene
- A clean return to the main menu
It starts properly, ends properly, restarts properly, and to be fair... that’s a complete loop.
Tomorrow’s Focus: Sound and Validation
Tomorrow isn’t about adding mechanics, it will be about atmosphere and confidence.
Top priorities:
- Add a subtle ambient forest loop.
- Possibly layer in a faint corrupted hum in later chunks.
- Balance swap SFX levels.
- Do a full Web export test.
- Share the build with friends and let them try to break it.
External playtesting is important now. I’ve tested it. I’ve tried to break it. I’ve speedrun it. But other players think differently.
If they can move from menu → ending → credits → menu without confusion... then it’s ready.
Slightly Tired, Still Proud
This project started as an idea about a forest trail that shouldn’t exist. Now it’s a complete playable experience with pacing, tension, and resolution. It’s not perfect. It’s not the biggest thing I’ve ever imagined. But it’s finished.
And that matters more. Tomorrow, I test it in the browser. I add sound. I share it. Tonight, I’m letting it sit. And it feels solid.
