Seeing Names, Changing Dialect, Sentence Generation

Since last week we had a post about my third bullet hell world record high score instead of an URRpdate, this week’s should be the longest in quite some time! Lots has happened in terms of naming NPCs, fixing remaining bugs, changing the player’s dialect in a conversation, and also sentence generation is now actually happening! Most exciting. Read on…

Wikipedia

…but wait! One tangential thing first. A while ago a URR fan made a URR Wikipedia page, which can be found here. I’m very happy with how the page looks, and I see it expanding soon with the release of 0.8 and several books and book chapters coming out in the near future (written by me, and by others) that discuss URR, but that label at the top has been there for some time. Naturally, as the game’s developer, I have an obvious conflict of interest, but for those of you who read the blog and are Wikipedians – if you, in your neutral opinion, think the article is good enough to have the banner removed, is there a process for this? Or with some more references added if that’s what it needs? If someone feels it can be taken down, or can give me advice on what I might need to add, that would be fantastic. I get a substantial amount of traffic from the Wikipedia page so I want to ensure it’s as high a quality as possible. And, of course, it’s a very pleasing mark of legitimacy/relevance to have a Wikipedia page, so it definitely matters to me that the page represents the game well and “deserves” its place on Wikipedia.

capain

Names in Conversations

As well as being generated, names now appear correctly in conversations. In future versions you will naturally not automatically know the names of strangers you bump into – unlike certain RPGs we could mention where the player magically divines the names of every single you talk to – and learning someone’s name will therefore sometimes be a gameplay mechanic. You might, for instance, know that a particular merchant called [Name] knows something, but the civilization that merchant comes from are not particular friendly to you, and you don’t know what they sell, so you’ll have to try to figure out which of seven merchants in a market district the particular merchant you’re after is, and potentially use other clues (sex, clothing, behaviour, whatever). Equally, of course, the game will remember perfectly the names of everyone you meet, and I’m actually thinking of a system that might alert you when you encounter someone whose name you already know – perhaps a message in the text log saying “You see [Name] [doing task X]” for someone you already know, because there is no visual way to mark out someone you recognise from someone you don’t (i.e. two merchants will both be ‘m’ whether you know them or not). Here are a couple of screenshots showing some conversation windows with people from various name-types:

Name1 Name2

Name3

Changing Dialect

You can now actually change your dialect by selecting a different dialect. This is a small thing, but it required me to start building up the code for handling what happens when you press [Enter] on an option in an in-conversation window, and it therefore has to detect the sentence or the item or the dialect you select, and then notice what kind of thing it is the player has selected, and then take the appropriate action. This works correctly now, though, so you can switch to another dialect and all the % chances of uttering each possible sentence immediately update appropriately. You can see in this gif how the chances of successful/unsuccessful words changes as we change dialect from one to the other.

Dialects

Sentence Generation (Part I)

After thinking long and hard about sentence generation, and managing to free up a spare day to do nothing else except working on this, I’ve been able to make a substantial start. So, basically, the game splits sentences down into three categories, I’m naming “clauses“, “archetypes“, and “kennings” (which applies to a range of things that are not technically kennings, but the term gives us a good impression of what we’re talking about here).

Clauses: these are segments of a sentence, which vary massively from culture, religion, geographical background, and all the other factors that basically everything else in URR tends to be varied along.  A sentence will contain several clauses in most cases, and clauses are basically sections of a sentence that the game will generate independently (via archetypes) and then stitch back together (see below for more information on this).

Archetypes: these are hand-written default versions for each possible question. For each of the questions that the player can possibly ask (or the NPC can ask back), I’ve gone through and written a dozen or so variations of that serve as the foundations of possible replies (although once a reply is finished it will be almost indistinguishable from the archetype that created it). These are then distributed to each culture semi-randomly, with some relationships between some archetypes which others are “free-floating”, and each culture then starts the game with a few basic and foundational ways to talk about the things people might need to talk about in-game.

Kennings: in the case of URR, this refers to a particular way of referring to a particular thing. So this might mean referring to historical events, or a title to put in front of the name of a deity, or a particular way to talk about oceans or mountains, and so forth. These are basically segments of clauses that have to be expressed a particular way, so a clause might say [Title of god] and then the game will look up the appropriate “kenning” for that element and place it into the clause; alternatively, if it says [Desert] then maybe that nation says “Deserts”, or “Great Sands”, or “Great Dunes”, or “the Red Expanse”, or whatever, and the game will quickly check what the appropriate (generated) term is for something in a sentence.

So, in trying to create a sentence, the game does the following process:

Stage 1: select clauses. This first stage means that the game looks at how many clauses should be in a sentence, and what they should be. A nation with a dialect with low “sentence complexity” will have very few clauses in the average sentence, for example, whilst a nation with high sentence complexity will have many clauses. I’ve developed a fairly complex but easily-added-to system for adding clauses into sentences based on the nature of the sentence. This means that extra historical, personal, geographical, religious, etc, detail can be added to a sentence depending on how many clauses it has, and those clauses will be handled intelligently and sensibly.

Stage 2: select an archetype for each clause. The game then checks how that particular culture would express a particular clause and retrieves that archetype (which will then, in stage 3, be massively varied) and readies it. Archetypes are generated/selected in such a way that they should be broadly consistent across a culture, so you shouldn’t get a culture that talks about mountains in one way and talks about oceans in another, but rather talks about all those things in a broadly comparable way. Archetypes also affect sentence structure and in some cases word order, and these elements are also taken into account.

Stage 3: implement kennings/references. This third stage is perhaps the most important part of sentence generation, since at this point the game looks up how to express everything in every clause in that sentence. As we see above, archetypes say things like [Religion-title] and these are all triggers, telling the game to look up the appropriate phrase for the appropriate thing in the appropriate culture. As such, the sentences themselves within archetypes tend to have a large volume of square brackets in them, and aren’t really human-readable – although you can get a good idea of their meaning – until there’s a nice lot of kennings and references in place.

Stage 4: stitch it all together. The game then goes through all the sentence components – now transformed from archetypes with square brackets to archetypes with appropriate references and the like – and stitches them together with appropriate punctuation. This is partially done through the system that places clauses together, and also a bunch of signifiers that handle things like vowels/consonants, plurals, etc.

It was very tricky to find a system that struck the right balance between a) generating a huge volume of potential sentences, b) making the number of hand-made sections relatively low so that I actually get the release out before the 2020s, and c) ensuring a huge amount of modular variation within the sentence structures. With this system – selecting clauses, selecting archetypes, varying almost all of the components of those archetypes, and then stitching the sentence together into a meaningful whole – I’m confident that I’ve found a balance between all of these requirements. I think I’ve struck a balance between large volumes of hand-made sections, large volumes of procedurally-generated sections, and sections of speech that sit somewhere in the middle where handmade elements can be altered or twisted in some way depending on the particular nature of the speaker. I’m really excited to see what this will produce! These are just initial trials, but in the coming week I’ll be trying to build up all the possible conversation options and archetypes and clauses and whatnot, and then we’ll see how that looks. Here are two variations OF THE SAME CONVERSATION, and just look at all that variation!

BAIC

BAIC

(Note: you’ll also see a tiny bit of procedurally-generated calendars there! Some use years, some use a bunch of other systems; this might not make it into 0.8, but I just happened to be testing it out whilst I took these screenshots)

(You’ll also note the lack of ‘?’ in the second – just a typo!)

Having looked at the power of this system, even with the incredibly simple conversation above, I am *so* excited about how this is going to work. I now just need to write all the other words to slot into every other part of the system, and this is a huge task, but by next week’s blog entry I hope to have it all done and to be able to show off some more detailed conversations, as well as some of the other conversation options I’ve been developing this week – these extra things aren’t totally ready just yet, but they’ll be essential to making conversations feel very human, and adding extra depth.

Next Week

Conversations, sentences!

Blue Wish Resurrection World Record and Analysis

An unexpected blog post this week! Yesterday I managed to achieve my third bullet hell world record to date, this time in the very popular “Blue Wish Resurrection”. Score Rush was quite a substantial shmup in terms of player base, but Danmaku Unlimited 2 was somewhat smaller in its visibility, but this is almost certainly the most visible world record to date, or to put it another way, is probably a game played more than both of my previous two record-games combined. This blog entry is therefore the now-standard world record analysis post, with lots of gifs and the video (just below), and some thoughts about what I’m going to be playing next. Enjoy!

(For those wondering about the next regular URRpdate – that’ll now be next week, and now somewhat larger than it was otherwise going to be).

First Level Optimization (00:15)

The first level only takes a moment to restart if I screw it up, so in the first level you’ll see me really pushing my luck in a bunch of places because there’s very little to lose at this point (and also because I wasn’t really playing for the record yesterday (!), so I was actually probably taking more risks than I usually would anyway). In the gif below you can see me pushing right up against the top of the screen in order to kill things as quickly as possible and open up the “point well” – that thing in the left pillar spewing out golden cubes – as soon as it comes on screen. For the rest of this level I spend almost all my time near the top of the screen, as you get points for the golden cubes enemies drop and they decrease in value the longer they take to pick up, so you’re encouraged to kill things up close. The time I don’t spend at the top of the screen I spend waiting until there are enough bullets on screen to be worth converting into points (when large enemies are killed), or killing enemies at a particular speed/pace to maximize the points I get from them. This was one of the best playthroughs of the first levels I’ve ever had – though not the best ever – but more than adequate to continue with. I think a truly perfect playthrough, however, would be something like 100k points higher.

BWR1

Second Level Mid-Boss and Boss (03:50 and 06:10)

The second stage has a few slightly tough sections. The mid-boss (shown below) is quite interesting in that it consists of five parts – the main body and four little turrets that directly target the player. When you destroy each of those turrets, the bullets surrounding them (though not on the entire screen) get converted into points cubes, so it became clear I needed to kill this in a sufficiently optimal way that I could get maximum points from these smaller segments. As such, you’ll see here I hug the edge (which is slightly scary) whilst destroying the right-most turret, then destroy the second one when the boss does a “splurge” bullet attack at the exact right time to get a full conversion of those bullets into score cubes, and then (in the video) I kill the other two close up to maximize the bullet conversion there as well.

BWR2

The second boss (i.e. the boss at the end of the second stage) is has the first attack that I would say is genuinely tough, which is this final attack. It fires bullets in four directions which then fire a range of smaller bullets at an angle that’s very unusual in shmups, as you far more ordinarily get bullets coming straight down, or at least straight at your ship (or where your ship was when the bullets were fired). In addition, these chains of unfurling bullets are then fired directly towards the player’s ship, which makes it harder to stand in one place for two long just moving up and down, which would probably be easiest, and instead gets you to move side to side. I think there was a particular dodge in this boss fight that turned out to be weirdly close, in the end, but this phase went well, and by the end of this phase this playthrough was starting to look pretty decent.

BWR3

Third Level Boss (08:40)

The stage 3 boss is, to me, the real transition in the game from fairly easy stages to very hard stages – there’s a big spike from the middle of stage 3 (and everything before) to the end of stage 3 (and everything afterwards). The third boss has a particularly difficult final attack, shown in the gif below, in which bullets spawn extra bullets of various sorts, some just spewing madly around the screen and some targeted directly at the player. Trying to “re-stream” – to stop tapping left and start tapping right, or vice versa, and therefore cut across the current line of bullets trailing you – is especially hard in this attack, but I’ve found that moving as slowly as possible both reduces the number of re-streams you have to pull off, and also makes the “wall” of bullets less challenging to break through. It’s still a pretty crazy attack, though, and it’s a real trap for newer players who will always think that moving more is the best way to play these sorts of games.

Bwr4

Fourth Level Mid-Boss Final Attack (12:15)

Not much analysis here, other than to say that the attack below is one of the toughest in the game, I think; it’s very fast, the pink bullets are quite large, the blocks of purple bullets are even larger, and there’s very little relationship between how the two elements are aimed, which makes it basically impossible to rote-learn a way through – in turn, one has to just reflex it every time. Right at the end of this attack I actually took a slight risk, since I expected to have killed it already and I was moving up screen to maximize my points from the subsequent bullet conversion, so almost died! Happily, though, this didn’t happen and the mid-boss did, indeed, expire a second later, but if you watch the video, you’ll see this moment just before the mid-boss explodes.

Bwr5

Fourth Level Boss (13:25)

Whew, Boss 4 is very tough. None of its attacks are trivial, but the two I’ve outlined here are definitely the toughest. This first one has the boss’ four “wheels” spin around it, each of which fires out chains of light bullets in a pattern that also rotates independently of the wheel’s rotation, and spew out a chain of dark purple bullets, and the main part of the boss fires groups of three lines of thin bullets from its middle, its left, and its right (if you watch the gif you’ll be able to see everything I’ve just described). This is a super-difficult attack due to the volume of bullets on screen, the different patterns and trajectories they all follow, the risk of bullet overlap (one bullet being hidden by another bullet) and just the general confusion of the whole thing. This is one of the very, very few parts of the game I actually just learned a precise set of moves for – the game is deterministic, after all, and this attack always looks the same each time as long as the player moves the same way (since many bullets are aimed), and so I managed to figure out a particular sequence that gets me through this nightmare safely.

Bwr6

And then we have this attack, which just looks completely ridiculous until you look more at it… after which it continues to look completely ridiculous. Basically, there are five lines of bullets too dense to move through being fired, and then dozens of lines of bullets being forced from the two sides of the boss at various angles. Navigating this nightmare involves placing yourself between the thick lines and being able to see where the lines of circular bullets with gaps will next be crossing over, and then crossing through them, without letting yourself be squashed against the walls of bullets. This was an attack that continued to give me trouble even as I got close to a world record standard, and it’s easily the hardest attack in the same outside of the final boss… and maybe actually the hardest attack per se? It’s hard to say, but it’s damned tough – and I found it too fast to learn a sequence for, so this is just pure reflex every time I play.

BWR7

Fifth Level Pre-Boss (18:10)

Before the final boss these two particular enemies spawn, and I’ve always found their attacks weirdly impossible. I think I’ve only cleanly dodged them without losing a life or using a bomb once or twice, and that’s just not consistent enough; however, using a bomb converts all the bullets into score cubes, and with such a large number of score cubes on screen, I realised that it might not actually be the worst idea to use a bomb here deliberately to clear out the screen. You get extra points at the end of the game for each bomb unused, but I’m pretty sure that doing this gives us roughly enough extra points to offset the points lost at the end – and ensures I don’t die!

bwr8

Fifth Level Boss (19:00)

Ah, the final boss. Considering the final bosses of this game, DU2, and Score Rush, I think this is probably the hardest, though the DU2 final boss is a very close second. The first two phases you’ll see on the video are trivial, but then this (the below gif) phase begins, which is the other phase with a legitimate claim to being the hardest phase in the game (just like the final attack of the Stage 4 boss). This has thick lines of thin pink bullets that constrict the player’s movement to within only a small chevron of the overall space on-screen, combined with massive swirling chains of purple bullets, and a chain of thick purple bullets being “washed” back and forth across the screen from the middle of the boss, and some aimed lines of pink bullets coming from either side of the boss (which, weirdly, are often the toughest part to avoid). It’s pretty rough, and I tried to create a particularly sequence to survive, but again, I found it rather tricky to emulate, so this is mostly reflex with a few small rote-learned elements. A lot of this attack is about making sure you move into the next segment you’re being pushed towards at a particular speed; too slow and the impassable lines of bullets will catch with you and kill you, but too fast and you’ll be stuck waiting around in one area whilst all the aimed lines target and destroy you. It’s a careful balance to strike, and one that took a lot of practice.

bwr9

There are then three other attacks between the above gif and the below one, both of which are tough and tricky, but doable – this final attack, however, looks like a complete nightmare, but is actually remarkably workable. Basically, the boss is firing the dark purple circular bullets, and those spawn the pink bullet-shaped bullets, and the boss also fires thick lines of pink circles directly at the player. This is one of those attacks where you actually want to move as little as possible; a lot of the bullets drift off the sides, the purple circular shots are few and far between, and the aimed chains of pink circles take quite a while to get to you, so broadly speaking I basically try to slowly drift from one side to another during this phase, and to always choose to take a tiny “gap” between two pink bullets than to make a larger dodge. By moving very little in this attack, therefore, I only really have to focus on the bullets in my immediate vicinity, which move relatively slowly and are very predictable in their movement, and that transforms this completely mad-looking attack into something remarkably doable (believe it or not!).

Bwr10

What next?

Well, that’s a third world record. When I started playing these games I wasn’t really expecting to get more than one, and certainly not in a game as well-known and well-played in the genre as Blue Wish Resurrection, so I’m particularly proud of this one. Naturally, different world records are “worth” different amounts depending on the volume of players, but I don’t know of any Western players who has ever stacked up three world records, two of which are in games that certainly have substantial playerbases. Equally, although I’m getting “older”, I do seem to be accelerating; I played Score Rush for two years before getting the WR, Danmaku Unlimited 2 for a year before getting the WR, and Blue Wish Resurrection for only six months before getting the WR. If this pace continues, another world record will appear before the end of the year… but I don’t think that’s realistically likely, especially as for the next month I’m primarily focused on finishing URR 0.8, I have papers to finish, and an entire book to write, so I wouldn’t expect a fourth WR until some time in 2018. Nevertheless, I will next be pursuing the Hard Mode world record in the excellent and profoundly hectic Cho Ren Sha 68k…

CRS68k

…but first, I’m scheduled to play Blue Wish Resurrection at this year’s FDG/DiGRA conference, so I need to make sure I stay at the top level for just another few weeks until I can discharge that obligation! And then I’ll get onto CRS68k.

See you all next time for a return to standard URRpdates! (And a substantial one, at that, with lots of sentence generation, the conversation system, etc)

Name Implementation, Animals, Plants, Sentence Generation, and Bug Hunt

This week has seen the implementation of name generation into the main game file, to rather fantastic results, alongside a substantial amount of bug-fixing. For name generation, the names now consider all the relevant religious/cultural/geographical background of the nation they hail from, and generate appropriately. The game also tracks the various different structures of the names – some name types have just one name, some have two, some have several with a mini-title in the middle, and so forth – and can always produce a “casual” version (i.e. “Mark” to “Mark Johnson” or whatever) as well as accurately reproducing a name when needed, without looking for name-segments where they don’t exist, or failing to look for a name segment relevant to a certain name archetype.

I have to say, I am *so* happy with how these look! They’re all very different, some speak to particular locations or cultural ideas, whilst others don’t, but they are all distinguishable. I’m still doing a little bit more work on these, but only a couple of hours’ work remains, and then in 0.8 everyone who you speak to will have their name highlighted. So, here is a rather splendid set of examples from a whole bunch of cultures in some playtesting world generations! Hope you like black-and-white images…

Names1 Names2 Names3 Names4 Names5 Names6 Names7 Names8 Names9 Names10 Names11 Names12

Names13 Names14 Names15

In the process I also had to develop the very start of the system for generating sets of animals and plants within particular climate zones. Plants were already present but were distributed across all biomes of a certain type (so northern tundra and southern tundra areas would have the same plants, somehow), and also tended to be colour-matched to their biome, which made a degree of sense but definitely reduced the kind of background/aesthetic interest they could potentially generate. Plants were therefore redone, and their naming conventions were also altered somewhat to reflect these changes (all of which come before visual generation at some later date when I have a spare couple of days). Animal generation has now appeared for the first time, and just like plants, they are tethered to a certain area of a certain biome – so the game finds a tile of desert, looks to see how far contiguous desert extends, and then all that desert has the same group of species. The species elsewhere, by contrast, will be completely different, even if they are also desert. Like plants, I’ll generate the images for these at some far-later date (since this isn’t exactly gameplay-essential stuff, just general background worldbuilding), but the names will be used in this release, as they serve to inform the name generation for individuals in certain nations, and they’ll also show up in artworks and literature and metaphors and the like later on. I also thought quite a bit about which animals I can realistically vary in appearance and name, so a few common animals aren’t in here because I couldn’t think of how to vary them well enough, whilst a couple of more obscure animals are present precisely because they vary a lot. Here are some animal/plant printouts, with their biome attached:

Oceanroutes

And then two massive printouts of all the plants/animals generated across a world, so you can get a full idea of the generation systems for these:

Oceanroutes

Oceanroutes

As for the bugs, I’ve reached the point where only two things remain for 0.8: sentence generation, and bugfixes. Sentence generation is such an intellectually complex task – although once I have a suitably complicated but usable and modifiable programming framework in place, I’m confident it will actually move quite quickly – that I need to spend a lot of time simply planning it out before I actually start coding it in. In this vein I’ve been scribbling ideas all over paper for the last week, and although it is taking a while, I am zeroing in on a workable method. Much like most things in URR, it will wind up being a balance between some structures and templates, entirely procedural elements, and then a range of variation within these aspcets based on the speaker producing the sentence – a soon-to-be-gigantic function called make_sentence has now been constructed, and so the only remaining task is to actually write the thing (ha!). As a result of this week’s focus on planning, however, on the actual coding front I’ve been working instead on bug fixing, in order to ensure that 0.8 is actually stable once I release it (hopefully at the end of July/start of August). Some of these were found from my own playtesting adventures, but a large number were submitted by the playtesting team I recruited a few months ago (thanks again, all of you!) and with these all fixed, I do actually feel fairly confident that every part of 0.8 (aside from speech/dialects/etc) is finished, bug-free, and ready to release. I can’t rule out the possibility that there are NPC-related problems I simply haven’t anticipated yet, but I haven’t run into any in quite some time, and everyone basically seems to behave correctly (though I’m going to have to revisit  NPCs in 0.9, of course, to implement the NPC classes that aren’t being included in the upcoming 0.8). Here’s a run-down:

  • Fortress guards no longer sometimes fail to move when they should exchange schedules with another guard.
  • Fortress merchants always appear correctly even if the player enters the grid part-way through their move from their home to their stall.
  • Fortress merchants are always assigned to the correct open-air stalls.
  • There cannot be two open-air stalls of the same sort within a single fortress, nor too many merchants for them to all be assigned a stall.
  • Slaves and servants in upper-class districts absolutely, definitely, without a doubt, always sleep in the correct places on the correct floors no matter how and when the player spawns the mansion and what other movements the player takes.
  • Drawbridge chains do, actually, appear, when the player looks at them.
  • Looking at certain doors in torture chambers or dungeons no longer causes the game to crash.
  • Looking at a small number of bars in torture chambers or dungeons no longer results in a black screen instead of the appropriate generated image.
  • NPCs are always the correct inverted colour when they pass under trees or a gate.
  • Handled some weirdness with players stepping through gates and sometimes winding up on the tile next to the gate, and sometimes winding up one gate further away.
  • Fixed an issue where you could read sections of the encyclopedia that should have been disabled.
  • Fixed an entirely aesthetic issue with some potential colour patterns on couches.
  • Resolved strange issue with a small subset of square-based castle generation outcomes that would position guard towers in the wrong orientation.

See you all next week for what might be quite a technical post about sentence generation!

Conversation Options, Scrolling, Changing Dialect, Meta-Options

An even bigger update this week! I made a lot of headway on my academic commitments (one of which can be seen at the bottom of this update) and so I managed to carve out quite a few evenings to really focus on game development for a bit. This week I added the current list of every single standard conversation option (which is then generated for each culture when spoken), implemented the scroll bars for going through some of the longer lists, allowed the player to change their dialect and see what they can see in each dialect (I haven’t yet decided how much dialect knowledge will be present in this release – we’ll see), and then implemented a system for keeping track of all the meta-questions (such as “Please tell me about [novel]”) and what dialects the player can say those in! Lots of big progress therefore, and all the underlying aspects of the conversation system are now there – except selecting options and having them appear in the conversation itself – and all the elements of the dialect generation system are now there – except for exhaustive generation of every possible statement. My task for this week, therefore, is to make as much progress as possible in these two areas. I have no idea how fast/slow these will be, but I’m confident about having something solid to show you all in a week from now. In the mean time, though, here’s some more detail about the latest developments:

Conversation Options

I’ve created a draft list of every single default conversation option in the game. I haven’t actually counted them up but there are several hundred default options, and these will be available in every conversation, as well as another hundred or so “default” options limited to a specific class of NPC (so you can ask a guard about guard duty, an archivist about their archives, etc etc). Here’s a screenshot with an entirely incomplete section of potential default questions, and a gif of looking through the default question options for a whole bunch of conversation options:

ICCC2

ICCC 1

I’m sure I’ll keep adding new questions here, but I’ve built the rest of the technical architecture (i.e. the parts more complex than the lists shown here) in such a way that just adding something to the lists here will implement a new question in all the relevant parts of the game’s code where it should be, and allow me to put in a system for generating that question. You’ll also note the different colours! After some excellent thoughts in a comment last week, there is now a range of knowledge the player can have about a given sentence. A green diamond means you can say it perfectly in that dialect; a red diamond means that there is absolutely no chance you will say it correctly; but the interesting ones are the numbers, which range from 1 -> 9 and mean you have a tiny -> very high chance of saying it correctly. If you select one of those options, a die will be rolled to decide if your character says it correctly. If they do, that sentence is then elevated up to a green diamond; if no, it is reduced by 1 or 2 (we’ll see how this goes in gameplay) making it harder to correctly guess next time you try (since you thought you knew it, but didn’t, so actually have less info than you thought). In terms of how these numbers will go up – learning a single sentence in a dialect will means that X other unknown sentences in that category will be moved upwards by Y values; X and Y will be both dependent on the size of the category. The “greeting” category, for instance, only has three options – “Polite Greeting”, “Neutral Greeting” and “Blunt Greeting”. If those are all at values of 0, and then you hear someone give you a polite greeting so that becomes a 1, the others will also immediately go up to around 0.3, for example. By contrast, the ideology category contains almost two dozen standard entries, so learning from from 0 -> 1 might add a 0.1 onto three or four of the others. This means two things – firstly, some interesting and I think valuable chance-based gameplay where you decide whether or not to risk a sentence you might be able to say correctly. Secondly, the player character’s knowledge of a particular dialect will be a more gradual development process, rather than an absolute (although some things will still immediately move you from “0” to “1” knowledge). I think this is a really good development, and I’m so glad it was suggested last week – it also makes the UI look far more interesting!

Scrolling

The scroll bars in the conversation window now work correctly. I don’t know if any of you have ever tried to program in scroll bars, but these things can be surprisingly nightmarish to code, I’ve found, but they all work rather nicely. Here’s me scrolling through the list of dialects (which is entirely complete for now, but will of course start off almost empty in future versions) and the scroll bar adjusting appropriately. I know it’s only a small thing, but these sorts of UI elements are definitely important when you’re going to have potentially large volumes of stuff to look through. Which leads onto the next section…

ICCC3

Search

On the topic of large volumes of stuff, I’ve also implemented the system for being able to search through a particular block of possible questions and narrow them down based on some typed letters. As you type letters into a particular window, they show up at the top; backspacing then remove them; and the game quickly updates the list of possible questions. Here’s an example of           – I typed quite slowly in this example to show the list shortening, as it shortens quite fast as soon as you’ve got a few letters in there, and then backspaced back and typed in quickly just to demonstrate that the system works effectively. In the future, therefore, even in conversation categories where there might be hundreds of options – towns, artworks, novels, etc – you’ll be immediately able to just type in “Red” to find the “Town of Red Eagle” in a second without having to scroll through potentially a hundred options. I was actually very surprised by how easy this turned out to be – I was expecting implementing search functions with large volumes of entries to take far longer. Here’s a gif of me typing in “when” into the “Past Life” category – this short category is not one you’d necessarily want to search, but it illustrates how the search function works (note the “when” appearing at the top of the window as you type it, and then the questions are narrowed down).

ICCC4

Changing Dialect

You can now change dialect. Selecting a new dialect switches the player’s current_dialect value, and all the conversation options then update based on whether or not you know the new dialect. Fairly simply, but obviously important. For now, all dialect knowledge is totally randomized for the sake of testing – not sure how I’ll leave this for the release. Depends on timing!

Meta-Questions

I’ve also implemented a draft list of meta-questions. There are the “What do you think of X” questions where the full list of such questions slowly expands as the player discovers more and more of the world. As there aren’t too many of these meta-questions, these are just being stored in a separate list. These won’t be present in the 0.8 release, as these need integrating with the system that’s going to replace the encyclopedia in the near future, but the basic implementation is there. This will probably be one of the first things I start doing for 0.9, although since 0.9 will include generating weapons and armour for soldiers and guards, and it has been a long while since I did any artwork, it might be hard to resist starting there…

Metas

What next on conversations?

This coming week I’ll start developing the sentence generation. All the “abstract” dialect generation is in place, so the game can select word elements, appropriate cultural/historical/geographical reference lists, sentence complexity for a dialect, various ways of speaking about various things, and so forth, and so now I need to translate this into actually spawning different sentences! I have a good idea of how to structure this, so it’s time to get started on that.

Other News

A few interesting points of other news! Firstly, in the middle of July I’m co-organizing a quasi-game jam event at the University of York (where I work), which is also something like a hackathon at the same time. If any of you who live in the UK fancy coming up to York, we’d love to see you there! Some information can be found here. I should also say that I made the banner using the excellent REXpaint, which I highly recommend for all your ASCII/ANSI art needs. Let me know if any of you are nearby and fancy coming along! It’s my first time hosting an event of this sort, so we’ll see how it goes…

DDD

Also, today I’m giving a talk at the Computational Creativity and Games Workshop in Paris on some of the more abstract/cultural procedural generation stuff in URR, which will hopefully be going on Youtube; I’ll also 100% be at this year’s US IRDC at NYU! I’ll be in NY on the 6th and 7th, and probably sticking around two more days, and it would be great to see any of you roguelike folk there at the conference. We’ve got a good bunch of talks lining up, and based on previous experience we can fairly expect more people to submit talks just before the event starts, and we’ll have quite a few big-name roguelike developers and hopefully some game design staff from NYU stopping by as well. Unfortunately the timing is less than ideal, since it overlaps with the end of FDG/DiGRA in Dundee (which I’ll also be at, before then sprinting across the ocean on the 5th), so I fear some of the NYU staff who would otherwise attend might be absent. Still, last year’s was the quite success, so I’m excited about attending this year’s! Hope to see some URR fans there.

Conversation Options, Scrolling, Databases

I’m pleased to report a nice big (if two-day delayed) URRpdate this week! Lots of progress has been made in the last fortnight, and now we can scroll through all the standard options for each conversation options, with an appropriate pairing of colours to denote whether you know how to say it in the dialect you’re currently speaking (if you don’t and you select that option, it will say it in your home dialect, thereby “giving you away” somewhat if you pretending to belong to a different culture); and in the future I might add a language layer as well, assuming I come up with a good mechanic for language-learning and language-based gameplay.

So, firstly, here’s now the conversation menu looks now, with and without a scroll bar. I’m still finishing off the coding on the scroll bar as these things are really just remarkably awkward and difficult to program in well, especially when you have options that can take up multiple lines and change size, and be sorted into windows of different sizes depending on the player’s selected options. Nevertheless, screenshots/gifs:

Conv1

Conv2

These are all, of course, only the default options, as the system for implementing extra questions is not yet in place, but will be soon! So as you can see, we’re going for a two-part colour coding here: green and white means that you’ve got the knowledge to say that in the chosen dialect (obviously you can say everything perfectly in your home dialect, otherwise you’d be in serious trouble!), red and grey means you haven’t. For looking at dialects, the currently-selected dialect shows up with a blue diamond and all the other dialects you know anything of have a red ‘X’. When you’re in the “Challenge” and “Smithing” options and the other options that have two windows, selected/rejected options will be displayed the same way; when you’re trading, which has three windows (your trade goods, selected trade, their trade goods), the items in the middle window will have a < or > arrow next to them showing which person of the two trading parties (i.e. you and the person you’re talking to) they came from.

Now, some techy stuff. When the world is generated, the game now has an (in the process of being written) list of every possible question archetype. There will probably be somewhere between one and two hundred default questions, at a guess, and finishing these off is one of my tasks for the coming week. As for questions that are generated? Well, every question of the sort “What do you think of [work of art]?” will simply be a variation of a default “What do you think of a specific work of art?” question, and once that question is learned the player will be able to ask about any work of art. Those meta-level questions are not present in this initial list, since one would never ask “What do you think of a specific work of art?” without stating the work of art in question, but they are also stored, albeit in separate lists. I am still calculating exactly what the best way to store the player’s dialect knowledge of these meta-questions, but I expect we’ll have a large list of meta-level questions – since there aren’t that many (ask about an artwork, a city, a town, a book, a poem, etc) I think they should be stored fine in their own list.

farewell

You’ll note a “gap” between the top and bottom lists; the bottom list is for question topics that only show up when you talk to particular classes of NPC, whereas the top lists apply to everyone. Of the two special instances shown in the above picture, for instance, the “tombs” questions apply to priests and archivists in cathedrals, whilst the “harvest” questions (as you might expect) apply to farmers. In turn, each question in each category has a list added onto the end of it, which contains a set of numbers, relating to which dialects the player does/doesn’t know how to ask that particular question in. This system obviously requires me to type out all the standard question forms – which I’d have to do anyway, regardless of system! – but works very rapidly in the speech system when listing possible statements and whether they can be said in a particular dialect. Upon a particular sentence being selected, the game will then translate the overall question into a specific question for that dialect – so “Who built the tombs?” might become “By the efforts of what craftspeople were these tombs carved?”, or “What people created these great crypts?”, or “Under what ruler were this tombs mined out?”… and so forth, and the same then obviously applies to every possible question, including the generated ones. As well as finishing all the question lists, the other goals for this week are ensuring the scroll bars work correctly, storing the meta-questions, properly allowing the player to switch dialect, and allowing the player to start typing something and then have the list of potential questions adjust themselves based on the “search” – as we discussed before, this is going to be *vital* for some of the really long question lists.

Other Stuff

I gave a talk this last week at the first ever “Poetics of the Algorithm” conference in Liege about various gaming practices that subvert the intended play of games, like hacking, glitch-hunting, speedrunning, adding conducts (e.g. permadeath), modding, etc. It went pretty well, though unfortunately I missed most of the other talks due to other work obligations! The slides are vastly too big (100mb+) to put up here without a lot of effort into slimming them down, but suffice to say I talked about some fantastic glitches like super-swimming…

…and this hilarious memory-modification…

…and some counterstrike surfing (the music is unspeakable on this video, but the video itself is good)…

…and various other comparable practices of in some way “rewriting” the game away from how it was intended to played (I also got in a good mention of the Vaults submission processes in Dungeon Crawl Stone Soup and the massively distributed game design that it creates).

On Monday I’ll be giving a talk about URR at the upcoming Computational Creativity and Games Workshop in Paris (sadly one cannot buy a ticket for only a single day of the main conference it’s a part of, so this is a rather pricey excursion, but I’m generally trying to raise awareness of URR within computer science circles even if that isn’t my academic field, so I don’t mind), and then no more conferences until early August, happily, which will give me time to finish off 0.8 for my intended release date at the end of July. Now, I know I’m not very good at keeping deadlines, and I know putting this out there might be unduly confident, but things are really getting extremely close to completion now, and I think it’s feasible with some serious crunching next month once I get a few academic papers finished and submitted this month. Stay tuned, and see you next week for more URRpdates in the conversation system!