Finishing 0.8 Part VIII

I’ve now started work on speech variables, which is to say the parts of speech – such as “[god]” or “[rulername]” – which cannot be stored and simply reproduced, but needed to be generated each time they are called in a conversation, and will vary significantly based on context (reply, question, talking about oneself, talking about somebody else, and so forth). These are a pretty crucial part of the conversation system, since it is often through these that the player will get information about the specifics of the game world they’re exploring, and these will enable the player to ask questions about specific artworks, specific nations, and so forth, whilst ensuring that NPCs give logical replies to these kinds of enquiries. Most words are stable within one civilization: which is to say, everyone from one civilization might say “make” instead of “create”, or might be “homeland” rather than “nation”, and so forth. These give every culture a distinctive way of speaking, and in testing thus far they do come across in very unique ways. However, there are always going to be words in their sentences which have to be selected anew every time they are used, and it is these we are now tackling:

For example, “[holybookauthor]” would refer to who wrote the holy book of a particular religion (if known); “[monasteryfield]” would refer to what particular kinds of books a monastery produces (when we have books implemented!); “[mercyears]” refers to how long a mercenary has been a mercenary (that is “merc years”, not “mercy ears”!); “[armyrole]” refers to what a particular soldier the player is talking with does in the army; and so on. Whenever anyone tries to say one of these, the game needs to be able to look up what exact phrase it should use, which means a unique set of look-ups in the game’s databases for every single one of these. It might mean checking something to do with that particular NPC – such as their age or simply what religion they worship – but it might also require the dredging-up of information from a religion, a culture, a geographical location, a series of historical events, and so forth. Given the central role of the speech system to the game and to the player’s abilities to actually gain access to the information they need, it was clearly going to be vital that these systems are detailed, comprehensive, and sufficiently varied to maintain interest over what can be a long playthrough. Equally, as above, almost all of these are going to need unique bodies of code designed to pull out the correct bit of information – and it is this I’ve worked on this week.

The most challenging task this week was, frankly, reminding myself of how the code for sentence generation works, and finding the right “place” in the code to switch out “[god]” for “the Grey Goddess of the Mountains”, or whatever. Whereas for all the last few weeks I have been primarily or entirely adding more content to (or on top of) existing systems, here I was developing some new systems. I had a bunch of comments, and most things have quite logical labels, but there was still a certain bemusement looking at the sentence generation code again and working out how everything actually slots in. Once I’d figured all this out, however, it became clear how I needed to implement these elements, and what elements should be stored and retrieved from which places in the code and the game’s data structure. Last week, I shifted the code that I vaguely call the sentence-converter, which is to say the code which takes a default sentence and then makes it sound different for each nation. This week I’ve also shifted the code which handles these new variables away from where it originally was, which didn’t make a huge amount of sense, and put it alongside the other. Now, when the game cycles through each word in a sentence to choose the correct cultural version, it will also find the sentence variables in the same process, and decide what each one should become at the appropriate time. This is a good foundation for building on next week, and I’ve already begun to sketch out some of the functions that will select the appropriate words and terms for relevant parts of sentence generation.

I have also decided that the system whereby an NPC looks at you and draws judgements about you – see this entry for more – is something that will appear in 0.9, not 0.8. This is because although one can add and remove clothing at this point, one cannot actually gain access to the clothing of other NPCs yet, because a) we have no shops or currency and b) there’s no way to ask people for clothes, have people give you other clothes, even attack people for clothes, etc. So, for now, everyone will just (correctly) believe you are from your home nation. I’ve therefore implemented a placeholder function with space for a full assessment of who they think you are, which can be easily expanded in 0.9.

Lastly, as part of this, some different NPC classes will also give you different greetings; this is part of the placeholder above, and will be expanded in 0.9, but there are now some variations in greetings according to what kind of NPC you’re talking to. A priest, therefore, is likely to comment on religion when they say hello; a servant or slave will be especially shy when they greet you; and so forth. Again, this will be expanded in 0.9 to integrate with the NPC’s judgements about who you are when you talk to them.

