My concept for a Slay-The-Spire-like

In discussions about Slay The Spire on the discord, the consensus seemed to be that the fun of the game was mostly in the deck-building part, not the choosing-your-hand part, despite the fact that the latter makes up the vast majority of the game's length. Building combos is interesting and fun, but the actual combat involves a lot of calculation with very few interesting decisions. This got me thinking: is there a way to make a game like STS that captures the fun of the combo-building, but minimizes the length of combat and reduces calculation?

This post outlines a design sketch I've come up with as an attempt to answer that question.

The basic concept is this: Instead of drawing a hand and deciding on individual cards each turn, the player has a number of sets of cards, and each turn the player decides only which set they want to play. A set is just an ordered list of cards that, when chosen, plays each of the cards in it, in order. There is no "drawing" of cards; the player can always choose from any of their sets. The player doesn't add cards to a deck, instead they choose which set they want to place a card in, and where in the set they want to place it.

This system, I think, would preserve a lot of the interestingness of the combo-building parts of STS. Each set would be it's own combo that can be modified and improved throughout the match. At the same time, it would radically simplify combat. While a turn of STS involves several small decisions, a turn in my game would involve on a single click (or two, if there are multiple enemies to choose from).

Of course, the combo-building in this system would be very different from that in STS. In STS you don't know the order in which you will receive your cards, so when you are deciding whether or not you should take a new card you have to consider all the different ways that it could show up in a hand. This adds complexity to choices about adding new cards, and some of that complexity would be lost in my system you already know the other cards that will surround it. However, my system also opens up new possibilities for combo-building. The fact that you don't know the context in which a card will appear in STS also limits the intricacy of combos. For instance, a group of cards may have one possible arrangement that would lead to an incredible synergy, while being sub-par for the vast majority of other arrangements. Such a group of cards would likely play quite poorly in a game like STS since the arrangement is unlikely to occur, but in my system, where the player has more control over the order of their cards, more intricate combos might be possible.

STS limits the number of cards you can play per turn with it's energy system, in which you have a certain amount of energy each turn and each card costs some amount of that energy. My system will also have energy, but each set will have it's own energy value. So when you play a set, the cards are played in order, each subtracting their energy cost from the set's energy. If a card requires more energy than the set has left, it will be skipped. This limits the power of a set; you can't just put every card you get into a single set and play it every turn.

This system opens up a new possibility: upgrading the amount of energy on an individual set, but not all sets. In STS, relics that increase your base amount of energy are incredibly powerful, and so they must be rare and be balanced out by powerful negative effects. In my system, a relic (or an upgrade acquired through other means, since I'm not sure whether my game will include "relics" in the same way that STS does) could increase the energy of a singular set. This would be a much milder effect, and so it would not need to be so rare or be balanced out by any negative effect.

I'm not convinced that the map in STS is all that necessary. I think STS would work fine if each act was just a fixed, linear path of encounters/events with 3 or 4 campfires evenly spaced throughout and a shop somewhere in there. At the moment, in my prototype, the gameplay just consists of a continuous stream of enemies being introduced to the player. I'm not really sure what kind of structure there should be other than that. I think it would be nice for the player to have some choice about what types of encounters and rewards they get, but I'm not sure exactly how to implement that (Perhaps the player occasionally can choose between several different "zones" to enter, where each zone has it's own set of enemies associated with it, that would be better or worse depending on your deck?). I also doubt that it's necessary for my game to include card upgrades. I think I still want to include gold and shops, since that seems like a good way to give the player the opportunity to remove cards, move cards between sets, etc.

I don't think that the combats in my game should be as disconnected from one another as they are in STS. Between each battle in STS, all your stats other than health are reset to their defaults, powers are removed, and all the status cards that enemies have introduced into your deck are removed. That's too much state reset, in my opinion. In my prototype, battles aren't separated by any state reset. Instead the battle system works like this: there are three lanes in front of the player, and enemies start at the farthest tile away from the player in a lane. Each turn enemies in the lanes move one step closer, until they are in the tile in their lane that is closest to the player. Once they are in that tile, they begin acting and the player can start to attack them. The player does not interact directly with any of the enemies except for those in the closest tiles, so the lanes are really just an information horizon to show the player what enemies they will soon be facing. (Note: in the prototype, the lanes are 4 tiles long, but I haven't put much thought into that number and that is entirely subject to change) If an enemy cannot move forward because another enemy is already in the tile in front of it, the enemy waits for the space to be open.

