Our hosting has been flaky of late, and right now I’m staring at a ‘will not resolve’ error when I try to connect. So I thought I’d use the downtime instead to talk about the plan for the coming year.

Remember a few weeks ago when I talked about how coding was a rabbit-hole? Yeah, well – we got a bit more rabbit-holey over Christmas. Hugo and I have been looking for a project on which we could collaborate – something more about systems than areas. As a deliverable of the stronghold system, I have wanted to make NPCs more interesting than just bags of XP walking around spouting the same lines over and over again. I had been mulling over ways to make the social side of stronghold management as interesting as the ‘mechanical’ side. So Hugo and I got to chatting and before too long we’d mapped out an entirely new system for handling NPC and player communications. And then we started coding it – and the more we coded, the more excited we got about the possibilities.

I’ve made no secret of the fact that a considerable amount of the Epitaph game code falls into the category of ‘placeholder’. I’d rather have a simple, sub-optimal system in place than a gaping hole in functionality, and that’s what we have in several areas. As much as I love our response system, which encourages us to fill NPCs full of keyword based chat, when you leave them to their own devices they’re just a little bit boring. They wander around, they spout one of a handful of chats every so often, occasionally they interact with a handful of devices and sit on things. That’s about it.

Similarly, meaningful interaction beyond story is limited – charm, intimidate and bribe are all too dull to really carry themselves as interesting mechanics. I’ve never liked how they worked, but also never really had a better idea for how they *should* function.

Then there are our ‘soul’ commands – those little social interactions you can do such as ‘/kick’ or ‘/smile’. They’re just flavour, and that’s okay, but they don’t touch the game world in the way that they should. NPCs rarely respond to them, and there’s no way to really give them any weight – the ‘/stand’ soul for example doesn’t *actually* make you stand. It’s just a little atmospheric flourish.

The system Hugo and I began coding is going to fix all of that. Woe has joined us in this endeavour too, in a grand over-arching project we’re calling the Mercurial system. It has three main components:

  1. The mood handler, which deals with NPCs moving in and out of particular moods in response to what’s going on around them.
  2. The interaction handler, which will obsolete our soul system as well as the current charm/bribe/intimidate commands.
  3. The new personality handler, which obsoletes our existing personality handler and bridges between interactions and moods.

Let’s begin with interactions, since they’re conceptually the simplest to discuss. Our plan is to migrate all of our existing soul commands into a more flexible framework that gives us greater opportunity to create believable NPC behaviours. With all the various bits of meta-data that an interaction provides, it’s possible for us to let NPCs know that an interaction is ‘a good thing to happen’, should result in ‘some polite acknowledgement’, and should adjust their feelings towards a player by a particular margin. We can add skill checks, cultural context, random tokens, and more. For example, we may have a ‘tell dirty joke’ interaction, which is considered an attempt at a positive attitude adjustment. If the player passes the skill check, the NPC will know that several kinds of responses are appropriate – various types of laughing, usually. Fail to pass and the NPC might be offended or shocked. Successful interactions adjust the ‘attitude’ of the NPC towards us, from ‘I hate your guts’ to ‘let’s spend the night together’, and the attitude of the NPC will give us certain bonuses in the game in the way that charm/bribe/intimidate currently do.

We can also have interactions which are ‘targeted’, such as ‘spread some gossip about Drakkos to Shawn’. These interactions adjust our own attitude with the NPC, but also the attitude of the person to which we’re gossiping about the target, and also the target towards *us* if they see us do it. We can have group interaction, which let us aim the interaction at many NPCs at once, or solo interactions which can only be performed one at a time. On top of this, we can add whatever later flexibility we like – I’m mulling over ‘minimum attitude’ which is the strength of a relationship you must have before an interaction can succeed[1], as well as perhaps a ‘required intensity’ which deals with how often you’ve interacted with an NPC in a particular period of time[2]. Too rapid interaction will result in the NPC feeling harassed, and if you keep doing the same thing over and over the NPC will simply get bored of you. You’ll need to keep things fresh.

