« Yomi on iPad: April 17th | Main | New Online Option for Fantasy Strike Games »
Tuesday
Mar252014

Codex Design Diary: A Rocky Road

At some point I said "What if Codex could be played asynchronously?" That means playing your whole turn without waiting for the other player, so that you could someday play multiple games at once online, taking your turns at your leisure, whenever.

First, we discovered that cutting out instants had way less strategy impact than we expected. So many, many times there was just a convoluted correct thing to do with the stack (as you may know from Magic: the Gathering) that wasn't a real decision. The game played faster and smoother without instants or a stack, even though most playtesters were wary of that change beforehand. They ended up liking it after trying it.

But then there's combat. It was difficult to even think of a way combat could possibly work without waiting for the defender's decisions. There's also the worry that it would be bad even if it did work, but the experiment was to just see if it could even work at all, then figure out if it's bad later. I thought it would either work or not, and I didn't realize that all these months later (or has it been a year by now?) that I'd still be in limbo on that.

Version 1 of Patrol Zone

There were several ideas of how to make combat fully asynchronous, but only the concept of the "patrol zone" really came together as one that could work. You put the guys you want to block with in that zone, then somehow, they magically block attacks automatically when the opponent attacks. Yeah I glossed over exactly how, but you get the high concept.

I tried it with one playtester. He loved it, to my surprise. Then I tried it with more people. They really liked it too. This kept happening. People really latched onto this whole thing and said it felt different and interesting. Ok great, more positive than I expected. Let's go with it. Oh, and any spells that interact with the patrol zone are basically like instants, by their nature. In Magic: the Gathering they'd like "deal 2 damage to target blocking creature." So that's good.

But then there were problems. Several people got through multiple games of this without issue, but then someone brought up "what if you attack in this certain way, that is strategically stupid? What would happen?" And it was kind of undefined. So I guess the patrol zone rules needed some answer to that. Then someone else had a different situation like that. Damn. Also, you could attack more than one target during combat, and do you resolve each of those one at a time, or all at once? It hardly ever matters, but in some situations it does. One player said of course it's one at a time. Another said of course it's all at once. But each of those answers created problems. Also, there is something called "harassing" that defenders can do that's different from "blocking." Do harassers harass at the same time as blocks? Or slightly after? Again, it hardly ever matters, but when it does, each of those answers creates some problem.

To describe the feel of all that, it's like 95% of this system worked fine, and that's the 95% you experience in any normal kind of playing. But the other 5% around the edges that you'd almost never encounter is really deeply screwed up. I started to realize that these weren't just bugs to fix. It was more like if a program is architected all wrong. It also felt like there was a "conservation of fuckup" going on, like conservation of energy in physics. No one could see how to really solve these bad cases, just move them around to create other different bad cases.

I actually spent days on this. Just this. It was really troublesome to not even be able to progress on this game or even know if the patrol zone was workable at all. It affects the whole game so I can't even tune how all the cards work without knowing this. I can't continue playtesting. I asked myself what a solution could even possibly look like. It seemed like any solution would have to be some patchwork of exceptions that you have to know about how the patrol zone blockers operate. Even if we thought of answers, these answers would just be a mess.

I felt like my experience with game systems was helping me here by telling me this was not just a list of bugs to fix. This required some kind of big sweeping, systemic change. And it's just "too hard" for my brain, at least my conscious brain. So I tried to leverage my unconscious. Make sure this is the thing I'm grinding on. I took walks. I played Diablo on Xbox. I watched Law & Order. But really I was thinking about this, going over and over it. I would restate the problems over and over, explain them to myself, so that I very clearly knew what the problems were. Maybe something would magically solve them? I talked to a couple playtesters, going over this stuff at great length, asking for even bad ideas. They gave some. All bad. (But that's ok, sometimes bad ideas help.)

Then the lightning struck. I was actually laying in bed in the middle of the day. Waiting. I don't know why at that moment I saw the connections I hadn't seen before, but I sat up and knew I had something. You see, there's something all those fucked up cases had in common. Combat goes like this:

1) Say which guys are your attackers and WHAT they are all attacking (they can attack multiple things)
2) The opposing patrol zone guys somehow block you
3) Resolve it all