Next Week

Next week: with the system in place, I’ll start working on handling the variables themselves, and drawing on the appropriate information, in appropriate contexts, to complete these square-bracketed parts of NPC speech. See you all then!

Finishing 0.8 Part VII

This week has been a week of consolidating everything that was in place so far, continuing to test and refine and test and refine over and over the speech generation and the flow of sentences, moving around some of the code so that it can be handled more efficiently, and thinking about handling sentence variables in the future, which is to say, the parts of sentences which are things like “[god]” or “[nation]”, and therefore have to vary every time the same sentence is uttered. As such, here’s this week’s fairly substantial update:

  • Thanks to some great suggestions left in the comments list in the blog post from two weeks ado, I’ve added in a number of new responses. If you’re asking someone about a potentially suspicious topic, and you’re in a region with guards, they might (if they really like you) say something like “You shouldn’t ask such things, the guards will think you’re a spy!” or something of that sort.
  • Equally, if you’re asking a particularly “academic” rather than “practical” topic – the difference between “what is the nearest mountain range?” and “what is your religion?” – they will sometimes, very rarely, say “I don’t know, but you should go and ask [expert]”. I think these are both great changes, and again, add even more speech detail to the potential library of sentences the player will actually encounter. However, again, to prevent farming, there’s now basically a hidden counter, which varies significantly from iteration to iteration, and affects how often people will recommend that you go and talk to somebody else about the topic in question; equally, you need to be talking to people who both a) have the knowledge and b) have the inclination to recommend an expert, which will be a fairly small number of NPCs.
  • I then spent quite a bit more time developing the above in order to maximise the detail that people can offer the player, the variation in the sentences the player will read, and integrating all of this will knowledge and mood modifiers. So, now, if you hang around in a shop, and then a random person comes in, and you ask that person about the currency of their nation, for example, if they don’t want to respond they will point you towards the merchant in that shop, knowing that a) they and you are in a shop and b) you are asking a question that it would be relevant to talk to a merchant about and c) there is also a merchant in this shop.
  • These responses also vary depending on whether you’re in the nation or church relevant to the person you’re speaking to. So let’s say you ask someone something, and the relevant answer would be “You should ask a noble”. If you’re in the mansion of a noble from their civilization, they’ll say “You should ask a noble, such as the one in this mansion” or whatever; but if you’re elsewhere, they’ll say “You should ask one of our nobles, who dwell in accommodations like these”; if you’re right nation but outside and in the right district, they’ll say “You should ask a noble; several have their mansions here”, or in wrong distract, they’ll say “You should ask a noble; many dwell in our richest district”. Equivalents in a foreign nation would be “You should ask one of our nobles, who dwell in a district much like this”, or “You should ask one of our nobles, who inhabit the richest part of my home city”. The game can therefore now generate appropriate sentences both based on the player’s location – right building, right district, or just overall right region, or overall incorrect region – and the relationship between the person you’re talking to and the area you’re talking to them in (especially relevant when you run into people who aren’t native to the state they live in, for example).
  • I have to be honest and say that I’m extremely happy with how this context-specific recommendation system has developed; I’m really hoping this will produce some strikingly specific procedurally-generated sentences for the player to encounter in appropriate situations, and as ever, just generally provide greater variety in the conversation system. There are also a bunch of sentence possibilities which might be generated that I know are currently impossible, but might become possible later once the potential actions and schedules of NPCs expands further.
  • Going back to repeating questions, if you ask X, and then you ask X again, sometimes on the first repetition people will now be confused rather than annoyed or bothered; they’ll say “Didn’t we just discuss this?”, or “That’s strange, didn’t I just answer that?” or something like that; the potential mood drop will be the same, I think, but it’s just another little bit of detail for some NPCs.
  • Thanks to an outstanding suggestions left on the Bay12 forums, there is now a little bit of extra conversation detail in there which I hadn’t thought of. If you ask something, and get a positive response (they answer your question), when you say the next thing you say, it’ll normally start your next question with “Thanks” or “Understood” or “I appreciate you letting me know” or things of that sort; equally, if they didn’t reply, your next thing will often start with “Apologies” or “Ah, okay” or things of that sort. This adds a nice little bit of extra flow to the conversations; naturally even more flow will be added once they can ask you questions back, but for the time being, putting these in 50% of responses definitely makes everything look a little more human once more.

Next week’s blog entry will be a little different: I’m in the final fortnight of the extension period on my first book, and this week’s absolute priority is finishing that off. Next week I’m going to have the first non-URR entry since development restarted and write up some reflections on writing such a long piece of work about games, what I’ve learned from it, my future writing plans, and so forth; there’s just no way I’ll have more than a little time in the coming week for programming, and I’d rather return with a blast the week after. See you all next week!

Finishing 0.8 Part V

Lots more coding this week! Let’s get to it:

  • I’ve implemented what happens when the player repeats compliments and insults over and over again (I have previously implemented the repeating of “general statements and questions”, i.e. almost everything, and repeating greetings, which are handled differently). When one says a compliment over and over, the NPC will appreciate it, and express their appreciation, but if you do it too much, they will begin to be a little bit puzzled; there are also some unique responses for repeated greetings being offered to particular classes of NPC. In the future I want to enable some greetings to be met with less positive responses if one greets repeatedly someone who might come from a culture which doesn’t especially like or appreciate the greeting in question.
  • If you repeat the same insult again, the NPC will quickly become even more annoyed than if you had simply said the insult once (which is itself a guaranteed mood drop) and will tell you to stop saying it, threaten you, become exasperated and ask why the hell you keep saying that, and so forth. Given that insults are unequivocally, well, insulting, this was a pretty easy group of phrases to code. I have also made it so that three or more insults in a row always has a 50/50 chance of ending a conversation: so be capable who you have a go at!
  • There was a bug with repeated comments; sometimes the game would seem to forget that you’d just asked something ten times, and if they answered, then said “why are you still asking this?” nine more times, on the eleventh time they would suddenly reply again. That was from the simplest of typos where the game was decided what kind of “why are you still asking this?” response it would give, where very rarely the game would select one which didn’t actually exist, and therefore default back to the previous sentence. This is now fixed.
  • The game previously only checked if someone’s mood had dropped to 1 or 0 to decide whether or not to end a conversation; this meant that if an NPC’s mood dropped from 2 or more to -1 or less, the game wouldn’t catch it, and they would go on talking and hating you, but not ending the conversation. This has also been fixed, and NPCs will end the conversation with you regardless of how low it drops. (It should be noted, the conversation does not literally “end” at this point; I need to add a dialogue box saying “This NPC has walked away” or whatever, and “Press Enter” to then end the conversation. I’ll be doing this before 0.8 is released, and shouldn’t really be too difficult; I’ll also need to add something when you talk to an NPC who has rejected you again, such as “I’ve told you, I have other things to do”, and the like).
  • I’ve given each civilization a list of reasons they might not want to respond to questions about particular topics. So people from an Isolationist nation might be disinclined to answer national or political questions because they are very wary of outsiders; someone from a theocratic nation might be disinclined to answer a religious question because that’s a matter for the state; and so forth.
  • Fixed a range of grammatical errors with the construction of sentences ,and discovered that in some cases, sentences were going through the system that varies each sentence for each culture twice, which was a big problem. That has now been fixed, shifting the “sentence varying” part of the process to something which only takes place once, and before. Before release I will need to spend quite a bit of time talking to every NPC I can find and dealing with every grammatical error I can possibly hunt down, but it’s a work in progress; the speech generation system is so complex, and so much varies, that it’s hard to pin down too much in any one sweep.
  • If people don’t want to respond to the questions you’re asking for personal reasons, there is now a set of responses in place for them explaining that they don’t want to respond for political reasons, or for religious reasons, or whatever. There are also some unique responses if you’re asking particular classes, so an inquisitor might mention it’s particularly suspicious if you keep asking about heresy. What this means if that there are many, many layers of questions and answers that the player will rarely, but sometimes see, and should provide a lot of variety. In this case, you need to ask someone something, it needs to be a topic they would be willing to reply to, and know something about, but they don’t want to talk about, and they decide not to talk to you about it, and they’re of a particular class and asking a particular question, you’ll get a unique response. I want these chains to be as long as possible, to maximise the chance of the player encountering a new response, no matter how long they’ve played the game.
  • I’ve put a lot of work into these responses, which take three forms: “uninterested” (the person doesn’t fancy talking about the topic), “stupid” (they think it’s a dumb question to be asked), and “suspicious” (they are troubled by you asking something).
  • In the case of the “Uninterested” response, they will begin with a sentence along the lines of “I don’t want to answer that” or “I don’t feel like talking about that”. After that, they will follow up with a comment that might be a general comment, or a class-specific comment. If it’s a general comment, they might say “It doesn’t really interest me”, or “I don’t think about such things”, or “Aren’t there other more interesting matters to discuss?”, and so forth. Class-specific, meanwhile, might be something like a miner saying “I should really get back to the seam…” or a priest saying “I would really prefer to speak to you about [god]”, or things of that sort. These have a nice variety, and I was able to think of at least three options for every class, as well as many general variations, all of which will of course vary across culture as with all sentences, so there’s a huge amount of variety here in the kids of responses one will get out of NPCs. 
  • With the “Stupid” response, NPCs will instead open with something like “What a weird question” or “What a strange thing to ask me”, and then proceed to again, either give class-specific or general responses. General responses might be something like “Am I really the person to ask about this?”, or “That makes very little sense”, or “Why are you even asking?”. For the class-specific responses, they will reply in a way that emphasises why this was an especially daft question to ask that NPC class. If you ask a jailer about geography, they might say “My work is in here, and always will be”; if you ask a Concubine about war, they might say “What could I possibly know of battle from in here?”; if you ask a doctor about politics, they might say “Diseases and ailments care not for one’s political allegiance”; and so on. These should help the player to think about what kinds of things they should be asking different kinds of NPCs, what classes and questions make sense together – as well as what classes and questions definitely do not make sense together – and, as ever, dramatically increase even further the variety of things people might say to you in the URR world.
  • For “Suspicious” answers, they start off the same as the “Uninterested” answers, by saying “I don’t really want to speak on that” or whatever, but then things change. For each tag (“political”, “religious”, “geographical”, etc) some NPC classes have special responses, and all have a set of general responses. For example, asking about politics to a concubine might have them ask if you if you’re only asking because of their closeness to a ruler; for other classes, they might say “Politics is a strange topic for you to be asking me about…”, or equivalent. If one asks an individual question, a clerk might emphasise their personal life has no bearing on their work, or an inquisitor emphasises that their purpose is simply to pursue heresy, not to think about themselves. If one is asking about military matters, an officer might question why you want to know about potentially classified material, whilst someone from a militia questions why you’re interested in the defence of their homeland. There are then also some responses based on national ideologies, too, which will sometimes be thrown into the mix. Again: maximising number, maximising variety and difference, maximising the potential for the player to always be discovering new possible responses.

For this week’s sole coding screenshot, here’s a bunch of the “defaults” for the uninterested answers (which are picked at random, then varied for each culture according to procedurally-generated constraints and norms, as usual):

Next up: in the coming week, my objective is to finish fixing any remaining bugs to be found in the above set of points, and then start – I anticipate this taking several weeks – putting into place a structure for filling in the “[god]” and “[nation]” and whatnot parts of sentences, i.e. the parts that vary every time they get uttered and cannot be stored, but have to call reference to a wide range of different saved elements of the game world. I have no idea how fast/slow this will go, but all I can do is get started, so I’ll be doing that next Saturday/Sunday. See you all next week for the first steps into this crucial part of the conversation system!

Finishing 0.8 Part IV

This week I’ve basically been playtesting everything that I coded in the previous three weeks since development actively restarted: this meant playtesting the mood system, playtesting NPCs becoming annoyed with you, making sure NPCs can say a tremendous range of things when you ask repeated questions (as ever, variation and believability are central here, and the two go hand in hand), and then seeing what happens when you ask NPCs all the questions you can ask, and making sure they can give some kind of logical response to them. NPCs should also be able to end conversations, make appropriate comments when they don’t want to respond something, choose what to not respond to, and so forth. I’d say pretty much everything in this selection seems to be working now! Here are some nice screenshots, all taken with one person from one civilisation for each demonstration. You’ll note the [thing] sections remain ambiguous, which is one of the tasks for the coming weeks, but hopefully here you can begin to see how NPCs give you reasons for not responding in various ways, or commenting when you say the same thing too regularly:

Some more work still needs to be done on the “naturalness” of what people say, and ensuring variation of all sentences, and so forth, but you can immediately get some idea from these about how things are shaping up with some of their more detailed responses, and the variety in responses, and there’s also of course a vast amount shown here with unique responses for certain classes, certain questions, certain questions asked to certain classes, asking certain classes from certain nations about certain topics, and so forth. As above, my goal is always to ensure the player might be able to see a new kind of statement in a new context, something that makes the conversation system feel truly deep and open-ended and potentially-infinite, whilst also being able to understand the many factors and many elements encouraging the NPCs one meets to respond in the ways they do. (One might also note a strange name for one NPC – need to fix that! I also got one NPC called “Son of Sluts”, which was pretty great – I’ll be sure to add that to the list of excluded terms). These screenshots have also shown me I need to find a way to add more facial variation to people from the same racial background; although in a global sense the variation is still huge, people will be spending significant blocks of time in one area, and that needs to vary more. I won’t be doing that in 0.8, but probably in 0.9. Next week: more conversation programming! Will be focusing on expanding “uninterested”, “stupid” and “suspicious” responses, people giving political or religious reasons or whatever for not answering things, and how to handle repeated insults and repeated compliments. See you then!

Where are you from?

This fortnight I’ve been working on getting the entire basic underpinnings of the conversation system finished; I’ve made a lot of progress, not quite enough to show off all the screenshots I’d like, so like last time, I’d rather wait until I can do a nice screenshot-heavy update, which will be next time (whenever that is!).

Instead, I’m going to talk a bit about the second thing I’ve been working on. I’ve now started developing the system by which NPCs will make judgements about you, the player, and where you come from. There are five elements to this: your clothing, your jewellery (meaning what rings and necklaces you are wearing, if any), your skin tone, your facial appearance (scarification, tattoos, headscarves, turbans, that sort of thing), and how you talk. The last one of these I’ve talked the most about in the past, but in this entry I’m going to do a little bit of an overview of how I see all of these functioning, and what it’ll do for the game. Equally, however, I now find myself faced with a big problem: what if all five elements of a player’s appearance suggest different origins or statuses? How should the NPC respond? I have a few notions, but I’m very open to suggestions.

Anyway, without further ado:


Other NPCs will make a range of judgements about the player based on the clothing they wear (and, later, the armour they wear, and weapon they wield). I think this will have three elements: what nation they seem to be from, their potential wealth, and whether their clothing denotes any kind of special affiliation, such as a religious order or military organisation. Most NPCs will likely treat you with more deference the more impressive the clothing you wear, but of course wearing the clothing style of a hated nation is likely to have the opposite effect no matter the wealth you’re showing off. For religious clothes, I’d like to have NPCs assume you’re a priest or a monk if you’re wearing obviously religious garb, although such garb will obviously have significant negative effects in certain areas of the game world; at the same time, though, it might encourage a particularly zealous shopkeeper to give you a discount, for instance. However, if people ask for religious advice and your character doesn’t know anything about the religion they are masquerading a priest of… that might be a little suspicious. Once armour is in the game that will also affect people and how they respond to you, probably with a little fear, a little deference, but again depending on the specific situation. Wearing unknown clothes should also elicit some kind of response depending on the nation/people; friendly and inquisitive if a very open and cosmopolitan nation, scared if isolationist, etc…


