Archived footage of star system view before the global refactoring.
How global singletons were killed, async race conditions resolved, and the door for custom player modifications opened
❌ The Problem
- Development stagnation: Monolithic generation and logic controller bottlenecked project progress.
- High risks: Minor changes threatened to break completely unrelated systems.
- Cascading failures: Removing the legacy global singleton caused endless compilation errors.
- Pointer errors: Instantiating subsystems before scene tree attachment broke configuration loading ($NullPointer$).
🔄 The Struggle
- Dead-end refactoring: Trimming the singleton without changing architecture immediately broke builds.
- Rigid hardcoding: Directory paths only functioned within one strictly defined file structure.
- Modding unviability: Static paths completely prevented players from installing custom user mods.
The Solution
- Separation of concerns: Monolith split into independent submodules via Single Responsibility Principle.
- Dependency injection: Global singletons replaced with explicit, controlled dependency passing.
- Asynchronous readiness: Added scene tree checks before generation, eliminating race conditions.
- Dynamic discovery: Engine now automatically locates resources regardless of folder structure.
- Language migration: Rewrote code from GDScript to C# for efficient modular development.
You must log in or # to comment.

