Thursday, June 19, 2014

Hearthstone Templating: Issues and Suggestions

The Hearthstone team needs to rethink some aspects of how they are templating (choosing the words for) the cards. 

The Problem

Some recently spoiled cards appear here: http://i.imgur.com/6BjCLwj.jpg (I don’t know if the note about Random being added to text was officially announced somewhere, but I couldn’t find it.  In any event the templating issues are somewhat more fundamental than that one set of cases.)

Much of the team’s philosophy on templating was articulated by Ben Brode here:  http://us.battle.net/hearthstone/en/forum/topic/13077147586

Things were brought back to the surface when they recently spoiled a card (Webspinner) that says “Deathrattle: Draw a random Beast card.”  Random is there, which I think is helpful, but the word Draw is at best ambiguous about from what pool of cards it is drawn and whether it will reduce the size of a player’s deck.  Blizzard had to clarify quickly, in several places, that “Draw” in this case means select at random from possible choices in the game (regardless of which Beasts you own or play in your deck) and add a copy to your hand (cards are not taken from or selected from your deck or collection). 

I’m not sure Blizzard would really defend this templating given the public reaction, but they might.  They need a game plan for better templating in my opinion.  

I should note that A) I’m a Magic player, B) Magic players have a special difficulty in learning not just a new way to comprehend the text of cards but also how to shut off what they’ve already learned in the Magic domain, C) Blizzard isn’t necessarily primarily concerned with Magic players’ understanding of the cards, D) my analysis is in no way intended to only address the Magic playing audience for the game (I understand there is a wider audience, and I’d like to serve them too). 

Ben Brode writes:
“'Feel' is really important to how we write cards. Consistency is important, but somewhat less so in a digital game where the computer handles the rules for you.” 

Feel and Consistency might well be at odds in many cases, but they each must serve the larger goal of comprehension.  Comprehension is the understanding the owners or browsers of these cards are left with after reading the cards – understanding of what the cards do and how they interact.  The designers of Hearthstone cards obviously understand that this is what is at stake. 

Where I think my comprehension analysis differs is in the balance between comprehension from handing a player one card and asking them what it does (the isolated comprehension – or focus group style - model) vs. handing someone ALL the cards they will be exposed to, asking them what they all do, and asking them to “get it” in a way that lets them predict novel interactions between the cards (the in-context comprehension model).  In-context comprehension will never be 100% - some interactions will prove difficult to predict, so much so they may even be bugged in the software.  But just because it won’t be 100% doesn’t mean 75% understanding is the same as 85%. 

‘Strict’ templating (as I’m choosing to define it here) means that the text of cards is not just a hint at how they function, but it actually governs how they function in an always predictable way (barring a bug, typo, or similar mistake).  Magic the Gathering has this, and it is a tremendous asset to that game (but don’t forget there are many reasons to try and do better than Magic does, I’ll get to that shortly). 

Ben Brode mentioned essentially the concept of what I'd call rules-engine-as-mediator which means that the players need far less in-context understanding when there is a digital rules engine to mediate disputes and clarify misunderstandings (well, at least up to a confidence level bounded by the frequency of bugs in the engine).  This is very much true and definitely aids a digital game, but I don’t think it gets you as far as the Hearthstone team thinks it gets you. 

Critically, as the game grows, the number of novel interactions (novel can mean either ones the player hasn’t seen yet, or new interactions generated by the release of one or more new cards) between the cards grows exponentially, hence in-context comprehension becomes more and more difficult as a game grows.  Isolated comprehension stays pretty much the same. 

Choosing a model that skews heavily towards isolated comprehension will become increasingly untenable.  The good news is you don’t have to sacrifice that much isolated comprehension (if any) to get to much higher levels of in-context comprehension. 

‘Strict’ templating is one way to make sure you skew in the scalable direction – towards in-context comprehension.  However, the downsides of ‘Strict’ templating can be large.  Cards can become more difficult to immediately parse.  As Ben Brode notes, “if you add the word ‘random’ to Lightwell, it becomes very hard to parse its text. ‘At the start of your turn, restore 3 Health to a random damaged friendly character.’”  Also, it can feel like you’re tying your hands when it comes to making really cool, really complex cards like Jaraxxus.  Imagine that card’s actual rules text (I will do just that in a bit).  If you set user expectations for text boxes at “This is roughly what the card does” then you can do something like Jaraxxus no questions asked (well, actually, a TON of questions asked :P ).  So not being able to just give an approximation is a cost.

Those costs are worth it.  The frustration experienced by so many players at unpredictable outcomes and confusing new cards because of the lack of in-context comprehension grows with every day and every new preview card.  Below is how I would try to strike a better balance.

My Proposal

The Hearthstone team should try harder to achieve ‘Strict’ templating that also has enough ‘Feel’ to satisfy the non-hardcore-rules-aficionado audience. 