This change away from individual enemy encounters means that there is no distinct "end" to an encounter, which necessitates changes to some of the other mechanics:

  • Status effects like strength and dexterity decreases, which last to the end of an encounter in STS, need to be made temporary in one way or another (if they are to be used at all). They could be simply be removed after a few turns, or they could adopt the poison model, where the magnitude of the effect is proportional to the amount of time left on the effect. Or perhaps they could be permanent by default, but there would be a card that resets strength and dexterity back to 0 if they are negative. Presumably the player would start with this card in one of their sets and would be quite expensive, like 2 or 3 energy.
  • In STS the player gets to choose a new card after each fight, but since there is no clear end to enemy encounters my system needs a different way to give the player cards. At the moment, this is just done on a simple timer: every 4 turns, the player is presented with 3 cards to choose from. I chose this only because it seemed like the most obvious system, and this is entirely subject to change.
  • The effects of power cards will need to be made temporary. I don't want to give up on power cards entirely, because they can contribute to some pretty interesting decks in STS. However, their effects can't last permanently, so they need to reset every once in a while, or they need to wear off automatically after a certain number of turns. There doesn't necessarily need to be one generic solution to this problem, different power cards might fade away in different ways. (Note: since power cards will provide temporary effects and won't be removed when used, the line between them and skill cards might become blurry. I'm not sure this is actually a problem, and in fact I'm not sure that the game really needs to distinguish between "attack cards", "skill cards", and "power cards" on a formal level)
  • Enemy-inflicted status cards also need to be made temporary. I actually love the idea of enemies adding negative cards to your deck, and I want that to play a prominent part in my game. Of course in my game they will play a different role, because they be placed into a set, which means that you will have to play the negative card if you want to use that set. I think this opens up even more opportunities for interesting status cards than STS has. Status cards can be made temporary by making it so they are automatically removed after a certain number of turns, or after the set which they are in has been played a certain number of times. Again, there doesn't need to be a single solution to this, different cards could be removed in different ways.

One features that I like in STS, and card games more generally, is that the drawing of cards provides a nice, consistent idle information flow. In other words, hidden information is revealed at a constant rate, so there is always something preventing the player from making concrete plans too far ahead into the future (i.e. lookahead). Most games have some random elements, but often they fail to introduce the new information in consistent way, leading to moments where the info flow is too fast or too slow (for more of my thoughts on this, see this article). Card games like STS handle this nicely by starting every turn with the introduction of new, previously unknown cards. Since my game will involve no "drawing", it misses out on this source of info flow, and so it needs a new one. The enemy system that I described above, where new enemies are randomly introduced every few turns with an information horizon before the player actually has to deal with them, will certainly be a large part of the info flow. Enemy attacks will also be randomized, so they will contribute as well. But additionally, I think the introduction of new cards could actually be a significant part of the info flow. My game will likely be a lot shorter than STS (10-15 mins, I imagine), and so if the player gets roughly the same number of opportunities to choose new cards as they do in STS, they will get that opportunity much more frequently, and so the ever-changing nature of their sets may also act as significant source of plan disruption.

