Chasing Elysium - June 2026 Devlog

The first task this month was to create “graphics packs” for the player character. These graphics packs are basically reusable nodes that contain all of the graphics and animations for a given character as well as a common interface for setting what animation is playing. Modularity and reusability! This will be particularly useful when I am making NPCs and/or giving the option to swap which character the player is playing as. Just swap out the graphics pack and it all updates perfectly. Effectively I am doing dependency injection with the graphics.

Next up was reimplementing the dialogue system according to the new format. I ported over the extended text labels I wrote before as they are effectively fine (albeit with some tweaks I really want to make at some point). Then I implemented the dialogue box and the dialogue node. The dialogue node has a simple overrideable @abstract method that plays all the dialogue. It does this by providing a simple API which internally updates the attached dialogue box, then awaits the dialogue box calling a method on the dialogue to advance to the next line.

On the dialogue box end of things, we have a play method which you pass a dialogue node into. The dialogue box attaches the dialogue to itself, then calls the dialogue’s play method.

I’m not 100% satisfied with it. Right now we are forced to start from the dialogue box. It might be nice to be able to have the dialogue itself call play with a dialogue box passed in. It might also make a few things a little cleaner? I will have to make note to take another pass at it at some point. I do think this structure is mostly good though. Dialogue and the dialogue box are separated, we can implement multiple boxes or even multiple types of box so long as they implement the same interface, then dialogue can be played on whatever box you want. Notably, the dialogue box controls when the dialogue advances, so we can have dialogue boxes that respond to input or auto-advance, etc.

The last thing I worked on this month is the combat system. This is something I am still actively working and and carefully considering. I liked a lot of the old design, but there are ways it can be improved including (but not limited to) properly making use of hitbox and hurtbox type Area2D nodes. The old combat controller was simply too big for its own good even with functionality divided into “submodules” so I am working on breaking that up as well. Projections are becoming individual node types that can be instantiated by attacks (or even outside attacks). Hitboxes are also going to be node types that can be instantiated. Smaller, more maintainable, more exchangeable and extensible pieces!

It’s been a bit of a busy month. Not as much progress as I’d like, but I am trying to be mindful about how I go about this to make sure it’s a much better design this time.

Next month’s goals:

  • Finish the combat system groundwork
  • Review the dialogue code with fresh eyes
  • Figure out how cutscenes will be implemented
  • Add toasts back in

Some of these will be easy, some will be harder. I want to take no more than a week on each.