Hello everyone and welcome back – to one of the largest updates in recent memory. An absolute ton of stuff has been programmed in the last fortnight and it’s really exciting, comprehensive, and in large part, very very novel. Suddenly another huge element of the 0.11 release is just… well, just done, and now I just need to work on implementing and integrating a few other pieces to get the thing finished and out, and suddenly we’ll have the first procedurally-generated riddles being entirely playable and decipherable. Specifically, everything in this part fortnight has been focused on concluding the journal, but also dealing with a whole bunch of cool systems that are related to the journal, and honestly the whole thing has come out just so much better than I could have ever imagined. There is definitely something really, really cool here, and I’m excited to tell you about it :). So let’s get into it:

Finishing Narrative Pages

Firstly, I’m pleased to say that I’ve got all the code for adding the player’s narrative of what they actually do in a playthrough successfully implemented into the journal function. There are some functions for things which literally don’t exist in the game yet – like combat – which I will come to later (and cannot accurately predict now and hence code in advance), but everything relevant in 0.11 to the player’s journey can now be reflected in the journal. Most of these are things you can presently do in the game, like moving into a new bioregion, or a new civilization, or entering a building (this one was surprisingly complex to ensure logical sentences for all the time), or looking at a unique object (like a relic), or check out a statue or a throne or whatever it might be. A handful of the triggers are not yet in the game, as they’re being worked on – such as reading a note, for example, or using a key – but I know enough about how those systems are going to work to implement the required code for those sentences to appear in the journal, even if the event triggers to actually do that are things I’ll be adding in the coming months as we approach the end of the year. One of the hardest ones here was, as above, for entering buildings, because those buildings need to be contextualized in the journal depending on where exactly the building is (a town, a city, etc), and sometimes one might have multiple of one type of building within a city or town or even within a single map grid, so those needed to be distinguished somehow, and sometimes it could be a bit confusing, e.g. since a monastery is both a location on the world map (the context) and a physical building within that location, so those needed to be distinguished as well (the same is true for castles in cities, i.e. both a district and a building). I also needed to add the option for it registering your exploring of things which aren’t buildings, but have delineated spaces, like memorials or (in the future) things like rock gardens or hedge mazes; so there’s now some appropriate functionality which defines an area of the map grid that counts as that “place”, and once you’re in there it’ll check if it has created the “I visited this thing for the first time” message in the journal, and if it hasn’t, it’ll be added. Nevertheless, I think I’ve got all those sorted now, and with the additional code for the anticipated stuff in the coming months, these pages are now looking fab!

Finishing Language Pages

Next, it is with significant excitement that I can say the language pages are likewise basically finished! This is a huge leap forward, actually, and one I hadn’t anticipated implementing fully for 0.11 – but once I’d got partway through, it was hard to not go the whole way, and so now all the relevant mechanics for tracking and updating one’s translations of various ancient languages is in place. The first things to add were ensuring that new words continue to be added from longest to shortest, which didn’t take too long (although was slightly trickier than anticipated due to some of the complexities in how the length of the ancient word for an English word is calculated and stored) and then I got onto the task of allowing the player to actually interact with the journal. As noted in the previous entry on this, on the language pages the player has a little arrow which runs up and down the left-hand side of the journal, and this can now be used to select the word you want to take a look at. Before this could happen, however, I need to lay some pretty substantial foundations. There are now two dictionaries for each generated language – one where the English words are the keys, and one where the invented-script-words are the keys. This might seem unnecessary but I realised that doing it otherwise would put an upper cap on how many words I could have in one of the ancient languages before noticeable delay would appear from the player sometimes having to search the English-words dictionary to find which one correlated to the appropriate script-word, rather than just being able to jump between the two for easy finding, depending on whether the game needs to look up an English word (and find its script-word equivalent), or look up a script-word (and find its English word equivalent). This didn’t take too much fiddling, however, and with that done, I could then sit down to work on the system for inputting guesses.

Sometimes guesses are going to be put in basically by the player saying “yes, please update my guesses”. For example, imagine you have no guesses at all in Language X, read a book that lists 52 translations the author believes are correct, and then a prompt would appear saying “Update translations with all in this book?”. Hit yes, and they’ll be added in (which is not say they’re all correct, of course!). I’ll also probably add other options, such as “Yes”, vs “Only add empty entries”, vs some other things I’ll decide once we have language translation books spawning with content. Other times, though, I would assume the player will be manually inputting something they think is correct based on context and deduction, so we need to be sure to facilitate the latter version of that. I think what we have now is pretty efficient and crisp and clean, and I love how the pages develop once you’ve got a bunch of clues in. Basically when you’re on language pages of your journal, the game gives you this little arrow on the left-hand side, and you can scroll up and down the words you’re aware of (ordered by length) and then press Enter (or keypad enter) which will then bring up this little window on the right-hand side, which shows you the word you’re putting in a guess for, lets you type your hypothesis (any word!), lets you use Tab to toggle between the colours for certainties (the idea being that green means “pretty certain”, yellow means “maybe?” and red means “possibly?”), and then you press enter and your journal is updated, as are both the dictionaries, with your current hypothesis. When you then go back into that word to take another guess, it’ll also list all the previous guesses you had, with the most recent one at the top, with the relevant colours for the degree of certainty you put those guesses in with. Here’s how these now look!

I think this is fab. As an aside, it is worth recapping that the ancient languages in URR are not substitution ciphers. I recognise the use of substitution ciphers as a pretty easy way to hide potentially important information in plain sight in a game, but the problem is that they’re just as easy to solve as they are to make. There are solvers online where you put in a ciphertext and it can make reasonably sensible deductions about what the plaintext might be, and even without those, a large enough text (in English) of course, inevitably, gives you hints about what certain letters are from two-letter words (which contain certain vowels and letters far more than others) and three-letter words (i.e. “the”) from which one can generally deduce the “e” character, and then take the rest from there. Indeed, in my playthrough of Environmental Station Alpha, for example, I really enjoyed the super-hidden post-endgame content stuff, but the fact that part of it was a substitution cipher which – when cracked – had to be manually applied over and over again really soured me on the whole thing. I’m also playing another game right now which, although I’m again really enjoying it, has again fallen into the substitution cipher trap. Deciphering a cipher whose key you have identified is simply not interesting in gameplay terms. Anyway, the point of this minor digression into the ephemera of ludic cryptography is to make the point: substitution ciphers are not interesting gameplay, and URR’s ancient languages are not substitution ciphers. “Sun” might in an ancient language be “$*9”, let us say, but “Sunrise” is not “$*9xxxx”, where the xs are other characters, because the $ and * and 9 in the original do not correlate in any way to “S”, “u”, and “n”. Instead, if “Sun” is indeed “$*9”, “Sunrise” might end up being “))-76=1” (using numerals and punctuation here in the stead of actual invented characters). This means the player will never be tasked with some tedious cipher decipherment (which is generally a yawn-fest) and instead we’ll have something far more interesting, and something which can only be solved in-game using the available materials (and one’s brain!). I’ll probably need a way to convey this information to the player early-on, but anyway: no substitution ciphers here. The ancient languages are English, but heavily obfuscated, and hence relying on in-game information, logical deductions, etc, rather than decipherment in the most formal sense.

Oh, AND, as part of this, tablets have now undergone some major changes! Realistically right now (in 0.10.4) you’re only going to find a tablet in the starting museum (and I suppose others as well, if you want to go looking) but this was, again, a sensible thing to do now while my brain was in the language coding stuff, rather than coming back to it later and trying to remind myself how the hell I’d implemented the whole thing. The first step here was to ensure that tablets don’t continually regenerate themselves each time you look at them (this is a classic thing that has to be done for every generator when shifting from “testing the generator” to “integrating the generator into the game”), which took a while as it always does, but once that was done I could then pay proper attention to getting the language overlay going. This means that when the tablet is printed for the first time – since the tablet cannot change – the game creates a new list within the tablet and lists every language-word printed on the tablet, and its location in x and y coordinates. Then, when you’re looking at a tablet and you press ‘5’ to translate (which is the same as ‘read’ for books and scrolls), the game cycles through all those words that have been listed as being in the tablet and their exact locations, and checks in your dictionary for the relevant language to see whether or not you’ve put in any guesses. If the dictionary contains only the set of symbols it knows there’s nothing there and so it prints nothing, but if there’s at least one guess there, it extracts the colour and the guessed word, figures out where it should be printed based on the language-word location (and adds some blank space before or after if required because the guess-word is shorter than the language-word), and then prints them all – and, suddenly, you’re looking at a draft translation! I first had it appear like this…

…and that was all well and good, except that some colours (especially red) are hard to read against grey backgrounds. Fine for darker grey, but the grey background of a tablet gets lighter as you move up in quality, so it was tough on these. Instead, then, I decided to adjust how the guessed words looked, and went with this instead:

This is a lot easier to read, which is very important, but I also liked this variation because it felt like it somehow conveyed that these were not fixed things, somehow? That you weren’t actually looking at the physical tablet when you see these words (whereas the previous version does sort of imply that, by adding the coloured text over the background colour of the tablet), but rather you’re superimposing them in your brain, or using your notes, or whatever else. On consideration, then, I definitely like this model significantly more, and so this is the one I’ve decided to stick with. The next step, then, was to go even further, and make each stone tablet an interactive thing where you could navigate around and select which word you want to alter and adjust a translation for. I think this’ll be something really interesting and novel once you’ve got a few words for a language you’re confident about, looking over the tablets you’ve found in that language will definitely suggest others, and you’ll be able to look at the grammar of what you have translated and see whether or not it’s actually making any sense or not. This is a pretty novel translation system – and happily not a tedious substitution-cipher translation game – precisely because it’s far more human and natural and organic, and while it’s something like what you get in Chants of Senaar (I believe – I haven’t played it) and Epigraph (again, haven’t yet played it), it’s also distinct, and will fit really well into a world in which you can be continually gaining new language knowledge, but also new other knowledge that might help (so for instance if you know Civ X fought a war with Civ Y and you find a tablet discussing a war, you might be able to take a shot at some words in the tablet based on the historical knowledge you’ve gained elsewhere). Anyway, how this works is that you get two little arrows (like the side one in the journal) when you enter this mode, and you can use the arrow keys to scroll around the tablet, selecting any word, and again – like in the journal – pitching a translation, and then once it’s done, the game immediately update all instances of that word on the tablet. This screen, then, looks like this, and you’ll see some of my guessed translations here are clearly wrong:

…and here’s a gif how this works from scratch with a completely fresh language you’ve never seen before, on a fresh tablet you haven’t yet some anything with:

…and how it works editing something where you already have a bunch of guesses in place, and then toggling between the two view options:

This is SO exciting! I thought this was going to be some kind of giga-task, but it took only around a day of full committed work (i.e. the equivalent of a dawn-to-midnight, I mean, not a “working day” amount), which maybe sounds like a lot, but honestly went so much faster than I’d ever anticipated. Over the next week I did need to finish off and polish just a few elements of the system to, as ever, handle more unusual scenarios and edge cases and the like, but essentially this was all done across two half-days of solid concerted work. I’m now pretty confident it is bug-free, since I’ve tried it out in such a range of scenarios, but when you load up a new game in 0.10.4 and check out the museum, you’ll be able to see a tablet there generated in the text of one of the ancient nations within that world, and even though it’s not in your inventory, you can of course still use that tablet to adjust and hypothesize translations. I think the user interface here is really smooth and clean and intuitive, and I think the novelty of the system, as well, should really grab players’ interest when they discover the ability to do this, and figure out what it means (though again, I think I need to explicitly state somewhere that languages aren’t substitution ciphers, in order to make it clear that there’s a deeper game of translation and knowledge at work here). So with this done, ancient languages are pretty much ready to go, and that means tablets – like books! – are ready to be fully generated with their text (scrolls aren’t quite there yet because I haven’t yet created the code for actually reading one, but we’ll get to that soon enough). Honestly, though, I think these are two of the coolest gifs I’ve ever made. I’m so excited by this. This rules. With all the journal things, I can really see this vast game of knowledge, mystery, and exploration, beginning to open up… and it’s very thrilling, honestly.

Finishing(ish) Category Pages

Next, I’ve mostly finished off the pages that track the categories the player has selected to group together things that might be important and related to each other. When I showed these off last time they were in quite an early state, with the selected and coloured symbol up at the top, then some basic information of the items grouped into that group (the item names, basically). This looked like this:

…which would happen after you assigned an item to a category, like this:

This appearance in the journal is fine, I guess, but lacks some excitement. I’ve therefore made two changes. Firstly, the symbol you’ve chosen for that particular set of associated things is now framed within a black background, and this really helps them all stand out from the pages a great deal more. It also makes clear that each set of pages is something really distinct from all the others, since the first set of pages (the narrative) is all just written flowing text without pictures or symbols, then the second set of pages has all the symbols you’ve chosen to assign things to different categories or clue groupings, then the third set of pages has flags and religious symbols and the like for factions and grouping, the fourth set has all the language material (so that’s very identifiable), and the fifth set have locks, which have a distinct visual style and aesthetic I showed off previously. The second change was to give far more detail about each of the things added to your list of things which you think are related in some way. Rather than just saying the item’s name, the game can now generate a full sentence of description for any item in the game (this’ll be useful for many other things later like clues, book/scroll/tablet content, a redone conversation system, and much else too), and it puts that into the journal instead. This feels far more organic and just far more interesting as well as realistic, and I really like how the pages now look as a result – they also give a sense of being more like “taking notes” which one might change and adjust, whereas other pages – e.g. the narrative pages and the faction pages – are a slightly more formal recounting of specific events. So here’s how these now look, with some examples of some groupings I put together:

Super, super happy with how these now look! I’ll also later need to add in some functionality for noting in the notes if the nature of the item has changed – e.g. a bottle of alcohol in your inventory is now empty – and also some method of noting that you no longer have the thing in your inventory that you were categorising. This also raises the question of allowing the player to categorise things which aren’t in their inventory, and I think we need this! If you look at a door, and the door has two ancient sigils etched on it, those are going to be relevant to something, so that needs to be add-able as well. And what about adding places, for example, or people? All these larger options are definitely going to need to come in (probably via a “Memory” function alongside the “Inventory” function for things which are fixed in place, but you have seen?), but just for the time being, you can now add and categorise anything in your inventory, and the journal will reflect the groupings you’ve put into things. Big progress!

0.10.4b Release

AND – with all these huge additions to the journal, and close to sixty more bugs fixed (full list coming in a later entry once I’ve hopefully fixed even more), 0.10.4b is now out, and should be a great deal more stable than the 0.10.4 release. I’ve been spending hours this past fortnight doing everything I can think of to try to elicit a crash or a freeze, and I haven’t been able to create any more, so I think things are looking pretty good at the moment. I also have to give a huge and sincere thank you to all who posted here or emailed me or DM’d me on Twitter etc with comments and feedback and bug reports, it’s insanely helpful and incredibly appreciated. If you want to, go check it out, and please do report any new bugs you might find, or just any thoughts on user interface, playability, or just the usual stuff. In many ways 0.10.4(b) is now inching genuinely quite close to the 0.11 release, so this is all super important stuff that I’d love to get nailed down before the release. More generally, I’ll also be looking for dedicated 0.11 playtesters soon to playtest it before release in a closed beta, so if this interests you, just shoot me an email at this website address (the bits between “www.” and “.com”) at gmail, and let me know :). You’ll get an acknowledgement in the game and everything!

What next?

And there we go! With the exception of just a handful of narrative events I can’t get program into the journal until the things which trigger them are actually implemented – e.g. correctly using a key, correctly opening a lock, entering a secret area, and the like – and the rest of the faction information pages (which I’ll be getting to soon and won’t be hugely demanding), the player’s journal is now extremely detailed, very flexible, and indeed mightily close to being done. This is a really big and exciting milestone, I think, as finally we have a system that reactively records and tracks everything the player has done, everything they’ve seen, everything the player has concluded or categorized about the game world, and presents it all in what (I think) is a logical and easy-to-understand way. It also does away with the non-diegetic encyclopedia idea once and for all, and instead relies on things the player character would realistically make notes on and keep track of, and also on the player’s growing collection as they advance in the game of books, notes, and other resources. It’s totally objective in the sense it does just track what has happened to the player and what they’ve done, but also allows for subjectivity and ambiguity – the difference between recording “The Sixth War of X was in Year Y” and “I read a book that said the Sixth War of X was in Year Y”. The encyclopedia function used to the former, but this one does the latter, and should be so much for interesting for it.

Anyway – as ever, if you enjoyed the read, please do leave a comment, and please do think about sharing it around on the web with roguelike-interested folks! Thanks as ever for reading everyone, I’m super proud of this particular update, and I hope you all enjoyed the read. See you all in a fortnight!

Leave a Reply

Your email address will not be published. Required fields are marked *