I've been vocal about my support for score systems and real-time games, and I still strongly support both. I don't think that I can make this into a real-time game without turning it into something unrecognizable, so the game will remain turn-based (though I may include a turn-timer, I'm not quite sure yet). However, I it might be possible to use a score system for this game instead of win/loss. The score system that my game will use won't look ANYTHING like the one that STS uses, which is pretty awful as far as I'm concerned. I'm not sure exactly what score system I want to use, and if anyone has suggestions I'm happy to hear them. I don't want to have some long list of things that you sum up like "10 points for each enemy you kill, lose 1 point for each time you take damage, 50 points for each elite you kill on the first floor, 75 for each elites on the second floor, etc.". I also don't want to do the "survive as long as you can" thing where the match lasts an unlimited amount of time, and you get more points the longer you survive. I want the score to be one simple value, and I want that value to be tightly tied to the core of the game: combat. Two possibilities that I've considered and found interesting are:

-Your score is the amount of health you have at the end of the match
-The game ends with a final boss that cannot be defeated, and your score is the amount of damage you are able to deal to the boss before it defeats you (this might be problematic if it's possible for the player to stretch this fight out for too long, since I don't want match length to vary too dramatically)

The big problem with both of those is the same: what happens when the player dies before they get to the end of the match? They could be given a score of 0, but that feels too much like having a score system on top of a win/loss system, which I definitely don't want to do. One option to solve this would be to revive the player if they die before the end of the match, but reduce their score at the end of the match by some number points for each time they had to be revived.

Thematically, I'm not sure what I want to do. The theme isn't super important to me, but I guess it would be cool to do something other than "generic fantasy combat" like in STS (though I probably can't move away from combat entirely). Any ideas this would be appreciated.

I've coded up a basic prototype for this concept, which you can download here. You play by simply selecting the set you want to play, and then choosing the enemy you want to play it on (Sets full of Defend cards still require you to select an enemy, but it doesn't actually matter which one you select since the cards just give you block), and then every few turns you get to add a new card to one of your sets. Intents are shown below enemies, though you can only see health and intent on enemies that are in the tiles closest to you. Right now there are 5 sets, the lanes where enemies spawn are 4 tiles long, and you get a new card every 4 turns. None of those numbers should be taken too seriously at the moment as not much thought has gone into them, they're just the first values that came to mind. I think there definitely need to be at least 4 sets, and I doubt having more than 6 would be a good idea. I don't have any strong thoughts on the length of the lanes yet, I could imagine it just being one tile long (so the player just sees new enemies one turn before they enter combat), or being up to 4 or 5 tiles long. I think that will just have to be decided testing around to see what feels best once I have more of the other mechanics implemented. I have no idea if a new card every 4 turns is too fast, or too slow, or if a timer is even the proper way to introduce new cards.

Right now there are just 2 cards in the game (Strike and Defend), and there are just a few enemies that start in hard-coded positions with no more spawning once those are gone, so it's not yet remotely playable. I'm just posting it to give a more concrete idea of how it might play in the future. Here's a screenshot:



New member
I've not played either STS or your prototype yet so take this with a big grain of salt, but an idea that popped into my head for scoring was number of defeated enemies? You would need some mechanics to make sure it's not the same amount every time of course. Maybe enemies that are stuck in the same position in a lane for too long get bored and wander off. Different enemies could have different scores. Maybe the knock-on effects are too desctructive to the rest of the design but I figured I would throw the idea out there.


Maker of BrainGoodGames
Staff member
Downloaded and played your prototype! I think there is a lot of promise here. There aren't enough cards yet (obviously) but I think with a bunch more and a bunch more enemy types you can get a reasonable amount of complexity going.

It might just be the lack of content, but I feel like sets should go on cooldown (maybe scaling based on their power or something) so you can't spam them. Enemy variety can help with this too but I think it's best to just nip it in the bud. Better to have the player playing a bunch of sets!
Got a new update ready. Here's the download, and here's the changelog:
  • Enemies now approach from the right of the screen to the left, instead of top to bottom. This just uses the space on the screen more efficiently and makes things feel less cramped. There's still a problem with the player's cards overlapping enemies when the set gets too large, but the way it is now is much better than it was before.
  • There are now 4 enemy types (all theming is still temporary):
    • Goblin: goblin.png 12 health. Attacks for 3 damage 50% of the time, and blocks for 3 the other 50%.
    • Ogre: ogre.png 16 health. Spends 2 turns building up an attack, then attacks for 10 damage.
    • Wizard: wizard.png 9 health. Inflicts 2 vulnerable (makes you take 50% more damage) 50% of the time, shields all enemies for 2 the other 50%.
    • Witch: witch.png 5 health. Puts a Curse card at the front of whatever set the player uses this turn. Curse cards steal 1 energy, and disappear after 2 uses.
  • There are now 7 cards:
    • Strike: 1 energy. Deal 3 damage.
    • Defend: 1 energy. Gain 2 block
    • Swipe: 1 energy. Deal 2 damage to all enemies.
    • Dodge: 0 energy. Gain 1 block.
    • Barricade: 2 energy. Gives 4 "Barricade" status, which makes you not lose block at the end of your turn.
    • Thorns: 1 energy. Gives 4 "Thorny" status, which makes enemies take 1 damage when they attack you.
  • Enemies now spawn continuously throughout the match. They spawn slowly at first, but quickly pick up to the point where one enemy is spawning per turn.
  • Each time you kill an enemy you now get 5 gold. Gold doesn't actually do anything yet, but it will eventually be spendable in shops and also be involved in the score system.
  • The game now starts with the following sets:
    • Defend, Defend
    • Defend
    • Strike, Strike
    • Strike
    • Random card
The game still isn't what I'd call "playable", but it's certainly closer. Right now it's quite easy to survive even when the entire screen is full of enemies queued up to attack you. By the next update I'll try to have it to the point where it is genuinely playable.

Since the last time I posted I've figured out what I want to do for the score system (thanks @evizaer for talking through some ideas with me). Whenever you kill an enemy (or perhaps whenever you complete an area, which I will explain later), you will get some gold. Gaining gold will increase your score by the amount you pick but, BUT spending gold will not decrease your score. For example, if you start the game, collect 100 gold, and then spend 70 of it at a shop, you will have 30 gold left, but still have 100 points.

I had thought before about simply having the amount of gold you have left at the end of the match be your score, but that would mean that high-level players would be incentivized to buy as little from shops as possible, which would probably make the game less interesting. By making spent money not be deducted from your score, the perverse incentives are removed.

One potential problem with this solution is the fact getting more gold makes it easier to get even more gold in the future, since you'll be able to buy more upgrades in shops. This means that there would be a super-linear relationship between skill and score, when ideally the relationship should be linear (I think). To combat this, buying items in shops will make all other items more expensive for the rest of the game. This should balance out the super-linear effects of gold begetting more gold, since the marginal value of gold decreases as the total amount of gold increases.

Another problem is that if each match contains about the same number of enemies before the boss, and each enemy gives about the same amount of gold, each match that reaches the boss might end up with basically the same score. To explain why this won't be too big of a problem I need to describe some of the systems in the game. Firstly, the match structure will probably look something like this:
  • Combat phase 1
  • Shop 1
  • Boss 1
  • Combat Phase 2
  • Shop 2
  • Boss 2
  • Combat Phase 3
  • Shop 3
  • Final boss
Each combat phase will be something like what the prototype currently is: a stream of enemies walking towards and attacking the player. However, I think that each combat phase should be broken up into 2 or 3 smaller chunks, and at the beginning of each chunk the player will have the option to choose between several different areas. Each option will show the player what types of enemies will be in that area, and show how much gold will be rewarded for completing it. This will introduce some opportunity for variation in the amount of gold the player gets, as players who aren't as good will choose the easier areas, which will offer less gold.

Additionally, there will occasionally be "wandering monsters" that show up during the combat phase, which the player can optionally fight. Fighting and defeating the monster will give some sort of reward (not necessarily gold, it could also be a new card, or an opportunity to remove a card, or extra energy for one set, etc). This will act as another way for better players to get extra gold. I don't think that these two solutions will quite be enough to allow for as much variation in score as I want to be possible, but they are a good start. I'm currently thinking about other possible types of OCRs to add to help improve this.

Side note: I'm thinking of letting the player see the schedule of bosses that they'll be fighting from the very start of the game, and maybe even some more information about what card rewards they'll be offered at some key points in the game. I think providing this information will let the player form more complex, specific long-term plans and really fit their combos to the types of challenges they'll actually be going up against in a particular match. This also removes the possibility that exists in STS of getting a boss that your deck isn't well suited to, e.g. when you have to fight The Unawakened with a Power-heavy deck.

The question that I posed last time, "What happens when the player dies?", still needs to be figured out. Right now I think that the player should be revived, and their score should be reduced by some amount. And perhaps when they die they automatically skip the rest of the encounter they are in (either a combat area or boss fight), and they don't get the reward from it. A simpler solution would be to just end the game when the player dies, but I don't like that idea for two reasons. First, it kinda implies that the purpose of the game is to get to the end and beat the boss, while my system puts more emphasis on the score, since the player will reach the final boss even in their first match. Second, ending the game when the player dies makes taking on difficult combat areas very risky, while under my system they will be significantly less risky, while still maintaining an incentive for the player to not take on something more difficult than they can handle.

One of the cards introduced in this update is Dodge, which provides only 1 block, but costs 0 energy. 0-cost cards, at the moment, are problematic for this game. In STS they are fine, because they tend to be weaker than other cards, and you only draw a certain number of cards each turn. Drawing a 0-cost card, therefore, reduces the number of choices in how to spend your energy on the more powerful effects that non-0-cost cards offer. In my game, however, the fact that you don't draw cards means that 0-cost cards don't carry any adverse effects. At the moment, the player can just fill a set with as many 0-cost cards as they want, without any downsides. Getting a 0-cost card is just an opportunity to provide a free, permanent boost to one of your sets, with the only cost being the opportunity cost of not choosing another card. This clearly isn't ideal, and so I need some way to discourage the player from filling their sets with tons of 0-cost cards. One simple way to fix this would be to put a cap on the number of cards that can be in a set to, probably at 4 or 5 (curse cards inflicted by enemies would be able to go over this limit). This would mean the player couldn't take an unlimited number of 0-cost cards, but they would still be pretty valuable to fill in the empty spaces in sets that have all their energy used up (though it could at least encourage players to wait until the later game to do this, since filling an entire set with 0-cost cards cuts you off from adding new cards once you increase the energy in that set). I think that's a decent solution, but I'm still looking for better ones.

@BrickRoadDX yeah having sets go on cooldown is an intereting idea. Even just a cooldown of 1 turn, so you simply can't use a set twice in a row, might be enough. This update doesn't include that, since I want to determine if it's really necessary once the game actually has more content, but I'll definitely experiment with that in the future.

Edit: I'm not quite sure whats causing the problem that evizaer is having with windows defender reading the game as a trojan, and I'm still looking for a solution. But for the moment, here's a backup html5 build if anyone else runs into the same problem.
Last edited: