I wrote about A Stray 7drl last year, and this year I finally remembered to participate in the annual 7DRL event. Although I failed to submit a working copy due to my terrible project management skills, I do feel that I've completed a lot, thanks to the time-constraint event.
The ideas of my attempt this year is here. I actually had not even started to programming anything listed on that post. All my time was spent on developing yet another Roguelike engine. Maybe I can reuse the code next year. I do plan developing my personal life-long-ish project on it, so each following year's 7DRL might be an architectural test on the engine for me.
By the way, I threw away all the old code described in A Stray 7drl, because I felt that it was faster than recovering my memory on what I've done before.
So here is a list of what I've completed:
- The UI logics and the game logics are totally separated and they run in different threads respectively. So when the game logic is busily running, UI is still responsive. The design is more or less like a modern Model-view architecture like Elm.
- And they talks to each other in a somewhat asynchronous way: game loop can run ahead of the UI, and wait when the player's input is required. UI display each turn one by one in each rendering frame, so unlike ToME4, things happen gradually instead of all at once visually. This hopefully maximizes the benefit of this multi-threading architecture.
- The game logic is strictly a state machine, that accept an input, take transitions, and eventually produce an output. This makes the game logic easier to test with and reason about.
- The game logic is ECS-based. Each action taken produces transitional effects into the ECS, which are essentially messages within the ECS.
The game itself is still a vaporware and these architectural decisions are still subject to change. I'm doing quite a lot research recently, for example I watched Bob Nystrom: Is There More to Game Architecture than ECS(Nystrom 2018) and Brian Bucklew: Data-Driven Engines of Qud and Sproggiwood(Bucklew 2015), and think heavily about these important decisions.
The big take-away from A Stray 7drl is that I should have regular updates on the project within a period of time. Otherwise I quickly got lost when I restart working on that, and would rather restart from scratch. So I'm planning on writing about it regularly, and once the game is feature-rich enough I'd also post on Sharing Saturday thread of the roguelikedev subreddit.