Player to player interaction has none of the attitude stuff or response stuff, of course – we expect you can make up your own mind what you think of other players. But for player to NPC, and NPC to NPC, this should create a more interesting ambient experience. NPCs will be looking around them for friends, enemies and strangers and interacting accordingly. They’ll talk to their friends, gossip about their enemies, insult their foes, and so on. All of this will happen without your interaction, and their attitudes towards each other will adjust as they go along. I’m hoping that it works a bit like an ongoing soap opera that you can simply watch, or nudge along if you feel the need. Within a stronghold, managing all your NPC hirelings will be an ongoing task – you might have to mediate between NPCs in a fight or bring down an NPC that’s getting a bit too big for their britches.

NPCs too will now have personalities. We already have these for existing generic NPCs, but all they do is implant a set of chats and responses into them. It’s not a very exciting system, and we never had enough personalities written to really make it shine. Now though personalities are an overlay on top of moods and interaction responses – they’ll nuance the ways in which NPCs respond and act. For example, a prudish NPC will never laugh at a dirty joke, and will only rarely respond favourably to flirty or playful interactions. A nasty NPC will be more likely to insult than compliment, and will react more strongly to the former than the latter. A brooding NPC might remember interactions for longer, and focus more strongly on the negative reactions. A racist NPC will be mindful of the differences in cultural groupings when interacting. All of these personality types exist already in the system. At the moment they’re fixed in place – once an NPC gets a personality, it never alters. It’s likely that in the future there will be some occasional reshaping of personalities in response to what’s happened to them. An NPC who has died a lot might develop a ‘morbid’ personality trait, whereas one that has been constantly stolen from might become ‘unforgiving’. An NPC who has been the target of ongoing positive interaction might lose their ‘cold’ personality trait, and so on.

Finally, the mood handler works to add in a little reactive mood management for NPCs. The attitude an NPC has is a function of your standing with the NPC, your factional allegiances and alignment, and the NPC’s current mood. These mercurials are allocated sometimes as a result of things that have happened, and sometimes as a result of interactions. You might ‘flatter’ an NPC to get yourself a little attitude boost, which will in turn add the ‘flattered’ mercurial which changes the way in which the NPC reacts to all other interactions from you and from others. If you’ve killed an NPC before, it might be ‘anxious’ as long as you’re in the room with it. Each of these mercurials will come with chats and responses of their own, so an NPC might unexpectedly chat something like ‘I hate Drakkos for spanking my little bum cheeks’, or be more likely to ‘complain about Drakkos’ to other NPCs it encounters. If we tell gossip to an NPC, it might get the ‘was told a piece of gossip’ mercurial which then compels it to pass the gossip on. The personalities too will impact on the mercurials applied – cheerful NPCs will be less likely to fret about negative interactions, and thus are less affected by negative mercurials.

This has blossomed into quite a big system, but I’m very enthused about it because it offers us a chance to develop what I think will be a ‘best in class’ NPC framework. If we do it well, it’ll be a big step forward to making the world feel like it’s got real people in it without going down the overkill route of giving NPCs schedules and work lives and such. It’ll be organic and evolving and a lot of fun, I hope, to interact with.

As such, if we need to delay the next patch in order to get this together, that’s what we’re going to do. I’d like to aim for the end of January. The end of February might be more likely. But really, with only a handful of players, if it needs to be the end of March that’s when it’ll be. It’ll be a pretty epic patch though, as the patch notes are already implying.

I think for 2015 we have three *big* deliverables for Epitaph[3], and then we’ll finally level up to Epitaph 1.5 (perhaps) and start seeking players from outside the mudding community. The first of these is the Mercurial system as outlined above. The second is the Stronghold system. The third is our graphical client, which I believe is absolutely key to building a large and sustainable player base. 2015 is going to be a big year for us. Happy new year to you. HAPPY NEW YEAR TO US ALL.

Drakkos

[1] You can rarely tease a stranger and have it come across as banter. You need a rapport first.
[2] So as to handle ‘heat of the moment’ type interactions.
[3] Although we’ll continue to do the smaller ones too.