All the problem cases involved various ways of choosing WHAT you attack in step 1 that then cause the maximum amount of weirdness in step 2. One of those "bad ideas" that one playtester bounced off me involved choosing what you attack after step 2. The way she said to do that was too complicated and long, so I didn't like it. But now I think she had the right general direction of an idea. All the problems we had go away if it's this order:

1) Say which guys are your attackers
2) The opposing patrol zone guys somehow block your guys
3) whichever of your guys aren't blocked in step 2, you can now MICROMANAGE them to hit various targets
4) Resolve it all

The RTS word (micromanage) makes the flavor feel right for how the mechanics are working. Would that sell people on it? Would they think it's backwards to do combat this way? We have played this game for years now and never done it that way.

The answer is that people bought into this right away. In fact, one guy who had played for a long time said "this new thing isn't backwards. The way we've done forever is the backwards way. I always had to work out which guys of mine would end up being unblocked if I were to attack, resolve it all in my head ahead of time, then figure out the right targets to say at the beginning of combat so that it will work out right. But now I can attack, see which guys get through, then direct those guys where I want. It's simpler to think about and faster to do."

Everyone was happy. The patrol zone was solved. Except...it wasn't.

Version 2 of Patrol Zone

I saw a problem that no one was complaining about, but it was a big deal to me. People were playing the game, it was functioning and all, but all your guys died too much. I thought the much older version of the game before any asynchronous stuff was probably too defensive, and this new version was intentionally more offense oriented, so this wasn't entirely unexpected. The thing is, your guys died so much that it was hard to really put much of a plan together. You needed guys so desperately to block that a 1/1 for 1 became incredible. That really limits design space when we make some new cool thing and you say "yeah whatever, too bad it's not a blank 1/1 that cost 1! That's what I really want."

So why were your guys dying so much? See if you can follow this logic. You have heroes and tech buildings that you want to protect, so you put your guys in the patrol zone to protect those. If those patrol zone guys end up dying, you're actually ok with that result. They protected what they were supposed to and in the previous version's rules, the opponent had to pay 1 gold to even attack those things. So this lessened the slippery slope. But in this current version, they don't say what they attack until after their guys engage your guys in the patrol zone. They don't pay anything to do that (they only pay to micromanage after that step, if anything is unblocked). They basically pay 0 to kill your guys. Furthermore, they might just be attacking your life total and in that case you probably wouldn't want to block early game. You wish your patrol zone guys would sometimes back off rather than die if they are only protecting your life total. You NEED to have guys there though in case they attack your heroes or tech buildings.

So in short: you're forced to block when you don't want to. And when that happens, the opponent is now paying 0 for it when in previous versions they paid 1 gold. This is causing your guys to die constantly and it's causing the kind of excessive slippery slope that we fixed a long time ago, but now it's back. It's causing most abilities in the game to be useless because guys don't even live long enough to use their abilities. It's a major problem.

How the heck do we solve this? Every solution put forth was very complicated. If this is to be asynchronous (meaning you can get through your entire turn without waiting for your opponent) then you have to create a really complicated algorithm that simulates reasonable choices for blocking. Even if you do all that there's still the screwy thing about how the opponent can pay 0 at times they are really "supposed" to pay 1 gold. It was miserable and maybe this whole asynchronous thing wasn't going to work out.

I asked pretty much everyone who ever played the game what they thought. Their answer was almost universal: they wanted it to stay asynchronous and they wanted the patrol zone to work. They said I should figure out how. When I dug deeper in their answers, they fell into these camps: 1) some people wanted the game asychronous because they envisioned how good that would be for a digital version someday, 2) some people didn't plan to ever even play that version but they just liked that async made it faster to get through a turn, and they had time to play multiple games in a row. And then here was a real curve ball for me: some people said they hoped the patrol zone would say no matter digital or not, and no matter async or not. They just really really liked it. It's different and interesting they kept saying. "Please solve it," they said. Yeah, great.

There was another really frustrating period where I decided we just had to give up on the patrol zone...or maybe not...yes we do...or maybe we can think of some answer? I really needed an answer or we can't even progress on development. With one friend, I would txt him every few hours with a new Codex combat system.

"If you don't like Codex combat, wait a few minutes."--Mark Twain

We had all sorts of ideas, all of them crazy. Multiple special slots in the patrol zone that each blocked in different ways. A "battle plans" concept where you had to say what you wanted to attack the turn before doing it, so that the opponent could choose their patrol zone guys accordingly. (That one sounded like it would solve everything but turned out really bad.) This was getting so bad that I said maybe we should give up on this entire year's worth of effort to make the game asynchronous. It's just completely falling apart here.

