20 months after starting Project N5, I decided to restart the project. In fact, a friend of mine assumed I'd do it all the way back in December 2023! Initially, I resisted, though I toyed with the idea for quite a while, before finally deciding that this is best for the project last Friday (2025-05-16).
Why?
There are two main reasons for starting the project from scratch again.
I Improved
The first reason is simple: I improved as a programmer.
Back when I started Project N5, I had never actually used Godot before. This project was my first experience developing in Godot, and to a greater extent, my first attempt at making a full-scale game! I set out a huge goal for myself, though I welcomed the challenge.
With stagnation in my progress especially in the summer of 2024, I felt I outgrew the project's codebase in some way. Also adding to that is the fact that I was working on another game with two friends, where I had to write clean solutions and well-structured code to keep the project modular (especially during the stage where we hadn't quite figured out where to take the project) and understandable for the others. This resulted in me learning the ropes of Godot and GDScript much more than I had before.
I initially tried to tackle the issue by refactoring the codebase of Project N5. Even though I made significant progress, I later felt that the codebase was flawed from the core. I felt this way especially while I was recently trying to implement a new weapon – what a hassle that was!
Which leads nicely into my second reason...
The Project Changed
For quite a while after I started Project N5, I didn't know where to take the project. In fact, I was stuck at the idea of a robot protagonist for such a long time! Laura only came to mind much later. With her, however, my ideas for the project started to change slightly.
Don't get me wrong – the essence of the game is probably still pretty much intact. However, I want to make the game a little less combat-focussed, which meant that especially the weapon structure I had built up made no sense anymore. I built the system specifically so I could implement as many different weapons as I liked. Recently, though, I decided that 4 is enough, which made the grand system redundant.
Add to this the fact that, with a lesser focus on combat, an arena made no sense at all!
Trying to bodge my old codebase – "Altlasten mit sich tragen", as one would say in German – felt wasteful.
The Current State of the New Project
Considering I started one week ago, I'm doing decently well:

What you can see here is my new Laura model (not yet finished!), with a partially-applied toon shader and an outline shader on top. The UI elements include a health counter (on top), a money counter (bottom right), a placeholder for the popup menu(s), a crosshair in the middle of the screen (the dot), and an aim helper texture also in the middle of the screen (the cross). The two boxes represent enemies, not in function, but in their physics layers and in targetability.
There are a lot of improvements: targets, for example, are now not defined by a special node setup, but rather by a Target
prefab, which can easily be positioned anywhere (enemy or environment) and be used to guide player projectiles.
The code is also so much more streamlined... I put many elements into their own components to avoid cluttering the player.gd
script with an overwhelming amount of responsibilities. That way, what was previously a 300+ line script handling player movement, aim direction, messages, equipping items, interacting with objects etc. is now a lean 50+ line script (although ofc not everything from the previous project is implemented here yet, such as the vendor interactions). Anything that's not directly related to the player has its own component script to keep things separated as much as possible. Currently, there is also no singleton SignalBus
routing wildly between any and all nodes. Instead, signals are just defined in their components and connected directly to only the components needing them. This also means that components only take care of tasks that are explicitly meant for them; the guns, for example, no longer calculate the position which the projectile is flying towards. Instead, they can now simply retrieve an aim direction from the AimManager
, requiring much less code in each weapon. Everything's so clean and I love it.
The New Weapon Arsenal
Check out the new weapons:

With these, and with the UI in the previous screenshot, you may have noticed a theme: I'm putting less time into temporary assets. While nice to play around with, it's unnecessary to spend an hour designing a UI element when I already know I'll 100% replace it down the line. Thus, most elements are either entirely simplistic (text, primitive MeshInstance3D, etc.), or just very simple textures.
Continuing
Progress has been quick, which I really liked. It felt as if project development picked up again. Of course, a lot of this has to do with the fact that I'm just programming things I've already once programmed, so I have to put less time into coming up with ideas and can instead solely focus on the implementation. However, I feel that this cleaner codebase will allow me to expand much more easily and develop a less bug-ridden game than if I had simply continued with the old codebase.
I'm happy I took this step!
