The end of the year is a good time to retrospect. I thought it would be an interesting idea to start writing about the game I'm currently working on by showing how it evolved during the first full year of development and where it is going next.
Soulash is a fantasy roguelike with survival elements where you play a character set on destroying the world.
But let's start from humble beginnings. The very first screenshots of the game, a ruined village of Kabula with some NPCs and a map with a few goblins to test basics of combat.
A little over 1 year ago, this was but a prototype that I wasn't sure where I wanted to take. At the beginning of the year 2018, I got inspired by the Goal Oriented Action Planning as an AI system. I thought maybe I'll use that to make a strategy roguelike, with the main focus on trading and crafting.
In January I made an attempt on tiles and new GUI to support that direction.
Tiles were eventually pushed for when the gameplay was more set in stone, as "tweaked" ASCII is sufficient for now. It was also a time when I was implementing GOAP for villagers and a first version of the crafting system
The crafting system consists of fishing and butchering to produce food, skinning to gain leather and fur from animals, woodcutting to get wood and mining for ore. All resources were to be processed in the crafting system either by the player character or ordered to be made by one of the NPCs.
Unfortunately, this match of a trading game with ordering NPCs that you don't see and a traditional roguelike didn't turn out well, at least with my take on that mix. At that point, I was worried that it might become yet another of the countless projects that I have thrown away. For a short period, I even thought of changing direction more toward RPG.
After some consideration, I decided it was time to go back to the roots and look for a different path. I definitely wanted to have a map maker, as I don't like what current procedural generation offers in most roguelikes, which is often just a different shape of the same generic map. I've made a simple editor.
I wanted to build a more consistent world over just moving between disconnected maps, so I've done that.
I've made a choice to scrap all talking, trading and other NPC interactions and decided to simplify things (a little). The main focus of the game from that point is combat and survival and all mechanics were tweaked to support that direction.
I decided to stick with ASCII and create a simple animation maker.
And started making professions and their abilities.
The UI has changed yet again.
And from the first humble village of Kabula, a new world is emerging.
A new character creation screen was made with 7 races and 8 professions to choose from.
And new iteration of inventory screen.
More game shaping decisions have been made. All items are now temporary, limited by durability. These items cannot be repaired, only recreated through crafting or replaced by looting. Salvaging has been added as a way to gain new recipes and recover some resources, making all found items useful, even the broken ones. On leveling up it's possible choose one of 3 abilities, one is always from the selected profession and 2 random in the pool. This allows for developing more interesting hybrid characters.
And to finish the year with something interesting, I've created a random NPC description generator, which gives a bit of a soul to the enemies. It's definitely much more interesting to fight Delbert, a slim human fisherman with long brown hair, blue eyes that looks a bit nervous than just another, generic human fisherman. All descriptions are loaded from files, different for different races, so the system is easily extendable.
There were some technical decisions that I feel paid off, like choosing ECS for code architecture (for which I scrapped my first 2 months of work in 2017) because I feel like I have a very maintainable codebase even with 72 different components and 62 systems that I actually want to expand upon for years to come. Writing my own engine in C++ gives me great control and allows me to finish even the crazy ideas, like the consistent world. However my biggest regret this year is that I didn't decide to write unit tests in C++, but I hope to make amends soon.
I started this year with 7.1k lines of code written for engine and 13.7k lines of code written for the game. At the end of the year, the engine has 8.3k lines and the game 39.6k lines of code. Even though the number of lines doesn't mean much, as every programmer write differently and the same feature can take 300 lines or 2000 lines, it is still very encouraging to know that I have tripled the size of the game during this year. Being able to look back and see progress helps keep motivation. And because I measured the time it took me to do tasks, I now know that coming into 2019 I should be able to squeeze about 1500 hours for game development. I can adjust my plans accordingly.
So, what's next for Soulash and what are plans for 2019? The core gameplay is already in place. The next milestone will be a playable alpha version, so hopefully, I can gather some feedback. In the first quarter, my main focus will be playtesting and improving the gameplay for the first 5 character levels of all professions. After that, fixing bugs, improving gameplay and expanding the world further.
I hope you found the read interesting. If you would like me to explain any of these topics in depth, please let me know in the comments below. You can also follow me on Twitter, where I share news and gifs from the game. See you in 2019!