Official development blog

On Backtracking in Roguelikes

More than once over the years we’ve had discussions in the roguelike development community regarding the idea of “backtracking,” and with good reason: whether or not to allow it has quite a lot of implications!

Here we’re primarily talking about the player revisiting earlier floors on their journey, rather than backtracking within a single map (though I’ll cover that topic a bit separately at the end), and our discussion focuses on roguelikes of the dungeon delving variety, since open world games generally allow backtracking by default.

Examples

Let’s open with a sample cross section of the types of map transitions available in the roguelike space:

  • DCSS: Floors generally contain multiple stairs which lead to either the next floor or back to the previous one. The majority of roguelikes fall into this category, although not necessarily the multiple stairs part.
  • Cogmind: At the other end of the spectrum, some roguelikes don’t allow backtracking to earlier floors at all. This group also includes DRL/Jupiter Hell and Infra Arcana, but it’s a pretty small group overall. (DCSS variant “Hellcrawl” removes the up stairs from that game, notably increasing the difficulty.)
  • Moria/Angband: These are unique in that backtracking is allowed, but by default it generates a new floor each time! Although not true backtracking in every sense, it will naturally count in some ways. The approach is quite thematic, in any case, getting lost exploring the Mines of Moria, or maze-like fortress Angband :)
moria_using_up_stairs

Heading back up some stairs (‘<‘) in Moria for your very own “I have no memory of this place” moment.

  • Rogue: Interestingly, in the original Rogue backtracking as a part of the ongoing diving process was not a thing! You can only proceed down stairs until you acquire the amulet, then you can finally go up stairs, but each floor in the return direction is generated anew, essentially requiring playing through 51 floors to beat the game!

One traditional reason it might make sense for roguelikes to allow backtracking is because the goal is often to reach a destination then escape back out, not unlike your typical RPG dungeon adventure.

Different games handle the escape in a variety of ways, perhaps throwing some kind of new challenges at the player along the way, for example being intercepted by powerful monsters the entire way in DCSS, or being harassed on the way out of Angband by an angry Morgoth after stealing one of the Silmarils from his crown in Sil (or the newer Sil-Q).

The Ground Gives Way has an especially interesting approach, having the dungeon’s statues come to life after you acquire the trombone relic (yes, trombone) at the bottom, and you have to escape without being killed by the animated statues or whatever other creatures might still be in the way because they weren’t dealt with before. The interesting part is that you can see all these statues on the way in, foreshadowing potentially difficult bottlenecks on the way out (assuming you can’t directly confront and outright destroy all the living statues, a decent assumption for many builds).

tggw_statues

These statues will come to life on the way out and try to stop you--better have a plan when the time comes! (Tip: If you put down the trombone they’ll stop following you, giving you an opportunity to deal with other issues, rest, or prepare in other ways.)

By comparison, Cogmind is purely about escape, starting from the inside, so there’s no reason to go back as part of the conclusion.

To Backtrack or not to Backtrack

I was originally going to divide this article into two sections highlighting the “advantages and disadvantages” of each approach, but it’s not always clear whether a given mechanic or consideration would neatly fall under one of those two categories, especially given that additional design adjustments can turn a drawback into a positive, or otherwise mitigate issues, so it’s more a question of simply examining the implications of a particular choice and accounting for it in a game’s wider design. So instead we’ll take a topical approach.

Realism

Being able to backtrack is generally going to be more realistic in the RPG sense--of course your character should be able to go back and pick up that item they left behind, or fight that enemy that scared you away before. Plenty of roguelikes are designed as CRPGs first, so it makes sense they’d want backtracking for this factor alone, if anything.

Some roguelikes don’t go heavy on realism, in which case backtracking for this reason can be considered a non-issue and solely a decision to be made within the greater mechanical design, though this does mean progress ends up feeling gamier overall.

Since thematic plausibility and lore are quite important in Cogmind, I added reasoning for why you can’t backtrack, so that’s an option as well. In general it’s good practice to try to explain anything that doesn’t work as players might otherwise expect, and the one thing you can count on setting player expectations is realism! Realism is optional (these are games!), but ideally we want everything to at least make some sense within the context of the game world itself.

Stashes

While on the subject of realism, it also makes plenty of sense you can go back to collect resources left behind earlier. In a game setting, though, this can be quite an annoyance from a design perspective (harder to balance!) and is likely to either become a player crutch or lead to tedious optimal play (a topic I covered in my game design philosophy article).

As a result, you sometimes see developers coming up with ways to address issues arising from players creating “stashes” of items to return to. DCSS has an interesting historical summary of changes related to its stashes, including methods to decrease player reliance on them.

As a fully item-focused roguelike (in that items are everything to you, with no other types of character progression), stashes used to be extremely useful for an optimal player in TGGW. That’s before the aliens showed up :)

Aliens arrive while you’re napping to steal things the player has touched, and you can sometimes catch a glimpse of them running away with an item, or theoretically even try to stop them before they teleport away, but it’s pretty tough, so you’re highly encouraged to always keep anything you want to use for the long run. Under this scheme, strategically the player may also opt to leave an item on the ground, untouched until they might want it, but it can be hard to justify that decision since in many cases if it’s a quality item you won’t be entirely sure what specific item it is until you’ve picked it up to identify and it’s got that human scent all over it :P

tggw_alien

Caught red-handed, but good luck stopping them.

An alternative approach to stashes is to simply embrace them as part of the design, even going so far as to outright give the player a safe location to stash extra items they don’t need at the moment, for example in a town. Heck, throw in shops to visit while you’re at it :D

angband_town

An Angband town, which serves as a hub to return to for stashing items, or shopping.

 

angband_home_inventory_sample

An example of a player home inventory in Angband (taken from here among the great LPs by TooMuchAbstraction).

Or an even simpler approach: just give the player a practically infinite inventory :P

Of course stashes aren’t always an issue--depending on how the game works there may not even be a use for them, although the reason it comes up so often in roguelikes is that the genre is overall fairly item-heavy, not just different useful gear but especially consumables, which leans towards stashes being a thing.

If tight enough, a roguelike’s typical food clock or other similar feature pushing the player forward might also serve as a suitable countermechanic, or impose prohibitive costs on abuse/overuse of stashes.

Grind

Grinding as a strategy, or even existing as a possibility, is pretty unwelcome among modern roguelike fans. Not universally so, to be sure, but grind tends to be more of a roguelite thing.

Preventing backtracking cleanly cuts out a number of potential types of grinding (such as returning to fight weaker enemies to maximize XP or resources), thereby serving as another feature contributing to a player’s forward momentum.

Of course for some roguelikes, grind is an acceptable part of the gameplay for those who want it. No doubt the grindiest of classic roguelikes is Moria/Angband, and this honor is a direct result of backtracking as per the mechanic described earlier. Simply going up and down stairs to generate new maps (“level scumming”) gives access to theoretically almost anything that can appear at a given depth, so a player can use this to not only raise more levels from repeated combat before pressing forward, but perhaps even more in the spirit of ultimate grinding, you can keep regenerating maps to search for specific items.

In a way Angband further facilitates some of the grinding process with its “level feeling” text on entering a map, revealing how dangerous the floor feels, how good the items potentially are, and maybe even a “special feeling” like “You feel strangely lucky…” or “You have a superb feeling about this level” to indicate additional features such as a vault.

Then in 2015 the Angband maintainers doubled down by making the grind even more player-friendly, adding level feeling information directly to the status bar in numerical form.

angband_with_level_feeling_indicator

Angband level feeling indicator “LF:X-Y,” where X/Y refer to the danger/treasure level on a scale of 1~9. Y even shows as $ if an artifact was generated on the current floor.

Well fast forward to 2017 (27 years after Angband’s first release) and a new option is added to the game, one that changes everything: persistent levels!

angband_birth_options_persistent_levels

Birth options menu during Angband character creation. Even after five years, birth_levels_persist is still considered an experimental feature with potential bugs to work out.

Yes it’s optional and clearly not the default considering it removes one of Angband’s defining features, but this addition made the game playable for some who hated the original incentive to grind, dangling there like a carrot at every depth, and also gave existing players an alternative way to enjoy the content. Some technically were already playing it that way before, without the grinding, but enforcing that conduct can take a lot of self-control, especially in a game with permadeath ;)

Anyway, Angband has taken up a good chunk of the article so far because I think it’s an interesting study for this topic, considering you can experience two very different approaches to backtracking in a single roguelike. There’s a lot of conversation out there about how different types of players prefer one or the other.

Difficulty

For the same reason backtracking might make way for grinding, it also serves as a way to help soften difficulty spikes, especially those that might occur immediately on entering a new (and presumably more difficult) map. If finding it hard to press forward after using the stairs, one could theoretically go back and switch to a different map (Angband), or approach the new floor from a different point (DCSS with its multiple stairs), or go grind more resources/XP left behind in earlier areas to help advance.

Cogmind has very large maps so this isn’t as much of an issue--you’re generally not going to full clear all maps anyway, and there are usually many possible routes within a given map (especially counting terrain destruction, employed liberally by players :P), so encountering a dangerous bottleneck required for progress is not all that common. Cogmind also has “spawn protection” on main maps explicitly to give the player more breathing room on entry (though not in optional branch maps, where ambushes are indeed possible! just an extra part of their potential danger in exchange for the rewards within).

cogmind_map_export_exploring_research

It’s not usually in your best interest to explore the entirety of every map in Cogmind--they’re big and you’re likely to lose more than you gain from doing so. Above is an export of one player’s unusually lengthy journey across a large swathe of a 200×200 map in search of a particular destination (a desired exit).

Zorbus is a good example of difficulty spikes on entering a new map where backtracking is not allowed. You’re in for a crazy ride almost any time you take the stairs in this DnD-style roguelike, especially given the pretty significant jump in danger from map to map, where all the enemies are higher level than you until you catch up, and thin them out a bit first.

zorbus_map_entrance_ambush

My party in Zorbus getting ambushed by all manner of powerful enemies coming from the west, south and east right outside the opening room (clearly the NPCs know what’s up!). Large battles are common on entering a new Zorbus map. They will spot you, hunt you, tell their friends, then hunt you with their friends :P

This aspect of Zorbus was softened a bit following response to the game during its wider release on Steam recently, at least protecting the player from being right near the level boss on entry, which could understandably be pretty devastating xD

Stairs

Stairs are an interesting design issue in roguelikes regardless of which backtracking rules apply.

Without backtracking, players are stuck with dealing with whatever they encounter on the other side, though hopefully have tools for managing sudden difficult situations, such as immediately teleporting away, or perhaps specifically preparing for a potential ambush before entering.

In Zorbus, blinking away is a common strategy for escaping dire threats. Cogmind doesn’t have easy/unlimited teleporting, but also has the spawn protection rules to avoid issues in many areas, and where those don’t apply, a player might indeed decide to enter prepared for a close-range ambush, like with a launcher at the ready :P

cogmind_cave_ambush_obliteration

In most cases I feel safer entering caves with a launcher out to blast any group loitering on the other side. (It’s less of an issue for some builds, though, or if traveling with allies.)

With backtracking, developers have the unfortunate task of addressing “stair dancing,” or repeatedly using stairs as an easy escape option, even as part of localized combat tactics. Do enemies follow through stairs? How far? What else do they do if they see a player leave but don’t follow?

Various solutions, or pieces of a solution, include:

  • Nearby enemies can follow via stairs, for example in DCSS and Caves of Qud, but in games that do this there’s always the problem of just how far away will enemies follow from? It’s often still optimal if you can use this tactic to split them up, or at least temporarily break LOS to some while fighting others. Qud has an interesting addition here where you can actually use the stairs then stand on them to fight enemies that are coming one-by-one, but it’s blind combat and you can’t see which one you’re attacking.
  • Attach a resource cost to reusing stairs. For example drain stamina so the player is at an immediate tactical disadvantage after doing it, should enemies follow. Or using stairs takes more game time, further advancing whatever food/other types of clocks the game employs.
  • Reusing stairs first gives nearby enemies free attacks of opportunity.
  • Enemies that saw the player reuse the stairs wait nearby, then get the initiative/first strike on the player’s return.
  • Teleport players after going back through stairs (a possibility in DCSS variant “bcrawl“).
  • Make reusing stairs impossible while in combat (some TGGW stairs are called “twisted stairs” and behave this way, while others are normal, so traveling down the former might be more dangerous).
  • Design such that stair dancing is meaningless. For example it was originally an optimal tactic in Tangledeep, but the developer later changed it so that all monsters heal fully heal when the player leaves, but the player doesn’t have passive regeneration.

Anyway, stair dancing is definitely high on the list of issues a developer wants to consider if backtracking is a thing. My own DCSS play and stair dancing experience (circa 2010) was a strong influence on Cogmind, in that it was the whole reason I decided I didn’t want backtracking at all, despite the other advantages of making that choice which I later came to appreciate (Cogmind was originally a 2012 7DRL, so the scope wasn’t imagined to be anywhere near what it eventually became--there were far fewer considerations then :P).

Design Control

For several reasons already touched on, removing backtracking affords tighter control over progression and mechanical design since map transitions serve as a hard cutoff, turning individual maps into more isolated units. Expanding on that, the designer now also has reliable points at which to determine specifically what the player has and has not done by then, a fact that won’t change going forward. While roguelikes of the hack-n-slash variety (uh, lots of them xD) maybe don’t care so much about this aspect, there are definitely some greater benefits to be had among modern games branching out beyond that style.

Being able to refer back to an entire immutable history of player interactions with prior maps and their content, developers are able to more easily build sturdy plot lines that are harder to disrupt, for example. In open-world CRPGs where you have plot and quests, I imagine many of you have had the experience of breaking them one way or another :P

I’ve written a lot about “Weaving Narratives into Procedural Worlds” before, and it would be vastly more work to achieve the same results if backtracking were possible, simply due a ridiculously large expanding web of possibilities. If you can visit NPCs in any order, or revisit earlier locations after later events have occurred, each new connection and route ideally needs to be accounted for, or risk feeling like a loose end. Alternatively, you could explicitly block the player from doing many of these disruptive things, which is less immersive, so we’re essentially trading in a potentially gamier “no backtracking” rule in order to ensure we can create more realistic interactions throughout the world, covering more of those bases in a satisfactory manner.

