Static content in Soulash

This article was inspired by FAQ Friday on /r/roguelikedev.

Soulash has a big open and consistent world that feels like one map. I've made the decision early in the development to have the world map crafted in a custom editor. Then applying procedural generation on top during starting a new game. This can be viewed as a rather inefficient approach to roguelike development. Some purists say that it can't be a roguelike if the maps are not fully procedural. In my opinion full procedural generation could create many more variations of the maps but only a handful of games have made interesting, unique locations and even then often by using parts of static maps mixed with procgen.

Part of the world map consisting of 4 regions

The interesting thing in Soulash is that even though the map is mostly static, the world isn't. NPCs travel around the map, so you can have many unpredictable encounters with people, monsters or minibosses not being where you would expect them to be.

Another static thing in Soulash are templates in the configuration files. These templates describe names, base equipment, glyphs and all properties or components that make entities in the game. This means that for the entity to move around it must have a moveable component with predefined speed. The set of components are static for entities in the game but can be changed or removed during gameplay. This is important because I wanted Soulash to be highly moddable, with the ability to add a different world or even completely new setting other than fantasy at some point, while also having unpredictable gameplay required to have fun on multiple runs despite permadeath.

{ "background": { "color": [ 25, 39, 13 ], "noise": 1, "noise_intensity": 3 }, "components": [ "name", "glyph", "background" ], "description": "I wish I could just lay down here for a moment.", "glyph": { "color": [ 37, 89, 31 ], "id": 220, "tiles": [ 34 ] }, "id": 2, "name": "Medium grass" }

Above you can see an example configuration of a grass tile.

Abilities are also configurable and static, including their animations, although a few rules have been added to randomize a couple of things in the animations so they feel a little different each time.

Monster groups that spawn in an area are also configurable and static during gameplay, although I hope to enhance the system by adding more unpredictability. As I mentioned previously the entities that can move, travel freely between maps, so even though their starting locations may be similar each playthrough (same region map, but not tile) the encounters in certain places are different.

Basic items in the game are also static with predefined properties, but they can roll prefixes and suffixes that add extra power to them. These affixes are static, but the chance to have them available on an item is random.

Description of important characters in the game (minibosses) is also static. This allows me to add some lore related information in them. This is opposed to the regular beings that have their names and descriptions randomized.

And I think that's it. To summarize, Soulash has a static world map that includes multiple interesting locations, something I believe is very hard to achieve with procgen alone. On top of that, entities, items, enemy groups are statically defined in configuration files which add the ability to heavily mod the game and create more content.

Hope you enjoyed the read. If you would like to know more about any topic related to Soulash, leave a comment below and I might pick it for next week. See you next time!