One of the features of the HearthSim organization is the hsdata git repository. This repository is an auto-generated history of the core text data files behind every public Hearthstone build.

The main file it features is CardDefs.xml . The way cards are stored by the game, internally, has changed several times over the course of its life. From CSV in the earliest builds to, nowadays, Unity3D data split up over multiple different databases… I figured we would want a single, human-readable file format that would be consistent across all builds.

So I settled on the CardDefs.xml multi-locale format that was present in the early release builds of the game. This single file is generated for every single builds into a git repository, which can be diffed across all versions.

Some fun stuff appears when you look at some of them. Today I want to look at the very first builds of the game.

Build 3140 features an interesting issue: Before the game was even translated, the various localized text fields were still used. Most of the time, they featured the same text as the american-english ( enUS ) version, but it looks like they were not updated alongside it. This means some early card designs leaked into the public build.

Most of them are just typos, cosmetic changes and such. For example, Transform used to be a keyword (bolded), the spell-shrouded description used to be Can’t be selected as a target by Spells or Hero Powers, and the Overload keyword was originally named Recall (and in the code itself, it even remained that way long after release).

Some cards were renamed:

Some changes were more significant in terms of balance. Originally:

Arcane Explosion and Flamestrike also dealt damage to the enemy hero.

and also dealt damage to the enemy hero. Charge gave charge to all minions.

gave charge to all minions. Deathwing did not discard your hand.

did not discard your hand. Swipe only dealt 3 damage.

only dealt 3 damage. Starfall only dealt 4 damage when vs. a single enemy.

only dealt 4 damage when vs. a single enemy. Mortal Strike dealt 8 damage below 12 health.

dealt 8 damage below 12 health. Ancestral Healing did not give Taunt

did not give Gorehowl did not reduce its Attack vs. minions. (Infinite durability!)

did not reduce its Attack vs. minions. (Infinite durability!) Hungry Crab would destroy all murlocs and gain +2/+2 for each.

would destroy all murlocs and gain +2/+2 for each. Thoughtsteal would actually steal: Draw 2 cards from your opponent’s deck..

Keeping in mind that we are only looking at text changes (cost, attack and health changes are not visible in this diff), let’s look at some cards which were completely redesigned:

It’s interesting to see just how much the pirate package changed, especially considering that it was not seriously used until MSOG.

And finally, we also see a couple of cards which were straight up replaced by completely different ones upon being redesigned:

Naturalize replaced Demoralizing Roar : Enemy minions get -3 Attack this turn.

replaced : Enemy minions get -3 Attack this turn. Unbound Elemental replaced Grounding Totem: Your other minions can’t be targeted by enemy spells or Hero Powers.

UPDATE: A couple of extra insights on these changes from Ben Brode himself:

I think we dropped Demoralizing Roar because Druid was underpowered at the time, and that card was pretty bad. Old Deathwing was an 8/8 at the time, and very powerful. Our first internal tournament featured many Deathwings. :) Emperor Cobra was a similar design to a WoW:TCG card I liked, but it was less interesting in Hearthstone when our resource model became +1 Mana a turn. — Ben Brode

Jerome