Then as a thought exercise, I wondered "what if we allowed the patrol zone rules be as complicated as we wanted, to the point where it's insane and unshippable? What would it be like?" So I listed out what it would be like. I would summarize it this way:

1) If you attack anything except their life total: follow these fairly simple rules.
2) If you attack their life total, follow this ridiculously huge bundle of rules.

Then in frustration I yelled out "if you attack their life total, they should just choose exactly how they want to block! I don't even care if it's asynchronous anymore!!" But wait a minute. It CAN just be that way. If we already have workable rules for attacking everything else, the maybe there are two different kinds of attacking. One that follows the fairly simple rules for patrol zone blocking, and another that lets the opponent block how they want, but that *ends your turn* when you declare the attackers. It's still asynchronous that way. In the first case, you are "micromanaging" and choosing exactly how it all plays out. In the second case, you're "auto-attacking" and letting the opponent micromanage their blockers, basically. Maybe a bit complicated to have two kinds of attacking? But unlike everything mentioned so far...it seems to actually work.

Testing showed right away: yes it worked. It really did fix the previous problem. People seemed to accept the auto-attack vs micromanage attack concept readily, too. It mapped to something they understood from RTS video games so it made sense to their brains. That's really good when the mechanics of how a thing "should" work line up with the flavor of how it feels.

So finally, this whole mess was solved. Except...it wasn't.

Version 3 of Patrol Zone

Kevin. The terror of Codex: Kevin. He's a playtester who got better and better at the game over time to the point that he's scary. If he finds some card that's too good, that's no problem. We can just fix that card. The problem is that Kevin was starting to uncover a systemic problem, something that was beyond the scope of adjusting any particular card. He showed that rushdown was very, very strong. We had just fixed one problem that made rushdown too good (being forced to block at times you didn't really want to), and even though that problem really was fixed, rushdown was *still* too good. Playing against Kevin was like playing playing Starcraft where the enemy's zerglings start right next to your command center or something. He was just way too successful with focusing entirely on early game and avoiding even using more mid-game and late-game tech.

So this damn combat system was broken yet again, basically. Is there no end to this??

I suggested a fix, and people seemed to think it wouldn't work. Testing has so far showed that it does work though, so I get some prediction points, ha. The fix is that the "patrol leader" (the only special slot in the patrol zone) gets +1 HP when it blocks. People had asked for a long time if the patrol leader could get some sort of bonus anyway, not for gameplay reasons, but just because they thought it felt like it should. In this case, that +1 HP on just one of your units is enough to give you a bit of breathing room against an early rush. It lets your guys live just long enough that their abilities start to matter, and surviving Kevin's rush becomes a realistic thing. You might not think such a small bonus to one thing would transform the game, but it does.

In addition to that, I buffed every unit in the entire game except the very first units you play at the start of the game. The effect of that is that when you do survive that early rush and start teching up to more powerful stuff, the jump in power is bigger. It's big enough that even Kevin needs to care about it and do it, rather than only build the equivalent of basic zerglings all day, forever. It also seems to have helped the fun factor. I personally had more fun playing this latest version of Codex than I can ever remember having before. The other day I chose to play Codex over Guilty Gear!

Conclusion?

So finally, this whole mess was solved. Or is it? Actually as of this writing, it is. I don't know what will happen next but I really hope this current system works out. All the *rest* of the stuff the game is about that makes it stand apart from other card games has been working well for a long time.

I planned on making a public print-and-play version a long time ago, but there have been way, way too many system changes that kept pushing that out. Sorry for the wait, it will still be a bit longer. You will be able to play Codex at Fantasy Strike Expo though, in June. Don't forget to sign up now.

Errors occurred while processing template[pageRendered/journalEntry.st]:
StringTemplate Error: Can't parse chunk: {settingHomePageKBArticle}" target="_blank">Learn how.</a></li>
<li>If you have already selected a front page, make sure it is enabled. Click on the Cubes icon (top right) and then click the "enable page" button.</li>
</ol>
</div>

: expecting '"', found '<EOF>'
StringTemplate Error: problem parsing template 'pageRendered/noDefaultModule': null
StringTemplate Error: problem parsing template 'pageRendered/noDefaultModule': null