This project was spawned from an unlikely alliance: Pokémon and
Hearthstone. Pokémon is a game where you collect creatures and battle them.
Hearthstone is a game where you collect cards and battle them. Mixing them
really should be easy.
PokeHearth is a full fledged card game, featuring a personal card collection, hundreds of cards with unique effects, 858 cards in total, very basic effect animations, an enemy to play against, hundreds of pre-made decks generated by letting the AI play against itself until the best decks were found, a challenge-mode and quite a lot of copyright infringement. Sorry about that.
PokeHearth is a full fledged card game, featuring a personal card collection, hundreds of cards with unique effects, 858 cards in total, very basic effect animations, an enemy to play against, hundreds of pre-made decks generated by letting the AI play against itself until the best decks were found, a challenge-mode and quite a lot of copyright infringement. Sorry about that.
This will be the first general card design article. I do not know how
many other topics I will delve into, but there are quite a few. Like:
- How
to design a robust, easy-to-implement card game engine that allows for
complex card design.
- How
to design AI that does not know what every card does because who wants to
program AI for hundreds upon hundreds of cards.
- How
to use evolutional AI to find out which combination of cards are
overpowered.
- How
to balance a metagame.
- What these metagames actually end up looking like.
- How to use procedural generation to produce card textures.
But here,
we will just look at some cards and some of the design considerations that arise. Starting, as
one should, with Bulbasaur. I'll try to explain things along the way.
So, let
me start out with what everything means.
There are three numbers on each card - the
top-left, blue, shows the cost of playing the card. The first turn, you start
with just one mana, then two mana, so on, meaning that Bulbasaur can be played
early in the game, and you will have to wait for quite a while before you can
play Venusaur.
Following
along with the cost is the attack (yellow, bottom left) and health (red, bottom
right). Generally, a card has a bit more attack and health than its cost. In combat, both pokémon deal their attack as damage to the other's health. Damage sticks. When health is zero or below, the pokémon faints, removed from the game.
Each card
also has a special effect. The "Cry" of Bulbasaur and Venusaur means
the effect takes place when you play the card from your hand. The
"Ability" of Ivysaur means the effect takes place at the end of every
turn.
The
Bulbasaur line, as well as some other grass-type pokémon, have cards in your
hand become stronger. Imagine you are holding two Bulbasaur in your hand. You
play the first as a 2 attack 3 health creature. This then makes the other
Bulbasaur into a 3 attack 4 health creature, stats it retains when played from
hand onto the board.
And you
might ask "Well isn't that overpowered, adding the effect of Bulbasaur to
its own stats makes it a 2 cost 3 attack 4 health?" It's not. It has a 52%
winrate, and only because I have had to make constant balance changes to so
many other, more powerful cards. Throughout the project, its winrate has slowly
moved from 45% to 52%, and never needed a change. I see it as a rare example of
stable balance.
Now that
we understand the basic mechanics, we can understand the Charmander line more
easily. It has slightly worse stats, but its effect is a bit more immediate.
The "Idol" is the name of the player character. It starts at 25
health, and when its health reaches zero, the game is over. So playing two
Charmanders and two Charmeleons will make a good dent towards winnning the
game.
Now,
let's look at Charizard. You might notice that it seems transparent, and its
effect is simply "Flying". Flying is the first of many statuses that
a pokémon can have. Flying pokémon cannot be attacked by opponent pokémon, but
once they attack, they lose their flying status. Its Hearthstone equivalent is
basically Stealth. Putting Flying on Charizard means that it is difficult for
your opponent to keep it from attacking their idol. Thus, though Charizard does
not have the same effect as Charmander and Charmeleon, it is still related.
One more thing. Just below the cost of the card are two orbs that show the typing of the card. For the purposes of this game, the Charmander line has been changed to be part dragon type. This was done so that Kanto has more than three Dragon-type pokémon.
What does typing do? Not much. There are no type advantages, or at least not apart from the strategies - see, the high-threat Charmander line counters the slow-going Bulbasaur line. The typing reflects a limit on which cards you can put into your deck, however. So you can only use the Charmander line if your deck is either Fire or Dragon type. But more on this later.
The three starter lines are pretty similar, all with a 2-cost, 4-cost and 7-cost - well, as you can see, later on, Blastoise was rebalanced into an 8-cost card. But apart from that, the three lines are quite similar.
Wartortle shows us the first instance of a targeted ability. It is also a really strong ability. It seems a bit strange for Wartortle to be so weak when comparing stats to Ivysaur. But the Squirtle-line has the most active ability of three starters - it can change the state of the board. So though their stats are weak compared to the others, they actually have the highest winrates of the three starter-lines.
Anyway, let's move onwards from the starters, into some more unique pokémon.
The theme of Bug-pokémon is to have a lot of small creatures; threat through numbers. To this end, a lot of cards summon Caterpies. Butterfree makes a new Caterpie every turn. Caterpie makes another Caterpie, too!
And note that if a Bulbasaur was to give +1/+1 to a Caterpie in your hand, when you then play Caterpie, it makes two Caterpie both was 2 attack and 2 health.
If you were wondering why I have shown the Pokémon in lines so far, Metapod holds the answer. The Evolve effect has been put on a decent range of cards. So, if you play Metapod, and the opponent is not able to remove it during their turn, it will Evolve into Butterfree.
It will fully become a Butterfree, stats, ability, everything. It will not be able to attack immediately, though, and since Metapod transforms at the beginning of your turn, right after Metapod is made ready, the Metapod-turned-Butterfree will have to wait another turn before being able to attack. That is why, though Metapod is a much cheaper version of Butterfree, its winrate sits at a fair 47%.
Weedle is a bit similar to Metapod, but it actually hurts the enemy pokémon that attack it. It is a bit of a strange card, because it is one of the strongest cards to play turn 1, so depending on meta, its winrate might become obscenely high. Right now, it sits at an amazing 50%, after having been changed back and forth between 1 and 2 attack several times.
Kakuna, or as we might also call it, evolved Weedle, has the Block status. Shown by the shield around the card, it blocks all attacks by opponent pokémon. It might even defend a new generation of Weedles!
Beedrill is the first example of a triggered ability. Thematically, it mirrors Beedrills Twi-needle. Technically, it is basically a redo of Blastoise. Strategically, it is a thing on its own. It also happens to be really good against Caterpies, since its needles are spread far and wide, able to take out four Caterpies in one attack.
The Pidgey-line, our wanna-be Flying starters. As mentioned, Flying protects from being attacked. Quick enables the pokémon to attack the same turn it is played. It is generally a really strong status, especially on high-attack pokémon. But Pidgeotto gives you a choice: Do you want to attack straight away and lose flying? Or do you just play it like a more expensive Pidgey, waiting for the right time to attack?
Pidgeot elaborates on the idea of quick, by basically making another pokémon quick, or alternatively, letting a pokémon that has already attacked this turn attack again. It is a pretty strong effect, held back by requiring another friendly pokémon as target.
Pokémon like Rattata and Raticate is what makes this project so interesting. There is this obscure move called Super Fang that is Raticate's signature move, which deals half the opponent's health as damage. Well, here the ability is in Raticate's effect. Just think of the potential! It might deal four damage to a Charizard! Okay. So it is not that great. But it is interesting, and that's just as important.
Rattata also takes inspiration from the same idea. Of course, Rattata had to have a very low cost. But as we know, if your Rattata is top percentage, it can become really strong. Its effect reflects this. So, if you have Rattata and your opponent plays Caterpie, you now have a free Raticate! Its health will even be restored. And all of that for a pretty cheap pokémon.
Yeah, neither of these are particularly strong. But they hold some idea of ratness to them. Rising from the dust to become something great. A naïve hope.
Right, the Earows. Were these ever a mess. Yeah, so for most of the game's development, they had no effect, and they kept being way too weak. The idea was for them to be simple glass cannons - high attack, low health. But I could do nothing to make them balanced. Too few stats, unplayable and uninteresting. Too many stats, overpowered and uninteresting.
As they stand now, they are glass cannons that automatically sweep for their own weakness. How they are not overpowered, I do not know. Spearow sits at 49%, Fearow at 53%. Maybe I can make Fearow 5 attack 2 health to balance it perfectly.
One self-critique is that the description "leftmost" takes up a lot of your attention as you read the card. It really is not very important - only to decide which applicable pokémon to target if there are several. But adding in "leftmost if several" in parentheses would just make the text really long.
Hm, that's strange. Arbok should not say "Cry:" since its effect is permanent, working like Raticate. Just ignore that.
Poison types! So of course we need to learn about two new statuses: Venom and Poison. When Venomous pokémon deal damage, their enemies become Poisoned. Poisoned pokémon take one damage before their owner's turn begins, repeatedly forever. So effectively, Ekans has 2 attack, with a slight upside.
Venom is denoted by an animated purple circle, that you can see on Ekans. Poisoned is denoted by an animated purple skull.
Arbok has really strong venom, so strong, it does not inflict Poisoned, but simply make the enemy faint. So effectively, Arbok has infinite attack. But its effect does nothing against the enemy idol, where it will only do one damage. How sad. And since taking out the enemy idol is what the game is about, despite its ludicrous cost when compared to Maexxna, it only has a 50% winrate.
The Electric type wanna-be starter-line! Now, you may say that this looks a bit like the Squirtle and Blastoise, spreading damage randomly, but there is a big difference between Water and Electric - Electric deals damage both to friends and foes alike. Now, this might seem terrible. But there is actually quite a lot of strategy in picking the right times, where the odds of hitting enemies is much higher than hitting your own pokémon.
A side-note. For about half of the project's lifetime, there was a bug or unintended side effect of the mechanics, that made Pikachu, Raichu and other Electric types incredibly weak. The problem was that the random damage could be spread to targets with only zero health, meaning that with three enemy Caterpies, all the damage might go to just one of them. When I changed the mechanics, so that only idols could take damage beyond zero, suddenly Pikachu became an alright card again, and Ampharos became a 65% winrate monster.
I'm sorry, Ampharos? No, I'm quite sure this is only Kanto pokémon. More on Ampharos another day.
Another new status: Confusion! Confused pokémon attack a random enemy as they become ready, basically taking control away from their player. It is a signature effect of Ground-type pokémon, being some strange analogy to Sand-attack and low accuracy.
Hm, these two seem incredibly similar in stats. I think that's a side-effect of balance-changes and not being quite aware that Sandshrew already was 3-cost, not 2-cost like so many other unevolved pokémon. I might have to fix that at some point.
Confusion is a strange status. It is not incredibly powerful in the hands of an AI, but I think a human player might use it to great effect. It somewhat neutralizes big threats, and somewhat can act as board-control if you have a blocker up. It is quite flexible and its effect is delightfully subtle.
Confusion is denoted by an animated yellow circle.
Hey, look, a big chain of pokémon. Of course, these would be mirror images of each-other. And being ground and poison-type, one line focuses on Poison, another on Confusion.
Nidoran and Nidoran go well together, being able to evolve each-other.
Nidorina and Nidorino both have a bit higher stats than usual, with the draw-back of having to give a friendly pokémon a negative status - that is, if you have a friendly pokémon.
Notice that Nidorina's and Nidorino's higher-than-usual stats influence the strength of Nidoran and Nidoran when they evolve. All these pokémon are tightly linked.
Nidoqueen and Nidoking are alright, not particularly unique. Nidoqueen is a bigger Sandslash, Nidoking a bigger Weezing. Going beyond the Kanto-set, I became a bit more creative with effects. For now, the thematic flavour of the two related evolution lines and Confusion-Poison have to carry them.
Apparently only the Queen and King are ground-type. Well, the manner in which I use typings make type-changes mid evolution quite strange, and besides, ground could use some more friends. Yeah, I hold no allegiance to the original typings, considering almost all of Kanto was Poison and Water type, with almost no Ice, Dragon, or Ghost. For gameplay reasons, orthodoxy cannot be appreciated.
With how symmetric these cards are, you might wonder - which status is stronger? Poison or confusion?
51% | Nidoran ♀ |
51% | Nidorina |
49% | Nidoqueen |
51% | Nidoran ♂ |
48% | Nidorino |
52% | Nidoking |
As we can see, Poison is slightly stronger than Confusion, making Nidoking (that targets enemies) better than Nidoqueen, and Nidorino (that targets friends) worse than Nidorina.
Talking about evolutions! Look at these nice critters.
Evolution is an interesting mechanic, in that it basically plays off a whole field of inter-Pokémon interaction. Every pokémon designed has a new evolution interaction. For instance, Sandshrew is terrible in an evolution-centred deck. On the other hand, Caterpie evolving into Metapod, that then evolve themselves into Butterfrees, are really good. Caterpie into Clefable is a 5-cost combo, that can potentially create two Butterfrees (that then make two Caterpies, etc)
"But how could you put a Fairy and Bug pokémon in the same deck?"
Well, having 18 different deck types is kind of crazy, so instead, every type has a partner. It just so happens that Fairy and Bug are partners! So all Fairy decks are also Bug decks, and all Bug decks are Fairy decks! But more on the deck-types and idol powers some other day.
But the example with Sandshrew is bogus, I have to admit.
You might notice how Charmander and Bulbasuar have effects that requires them to be played, while their evolutions have effects that trigger at the end of turn. In this way, they are good evolution-targets in a way that is a bit more interesting than just more stats more better.
You might think that Fire is all about dealing damage to the enemy idol, but to support such a strategy, you need a lot of early-game pokémon, and then some way to draw cards when you run out of them. Vulpix and Ninetales are an answer to this problem.
They just never seem to survive to draw more than one card.
Again, I made the executive edition to add the Ghost-type to these pokémon, to reflect their ties to curses and magic, and to alleviate the problem that Kanto has three Ghost-type pokémon, and Johto only adds one. It also just so happens that one of Ghost's themes is drawing cards.
Another new status: Sleeping. As you can tell from the cost of these cards, it is quite a strong effect. Sleeping pokémon are unable to attack (but they still deal damage when attacked). They keep sleeping until they are woken up, either by being attacked themselves, or by their idol being attacked.
This means that sleep is a control-strategy, while strategies centering around attacking the enemy idol repeatedly will not see much use from it. It also creates a strange dynamic, where you basically postpone a problem until later.
If all your pokémon are asleep, maybe you should try to confuse an enemy so that it attacks one of your sleeping pokémon, or even your idol, waking them all up! There may also be other cards that specialise in waking up pokémon.
Sleeping is denoted by some fat Zzz drawn next to the pokémon, as you can see on Snorlax. Spoilers!
Zubat is quite a simple pokémon, but cards like this is necessary, too! There needs to be a wide range of options open of low, high and mid-cost pokémon. Additionally, Zubat is not useless late in the game, since poison can deal one damage, sure, but also a lot of damage over time.
Golbat marries Poison and Confusion, mirroring its typing and moves of Super-sonic and Confuse ray. At this point, it is starting to feel a bit overused, though, considering the Nidos also combined Confusion and Poison. At least not on the same pokémon before now.
Nobody told you that there had to be a consistent theme throughout a whole evolutionary line, I hope?
Oddish is a neat example of mixing the hand-buff theme of Grass and the Venom theme of Poison. Some pokémon that are not usually venomous might become very strong with venom, like Blockers.
Talking of Blockers with Venom, Gloom is one. It is also just a pretty unremarkable, all-around good card. A certain amount of Blockers is necessary in any deck, and Gloom is a good option.
Vileplume is our first Area-of-Effect card. Later on, I would add effect-cards without pokémon, where AOE would become commonplace, but back at this point, Vileplume and Electrode were completely unique and incredibly strong. Oh, and the inspiration for this is Leaf Dance, which I always felt should have a more dance-y effect.
Unfortunately, if Oddish makes Vileplume venomous, it does not poison all its enemies. It is one of the regrets of the engine I made. It's not like I cannot change it. The interaction is just so rare that I cannot be bothered.
Paras is an example of a pokémon that received a lot of changes before settling on its current effect. It gives you a choice when played from your hand - either draw a random Bug pokémon, which generally are low-cost - or draw a random Grasas pokémon, which generally are passive and slow.
But the "Choose" mechanic was not actually invented until Sinnoh, so you will have to wait if you find the concept interesting.
Parasect's effect mirrors its Spore move. It is a really strong effect (because sleep is a really strong status), but its statline does not fit very well with it, since quite often, four attack is enough to take out an enemy, and if it is not, Parasect is unlikely to survive.
As mentioned, Bug is all about swarming, but these pokémon are part-poison type, so their effect is to swarm with venomous critters!
One thing to note is that Venonat's wording is dissimilar to Caterpie, so if you buff Venonat (which is easy since both Bulbasaur and it are Poison-type), only the first copy retains the buff.
So why are these not incredibly underpowered? Keep in mind that Venonat basically has two damage with an upside. Venonat itself is thus a 3 cost, 4 attack 4 health spread over two pokémon. Venomoth then is a 6 cost 8 attack 7 seven health. So they are pretty strong, pretty simplistic cards. Their strength is in swarming and in Poison-synergy cards, which you will not see for a while. Their weakness, however, is to:
Our last two pokémon for today, because apparently 50 pokémon are quite a lot.
Diglett and Dugtrio are acceptably costed pokémon with pretty strong effects. What holds them back from being overpowered is that their effect is symmetric. Like the move Earthquake, their effect hits friends and foes alike. But usually, both AI and humans are clever enough to use it when the effect is strongly in their favour.
They are not the most effective AOE - for that, you will have to look to effect-cards that do not have pokémon attached to them. But they have a great upside in their cost-effectiveness, in both changing the state of the board and putting down a new threat, all in one neat card. To this end, Diglett lies at a neat 51% winrate, and Dugtrio, bordering on a bit strong, 53%.
Next time, we will see what happens when you run out of core mechanics and have to get creative!