Jewellery will appear at some point in the near-ish future, and will consist of rings and necklaces. These will be similar to clothing: there will be cheap, middling, and pricy rings and necklaces available for each nation, and special/unique rings and necklaces for religions, religious orders, various other factors, various ranks in various organisations, and these sorts of things. Right now, I think special jewellery will be available for religions, houses/noble families, monarchs/rulers, but that’ll probably be it (and then more generally, as above, across cultures). I therefore see these as having a very similar set of relationships as clothing, but also denoting several things (such as family affiliation) which clothing does not; although most will be standard jewellery items for the culture in question.

Skin Tone

Skin tone varies very widely in URR, and is inevitably a central method by which peope might make judgements about the origin of the player character. This has only one element, which is to say a geographical assumption: NPCs will consider your skin tone, estimate how close/far from the equator you originate, and then look at their knowledge of nations and take a guess at which one you might be from. As such, there will also be some way to temporarily alter and mask your actual skin tone and make it lighter or darker as part of trying to blend in in other societies; and, of course, with some skin tones you’ll be able to “pass” for a citizen of many countries, most likely, whereas a clothing style would only allow you to pass for one. Hopefully the intersection of these (and the other elements below) will allow for some interesting combinations and strategic decisions.

Facial Appearance

Facial appearance, meanwhile, is a binary element: it denotes the overall culture someone comes from, and that’s it, although in a small number of cases it might also denote rank, slavery, and so forth. Again, if people recognise the markings they will suspect you are from the appropriate culture; if they don’t recognise the markings, the same range of responses mentioned earlier might play out. Again, I’ll be introducing ways to fake some markings (though probably not others?) as a means of further disguising yourself.

How you Talk

We’ve discussed this several times before on this blog, so I’ll keep it brief here, but the way in which you speak is going to be crucial. NPCs will make judgements about your origin based on what you say and how you say it, whilst you’ll be able to fake speaking in other dialects to a greater or lesser extent based on your knowledge of that dialect at the point you’re having the conversation. This will often be a make-or-break point for any player/player character attempting to “fake” their way into/through a particular culture or particular social situation, and is one of the aspects that’ll appear in 0.8 – NPCs won’t respond to it yet, but you will be able to change dialects, and see the results.


These are the five major elements I see as contributing to how other NPCs see the player – the first four being literally how they see the player, and the last one of course only coming into the equation if you start talking to the NPC (or the NPC starts talking to you, which is a feature that definitely needs to be implemented in the near future). I think these will give the player ample methods for crafting an image useful to them at that moment,

But what happens if 50% of your elements suggest you are person A of rank B from culture C and religion D, but the other half of your clothing suggests you are person W of rank X from culture Y and religion Z, which is the absolute opposite? Should they take an educated guess? Should they comment on how you are dressed, and that you are dressed strangely? What if they have particularly strong feelings towards/against A/B/C/D/W/X/Y/Z? Or what if 90% of your visible elements suggest X, but then you have a single element suggesting Y? Should the NPCs focus entirely on Y? Should they assume you are X and just treat Y as a strange element? Does that depend on the nature of X and Y and the context in which you are meeting another NPC? My point from all of these questions is that it’s proving very difficult and complex to decide, in essence and in one sentence, how NPCs should add up the elements of “you” they are presented with and how they should subsequently come to a judgement. This is what I’d love any and all of your thoughts on below; this system isn’t going to be implemented in 0.8, because I’m really trying to get only the core essentials of the conversation system done before release, but it’ll be a crucial element of the fast and much shorter 0.9 which will be finishing off the conversation system straight after. What do you think?


As I’ve said before, I’m crunching on finishing my first book, and about to travel for six weeks through various visiting fellowships; I am hard at work coding, but right now I’m finding fewer blog updates is really helping me with game developments, so we’ll be sticking to uncertain update schedules until my book is finished and submitted (May 31). I know this is rubbish, folks, and I wish I had some more time, and I hate how long URR 0.8 is dragging on for, but I’m doing the absolute best possible in the present situation. Next update: asap!