Am I saying “Do what Magic designers do?”  No, not exactly.  You still have a huge advantage if you’re Hearthstone – the digital medium.  I’ve already mentioned its advantages in terms of rules-engine-as-mediator, but there’s also the advantage of potentially dynamic text boxes.  What I mean by that is you can have shorthand text, no text, reminder text, or whatever in the actual text box of a card, and then link to a “full text” hosted elsewhere (exactly where I don’t hold a meaningful opinion on). 

For most cards there is no need to link to “full text.”  Let’s start with some of the new cards from Naxxramas.

Spoiled text of Anub’ar Ambusher: “Deathrattle: Return a friendly minion to your hand.” 

Proposed new text of Anub’ar Ambusher: “Deathrattle: Return a friendly minion to your hand. (Chosen at random.)”  OR “Deathrattle: Return a [RANDOM SYMBOL] friendly minion to your hand.”

In this case the Rules of the Game can say Deathrattle choices are always random, but the card should be comprehensible as such not just by reference to that rule, but using actual words that appear on the card.  Reminder text is one way to accomplish this.  Since the reminder “(Chosen at random)” can be inserted even within a sentence if multiple things are going on, I think this solution scales properly and solves a ton of issues the random deathrattles had as spoiled.

You could also address the Random vs. Choose problem with icons that note the difference instead of a parenthetical reminder.  A little red crosshairs could appear in front of “minion” when it means “a chosen minion” and a little d6 could appear in front of “minion” when it means “a random minion”.  That’s also a consistent, clear, and workable solution.  It requires a little bit of onboarding to get someone to learn the symbols, but it translates easily and the digital games can have a popup explanation or clear tutorial that paper games can’t, so use those advantages. 

Text of Thoughtsteal: “Copy 2 cards from your opponent’s deck and put them into your hand.”

Proposed new text of Thoughtsteal: “Copy 2 random cards from your opponent’s initial deck and put them into your hand.”

A few things have changed here.  First, I’m using random instead of just relying on a rule about things of this nature always being random.  Second, I’m using the term “initial deck” to disambiguate the initial deck LIST vs. the cards remaining in deck when this card is played. 

Spoiled text of Webspinner:  “Deathrattle: Draw a random Beast card”

Proposed new text of Webspinner:  “Deathrattle: Add a copy of a random Beast card to your hand. (Chosen from the list of all Beast cards)”

Here the text is designed to line up with Thoughtsteal (this is critical for new cards and has really hurt the Naxxramas spoiler effort), and also the text uses a parenthetical reminder once again to explain what is happening.  The rules can say “Beast card” references the list of all possible beasts unless otherwise indicated and “Beast” means Beast in play unless otherwise indicated, but even with that technical background in the rules, reminder text should light the reader’s path.  You end up with “clunkier” and longer text, but that’s the price of doing business in a clear and understandable way – it sometimes takes more words.  There is a spectrum from the full rules text on one end to cards that just say “SUMMON AN AWESOME INVENTION!” or have no text at all but do something nonetheless that you have to learn through trial and error.

Text of Shadowflame:  “Destroy a friendly minion and deal its Attack damage to all enemy minions.”  (It turns out if you’re destroying a minion with Spell Damage +1, Shadowflame will get that bonus. I assume we wish to preserve current functionality, just make it more predictable.)

Proposed new text of Shadowflame:  “Choose a friendly minion to sacrifice. Deal its Attack damage to all enemy minions and then destroy it.”

Preserving the ‘Feel’ here is tough, which is why I like this example.  I’ve even used a non-rules term “sacrifice” to describe what’s happening even though that word adds only clarity not actual functionality.  This is the kind of way I think you can bend “Strict” templating and end up in a better place for it. 

Text of Lord Jaraxxus:  “Battlecry: Destroy your Hero and replace him with Lord Jaraxxus.”

Proposed new text of Lord Jaraxxus:  “Battlecry: Destroy your Hero and replace him with Lord Jaraxxus. FULL TEXT.”  (FULL TEXT is hyperlinked to a popup or display in the blank space in the side of the window or something else containing the full rules text of what will happen.)  This article isn’t about gendered pronoun use so I’ll set that aside for someone more qualified on that topic.

I only pretend to be smarter than the entire Hearthstone team as a part-time hobby, so I fully understand that the issue is more complex than can be fully treated in this blog post, and that many conflicting concerns are in play.  I hope my analysis and the suggestions I am committing to the public domain here are helpful as the team re-evaluates its current templating philosophy and kicks around new approaches, which I do expect to happen as the game scales and the "wtf does this card do?" questions keep rolling in.  Even if they aren't at all helpful or the team never feels a need to re-evaluate, I hope you all enjoyed the discussion on HS templating that I have been participating in and will continue to participate in.

-Matt Sperling
Armchair Template QB