A daily devlog documenting my journey building a turn-based RPG, with many other elements mixed in for fun, in Godot
Skill
, SkillResult
, and SkillData
.PlayerData
stat separation for permanent state (damage, stamina, block, bonuses).CombatManager
to manage:
Today marked a huge step forward. Even though the refactor felt overwhelming at times, I’m extremely satisfied with the progress I made. The biggest hurdle was just trusting myself not to break everything as I carefully rebuilt the structure — especially when deleting large portions of the old code to fully commit to the cleaner architecture.
One big “click” moment was finally seeing the usefulness of the lambda functions I’m using in the Execute()
function of my Skill
class. They make a lot more sense now compared to when I first saw them. I also realized how useful Godot’s built-in IsQueuedForDeletion()
function is for preventing async timing bugs — something I had never thought much about before.
While I feel much more confident compared to when I started this project, I also recognize how much more there still is to learn. That said, my code is much cleaner now, and seeing this growth one building block at a time gives me the confidence that I’ll reach the top of the tower that is Godot and C# eventually. Async safety still feels a bit shaky, but I have the basic concept down now — I just need more real-world practice to fully lock it in.
This refactor has set up a much stronger core for my game, and I’m happy I made the decision to do it before adding more systems. The foundation feels solid and ready for future expansion.