In cogmind the web of possibilities is already increasingly complex the further the player reaches, and that’s assuming players cannot revisit earlier areas. To demonstrate, below is an abstract visualization of Cogmind’s potential plot-related encounters with major NPCs. The game begins at the left, and progresses to a win at the far side. The story is tightly integrated into the gameplay, and many of these encounters have implications for later encounters, for the player, or for the world in general.

cogmind_major_NPC_encounter_visualization_longterm_impact_2022

Major NPCs, colored by faction, showing those with a direct effect on some later encounter (arrows), as well as those with a relatively significant long-term impact on gameplay (bracketed length). And that’s just the major ones :P

Now for small-scale quests or one-off minor NPCs, backwards travel is not a big deal, but for anything on a grander scale, the control afforded by forcing the player forward keeps the amount of work required to a sane level. It’s certainly still doable, after all there are open-world roguelikes, but it somewhat limits the types of interconnected events and content you can add, or the level of detail added to each one, unless there’s enough dev resources to account for and build all the unique permutations, or simply have those possibilities take a more generic form (i.e. integrate them into generic faction-based systems and revolve more around dynamic relationships rather than building a compounding handcrafted story).

As far as story goes there’s definitely something to be said for allowing the player to revisit an earlier location and find a new experience there, but I’m willing to sacrifice that possibility for all the other benefits.

In Cogmind I can safely introduce extreme changes to the player’s capabilities or relationships without having to worry about the implications on earlier areas (of which there would be many, making it really hard or in some cases impossible to implement a number of my ideas :P). Also because Cogmind has a branching world structure in which we know that not all branches will be visited, the player is forced to make permanent choices about where they will travel for benefits (or challenges) XYZ down the road. Linear dungeons don’t need to consider this sort of thing, but it’s quite important for branching dungeons, where without backtracking we’ve suddenly built a new layer of design control directly into the world structure itself.

Sample Cogmind world map, in which the player can choose their route but only move upward or sideways to a new map. (This version excludes a number of spoiler areas, especially towards the end--a full-size version and more info can be found at the beginning of my series on spicing up Cogmind’s primary maps.)

Compare to DCSS, which also has a branching structure but allows backtracking, meaning players instead have a range of non-mutually exclusive options to combine, or return to later if desired. More freedom for the player, less control for the dev. Not that strong controls are necessary, of course--it’s built with this level of open-ended freedom in mind.

dcss_dungeon_map

A DCSS dungeon map linked from the wiki. It’s fairly old since it’s from version 0.19 (2016!), but it gets the point across (open image for full size).

Meta Complexity

On a larger scale, new maps serving as a cutoff point also allow players to repeatedly unload some previous content from memory. It’s just their current state and resources, and the path forward--less about traveling back and forth, and more about exploring the unknown, which in turn happens to be more in the roguelike spirit (says me :P) (but think about it!).

Backtracking and the implication that an optimal player probably needs to be keeping as much useful run background info in their mind might add yet more overhead, especially if one stops playing for a while and resumes a run in a later session--in some cases it’s much easier to pick up and continue an unfinished run in a roguelike that doesn’t have backtracking since you just check your character info and take a look at the map (where you may have even efficiently stopped right at a transition point).

Roguelikes with backtracking, especially those that don’t play out in a linear dungeon, also add a greater amount of navigational overhead that developers will ideally optimize away through good QoL features. Again looking at DCSS, you have a way to quickly perform multifloor searches for locations of matching known objects in order to autotravel to them:

dcss_search_result

Auto-travel in DCSS to facilitate what would otherwise require players to have a much better memory, or take notes :)

Of course a roguelike player isn’t usually one to shy away from complexity, but the more you can streamline the process of getting to the fun decision-making parts of a game the better.

tggw_seen_dungeon_features_list

TGGW is a linear dungeon, but backtracking to visit certain dungeon features is quite useful at times, so it also includes a convenient map list accompanied by the characters for notable features at that depth--NPCs, stairs, teleporters, mechanical valves, terrain that might contain something… (there is also a key elsewhere on the UI)

Architecture

As we’ve seen there’s a good bit of design overhead for allowing backtracking, and this comes with additional architecture costs as well.

In terms of disk/memory footprint, in the modern day it’s no problem to store lots of old map data for potential reuse, though perhaps these considerations played some role in the decision behind always generating new maps in the earliest classics (Rogue/Moria). Naturally there’s also then the need to be able to reuse that data, which requires more supporting code.

There also might be a need for partial simulation of other maps, for example in order to enable methods to combat stair dancing, or add more realistic behavior, plus of course building any additional systems to support backtracking, be they mechanics-related or for the interface.

Basically: Doing backtracking right is going to require more work under the hood compared to just forgetting about the past :P

Addendum: Intramap Backtracking

So what I really wanted to cover in this article is backtracking to previous maps, since that’s usually what people tend to have questions about, or opinions on, in our community dev discussions. Backtracking in terms of “revisiting local areas on the same map,” however, doesn’t seem to get nearly as much discussion. Since it’s a somewhat related concept and worth taking into consideration during map design, I’ll add a few notes about it here.

Some amount of backtracking in this sense is inevitable for tactical reasons (retreeaat!!!), or even strategic ones (returning to face a previously discovered challenge after preparing, visiting a local stash, etc.), though absent of player-initiated reasons to backtrack, it’s nice to be able to leave it as a mostly optional part of dungeon navigation, especially in roguelikes with larger maps.

In other words, ideally the player isn’t experiencing too much “well I’ve fully explored this section of the map, time to trek all the way back to a junction to find other new areas.” The larger the map, the more relevant this issue becomes, so I’ve definitely taken this idea to heart given that Cogmind basically has the largest maps among non-open world roguelikes :P

For this reason I like to make sure there are enough looping paths providing alternative routes to reach different areas, meaning fewer dead ends. This helps cut down on backtracking and is more likely to offer new encounters rather than having to revisit cleared/now empty space, should the player choose to continue exploring forward. Retreading old ground is generally a boring part of a roguelike, and I prefer to keep the focus on exploration.

cogmind_cavegen_analyzed

An old demonstration put together for one of my cave generation articles, with separate overlays showing both the general flow of the map and the loopable routes contained within, making it easier for the player to do more exploring than backtracking, even when traveling in a general direction (e.g. from one side of the map to the other).

As with freely backtracking to earlier maps, local backtracking can, however, be facilitated through QoL features to help mitigate the downsides.

Some roguelikes rely on autoexplore, which cuts down on the negative impact of empty space (both backwards and forwards!). Similar movement-enhancing features include “running” (commands to move in a single direction until an obstacle is hit), or even simply selecting a destination and automatically pathfinding to it, which is clearly pretty effective at unwinding a recent detour to return to a main path, or directly approach unexplored areas elsewhere.

tggw_shift_running

Exploring a TGGW dungeon with the help of shift-modified movement keys, which will continue in a given direction until stopped/reach something interesting/see something dangerous, and even follow corridors.

Personally I feel that using the mouse to click some faraway spot to return from a dead end has a good chance of interrupting the flow of exploration in some roguelikes, turning the map into a series of disjointed encounters, the relative locations of which don’t even matter anymore. This topic actually comes up a lot with respect to game design and autoexplore being an unfortunate band-aid.

But we can sorta do something about that if we want to! Wandering threats are a big help (especially combined with interwoven looping layouts :D). That passage that was cleared earlier might not be so clear on the next visit.

Cogmind has an easier time taking this to the extreme since it’s more of a living world than the typical roguelike, filled with lots of actors which means lots of potential encounters shifting around, sometimes across great distances. Some actors may leave the map, other new ones may come in… It’s a busy place, and the macro strategic environment combined with various clocks trying to push you forward mean that autoexplore is both wasteful and dangerous, which I think is a good sign in roguelike design.

cogmind_AI_general_movement

A bunch of actors (colored by category) doing their thing on one section of a map in Cogmind, and this is without player interference or other events, which might mix things up and lead to yet more variety.

Earlier I mentioned QoL’s role in mitigating some of the potential negatives of backtracking, and yet another area for it to shine here is with features such as item searching and other memory aids.

To that end I added item searching and filtering to Cogmind a couple years back, and it is pretty glorious when you need it.

cogmind_item_search_ui_demo_filters

In Cogmind filtering known items by name and/or other criteria, to highlight them on the map and path there.

Zorbus’ item search and filter interface is similarly cool, a nice implementation that also includes a closeup of the selected item and its surroundings, as well as a path to it.

zorbus_item_search_filter_sample

Zorbus item search UI in action.

Anyway, backtracking in the intramap sense is almost universally found to some degree or another in a roguelike. The real question is whether you’re going to allow players to visit old maps again, and get the most out of taking whichever approach you decide on :)

Posted in Design | Tagged , | Leave a comment

The Scrap Engine

Last time I wrote about item variants and randomization in roguelikes, and how Cogmind is purely based on a large set of static items, but more recently I’ve been running an experiment to play with not-so-static items. The entire mechanic revolves around a single new utility: the Scrap Engine.

Cogmind ASCII Art: Scrap Engine

A new utility is born.

The Scrap Engine operates like the Field Recycling Unit in that in addition to the normal inactive and active states it can also be cycled to COLLECT mode, during which it will “eat” items at the current location. These items are presumed to be disassembled and added to the Engine’s resources in order to be mixed with others and reassembled into new “constructs,” the name for a new category of randomized items. Instead of creating new ones it can also use these resources to modify existing constructs. Although in both cases the results are indeed based on the inputs, the process is not deterministic, so it’s not a pure “crafting” mechanic in that sense.

Constructs can be power sources, propulsion, or weapons. Utilities are generally defined almost exclusively by their effect and its degree, and due to the architecture (that again!) cannot even combine effects (this one is most definitely impossible in Cogmind, unlike the workarounds that enabled randomizable item stats without too much trouble), so no utility constructs, but in the end this is probably for the better due to number of other reasons I won’t get into here.

I was really unsure any of this would work at all, since internally it’s quite complex and therefore hard to gauge what outcomes are possible and whether they’d really fit into Cogmind, which has a pretty strong focus on design balance. In fact, I was unsure throughout the entirety of building the system, which made it rather challenging to work up the motivation to power through a lot of what needed to be done (I normally need to see a clear goal to help with that!).

As with building any complex system, I took the safer route of starting simple, using power constructs as a first test case since they involve the smallest number of variables. Of course that might make them a little less representative of the kind of system we’d need later, and therefore require more changes down the road (spoiler alert: it did :P), but at least it would be easier to wrap my head around this crazy feature while working on the building blocks.

Creating a construct and modifying one are two rather different processes.

Construct Creation

Construct creation requires multiple unique items as input, which is both more interesting and makes more sense since we’re trying to create something new but based on existing parts (which comes in handy as a baseline for proper balance!).

The first iteration simply averaged together the stats of all the input items. This might seem deterministic, though wasn’t necessarily easy to control since the Scrap Engine requires multiple different items to be loaded as resources, but might only use some of those to create a new construct.

Still, simply averaging stats could be more predictable than I wanted, not to mention generated less interesting results by creating items which were basically “neither this nor that” without much chance for real unique qualities that stand out, so I later changed this process to also have a chance to completely ignore a particular input source for the purposes of a single stat calculation.

Cogmind Power Construct Creation Sample

An example of a new power source created when the Scrap Engine combined a Reinforced Fission Core with a Hybrid Antimatter Reactor, showing the stats of both items alongside those of the resulting construct. Mass, integrity and heat generation values are more or less averages, but fortunately here the hybrid power’s lower energy supply did not factor in, while the total storage capacity was increased.

As you can see it also generates a new name for the item, which can be fun and sort of hint at where it came from, or in some cases its functionality. More on naming later.

Construct Modification

Despite the added randomization, new constructs are not going to be amazingly unique items, for sure, or where the system shines. Modifying constructs is where things start to get crazy.

Like creation, modification generally requires having multiple unique input parts available among the Scrap Engine’s resources. However, the more varied results of modification stem from two primary factors:

  • Only some individual stats or properties are chosen to be modified, leaving others unchanged. This can result in much wilder combinations not seen in any of the handcrafted static items.
  • Having a greater number of slots occupied by constructs increases the power of buffs, and also decreases the effects of debuffs.
Cogmind Power Construct Mod Sample

Taking our “Antimatter-Fission Reactor” created before and modifying it with another mid-game reactor that has some significant benefits but also drawbacks to balance them ends up doing nothing to our construct but giving it a much better power supply rate without the drawbacks of the original (which itself has zero storage capacity and is rather heavy). Of course this “Fission-Heavy Reactor” could have turned out much worse if only the negatives were applied, or more middling if multiple stats were modified at once.

While eating certain items gives the player a decent amount of control over what to expect from an initial construct’s creation, that control is decidedly more limited during modification, which is where things get interesting. Controlling the general direction of modification is still possible, given experience with the system, but it’s an overall swingy process that can make a build quite powerful for a time, only to eventually become weaker later on.

Playing this somewhat chaotic style is akin to riding a wave of power, working to creatively survive the downturns to rise again and crush the opposition. In that way it’s actually quite similar to Cogmind’s general premise, losing parts only to rebuild and come back stronger, but for experienced players the troughs of those waves are not usually as deep due to superior tactics and strategy, whereas a construct-based play style will force most runs to ride those waves both deep and high.

Duct Tape Derelict Legs

No these things are totally not held together using duct tape, regardless of what duct tape Dave here says! (Sketch by Zyalin, a throwback to the old piece featuring a derelict perched atop giant makeshift legs.)

Multislot Constructs

To maintain balance, multislot items used to create or modify constructs have their stats divided by their number of slots, so their “multislotness” is not a property they can transfer normally. Instead, each time a construct is modified it has a chance to expand in size, with that chance falling the larger it grows.

In fact, power and propulsion constructs can only grow in order to increase their effectiveness--having more than one at a time is not possible. This was a very early decision in the design process when I realized that possessing too many unique constructs at once would lead to the same issues I described as potential negatives of having a randart-like system of numerous variables to be familiar with mixed with Cogmind’s gameplay of frequently changing parts.

