Friends, welcome back! Exciting news this week – an entire other clue type has been completely implemented in the space of the last two weeks. By “implemented” what I mean is that it has been massively expanded and enhanced in detail and variation and gameplay interest, then taken out of the testing file, put in the game, synchronized with the game’s actual generators and data architecture rather than testing or placeholder stuff, expanded and modified in the required ways, and then now able to generate, perfectly, sensible clues – at a range of difficulty levels no less (!) – and have them always generate cool-looking, and usable, items for the player to engage with. Given how long I’ve been working on the rhyming riddles, I’m actually incredibly excited by the ease and speed with which I was able to work these into the game, and it’s so pleasing to see these generating so easily and smoothly in the game. Specifically, it’s the world map clues – these are now just working so well that they’re definitely going to appear alongside the rhyming riddle clues in the 0.11 release, which I’m still really pushing for in 2026 (the grant work I mentioned in the last two entries has largely eased off now, and I was at around 80% development capacity this fortnight, with hopefully 100% resuming in the coming fortnight). I think launching a proof-of-concept quest release with two clue types instead of just one is going to be so much more interesting, and make clear that these are just examples of clue types, not the entire thing. Anyway, point being – major progress this fortnight, so let’s get into it:
World map clues
So, to begin with, at the strategic level, I realise now it’s going to be most interesting if not all clue types appear in all worlds. So if we end up with, say, six easy, six middling, and six hard clue types, then perhaps three of them will be randomly selected at world generation to populate that world with, while the others will be nowhere to be seen. This kind of strategic-level variation is really strong in things like Noita (when it comes to fungal shifts and the formulae for the important alchemical reactions) or Slay the Spire I / II (when it comes to things like selected bosses, or in the sequel, alternate acts), or perhaps most obviously Dungeon Crawl Stone Soup (when it comes to selecting whether swamps / shoals spawns, and whether spider nest / snake pit spawns), and I think there’s a lot of potential here. Point being: not all clue types will appear in each world, but I want to work through the “easy” level ones before we move on. Rather nicely, I do currently have six planned for the “easy” level, although it’s possible of course with playtesting that one or more of them might move around as the years progress. But for now, I have “world map”, “local map”, “rhyming riddle”, “prose riddle”, “abstract image” and “specific image” planned as the six easiest. To remind the reader, here are examples of what each of those might look like, in the order above described:

So: this fortnight I set about adding a tremendous amount of extra detail to, and then integrating, the world map archetype. I really like how both the world map and the local map archetypes look, especially since they use different art styles; part of that is just to aid the player’s recognition, of course, but I also felt like a world map would have a bit more whitespace, be a bit looser and a bit less complete with colour, while for a local map I was slightly inspired by something like landscape painting, and wanting to give a slightly more realistic sense of the actual terrain, which is something that inevitably can’t be perfectly done at a world map level. When I got started this fortnight the world map archetype was looking great and could generate at the basic level shown in the above picture, but as I played around with it what became clear was that I didn’t really have any way to adjust or scale the difficulty up (or indeed down) for this particular clue type, whereas I do have that in place for the rhyming riddles (and will be adding more of that sort in the coming months / years as well). That thus became the main objective of these last two weeks, and I’m extremely happy with all the additional variety I’ve been able to build into the system here; then, in turn, I also synchronized this with the actual game file in order to get these maps generating, and I can now say that the game can successfully generate the material for world map clues for any location with exactly the ease it does that for rhyming riddle clues. I’m also excited about how I might be able to combine these two in interesting ways, but, we’ll get to that in a bit.
So, the first additional challenge I added in this fortnight was the possibility of a map you find being rotated around its axis in order to make it more challenging to identify the location depicted – especially since, of course, the game won’t tell you whether it’s rotated or not. I’ve never actually programmed something precisely like this before, so I took a minute to figure out how to map the x and y coordinates correctly, and then needed to implement a system for adjusting the characters in the strings that store the information for the maps. For instance, if a particular corner of road is stored as “T” then it needs to be changed to something else once it is rotated, and this needed to be addressed for roads and rivers both, since those follow exact paths that need to be reproduced. None of this was too onerous, however, and I set up a system to simply have it cycle through between 0 and 3 rotations depending on what was generated – and assuming the difficulty level of the map allowed it – rather than trying to hand code 2 or 3 rotations at once. I was really happy with these the first time I saw them in place, and I’m confident that even something comparatively simple in gameplay terms as this is actually going to add significant extra difficulty for the player when tackling more advanced world map clues. Of paricular note is the fact the player won’t know when their clues have reached the difficulty that rotations are included, so in the tutorial message for introducing maps (not yet written – but soon!) I’m going to mention, without specifics, that while the first map the player sees is very simple (presumably), other maps they find might be “altered” or “obscured” in various ways. I don’t want to spell it out, as I think part of the interest will be realising these things (for players who don’t read this blog, anyway!), but something like that I would consider sufficient information to give the player, and beyond that, to leave them to figuring stuff out themselves.

