Sunday, January 12, 2014

Designer Lessons: Hacking


When I first started in the game industry, I learned the phrase, "dirty hack". It was used for a lot of work that I did in my first few years, and at the time, I thought I was being clever. People would talk about how they had no idea how my designs got from A to B and ended up getting the results that I did, and I took pride in that. However, looking back, I can see the damage that dirty hacks can cause, both to the designer and to the player, what to do to avoid them in the future, and why it's important to design with both players and other designers in mind.

A "dirty hack" is taking a feature and using it in a way that was never intended. Now, there's a fine line between, "oh wow, I never thought of using it that way!" and, "OH MY JEEBERS WHAT ARE YOU DOING WITH THAT?!" Here's an example of the latter.

This was the face of QA, programming, and other designers when they saw what I am about to say.

Vincent Ross. He was a contact for a story arc that I worked on back on "City of Heroes" (pour one out). To this day, I still apologize to the other designers and QA who had to put up with me making him. I consider his story arc to be the height of my dirty hacks (although Matt Miller may have other suggestions for that).

We created a system called "Optional Dialog" where a player could talk to an unrelated NPC while they were on a mission. We used this in "Going Rogue" to let players call up an NPC to act like they were working undercover during a mission. The system itself was fantastic for what it was designed for - calling NPC's to add purely to ambiance for a solo player's experience. If you were a member of the resistance who turned loyalist, you could call up your resistance contact before a mission to get extra story details about what you were doing. For the most part, these contacts did not affect gameplay at all - they were simply dressing.

What a dressing it was! Please, pass the bread.


Enter Vincent Ross. We had just finished Going Rogue, and I was tasked with writing villain content. I helped implement the above system with one of our programmers and desperately wanted to use it more. I came up with an idea for an arc where several factions were all trying to get this one item. When you started the mission, you had the option to talk to one of five factions to do their story along with the actual storyline. The five factions were: Cage Consortium, the Family, Diviner Maros (if you played his story arc), Doc Buzzsaw (if you played her story arc), and Operative Kurkland (if you were an Arachnos Soldier). The idea was you'd have ultimate replay ability and understand more of the story was you went along. It would be 5 story arcs wrapped into one arc's worth of environment development, and I would use the above system to get it done. Everything was going to be fine!

Just fine.

The way the system worked was that when you accepted the first mission, you had the chance to talk to all five faction members, depending on which one you could unlock. Since the system was ancillary, there were no way points pointing you to talk to them, just a quick yellow text suggesting you could do this, but that you didn't have to. Because of this, you had to know where the contacts were in the world. When you officially chose one contact to work with, they gave you a clue, saying that you would work for them. Having that clue would lock you out of talking to any other contacts. On the level of hacks, this is fine, not even a hack, just using the optional dialog system as it is.

Next, when you entered the mission, there was... a radio on the ground. It was always there, whether or not you talked to someone or not (because remember, this entire system was optional). This was the only way, at the time, to get the optional dialog to talk with the mission system. That radio had a dialog tree on it, and that dialog tree was checking if you had any of the clues from the above interaction. If you did, you unlocked that person's optional dialog within the mission. That dialog triggered an objective to be complete in the mission, which triggered an enemy or a click to be spawned and UI to appear on the mission to explain what to do. When you completed the objective, you received a clue that basically acted as a, "you completed the person's mission objective". Once you completed mission 1 and moved on to mission 2, you could only talk to your optional contact if you had their original clue and the clue that said you completed their optional objective. The end result of all of this was that in the penultimate mission, you would get one of your contacts as an ally and a special badge. Repeat this for roughly 5 missions, it meant that each optional contact had more than 11 clues tied to their logic, putting us up to more than 50 clues for something that was not mandatory to do.

Nobody has time for that.

This whole logic falls apart as soon as the multi part of the massively multi-player online game comes in. If two people teamed up and went through the mission, they could have multiple side objective missions appear, which clogged up the UI and the mission map. Simple solution - make it so only the owner of the mission could do it. Bam! Problem solved, let's deter people from teaming up in a multiplayer game by making only the mission owner get the cool stuff.

Next problem. Let's say I did mission one and worked with Arachnos. My friend did mission one and also worked with Arachnos. We team up for mission two, he does the optional objective and gets a clue. Great! I helped with that, I should get it too, right? Nope, not how our system worked. Now my friend leaves for the night. I go on to mission 3 and try to talk to my contact, only to find I don't have the clue, so I can't progress forward with my optional mission. This broke while I was on vacation in Tahoe. Because I did everything in such a strange way with so many hoops, no one else could even begin to fix what I made, which meant we had to keep a showstopper open internally for about 3-4 days, with production not knowing if we could even come up with a fix.