It’d be fine if there were only a few such equipment slots, but in theory player builds will eventually top out at 12~15 construct slots, which is a lot of items with procedurally shifting stats to keep track of. Too many. Then there’s also the issue of having to ensure propulsion is of the same type for it to be usable simultaneously, which would be a lot crazier if they’re all individual constructs that are changing left and right, and there isn’t even control over which of them undergoes modification. (Hybrid propulsion styles are already possible through the construct system of stat merging, anyway, even if it’s just combined into a single construct.)

Basically there’s no reason to add all that extra complication, so multislot power and propulsion it is.

Cogmind Scrap Engine Construct Build Sample (Fast Tank)

Hm, fast and tanky?! This screenshot is from a recent run of mine plowing through Armory with a treaded exoskeleton moving at a good clip (84!) due to being boosted with a bunch of combat hover units.

Weapon constructs can expand, because multislot weapons are cool, but more than one is possible and even sometimes desirable, both for handling different scenarios and also to allow a construct build to tweak its weapons looking for better candidates to retain and improve (sometimes they can get so ineffective it might be smart to start one over?). Plus some tactics work better with numerous weapons.

Cogmind Weapon Construct Sample

This two-slot cannon construct carried me through a couple floors in my last stream. Five projectiles, all with respectable damage and 9% blast crit?! The main drawback is clearly the massive heat generation, which had me running multiple cooling systems and/or injectors, and still sometimes backing off from larger fights to cool down. But it sure shined when something needed to die fast, especially with a Kinecellerator attached :D

As usual the player can always choose to not evolve extra slots of a certain type, or use non-construct parts to block slots they don’t want constructs to use either for creation or expansion.

Construct-Related Mechanics

Aside from multislot expansion there are actually quite a few nuances to the design that were required to keep constructs fun and balanced…

  • As mentioned before, having more constructs results in better mods. This reflects the concept that all such parts are interconnected with the Scrap Engine and other constructs.
  • For that reason, removing (or even just losing) a construct also damages the Scrap Engine itself! This puts a cap on what could otherwise be a cycle of tedium by repeatedly eating items and modifying constructs seeking better results.
  • Fortunately the Scrap Engine can transform into an armored version of itself by eating armor (so there is a use for some utilities in here, after all!), and also repair itself by eating more armor in that state. This mechanic is vital since the entire build revolves around this utility so it needs to be maintained throughout an entire run! If the armored version is eventually “destroyed,” it reverts to the normal version, giving more opportunity to armor it up again.
Cogmind ASCII Art: Armored Scrap Engine

All armored up!

  • Constructs themselves can also be repaired, a side effect of any modification (35% of max integrity each time), and having constructs eventually take damage is inevitable, so construct evolution is in turn inevitable due to the repair/modification process. This reinforces the “chaotic wave of power” design described earlier.
  • Like the armored Scrap Engine reverting to its unarmored version, “destroyed” multislot constructs are not fully destroyed! Instead the construct loses a slot and turns into a smaller version of itself. This is an especially important factor with regard to power and propulsion constructs, which can only improve by growing, since otherwise there’s the chance to suddenly lose all propulsion at once and a need be ready for that at all times, a huge drain on resources. Cogmind part losses need to happen gradually so there is ample opportunity to recover or change tactics before the situation gets even worse.
Cogmind Weapon Construct Size Reduction Example (Log0

A powerful 3-slot cannon is shown here in the log being reduced to a 2-slot cannon, so you don’t completely lose your primary source of firepower that might have been carefully “crafted” over time. The replacement is somewhat damaged as well, but it’s better than being totally gone!

  • Constructs gain immunity to effects that can otherwise outright remove parts, such as severing or thievery, since good constructs are hard enough to build and maintain as is, so losing one in this way would be pretty devastating.
  • Construct weapons are also immune to misfires caused by system corruption, since that would be unnecessarily unfair since they can’t safely be removed in situations where misfiring would have potentially disastrous consequences.

Strategy

Having playtested this new mechanic for a while, I’ve found that it comes with many interesting new strategic considerations, a whole new play style which can be both fun and challenging in its own ways.

Like when to leave some slots empty for a chance to grow an existing construct, since in multislot form they gain a further bonus to their stats as per the normal rules of handcrafted multislot items to make up for their other drawbacks.

Or thinking about when and what to eat, when to create new constructs, or try to modify some, or hold off completely and have the Scrap Engine save its resources for later (leave it off), or even store some resources separately in inventory in order to feed it later as part of a lone batch.

There’s also the balancing of such a build’s constructs and the benefits they bring (especially in greater numbers) against the use of normal items, which are swappable… and predictable :P. How many slots to devote to utilities vs. construct-supporting slot types? The former don’t contribute to construct effectiveness, but are the most versatile slot and useful for any build. Also there’s the fact that the Scrap Engine itself occupies two of those utility slots.

Should one evolve or reserve an extra non-construct weapon slot for swapping potential? On that note, one aspect not yet mentioned is that weapon constructs are only built from guns and cannons, thus excluding launchers and special or melee weapons. The latter categories are excluded from the construct system for having too few relevant variables or results that wouldn’t balance properly, but as normal parts they can still be quite useful during most runs so leaving room for swapping one in might be important depending on strategy or preference.

QoL/UI Features

Any big new feature is likely to need some UI love, so for proper testing including game feel and convenience I added a few new relevant interface bits.

One useful behavior is to highlight all edible items while the Scrap Engine is in COLLECT mode by intermittently blinking them white.

Cogmind Scrap Engine Edible Item Highlighting

Highlighting visible construct resources while collecting them with the Scrap Engine.

Technically the set of valid targets is a consistent subset of item types, so given time the player will know what they can and cannot collect, but this feature helps learn applicable targets to begin with, and being able to parse the visible map to see all such items at a glance also comes in handy when there are many items scattered about.

One of the more typical but important parts of any new feature is audio feedback, so I added a range of sound effects (in some cases more than one for additional variation since they’ll be repeated a lot) for collecting items, creating constructs, and modifying them. Sure there’s the log messages recording these events, but the audio for a log message is not specific to a given action, so for important actions it’s nice to have unique sound effects for extra reinforcement.

At this time I realized the Field Recycling Unit had been relying purely on the message log to report item collection, so while at it I also added a sound effect for that one so it stands out when you leave it on and it chomps down on that really nice item that was sitting on the floor just the previous turn ;)

The most important supporting UI feature was something I didn’t even plan to implement at first, to add to the “mystery factor” (at least in test builds, where the Scrap Engine was originally code named the Mystery Engine :P). The idea was to not have any built-in way to know what items had been eaten so far, and therefore not really be sure what resources were currently or still available to the Scrap Engine when turned on. But players could (and would) make note of things they were eating if I didn’t find a suitable way to include this in the UI, and if we’re including it we may as well reveal what actually remains, since obviously the contents have a bearing on the potential results, and it’s nicer to at least have some basis for planning with what is already a chaotic mechanic.

Cogmind Scrap Engine Content List Sample

Behold, the contents of the Scrap Engine revealed!

The Scrap Engine inventory temporarily appears any time its content changes, e.g. due to item collection or using some to create or modify a construct, and also whenever the Scrap Engine is toggled to COLLECT mode, making that a manual method to force it to appear. There’s a new config setting to adjust the duration it remains visible each time it appears, or turn it off completely.

(I’m sure some players might want this particular window to be something persistent and separately toggleable, but as an item-specific mechanic I’d prefer to keep it automatic if possible, especially since the list can often be rather long and the only place to fit it is over the map view.)

Through observation the list can also be used to learn that the Scrap Engine will only hold up to ten items worth of resources (i.e. ten items) of a given type before collecting new ones starts to replace old ones in first-in-first-out priority. So with enough collection it’s also possible to avoid using the contents and instead replace old items with better new ones if desired. More strategy! This could come into play if for example a lot of low-quality items were picked up during an emergency but ended up not being necessary, or a good construct build was simply maintained for so long that other items originally collected around the same time have already been outclassed by newly available ones.

Construct Naming

While it may seem to be of secondary importance, in fact part of my original drive to make this whole concept work was the potential I saw in creative naming possibilities. I had hoped that the naming of constructs could feel as cool as the names generated by Cogmind’s seed system, a random mashup of item names resulting in some really evocative stuff. “ReactiveArmageddonRifle,” “HypercooledWeaponHammer,” “GodChainStabilizer,” “AerolevSuspensionInjector,” “TacticalProtonAccelerator…” I want to use one of those!

Alas, we’re not quite going to get that level of cool out of construct names, as I’ll explain below, but I do think they’ll be pretty fun. I actually ended up using a somewhat different naming scheme for each type of construct, depending on their needs…

Having started with power constructs as a test case, and being inspired by the seed generation system in the first place, the underlying naming system for these was built in the same manner, breaking apart names of constituent items and merging them to create a new name.

Of course we’re going to need a suffix to represent the type (engine/core/reactor), and also have to obey overall item name length limits so it fits in various UI locations while also being reasonable to read, so I decided to stick with only up to two words pulled from source items. For example a Nuclear Core and Deuterium Engine could combine to create a Nuclear-Deuterium Engine; later modifying it with various Ion Engines could randomly replace “Deuterium” with “Ion” to create a Nuclear-Ion Engine construct. Overall it’s nice for the construct names to reflect what items went into their creation/modification.

In the case where source items are all variants of the same class of power source, such as many Ion engines, instead of the result being an Ion-Ion Engine, which is pretty weird, the naming process would convert it to “Multi-Ion Engine.”

The only other special case for power constructs is the addition of a “Cld.” (cooled) prefix if overloadable, so that the name itself carries this useful piece of information like it generally does for normal power sources. This is an important reason we can’t really have crazy construct names--we’re going to need that space to include meaningful info! (unlike the seeds, which are pure fun and often nonsensical)

Cogmind Construct Naming Sample: Power

An overloaded Multi-Particle Reactor in the parts list. You can also see the ‘&’ character in front of its reference letter, as a reminder that it’s a construct and cannot be removed (akin to the ‘:’ character for processor-like parts, but here an even more special case).

This naming approach was satisfactory for power sources, but the propulsion situation adds new complications.

Right away I decided that all propulsion constructs are dubbed “exoskeletons,” a term generic enough that it can theoretically refer to any form of movement (while sounding cool!), and the actual type of movement appears as a prefix at the beginning, e.g. Flying/Hovering/etc, since we do need that info to be obvious from the name. This gives us the naming format “[type] [unique] Exoskeleton,” where [type] is excluded if legged (kinda the default form of an exoskeleton).

As for the [unique] part of the name, propulsion unfortunately could not make effective use of the seed-like “break down and recombine names” approach. There are too many propulsion items containing either no useful words, or only words that that aren’t reasonably compatible with this system insofar as it’s used to build constructs. So I had to design an alternative for that component, and decided I’d just specify applicable words manually. For example Arm. Treads can contribute the word “Armored,” and Hvy. Siege Treads can contribute the word “Siege.”

(I originally preferred the seed-like system’s method, because it’s dynamic, and once coded shouldn’t require any more attention to content since it will automatically include names from new items as they are added and used--basically less data to work with and worry about, but having a good final result is of course more important, and it’s not like tons of items are being added all the time anyway.)

Propulsion construct names don’t use “Multi-” like power sources do. If duplicate words are all that’s available from the given sources, the name will just leave it at a single word, rather than inserting any kind of hyphenated solution.

Cogmind Construct Naming Sample: Propulsion

This Hovering Siege-Myomer Exoskeleton is pretty fast for its support. Maybe it has other drawbacks… or maybe not!

Note that in some rare cases it’s theoretically possible to fail at assigning a name to a given construct from its source material, in which case it’ll just be called a “Power Construct” or “Construct Exoskeleton,” though additional modifications will eventually rename it.

Weapon constructs have an even more involved naming scheme, being the most complex of the constructs and therefore ideally conveying even more relevant info through their name. The format: [optional prefix] [damage type] [unique] Construct/[G/C].

Construct/C would be a cannon, /G a gun, referring to their type since even though gun constructs can technically become even more powerful than cannons, the difference can have a bearing on at least some mechanics like gunslinging, knockback, and blasting matter off targets.

Again because many weapon names include words that can’t be effectively detected by an automated system, I used the new data option added for propulsion to manually define associated words where applicable, so that’s where [unique] comes from, pulling only one random word to use there since we often don’t really have room for more. The pool of relevant words to choose from is actually weighted by the rating of their source items, and limited to using only those which match the resulting construct’s damage type, altogether an attempt to increase the relevance of a choice while still allowing for some outliers.

I thought it’d be a good idea to reference the damage type in the weapon name itself, but didn’t want to be too repetitive about it, so instead use a list of words related to a given damage type, and pull randomly from that. So an EM weapon might directly insert “EM” for that section, or instead use “Charged” or others.

The prefix at the beginning of a name is optional, but special characteristics of many normal weapons in Cogmind are reflected via a prefix, so I think doing the same with constructs is a good idea. They’re helpful, could be cool, and don’t take up too much space since they’re all abbreviated.

These are assigned whenever there’s some aspect of the weapon that stands out, ranking all potential prefixes that reflect properties which meet a minimum threshold, similar to the point system used by the build classification system first described here, but applied instead to common weapon prefixes.

So a weapon gets a certain number of points towards the Precision prefix based on its positive targeting modifier (if any), compared to points towards Hypervelocity earned via penetration, and so on. Some prefixes sound like they could be based on relative values, for example “High-powered,” in which case its degree is determined by weighing it vs. the average damage of all other other non-construct weapons of the same damage type.

Regardless of degree, certain properties override all other prefixes since they reflect important core behavior: these include guided and spread (arc) weapons, and any that fire multiple projectiles.

Cogmind Construct Naming Sample: Weapons

Deadly construct weapons! Construct builds overall feel somewhat weaker and less reliable early on, but get progressively stronger into the late game as long as they can be maintained.

Into Beta 12

This has been a pretty huge detour from the main plans for Beta 12, though at least it’s looking increasingly likely this could actually work?

I don’t have any hard player data with respect to this new mechanic since none was included in the scoresheet yet, but the initial idea was to get anecdotal feedback anyway--details and more nuanced balance changes could come later once this feature is established.

