Throwback Thursday: the princess, the dog, and the crowd-pleasing comic relief

Friday, the 25th of September, 2015

Just like that, you’re hamless

Friday, the 25th of September, 2015

Combat systems: a horror story

Friday, the 25th of September, 2015

I knew, when I first began plotting out Cuthbert, that I wanted to have a strong combat system. It made sense for the story: in a game where you can royally peeve people off to the point where they won’t help you, it makes sense that they might try and hurt you.

But I also wanted to have something in the game that was very much about you as a player, and your tactics and your wit. In a text-based system, I think there’s a danger of the game feeling like someone’s behind you shouting, ‘Look at me, the writer! Look how funny I’m being with all these irreverent text options! Mani pedis!’

Why aren't you looking? I'm shouting so loudly! My play testers have reported my standing behind them screaming is their second-biggest issue with the game. DollarPhotoClub

Having combat and some RPG-style tactics help make the game feel more like a game, and make it uniquely yours.

So I spent a long time at the beginning of the year working out how a combat system would work in a text-based game.

I didn’t want to go down Monkey Island‘s text matching route. As much as I love insult sword-fighting – and as frequently as I use, ‘how appropriate, you fight like a cow,’ as a parting shot (pro-tip: it doesn’t go over as well at job interviews as you might think) – combat is something that happens throughout Cuthbert. It’s not a one-off puzzle to solve, there are plotted fights throughout the story and a few optional ones you can unlock with your actions.

Even if I wrote completely unique text for each fight, you’d be solving the same puzzle over and over again. It might work for 99 Sudoku Puzzles For Ages 9-99, but in a puzzle game, you’d be sick of it.

Insult sword fighting in Monkey Island And wondering what vendetta the game has against dairy farmers. They only want a fair price for milk! LucasArts

I also didn’t want to go the other route and have the user smash buttons in a live-action fight. Changing to a more traditional, game-y UI would make the text-based rooms look unfinished rather than structured and planned. And I’m way too anal to let people think something I’ve worked on wasn’t structured or planned.

Something closer to Pokémon‘s tactics system felt like a happy medium. You choose to attack or use an item, you’re told it’s super effective, then you’re told what your opponent has done in response.

I simplified it a little by having defence built-in; rather than asking the user to cast Defense Curl or, um, Harden, things like Cuthbert’s health and spryness against his opponent’s feed into a dice roll to see if he manages to dodge the attack. (Math – the deadliest part of war.)

But it meant the system felt more in-keeping with the rest of the game. I could have a mix of detailed and fast-paced descriptions of Cuthbert’s move, his opponent’s move, and if it struck Cuthbert or not, all on a single page load. Underneath the text, the user would have links to all their available actions so they could decide how to respond quickly and carry on to the next round.

The very pinnacle of good design.

It seemed to come together well – the coding worked with only marginal hair loss from pulling it out and weeping, I was happy with the text descriptions of the fight that I’d come up with (please run away from some battles in various degrees of injury, I worked so hard on those), I wrote an engine to stop users seeing the same text twice to keep battles interesting…

It was only when I put in all of the descriptions of what your opponent is doing that I found the flaw in my system: the two sides of battle don’t flow into each other. There’s no link between what you’ve done and what happens next. One paragraph screeches to a halt in the middle of the page and the next veers out wildly.

It might have made sense for Pokémon, where the text wasn’t more detailed than how effective (super or otherwise) a move was. But for full prose, it didn’t make sense. For example:

It just doesn’t make sense. I wrote both halves separately, and they work as their own isolated little pieces, but if you saw them jarring into each other like that in a book, you’d worry the printing press had eaten a page. Or a person if, like me, your family worked with cruel-looking industrial printing presses and you didn’t get to see them that often. I realise that experience may not be universal.

So: I’d hit a road block. In a blog post, I’d usually write ‘so:’ then sum up what had happened with a cutesy cliché but that just wouldn’t work here.

I wondered about adding in a button to reveal the opponent’s action so it flowed on a bit more sensibly but it felt like cheating. (It is; that’s probably why it felt that way.) Making the user do more work is bad and lazy UX. When they’ve chosen what to say in conversation, I don’t make them read what they’ve just clicked on then click again to see the response, so it feels cruel to do it in combat. And, as long as my overly verbose descriptions can get, reading them doesn’t slow down the momentum of a fast, action-packed scene the way literally stopping to hit a button does.

And, if I’m going to cut corners, if I’m not going to do this well, it seems silly to do it at all.

Now, there’s a saying in web development: it’s better shipped than perfect.

Pinterest got weirdly behind it. Maybe that explains the nailed it meme… Pinterest

And that’s true. Usually. But when I’ve only just started my two-year challenge, I’m not convinced leaving a problem like this in will really affect when the game can ship.

I know I won’t be able to afford to be so meticulous with every unforeseen issue I hit, but this one feels solvable, and I don’t want to leave it hanging awkwardly in the game.

Instead of putting out the fight scene in two halves, Cuthbert’s action and his opponent’s, I can split into three: Cuthbert, some text describing how Cuthbert finishes what he’s doing and looks his opponent, then the opponent.

It doesn’t sound much when it’s put that way, and in coding terms, it’s not. The work comes from having to write sensible, generic joins, and tweaking the existing text to sit well with those joins. But there’s no pithy saying about getting badly written work published in the world of writing, so it feels like a doable plan.

That, or I scrap the whole thing in favour of button mashing. People like button mashing, right? Maybe I’ll do button mashing…