As I say, I think this will be a common element for mid-level or hard maps, but another way to add difficulty is not just to sometimes have the map rotated, but also to have the map inverted or reflected as well. While this doesn’t add extra difficulty in the sense that one might still look quite abstractly for related things on the world map before figuring out the orientation, it does add difficulty in the sense that it is no longer an actually accurate depiction of the world map, in the way all the rotations are. I think this will make this one substantially tricky to identify on the world map, even if – in the below example – the player is just looking for features gathered in an area before then working out the exact location being signaled. Given the extra degree of trickiness this add, especially when coupled with other difficulty modifiers as well, this is going to be something for only the hardest possible maps. As noted, I anticipate world maps being overall in the “early game” or “easy” category, but that doesn’t mean they still shouldn’t scale up across a full playthrough. I’d imagine something like in the early game the player encountering lots of easy world map clues and some mid-difficulty world map clues, then in the mid game a much smaller number of world map clues which would mostly be mid-difficulty and a few high-difficulty, and then in the end game it’ll be rare for you to encounter a world map clue, but if you do, it’ll be a maximum difficulty / maximum obscurity one. I don’t want the player to not be able to use the expertise they’ve built up in a clue type as a playthrough proceeds, but I also want to be introducing new clue types as well, and continuing to challenge the player by deepening and complex-ifying existing clue types as they gain that expertise, and continue along a playthrough.

I also came to realise while working on this in the past fortnight that mesas (in deserts), and chasms (in polar regions), weren’t actually registering or recording correctly on the world map generator. This was partly because I’d written the generator actually before adding these terrain features into the world map, and this was further complicated by the fact that pretty much every character on the keyword – numbers, the shift+x stuff above numbers, upper and lower case letters, and punctuation marks – were all being used already to store the strings use to present the world maps to the player (e.g. ‘a’ might be temperate, ‘A’ is temperate forest, ‘b’ is savannah, ‘B’ is savannah forest, and so forth). This meant I didn’t have anything left to use here, unfortunately, so I had to get a bit innovative to find a new way to make these terrain features stored – which was complicated further by the fact that while mesas are single-tile things, chasms are multi-tile things, and need to be depicted corrected as such. So, I created a new system in the world map clue generator that stores mesas and chasms separately, in the latter case noting correctly their orientation, and a subsequent different system for rotating or reflecting them – and their orientation – as is appropriate. This was a bit tricky but the above work set me in good stead for adding this second data system on top of the existing one, and a little bit of playtesting soon demonstrated that things were looking great and coming through exactly how I wanted them to. The mesas use the same 3×3 tiles on the actual world map clues that mountains, volcanoes, and dormant volcanoes use, but in a different colour (orange as opposed to grey, bright red, or dark red), while for chasms I created a new tileset to account for all the different possibilities of how those might end up looking (ensuring they look unlike rivers and roads, and are clearly polar things, but also stand out in both visuals and colours), and I’m very happy with how they came out as well.