For a while it felt like this might end up reserved for some weird special event mode where it’s forced on the player with slightly different rules, though after seeing others toy with it, and playing with it myself, I’m getting more confident there could be a place in Cogmind’s next version to include the Scrap Engine (in terms of design, that is, because lore is actually where it first came up anyway so fitting it in there isn’t an issue). There’s still a need to see people using it in a wider range of scenarios, which I’m sure I’ll see in the meantime while working on other parts of Beta 12.

In any case, building new construct combinations, and dealing with the consequences one way or another, has been a fun experience.

I’ve streamed some construct build playthroughs of my own, in which I talk about the design and strategy while testing it out in actual runs. The first is here:

Posted in Mechanics | Tagged , | 2 Responses

Item Variants and Randomization in Roguelikes

Most roguelikes apply some sort of randomization to their items, which makes a lot of sense for a genre focused on replayability. This can take the form of enchantments, prefixes, suffixes, or even randomized stats or different properties not necessarily reflected directly in an item’s name like the above list. The various possible combinations can really stack up and turn an otherwise limited pool of base items into a wider variety of interesting problem-solving tools, one that the player won’t usually have full access to in a single run.

The original Rogue offers the most basic set of possibilities, +/- modifiers on a base set of items, e.g. “+2, +1 mace” which has a +2 to-hit modifier and +1 damage, or “-1 plate mail” with its lower defense. Overall Rogue doesn’t really have many different item characteristics to modify or games systems to interact with, which is a primary limiting factor in the extent of randomization a game can support. (Items in Rogue may also be cursed and therefore non-removable except via special means, though that is a tangential mechanic tied more to the identification minigame rather than item randomization itself.) Still, with just a handful of tweakable variables Rogue provides a decent number of additional item variants, and that’s before further modification by the player via scrolls, or negative modifiers from enemies. You can read more about Rogue’s itemization here and here.

Rogue Inventory

An inventory from Rogue, showing multiple item variants.

Many later roguelikes adopted the same numerical modifier-based approach to randomization, itself derived from pre-Rogue tabletop RPGs and often called “enchantments” in the context of roguelikes. NetHack, Angband, ADOM, Linley’s Dungeon Crawl… lots of big early roguelikes rely on enchantments as a core element of their item generation.

Of course most started to take it further.

Even Rogue’s first descendant, Moria, already took the next step of sometimes assigning an item a random property from a pool of possibilities, such as resistance against a particular damage type, to create more unique “ego items.”

Moria Inventory

A Moria inventory containing numerous ego items with various modifiers (this shot actually taken from the later C-port Umoria).

Moria’s descendant Angband also included ego items (over 100 properties), but expanded the concept of randomized items even further by adding the option to activate “Randomly Generated Artifacts,” abbreviated “randarts.” This replaces the game’s standard set of hand-crafted artifacts (“standarts”) with a separate set of procedurally generated artifact items that approximate the power level of those in the original set, while allowing them to become different types. This combined with Angband’s already large pool of base items (more than 500), enchantments, and ego modifiers, and there is quite a huge array of possibilities, making for a heavily loot-focused experience. It’s no surprise that Angband went on to have a heavy influence on Diablo’s design!

Angband Randart Sample

An Angband randart. That’s… uh… quite a lot of modifiers!

Linley’s successor DCSS is more or less the same, with options ranging from the typical enchantments, egos (separately called “brands” with respect to weapons), and a smaller number of randarts that combine multiple properties drawn from a decent-sized pool of possibilities.

DCSS Equipment List

A DCSS equipment list taken from the character overview screen, with representation from a good variety of variant categories.

Despite beginning development in the 90s and continuing off and on for the next couple decades, unlike some of its contemporaries ADOM did not add truly randomized items beyond the usual enchantments or ego-style modifications in the form of prefixes and suffixes. Perhaps one of the more unique aspects of ADOM here is that the degree of possible enchantments, among other properties, is tied to the material the item is composed of.

ADOM Equipment

An ADOM equipment list with a large number of enchantment values, and including some different materials like crystal and eternium.

By comparison, in true Angband fashion the distant Angband descendant ToME 4 fully embraces randomized items and has quite the pool of possibilities.

ToME 4 Inventory

A ToME 4 inventory sample with details for one of the items.

That said, certainly not all modern roguelikes follow the long-term trend towards increasing variability and randomness. Brogue is a good example of a streamlined roguelike that offers a lot of interesting gameplay centered around a core set of items modified only by pure enchantments and its own style of egos/brands called “runics.”

Brogue Inventory

A Brogue inventory list including some enchantments and armor with a runic conferring immunity to enemies of the infernal type.

Randomized items tend to be a great feature in combination with permadeath, especially in those games where there isn’t much in the way of challenges outside taking on various enemies with whatever gear the player has at their disposal (i.e. the majority of roguelikes, especially classic ones). If every time it’s the same challenges at each depth with the same set of potential items, there are fewer and fewer unexpected encounters or unique situations to overcome that haven’t already been “solved” through previous experience. This is why many Angband players eventually activate the randarts option, to really mix it up. Then of course these items and their randomized capabilities can also do a good job of making the whole experience more exciting--ooh more shiny loot what is this YES THIS THING IS AWESOME!!!

Yeah so there’s definitely going to be junk in there, but also powerful and fun items as well (which inevitably cause to you get overconfident then die a horrible death :P)

Yet there are also some really nice roguelikes without any randomly modified items at all, not even basic enchantments, which ensure replayability through other means.

The Ground Gives Way is one of the best examples, where instead of offering randomized items it has an absolutely huge number of handcrafted items with varying rarities. A single run also doesn’t take too long (1~2 hours), so players have a chance to quickly start finding items they’ve never seen before, or only rarely, even after becoming pretty familiar with the game.

TGGW Inventory Sample

A TGGW inventory/equipment list.

Some items can also be transformed through external means, such as being cooked, coated, rusted, or upgraded by NPC services (one of the main uses for gold).

TGGW Enchanter

A TGGW enchanter offering their services. Other types of NPCs can modify or convert other types of items.

While randomized items help add to the “dynamic” nature of a roguelike experience, there are other ways to achieve a similar result, by moving beyond items, the player character and other creatures. Classic roguelikes don’t tend to do much of this (traps occupying a single space are a very minor example), but we’re seeing more and more of it in modern specimens. This is another area TGGW reduces its reliance on randomized items to create interesting/beneficial/detrimental scenarios, by offloading some of that work onto the environment itself. Standing at certain locations, or in certain rooms, might have various benefits or drawbacks, either due to environmental features themselves or because certain weapons are more or less effective depending on the immediate surroundings.

TGGW Terrain Features

Nothing like some open lava to accidentally fall into when confused! Or knock an enemy into. There’s also a valve elsewhere on the map which could perhaps flood the area, and the “open melee” status listed at the bottom right affects the effectiveness of certain types of weapons due to where @ is standing.

Despite its relatively small item pool and low emphasis on random variants, Brogue has an even greater emphasis on terrain factors that really help support the dynamic gameplay in a way that keeps repeated runs interesting.

Brogue Terrain

Brogue’s trippy colors come from impactful terrain features like water, lava, and gases.

Cogmind fits more on this end of the spectrum, with a decent chunk of its dynamicity coming from external non-item factors including special encounters and events, enemies that work together at a higher level, interactive machines, highly destructible terrain, traps that cover a wider area, hidden corridors used by hostiles, etc.

Certainly many of those aspects are also simply an important part of building a living world heavy on immersion, but in terms of pure mechanical design they also supplement replayability in ways that items will not, because yep, all of Cogmind’s items are static.

Cogmind’s Strictly Static Items

Having been in development for so long, and being a bit of a genre outlier in that there aren’t any randomized items (not even simple enchantment-like modifiers), more than one Cogmind player has suggested adding what is at this point almost a roguelike staple. But items being static is of fundamental importance to the design, for many reasons:

  • Familiarity -- Building familiarity with all the specific items and their capabilities across multiple runs helps immensely with planning or even just quickly putting together a balanced build from piles of scrap. Simply seeing an item’s name let’s the experienced player know whether it’s something they can immediately put to good use, maybe save for later, or ignore entirely. Eventually a lot of time is saved by not having to always be opening the info for each item to learn about it, and recall that temporarily applicable info if and when it’s in use or being carried for potential use. This aspect doesn’t matter as much in games with fewer items, or fewer items in use at once, but there are always a ton of items available in a given area in Cogmind because all actors are composed of them, plus those just found in the environment.
  • Turnover -- Cogmind involves plenty of replacing lost gear, upgrading to better items, and swapping tools for different situations--equipment/inventory management is a bigger part of the gameplay than in almost any other roguelike (so much so that many UI features are built to facilitate this process). This is a function of being designed around destructible parts (items) and a relatively fast-paced progression system, and as such it would be unfortunate to require players to frequently read and reread the info for a bunch of random items with unique properties (à la randarts), especially when they may not even be around for long. Compared to Cogmind, other roguelikes tend to have more static loadouts, or equipment that the player themself gradually improves over time, maintaining familiarity the entire way, for example using only a few different weapons across an entire run instead of the many dozens in a typical Cogmind combat run (and that’s just weapons!). Yeah with static items we lose the thrill of finding great uniques, or laughing at the ridiculous ones, but we can get those thrills in other ways :)
  • Balance -- Salvaging other robots is an important source of items, and they need to have balanced builds based on the same items that Cogmind can use. Doing a proper job of this requires static characteristics, which also further ties into player strategy since you then know where or how to acquire many specific useful items (wherever the associated types of robots operate), enabling both short- and long-term planning of a different nature than what’s found in other roguelikes. Low on treads or armor? Find a nearby Sentry. Need a Recalibrator? Find a Mechanic who may be hanging around a Repair Station. And so on. Being able to shore up a messy build, or round out a good one, doesn’t generally come down to raw luck as much as it does being familiar with where to source the right parts at the right time.

So by design we clearly want to go with static items, but as mentioned before with TGGW, we can enhance replayability and partially make up for the lack of randomized items via pure quantity. With already over 1,000 items (and always more coming!), there’s a lot to find in Cogmind.

Cogmind Item ASCII Art Collection (220913)

The art for about 800 of Cogmind’s items, shrunk to fit them in a reasonable space :P

(I don’t want to veer too far off topic here, but it’s worth mentioning that items in Cogmind are divided into core items and special uniques or rare items that are more difficult to acquire, with the core category rebalanced and finalized in the previous Beta 11 overhaul to ensure the foundation is solid before we start getting a lot more of the latter which are great for contributing to the fun and surprise factor while unlocking yet more interesting play possibilities.)

We’ve hit 2k words at this point, which is a whole lotta words to say most roguelikes have randomized items while Cogmind’s items are static and that can be a good thing, too…

Well… time for an experiment.

Randomized Items in My Cogmind?!

I guess as I write this article the “experiment” is just about coming to a conclusion (a success?!), an experiment to see how randomized items might work in Cogmind. What form could they take? Would they be fun? Create interesting situations?

Now of course I wouldn’t go as far as to undermine the fundamental design and make this a widespread feature, but as I was working on Beta 12 an opportunity presented itself to make this an isolated special mechanic, and, though very doubtful at first, I was pretty interested in seeing if it was even possible.

The first roadblock actually has nothing to do with game design at all, but architecture. After all, it’s not likely that a code base assuming items are static throughout a decade of development would be able to feasibly support randomized items!

Normally at startup Cogmind loads all the game data, including item stats, and references it during play. As with most games, each “instance” of an item (for example each Assault Rifle you have attached, or in inventory, or on the ground) does not store a complete set of stats. Instead, it only stores a subset of values that might change, like its current/remaining integrity, because they all have the same max integrity and we don’t need each of them storing that separately, right? For that value we can just check the reference data, since it doesn’t change anyway.

Cogmind Items Static Data File Excerpt

An excerpt from the file containing static item definitions (values not necessarily accurate anymore since I originally shared this image elsewhere seven years ago, but you get the idea :P).

Item instances only storing a small amount of variable data is a pretty clear obstacle to giving items unique randomized stats. The solution which will require minimal changes elsewhere in the game is to reserve a number of slots in the item reference data and allow them to be modified as well. This theoretically would enable randomized items to work pretty much seamlessly as far as the rest of the architecture goes, but naturally comes with its own limitations. Modifying underlying reference data simultaneously modifies every instance of the given item, regardless of where they are, so to take advantage of this relatively seamless approach we’re going to have to limit randomized items to a reasonable scope:

  • Only Cogmind can use them. This keeps the total number down, saving resources and preventing the internals (and really the overall design) from becoming a complicated mess.
  • Randomized items must start equipped and cannot be removed without destroying them. This prevents them from existing in the wild where they could easily multiply (assuming these things are created dynamically, which will be the plan going forward). Designwise this limitation has other significant advantages anyway, in terms of balance and otherwise preventing potentially tedious play or confusion.

So we’ll have to enforce a cap on the number of such items allowed, but in exchange gain the ability to modify any underlying value of an item instance, in real time. For this purpose a number of placeholder entries are added to the item reference data.

Cogmind Weapon Construct Data Placeholders

Randomizable placeholder weapon data entries as they appear listed in the static item data file.

Of course, since we have items which can change on a runwise basis, likely even multiple times during the same run, the originally “static data” for these items must also be recorded as part of a player save file. In the past we could just use freshly loaded item data each time the game starts, but now some of those entries might be overwritten by whatever is in the save file if continuing an earlier run. (There’s quite a lot of static item data and not all of it is needed for randomized items, so while trying not to record more of it than necessary, yeah there were a few funny/weird bugs coming from getting this right while building and testing the system…)

Some relevant statistics to give a better idea of the amount of data of each type:

  • Variables unique to each normal item instance: 17
  • Static data values stored for reference by all instances of a given item: 100
  • Data values saved for randomized items in otherwise static item data: 47

So randomized items might change up to about half of the data that is normally static, and instead of an item instance being defined by up to 17 unique variables, for randomized item instances that number increases to 64 (17+47).

Where are these randomized items going to come from? Next time we’ll introduce the Scrap Engine

Posted in Design | Tagged , , | Leave a comment

Garrisons 2.0

