A daily devlog documenting my journey building a turn-based RPG, with many other elements mixed in for fun, in Godot
DungeonManager
: stores and manages ActiveDungeonEncounters
, a list of enemy data for each room.DungeonRoomManager
: tracks the current dungeon room index and handles moving to the next room.NextRoom()
and the enemies level up afterward.Node2D
s (Position1
–Position4
) in the EnemyContainer
.UpdateButtons()
..Position
directly from a Container
node isn’t valid, which blocked our initial positioning attempt. Resolved by attaching Node2D
s as children and referencing their positions instead.OnVictoryPressed
logic.This was a big structure day — a lot of today’s progress happened behind the scenes but will pay off every time a player enters a dungeon. Building out the DungeonManager
and DungeonRoomManager
singletons gives the game a scalable backbone for dungeon encounters and room transitions. They’re flexible, decoupled from the UI, and pave the way for future features like randomized dungeons, difficulty scaling, and branching paths.
Solving the enemy overlap with a visual node layout approach was a good reminder that not everything has to be code-heavy — sometimes the editor and some clean structure are all you need. I’m also happy with how the dungeon rooms load smoothly now and how simple it is to configure future encounters.
With the core dungeon loop in place and feeling smooth, the game is finally starting to resemble a real RPG experience. Tomorrow’s goal of improving target selection will polish the flow further, and then it’ll be time to tackle animations, more dynamic encounters, and deeper systems.