My concept for a Slay-The-Spire-like

#1
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:

NotSlayTheSpire_screenshot.png
 

Myko

New member
#2
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.
 

BrickRoadDX

Maker of BrainGoodGames
Staff member
#4
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!
 
#5
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:
#6
New update! Here's the build, and this time it's playable in browser instead of requiring a download. There are a TON of changes this update, it's hard to even remember them all, but here are the most important things:
  • I added SPACE! Instead of having 3 independent queues of enemies lined up to attack you, there is now a 5x5 grid where the enemies move around. They spawn on the right side and generally move towards the left, but some of the enemies stop and take their actions before reaching the leftmost column. Wizards and witches stop in the middle column and cast their spells from there, goblins stop in the second column and attack from there, and ogres go all the way to the closest column and then attack. I made this change because it seemed like a good way to add some additional complexity to the game in an intuitive way. There's now the potential for cards have effects on the grid itself, e.g. placing things that deal damage when enemies step on them, instead of just having a bunch of integers that get go up and down. Cards, instead of being played on one of the three enemies, are now played on a tile in the grid.
  • Adding the grid introduced the opportunity for an interesting new mechanic: each card has a certain region of the grid on which it can be played. Strike, for instance, only has an effect when played in the three leftmost rows, and there are cards which can only be played in the three rightmost rows, etc. The region is displayed when you hover over a card while selecting a set; the tiles in which it can be played are highlighted in green. Since sets can potentially contain cards with different regions, any set can technically be played anywhere on the grid. However, there is a card in the set which cannot be played at the tile that was selected for the set, the card will be skipped in the same way as it would be if there was insufficient energy.
  • There are 7 new cards, and one card has been renamed and re-themed. I won't go into detail here because the descriptions are all visible in game.
  • I've implemented much of the match structure that I talked about last time. There are now three "Phases", and each phase consists of three "Encounters", and then a shop (the shop is skipped in the last phase, since it serves no purpose). In each encounter there are 4 enemies. You can see all the enemies you will face at the start of the encounter, but they don't all spawn at once; instead they spawn over the first 2 or 3 turns. The shop sells a large number of cards, and also allows you to remove cards from your sets, and to swap the position of cards.
  • You now receive two cards at the end of each encounter, as well as the opportunity to either remove a card or swap the position of a card (this is probably temporary).
  • You can't use the same set twice in a row (thanks for the idea @BrickRoadDX , I think this works really well!)
I said last time that I'd try to make the game genuinely playable by this update, and I think that's basically true. It's not very fun and there's not much depth yet, but I think that it's playable enough that it gives a picture of what I'm shooting for. Right now I think some of the biggest things missing are bosses, minibosses (the optional encounters you can initiate for extra gold that I called "wandering monsters" last time), and a large variety of cards.

Right now the way enemies are picked for encounters is very simple: you simply face 4 enemies with randomly chosen types. One of my next priorities will be to make this much more fair as well as making the difficulty ramp over the course of a Phase, so the second encounter will be harder than the first, and the third harder than the second.

Another lesser priority is adding potions. Potions will act much like they do in STS: they'll be rewarded after some combats, you'll only be able to carry a small number of them, and they'll be a free action you can activate on your turn to give you some positive effect. Having created the reward menu in this update, most of the hard work for implementing potions is already done, so I imagine I'll have them done in the next update.

As I mentioned, in this build you have the opportunity to remove or swap a card after every encounter, but it probably won't stay that way. Having this opportunity so often means you rarely need to by either effect in the shop, and as it is now you often don't even want to use every opportunity you get. I think giving two cards per turn is fine, but other than that I imagine that it will roughly be something like 50% of the time you don't get anything else, 25% of the time you get to remove or swap a card, and 25% of the time you get to choose from one of several potions.

Here are a few of the design problems I'm thinking about right now:

In STS there isn't really a hard upper limit on the amount of cards that you can have in your deck, since adding each new card has the small, diffuse effect of making all cards be drawn less frequently. However, in my game as it is currently, you have a fixed number of useful places that cards can go. This means that sets can quickly fill up, and new cards can become useless. I imagine that, if no change is made to fix this, the contents of all sets might be decided quite early in the match, with only occasional changes as the few cards that the player might actually want happen to show up. There are a few things I already planned to do that will counteract this to a certain degree, such as:
  • Allowing the player to upgrade the energy in a set of their choice each a few times throughout the match
  • Increasing the number of sets the player has access to over the course of the match (I'm not entirely certain about this one)
  • Give the player the rare, extra-powerful cards after boss combats
These would all mean that things couldn't be entirely decided at the start since the player will become more powerful over time. However, I'm concerned that this won't be enough on it's own, and so I've got another idea that might help: Allow cards to be permanently "damaged" in some way. This could be the result of some enemy ability, or perhaps could happen if a set is used too frequently. Damaged cards would be worse than the default cards in some way. I imagine this would be implemented as having a few different detrimental effects, one of which is randomly chosen and attached to a card whenever that card becomes damaged. A few ideas for card damage effects off of the top of my head:
  • Card costs an extra damage
  • Using the card deals 1 damage to the player
  • The next card in this set is skipped
Players would thus be consistently encouraged to remove their damaged cards and find new cards to replace them. I think this has the potential to make the set-building a lot more dynamic and interesting, if it's tuned properly.

Another problem is turtling. Since there is now continuity between encounters, there can be an incentive to drag out encounters in order to dispell negative effects. For instance, if you have vulnerability, and there is just one goblin left alive, you can just block every turn until the vulnerability wears off, so that you won't have vulnerability next encounter. Or if you have curses in some of your sets from a witch, you might try to use those sets before killing the last enemy, even if don't have any real value to you in the combat. I see now that avoiding these kind of annoying min-maxing situations is one advantage of the "reset almost all the state" approach that STS takes. However, I'd like, if possible, to avoid these problems without resorting to resetting debuffs or curse cards between encounters. Here are some ideas on how that could be solved:
  • If the player takes too long in an encounter, a special enemy could spawn and attack the player. This enemy would be unkillable, and the only way to get rid of it would be to kill the rest of the normal enemies and end the encounter. Multiple copies of the unit could spawn if the player takes an exceptionally long time. However, this could fail if the player has enough block to withstand the special enemy. Additionally, if, for instance, the special enemy spawns after 10 turns, and the player has the opportunity to finish the encounter at turn 7, they'd still be incentivized to min-max for 3 turns.
  • Give the player extra gold for finishing encounters earlier. This could just take the form of giving the player some amount of gold at the end of the encounter, but having that amount decrease by 1 or 2 every turn.
  • Make debuffs decay on a per-encounter basis, rather than a per-turn basis. So instead of the wizard inflicting vulnerable for 4 turns, he would inflict it for the rest of the encounter and if he casts it multiple it would last for multiple encounters. Curse cards could behave the same way: instead of disappearing when they are used, they'd disappear after a certain number of encounters. This is kinda a middle-ground between the current way I'm doing things and the STS approach of resetting everything every encounter.
Right now I like the last option best, because the other solutions inherently disincentive strategies that take a long time to implement, which I don't want. I don't have anything against strategies that take many turns, I just don't want the player to artificially extend encounters to exhaust debuffs.

Theme-wise, I think that I might just go with some generic "you are a wizard fighting evil monsters" thing, for lack of a more original idea. So far the cards that I've been making have all been elemental magic stuff, like controlling earth, air, lightning, etc. One advantage of doing things that way is that I can implicitly hint new players towards what types of cards are meant to go in combos together, since I can put useful groupings of cards all within the same elements. Of course that shouldn't tell you everything about how to build combos in the game, and hopefully there will still be plenty more for players to learn past just "earth cards go well with other earth cards", I just think it could potentially be a nice hand-holding thing for newer players. Additionally I think I can use this theme to offer a decent explanation for the odd card mechanics of the game: Each set could be a "Spell book" and each card a "Page".

Oh, and here are a few notes about the controls of the game since it isn't very well polished at the moment and there is no tutorial:
  • You can skip the rest of the rewards in the reward menu by clicking on the x in the upper right corner of the menu if you don't want to remove or swap a card.
  • You exit the shop by clicking anywhere other than on a card or the remove/swap icons.
  • You can choose to not take a card by clicking anywhere other than on one of the cards.
  • The UX is generally just not very well-polished, for instance you can't un-select a card once you've chosen it on a turn. I understand that this is pretty inconvenient, but UX hasn't been a huge priority up to this point, sorry!
  • When the game ends there isn't any way to restart it; you'll just have to refresh the page.
  • The game ends unceremoniously if you make it past the final phase, it just ends the same way that it does if you die.
 
#9
New update: https://ethanhoeppner.github.io/gameFiles/NotSlayTheSpire4/

Here are the changes:
  • There is now basic enemy scaling. Later encounters within a phase are harder than earlier encounters, and later phases are, as wholes, harder than earlier encounters.
  • You can now hit shift to de-select a set.
  • The shop now looks a bit less messy. There's a background behind the cards that blocks most of the screen, and you exit by clicking on an X in the upper left, instead of clicking in an empty spot. The way it looks now is not intended to be the final look, it's just to make it slightly easier to look at for the time being.
  • The screen for card rewards now looks much nicer. The rest of the screen is darkened out when choosing a card, and there is now a real "Skip Card" button instead of having to click in an empty spot.
  • There is a new enemy: the archer. This enemy is a yellow rectangle for some reason and walks leftward while simultaneously attacking the player. It has 7 health, deals 2 damage per turn, and stops in the second leftmost column. If you don't take this enemy out quickly or have some amount of block each turn, you'll be taking some damage from him.
  • The enemy status system has been implemented. At the moment, there are two statuses:
    • Burn: The enemy takes damage at the end of their turn. The amount of damage taken is equal to the magnitude of the effect.
    • Cowardly: Cowardly enemies will flee if there are no enemies left that don't have the "Cowardly" status. This mechanic can serve several purposes. Firstly, enemies that mostly support other enemies, like the wizard, will be given this status by default so that the player's time isn't wasted being forced to finish them off when they are the only enemies left. Secondly, enemies that are spawned as "Minions" of a boss (or miniboss, or another enemy) can be given this status so that the player can just kill the boss to get rid of all the minions.
  • There are now potions! You start the game with 1 random potion, and after 50% of combats you'll get to pick a new one from two choices (the other 50% of the time you get to swap or remove a card as you did in the last build). At the moment there are 6 types of potions:
    • Damage potion: Deals 9 damage to an enemy.
    • Explosive potion: Deals 5 damage to all enemies in a 3x3 area.
    • Block potion: Gain 8 block.
    • Speed potion: Gain the "Speed" status, which makes the next set you play be played twice.
    • Burn potion: Inflict 6 burn on an enemy.
    • Fear potion: Inflict the "Cowardly" status on an enemy.
  • Witches have been changed. Instead of inflicting a curse every turn once they reach the middle column, they only inflict a curse once every two turns. However, curses are now more powerful: they last for 2 encounters, rather than 1 use.
  • Wizards have been changed. They now inflict vulnerable only once, after which they will give block to all enemies each turn. However, vulnerability now lasts for a full encounter, not a certain number of turns. Vulnerability can stack, so if you get two vulnerability at once, it will last for two encounters. Additionally, the "Defend all enemies" ability they have no longer applies to themselves. Finally, they now spawn with the "Cowardly" status, meaning they will flee if they are they are the only enemy left (or if there are only other wizards left).
  • The cards Barricade and Thorns have now been removed. I think I want to move away from explicit "power" cards like these. There's a new card this update (Firewall) that is similar to Thorns, and I'll certainly add a card that does something similar to Barricade in the future (maybe it'll just preserves block for one turn, like Blur in StS).
  • 4 new cards:
    • Fireball: Inflict 4 burn on an enemy. Applicable everywhere.
    • Fireburst: Inflict 3 burn on all enemies in a 3x3 area. Applicable only in the middle column.
    • Firewall: Gain 5 block, and inflict 3 burn on any enemy that attacks you this turn.
    • Lightning speed: Gain the Speed status (meaning that the set you choose next turn will be played twice)
After this update, these are the major systems that are still missing:
  • Bosses
  • Minibosses, which will be optional encounters you can fight to get extra gold
  • A map where you can see the bosses you will face in the future along with the card rewards you will get from them
  • Something like "Relics" from StS, permenant upgrades of various sorts that you get after boss fights, from shops, and perhaps from minibosses.
  • Some way to handle death. This isn't intended to be a win/loss game, and so it won't be like StS where you "win" if you manage to get to the end and "lose" if you die before the end. Instead, you'll be resurrected whenever you die, at the cost of some amount of points.
  • I need to figure out what I'm going to do for healing. The easiest thing to do would probably just be to have something that the player can buy in the shop to heal, or give the player a small free heal after each encounter. However, I'm actually questioning whether or not this game really needs any healing mechanics. Perhaps all damage taken could be permanent, other than healing to full health whenever you are resurrected.
Other than that I of course need to improve the UI quite a bit, make a bunch of content, and get/make some decent art. For the next update, the map and bosses/minibosses will probably be the biggest priority, as well as the resurrection system.
 
#10
i tried it, and i think i like it! there's obviously a lot of room to improve from this early prototype, but i have a question about the way you're handling score (with it being equal to how much gold you got): isn't this just a post-hoc (i think i'm using that phrase correctly) score system arbitrarily tied to gold? tying them together only limits your design space i think (maybe it would help with accessibility slightly?). other than that, my only concern is difficulty, but as a score based game, once more nuances are added to the score system and you increase the skill ceiling, that problem should resolve itself (provided the game isn't so easy that it's just always correct to take every difficult encounter that gives extra score every time because there's no threat of losing anything, but you're probably good enough at balancing to prevent that). i think the game was too easy for me to really provide any other constructive feedback other than "i like it, keep going in this direction". (i guess i should mention that i really like the potions, too.)
 
#11
When I talked about post-hoc score systems previously, I defined them like so:

[Post-hoc score systems] happen when the designer creates a game with some predefined notion of how the game should be played, and creates a score system to try to match that notion. In post-hoc score systems there are often many different things that give different amounts of points, e.g. you get 100 points for killing one type of monster, 150 points for killing another type of monster, 200 points for collecting a collectable, etc. This type of system seems pretty obviously terrible for many reasons.
Since this game is heavily based on another game, I definitely have a "predefined notion of how the game should be played". So any score system I choose will be post-hoc, to a certain degree. But I think it would be more post-hoc if I just decided to do something like "goblins are worth 5 points, ogres 10, etc." rather than having it tied to something concrete that exists in the game, like gold. However, I'm not super attached to this current gold-based system, so if you have any suggestions for other systems I'd be very happy to consider them.

And yeah I totally understand that the game is way too easy right now for much in the way of feedback. Hopefully with the next update, where I will add bosses and minibosses, the game will be difficult enough for more concrete feedback.
 
#12
Just noticed a bug: when you use a speed potion, the speed effect doesn't get activated until the turn after you used the potion. It should activated on the same turn. Whoops! That'll be fixed in the next update as well.
 
#13
New update:
  • Potions are now available to buy in the shop.
  • Map: You can now look at the map by holding M or tab, as wel as by hovering the mouse over the map icon in the upper right corner. The map shows you your current location in the game. Before each stage, you are shown the map and asked to choose between two zone options.
  • Zones: Zones are different types of areas that you can choose to enter. Different zones have different distributions of enemies. For now there are 4 types of zones:
    • Trickster's Hideout
    • Monster's Grounds
    • Warlock's Grove
    • Corrupted Kingdom
  • With the addition of new zones, there are quite a few new enemies:
    • Archer: 7 hp. Simultaneously walks forward and deals 2 damage each turn, stopping (but continuing to attack) in the second cloumn.
    • Mage: 9 hp. Stays in the 4th column, and deals damage from a range. The damage dealt starts at 1 and increments each turn.
    • Bloat: 4 hp. Moves 2 tiles per turn to the first column, then explodes dealing 10 damage and killing itself.
    • Knight: 8 hp. Moves forward until the second column, then attacks for 5 damage each turn. In addition to moving and attacking, it gives itself 3 block every turn.
    • Summoner: 12 hp. Moves forward to the third column, then summons a Minion in one of the three tiles in front of it each turn.
    • Minion: 5 hp. Summoned by the Summoner, this enemy moves forwards to the first row and then deals 3 damage every turn.
    • Trickster: 8 hp. Moves to the third row, then on each turn it disables the first card in the set you used. Being disabled means that the card is skipped whenever you play that set for the rest of the encounter. If the first card is already disabled, it will disable the next card. This one is probably too similar to the witch, so I'll probably be changing this to something else soon.
  • The boss system has been implemented. At the end of each zone, but before the shop, the player fights a boss. For now there is just one boss (The Skull of Doom), so you fight the same boss three times throughout a match, but soon there will be many more.
  • When the player dies, the game no longer ends. Instead, they are ressurected with full health, and their score is decreased by 80 points.
  • Enemy Menu: When you hover over an enemy, you'll now see a menu that gives you the name of enemy, and gives descriptions of the enemy's current intents, as well as descriptions of all statuses effecting the enemy.
  • Non-targeted cards: Some cards are now considered to be "non-targeted", meaning they don't require a location on the grid to be played. The cards that are in this category at the moment are Defend, Dodge, Firewall, LIGHTNING_SPEED, and Curse. If a set contains only non-targeted cards (as the two leftmost starting sets do), you don't have to select a tile on the grid in order to play it; the set will be played as soon as you select it.
  • There are now instruction texts reminding the player stuff like "Select a card to remove.".
  • Bugfixes:
    • Fixed a bug where enemy statuses would not expand when the enemy expanded when hovered over.
    • Speed potions now apply to the turn that you use them, instead of the turn after.