Garrisons were originally added to Cogmind in the months after the first Alpha release in 2015 (see an overview here) as an optional location for players to visit, adding a unique extra dimension to the world to answer the question “what if I infiltrate these things where many enemy squads come from?” (More recently here on the blog I covered that category of Cogmind maps, the “maps between maps,” since a third such map type was added this year.)

In the time since Garrisons were added, however, a combination of relevant changes to the game started putting pressure on their original design:

  • Many more full branch maps were added, along with factions, each with their own enticing reasons to visit them compared to the weaker incentives for entering a Garrison.
  • Eventually Garrisons themselves became a sort of faction home as well, in the form of RIF-using bothackers, which in turn meant that some styles of play encouraged visiting many Garrisons.

As a result, for a while now I’ve wanted to revisit and update Garrison design to better merge it with what the rest of the world had become.

This always felt like a kind of side project though, one which could be small (doesn’t live up to the potential?) or large (hard to fit the work in?), so it simply floated around on my lengthy todo list forever. For Beta 12 I decided to include it on the patron feature voting list, and… it won. Cue several weeks of work which has definitely been worth it!

The amount of content variety offered by the original Garrison design was more suited to a lower visitation rate, not the “I’m going to play almost my entire run inside these things” which it had become for some people. RIF garrison diving became increasingly common, because it’s a fun style, but we could totally make it even more fun with greater variety!

So the goals for Garrisons 2.0 are to increase variety in the form of encounters, events, and new layouts, while also reworking the clock and giving even non-RIF players good reasons to enter.

Let’s get started!

1.0 Garrisons

As a quick reminder of their fundamental structure, unlike most maps which use more involved generation methods, Garrisons are built entirely from large prefabs, four of them to be precise, fitting and rotating randomly selected quadrants to create a larger square map.

Cogmind Garrison Layout (labeled, circa 2015)

Sample Garrison interior layout (major features labeled), under the old system first introduced in 2015.

So each quarter of the above map is a separate prefab rotated such that their corners form the central room. With 44 variants in all, many with somewhat variable content of their own (random items, traps, maybe potential allies instead of hostiles, etc.), this results in quite a few possible permutations, but seeing as each map is composed of only four of these prefabs, when players start exploring upwards of ten of this same type of map in a single run, some of these corridors start looking all too familiar, especially betraying hidden areas that might otherwise be surprising! (and by design there are quite a few of these inside Garrisons)

Cogmind Garrison Prefab Quadrant (REXPaint)

One of many Garrison prefab quadrants as seen in REXPaint.

We’re going to need to inject more layout randomness in here to liven things up over the long term…

Before getting started with that, I first built a little tool to get an idea of the complete contents of a random set of Garrisons. This might help spot areas I wanted to adjust, or at least offer a clearer picture of the total challenges and rewards possible in a given map as of Beta 11. For Garrisons the complete list is also more relevant than elsewhere, since “full clearing” a Garrison is a lot more common than in many other maps.

The tool would load up the game, visit a Garrison at every depth, and tally its contents, adding the results to a file, doing this for however many seeds are specified. I could save the data to revisit it later, after adjustments are made.

Cogmind Garrison Content List (pre-Beta 12)

Sample Garrison content list from Beta 11.

Relay Couplers are not reflected in this list, since there are almost no free-standing couplers in Beta 11--they’re acquired separately from Relay machines, and I already have a good idea of their distribution since it’s more directly controlled anyway. Here I’m more interested in the non-RIF-related rewards.

One very noticeable issue is that for some Garrisons there was little to nothing under the “usefuls” or “items” categories, making the entire map almost purely of benefit to RIF players (since there are always Relay Couplers to be found, plus the RIF Installer for abilities).

Sometimes other players would Garrison dive for fun/something different to do, and sometimes come out with nice rewards/out-of-depth gear, but unlike the alternative (going for branch rewards instead) that was definitely not guaranteed, so not really a reliable long-term strategy to play around. It’d sure be nice to resolve that!

Adding extra content could have the dual benefit of both spicing up Garrisons and making them valuable to more than one type of player. I’m reminded of Beta 11’s spicing up the main complex with Heavies and Cargo Convoys, though in this case it’s not just adding one or two new mechanics but instead about turning Garrisons into proper branch maps in terms of content distribution…

Encounter Architecture

If you’ve read some of my earlier map generation articles (specifically here, and here for caves), you might be familiar with how I make use of an “encounter system” to procedurally distribute and insert map content, generally via prefabs.

The question was how to apply this approach to Garrisons.

Embedded prefab encounters in other tunneler-generated maps have a defined set of empty rooms to work with, but Garrisons don’t have any empty rooms at all, themselves being composed purely of prefab quadrants where every space is hand-crafted with purpose.

I considered a lot of options here, going as far as thinking of building a new generator from scratch (one that would make encounters much easier to implement), but I liked the established and consistent core theme of existing Garrisons and didn’t want to mess with that. Instead I came up with a way to integrate Garrisons into the room-based encounter system: If we don’t have any empty rooms to place encounters, we’ll just have to dig some!

And I mean dig manually…

Cogmind Garrison Prefab Quadrant, w/Encounter Room Placeholders (REXPaint)

Remember that prefab quadrant from before? Now it’s got more rooms!

I went back through each prefab and outlined areas as essentially “optional placeholder rooms” which the generator could use to insert prefabs, but any of these areas not used for an encounter would actually not appear in the final map.

While a more algorithmic approach could also be used to do this, I prefer the handcrafted touches this allows for, like what nearby prefab sections the encounter at a given position is allowed to connect to, and how wide to make the links (which also determines which types of encounters can appear there).

Also we could’ve done something like choose an encounter then build a suitable space for it, but I was trying to take advantage of as much prior work as possible here, and that meant simply handing the encounter system a list of existing empty rooms to work with.

How the encounters link up with the map is a little different than usual, too. As drawn, some areas have multiple connections to main Garrison corridors or rooms, but only one connection is chosen at random to be used. This enables yet more variation in layouts.

Check out some full-sized Garrisons in the map generator before the game gets hold of them to actually insert the encounters, shown here with potential encounter areas in dark gray:

Cogmind Garrison Map Generator w/Possible Encounter Areas (Sample 1)

 

Cogmind Garrison Map Generator w/Possible Encounter Areas (Sample 2)

 

Cogmind Garrison Map Generator w/Possible Encounter Areas (Sample 3)

Here it’s important to remember: Encounter rooms aren’t nearly that large (usually), outlined is just the available space within which to place them, space which is then shrunk down to match the necessary size. Let’s see the steps as I shared for the embedded prefabs in other maps!

Cogmind Garrison Prefab Embedding Process

Steps to embed a Garrison prefab in an optional placement area.

  1. Find an optional placeholder room large enough to hold the desired encounter/prefab. The one above has two possible connections with the Garrison, one to the south and another to the west.
  2. The southern link is chosen and the target prefab area is shifted against the southern edge of the room. The horizontal offset is selected randomly but still allowing access to the prefab interior in cases where the prefab itself contains objects that would otherwise block the path.
  3. Areas of the room unused by the prefab are filled in with earth.
  4. The prefab’s contents are placed on the map, and any walls still needed are created adjacent to open space (most prefabs don’t specify their own outer walls, but this one in particular does because it wants to surround an interior section with reinforced walls).

The right column shows an example where prefab contents are rotated and shifted to use the western link instead.

Also notice the blue phase wall at the entrance to the western-facing prefab, instead of a door. This is another key difference with Garrison encounters, that they specify the form of their outer connection with the Garrison, be it an open space, hidden door, or phase wall. Some encounters force a certain type of connection, while others uses weighted possibilities, whatever is suitable for the design.

Unlike 0b10 encounter rooms, these cannot actually expand or move doors, and use a tunnel-like connection rather than sharing a wall with an outer corridor. As with 0b10 encounters though, random horizontal flipping is allowed for further variation.

For now encounters only connect directly with main Garrison prefab areas as per the drawn suggestions, so only one entrance/exit each. I considered introducing the possibility of dynamically generating more loops via hidden paths between some encounters, though there are already a fair number of hand-crafted loops built into Garrison quadrants anyway, and players can always try to create their own additional connections given the circumstances and layout. Rampant terrain destruction is awesome, by the way ;)

Generating more paths would likely make Garrisons easier in some regards (unnecessary!), and not be compatible with many of the encounters anyway, since knowing which direction the player will enter from is often an important part of their design.

Below is a collection of images showing the full layout of several Garrisons after the complete generation process, including encounter placement:

Cogmind Garrison Layout Sample 1 (includes encounters)

 

Cogmind Garrison Layout Sample 2 (includes encounters)

 

Cogmind Garrison Layout Sample 3 (includes encounters)

New Garrison Quadrants

With a new encounter system in place, another thing I did was go back and create two new sets of Garrison quadrants, adding 12 more variants on top of the original 44. Each “set” of quadrants follows certain rules for their layout, and in this case one of the rules was to take into account the fact that encounter rooms may be embedded into the quadrant, something none of the earlier sets expected when they were created.

Cogmind Garrison Prefab Quadrant, w/Encounter Room Placeholders (REXPaint)

One of the new Garrison quadrant prefabs which follows a different style than earlier sets, including consideration for encounter insertion.

The new quadrant above moves some of its “standard contents” to beyond the entrance/exit (represented by the red ‘0’) when pathing from the Garrison center (top-right here), and includes some especially large prefab areas with wide entrances, even leaving room for some within its main structure rather than the more typical outer edge locations.

Of course simply having a larger pool of quadrants for the map generator to pull from further expands the potential number of unique Garrisons as well, which was the first thing I was hoping to do with this update before even thinking about encounters at all.

Encounter Types

In my previous related articles I wrote about dividing encounters into four categories: Fluff, Reward, Risk-Reward, and Danger.

When Cogmind was pretty much done in 2017, a survey of encounters throughout the entire game recorded 25% of them to be fluff, 46% reward, 15% risk-reward, and 14% danger. By comparison, a breakdown of encounters in our newly expanded Garrisons shows 3% fluff, 40% reward, 55% risk-reward, and 3% danger.

Garrisons are already fairly dangerous given their concentration of hostiles, so I really wanted to focus on the risk-reward aspect--go the extra mile with these mostly optional side encounters, face even more dangerous situations, and likely be handsomely rewarded. In playtesting so far this (among other benefits we’ll get to later) is already clearly tempting players who would otherwise always prefer regular branches over infiltrating a Garrison.

Cogmind Garrison Encounter Category Distribution Samples

Garrison encounter distribution samples, color-coded by category.

The above samples show encounters added to a variety of Garrison layouts, highlighted with a dev visualization overlay. Those sections of the map would have otherwise remained filled with solid earth.

Notice that encounters do not generally fill the space available to them, with some even occupying only a tiny portion of it, so the sizes of rectangles here can be deceiving in terms of determining the prevalence of encounters. We’re mainly looking at respective counts, color, and placement.

Grey rectangles in the visualization show areas not chosen for encounter placement. As with other maps, during generation there are X number of available encounter rooms, and different map types set their own percentage of those to attempt to fill, so it’s easy to adjust overall density.

For Garrisons I’ve started with a 50% usage rate. If that turns out to be too overwhelming it can be lowered, or if we want even more encounters for some reason it can be increased (that said, I don’t think the number of available encounters I’ve created so far is enough to support a higher prevalence while maintaining each Garrison’s unique feel).

Some Cogmind maps have a 100% usage rate, though the circumstances are different in those cases, for example caves being populated by a much higher number of fluff encounters to add to their character. Others have very low rates like Access (10%), being a huge map with wide corridors and large machines, designed for lots of open space and more predictable content.

RIF Installers

Back when I added a proper bothacking system to Cogmind, creating RIF Installers and inserting them in Garrisons for both lore reasons and in a bid to increase the map’s relevance, they were always placed adjacent to a random entrance/exit, since by design the Garrison prefabs always left some open space in those areas.

Having introduced encounters, this method was no longer reliable as these locations might now be occupied by other rooms in some or theoretically even all cases. Certainly one option would be to reserve the necessary area in advance, but that wasn’t very compatible with the existing architecture, and there was an even more enticing and natural idea in this case anyway: put RIF Installers into the encounter system, too!

RIF Installers were already a prefab to begin with, one which (without precedent anywhere else in the game) were actually inserted via a separate hard-coded method, so let’s add it as an encounter instead. Of course this change comes with significant balance repercussions, which we’ll cover when we get to discussing that topic further below.

Cogmind Garrison RIF Installer Location Example

RIF Installer locations just potentially got a lot more interesting…

After implementing all the encounters, I went back and added them to my original Garrison content summary tool, primarily looking to ensure that RIF Installers were indeed being included everywhere as expected, though notice that even this earliest Garrison is quite stacked compared to before (again, excludes standard content like the normal Relays and their Coupler contents):

Cogmind Garrison Content List (-8, Beta 12)

Sample Garrison content list from Beta 12.

Clocks

From early on I always wanted to make sure Cogmind had sufficient food clocks, although as the world expanded in the time since, I’ve added a few areas in which there is no clock for whatever reason. For a while I’ve planned to eventually address these as opportunities present themselves.

That’s not to say we need incredibly tight clocks--Cogmind clocks are lenient enough to offer plenty of flexibility to allow for different play styles, but assigning some explicit value to time by giving it a mechanical impact is good for balance in a goal-oriented roguelike like Cogmind (as opposed to a sandbox), otherwise any number of weird player strategies might start to emerge as they take advantage the inevitable design cracks in a complex web of systems that can start to break down when you have unlimited time to poke at them in a single run. While some players enjoy puzzling out creative ways to get ahead, at the extreme end it eventually devolves into optimal tedium which is overall harmful to the experience. I wrote about this factor in my recent article on game design philosophy.

Garrisons originally had their own clock whereby the alert level gradually rises over time (as opposed to the usual decay or at least remaining neutral), thus overstaying in a single Garrison could have a negative impact on the following map.

As one of its perks, RIF-aligned builds were not affected by this type of ambient alert increase, which made Garrisons a lot safer for those players. But RIF has since gotten a lot more powerful in its own right, with even more benefits to come in Beta 12, so we really do need to consider a clock that applies to everyone, and seeing as we’re building Garrisons 2.0 here, of course it makes sense to do that now as part of the new design!

At the same time, the original alert increases for non-RIF builds were a bit too punishing for players to seriously consider these maps as part of their route, so I didn’t want to simply say “okay RIF isn’t immune anymore.”

Initially I approached this as an opportunity to come up with some new type of clock. Over the years I’ve been adding more unique clocks as part of different kinds of challenges in Cogmind, so maybe there was something suitable for Garrisons as well? Some concepts:

  • More enemies could show up? Okay so that’s not a new concept, and kinda used generally throughout Cogmind for both clock and non-clock responses, so nothing special there and even kinda repetitive, not to mention it invites farming anyway.
  • Sterilization is another option, the floorwide response to farming on some other maps, slowly raising the ambient temperature to eventually melt anything that doesn’t evacuate. I’ve already reused a slightly altered version of this in the new DSF maps, and balance-wise don’t find it suitable for Garrisons anyway.
  • Probably the most interesting and unique possibility I considered is eventually permanently sealing each of the Garrison exits one by one, until eventually there is absolutely no way out and you are trapped and lose the run! This is less harsh than it might sound at first, since the closing escape window would be clearly telegraphed to the player along with sufficient time to leave, and unlike other floors the exit locations are not exactly hard to find (they’re all in predictable locations with mostly predictable paths to reach them). That said, if someone were to actually lose that way for some reason it would feel kinda bad, plus (unless the mechanics get even more complicated than that) it’s a very hard cap on time, whereas flexible clocks are generally more desirable than brick walls where possible!

So, uh, what’s a flexible mechanic that ties into a bunch of other mechanics already? …alert level xD

Yeah we’ll just do that, only this time we’ll tweak it differently!

Alert still increases naturally over time while inside a Garrison, but it will be much more lenient for a while, then eventually the rate begins to quickly ramp up, before plateauing. Mind you, the rate of increase plateaus, not the alert, so you generally don’t want to hang around too long once it starts ramping up, but the option is there if you need a little more time, depending on what is acceptable given the circumstances.

Cogmind Garrison Interior Alert Over Time

Ambient alert accumulation inside a Garrison begins from turn 1200, though remember the alert depicted here is purely from being inside the Garrison, excluding any other alert resulting from actions within, like… blasting everything :)

The numbers used are based on a wealth of player run stats, in combination with the desired balance for these new Garrisons. The time required to full clear will generally push alert quite high, but is technically still achievable and not unreasonable if that’s something the player wants to do, while the option to bail early is always available.

Note that while RIF builds no longer immediately benefit from simply being RIF builds in this scenario, by design that play style comes with more tools for controlling alert, so at least retains some indirect benefit.

Balance

With all these new encounters, the average content density inside Garrisons just shot up. However, I don’t think higher density itself has a significant impact on difficulty, which would be the main concern. Garrison map flow remains unchanged from before, with all exits directly accessible from the center via four spokes, and encounter rooms are either further out towards the edges, or at least off the beaten path, meaning they can usually be avoided if desired, serving mostly as optional areas for the player to investigate based on their own risk-reward tolerance.

The added variety no doubt makes Garrisons more interesting and fun to explore, but also introduces new design challenges. Encounters now make up at least half of their content, including many of the potential benefits (even the holy grail itself, the RIF Installer!), but many of these extra rooms are hidden behind one or maybe even two layers of phase walls which not all players are equipped to detect. This can make exploring a Garrison very problematic, even unfun. In theory it could be optimal to destroy all the walls in a search for hidden paths (especially with Beta 11 when there was no clock adding at least some time pressure), assuming one is willing to pay the alert cost for the collateral damage.

To help alleviate this I added a guaranteed Terminal embedded in the wall of a random main corridor, a Terminal that lists the “Access(Emergency)” hack which reveals all hidden doors and phase walls across the entire map (expanded behavior beyond its normal effect).

Cogmind Garrison Access(Emergency) Hack Demo

Access(Emergency) inside a Garrison is quite revealing…

So simply exploring the main areas of the Garrison will eventually lead to discovering this Terminal, which offers a pretty good chance of marking all the hidden paths, but first you have to find it.

Failing that (gets blasted in a fight? hacking attempts unsuccessful?), one of the potential “encounters” is another Terminal nook containing a new “Download(Registry)” hack with an even more extreme effect, revealing all terrain, security locations, and even item caches.

Cogmind Garrison Download(Registry) Hack Demo

Download(Registry) is even more revealing! If available, that is.

But it’s not a guaranteed find, and being an encounter itself there is a chance it’s not easily accessible, either (it has no door of its own, but the area selected for it may otherwise not be directly linked to a main corridor).

So that’s just one possible option. The reason these options are more important inside Garrisons is because a number of typical sensor types are blocked, which is where the costly backup approach comes in: Destroying the Phase Generator eliminates the blocking (at the cost of raising alert further), and also opens all the phase walls, making it easier to explore freely. There’s usually (but not always) at least one Phase Generator in a Garrison, and it can often be found through natural exploration since it’s designed to be heard through phase walls that lead to it.

RIF Installers (again!)

Any RIF build visiting a Garrison is itching to find this thing ASAP. More abilities? Yes, please! (In fact, I even added a new ability for Beta 12 so we’re up to 16 now, 7 of which have multiple levels.)

It used to be fairly easy to find--if it’s not adjacent to your starting position, follow the spokes to each of the three exits and it’ll be at one of those, but now that Installer placement has been merged with the encounter system it could be anywhere! Including of course outlying hidden areas (see the image from earlier for one such example). That’s a problem.

Forcing some players to repeatedly full clear Garrisons to ensure they find these is excessive, so I added a new mechanic to help out: Once a player has installed the RIF system, getting anywhere near other Installers will automatically ping them, revealing their precise location.

Cogmind Garrison - Pinging RIF Installer

There it is! Now to find the entrance…

There is precedent for this behavior, since RIF-capable builds already similarly ping nearby Garrison Access points elsewhere in Complex 0b10, and adding this feature elegantly solves the “where the hell is the Installer?!” issue. In fact, it could even be considered more interesting than the predictable locations used before, since the new randomized locations might require a bit more exploration to uncover, as well as figuring out how to reach the Installer once discovered. That while making sure it’s not damaged in the process, since who knows what else is lurking around…

Incidentally damaged RIF Installers (:O) will no doubt be more common in Beta 12, though there are balance factors at play here, too:

  • A single Garrison may contain more than one RIF Installer. That’s pretty exciting news for RIF users, though it’s worth being cautious since the second potential installer may be trapped or defended!
  • Looping back to a main floor through one other particular new encounter for a shot at another Garrison (and its Installer(s)) at the same depth is a possibility. This is different from normal exits in that it always loops, regardless of where the other exits lead.

Overall the average total ability count across an entire run will likely be higher than before among players who want to optimize for it.

Cogmind Garrison w/Multiple RIF Installers

Installer-rich environment detected!

Non-RIF Builds

RIF this, RIF that… but as I stated at the beginning, one of the goals here is to give more non-RIF builds good reasons to visit Garrisons as well!

I think the update manages to deliver on this point, and we’ll see other builds Garrison diving at least some of the time, as a part of existing strategies or even entirely new ones. Advantages include:

  • Out-of-depth parts, often significantly so.
  • Other situationally useful rewards such as large numbers of traps or Authchips. Also allies, sometimes pretty effective ones.
  • Unique intel. Among the new Terminals added to Garrisons, we also have new hacks enabling the download of patrol navigation and security data for the next map, intel which can be quite useful given its scope.
  • Then there’s the really big one, an entirely new meta mechanic spanning many areas of the game with significant strategic impacts outside Garrisons and even into extended, but requiring Garrison visits to trigger and… nurture. Almost sounds like RIF, but by design the two are actually mutually exclusive options, so I look forward to seeing who uses it, and when and how. Writing about this new feature could be a whole new article topic on its own, but given that it’s steeped in lore and is one of those things meant for people to uncover naturally, I won’t go into any details here. Let’s just say it’s neat, and it’s useful. I’ll almost certainly be streaming it at some point though, so that would be one way to learn about it from me, aside from the usual places in the community.

These advantages exist on top of the original beneficial side effect of passing through a Garrison, whereby looping back to the same depth reduces the size of all patrols (while you have your chance to harvest more resources? find an elusive branch?).

Cogmind Ascii Art (ECA)

Hm, what’s this?

Events

While encounters help flesh out the general Garrison experience, there is another potential layer on top of that to further shake things up: Events.

Events are not all that frequent, but when they do occur have a map-wide impact. These are various faction-level activities that might be beneficial for the player, or add some new danger, or something in between.

For spoiler reasons I won’t say more about these, other than to point out that from a design perspective it’s nice to have this extra layer so that once players are familiar with the individual encounters possible in a Garrison, and come up with localized strategies for those, there’s always the chance for something to come along and change the strategic equation in a bigger way.

In other words, events contribute to avoiding the “flat” experience of simply moving from point A to B, dealing with whatever challenges lie at the destination, then the next one beyond that.

Technically we have encounters that when close enough to one another might bleed into each other due to an alarm trap, untimely patrol, call for reinforcements, Terminal trace investigation, or… accidental retreat in the wrong direction? :P

And this approach is reflected throughout Cogmind’s other maps as patrol routes change, units carry out unique duties across different areas, and yet others are dispatched to react to something far away (dungeon environments can be about as dynamic as an open world!), but Garrisons are smaller maps with fewer macro systems at play, so it helps to add that extra layer of potential content to mix it up. For the same reason, DSFs (even smaller and simpler than Garrisons) also have the occasional event.

This sort of mutlilayered approach is also really useful for emphasizing the lore, taking advantage of another dimension to bring the world to life. It’s not just “Cogmind vs. the world,” it’s “Cogmind happens to occupy this world alongside many other actors with their own goals, friends, and enemies.”

Again these events are uncommon, since we still want most Garrisons to be focused around their encounter content and balance, as opposed to events which generally take over the entire floor and make it into something quite different. As I have it set now, there is a 60% chance of having a single event across a full run that visits a Garrison at every single depth, and a 10% chance of having two. 30% of seeds have no Garrison event at all, regardless of how many are visited. Events are special!

Posted in Design | Tagged , , , , , | Leave a comment

Kyzrati’s Game Design Philosophy

Recently a player asked me a question regarding my game balance philosophy, and while I can often respond to queries by pointing to some previous article, despite all my writing and no doubt occasionally touching on related topics, I had yet to explicitly do any sort of summary of the philosophy behind my gamedev work.

Now I’m sure this won’t be a comprehensive summary, mainly since it’s harder for me to quickly step back and reflect enough on the bigger picture to think of every meaningful element in the time it takes to write this article. Normally I’d collect notes for an article like this over a longer period, then eventually get around to writing it out one day, but since this topic comes on shorter notice and I just want to get it out there, let’s just go with what I can come up with for now.

Note this article refers to design of a game itself, rather than the complete gamedev process, which is a pretty different topic altogether. (I sorta covered high-level process before, albeit more in a technical sense than a philosophical one, in an early article on Cogmind’s alpha release cycle. Note that since that time Cogmind development has entered a couple different cycles, so while I once used that approach, the process has since evolved to fit different circumstances.)

And of course the context (plus any examples) for this discussion will obviously lean heavily on Cogmind, since that’s currently my main project, although as a fairly general philosophy the same factors could be applied to many games.

Let’s just dive right in, dissecting my gamedev philosophy as it pertains to a range of topics…

Vision

I’m a strong believer in starting out by crafting a clear vision for what kind of game and world you want to build, and sticking to that vision throughout development. A well-developed vision serves as both a driving force on the way to a complete game, as well as an anchor that limits expansion in tangential directions that could otherwise jeopardize cohesiveness of the experience.

In its earliest form, Cogmind’s premise as a 7DRL was pretty simple: You’re a robot building yourself from scratch using parts found and taken from other robots, with rampant item destruction so you’re forced to rebuild pretty often. That’s just the core mechanic, and about the smallest vision you can have (which is actually what I recommend when starting to build a roguelike), though even then my vision included an immersive interface and using sensor data to help navigate a living world occupied by both hostile and non-hostile robots.

Cogmind 7DRL screenshot

Cogmind 7DRL! (2012)

The potential scope for a 7DRL naturally has its limitations, and while my vision for the commercial version of Cogmind didn’t make any significant changes to the original, it was however greatly expanded as evidenced by the 7DRL’s one-page design doc ballooning into a hefty doc describing a world of more varied locations, interactive machines, NPCs and “robot life.”

And yet amidst all of this the player is not the center of attention--sure there’s a lot going on in the world, but in most cases you can even simply try to be a spectator. That I keep revisiting this aspect whenever I add new content shows that it is indeed an ingrained part of the vision. For example, DSFs are a new type of map added in Beta 11, and as with most other locations you can happen across unexpected events which have nothing to do with you at all, just inhabitants of the world driven by their respective history, relations, and goals.

Cogmind DSF Layout and Features, Annotated

So this is along the lines of what one would expect to find inside a little DSF, but the player isn’t the only one who might find their way inside…

Many times throughout development, sticking to a vision also means having to resist the urge to add certain features/content that might seem cool, either to yourself or players. There’s never a shortage of tempting ideas and feature requests out there!

Sometimes you might be able to edge an unlikely one into the game, maybe there’s some creative way to do it, or preserve the concept in some other way, but never at the expense of compromising on vision (or really many other parts of the philosophy we’ll be covering here!).

Difficulty

I want my games to be challenging but fair. Challenging in that it takes a decent enough understanding of the game’s mechanics and content in order to build the necessary grasp on effective strategy and tactics to sometimes win; fair in that a player with an excellent understanding of those aspects should pretty much always win, as long as they’re not intentionally attempting something dangerous or even more challenging.

In a mature player base, the natural result of this approach is more or less a bell curve.

Cogmind Player Skill Distribution Curve

I posted this curve back in my difficulty article, saying that it’s just an illustration, but the actual curve based on player score data actually looks more or less like this.