The next thing was to allow parts of the map to be omitted in interesting ways. I tested this out first just as an experiment and really liked what I saw, and the extra variety it brought to what will likely be mid-level or mid-game maps, and so wound up coding this in as well. There are a number of patterns, most of which can be implemented on any size of world map note, which remove some areas from the visible map and just leave blank spaces there instead. This will make it again trickier to identify where exactly on the map is being talked about, and does so in a very (I think) aesthetically interesting and pleasing way. However, we needed to avoid the risk of a map just generating in a way that cannot be solved here – and this is true even for maps without this aspect! – so I developed a system to count how many different kinds of symbols are in the visible part of the map, and how many different kinds of them there are, as a way to ensure identifiability – a map must have either three or more distinct symbols aside from the ‘X’, or must have two symbols but both in suitably large number to ensure identifiability on the world map. As for ensuring uniqueness, well, that’s a challenging task, and one that needs doing at some point, though I’m not going to prioritise it for 0.11 – especially in light of some very interesting comment discussion in last week’s blog post! When looking at these you’ll note, also, that sometimes the X can appear outside the parts actually being shown – this was partly because it proved surprisingly tricky and obscure to integrate code to ensure that would be the case anyway, but also because I think it adds interesting variation here as well in a way that doesn’t particularly add difficulty (it adds a tiny, tiny bit, but not much), so I’m happy leaving that in and just treating it as variation in how this element of the world map clues might generate. I love these and think they look incredibly interesting, adding both variety and challenge – in particularly, that bottom-right one would be genuinely quite tough I think! Here then are some examples:

I’ve also added proper damage into the maps. Readers might recall I showed off damaged maps a while ago, and they looked okay, but the more I looked at them, the more they looked a bit rough around the edges, especially local rather than world maps (though it’s world maps we’re talking about here), and I just didn’t like what I was seeing. It also limited the potential to write code to generate damage that covers specific things in specific ways, or doesn’t cover specific things in specific ways. There was a way I could have used the existing damage code for that, but it would have been very computationally slow, and I didn’t like the sound of that at all. As such, I wrote a far more advanced and far cleaner bunch of code for damage visuals on maps, where it selects specific tiles on the map (i.e. each tile being 3×3 ASCII / ANSI characters printed on the map, as one can see clearly in the ‘X’ in the above examples, or the forest icon) to delete, and then deletes those and traces a logical path either to the edge of the note, or simply remains self-contained, and in all cases creates some really nice and logical-looking visuals to give it a sense of organic damage, even if in reality the damage is actually very precisely dealt. This took a bit of time to get going, especially around the edges of the notes where a lot of edge cases – with no pun intended – had to be handled, but once it was going, it honestly looked absolutely great. For me, this looks an order of magnitude better than the old damage visuals, and as I say, it’s far more organic and flexible in terms of both code and design, and also far more readable for the player, too. Here are some lovely examples:

Then, after all these things making the maps harder – I decided I also wanted to add something to make them easier. I felt this would be really important for the first clue(s) of this type the player might encounter, since I always need to keep in mind that the majority of people coming into URR – at least, for now – are going to be coming from the roguelike side of the games roguelike + riddle games combination, rather than the riddle games side. This means I need to make sure that I’m easing players into mechanics which aren’t otherwise found in this genre (aside from somewhat related mechanics or ideas or late-game puzzles in roguelite games like Noita, or similarly genre-blurring things like Blue Prince) by making the initial contacts with these clue types as simple as possible. I think a large world map clue (the smaller ones are by definition harder) for somewhere local to where the player launches their quest from is going to be pretty simple, but I realised I can add another thing to make this even easier – specifically, some way of showing what the colours are of the nation that the world map is showing you a location from. I thought about doing this by having the colours of the actual world map symbols change a bit, but I felt that could be ambiguous, so instead maps can now spawn with splotches or streaks of paint on them, in a 2×2 area, that show the colours of the local nation in question. These have a range of different appearances for two-colour flags and three-colour flags, can correctly take account of whether the nation is a feudal / sedentary, nomadic, or ancient / tribal nation when collecting the appropriate flag information (this sounds trivial but is slightly not), and will appear somewhere on the map in the territory belonging to that nation. Indeed, if the map is showing you a border, it’ll even show you both of them! Here are some examples of how this looks, and I think this is a really nice extra hint for the very earliest clues in this genre – and the tutorial prompt for world map clues (which I haven’t written yet) will probably explicitly make clear what these mean, just to give that last little bit of data for the player to get started with:

And finally, alongside these, I’ve also added the capacity for symbols to be included on the map, instead of actual physical terrain, as another and more obscure way to make a hint. In this model the game finds a 3×3 group of world map areas that have something in common, such as all being the same kind of terrain – e.g. desert, polar, etc – or belong to the same civilization, or are all within the same bioregion. It doens’t try this infinitely, but it does try this around a dozen times for each map, to see whether it can spot a zone that matches the requirements here. Once it has found such a zone, I then wrote a rather complex system for generating a list of all possible symbols within the game’s huge (many many hundreds) database of 7×7 character symbols that might logically go in there, and then it puts them in, and removes whatever was otherwise going to be shown on the map – as long as what gets removed isn’t the ‘X’, of course, and as long as this doesn’t overlap with any of these other special things being added into the map. For example, a theocracy might cause a map to show the top of the staff of the god worshipped in that theocracy; or, a bioregion containing “bison” in the name might cause an image of a bison to appear there; or, an area that is entirely desert might have a bright sun put there instead of this 3×3 box of desert tiles, or entirely forest might gain a tree symbol, or an area that is entirely ocean might have the “waves” symbol put there instead, and so forth. The amusing thing is that I’m not quite sure yet whether this makes a world map clue harder or easier to decipher – on the one hand it removes some visual information, but it adds other kinds of information, but that information is potentially quite obscure – so for now I haven’t attached it to a specific difficulty, and I’ll definitely do some playtesting on this to determine whether it adds (or removes!) difficulty. But, I think these look great, and for now that’s the important thing:

So, with that, the game can now generate a world map clue, at any difficulty, for any location on the map, including checking to ensure the location is actually identifiable from the information we’re giving the player, and including code to ensure that vital information is not being omitted by removing some of the tiles that print, or by adding damage, or whatever else, and it can also add various obscuring elements like the abstract symbols and removed tiles and procedurally generated damage, of course, and add simplifying elements such as a hint to the national colours of the nation depicted in order to really get the player started as easily as possible. Whew. I’m so happy with how these have come out, and really excited to code in the connections between these and riddle clues, e.g. one needs to combine them to figure out what’s being talked about in some contexts. In thinking about this element I’ve realised that I’m going to need to create a more abstract information management architecture here so that when the game wants to create a clue to X, it can disperse that clue (the information) across multiple sources (notes, books, NPCs, whatever), and do so in such a way as to be logical, and solvable, and so forth. That, however, is not a 0.11 requirement, although I might wind up developing some of the early foundations for that when I come to combining the map and riddle clues for 0.11, so I might not – we’ll have to see both a) how insane a technical challenge that proves to be and b) whether or not it proves necessary of the 0.11 release or not. But for now, I really couldn’t be happier with all this massive extra work on the world map clues in this last fortnight, and to have them fully generating and fully implemented on top of that – I’m honestly just having so much fun right now, it’s all so rewarding, and moving at such a great pace. I confess that I’m very proud of what I’ve shown off here this fortnight, and I really hope you all like it as well :).
What next?
So there we are – we’re actually going to have two clue types in 0.11!
As such, it’s interesting as a final point to reflect on the time commitments here. The rhyming riddle generator and integration has taken me over a year, during which I’ve been primarily (though not exclusively) working on it; this, by contrast, took about a fortnight of pretty dedicated and focused work. That is not to suggest that these are inherently easier for the player than the others, since – as shown above – I’ve found a LOT of ways to scale the difficulty up into more obscure maps as the player goes along (removing parts of it, rotating or inverting the map, adding metaphorical rather than physical data, adding artistic license, etc), but from a code point of view, they are certainly vastly less work, even if some decent cleverness was required in the more advanced generation elements I’ve described here. It honestly feels great to have got these in the game, and to have them consistently and always generating correctly no matter where on the world map I point the cursor towards. This also gives me a lot of confidence about what I’ve been saying before, i.e. that the riddle rhymes are, by their nature, the hardest to create of all possible clue types I have planned (from both a creative point of view, and a technical point of view), and all the others should and hopefully will be significantly simpler. That certainly seems to be true so far! And perhaps inevitably, the verbal ones will always wind up being more complex than the visual ones, too, which is probably another factor to always keep in mind. Anyway – point is that this fortnight has been another huge leap forward, and I’m really excited to see what the coming fortnight yields. As ever, if you think this is cool, please do think about sharing it around online with anyone or any community that might think this stuff is pretty neat, and please do let me know what you think in the comments section. Thanks as ever for reading, everyone, and I’ll see you in a fortnight!