How I pictured production when they saw the monstrosity I created.


Anyway, the solution was if the requirements are messing people up we'll just... not require you to do the optional objectives in each mission. We'll just ask that you have talked to one contact at the start to begin your optional missions. The final badge will be gated if you did one optional objective at all. This was the better solution overall, but still not great, because it still meant teaming was borked, just not as much, and the design became very flimsy.

Now, if you're a die hard fan of City of Heroes, you might be saying at this point, "Sean, you keep mentioning 5 optional contacts, but paragon wiki's entry for Vincent Ross only show 3!" Ha ha ha. Remember the "clever" use of clues? Turns out we had a limit on the amount of clues you could have. At a certain point, you just stopped getting clues. This broke everything in my frail system. We did the math and had to chop off two contacts, which meant Doc Buzzsaw and the Arachnos contact got the axe.

They would have followed me to the end.

Through all of this heartache, we finally launched the content. I was really excited! People would be running through the forums loving the optional contacts. However... in the end, not a lot of people even knew they existed. All of that QA work, all of that design work, all for a feature that nobody knew existed.

Why? Well, since we were using systems in a way that they were never meant to be used, the messaging on where to go, what to do, and how to do it, were all poor or non-existent, which meant only players who were playing very close attention and already knew where to go would find it. This sort of feature is fine for something small, but for something as massive as this... it was not good.

I thought at the start of this madness that I was just making another clever hack that would be awesome content for the players, but my days of hacking finally caught up to me. The whole system technically worked, just like a house of cards is technically standing. But the minute any pressure, any aberrant behavior was pushed against the system, it would collapse into a huge pile.

Not seen: my tears of frustration.

This is one of the defining characteristics of a dirty hack. Your system works in one way, but it collapses entirely if a player deviates at all from the expected behavior. It's also a hack when you are the only person on your team who understands what you've done. Everyone on your content team knows the tools and should be able to look at what you've done and put the pieces together. Your content needs to be readable by everyone on your team, not just you.

What does it mean then to make a clever design? Both a clever design and a dirty hack share the same description: using features and technology in ways that people may not have thought of. The difference being is that if you're clever, you play to the technology's strengths and create a castle of a design, one that won't collapse no matter how hard or crazy people play with it, a design that is understandable to both players in the game and designers working on the project.

Not that sort of Castle.

A clever design also understands where it should stop when using new technology. Vincent Ross would have been absolutely fine with one optional contact in one mission that changed a mission objective. We had never done something like that before. Instead of all of this crazy work, we instead could have just forced the player to talk to a contact before the mission, and then you chose to help that contact out and it changed the mission, all players would have seen it and people would have then let us know how they felt.

An example of a safe and clever design was the Personal Story missions that were put out in Dark Astoria. This was a non-combat mission where you played as the contact from your mission. At first, we wanted to shoot for the moon - make it a full combat mission, give your contact new powers, go crazy. However, the technology for doing this would have come in at the last minute, so we abandoned it and used technology that we knew worked. All we did was disable all player powers (easy to do, reliable), give them a costume (easy to do, reliable), and make the mission single-player (easy to do, reliable). We then had the contact give out the mission as their final mission (easy to do, reliable, easy for all players to see). The missions were kept short, simple, with no combat (easy to do, reliable, easy for QA to test, easy for other designers to reproduce).

The feedback from player was very positive. We had never let you play as other characters, and the entire thing was an experiment to see if people would want more. It was, more importantly, an experiment that was easy to make and, going forward, costed us very little to add on.

Personal Stories are an example of clever design. They weren't perfect, but they were good. We used existing resources in a reliable and smart way, while also pulling our punches by not going insane on something that was brand new. The majority of the players saw it, understood it, and played it. Vincent Ross is an example of a dirty hack. I used existing resources in a dangerous and unreliable way. A ton of time was put into it and not a lot of players even noticed it to ask for more.

That's it for today's random blog post. I would love to talk about more things related to design and MMO's, so please feel free to throw out ideas of what you would like to hear (or not hear ever again) in the comments section!

PS: Some of you might be asking, "Hey! Why no Star Trek Online stories?". Well, I feel pretty free saying all the stories from City of Heroes without asking for permission, given that the studio has shut down, but since I'm actively working on Star Trek Online, I would need to talk to people first to make sure I do not say anything that shouldn't be said. If people want to hear anything specific from STO, let me know and I will talk with People about it.