Of course not everyone has the time or inclination to develop the skills necessary to improve or explore at their preferred rate, so although I always design Cogmind around the intended challenge level, the “Rogue” difficulty, I eventually added two other difficulty settings, one a little easier for those who want to retain most but not all of the challenge (“Adventurer”), and another which is much easier and literally dubbed “Explorer” for those mostly just wanting to explore the world rather than seeking tough challenges.

This is one area that reflects an evolution in my design philosophy, since based on my personal preference the idea was originally to have only one way to play, as with all classic roguelikes. It certainly makes some sense that in a genre known for its challenges, everyone should ideally be playing the “same game” to maintain matching expectations and reference points during community discussion/sharing/bragging :P

But as described here on the blog when I first introduced difficulty modes (see there for much more discussion), in the modern age of roguelikes, including some of the most popular ones, we do now see examples of adjustable difficulty.

In my experience (and I’m very active within the community), accommodating more players like this hasn’t really had any major negative side effects. (Well I do recall there was that one negative Steam reviewer who went off the rails about how roguelikes should not have difficulty levels because how are you supposed to know which it was designed and balanced for, but they apparently didn’t read the one-line description of the Rogue difficulty on the selection screen, which literally says it’s the mode the game was designed for xD)

The majority of players do still play the mode Cogmind is designed around (in some cases later switching to it after gaining experience in other modes first).

Cogmind Change in Player Difficulty Distribution (Beta 8~10)

More players have been using easier difficulty settings since the pre-game menu was added, but still appear to make up a minority of the player base.

Cogmind’s easier modes are also more than just number changes--there are extra mechanics and features aimed at tweaking the experience for players via tangible strategic and tactical benefits, for example highlighting the positions of hostiles that have become aware of your position.

Cogmind Alerted Enemy Markers (Adventurer/Explorer feature)

This feature was originally added for everyone, but is really too advantageous for the player in normal play and therefore removed from Rogue mode in particular.

Back to the idea of fairness, it’s worth highlighting some of the important elements that contribute to maintaining it, especially in a RNG-heavy genre like roguelikes.

One of the most important is the need to telegraph or signpost major challenges so the player can make a semi-informed choice about the dangers of something even on first encountering it. With individual enemies this is often easier, since you can at least always examine their details to see how powerful they are, but it’s also important on a macro level, like what parts of a map might be more dangerous (bigger doors to access it?) or what maps are more dangerous in the first place (special defenses around the entrance? or just a menacing or suggestive name :P).

These signposts can range from subtle to explicit, depending on the danger level and, more importantly, how unexpected the results might be given a general understanding of the world order.

Cogmind Heavy Class Active Sensor AOE Warning Animation

The new Heavy class added in Beta 11 makes quite a point of signposting itself because of their extreme effects on the local area.

For example, integrating with the Exiles’ FarCom system gives some pretty nice benefits in most areas of the world, but when you do so there is a huge drawback they warn you about, and the consequences are so harsh (but sometimes forgotten by the time they might come into play) that in Beta 11 a second reminder was added lest forgetting that little detail simply end the run.

“Instadeaths” are an unfortunate possibility not always easy to avoid in many roguelike designs, though interestingly in Cogmind’s case the player has so much “HP” that death is naturally a protracted affair rather than a potentially sudden or even quick chain of events. While on some levels this can be a frustrating experience, the chance for comebacks is also very high, especially among skilled players, and pulling one off feels very rewarding.

It’s important to give the player tools to recover from mistakes or unexpected events, a role most roguelikes fill with consumables or escape abilities. Beyond being able to swap in more and more parts to block hits and deal with (or avoid) threats, Cogmind uses a fairly unique approach by being able to 1) take a huge beating, and 2) outrun most enemies once reduced to a naked core.

Cogmind Purge and Flee

Instantly “purging” all attached components and making a run for it, to survive and rebuild another day.

Players new to Cogmind tend to have trouble quickly realizing the implications of such mechanics in order to take maximum advantage of them, but it’s fun watching new players think they’re pretty much dead, then get lucky after being reduced to scrap and end up rebuilding right back up again. Eventually with enough experience the luck component of rebuilding can be significantly reduced (in fact, last year one of Cogmind’s top players streamed a run in which they intentionally nuked their own build to repeatedly rebuild from scratch on every new floor, and still made it to the final floor regardless).

Giving players ways to control their own difficulty during the run is also useful for contributing to its fairness, as well as making it feel more fair, too, in the sense of “well it was my choice to take on that more challenging area…” For this purpose many roguelikes have optional areas, be they branches with a different risk-reward profile, or an “extended game.” Cogmind has both of these, as well as numerous win types with varying conditions.

On a similarly macro level, branching paths with multiple segments also include intermittent ways to return to the main areas of the world (to recover health and return to what are generally easier/safer locations) rather than continuing onward, allowing players the option to back out early after reevaluating their situation and goals rather than feeling trapped.

Cogmind World Map Structure (created in yEd, partially complete, with branches distorted)

Cogmind’s world map as seen in my yEd graph (initially shared in my Cogmind dev tools article), albeit with branches distorted and some locations completely removed to keep the spoiler level low. You can still see how there are paths from individual branch maps that cut out early to return to the main areas.

Not surprisingly, the base difficulty of Cogmind has fluctuated over the years as more and more content is added, sometimes leaning to the harder side, other times easier, so there is always a need to revisit and adjust the overall balance to keep it within my target range. Most recently, Beta 11 swung it back towards higher difficulty, after quite a number of releases that originally pulled it in the opposite direction.

Balance

Good balance is of course another important contributing factor of fairness. Not all games (especially single player games) have to strive for balance, but for me it’s absolutely vital. Among the many other benefits of balance, it provides a clearer frame of reference when designing new features, and players in turn have an easier time establishing their own frame of reference for putting together builds and strategies.

Numerical balance is a good place to start, as I did way back with Cogmind 7DRL and wrote about here on the blog before, and more recently with the full Beta 11 rebalance. But a game’s balance also needs to aim for the right feel, regardless of the numbers. It doesn’t matter if some mechanic is technically balanced if it doesn’t also feel balanced to players.

Cogmind Design Spreadsheet Collage

Any balanced game of sufficient complexity is going to be backed by lots of spresheets!

This can be an especially thorny issue with roguelikes (or any RNG-reliant game, really) in which percentages are often known but results don’t necessarily align with individual player expectations, even if statistically correct.

This reminds me of the machine hacking results which caught a lot of flak from players over the years (and always seemed odd to me as well, to be honest), enough so that I eventually gave it a different kind of custom-built PRNG, and complaints have since stopped. Amazing! (The results aren’t as randomly distributed now, but it’s random enough and feels better, and that’s what’s important.)

When we’re dealing with something as arbitrary as “game feel,” listening to player feedback is going to be important, though even more important here is the indirect feedback, i.e. simply reading about player experiences and preferences (or watching them, in the case of streams).

I take a lot of this into account while working on updates and designing future features, and it’s especially relevant for all the times individuals might claim item/mechanic X is terrible or useless. Many players pass judgement based on their own limited experiences and/or personal preferences and biases, but as long as we can see that item/mechanic X is useful to and/or enjoyed by some other types of players, then it’s likely serving its purpose.

So numbers aside, we also have to take play style into account with regard to balance, and content and mechanics that spark debate between players is a good thing. Usually it’s just enough to watch players hash these things out themselves, although sometimes I’ll want to explicitly join in on or bring up some topic for discussion (this was a big part of the final Beta 11 rebalancing, which I also streamed in order to discuss with everyone--videos in that article).

Now “balance” doesn’t have to mean everything is directly comparable to everything else on an equal playing field. Context is important. There are many ways to balance an item/mechanic, including even methods completely outside the object itself! (Okay from here on when I write “item” it means “item/mechanic,” because they’re often interchangeable given that most of Cogmind’s mechanics are based around items :P)

Obviously we have our core set of items which are numerically balanced, essentially directly comparable and found all over the place. Then there are those which are tweaked to emphasize one characteristic over another, for example extra power at a greater resource cost. To keep things interesting while remaining balanced we essentially apply more and more significant tradeoffs--bigger benefits for bigger drawbacks, all the way up to the crazy level if we want to. This is the space that Cogmind is exploring more and more of as time goes on with a stable and balanced foundation already serving as the core.

Cogmind Active Sensor Suite Activation Animation

The Active Sensor Suite added in Beta 11, occupies a whole three slots on its own, more than any other sensor, but also also has multiple powerful functions, but also eventually alerts enemies to your position.

To give us more leeway in terms of making interesting items, external balancing factors are the most interesting, but also the most demanding in a development sense. Some items can be outright better with few to no tradeoffs if, for example, they are simply more rare, or difficult to acquire. There are some items which are insanely powerful, but can also be very difficult to acquire. The “difficult to acquire” part is what adds development pressure, since it’s no longer purely about the item’s own design and implies the need to also design and build whatever is making it hard to reach in the first place.

At the same time, it’s also pretty cool that due to Cogmind’s built-in “ultimate balancing factor”--the fact that most items are destroyed eventually, we have a somewhat easier time balancing (and therefore including in the first place!) what would otherwise be a lot of overpowered items. The heavy reliance on this factor becomes incredibly obvious in the RPGLIKE special mode, which all but removes attrition and is much easier as a result, especially once you acquire powerful unique items which then carry you :P

While Cogmind includes several item repair mechanics, by necessity these types of unique or powerful items generally cannot be repaired (though they can be better protected through various means!). As a new player it’s easy to initially be shocked at the amount of item attrition in Cogmind, but this very element makes possible a lot of Cogmind’s fun mechanics, and many players come to realize this and embrace it, as well as learn how to mitigate that attrition through a better understanding of the mechanics, and simply better tactics.

Technically if we were to teach players actual strategy in the game itself, it would certainly help retain those who can’t figure it out themselves, and I’ve considered this possibility since early development, but continue to feel that sort of information is better served by sources outside the game (community, guides, etc.) and doesn’t really belong inside a roguelike, especially an immersive one about discovery.

Criteria

Content isn’t added just for the heck of it, or even filtered purely based on balance considerations, as there are various other criteria to satisfy as well.

First of all there has to be enough design space to sufficiently flesh out a piece of content, and once fleshed out it can’t interfere with other features.

With Cogmind an unfortunate example of this is the much desired environmental-type effects found in some other roguelikes, like fire, gases, or anything other kind of temporary state which can occupy a cell or area. Even my original Cogmind 7DRL design docs listed this potential, but it’s not very compatible with the type of game that is Cogmind, especially in its since-expanded form.

One of the issues is simply a case of presentation. With only three components of information available in a given map cell--character, foreground color, and background color, we don’t have enough room to also comfortably display persistent effects like this. The most likely candidate for showing this sort of effect is of course background color, but we already use that for other sorts of temporary information, especially at the interface layer. Maybe environmental features could be included if they were an occasional thing that only affected a small area for a shorter time, but that goes against the principle of aiming for fleshed-out features.

Either way, having something like this also shifts the design away from its core focus on robots and items (and to a lesser extent, machines), while adding a lot of potential clutter to the UI, especially once taken to its natural conclusion of being a full feature complete with raging fires, billowing smoke, waves of radiation, and whatnot.

XCOMRL Blaster Bomb Destruction w/Fire+Smoke

I do really love me a good spreading fire and FOV-obscuring smoke, though… (Taken from X@COM, this particular old recording doesn’t really show off the environmental effects so well since it was intended to demonstrate blaster bombs instead of incendiaries, and doesn’t leave much to burn, but some effects are clearly apparent there :D)

Focus on as few core areas as possible, and do them well!

At the same time we ideally want any new content to hook into as many other existing elements as feasible (taking into account design, architecture, and development effort), lest they feel out of place. The more interconnected the world, the more natural it feels (and therefore less gamey and more immersive).

One of many examples here are Fabricators, which in a game sense exist most fundamentally to allow the player to build things, but these machines can also:

  • produce robots and items for the enemy, the former of which will head off to join the nearest Garrison, and the latter are scheduled to be picked up by a Hauler
  • have their own scheduled builds intercepted or modified by the player
  • be hacked for various other purposes (in one case even as an attack vector)

There are currently still some “feature stubs” present in Cogmind, very early pre-alpha experiments which were never removed, but also never expanded, perhaps in the hope they will one day become “a thing.”

One of these is implemented and working despite never even having have any associated content: the ability to require components when building something at a Fabricator. Eventually I should decide whether and where to use this, but it’s the kind of thing where at this point if it were used, it likely would not be very fleshed out, and seem like an odd outlying sort of feature, so for that reason I’m not really eager to take advantage of it…

Currently I think this one in particular only has a reference in the gallery data exports and schematic Fabrication data readout, though technically should be hidden from there for now, too.

Cogmind Item Schematic Info w/Components

This entry simply indicates “None” for all schematics.

Another situation that falls under this category and should ideally be removed or modified (or expanded?) is the handful of items with “internal batteries” of limited use, which take effect when dropped on the ground. It feels like an outlier type of mechanic.

All in all, “non-part items,” as in items that cannot be attached as usable equipment, were a mostly experimental feature not present in the original design, so one day revisiting them to consolidate their behavior would make a lot of sense based on the way I normally approach feature design as described here.

But therein lies another principle: When considering changes, avoid quick reactive decisions and prefer to wait for a sort of “critical mass” before making a move. Quick decisions lead to mistakes, which in succession will compound on one another and just create a mess. So I keep a lot of notes about various topics and plans (a lot of notes), and revisit them for additional updates from time to time, waiting until I feel like I have a strong enough grasp of the potential consequences of such a change (or new feature, for that matter) in order to implement it with confidence that it’ll have the desired effects and is the best option available.

Specific to the non-part items, I can see that I’m still kind of shaping their role and breadth in the game, so doing anything with them too early would be a problem in that it’s still too hard to tell what exactly should be done with them, if anything. So yeah, this is basically a little ongoing experiment, which is okay in a game that’s still in constant development anyway :P

In the end, consistency is important, both in terms of world building but also just generally in terms of mechanics. Concepts that sound cool but also likely break implied rules or otherwise introduce inconsistencies are usually best avoided. Wiki-heavy “kitchen sink” games (and roguelikes in particular) are definitely a subgenre enjoyed by some, though that’s clearly not my style. Maintaining internal logic is important and useful for easier player understanding, while also meeting expectations.

In that sense, expectations are a powerful driver, and limiter, on development. I’m frequently asking myself what players will expect, or even hope, in a given situation, and factoring that into plans.

At a basic level, this implies the usefulness of rooting a game in realism, and that is without a doubt a good starting point since many players share that common ground and make assumptions based upon it. The better a job one does at world building, however, the more you can get away with features that otherwise break with that realism since they at least hopefully make sense in context.

As far as player “hopes” are concerned, we know that players exploring content will always be asking “can I do that? / what happens if I do this?”, and it’s really nice to be able to accommodate those possibilities when feasible (always with the “when feasible…” :P). As the developer, I should ideally have a better understanding, and also ultimately some control over, what kinds of questions players will be asking as they interact with the world. So if I feel that some feature will create too many questions without answers, or without good answers, that’s a clue that it might not be developed well enough to include in the game.

Cogmind Sample Garrison Layout, Annotated

The ability to enter Garrisons as a separate map was a direct result of me assuming players would want to be able to explore inside if possible, and it was only after that point that I even started coming up with what would actually be in there :P (eventually the interior continued expanding a couple times with new features, with another update due in Beta 12/the next release)

Long-term GaaS dev (which really defines most traditional roguelikes, including Cogmind, but without the monetization aspect--most of us just do it for free, or essentially at a huge discount xD) also means that you can spend a lot of time observing what players are actually talking about, and react to that through further tweaks, or take it into account for future features and direction. Again it’s usually better to observe this sort of thing via player discussions rather than pay quite as much attention to direct feedback, since the former tends to be more telling. You also get a greater sample size by seeing multiple people discuss a topic, which is important for an RNG-based procgen game with many different encounters and play styles.

Density

“Content density,” or essentially the amount of possibilities in a given area (usually defined as a map) doesn’t need to remain entirely consistent throughout the game. In fact it’s kinda nice to have some areas that are simpler, and therefore more predictable (good for planning!), and others which have a wide variety of possibilities (good for surprises!).

Because it’s much easier to develop “micro content” (like items and mechanics) than “macro content” (maps and factions), I’m always saving up a lot of ideas belonging to the former category to help populate the latter once they’re finally added over time. This will result in a better moderated experience than if I were to give in to the desire to completely pack the current areas with even more items. It also gives me a decent-sized pool from which to select concepts which will best work for a new area, rather than trying to come up with completely fresh ideas on the fly. I generally prefer to let concepts stew for a long while before actually using them (though on occasion I do suddenly add a pretty outlandish idea for fun--see Throwing Claymores :D).

With the next releases it’s finally time to start adding more involved new maps and factions, so I’ll be happy to draw from all these other mechanical possibilities. I’m sure the United Federation of Derelicts should and will have some unique offerings ;)

Lore

Lore is typically an overlooked potential component of roguelikes, but I really like telling stories and infusing that process throughout the experience, something which can definitely be done with the right approach (a topic already covered in the Weaving Narratives into Procedural Worlds series).

As it pertains to design philosophy, lore is more than just a story though, it’s the background which can be used to glue everything together. So like the earlier mention of creating connections between systems on a technical gameplay level, lore can have the same effect on a different level, explaining how and why certain things are the way they are, so that it all makes sense and is connected in yet more ways.

At first Cogmind’s lore was told purely through terminal entries, since that was the only medium available. (Note: I decided to forgo item descriptions for this purpose, since they would actually reduce the type of immersion I’m going for, and instead some item descriptions appear in terminal entries instead.) Later once branches, events, and NPCs were added, an increasing amount of the lore came from those sources, eventually overtaking terminals.

Rule #1 of lore: Never give players all the lore.

This helps create a sense of wonder by leaving room for interpretation and imagination. Exhaustively answering every single question, explaining every link and detail, is overkill, not to mention probably involves a ton of reading! We’re mostly playing a game, not reading a book, so I feel it’s more appropriate to offer little bits here and there, just the right amount of information on which to build a decent framework of the world and what’s happening there.

Cogmind Lore Collection UI (random test text)

Cogmind’s lore collection interface, for conveniently referencing all the important lore encountered across all runs, here in a recording made when it was under construction so that’s just a bunch of placeholder text.

Going about this correctly does involve writing more of the lore than is actually provided in game, then strategically selecting what to share from that, like at least most of the major parts, but players are really good at coming up with their own ideas to understand unexplained bits at the edges, or filling in cracks. Players also have fun sharing their fan theories, and I’ve had a lot of fun reading them, too--heck, some are cool enough to become canon if necessary at some point ;)

Leaving pieces of the world and its background vague or incomplete has another useful advantage: flexibility with regard to future content. Since not everything is clearly set in stone and more than one interpretation can apply, new content is less likely to be irreconcilable with old content, meaning less of a need for annoying retcons (which can be costly or even impossible in gamedev due to the potential cost of changing chunks of content or even how certain things work).

And that’s it, no more lore rules for today :P

Tedium

Tedium is bad. Must stamp out!

“Optimal tedium” is a common topic of discussion in roguelike communities, unsurprising as some top players attempt to eke every iota of advantage out of any mechanic that will allow them a 0.01% better chance to succeed. The issue is particularly acute in granular turn-based systems (e.g. most roguelikes), since reaction times don’t play a role and everything can be calculated out to give an idea of the relative chances involved. While I’m not really concerned with the 0.01% (or even 0.1%) categories, there is definitely a threshold beyond which tedium would become really noticeable with lots of people willing to do it, and a drag on enjoying the experience.

To be clear, by tedium I mean for example going out of one’s way to spend lots of time doing something that isn’t particularly fun or strategically interesting, or otherwise excessively repetitive boring actions.

I try hard to preemptively avoid designs that will result in tedium, and although as a player I’m not quite that sort of optimizer myself, I can usually spot areas certain others would try to take advantage of, especially after years of “training” watching the player base do their thing… Yay for long-term open development ;)

Of course I can’t always catch all these possibilities in advance, especially in a sufficiently complex game world with so many interconnected systems. Emergence is both a boon and curse! As usual the answer is to just keep an eye out for what players are doing, take notes, and be open to tweaking designs if necessary.

Minimizing optimal tedium is basically saving players from themselves, always a noble goal in my book.

Exploits

There’s saving players from themselves, and then there’s saving the design from players…

Players are incredibly creative, and there are a lot more of them than developers, so exploits are inevitable. But there’s a fuzzy line between an exploit and strategy… what really classifies as an exploit? My attempt at a definition: An exploit is an unintended interaction that circumvents one or more challenges in a very easy way and (probably the most important factor for me) is reliably repeatable.

Navigating a procedural world, “riding the RNG” to make the best of situations as they present themselves, is a great part of roguelikes (one that Cogmind happens to take to its extreme by also making your build and abilities more amorphous), while having a guaranteed or almost guaranteed way to significantly reduce the difficulty upsets the balanced experiences I want to craft. This is an especially big deal in a large game, where one piece becoming unbalanced can have more and more ripple effects in the long term as systems expand and more are added.

Note that preventing exploits is not meant to place heavy restrictions on strategies--there should already be plenty of those freely available and intended in the design itself; and it also doesn’t prohibit the possibility of the player gaining access to extremely effective means to accomplish some goal--becoming OP is fine as long as the design and balance takes it into account!

It’s also worth emphasizing here that again the line is somewhat fuzzy--some players assume I will “nerf” some tactic they think might be so effective it seems like an exploit, but then I don’t because I feel it falls enough on the strategy side of things. But usually players have a similar understanding as myself when it comes to exploits that need to be removed, and even request that I do something about them (because the players, too, are generally looking for fair challenges and hope to be saved from the temptation to play in an unfun but effective manner!).

Interestingly there’s also another category here, of tactics which aren’t all that tedious but do circumvent the design, the “true cheese,” which to me still harms the experience so I’ll remove that if and when I find out about it (though in some cases players might try to hide certain such strategies from me :P).

Some players are even helpful enough to take screenshots and/or produce and share diagrams to describe their specific strategies, which I can reference when considering changes :D

It can be hard to keep up, though, primarily because some of these are really hard to combat* and require an outsized amount of dev time to address, so I maintain a list of potential cheese to deal with, and just keep an eye on those which are otherwise hard to remove to see how frequent such a factor really comes into play across most runs, and how many people are trying to use it. Prevalent or obviously egregious cheese is removed pretty fast, but anything rarely used which would also require devoting a lot of time to work out sits on the TODO list and waits…

*The word “combat” above reflects an interesting dynamic when it comes to long-term gamedev, in that this facet of development really can be framed as player vs. dev, escalating with each new feature, update, or even sometimes new blood in the community.

It also really helps that I play a decent amount of my own game, which is important especially for solo devs to maintain a good direct feel for the true player end of the experience. I’ve found a few exploitable aspects that way, though mechanical tweaks are a more frequent result of my runs.

Interface

Now I’m not going to cover a whole bunch of interface-related concerns here, but there are a couple which are absolutely vital to my philosophy.

For one, gameplay features always take a back seat to UI/UX concerns. Feature X might sound awesome, but if including it requires the player to learn yet another new type of UI interaction, or anything too slow or complicated, then it’s very unlikely to happen. Ideally simple UI interactions are able to power numerous types of behavior, and can also be expanded to support more in the future (this is one reason radial context menus became more common in games, because they’re an easy way to achieve this goal).

As an example, Cogmind’s ability to toggle items between active/inactive states also included the ability to cycle to a third “overloaded” state for certain weapons and airborne propulsion in its first alpha release. Throughout future versions, that functionality was extended to other types of items in order to unlock secondary active states in which those items have different capabilities, all without creating some new interface for doing that.

Cogmind Part State Cycling

Various parts reusing the state toggle cycling feature to enable different functionality.

Using all the same commands that normally toggle an item, it’s very easy to access these features, which can still be unique to each item, and they’re right there on the interface, as usual--no need to open new menus or windows, no need to press some other types of keys.

Imposing limitations like this naturally becomes a bit of an issue later on when you want to add new features, but to me the best approach is to focus on designing new features that fit within the current UI framework, rather than expanding the game with more interactions. Repeated expansion of the UI to serve new content leads to more and more edge cases and special exceptions, threatening to make the barrier to entry for a game that much harder. Sure all the older players who’ve been keeping up might be okay with it, especially if it enables cool new features, right? But we gotta also consider the many new players who may want to join, and there are still hopefully plenty of neat features that fit into the existing UI framework anyway, so build those!

New UI features might occasionally be called for if really worth it because they’re easy to learn and have wide potential applicability, but as with all things in development, there needs to be a serious analysis of cost (in player understanding and convenience) vs. benefit (cool stuff!!!).

Another Cogmind example of getting more use out of an existing UI function is the ‘<‘ key (equivalent to left-clicking on yourself). It was initially only used to leave a map while standing on an exit, then later expanded to include interacting with a trap at your position. Then even later, this became a new way to interact with certain items on the ground, either as a property of the item itself, or enabled by a piece of equipment.

Because only one object (exit OR trap OR item and so on) can occupy a location at a time and there is no ambiguity with regard to what this simple input is referring to, it’s an easy and consistent way to allow for more item interactions. In recent years I’ve used this to add features like releasing drones from a bay, turning engines into proximity mines, and setting timed charges. This approach plays into Cogmind’s item-centric UI paradigm very well.

Cogmind Sapper Charge Demo

Sapper Charges aren’t easy to come by, but they can be really effective.

With regard to interface development I’m also big on accessibility. The UI is the gateway to the experience, after all, so it better be good, and easily usable!

Full mouse and full keyboard control, difficulty modes, colorblind modes, all manner of audiovisual feedback/reinforcement, a huge and ever-growing number of config options, partial support for key rebinding… Cogmind has a long list of things I put a lot of effort into. It does really bother me that for architectural and design reasons I can’t fulfill all goals in this respect (like full rebind support on all foreign keyboards, or larger map cells), but it’s inevitable in development that some choices will preclude other options. (That’s also the main reason I wanted to make POLYBOT-7 :P)

Recap

All that sure is a lot to take in, so I thought I’d do a quick summary of all the bits that I was originally thinking of highlighting in the text itself.

Disclaimer: This is just my personal approach and not suitable for all games or developers; all of these points were covered with more context and detail above.

Kyzrati’s Game Design Philosophy (ordered by appearance in article, not relative importance):

  • Start with a clear vision, and stick to that vision throughout development.
  • Resist the urge to add features that seem cool but don’t align closely with the vision.
  • Aim for a challenging but fair experience, though accommodating players with differing skill levels and time on their hands is important where possible (even better if it can be done with actual feature changes rather than simply numerical adjustments).
  • Telegraph or signpost major challenges using a variety of means.
  • Give the player tools to recover from mistakes or unexpected events.
  • Integrate into the design multiple ways for players to control their own difficulty during the run.
  • Good balance is vital, and not only in a raw numerical sense, but also just the feeling of balance as well.
  • There must be enough design space to sufficiently flesh out a new feature, though once fleshed out it can’t interfere with other features.
  • New features should hook into as many other existing elements as feasible--the more interconnected the world, the more natural it feels.
  • When considering changes, avoid quick reactive decisions and prefer to wait for a sort of “critical mass” before making a move.
  • Consistency in all things is important, while maintaining internal logic is useful for easier player understanding and meeting expectations.
  • Player expectations are a powerful driver, and limiter, on development, suggesting the usefulness of rooting a game in realism.
  • If some feature will create too many questions without answers, or without good answers, that’s a clue that it might not be developed well enough to include in the game.
  • Varying content density is good, as is avoiding overpacking too many areas.
  • Lore is a great tool for explaining the world and creating more explicit connections between content.
  • Never give players all the lore.
  • Save players from themselves, stamp out optimal tedium wherever possible!
  • Removing exploits is important when building an experience, but not necessarily those which would require a huge amount of work while few to no players are using them for much benefit anyway.
  • Gameplay features always take a back seat to UI/UX concerns.
  • Accessibility is important, address it wherever possible.

In the end it’s important to remember that in any game of significant scope we can’t possibly fully achieve every goal here (hey this is the crazy challenge that is gamedev, after all!), but it’s always worth a try, and worth aiming for those lofty goals!

Posted in Design | Tagged , | Leave a comment